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 507204ce02290..c9c73fd8f191c 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 @@ -277,6 +277,7 @@ public class OneHandedController implements RemoteCallable, registerSettingObservers(mUserId); setupTimeoutListener(); updateSettings(); + updateDisplayLayout(mContext.getDisplayId()); mAccessibilityManager = AccessibilityManager.getInstance(context); mAccessibilityManager.addAccessibilityStateChangeListener( @@ -448,8 +449,13 @@ public class OneHandedController implements RemoteCallable, onShortcutEnabledChanged(); } - private void updateDisplayLayout(int displayId) { + @VisibleForTesting + void updateDisplayLayout(int displayId) { final DisplayLayout newDisplayLayout = mDisplayController.getDisplayLayout(displayId); + if (newDisplayLayout == null) { + Slog.w(TAG, "Failed to get new DisplayLayout."); + return; + } mDisplayAreaOrganizer.setDisplayLayout(newDisplayLayout); mTutorialHandler.onDisplayChanged(newDisplayLayout); mBackgroundPanelOrganizer.onDisplayChanged(newDisplayLayout); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java index 1b2f4768110b9..ec3ef5a27fe0a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java @@ -123,9 +123,8 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { OneHandedBackgroundPanelOrganizer oneHandedBackgroundGradientOrganizer, ShellExecutor mainExecutor) { super(mainExecutor); - mDisplayLayout.set(displayLayout); + setDisplayLayout(displayLayout); mOneHandedSettingsUtil = oneHandedSettingsUtil; - updateDisplayBounds(); mAnimationController = animationController; final int animationDurationConfig = context.getResources().getInteger( R.integer.config_one_handed_translate_animation_duration); @@ -282,6 +281,7 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { @VisibleForTesting void setDisplayLayout(@NonNull DisplayLayout displayLayout) { mDisplayLayout.set(displayLayout); + updateDisplayBounds(); } @VisibleForTesting @@ -289,6 +289,7 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { return mDisplayAreaTokenMap; } + @VisibleForTesting void updateDisplayBounds() { mDefaultDisplayBounds.set(0, 0, mDisplayLayout.width(), mDisplayLayout.height()); mLastVisualDisplayBounds.set(mDefaultDisplayBounds); 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 0a3a849230537..16bc50750e1d8 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 @@ -109,6 +109,7 @@ public class OneHandedControllerTest extends OneHandedTestCase { mSpiedTransitionState = spy(new OneHandedState()); when(mMockDisplayController.getDisplay(anyInt())).thenReturn(mDisplay); + when(mMockDisplayController.getDisplayLayout(anyInt())).thenReturn(null); when(mMockDisplayAreaOrganizer.getDisplayAreaTokenMap()).thenReturn(new ArrayMap<>()); when(mMockDisplayAreaOrganizer.isReady()).thenReturn(true); when(mMockBackgroundOrganizer.isRegistered()).thenReturn(true); @@ -152,6 +153,13 @@ public class OneHandedControllerTest extends OneHandedTestCase { assertThat(mSpiedTransitionState.getState()).isEqualTo(STATE_NONE); } + @Test + public void testNullDisplayLayout() { + mSpiedOneHandedController.updateDisplayLayout(0); + + verify(mMockDisplayAreaOrganizer, never()).setDisplayLayout(any()); + } + @Test public void testStartOneHandedShouldTriggerScheduleOffset() { mSpiedTransitionState.setState(STATE_NONE); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java index ef16fd391235c..1d92a48c25fda 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizerTest.java @@ -432,4 +432,11 @@ public class OneHandedDisplayAreaOrganizerTest extends OneHandedTestCase { assertThat(testSpiedDisplayAreaOrganizer.isReady()).isFalse(); } + + @Test + public void testDisplayArea_setDisplayLayout_should_updateDisplayBounds() { + mSpiedDisplayAreaOrganizer.setDisplayLayout(mDisplayLayout); + + verify(mSpiedDisplayAreaOrganizer).updateDisplayBounds(); + } }