Merge "Fix One-handed mode tutorial broken on large screen device" into tm-dev

This commit is contained in:
Jason Chang
2022-04-07 18:10:11 +00:00
committed by Android (Google) Code Review
4 changed files with 14 additions and 27 deletions

View File

@@ -142,12 +142,7 @@ public final class BackgroundWindowManager extends WindowlessWindowManager {
* @param displayLayout The latest {@link DisplayLayout} for display bounds. * @param displayLayout The latest {@link DisplayLayout} for display bounds.
*/ */
public void onDisplayChanged(DisplayLayout displayLayout) { 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()); mDisplayBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height());
} else {
mDisplayBounds = new Rect(0, 0, displayLayout.height(), displayLayout.width());
}
} }
private void updateThemeOnly() { private void updateThemeOnly() {

View File

@@ -37,7 +37,6 @@ import android.os.ServiceManager;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.provider.Settings; import android.provider.Settings;
import android.util.Slog; import android.util.Slog;
import android.view.Surface;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.accessibility.AccessibilityManager; import android.view.accessibility.AccessibilityManager;
import android.window.WindowContainerTransaction; import android.window.WindowContainerTransaction;
@@ -349,8 +348,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController>,
return; return;
} }
final int currentRotation = mDisplayAreaOrganizer.getDisplayLayout().rotation(); if (mDisplayAreaOrganizer.getDisplayLayout().isLandscape()) {
if (currentRotation != Surface.ROTATION_0 && currentRotation != Surface.ROTATION_180) {
Slog.w(TAG, "One handed mode only support portrait mode"); Slog.w(TAG, "One handed mode only support portrait mode");
return; return;
} }

View File

@@ -149,12 +149,7 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback,
* @param displayLayout The latest {@link DisplayLayout} representing current displayId * @param displayLayout The latest {@link DisplayLayout} representing current displayId
*/ */
public void onDisplayChanged(DisplayLayout displayLayout) { 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()); mDisplayBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height());
} else {
mDisplayBounds = new Rect(0, 0, displayLayout.height(), displayLayout.width());
}
mTutorialAreaHeight = Math.round(mDisplayBounds.height() * mTutorialHeightRatio); mTutorialAreaHeight = Math.round(mDisplayBounds.height() * mTutorialHeightRatio);
mAlphaTransitionStart = mTutorialAreaHeight * START_TRANSITION_FRACTION; mAlphaTransitionStart = mTutorialAreaHeight * START_TRANSITION_FRACTION;
mBackgroundWindowManager.onDisplayChanged(displayLayout); mBackgroundWindowManager.onDisplayChanged(displayLayout);

View File

