From 6bf411560603680f0e1e298ceade4d278dc77847 Mon Sep 17 00:00:00 2001 From: Jason Chang Date: Sun, 27 Mar 2022 17:04:47 +0800 Subject: [PATCH] Fix One-handed mode tutorial broken on large screen device Change the check statement for Portrait and Landscape, then only allow Portrait can trigger One-handed mode. Bug: 223486060 Test: manual Test: atest WMShellUnitTests Change-Id: If740164d287dbddadd7cae7b6e7fe17b7bede717 --- .../onehanded/BackgroundWindowManager.java | 7 +----- .../shell/onehanded/OneHandedController.java | 4 +--- .../onehanded/OneHandedTutorialHandler.java | 7 +----- .../onehanded/OneHandedControllerTest.java | 23 +++++++++---------- 4 files changed, 14 insertions(+), 27 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/BackgroundWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/BackgroundWindowManager.java index c20b7d9b27472..b310ee2095bff 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/BackgroundWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/BackgroundWindowManager.java @@ -142,12 +142,7 @@ public final class BackgroundWindowManager extends WindowlessWindowManager { * @param displayLayout The latest {@link DisplayLayout} for display bounds. */ public void onDisplayChanged(DisplayLayout displayLayout) { - // One-handed mode is only available on portrait. - if (displayLayout.height() > displayLayout.width()) { - mDisplayBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height()); - } else { - mDisplayBounds = new Rect(0, 0, displayLayout.height(), displayLayout.width()); - } + mDisplayBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height()); } private void updateThemeOnly() { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java index 48acfc1c76e70..179b725ab2109 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java @@ -37,7 +37,6 @@ import android.os.ServiceManager; import android.os.SystemProperties; import android.provider.Settings; import android.util.Slog; -import android.view.Surface; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; import android.window.WindowContainerTransaction; @@ -349,8 +348,7 @@ public class OneHandedController implements RemoteCallable, return; } - final int currentRotation = mDisplayAreaOrganizer.getDisplayLayout().rotation(); - if (currentRotation != Surface.ROTATION_0 && currentRotation != Surface.ROTATION_180) { + if (mDisplayAreaOrganizer.getDisplayLayout().isLandscape()) { Slog.w(TAG, "One handed mode only support portrait mode"); return; } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java index 04e8cf9d2c44b..fe997b93616bb 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java @@ -149,12 +149,7 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback, * @param displayLayout The latest {@link DisplayLayout} representing current displayId */ public void onDisplayChanged(DisplayLayout displayLayout) { - // Ensure the mDisplayBounds is portrait, due to OHM only support on portrait - if (displayLayout.height() > displayLayout.width()) { - mDisplayBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height()); - } else { - mDisplayBounds = new Rect(0, 0, displayLayout.height(), displayLayout.width()); - } + mDisplayBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height()); mTutorialAreaHeight = Math.round(mDisplayBounds.height() * mTutorialHeightRatio); mAlphaTransitionStart = mTutorialAreaHeight * START_TRANSITION_FRACTION; mBackgroundWindowManager.onDisplayChanged(displayLayout); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java index 2886b97a30209..ecf1c5d418644 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java @@ -56,6 +56,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; @SmallTest @@ -64,12 +65,13 @@ public class OneHandedControllerTest extends OneHandedTestCase { private int mCurrentUser = UserHandle.myUserId(); Display mDisplay; - DisplayLayout mDisplayLayout; OneHandedAccessibilityUtil mOneHandedAccessibilityUtil; OneHandedController mSpiedOneHandedController; OneHandedTimeoutHandler mSpiedTimeoutHandler; OneHandedState mSpiedTransitionState; + @Mock + DisplayLayout mDisplayLayout; @Mock DisplayController mMockDisplayController; @Mock @@ -105,7 +107,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { public void setUp() { MockitoAnnotations.initMocks(this); mDisplay = mContext.getDisplay(); - mDisplayLayout = new DisplayLayout(mContext, mDisplay); + mDisplayLayout = Mockito.mock(DisplayLayout.class); mSpiedTimeoutHandler = spy(new OneHandedTimeoutHandler(mMockShellMainExecutor)); mSpiedTransitionState = spy(new OneHandedState()); @@ -124,7 +126,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { when(mMockSettingsUitl.getShortcutEnabled(any(), anyInt())).thenReturn(false); when(mMockDisplayAreaOrganizer.getLastDisplayBounds()).thenReturn( - new Rect(0, 0, mDisplayLayout.width(), mDisplayLayout.height())); + new Rect(0, 0, 1080, 2400)); when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(mDisplayLayout); mOneHandedAccessibilityUtil = new OneHandedAccessibilityUtil(mContext); @@ -302,10 +304,9 @@ public class OneHandedControllerTest extends OneHandedTestCase { @Test public void testRotation90CanNotStartOneHanded() { - final DisplayLayout landscapeDisplayLayout = new DisplayLayout(mDisplayLayout); - landscapeDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90); mSpiedTransitionState.setState(STATE_NONE); - when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(landscapeDisplayLayout); + when(mDisplayLayout.isLandscape()).thenReturn(true); mSpiedOneHandedController.setOneHandedEnabled(true); mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */); mSpiedOneHandedController.startOneHanded(); @@ -315,11 +316,10 @@ public class OneHandedControllerTest extends OneHandedTestCase { @Test public void testRotation180CanStartOneHanded() { - final DisplayLayout testDisplayLayout = new DisplayLayout(mDisplayLayout); - testDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_180); + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_180); mSpiedTransitionState.setState(STATE_NONE); when(mMockDisplayAreaOrganizer.isReady()).thenReturn(true); - when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(testDisplayLayout); + when(mDisplayLayout.isLandscape()).thenReturn(false); mSpiedOneHandedController.setOneHandedEnabled(true); mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */); mSpiedOneHandedController.startOneHanded(); @@ -329,10 +329,9 @@ public class OneHandedControllerTest extends OneHandedTestCase { @Test public void testRotation270CanNotStartOneHanded() { - final DisplayLayout testDisplayLayout = new DisplayLayout(mDisplayLayout); - testDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270); + mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270); mSpiedTransitionState.setState(STATE_NONE); - when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(testDisplayLayout); + when(mDisplayLayout.isLandscape()).thenReturn(true); mSpiedOneHandedController.setOneHandedEnabled(true); mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */); mSpiedOneHandedController.startOneHanded();