Mark compat UI hints as shown only if they are actually shown
Fix: 218304113 Test: atest WMShellUnitTests:CompatUIWindowManagerTest Change-Id: Ie6e0b76b1e0d6744a5f397521ba1da7100b6a1c4
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user