summaryrefslogtreecommitdiff
path: root/libs/WindowManager/Shell
diff options
context:
space:
mode:
author Tom Natan <tomnatan@google.com> 2022-02-17 13:36:33 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-02-17 13:36:33 +0000
commit0711bba4f2ce2bf8648042147dfcfabe5c11ddbe (patch)
tree1dba46089e0255cc9000352eb62db2f5922ed0dc /libs/WindowManager/Shell
parent756486d5935a4930be9ba9e928958e8071d10427 (diff)
parentdbd6428150a56be278980e327c72c7b27eaf34d0 (diff)
Merge "Mark compat UI hints as shown only if they are actually shown"
Diffstat (limited to 'libs/WindowManager/Shell')
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java21
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java32
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java4
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java22
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();