diff options
| author | 2022-02-17 10:45:05 +0000 | |
|---|---|---|
| committer | 2022-02-17 11:50:55 +0000 | |
| commit | dbd6428150a56be278980e327c72c7b27eaf34d0 (patch) | |
| tree | 0bb5e591e7b6f9f408880b28dd0bae7a039658fb /libs/WindowManager/Shell | |
| parent | b48721f9fc75a0f903007534ce50ec97497bc404 (diff) | |
Mark compat UI hints as shown only if they are actually shown
Fix: 218304113
Test: atest WMShellUnitTests:CompatUIWindowManagerTest
Change-Id: Ie6e0b76b1e0d6744a5f397521ba1da7100b6a1c4
Diffstat (limited to 'libs/WindowManager/Shell')
4 files changed, 39 insertions, 40 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 656dae3af5ac..79a24b775d19 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 @@ -40,6 +40,7 @@ import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.annotations.ExternalThread; +import com.android.wm.shell.compatui.CompatUIWindowManager.CompatUIHintsState; import com.android.wm.shell.compatui.letterboxedu.LetterboxEduWindowManager; import java.lang.ref.WeakReference; @@ -105,9 +106,8 @@ public class CompatUIController implements OnDisplaysChangedListener, private CompatUICallback mCallback; - // Only show once automatically in the process life. - private boolean mHasShownSizeCompatHint; - private boolean mHasShownCameraCompatHint; + // Only show each hint once automatically in the process life. + private final CompatUIHintsState mCompatUIHintsState; // Indicates if the keyguard is currently occluded, in which case compat UIs shouldn't // be shown. @@ -127,6 +127,7 @@ public class CompatUIController implements OnDisplaysChangedListener, mMainExecutor = mainExecutor; mDisplayController.addDisplayWindowListener(this); mImeController.addPositionProcessor(this); + mCompatUIHintsState = new CompatUIHintsState(); } /** Returns implementation of {@link CompatUI}. */ @@ -259,19 +260,9 @@ public class CompatUIController implements OnDisplaysChangedListener, @VisibleForTesting CompatUIWindowManager createCompatUiWindowManager(Context context, TaskInfo taskInfo, ShellTaskOrganizer.TaskListener taskListener) { - final CompatUIWindowManager compatUIWindowManager = new CompatUIWindowManager(context, + return new CompatUIWindowManager(context, taskInfo, mSyncQueue, mCallback, taskListener, - mDisplayController.getDisplayLayout(taskInfo.displayId), mHasShownSizeCompatHint, - mHasShownCameraCompatHint); - // TODO(b/218304113): updates values only if hints are actually shown to the user. - // Only show hints for the first time. - if (taskInfo.topActivityInSizeCompat) { - mHasShownSizeCompatHint = true; - } - if (taskInfo.hasCameraCompatControl()) { - mHasShownCameraCompatHint = true; - } - return compatUIWindowManager; + mDisplayController.getDisplayLayout(taskInfo.displayId), mCompatUIHintsState); } private void createOrUpdateLetterboxEduLayout(TaskInfo taskInfo, diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java index 7c6780a632c0..bce3ec4128e8 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java @@ -59,9 +59,7 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { int mCameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN; @VisibleForTesting - boolean mShouldShowSizeCompatHint; - @VisibleForTesting - boolean mShouldShowCameraCompatHint; + CompatUIHintsState mCompatUIHintsState; @Nullable @VisibleForTesting @@ -70,13 +68,12 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { CompatUIWindowManager(Context context, TaskInfo taskInfo, SyncTransactionQueue syncQueue, CompatUICallback callback, ShellTaskOrganizer.TaskListener taskListener, DisplayLayout displayLayout, - boolean hasShownSizeCompatHint, boolean hasShownCameraCompatHint) { + CompatUIHintsState compatUIHintsState) { super(context, taskInfo, syncQueue, taskListener, displayLayout); mCallback = callback; mHasSizeCompat = taskInfo.topActivityInSizeCompat; mCameraCompatControlState = taskInfo.cameraCompatControlState; - mShouldShowSizeCompatHint = !hasShownSizeCompatHint; - mShouldShowCameraCompatHint = !hasShownCameraCompatHint; + mCompatUIHintsState = compatUIHintsState; } @Override @@ -212,18 +209,18 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { } // Size Compat mode restart button. mLayout.setRestartButtonVisibility(mHasSizeCompat); - if (mHasSizeCompat && mShouldShowSizeCompatHint) { + // Only show by default for the first time. + if (mHasSizeCompat && !mCompatUIHintsState.mHasShownSizeCompatHint) { mLayout.setSizeCompatHintVisibility(/* show= */ true); - // Only show by default for the first time. - mShouldShowSizeCompatHint = false; + mCompatUIHintsState.mHasShownSizeCompatHint = true; } // Camera control for stretched issues. mLayout.setCameraControlVisibility(shouldShowCameraControl()); - if (shouldShowCameraControl() && mShouldShowCameraCompatHint) { + // Only show by default for the first time. + if (shouldShowCameraControl() && !mCompatUIHintsState.mHasShownCameraCompatHint) { mLayout.setCameraCompatHintVisibility(/* show= */ true); - // Only show by default for the first time. - mShouldShowCameraCompatHint = false; + mCompatUIHintsState.mHasShownCameraCompatHint = true; } if (shouldShowCameraControl()) { mLayout.updateCameraTreatmentButton(mCameraCompatControlState); @@ -234,4 +231,15 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { return mCameraCompatControlState != CAMERA_COMPAT_CONTROL_HIDDEN && mCameraCompatControlState != CAMERA_COMPAT_CONTROL_DISMISSED; } + + /** + * A class holding the state of the compat UI hints, which is shared between all compat UI + * window managers. + */ + static class CompatUIHintsState { + @VisibleForTesting + boolean mHasShownSizeCompatHint; + @VisibleForTesting + boolean mHasShownCameraCompatHint; + } } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java index 352805b6aaf6..7d3e718313e6 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java @@ -43,6 +43,7 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.SyncTransactionQueue; +import com.android.wm.shell.compatui.CompatUIWindowManager.CompatUIHintsState; import org.junit.Before; import org.junit.Test; @@ -77,8 +78,7 @@ public class CompatUILayoutTest extends ShellTestCase { mWindowManager = new CompatUIWindowManager(mContext, createTaskInfo(/* hasSizeCompat= */ false, CAMERA_COMPAT_CONTROL_HIDDEN), mSyncTransactionQueue, mCallback, mTaskListener, - new DisplayLayout(), /* hasShownSizeCompatHint= */ false, - /* hasShownCameraCompatHint= */ false); + new DisplayLayout(), new CompatUIHintsState()); mLayout = (CompatUILayout) LayoutInflater.from(mContext).inflate(R.layout.compat_ui_layout, null); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java index f9cfd1262364..e79b803b4304 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java @@ -51,6 +51,7 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.SyncTransactionQueue; +import com.android.wm.shell.compatui.CompatUIWindowManager.CompatUIHintsState; import org.junit.Before; import org.junit.Test; @@ -85,8 +86,7 @@ public class CompatUIWindowManagerTest extends ShellTestCase { mWindowManager = new CompatUIWindowManager(mContext, createTaskInfo(/* hasSizeCompat= */ false, CAMERA_COMPAT_CONTROL_HIDDEN), mSyncTransactionQueue, mCallback, mTaskListener, - new DisplayLayout(), /* hasShownSizeCompatHint= */ false, - /* hasShownCameraCompatHint= */ false); + new DisplayLayout(), new CompatUIHintsState()); spyOn(mWindowManager); doReturn(mLayout).when(mWindowManager).inflateLayout(); @@ -102,7 +102,7 @@ public class CompatUIWindowManagerTest extends ShellTestCase { verify(mWindowManager, never()).inflateLayout(); // Doesn't create hint popup. - mWindowManager.mShouldShowSizeCompatHint = false; + mWindowManager.mCompatUIHintsState.mHasShownSizeCompatHint = true; assertTrue(mWindowManager.createLayout(/* canShow= */ true)); verify(mWindowManager).inflateLayout(); @@ -113,14 +113,14 @@ public class CompatUIWindowManagerTest extends ShellTestCase { clearInvocations(mWindowManager); clearInvocations(mLayout); mWindowManager.release(); - mWindowManager.mShouldShowSizeCompatHint = true; + mWindowManager.mCompatUIHintsState.mHasShownSizeCompatHint = false; assertTrue(mWindowManager.createLayout(/* canShow= */ true)); verify(mWindowManager).inflateLayout(); assertNotNull(mLayout); verify(mLayout).setRestartButtonVisibility(/* show= */ true); verify(mLayout).setSizeCompatHintVisibility(/* show= */ true); - assertFalse(mWindowManager.mShouldShowSizeCompatHint); + assertTrue(mWindowManager.mCompatUIHintsState.mHasShownSizeCompatHint); // Returns false and doesn't create layout if has Size Compat is false. clearInvocations(mWindowManager); @@ -140,7 +140,7 @@ public class CompatUIWindowManagerTest extends ShellTestCase { verify(mWindowManager, never()).inflateLayout(); // Doesn't create hint popup. - mWindowManager.mShouldShowCameraCompatHint = false; + mWindowManager.mCompatUIHintsState.mHasShownCameraCompatHint = true; assertTrue(mWindowManager.createLayout(/* canShow= */ true)); verify(mWindowManager).inflateLayout(); @@ -151,14 +151,14 @@ public class CompatUIWindowManagerTest extends ShellTestCase { clearInvocations(mWindowManager); clearInvocations(mLayout); mWindowManager.release(); - mWindowManager.mShouldShowCameraCompatHint = true; + mWindowManager.mCompatUIHintsState.mHasShownCameraCompatHint = false; assertTrue(mWindowManager.createLayout(/* canShow= */ true)); verify(mWindowManager).inflateLayout(); assertNotNull(mLayout); verify(mLayout).setCameraControlVisibility(/* show= */ true); verify(mLayout).setCameraCompatHintVisibility(/* show= */ true); - assertFalse(mWindowManager.mShouldShowCameraCompatHint); + assertTrue(mWindowManager.mCompatUIHintsState.mHasShownCameraCompatHint); // Returns false and doesn't create layout if Camera Compat state is hidden clearInvocations(mWindowManager); @@ -411,7 +411,7 @@ public class CompatUIWindowManagerTest extends ShellTestCase { public void testOnRestartButtonLongClicked_showHint() { // Not create hint popup. mWindowManager.mHasSizeCompat = true; - mWindowManager.mShouldShowSizeCompatHint = false; + mWindowManager.mCompatUIHintsState.mHasShownSizeCompatHint = true; mWindowManager.createLayout(/* canShow= */ true); verify(mWindowManager).inflateLayout(); @@ -423,10 +423,10 @@ public class CompatUIWindowManagerTest extends ShellTestCase { } @Test - public void testOnCamerControlLongClicked_showHint() { + public void testOnCameraControlLongClicked_showHint() { // Not create hint popup. mWindowManager.mCameraCompatControlState = CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; - mWindowManager.mShouldShowCameraCompatHint = false; + mWindowManager.mCompatUIHintsState.mHasShownCameraCompatHint = true; mWindowManager.createLayout(/* canShow= */ true); verify(mWindowManager).inflateLayout(); |