From c1b338df9924d0549b882cfa43d825b8f0a48813 Mon Sep 17 00:00:00 2001 From: Massimo Carli Date: Thu, 31 Oct 2024 18:25:29 +0000 Subject: Skip Compat UI when in desktop mode Added more checks to prevent the creation of Compat UI elements when in Desktop Window mode. Flag: com.android.window.flags.skip_compat_ui_education_in_desktop_mode Bug: b/372366522 Fix: b/357062954 Test: atest WMShellUnitTests:CompatUIControllerTest Change-Id: I54af8280a0a7b585af86892c88e886ecbfcbfb83 --- .../wm/shell/compatui/CompatUIController.java | 60 +++++++++++++++------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java index 0200e18b5c50..c99d9ba862c1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java @@ -188,6 +188,8 @@ public class CompatUIController implements OnDisplaysChangedListener, */ private boolean mIsFirstReachabilityEducationRunning; + private boolean mIsInDesktopMode; + @NonNull private final CompatUIStatusManager mCompatUIStatusManager; @@ -253,18 +255,19 @@ public class CompatUIController implements OnDisplaysChangedListener, if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat()) { mSetOfTaskIdsShowingRestartDialog.remove(taskInfo.taskId); } - - if (taskInfo != null && taskListener != null) { - updateActiveTaskInfo(taskInfo); - } - - // We close all the Compat UI educations in case we're in desktop mode. - if (taskInfo.configuration == null || taskListener == null - || isInDesktopMode(taskInfo.displayId)) { + mIsInDesktopMode = isInDesktopMode(taskInfo); + // We close all the Compat UI educations in case TaskInfo has no configuration or + // TaskListener or in desktop mode. + if (taskInfo.configuration == null || taskListener == null || mIsInDesktopMode) { // Null token means the current foreground activity is not in compatibility mode. removeLayouts(taskInfo.taskId); return; } + if (taskInfo != null && taskListener != null) { + updateActiveTaskInfo(taskInfo); + } + + // We're showing the first reachability education so we ignore incoming TaskInfo // until the education flow has completed or we double tap. The double-tap // basically cancel all the onboarding flow. We don't have to ignore events in case @@ -443,7 +446,7 @@ public class CompatUIController implements OnDisplaysChangedListener, @Nullable ShellTaskOrganizer.TaskListener taskListener) { CompatUIWindowManager layout = mActiveCompatLayouts.get(taskInfo.taskId); if (layout != null) { - if (layout.needsToBeRecreated(taskInfo, taskListener)) { + if (layout.needsToBeRecreated(taskInfo, taskListener) || mIsInDesktopMode) { mActiveCompatLayouts.remove(taskInfo.taskId); layout.release(); } else { @@ -456,7 +459,10 @@ public class CompatUIController implements OnDisplaysChangedListener, return; } } - + if (mIsInDesktopMode) { + // Return if in desktop mode. + return; + } // Create a new UI layout. final Context context = getOrCreateDisplayContext(taskInfo.displayId); if (context == null) { @@ -494,7 +500,8 @@ public class CompatUIController implements OnDisplaysChangedListener, private void createOrUpdateLetterboxEduLayout(@NonNull TaskInfo taskInfo, @Nullable ShellTaskOrganizer.TaskListener taskListener) { if (mActiveLetterboxEduLayout != null) { - if (mActiveLetterboxEduLayout.needsToBeRecreated(taskInfo, taskListener)) { + if (mActiveLetterboxEduLayout.needsToBeRecreated(taskInfo, taskListener) + || mIsInDesktopMode) { mActiveLetterboxEduLayout.release(); mActiveLetterboxEduLayout = null; } else { @@ -507,6 +514,10 @@ public class CompatUIController implements OnDisplaysChangedListener, return; } } + if (mIsInDesktopMode) { + // Return if in desktop mode. + return; + } // Create a new UI layout. final Context context = getOrCreateDisplayContext(taskInfo.displayId); if (context == null) { @@ -541,7 +552,7 @@ public class CompatUIController implements OnDisplaysChangedListener, RestartDialogWindowManager layout = mTaskIdToRestartDialogWindowManagerMap.get(taskInfo.taskId); if (layout != null) { - if (layout.needsToBeRecreated(taskInfo, taskListener)) { + if (layout.needsToBeRecreated(taskInfo, taskListener) || mIsInDesktopMode) { mTaskIdToRestartDialogWindowManagerMap.remove(taskInfo.taskId); layout.release(); } else { @@ -556,6 +567,10 @@ public class CompatUIController implements OnDisplaysChangedListener, return; } } + if (mIsInDesktopMode) { + // Return if in desktop mode. + return; + } // Create a new UI layout. final Context context = getOrCreateDisplayContext(taskInfo.displayId); if (context == null) { @@ -594,7 +609,8 @@ public class CompatUIController implements OnDisplaysChangedListener, private void createOrUpdateReachabilityEduLayout(@NonNull TaskInfo taskInfo, @Nullable ShellTaskOrganizer.TaskListener taskListener) { if (mActiveReachabilityEduLayout != null) { - if (mActiveReachabilityEduLayout.needsToBeRecreated(taskInfo, taskListener)) { + if (mActiveReachabilityEduLayout.needsToBeRecreated(taskInfo, taskListener) + || mIsInDesktopMode) { mActiveReachabilityEduLayout.release(); mActiveReachabilityEduLayout = null; } else { @@ -608,6 +624,10 @@ public class CompatUIController implements OnDisplaysChangedListener, return; } } + if (mIsInDesktopMode) { + // Return if in desktop mode. + return; + } // Create a new UI layout. final Context context = getOrCreateDisplayContext(taskInfo.displayId); if (context == null) { @@ -647,7 +667,8 @@ public class CompatUIController implements OnDisplaysChangedListener, private void createOrUpdateUserAspectRatioSettingsLayout(@NonNull TaskInfo taskInfo, @Nullable ShellTaskOrganizer.TaskListener taskListener) { if (mUserAspectRatioSettingsLayout != null) { - if (mUserAspectRatioSettingsLayout.needsToBeRecreated(taskInfo, taskListener)) { + if (mUserAspectRatioSettingsLayout.needsToBeRecreated(taskInfo, taskListener) + || mIsInDesktopMode) { mUserAspectRatioSettingsLayout.release(); mUserAspectRatioSettingsLayout = null; } else { @@ -660,7 +681,10 @@ public class CompatUIController implements OnDisplaysChangedListener, return; } } - + if (mIsInDesktopMode) { + // Return if in desktop mode. + return; + } // Create a new UI layout. final Context context = getOrCreateDisplayContext(taskInfo.displayId); if (context == null) { @@ -840,8 +864,8 @@ public class CompatUIController implements OnDisplaysChangedListener, boolean mHasShownUserAspectRatioSettingsButtonHint; } - private boolean isInDesktopMode(int displayId) { - return Flags.skipCompatUiEducationInDesktopMode() - && mInDesktopModePredicate.test(displayId); + private boolean isInDesktopMode(@Nullable TaskInfo taskInfo) { + return taskInfo != null && Flags.skipCompatUiEducationInDesktopMode() + && mInDesktopModePredicate.test(taskInfo.displayId); } } -- cgit v1.2.3-59-g8ed1b