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

Commit 3ace69d8 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Update insets position after rotation change is done" into main

parents 3fe6df25 a1d5520a
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -288,6 +288,17 @@ class AsyncRotationController extends FadeAnimationController implements Consume
            final SurfaceControl.Transaction t = windowToken.getSyncTransaction();
            clearTransform(t, op.mLeash);
        }
        // The insets position may be frozen by shouldFreezeInsetsPosition(), so refresh the
        // position to the latest state when it is ready to show in new rotation.
        if (mTransitionOp == OP_APP_SWITCH) {
            for (int i = windowToken.getChildCount() - 1; i >= 0; i--) {
                final WindowState w = windowToken.getChildAt(i);
                final InsetsSourceProvider insetsProvider = w.getControllableInsetProvider();
                if (insetsProvider != null) {
                    insetsProvider.updateInsetsControlPosition(w);
                }
            }
        }
    }

    private static void clearTransform(SurfaceControl.Transaction t, SurfaceControl sc) {
+37 −32
Original line number Diff line number Diff line
@@ -351,7 +351,13 @@ class InsetsSourceProvider {
                ? windowState.wouldBeVisibleIfPolicyIgnored() && windowState.isVisibleByPolicy()
                : mWindowContainer.isVisibleRequested();
        setServerVisible(isServerVisible);
        if (mControl != null) {
        updateInsetsControlPosition(windowState);
    }

    void updateInsetsControlPosition(WindowState windowState) {
        if (mControl == null) {
            return;
        }
        boolean changed = false;
        final Point position = getWindowFrameSurfacePosition();
        if (mControl.setSurfacePosition(position.x, position.y) && mControlTarget != null) {
@@ -388,7 +394,6 @@ class InsetsSourceProvider {
            mStateController.notifyControlChanged(mControlTarget);
        }
    }
    }

    private Point getWindowFrameSurfacePosition() {
        final WindowState win = mWindowContainer.asWindowState();
+7 −1
Original line number Diff line number Diff line
@@ -1236,7 +1236,9 @@ public class TransitionTests extends WindowTestsBase {
        final WindowState statusBar = createWindow(null, TYPE_STATUS_BAR, "statusBar");
        makeWindowVisible(statusBar);
        mDisplayContent.getDisplayPolicy().addWindowLw(statusBar, statusBar.mAttrs);
        final WindowState navBar = createWindow(null, TYPE_NAVIGATION_BAR, "navBar");
        final WindowState navBar = createNavBarWithProvidedInsets(mDisplayContent);
        final InsetsSourceProvider navBarInsetsProvider = navBar.getControllableInsetProvider();
        assertNotNull(navBarInsetsProvider);
        final ActivityRecord app = createActivityRecord(mDisplayContent);
        final Transition transition = app.mTransitionController.createTransition(TRANSIT_OPEN);
        app.mTransitionController.requestStartTransition(transition, app.getTask(),
@@ -1282,11 +1284,15 @@ public class TransitionTests extends WindowTestsBase {
        onRotationTransactionReady(player, mWm.mTransactionFactory.get()).onTransactionCommitted();
        assertEquals(ROTATION_ANIMATION_SEAMLESS, player.mLastReady.getChange(
                mDisplayContent.mRemoteToken.toWindowContainerToken()).getRotationAnimation());
        spyOn(navBarInsetsProvider);
        player.finish();

        // The controller should be cleared if the target windows are drawn.
        statusBar.finishDrawing(mWm.mTransactionFactory.get(), Integer.MAX_VALUE);
        assertNull(mDisplayContent.getAsyncRotationController());
        // The shouldFreezeInsetsPosition for navBar was true, so its insets position should be
        // updated if the transition is done.
        verify(navBarInsetsProvider).updateInsetsControlPosition(navBar);
    }

    private static void assertShouldFreezeInsetsPosition(AsyncRotationController controller,