diff options
7 files changed, 25 insertions, 12 deletions
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl index 7018ebcbe9f4..5a180d7358dd 100644 --- a/core/java/com/android/internal/statusbar/IStatusBar.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl @@ -82,7 +82,7 @@ oneway interface IStatusBar * Notify system UI the immersive mode changed. This shall be removed when client immersive is * enabled. */ - void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode); + void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode, int windowType); void dismissKeyboardShortcutsMenu(); void toggleKeyboardShortcutsMenu(int deviceId); diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/CommandQueueTest.java index 3d8da6140ff7..70df82d95008 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/CommandQueueTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/CommandQueueTest.java @@ -22,6 +22,7 @@ import static android.service.quickaccesswallet.Flags.FLAG_LAUNCH_WALLET_OPTION_ import static android.service.quickaccesswallet.Flags.FLAG_LAUNCH_WALLET_VIA_SYSUI_CALLBACKS; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowInsetsController.BEHAVIOR_DEFAULT; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; @@ -556,9 +557,9 @@ public class CommandQueueTest extends SysuiTestCase { @Test public void testImmersiveModeChanged() { final int displayAreaId = 10; - mCommandQueue.immersiveModeChanged(displayAreaId, true); + mCommandQueue.immersiveModeChanged(displayAreaId, true, TYPE_APPLICATION); waitForIdleSync(); - verify(mCallbacks).immersiveModeChanged(displayAreaId, true); + verify(mCallbacks).immersiveModeChanged(displayAreaId, true, TYPE_APPLICATION); } @Test diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index 7dc2ae71b63e..e44701dba87c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -580,7 +580,8 @@ public class CommandQueue extends IStatusBar.Stub implements /** * @see IStatusBar#immersiveModeChanged */ - default void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode) {} + default void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode, + int windowType) {} /** * @see IStatusBar#moveFocusedTaskToDesktop(int) @@ -876,11 +877,13 @@ public class CommandQueue extends IStatusBar.Stub implements } @Override - public void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode) { + public void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode, + int windowType) { synchronized (mLock) { final SomeArgs args = SomeArgs.obtain(); args.argi1 = rootDisplayAreaId; args.argi2 = isImmersiveMode ? 1 : 0; + args.argi3 = windowType; mHandler.obtainMessage(MSG_IMMERSIVE_CHANGED, args).sendToTarget(); } } @@ -2030,8 +2033,10 @@ public class CommandQueue extends IStatusBar.Stub implements args = (SomeArgs) msg.obj; int rootDisplayAreaId = args.argi1; boolean isImmersiveMode = args.argi2 != 0; + int windowType = args.argi3; for (int i = 0; i < mCallbacks.size(); i++) { - mCallbacks.get(i).immersiveModeChanged(rootDisplayAreaId, isImmersiveMode); + mCallbacks.get(i).immersiveModeChanged(rootDisplayAreaId, isImmersiveMode, + windowType); } break; case MSG_ENTER_DESKTOP: { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java b/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java index fed3f6e81130..97e62d79b374 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ImmersiveModeConfirmation.java @@ -23,6 +23,8 @@ import static android.app.StatusBarManager.DISABLE_HOME; import static android.app.StatusBarManager.DISABLE_RECENT; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; +import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION; +import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION; import static android.window.DisplayAreaOrganizer.FEATURE_UNDEFINED; import static android.window.DisplayAreaOrganizer.KEY_ROOT_DISPLAY_AREA_ID; @@ -208,7 +210,8 @@ public class ImmersiveModeConfirmation implements CoreStartable, CommandQueue.Ca } @Override - public void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode) { + public void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode, + int windowType) { mHandler.removeMessages(H.SHOW); if (isImmersiveMode) { if (DEBUG) Log.d(TAG, "immersiveModeChanged() sConfirmed=" + sConfirmed); @@ -221,7 +224,9 @@ public class ImmersiveModeConfirmation implements CoreStartable, CommandQueue.Ca && mCanSystemBarsBeShownByUser && !mNavBarEmpty && !UserManager.isDeviceInDemoMode(mDisplayContext) - && (mLockTaskState != LOCK_TASK_MODE_LOCKED)) { + && (mLockTaskState != LOCK_TASK_MODE_LOCKED) + && windowType != TYPE_PRESENTATION + && windowType != TYPE_PRIVATE_PRESENTATION) { final Message msg = mHandler.obtainMessage( H.SHOW); msg.arg1 = rootDisplayAreaId; diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java index fab19b6b8201..1afbb34c5f09 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java @@ -160,8 +160,10 @@ public interface StatusBarManagerInternal { * @param displayId The changed display Id. * @param rootDisplayAreaId The changed display area Id. * @param isImmersiveMode {@code true} if the display area get into immersive mode. + * @param windowType The window type of the controlling window. */ - void immersiveModeChanged(int displayId, int rootDisplayAreaId, boolean isImmersiveMode); + void immersiveModeChanged(int displayId, int rootDisplayAreaId, boolean isImmersiveMode, + int windowType); /** * Show a rotation suggestion that a user may approve to rotate the screen. diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index da9d01675984..798c794edaf5 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -732,7 +732,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D @Override public void immersiveModeChanged(int displayId, int rootDisplayAreaId, - boolean isImmersiveMode) { + boolean isImmersiveMode, int windowType) { if (mBar == null) { return; } @@ -746,7 +746,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D if (!CLIENT_TRANSIENT) { // Only call from here when the client transient is not enabled. try { - mBar.immersiveModeChanged(rootDisplayAreaId, isImmersiveMode); + mBar.immersiveModeChanged(rootDisplayAreaId, isImmersiveMode, windowType); } catch (RemoteException ex) { } } diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 4908df025dd1..ec5b503fbb9b 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -2564,7 +2564,7 @@ public class DisplayPolicy { final int rootDisplayAreaId = root == null ? FEATURE_UNDEFINED : root.mFeatureId; // TODO(b/277290737): Move this to the client side, instead of using a proxy. callStatusBarSafely(statusBar -> statusBar.immersiveModeChanged(getDisplayId(), - rootDisplayAreaId, isImmersiveMode)); + rootDisplayAreaId, isImmersiveMode, win.getWindowType())); } // Show transient bars for panic if needed. |