Notify SysUI of the recents animation so it can disable autohide
- When swiping up from an immersive sticky app, ensure that we don't
restore the hidden bar states while swiping up (only update afterwards)
Bug: 130020567
Test: atest CommandQueueTest
Test: Swipe up from an immersive app into launcher while the bars are
showing
Change-Id: I1c8fb3c0df5c1adc7c73079189f5b45e84d1ef45
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index 7734d6b..a93d2b8 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -108,4 +108,9 @@
* @param displayId display ID
*/
void onDisplayReady(int displayId);
+
+ /**
+ * Notifies System UI whether the recents animation is running.
+ */
+ void onRecentsAnimationStateChanged(boolean running);
}
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index b2d7084..112104d 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -453,9 +453,19 @@
if (mBar != null) {
try {
mBar.onDisplayReady(displayId);
- } catch (RemoteException ex) { }
+ } catch (RemoteException ex) {}
}
}
+
+ @Override
+ public void onRecentsAnimationStateChanged(boolean running) {
+ if (mBar != null) {
+ try {
+ mBar.onRecentsAnimationStateChanged(running);
+ } catch (RemoteException ex) {}
+ }
+
+ }
};
private final GlobalActionsProvider mGlobalActionsProvider = new GlobalActionsProvider() {
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index d2c510f..c03dabe 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -56,6 +56,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.LocalServices;
import com.android.server.inputmethod.InputMethodManagerInternal;
+import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;
import com.android.server.wm.utils.InsetUtils;
@@ -87,6 +88,7 @@
public @interface ReorderMode {}
private final WindowManagerService mService;
+ private final StatusBarManagerInternal mStatusBar;
private IRecentsAnimationRunner mRunner;
private final RecentsAnimationCallbacks mCallbacks;
private final ArrayList<TaskAnimationAdapter> mPendingAnimations = new ArrayList<>();
@@ -308,6 +310,7 @@
mRunner = remoteAnimationRunner;
mCallbacks = callbacks;
mDisplayId = displayId;
+ mStatusBar = LocalServices.getService(StatusBarManagerInternal.class);
}
public void initialize(int targetActivityType, SparseBooleanArray recentTaskIds) {
@@ -381,6 +384,9 @@
mMinimizedHomeBounds);
mService.mWindowPlacerLocked.performSurfacePlacement();
+
+ // Notify that the animation has started
+ mStatusBar.onRecentsAnimationStateChanged(true /* running */);
}
@VisibleForTesting
@@ -594,6 +600,9 @@
.mAppTransition.notifyAppTransitionFinishedLocked(mTargetAppToken.token);
}
}
+
+ // Notify that the animation has ended
+ mStatusBar.onRecentsAnimationStateChanged(false /* running */);
}
void scheduleFailsafe() {