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

Commit 9768747b authored by wilsonshih's avatar wilsonshih
Browse files

Fix switch task flicker from reveal animation.

While prepareing reveal animation in core, the initial position will be
set to 0,0 even when the window is shift by other insets.
- Only splash screen need to apply reveal animation, so ignore the
animation when removing task snapshot starting window.
- Set the initial position after the animation leash just created.

Fixes: 192333159
Test: Rotate device to landscape then use task switch to launch apps,
testing for both hot and cold launch.

Change-Id: I82d78822e0a44350a49ac4cee105f10790014982
parent fc3e3832
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2252,6 +2252,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        }

        final WindowManagerPolicy.StartingSurface surface;
        final StartingData startingData = mStartingData;
        if (mStartingData != null) {
            surface = mStartingSurface;
            mStartingData = null;
@@ -2278,7 +2279,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        final Runnable removeSurface = () -> {
            ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Removing startingView=%s", surface);
            try {
                surface.remove(prepareAnimation);
                surface.remove(prepareAnimation && startingData.needRevealAnimation());
            } catch (Exception e) {
                Slog.w(TAG_WM, "Exception when removing starting window", e);
            }
+5 −0
Original line number Diff line number Diff line
@@ -40,6 +40,11 @@ class SnapshotStartingData extends StartingData {
                mSnapshot);
    }

    @Override
    boolean needRevealAnimation() {
        return false;
    }

    @Override
    boolean hasImeSurface() {
        return mSnapshot.hasImeSurface();
+5 −0
Original line number Diff line number Diff line
@@ -58,4 +58,9 @@ class SplashScreenStartingData extends StartingData {
                mLogo, mWindowFlags, mMergedOverrideConfiguration,
                activity.getDisplayContent().getDisplayId());
    }

    @Override
    boolean needRevealAnimation() {
        return true;
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -47,6 +47,11 @@ public abstract class StartingData {
     */
    abstract StartingSurface createStartingSurface(ActivityRecord activity);

    /**
     * @return Whether to apply reveal animation when exiting the starting window.
     */
    abstract boolean needRevealAnimation();

    /** @see android.window.TaskSnapshot#hasImeSurface() */
    boolean hasImeSurface() {
        return false;
+1 −0
Original line number Diff line number Diff line
@@ -197,6 +197,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
                                ANIMATION_TYPE_STARTING_REVEAL);
                        windowAnimationLeash = adaptor.mAnimationLeash;
                        mainFrame = mainWindow.getRelativeFrame();
                        t.setPosition(windowAnimationLeash, mainFrame.left, mainFrame.top);
                    }
                }
            }