summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBar.aidl5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java7
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java5
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerService.java12
-rw-r--r--services/core/java/com/android/server/wm/RecentsAnimationController.java9
7 files changed, 62 insertions, 1 deletions
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 7e501d27d30f..c715577cb7d2 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -167,4 +167,9 @@ oneway interface IStatusBar
* Notifies System UI that the display is ready to show system decorations.
*/
void onDisplayReady(int displayId);
+
+ /**
+ * Notifies System UI whether the recents animation is running or not.
+ */
+ void onRecentsAnimationStateChanged(boolean running);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index f97be1ea8358..6329af56077b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -115,6 +115,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
private static final int MSG_SHOW_CHARGING_ANIMATION = 44 << MSG_SHIFT;
private static final int MSG_SHOW_PINNING_TOAST_ENTER_EXIT = 45 << MSG_SHIFT;
private static final int MSG_SHOW_PINNING_TOAST_ESCAPE = 46 << MSG_SHIFT;
+ private static final int MSG_RECENTS_ANIMATION_STATE_CHANGED = 47 << MSG_SHIFT;
public static final int FLAG_EXCLUDE_NONE = 0;
public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0;
@@ -281,10 +282,16 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
* @see IStatusBar#onDisplayReady(int)
*/
default void onDisplayReady(int displayId) { }
+
/**
* @see DisplayManager.DisplayListener#onDisplayRemoved(int)
*/
default void onDisplayRemoved(int displayId) { }
+
+ /**
+ * @see IStatusBar#onRecentsAnimationStateChanged(boolean)
+ */
+ default void onRecentsAnimationStateChanged(boolean running) { }
}
@VisibleForTesting
@@ -785,6 +792,14 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
}
}
+ @Override
+ public void onRecentsAnimationStateChanged(boolean running) {
+ synchronized (mLock) {
+ mHandler.obtainMessage(MSG_RECENTS_ANIMATION_STATE_CHANGED, running ? 1 : 0, 0)
+ .sendToTarget();
+ }
+ }
+
private void handleShowImeButton(int displayId, IBinder token, int vis, int backDisposition,
boolean showImeSwitcher) {
if (displayId == INVALID_DISPLAY) return;
@@ -1071,6 +1086,11 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
mCallbacks.get(i).onDisplayReady(msg.arg1);
}
break;
+ case MSG_RECENTS_ANIMATION_STATE_CHANGED:
+ for (int i = 0; i < mCallbacks.size(); i++) {
+ mCallbacks.get(i).onRecentsAnimationStateChanged(msg.arg1 > 0);
+ }
+ break;
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 17f0d5a79034..38ea9f8d8063 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -2154,6 +2154,11 @@ public class StatusBar extends SystemUI implements DemoMode,
}
}
+ @Override
+ public void onRecentsAnimationStateChanged(boolean running) {
+ setInteracting(StatusBarManager.WINDOW_NAVIGATION_BAR, running);
+ }
+
protected @TransitionMode int computeStatusBarMode(int oldVal, int newVal) {
return computeBarMode(oldVal, newVal);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
index b049632942cf..84a7d4f0ff15 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
@@ -358,4 +358,11 @@ public class CommandQueueTest extends SysuiTestCase {
waitForIdleSync();
verify(mCallbacks).onDisplayRemoved(eq(SECONDARY_DISPLAY));
}
+
+ @Test
+ public void testOnRecentsAnimationStateChanged() {
+ mCommandQueue.onRecentsAnimationStateChanged(true);
+ waitForIdleSync();
+ verify(mCallbacks).onRecentsAnimationStateChanged(eq(true));
+ }
}
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index 7734d6bd30a7..a93d2b8b6fb9 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 @@ public interface StatusBarManagerInternal {
* @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 b2d7084fcd05..112104d073b0 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -453,8 +453,18 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
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) {}
}
+
}
};
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index d2c510fa8902..c03dabe660ad 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 android.view.SurfaceControl.Transaction;
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 class RecentsAnimationController implements DeathRecipient {
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 @@ public class RecentsAnimationController implements DeathRecipient {
mRunner = remoteAnimationRunner;
mCallbacks = callbacks;
mDisplayId = displayId;
+ mStatusBar = LocalServices.getService(StatusBarManagerInternal.class);
}
public void initialize(int targetActivityType, SparseBooleanArray recentTaskIds) {
@@ -381,6 +384,9 @@ public class RecentsAnimationController implements DeathRecipient {
mMinimizedHomeBounds);
mService.mWindowPlacerLocked.performSurfacePlacement();
+
+ // Notify that the animation has started
+ mStatusBar.onRecentsAnimationStateChanged(true /* running */);
}
@VisibleForTesting
@@ -594,6 +600,9 @@ public class RecentsAnimationController implements DeathRecipient {
.mAppTransition.notifyAppTransitionFinishedLocked(mTargetAppToken.token);
}
}
+
+ // Notify that the animation has ended
+ mStatusBar.onRecentsAnimationStateChanged(false /* running */);
}
void scheduleFailsafe() {