diff options
Diffstat (limited to 'libs')
2 files changed, 48 insertions, 3 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java index 96470012af03..c2dec623416b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java @@ -192,6 +192,12 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract } } + @VisibleForTesting + boolean isShowingButton() { + return (mUserAspectRatioButtonShownChecker.get() + && !isHideDelayReached(mNextButtonHideTimeMs)); + } + private void showUserAspectRatioButton() { if (mLayout == null) { return; @@ -224,7 +230,7 @@ class UserAspectRatioSettingsWindowManager extends CompatUIWindowManagerAbstract return taskInfo.topActivityEligibleForUserAspectRatioButton && (taskInfo.topActivityBoundsLetterboxed || taskInfo.isUserFullscreenOverrideEnabled) - && !mUserAspectRatioButtonShownChecker.get(); + && (!mUserAspectRatioButtonShownChecker.get() || isShowingButton()); } private long getDisappearTimeMs() { diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java index 2a9b72a0bc49..5a4d6c812c17 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java @@ -36,6 +36,7 @@ import android.content.ComponentName; import android.content.res.Configuration; import android.graphics.Rect; import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper.RunWithLooper; import android.util.Pair; import android.view.DisplayInfo; import android.view.InsetsSource; @@ -66,6 +67,7 @@ import org.mockito.MockitoAnnotations; import java.util.HashSet; import java.util.Set; import java.util.function.BiConsumer; +import java.util.function.Supplier; /** * Tests for {@link UserAspectRatioSettingsWindowManager}. @@ -74,6 +76,7 @@ import java.util.function.BiConsumer; * atest WMShellUnitTests:UserAspectRatioSettingsWindowManagerTest */ @RunWith(AndroidTestingRunner.class) +@RunWithLooper @SmallTest public class UserAspectRatioSettingsWindowManagerTest extends ShellTestCase { @@ -81,6 +84,8 @@ public class UserAspectRatioSettingsWindowManagerTest extends ShellTestCase { @Mock private SyncTransactionQueue mSyncTransactionQueue; @Mock + private Supplier<Boolean> mUserAspectRatioButtonShownChecker; + @Mock private BiConsumer<TaskInfo, ShellTaskOrganizer.TaskListener> mOnUserAspectRatioSettingsButtonClicked; @Mock private ShellTaskOrganizer.TaskListener mTaskListener; @@ -106,11 +111,12 @@ public class UserAspectRatioSettingsWindowManagerTest extends ShellTestCase { false, /* topActivityBoundsLetterboxed */ true); mWindowManager = new UserAspectRatioSettingsWindowManager(mContext, mTaskInfo, mSyncTransactionQueue, mTaskListener, new DisplayLayout(), new CompatUIHintsState(), - mOnUserAspectRatioSettingsButtonClicked, mExecutor, flags -> 0, () -> false, - s -> {}); + mOnUserAspectRatioSettingsButtonClicked, mExecutor, flags -> 0, + mUserAspectRatioButtonShownChecker, s -> {}); spyOn(mWindowManager); doReturn(mLayout).when(mWindowManager).inflateLayout(); doReturn(mViewHost).when(mWindowManager).createSurfaceViewHost(); + doReturn(false).when(mUserAspectRatioButtonShownChecker).get(); } @Test @@ -294,6 +300,39 @@ public class UserAspectRatioSettingsWindowManagerTest extends ShellTestCase { } @Test + public void testLayoutHasUserAspectRatioSettingsButton() { + clearInvocations(mWindowManager); + spyOn(mWindowManager); + TaskInfo taskInfo = createTaskInfo(/* eligibleForUserAspectRatioButton= */ + true, /* topActivityBoundsLetterboxed */ true); + + // User aspect ratio settings button has not yet been shown. + doReturn(false).when(mUserAspectRatioButtonShownChecker).get(); + + // Check the layout has the user aspect ratio settings button. + mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true); + assertTrue(mWindowManager.mHasUserAspectRatioSettingsButton); + + // User aspect ratio settings button has been shown and is still visible. + spyOn(mWindowManager); + doReturn(true).when(mWindowManager).isShowingButton(); + doReturn(true).when(mUserAspectRatioButtonShownChecker).get(); + + // Check the layout still has the user aspect ratio settings button. + mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true); + assertTrue(mWindowManager.mHasUserAspectRatioSettingsButton); + + // User aspect ratio settings button has been shown and has timed out so is no longer + // visible. + doReturn(false).when(mWindowManager).isShowingButton(); + doReturn(true).when(mUserAspectRatioButtonShownChecker).get(); + + // Check the layout no longer has the user aspect ratio button. + mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true); + assertFalse(mWindowManager.mHasUserAspectRatioSettingsButton); + } + + @Test public void testAttachToParentSurface() { final SurfaceControl.Builder b = new SurfaceControl.Builder(); mWindowManager.attachToParentSurface(b); |