diff options
| author | 2025-02-19 17:51:06 +0900 | |
|---|---|---|
| committer | 2025-02-24 20:36:33 -0800 | |
| commit | e2b9205b6447bc3132fbb8df6fe8efd29bba4b88 (patch) | |
| tree | 007edaf31769d6bfa56478b5e7f44b417e4969eb | |
| parent | a54f82cd9cf52aff39f3182c378f43e78be771eb (diff) | |
Don't show immersive confirmation for presentation
ag/31583844 made presentation windows immersive but as a side
effect, immersive confirmation started to show up.
This is undesirable for presentation windows because they are
designed so the user doesn't have to directly interract with the
window and focus should stay with their host activity.
This change adds window type argument to onImmersiveModeChanged()
so we can skip showing the dialog for presentations.
Flag: com.android.window.flags.enable_presentation_for_connected_displays
Bug: 397597400
Test: atest PresentationTest
Change-Id: I8e43711222584c2ec7efc31160d62ba03b936605
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. |