Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1b338df authored by Massimo Carli's avatar Massimo Carli
Browse files

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
parent 4d1ca400
Loading
Loading
Loading
Loading
+42 −18
Original line number Diff line number Diff line
@@ -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);
    }
}