@@ -56,6 +56,7 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
@SmallTest @SmallTest
@@ -64,12 +65,13 @@ public class OneHandedControllerTest extends OneHandedTestCase {
private int mCurrentUser = UserHandle.myUserId(); private int mCurrentUser = UserHandle.myUserId();
Display mDisplay; Display mDisplay;
DisplayLayout mDisplayLayout;
OneHandedAccessibilityUtil mOneHandedAccessibilityUtil; OneHandedAccessibilityUtil mOneHandedAccessibilityUtil;
OneHandedController mSpiedOneHandedController; OneHandedController mSpiedOneHandedController;
OneHandedTimeoutHandler mSpiedTimeoutHandler; OneHandedTimeoutHandler mSpiedTimeoutHandler;
OneHandedState mSpiedTransitionState; OneHandedState mSpiedTransitionState;
@Mock
DisplayLayout mDisplayLayout;
@Mock @Mock
DisplayController mMockDisplayController; DisplayController mMockDisplayController;
@Mock @Mock
@@ -105,7 +107,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mDisplay = mContext.getDisplay(); mDisplay = mContext.getDisplay();
mDisplayLayout = new DisplayLayout(mContext, mDisplay); mDisplayLayout = Mockito.mock(DisplayLayout.class);
mSpiedTimeoutHandler = spy(new OneHandedTimeoutHandler(mMockShellMainExecutor)); mSpiedTimeoutHandler = spy(new OneHandedTimeoutHandler(mMockShellMainExecutor));
mSpiedTransitionState = spy(new OneHandedState()); mSpiedTransitionState = spy(new OneHandedState());
@@ -124,7 +126,7 @@ public class OneHandedControllerTest extends OneHandedTestCase {
when(mMockSettingsUitl.getShortcutEnabled(any(), anyInt())).thenReturn(false); when(mMockSettingsUitl.getShortcutEnabled(any(), anyInt())).thenReturn(false);
when(mMockDisplayAreaOrganizer.getLastDisplayBounds()).thenReturn( when(mMockDisplayAreaOrganizer.getLastDisplayBounds()).thenReturn(
new Rect(0, 0, mDisplayLayout.width(), mDisplayLayout.height())); new Rect(0, 0, 1080, 2400));
when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(mDisplayLayout); when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(mDisplayLayout);
mOneHandedAccessibilityUtil = new OneHandedAccessibilityUtil(mContext); mOneHandedAccessibilityUtil = new OneHandedAccessibilityUtil(mContext);
@@ -302,10 +304,9 @@ public class OneHandedControllerTest extends OneHandedTestCase {
@Test @Test
public void testRotation90CanNotStartOneHanded() { public void testRotation90CanNotStartOneHanded() {
final DisplayLayout landscapeDisplayLayout = new DisplayLayout(mDisplayLayout); mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90);
landscapeDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_90);
mSpiedTransitionState.setState(STATE_NONE); mSpiedTransitionState.setState(STATE_NONE);
when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(landscapeDisplayLayout); when(mDisplayLayout.isLandscape()).thenReturn(true);
mSpiedOneHandedController.setOneHandedEnabled(true); mSpiedOneHandedController.setOneHandedEnabled(true);
mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */); mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */);
mSpiedOneHandedController.startOneHanded(); mSpiedOneHandedController.startOneHanded();
@@ -315,11 +316,10 @@ public class OneHandedControllerTest extends OneHandedTestCase {
@Test @Test
public void testRotation180CanStartOneHanded() { public void testRotation180CanStartOneHanded() {
final DisplayLayout testDisplayLayout = new DisplayLayout(mDisplayLayout); mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_180);
testDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_180);
mSpiedTransitionState.setState(STATE_NONE); mSpiedTransitionState.setState(STATE_NONE);
when(mMockDisplayAreaOrganizer.isReady()).thenReturn(true); when(mMockDisplayAreaOrganizer.isReady()).thenReturn(true);
when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(testDisplayLayout); when(mDisplayLayout.isLandscape()).thenReturn(false);
mSpiedOneHandedController.setOneHandedEnabled(true); mSpiedOneHandedController.setOneHandedEnabled(true);
mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */); mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */);
mSpiedOneHandedController.startOneHanded(); mSpiedOneHandedController.startOneHanded();
@@ -329,10 +329,9 @@ public class OneHandedControllerTest extends OneHandedTestCase {
@Test @Test
public void testRotation270CanNotStartOneHanded() { public void testRotation270CanNotStartOneHanded() {
final DisplayLayout testDisplayLayout = new DisplayLayout(mDisplayLayout); mDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270);
testDisplayLayout.rotateTo(mContext.getResources(), Surface.ROTATION_270);
mSpiedTransitionState.setState(STATE_NONE); mSpiedTransitionState.setState(STATE_NONE);
when(mMockDisplayAreaOrganizer.getDisplayLayout()).thenReturn(testDisplayLayout); when(mDisplayLayout.isLandscape()).thenReturn(true);
mSpiedOneHandedController.setOneHandedEnabled(true); mSpiedOneHandedController.setOneHandedEnabled(true);
mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */); mSpiedOneHandedController.setLockedDisabled(false /* locked */, false /* enabled */);
mSpiedOneHandedController.startOneHanded(); mSpiedOneHandedController.startOneHanded();