Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 630f3af9 authored by Bill Lin's avatar Bill Lin
Browse files

Refresh display bounds when display layout updated

Previoulsy mDefaultDisplayBounds & mLastVisualDisplayBounds are
incorrect after device reboot without re-register DisplayAreaOrganizer.
Then the bounds does not set correctly for transition.
When AnimationController#getAnimator() get incorrect display bounds,
either surface bounds or rounded corner does not crop correctly.

Test: manual enable OHM, reboot device and trigger
     (Bounds/Rounded corner should works when trigger)
Test: atest WMShellUnitTests
Bug: 212651010
Change-Id: Ib30edf6ecc2244f7fec7e233b0fb048d5ee40f3c
parent 88041a12
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -277,6 +277,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController>,
        registerSettingObservers(mUserId);
        setupTimeoutListener();
        updateSettings();
        updateDisplayLayout(mContext.getDisplayId());

        mAccessibilityManager = AccessibilityManager.getInstance(context);
        mAccessibilityManager.addAccessibilityStateChangeListener(
@@ -448,8 +449,13 @@ public class OneHandedController implements RemoteCallable<OneHandedController>,
        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);
+3 −2
Original line number Diff line number Diff line
@@ -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);
+8 −0
Original line number Diff line number Diff line
@@ -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);
+7 −0
Original line number Diff line number Diff line
@@ -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();
    }
}