Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +6 −15 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading @@ -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}. */ Loading Loading @@ -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, Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java +20 −12 Original line number Diff line number Diff line Loading @@ -59,9 +59,7 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { int mCameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN; @VisibleForTesting boolean mShouldShowSizeCompatHint; @VisibleForTesting boolean mShouldShowCameraCompatHint; CompatUIHintsState mCompatUIHintsState; @Nullable @VisibleForTesting Loading @@ -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 Loading Loading @@ -212,18 +209,18 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { } // Size Compat mode restart button. mLayout.setRestartButtonVisibility(mHasSizeCompat); if (mHasSizeCompat && mShouldShowSizeCompatHint) { mLayout.setSizeCompatHintVisibility(/* show= */ true); // Only show by default for the first time. mShouldShowSizeCompatHint = false; if (mHasSizeCompat && !mCompatUIHintsState.mHasShownSizeCompatHint) { mLayout.setSizeCompatHintVisibility(/* show= */ true); mCompatUIHintsState.mHasShownSizeCompatHint = true; } // Camera control for stretched issues. mLayout.setCameraControlVisibility(shouldShowCameraControl()); if (shouldShowCameraControl() && mShouldShowCameraCompatHint) { mLayout.setCameraCompatHintVisibility(/* show= */ true); // Only show by default for the first time. mShouldShowCameraCompatHint = false; if (shouldShowCameraControl() && !mCompatUIHintsState.mHasShownCameraCompatHint) { mLayout.setCameraCompatHintVisibility(/* show= */ true); mCompatUIHintsState.mHasShownCameraCompatHint = true; } if (shouldShowCameraControl()) { mLayout.updateCameraTreatmentButton(mCameraCompatControlState); Loading @@ -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; } } libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java +11 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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); Loading @@ -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(); Loading @@ -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); Loading Loading @@ -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(); Loading @@ -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(); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +6 −15 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading @@ -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}. */ Loading Loading @@ -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, Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java +20 −12 Original line number Diff line number Diff line Loading @@ -59,9 +59,7 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { int mCameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN; @VisibleForTesting boolean mShouldShowSizeCompatHint; @VisibleForTesting boolean mShouldShowCameraCompatHint; CompatUIHintsState mCompatUIHintsState; @Nullable @VisibleForTesting Loading @@ -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 Loading Loading @@ -212,18 +209,18 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { } // Size Compat mode restart button. mLayout.setRestartButtonVisibility(mHasSizeCompat); if (mHasSizeCompat && mShouldShowSizeCompatHint) { mLayout.setSizeCompatHintVisibility(/* show= */ true); // Only show by default for the first time. mShouldShowSizeCompatHint = false; if (mHasSizeCompat && !mCompatUIHintsState.mHasShownSizeCompatHint) { mLayout.setSizeCompatHintVisibility(/* show= */ true); mCompatUIHintsState.mHasShownSizeCompatHint = true; } // Camera control for stretched issues. mLayout.setCameraControlVisibility(shouldShowCameraControl()); if (shouldShowCameraControl() && mShouldShowCameraCompatHint) { mLayout.setCameraCompatHintVisibility(/* show= */ true); // Only show by default for the first time. mShouldShowCameraCompatHint = false; if (shouldShowCameraControl() && !mCompatUIHintsState.mHasShownCameraCompatHint) { mLayout.setCameraCompatHintVisibility(/* show= */ true); mCompatUIHintsState.mHasShownCameraCompatHint = true; } if (shouldShowCameraControl()) { mLayout.updateCameraTreatmentButton(mCameraCompatControlState); Loading @@ -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; } }
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java +11 −11 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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); Loading @@ -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(); Loading @@ -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); Loading Loading @@ -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(); Loading @@ -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(); Loading