Make Some APIs in CommandQueue aware of multi-display (3/N)
By this CL, we could dispatch Callback to fragments on the specified
display. I also add some annotations for documenting.
TODO: 1. add tests for multi-display.
2. make registerStatusBar be an IStatusBar API to propagate the
information when a display is added or in the initial step.
3. Introduce AutoHideController
Test: atest SystemUiTests
Bug: 117478341
Change-Id: I864600f929c1d0c8aa39274f30c17b213b754d86
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
index dc11b4c..19a7cea 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
@@ -132,9 +132,9 @@
}
@Override
- public void disable(int state1, int state2, boolean animate) {
+ public void disable(int displayId, int state1, int state2, boolean animate) {
final boolean disabled = (state2 & DISABLE2_GLOBAL_ACTIONS) != 0;
- if (disabled == mDisabled) return;
+ if (displayId != mContext.getDisplayId() || disabled == mDisabled) return;
mDisabled = disabled;
if (disabled && mGlobalActions != null) {
mGlobalActions.dismissDialog();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
index 34d30fe..087a826 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
@@ -215,7 +215,10 @@
}
@Override
- public void disable(int state1, int state2, boolean animate) {
+ public void disable(int displayId, int state1, int state2, boolean animate) {
+ if (displayId != getContext().getDisplayId()) {
+ return;
+ }
state2 = mRemoteInputQuickSettingsDisabler.adjustDisableFlags(state2);
final boolean disabled = (state2 & DISABLE2_QUICK_SETTINGS) != 0;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
index f13b565..0fc4fe7 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
@@ -54,8 +54,10 @@
}
@Override
- public void appTransitionFinished() {
- mImpl.onAppTransitionFinished();
+ public void appTransitionFinished(int displayId) {
+ if (mContext.getDisplayId() == displayId) {
+ mImpl.onAppTransitionFinished();
+ }
}
public void growRecents() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 95019ee..6a01563 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -16,18 +16,30 @@
package com.android.systemui.statusbar;
+import static android.app.StatusBarManager.DISABLE2_NONE;
+import static android.app.StatusBarManager.DISABLE_NONE;
+import static android.view.Display.DEFAULT_DISPLAY;
+
import static com.android.systemui.statusbar.phone.StatusBar.ONLY_CORE_APPS;
import android.app.StatusBarManager;
+import android.app.StatusBarManager.Disable2Flags;
+import android.app.StatusBarManager.DisableFlags;
+import android.app.StatusBarManager.WindowType;
+import android.app.StatusBarManager.WindowVisibleState;
import android.content.ComponentName;
+import android.content.Context;
import android.graphics.Rect;
import android.hardware.biometrics.IBiometricServiceReceiverInternal;
+import android.hardware.display.DisplayManager;
+import android.inputmethodservice.InputMethodService.BackDispositionMode;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.util.Pair;
+import android.util.SparseArray;
import androidx.annotation.VisibleForTesting;
@@ -47,7 +59,8 @@
* coalescing these calls so they don't stack up. For the calls
* are coalesced, note that they are all idempotent.
*/
-public class CommandQueue extends IStatusBar.Stub implements CallbackController<Callbacks> {
+public class CommandQueue extends IStatusBar.Stub implements CallbackController<Callbacks>,
+ DisplayManager.DisplayListener {
private static final int INDEX_MASK = 0xffff;
private static final int MSG_SHIFT = 16;
private static final int MSG_MASK = 0xffff << MSG_SHIFT;
@@ -112,8 +125,8 @@
private final Object mLock = new Object();
private ArrayList<Callbacks> mCallbacks = new ArrayList<>();
private Handler mHandler = new H(Looper.getMainLooper());
- private int mDisable1;
- private int mDisable2;
+ /** A map of display id - disable flag pair */
+ private SparseArray<Pair<Integer, Integer>> mDisplayDisabled = new SparseArray<>();
/**
* These methods are called back on the main thread.
@@ -121,17 +134,63 @@
public interface Callbacks {
default void setIcon(String slot, StatusBarIcon icon) { }
default void removeIcon(String slot) { }
- default void disable(int state1, int state2, boolean animate) { }
+
+ /**
+ * Called to notify that disable flags are updated.
+ * @see IStatusBar#disable(int, int, int).
+ *
+ * @param displayId The id of the display to notify.
+ * @param state1 The combination of following DISABLE_* flags:
+ * @param state2 The combination of following DISABLE2_* flags:
+ * @param animate {@code true} to show animations.
+ */
+ default void disable(int displayId, @DisableFlags int state1, @Disable2Flags int state2,
+ boolean animate) { }
default void animateExpandNotificationsPanel() { }
default void animateCollapsePanels(int flags, boolean force) { }
default void togglePanel() { }
default void animateExpandSettingsPanel(String obj) { }
- default void setSystemUiVisibility(int vis, int fullscreenStackVis,
+
+ /**
+ * Called to notify visibility flag changes.
+ * @see IStatusBar#setSystemUiVisibility(int, int, int, int, int, Rect, Rect).
+ *
+ * @param displayId The id of the display to notify.
+ * @param vis The visibility flags except SYSTEM_UI_FLAG_LIGHT_STATUS_BAR which will
+ * be reported separately in fullscreenStackVis and dockedStackVis.
+ * @param fullscreenStackVis The flags which only apply in the region of the fullscreen
+ * stack, which is currently only SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.
+ * @param dockedStackVis The flags that only apply in the region of the docked stack, which
+ * is currently only SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.
+ * @param mask Which flags to change.
+ * @param fullscreenStackBounds The current bounds of the fullscreen stack, in screen
+ * coordinates.
+ * @param dockedStackBounds The current bounds of the docked stack, in screen coordinates.
+ */
+ default void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
}
- default void topAppWindowChanged(boolean visible) { }
- default void setImeWindowStatus(IBinder token, int vis, int backDisposition,
- boolean showImeSwitcher) { }
+
+ /**
+ * Called to notify top app window changes.
+ * @see IStatusBar#topAppWindowChanged(int, boolean)
+ *
+ * @param displayId The id of the display to notify.
+ * @param visible {@code true} to show menu button.
+ */
+ default void topAppWindowChanged(int displayId, boolean visible) { }
+
+ /**
+ * Called to notify IME window status changes.
+ *
+ * @param displayId The id of the display to notify.
+ * @param token IME token.
+ * @param vis IME visibility.
+ * @param backDisposition Disposition mode of back button. It should be one of below flags:
+ * @param showImeSwitcher {@code true} to show IME switch button.
+ */
+ default void setImeWindowStatus(int displayId, IBinder token, int vis,
+ @BackDispositionMode int backDisposition, boolean showImeSwitcher) { }
default void showRecentApps(boolean triggeredFromAltTab) { }
default void hideRecentApps(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) { }
default void toggleRecentApps() { }
@@ -140,12 +199,56 @@
default void dismissKeyboardShortcutsMenu() { }
default void toggleKeyboardShortcutsMenu(int deviceId) { }
default void cancelPreloadRecentApps() { }
- default void setWindowState(int window, int state) { }
+
+ /**
+ * Called to notify window state changes.
+ * @see IStatusBar#setWindowState(int, int, int)
+ *
+ * @param displayId The id of the display to notify.
+ * @param window Window type. It should be one of {@link StatusBarManager#WINDOW_STATUS_BAR}
+ * or {@link StatusBarManager#WINDOW_NAVIGATION_BAR}
+ * @param state Window visible state.
+ */
+ default void setWindowState(int displayId, @WindowType int window,
+ @WindowVisibleState int state) { }
default void showScreenPinningRequest(int taskId) { }
- default void appTransitionPending(boolean forced) { }
- default void appTransitionCancelled() { }
- default void appTransitionStarting(long startTime, long duration, boolean forced) { }
- default void appTransitionFinished() { }
+
+ /**
+ * Called to notify System UI that an application transition is pending.
+ * @see IStatusBar#appTransitionPending(int).
+ *
+ * @param displayId The id of the display to notify.
+ * @param forced {@code true} to force transition pending.
+ */
+ default void appTransitionPending(int displayId, boolean forced) { }
+
+ /**
+ * Called to notify System UI that an application transition is canceled.
+ * @see IStatusBar#appTransitionCancelled(int).
+ *
+ * @param displayId The id of the display to notify.
+ */
+ default void appTransitionCancelled(int displayId) { }
+
+ /**
+ * Called to notify System UI that an application transition is starting.
+ * @see IStatusBar#appTransitionStarting(int, long, long).
+ *
+ * @param displayId The id of the display to notify.
+ * @param startTime Transition start time.
+ * @param duration Transition duration.
+ * @param forced {@code true} to force transition pending.
+ */
+ default void appTransitionStarting(
+ int displayId, long startTime, long duration, boolean forced) { }
+
+ /**
+ * Called to notify System UI that an application transition is finished.
+ * @see IStatusBar#appTransitionFinished(int)
+ *
+ * @param displayId The id of the display to notify.
+ */
+ default void appTransitionFinished(int displayId) { }
default void showAssistDisclosure() { }
default void startAssist(Bundle args) { }
default void onCameraLaunchGestureDetected(int source) { }
@@ -176,18 +279,43 @@
}
@VisibleForTesting
- public CommandQueue() {
+ public CommandQueue(Context context) {
+ context.getSystemService(DisplayManager.class).registerDisplayListener(this, mHandler);
+ // We always have default display.
+ setDisabled(DEFAULT_DISPLAY, DISABLE_NONE, DISABLE2_NONE);
}
+ @Override
+ public void onDisplayAdded(int displayId) { }
+
+ @Override
+ public void onDisplayRemoved(int displayId) {
+ synchronized (mLock) {
+ mDisplayDisabled.remove(displayId);
+ }
+ }
+
+ @Override
+ public void onDisplayChanged(int displayId) { }
+
+ // TODO(b/118592525): add multi-display support if needed.
public boolean panelsEnabled() {
- return (mDisable1 & StatusBarManager.DISABLE_EXPAND) == 0
- && (mDisable2 & StatusBarManager.DISABLE2_NOTIFICATION_SHADE) == 0
+ final int disabled1 = getDisabled1(DEFAULT_DISPLAY);
+ final int disabled2 = getDisabled2(DEFAULT_DISPLAY);
+ return (disabled1 & StatusBarManager.DISABLE_EXPAND) == 0
+ && (disabled2 & StatusBarManager.DISABLE2_NOTIFICATION_SHADE) == 0
&& !ONLY_CORE_APPS;
}
public void addCallback(Callbacks callbacks) {
mCallbacks.add(callbacks);
- callbacks.disable(mDisable1, mDisable2, false /* animate */);
+ // TODO(b/117478341): find a better way to pass disable flags by display.
+ for (int i = 0; i < mDisplayDisabled.size(); i++) {
+ int displayId = mDisplayDisabled.keyAt(i);
+ int disabled1 = getDisabled1(displayId);
+ int disabled2 = getDisabled2(displayId);
+ callbacks.disable(displayId, disabled1, disabled2, false /* animate */);
+ }
}
public void removeCallback(Callbacks callbacks) {
@@ -209,12 +337,21 @@
}
}
- public void disable(int state1, int state2, boolean animate) {
+ /**
+ * Called to notify that disable flags are updated.
+ * @see Callbacks#disable(int, int, int, boolean).
+ */
+ public void disable(int displayId, @DisableFlags int state1, @Disable2Flags int state2,
+ boolean animate) {
synchronized (mLock) {
- mDisable1 = state1;
- mDisable2 = state2;
+ setDisabled(displayId, state1, state2);
mHandler.removeMessages(MSG_DISABLE);
- Message msg = mHandler.obtainMessage(MSG_DISABLE, state1, state2, animate);
+ final SomeArgs args = SomeArgs.obtain();
+ args.argi1 = displayId;
+ args.argi2 = state1;
+ args.argi3 = state2;
+ args.argi4 = animate ? 1 : 0;
+ Message msg = mHandler.obtainMessage(MSG_DISABLE, args);
if (Looper.myLooper() == mHandler.getLooper()) {
// If its the right looper execute immediately so hides can be handled quickly.
mHandler.handleMessage(msg);
@@ -225,14 +362,42 @@
}
}
- // TODO(b/117478341): Add multi-display support.
@Override
- public void disable(int displayId, int state1, int state2) {
- disable(state1, state2, true);
+ public void disable(int displayId, @DisableFlags int state1, @Disable2Flags int state2) {
+ disable(displayId, state1, state2, true);
}
- public void recomputeDisableFlags(boolean animate) {
- disable(mDisable1, mDisable2, animate);
+ /**
+ * Apply current disable flags by {@link CommandQueue#disable(int, int, int, boolean)}.
+ *
+ * @param displayId The id of the display to notify.
+ * @param animate {@code true} to show animations.
+ */
+ public void recomputeDisableFlags(int displayId, boolean animate) {
+ int disabled1 = getDisabled1(displayId);
+ int disabled2 = getDisabled2(displayId);
+ disable(displayId, disabled1, disabled2, animate);
+ }
+
+ private void setDisabled(int displayId, int disabled1, int disabled2) {
+ mDisplayDisabled.put(displayId, new Pair<>(disabled1, disabled2));
+ }
+
+ private int getDisabled1(int displayId) {
+ return getDisabled(displayId).first;
+ }
+
+ private int getDisabled2(int displayId) {
+ return getDisabled(displayId).second;
+ }
+
+ private Pair<Integer, Integer> getDisabled(int displayId) {
+ Pair<Integer, Integer> disablePair = mDisplayDisabled.get(displayId);
+ if (disablePair == null) {
+ disablePair = new Pair<>(DISABLE_NONE, DISABLE2_NONE);
+ mDisplayDisabled.put(displayId, disablePair);
+ }
+ return disablePair;
}
public void animateExpandNotificationsPanel() {
@@ -270,7 +435,6 @@
}
}
- // TODO(b/117478341): Add multi-display support.
@Override
public void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
@@ -278,34 +442,38 @@
// Don't coalesce these, since it might have one time flags set such as
// STATUS_BAR_UNHIDE which might get lost.
SomeArgs args = SomeArgs.obtain();
- args.argi1 = vis;
- args.argi2 = fullscreenStackVis;
- args.argi3 = dockedStackVis;
- args.argi4 = mask;
+ args.argi1 = displayId;
+ args.argi2 = vis;
+ args.argi3 = fullscreenStackVis;
+ args.argi4 = dockedStackVis;
+ args.argi5 = mask;
args.arg1 = fullscreenStackBounds;
args.arg2 = dockedStackBounds;
mHandler.obtainMessage(MSG_SET_SYSTEMUI_VISIBILITY, args).sendToTarget();
}
}
- // TODO(b/117478341): Add multi-display support.
@Override
public void topAppWindowChanged(int displayId, boolean menuVisible) {
synchronized (mLock) {
mHandler.removeMessages(MSG_TOP_APP_WINDOW_CHANGED);
- mHandler.obtainMessage(MSG_TOP_APP_WINDOW_CHANGED, menuVisible ? 1 : 0, 0,
- null).sendToTarget();
+ mHandler.obtainMessage(MSG_TOP_APP_WINDOW_CHANGED,
+ displayId, menuVisible ? 1 : 0, null).sendToTarget();
}
}
- // TODO(b/117478341): Add multi-display support.
@Override
public void setImeWindowStatus(int displayId, IBinder token, int vis, int backDisposition,
boolean showImeSwitcher) {
synchronized (mLock) {
mHandler.removeMessages(MSG_SHOW_IME_BUTTON);
- Message m = mHandler.obtainMessage(MSG_SHOW_IME_BUTTON, vis, backDisposition, token);
- m.getData().putBoolean(SHOW_IME_SWITCHER_KEY, showImeSwitcher);
+ SomeArgs args = SomeArgs.obtain();
+ args.argi1 = displayId;
+ args.argi2 = vis;
+ args.argi3 = backDisposition;
+ args.argi4 = showImeSwitcher ? 1 : 0;
+ args.arg1 = token;
+ Message m = mHandler.obtainMessage(MSG_SHOW_IME_BUTTON, args);
m.sendToTarget();
}
}
@@ -381,12 +549,11 @@
}
}
- // TODO(b/117478341): Add multi-display support.
@Override
public void setWindowState(int displayId, int window, int state) {
synchronized (mLock) {
// don't coalesce these
- mHandler.obtainMessage(MSG_SET_WINDOW_STATE, window, state, null).sendToTarget();
+ mHandler.obtainMessage(MSG_SET_WINDOW_STATE, displayId, window, state).sendToTarget();
}
}
@@ -397,44 +564,54 @@
}
}
- // TODO(b/117478341): Add multi-display support.
@Override
public void appTransitionPending(int displayId) {
- appTransitionPending(false /* forced */);
+ appTransitionPending(displayId, false /* forced */);
}
- public void appTransitionPending(boolean forced) {
+ /**
+ * Called to notify System UI that an application transition is pending.
+ * @see Callbacks#appTransitionPending(int, boolean)
+ */
+ public void appTransitionPending(int displayId, boolean forced) {
synchronized (mLock) {
- mHandler.obtainMessage(MSG_APP_TRANSITION_PENDING, forced ? 1 : 0, 0).sendToTarget();
+ mHandler.obtainMessage(MSG_APP_TRANSITION_PENDING, displayId, forced ? 1 : 0)
+ .sendToTarget();
}
}
- // TODO(b/117478341): Add multi-display support.
@Override
public void appTransitionCancelled(int displayId) {
synchronized (mLock) {
- mHandler.sendEmptyMessage(MSG_APP_TRANSITION_CANCELLED);
+ mHandler.obtainMessage(MSG_APP_TRANSITION_CANCELLED, displayId).sendToTarget();
}
}
- // TODO(b/117478341): Add multi-display support.
@Override
public void appTransitionStarting(int displayId, long startTime, long duration) {
- appTransitionStarting(startTime, duration, false /* forced */);
+ appTransitionStarting(displayId, startTime, duration, false /* forced */);
}
- public void appTransitionStarting(long startTime, long duration, boolean forced) {
+ /**
+ * Called to notify System UI that an application transition is starting.
+ * @see Callbacks#appTransitionStarting(int, long, long, boolean).
+ */
+ public void appTransitionStarting(int displayId, long startTime, long duration,
+ boolean forced) {
synchronized (mLock) {
- mHandler.obtainMessage(MSG_APP_TRANSITION_STARTING, forced ? 1 : 0, 0,
- Pair.create(startTime, duration)).sendToTarget();
+ final SomeArgs args = SomeArgs.obtain();
+ args.argi1 = displayId;
+ args.argi2 = forced ? 1 : 0;
+ args.arg1 = startTime;
+ args.arg2 = duration;
+ mHandler.obtainMessage(MSG_APP_TRANSITION_STARTING, args).sendToTarget();
}
}
- // TODO(b/117478341): Add multi-display support.
@Override
public void appTransitionFinished(int displayId) {
synchronized (mLock) {
- mHandler.sendEmptyMessage(MSG_APP_TRANSITION_FINISHED);
+ mHandler.obtainMessage(MSG_APP_TRANSITION_FINISHED, displayId).sendToTarget();
}
}
@@ -619,8 +796,10 @@
break;
}
case MSG_DISABLE:
+ SomeArgs args = (SomeArgs) msg.obj;
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).disable(msg.arg1, msg.arg2, (Boolean) msg.obj);
+ mCallbacks.get(i).disable(args.argi1, args.argi2, args.argi3,
+ args.argi4 != 0 /* animate */);
}
break;
case MSG_EXPAND_NOTIFICATIONS:
@@ -644,22 +823,23 @@
}
break;
case MSG_SET_SYSTEMUI_VISIBILITY:
- SomeArgs args = (SomeArgs) msg.obj;
+ args = (SomeArgs) msg.obj;
for (int i = 0; i < mCallbacks.size(); i++) {
mCallbacks.get(i).setSystemUiVisibility(args.argi1, args.argi2, args.argi3,
- args.argi4, (Rect) args.arg1, (Rect) args.arg2);
+ args.argi4, args.argi5, (Rect) args.arg1, (Rect) args.arg2);
}
args.recycle();
break;
case MSG_TOP_APP_WINDOW_CHANGED:
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).topAppWindowChanged(msg.arg1 != 0);
+ mCallbacks.get(i).topAppWindowChanged(msg.arg1, msg.arg2 != 0);
}
break;
case MSG_SHOW_IME_BUTTON:
+ args = (SomeArgs) msg.obj;
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).setImeWindowStatus((IBinder) msg.obj, msg.arg1, msg.arg2,
- msg.getData().getBoolean(SHOW_IME_SWITCHER_KEY, false));
+ mCallbacks.get(i).setImeWindowStatus(args.argi1, (IBinder) args.arg1,
+ args.argi2, args.argi3, args.argi4 != 0 /* showImeSwitcher */);
}
break;
case MSG_SHOW_RECENT_APPS:
@@ -699,7 +879,7 @@
break;
case MSG_SET_WINDOW_STATE:
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).setWindowState(msg.arg1, msg.arg2);
+ mCallbacks.get(i).setWindowState(msg.arg1, msg.arg2, (int) msg.obj);
}
break;
case MSG_SHOW_SCREEN_PIN_REQUEST:
@@ -709,24 +889,24 @@
break;
case MSG_APP_TRANSITION_PENDING:
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).appTransitionPending(msg.arg1 != 0);
+ mCallbacks.get(i).appTransitionPending(msg.arg1, msg.arg2 != 0);
}
break;
case MSG_APP_TRANSITION_CANCELLED:
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).appTransitionCancelled();
+ mCallbacks.get(i).appTransitionCancelled(msg.arg1);
}
break;
case MSG_APP_TRANSITION_STARTING:
+ args = (SomeArgs) msg.obj;
for (int i = 0; i < mCallbacks.size(); i++) {
- Pair<Long, Long> data = (Pair<Long, Long>) msg.obj;
- mCallbacks.get(i).appTransitionStarting(data.first, data.second,
- msg.arg1 != 0);
+ mCallbacks.get(i).appTransitionStarting(args.argi1, (long) args.arg1,
+ (long) args.arg2, args.argi2 != 0 /* forced */);
}
break;
case MSG_APP_TRANSITION_FINISHED:
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).appTransitionFinished();
+ mCallbacks.get(i).appTransitionFinished(msg.arg1);
}
break;
case MSG_ASSIST_DISCLOSURE:
@@ -858,7 +1038,7 @@
public static class CommandQueueStart extends SystemUI {
@Override
public void start() {
- putComponent(CommandQueue.class, new CommandQueue());
+ putComponent(CommandQueue.class, new CommandQueue(mContext));
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
index 24570ae..f907b65 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
@@ -70,7 +70,7 @@
private SignalCallback mSignalCallback = new SignalCallback() {
@Override
public void setIsAirplaneMode(NetworkController.IconState icon) {
- mCommandQueue.recomputeDisableFlags(true /* animate */);
+ mCommandQueue.recomputeDisableFlags(getContext().getDisplayId(), true /* animate */);
}
};
@@ -155,7 +155,10 @@
}
@Override
- public void disable(int state1, int state2, boolean animate) {
+ public void disable(int displayId, int state1, int state2, boolean animate) {
+ if (displayId != getContext().getDisplayId()) {
+ return;
+ }
state1 = adjustDisableFlags(state1);
final int old1 = mDisabled1;
final int diff1 = state1 ^ old1;
@@ -362,6 +365,6 @@
@Override
public void onDozingChanged(boolean isDozing) {
- disable(mDisabled1, mDisabled1, false /* animate */);
+ disable(getContext().getDisplayId(), mDisabled1, mDisabled1, false /* animate */);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java
index dd07ec4..1944c3f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarTransitionsController.java
@@ -25,8 +25,8 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
-import android.util.MathUtils;
import android.provider.Settings;
+import android.util.MathUtils;
import android.util.TimeUtils;
import com.android.systemui.Dependency;
@@ -66,6 +66,7 @@
private float mDarkIntensity;
private float mNextDarkIntensity;
private float mDozeAmount;
+ private int mDisplayId;
private final Runnable mTransitionDeferringDoneRunnable = new Runnable() {
@Override
public void run() {
@@ -85,6 +86,7 @@
mStatusBarStateController.addCallback(this);
mDozeAmount = mStatusBarStateController.getDozeAmount();
mContext = context;
+ mDisplayId = mContext.getDisplayId();
}
public void destroy(Context context) {
@@ -104,15 +106,18 @@
}
@Override
- public void appTransitionPending(boolean forced) {
- if (mKeyguardMonitor.isKeyguardGoingAway() && !forced) {
+ public void appTransitionPending(int displayId, boolean forced) {
+ if (mDisplayId != displayId || mKeyguardMonitor.isKeyguardGoingAway() && !forced) {
return;
}
mTransitionPending = true;
}
@Override
- public void appTransitionCancelled() {
+ public void appTransitionCancelled(int displayId) {
+ if (mDisplayId != displayId) {
+ return;
+ }
if (mTransitionPending && mTintChangePending) {
mTintChangePending = false;
animateIconTint(mPendingDarkIntensity, 0 /* delay */, getTintAnimationDuration());
@@ -121,8 +126,9 @@
}
@Override
- public void appTransitionStarting(long startTime, long duration, boolean forced) {
- if (mKeyguardMonitor.isKeyguardGoingAway() && !forced) {
+ public void appTransitionStarting(int displayId, long startTime, long duration,
+ boolean forced) {
+ if (mDisplayId != displayId || mKeyguardMonitor.isKeyguardGoingAway() && !forced) {
return;
}
if (mTransitionPending && mTintChangePending) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
index 270565b..9df5684a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
@@ -18,6 +18,8 @@
import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN;
import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
+import static android.app.StatusBarManager.WindowType;
+import static android.app.StatusBarManager.WindowVisibleState;
import static android.app.StatusBarManager.windowStateToString;
import static com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
@@ -130,7 +132,7 @@
protected NavigationBarView mNavigationBarView = null;
- private int mNavigationBarWindowState = WINDOW_STATE_SHOWING;
+ private @WindowVisibleState int mNavigationBarWindowState = WINDOW_STATE_SHOWING;
private int mNavigationIconHints = 0;
private @TransitionMode int mNavigationBarMode;
@@ -376,8 +378,11 @@
// ----- CommandQueue Callbacks -----
@Override
- public void setImeWindowStatus(IBinder token, int vis, int backDisposition,
+ public void setImeWindowStatus(int displayId, IBinder token, int vis, int backDisposition,
boolean showImeSwitcher) {
+ if (displayId != mDisplayId) {
+ return;
+ }
boolean imeShown = (vis & InputMethodService.IME_VISIBLE) != 0;
int hints = mNavigationIconHints;
switch (backDisposition) {
@@ -410,15 +415,17 @@
}
@Override
- public void topAppWindowChanged(boolean showMenu) {
- if (mNavigationBarView != null) {
+ public void topAppWindowChanged(int displayId, boolean showMenu) {
+ if (displayId == mDisplayId && mNavigationBarView != null) {
mNavigationBarView.setMenuVisibility(showMenu);
}
}
@Override
- public void setWindowState(int window, int state) {
- if (mNavigationBarView != null
+ public void setWindowState(
+ int displayId, @WindowType int window, @WindowVisibleState int state) {
+ if (displayId == mDisplayId
+ && mNavigationBarView != null
&& window == StatusBarManager.WINDOW_NAVIGATION_BAR
&& mNavigationBarWindowState != state) {
mNavigationBarWindowState = state;
@@ -470,8 +477,11 @@
}
@Override
- public void setSystemUiVisibility(int vis, int fullscreenStackVis, int dockedStackVis,
- int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ public void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
+ int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ if (displayId != mDisplayId) {
+ return;
+ }
final int oldVal = mSystemUiVisibility;
final int newVal = (oldVal & ~mask) | (vis & mask);
final int diff = newVal ^ oldVal;
@@ -536,7 +546,10 @@
}
@Override
- public void disable(int state1, int state2, boolean animate) {
+ public void disable(int displayId, int state1, int state2, boolean animate) {
+ if (displayId != mDisplayId) {
+ return;
+ }
// Navigation bar flags are in both state1 and state2.
final int masked = state1 & (StatusBarManager.DISABLE_HOME
| StatusBarManager.DISABLE_RECENT
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index 1b18c6c..620d5d8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -312,6 +312,7 @@
Dependency.get(NotificationLockscreenUserManager.class);
private final ShadeController mShadeController =
Dependency.get(ShadeController.class);
+ private int mDisplayId;
public NotificationPanelView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -323,6 +324,7 @@
mAlphaPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
setPanelAlpha(255, false /* animate */);
mCommandQueue = getComponent(context, CommandQueue.class);
+ mDisplayId = context.getDisplayId();
}
private void setStatusBar(StatusBar bar) {
@@ -2596,7 +2598,7 @@
}
if (showIconsWhenExpanded != mShowIconsWhenExpanded) {
mShowIconsWhenExpanded = showIconsWhenExpanded;
- mCommandQueue.recomputeDisableFlags(false);
+ mCommandQueue.recomputeDisableFlags(mDisplayId, false);
}
}
@@ -2856,7 +2858,7 @@
if (hideIcons != mHideIconsDuringNotificationLaunch) {
mHideIconsDuringNotificationLaunch = hideIcons;
if (!hideIcons) {
- mCommandQueue.recomputeDisableFlags(true /* animate */);
+ mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index d6f2fd7..43c35f1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -736,9 +736,12 @@
};
@Override
- public void appTransitionStarting(long startTime, long duration, boolean forced) {
- updateManagedProfile();
- updateForegroundInstantApps();
+ public void appTransitionStarting(int displayId, long startTime, long duration,
+ boolean forced) {
+ if (mContext.getDisplayId() == displayId) {
+ updateManagedProfile();
+ updateForegroundInstantApps();
+ }
}
@Override
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 9f0eec4..7265b77 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -20,9 +20,10 @@
import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;
import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
+import static android.app.StatusBarManager.WindowType;
+import static android.app.StatusBarManager.WindowVisibleState;
import static android.app.StatusBarManager.windowStateToString;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY;
-import static android.view.Display.DEFAULT_DISPLAY;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
@@ -656,6 +657,7 @@
ServiceManager.checkService(DreamService.DREAM_SERVICE));
mDisplay = mWindowManager.getDefaultDisplay();
+ mDisplayId = mDisplay.getDisplayId();
updateDisplaySize();
Resources res = mContext.getResources();
@@ -711,11 +713,11 @@
// Set up the initial notification state. This needs to happen before CommandQueue.disable()
setUpPresenter();
- setSystemUiVisibility(switches[1], switches[7], switches[8], 0xffffffff,
+ setSystemUiVisibility(mDisplayId, switches[1], switches[7], switches[8], 0xffffffff,
fullscreenStackBounds, dockedStackBounds);
- topAppWindowChanged(switches[2] != 0);
+ topAppWindowChanged(mDisplayId, switches[2] != 0);
// StatusBarManagerService has a back up of IME token and it's restored here.
- setImeWindowStatus(binders.get(0), switches[3], switches[4], switches[5] != 0);
+ setImeWindowStatus(mDisplayId, binders.get(0), switches[3], switches[4], switches[5] != 0);
// Set up the initial icon state
int N = iconSlots.size();
@@ -1061,7 +1063,7 @@
* @param state2 disable2 flags
*/
protected void setUpDisableFlags(int state1, int state2) {
- mCommandQueue.disable(state1, state2, false /* animate */);
+ mCommandQueue.disable(mDisplayId, state1, state2, false /* animate */);
}
@Override
@@ -1235,8 +1237,7 @@
}
int dockSide = WindowManagerProxy.getInstance().getDockSide();
if (dockSide == WindowManager.DOCKED_INVALID) {
- final int navbarPos = WindowManagerWrapper.getInstance().getNavBarPosition(
- mDisplay.getDisplayId());
+ final int navbarPos = WindowManagerWrapper.getInstance().getNavBarPosition(mDisplayId);
if (navbarPos == NAV_BAR_POS_INVALID) {
return false;
}
@@ -1345,7 +1346,10 @@
* State is one or more of the DISABLE constants from StatusBarManager.
*/
@Override
- public void disable(int state1, int state2, boolean animate) {
+ public void disable(int displayId, int state1, int state2, boolean animate) {
+ if (displayId != mDisplayId) {
+ return;
+ }
state2 = mRemoteInputQuickSettingsDisabler.adjustDisableFlags(state2);
animate &= mStatusBarWindowState != WINDOW_STATE_HIDDEN;
@@ -1623,10 +1627,10 @@
mWereIconsJustHidden = true;
mHandler.postDelayed(() -> {
mWereIconsJustHidden = false;
- mCommandQueue.recomputeDisableFlags(true);
+ mCommandQueue.recomputeDisableFlags(mDisplayId, true);
}, 500);
} else {
- mCommandQueue.recomputeDisableFlags(animate);
+ mCommandQueue.recomputeDisableFlags(mDisplayId, animate);
}
}
if (shouldHideIconsForBouncer) {
@@ -1792,7 +1796,7 @@
mStatusBarWindowController.setPanelVisible(true);
visibilityChanged(true);
- mCommandQueue.recomputeDisableFlags(!force /* animate */);
+ mCommandQueue.recomputeDisableFlags(mDisplayId, !force /* animate */);
setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
}
@@ -1965,7 +1969,7 @@
Log.d(TAG, "Not showing bouncer due to activity showing over lockscreen");
}
mCommandQueue.recomputeDisableFlags(
- mNotificationPanel.hideStatusBarIconsWhenExpanded() /* animate */);
+ mDisplayId, mNotificationPanel.hideStatusBarIconsWhenExpanded() /* animate */);
// Trimming will happen later if Keyguard is showing - doing it here might cause a jank in
// the bouncer appear animation.
@@ -2022,7 +2026,11 @@
}
@Override // CommandQueue
- public void setWindowState(int window, int state) {
+ public void setWindowState(
+ int displayId, @WindowType int window, @WindowVisibleState int state) {
+ if (displayId != mDisplayId) {
+ return;
+ }
boolean showing = state == WINDOW_STATE_SHOWING;
if (mStatusBarWindow != null
&& window == StatusBarManager.WINDOW_STATUS_BAR
@@ -2041,14 +2049,17 @@
}
@Override // CommandQueue
- public void setSystemUiVisibility(int vis, int fullscreenStackVis, int dockedStackVis,
- int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ public void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
+ int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds) {
+ if (displayId != mDisplayId) {
+ return;
+ }
final int oldVal = mSystemUiVisibility;
final int newVal = (oldVal&~mask) | (vis&mask);
final int diff = newVal ^ oldVal;
if (DEBUG) Log.d(TAG, String.format(
- "setSystemUiVisibility vis=%s mask=%s oldVal=%s newVal=%s diff=%s",
- Integer.toHexString(vis), Integer.toHexString(mask),
+ "setSystemUiVisibility displayId=%d vis=%s mask=%s oldVal=%s newVal=%s diff=%s",
+ displayId, Integer.toHexString(vis), Integer.toHexString(mask),
Integer.toHexString(oldVal), Integer.toHexString(newVal),
Integer.toHexString(diff)));
boolean sbModeChanged = false;
@@ -2114,7 +2125,7 @@
void touchAutoHide() {
// update transient bar auto hide
if (mStatusBarMode == MODE_SEMI_TRANSPARENT
- || mNavigationBarController.isSemiTransparent(DEFAULT_DISPLAY)) {
+ || mNavigationBarController.isSemiTransparent(mDisplayId)) {
scheduleAutoHide();
} else {
cancelAutoHide();
@@ -2159,7 +2170,7 @@
if (mDemoMode) return;
if (mStatusBarView != null) checkBarMode(mStatusBarMode, mStatusBarWindowState,
getStatusBarTransitions());
- mNavigationBarController.checkNavBarModes(DEFAULT_DISPLAY);
+ mNavigationBarController.checkNavBarModes(mDisplayId);
mNoAnimationOnNextBarModeChange = false;
}
@@ -2168,7 +2179,8 @@
mNotificationPanel.setQsScrimEnabled(scrimEnabled);
}
- void checkBarMode(@TransitionMode int mode, int windowState, BarTransitions transitions) {
+ void checkBarMode(@TransitionMode int mode, @WindowVisibleState int windowState,
+ BarTransitions transitions) {
final boolean anim = !mNoAnimationOnNextBarModeChange && mDeviceInteractive
&& windowState != WINDOW_STATE_HIDDEN;
transitions.transitionTo(mode, anim);
@@ -2178,7 +2190,7 @@
if (mStatusBarView != null) {
mStatusBarView.getBarTransitions().finishAnimations();
}
- mNavigationBarController.finishBarAnimations(DEFAULT_DISPLAY);
+ mNavigationBarController.finishBarAnimations(mDisplayId);
}
private final Runnable mCheckBarModes = this::checkBarModes;
@@ -2195,7 +2207,7 @@
}
// manually dismiss the volume panel when interacting with the nav bar
if (changing && interacting && barWindow == StatusBarManager.WINDOW_NAVIGATION_BAR) {
- mNavigationBarController.touchAutoDim(DEFAULT_DISPLAY);
+ mNavigationBarController.touchAutoDim(mDisplayId);
dismissVolumeDialog();
}
checkBarModes();
@@ -2252,10 +2264,10 @@
public void setLightsOn(boolean on) {
Log.v(TAG, "setLightsOn(" + on + ")");
if (on) {
- setSystemUiVisibility(0, 0, 0, View.SYSTEM_UI_FLAG_LOW_PROFILE,
+ setSystemUiVisibility(mDisplayId, 0, 0, 0, View.SYSTEM_UI_FLAG_LOW_PROFILE,
mLastFullscreenStackBounds, mLastDockedStackBounds);
} else {
- setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE, 0, 0,
+ setSystemUiVisibility(mDisplayId, View.SYSTEM_UI_FLAG_LOW_PROFILE, 0, 0,
View.SYSTEM_UI_FLAG_LOW_PROFILE, mLastFullscreenStackBounds,
mLastDockedStackBounds);
}
@@ -2264,7 +2276,7 @@
private void notifySystemUiVisibilityChanged(int vis) {
try {
if (mLastDispatchedSystemUiVisibility != vis) {
- mWindowManagerService.statusBarVisibilityChanged(DEFAULT_DISPLAY, vis);
+ mWindowManagerService.statusBarVisibilityChanged(mDisplayId, vis);
mLastDispatchedSystemUiVisibility = vis;
}
} catch (RemoteException ex) {
@@ -2272,9 +2284,11 @@
}
@Override
- public void topAppWindowChanged(boolean showMenu) {
+ public void topAppWindowChanged(int displayId, boolean showMenu) {
+ if (mDisplayId != displayId) return;
if (SPEW) {
- Log.d(TAG, (showMenu?"showing":"hiding") + " the MENU button");
+ Log.d(TAG, "display#" + displayId + ": "
+ + (showMenu ? "showing" : "hiding") + " the MENU button");
}
// See above re: lights-out policy for legacy apps.
@@ -2963,7 +2977,7 @@
if (mStatusBarView != null) {
mStatusBarView.getBarTransitions().transitionTo(barMode, animate);
}
- mNavigationBarController.transitionTo(DEFAULT_DISPLAY, barMode, animate);
+ mNavigationBarController.transitionTo(mDisplayId, barMode, animate);
}
}
if (modeChange || command.equals(COMMAND_OPERATOR)) {
@@ -3101,7 +3115,7 @@
.setDuration(FADE_KEYGUARD_DURATION)
.withLayer()
.withEndAction(this::onLaunchTransitionFadingEnded);
- mCommandQueue.appTransitionStarting(SystemClock.uptimeMillis(),
+ mCommandQueue.appTransitionStarting(mDisplayId, SystemClock.uptimeMillis(),
LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION, true);
};
if (mNotificationPanel.isLaunchTransitionRunning()) {
@@ -3191,7 +3205,7 @@
// Disable layout transitions in navbar for this transition because the load is just
// too heavy for the CPU and GPU on any device.
- mNavigationBarController.disableAnimationsDuringHide(DEFAULT_DISPLAY, delay);
+ mNavigationBarController.disableAnimationsDuringHide(mDisplayId, delay);
} else if (!mNotificationPanel.isCollapsing()) {
instantCollapseNotificationPanel();
}
@@ -3224,7 +3238,7 @@
// Treat Keyguard exit animation as an app transition to achieve nice transition for status
// bar.
mKeyguardMonitor.notifyKeyguardGoingAway(true);
- mCommandQueue.appTransitionPending(true);
+ mCommandQueue.appTransitionPending(mDisplayId, true /* forced */);
}
/**
@@ -3235,11 +3249,11 @@
* @param fadeoutDuration the duration of the exit animation, in milliseconds
*/
public void setKeyguardFadingAway(long startTime, long delay, long fadeoutDuration) {
- mCommandQueue.appTransitionStarting(startTime + fadeoutDuration
+ mCommandQueue.appTransitionStarting(mDisplayId, startTime + fadeoutDuration
- LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION,
LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION, true);
- mCommandQueue.recomputeDisableFlags(fadeoutDuration > 0 /* animate */);
- mCommandQueue.appTransitionStarting(
+ mCommandQueue.recomputeDisableFlags(mDisplayId, fadeoutDuration > 0 /* animate */);
+ mCommandQueue.appTransitionStarting(mDisplayId,
startTime - LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION,
LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION, true);
mKeyguardMonitor.notifyKeyguardFadingAway(delay, fadeoutDuration);
@@ -3365,7 +3379,7 @@
// Make our window larger and the panel expanded.
makeExpandedVisible(true);
mNotificationPanel.expand(false /* animate */);
- mCommandQueue.recomputeDisableFlags(false /* animate */);
+ mCommandQueue.recomputeDisableFlags(mDisplayId, false /* animate */);
}
@Override
@@ -3421,7 +3435,7 @@
updateReportRejectedTouchVisibility();
updateDozing();
updateTheme();
- mNavigationBarController.touchAutoDim(DEFAULT_DISPLAY);
+ mNavigationBarController.touchAutoDim(mDisplayId);
Trace.beginSection("StatusBar#updateKeyguardState");
if (mState == StatusBarState.KEYGUARD) {
mKeyguardIndicationController.setVisible(true);
@@ -3606,7 +3620,7 @@
mBouncerShowing = bouncerShowing;
if (mStatusBarView != null) mStatusBarView.setBouncerShowing(bouncerShowing);
updateHideIconsForBouncer(true /* animate */);
- mCommandQueue.recomputeDisableFlags(true /* animate */);
+ mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */);
updateScrimController();
}
@@ -3731,13 +3745,17 @@
}
@Override
- public void appTransitionCancelled() {
- getComponent(Divider.class).onAppTransitionFinished();
+ public void appTransitionCancelled(int displayId) {
+ if (displayId == mDisplayId) {
+ getComponent(Divider.class).onAppTransitionFinished();
+ }
}
@Override
- public void appTransitionFinished() {
- getComponent(Divider.class).onAppTransitionFinished();
+ public void appTransitionFinished(int displayId) {
+ if (displayId == mDisplayId) {
+ getComponent(Divider.class).onAppTransitionFinished();
+ }
}
@Override
@@ -4133,6 +4151,7 @@
private IDreamManager mDreamManager;
protected Display mDisplay;
+ private int mDisplayId;
protected Recents mRecents;
@@ -4260,7 +4279,7 @@
// Immediately update the icon hidden state, since that should only apply if we're
// staying fullscreen.
mWereIconsJustHidden = false;
- mCommandQueue.recomputeDisableFlags(true);
+ mCommandQueue.recomputeDisableFlags(mDisplayId, true);
}
updateHideIconsForBouncer(true /* animate */);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
index 116ecc8..3ddfc0c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
@@ -238,8 +238,10 @@
}
@Override
- public void disable(int state1, int state2, boolean animate) {
- mDisabled2 = state2;
+ public void disable(int displayId, int state1, int state2, boolean animate) {
+ if (displayId == mContext.getDisplayId()) {
+ mDisabled2 = state2;
+ }
}
protected class ChallengeReceiver extends BroadcastReceiver {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
index 5eb3e89..de7ef3b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
@@ -299,7 +299,10 @@
}
@Override
- public void disable(int state1, int state2, boolean animate) {
+ public void disable(int displayId, int state1, int state2, boolean animate) {
+ if (displayId != getDisplay().getDisplayId()) {
+ return;
+ }
boolean clockVisibleByPolicy = (state1 & StatusBarManager.DISABLE_CLOCK) == 0;
if (clockVisibleByPolicy != mClockVisibleByPolicy) {
setClockVisibilityByPolicy(clockVisibleByPolicy);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisabler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisabler.java
index 630bd18..2b60274 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisabler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputQuickSettingsDisabler.java
@@ -82,6 +82,6 @@
* to modify the disable flags according to the status of mRemoteInputActive and misLandscape.
*/
private void recomputeDisableFlags() {
- mCommandQueue.recomputeDisableFlags(true);
+ mCommandQueue.recomputeDisableFlags(mContext.getDisplayId(), true);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/Utils.java b/packages/SystemUI/src/com/android/systemui/util/Utils.java
index 490cdd5c..6b4f7ed 100644
--- a/packages/SystemUI/src/com/android/systemui/util/Utils.java
+++ b/packages/SystemUI/src/com/android/systemui/util/Utils.java
@@ -69,10 +69,13 @@
/**
* Sets visibility of this {@link View} given the states passed from
- * {@link com.android.systemui.statusbar.CommandQueue.Callbacks#disable(int, int)}.
+ * {@link com.android.systemui.statusbar.CommandQueue.Callbacks#disable(int, int, int)}.
*/
@Override
- public void disable(int state1, int state2, boolean animate) {
+ public void disable(int displayId, int state1, int state2, boolean animate) {
+ if (displayId != mView.getDisplay().getDisplayId()) {
+ return;
+ }
final boolean disabled = ((state1 & mMask1) != 0) || ((state2 & mMask2) != 0);
if (disabled == mDisabled) return;
mDisabled = disabled;