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

Commit 4a5835b5 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 24D1-dev

parents e31f2125 22a770af
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
@@ -350,7 +350,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) {
@@ -387,7 +393,6 @@ class InsetsSourceProvider {
            mStateController.notifyControlChanged(mControlTarget);
        }
    }
    }

    private Point getWindowFrameSurfacePosition() {
        final WindowState win = mWindowContainer.asWindowState();
+7 −1
Original line number Diff line number Diff line
@@ -1232,7 +1232,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(),
@@ -1278,11 +1280,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,