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

Commit 10e6e8d7 authored by wilsonshih's avatar wilsonshih
Browse files

Remove snapshot starting window immediately if no defer request.

No defer removing windowless snapshot surface. This change won't affect
task snapshot starting window.

Bug: 328664843
Test: Verify no extra defer when removing windowless snapshot surface.
Change-Id: I6d3a5fe135075c70b22ae2f0ac3ed1d3607effab
parent 00481176
Loading
Loading
Loading
Loading
+17 −10
Original line number Diff line number Diff line
@@ -59,28 +59,35 @@ public final class StartingWindowRemovalInfo implements Parcelable {
     */
    public boolean playRevealAnimation;

    /** The mode is no need to defer removing the starting window for IME */
    public static final int DEFER_MODE_NONE = 0;
    /** The mode is default defer removing the snapshot starting window. */
    public static final int DEFER_MODE_DEFAULT = 0;

    /** The mode to defer removing the starting window until IME has drawn */
    /** The mode to defer removing the snapshot starting window until IME has drawn. */
    public static final int DEFER_MODE_NORMAL = 1;

    /** The mode to defer the starting window removal until IME drawn and finished the rotation */
    /**
     * The mode to defer the snapshot starting window removal until IME drawn and finished the
     * rotation.
     */
    public static final int DEFER_MODE_ROTATION = 2;

    /** The mode is no need to defer removing the snapshot starting window. */
    public static final int DEFER_MODE_NONE = 3;

    @IntDef(prefix = { "DEFER_MODE_" }, value = {
            DEFER_MODE_NONE,
            DEFER_MODE_DEFAULT,
            DEFER_MODE_NORMAL,
            DEFER_MODE_ROTATION,
            DEFER_MODE_NONE,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface DeferMode {}

    /**
     * Whether need to defer removing the starting window for IME.
     * Whether need to defer removing the snapshot starting window.
     * @hide
     */
    public @DeferMode int deferRemoveForImeMode;
    public @DeferMode int deferRemoveMode;

    /**
     * The rounded corner radius
@@ -116,7 +123,7 @@ public final class StartingWindowRemovalInfo implements Parcelable {
        windowAnimationLeash = source.readTypedObject(SurfaceControl.CREATOR);
        mainFrame = source.readTypedObject(Rect.CREATOR);
        playRevealAnimation = source.readBoolean();
        deferRemoveForImeMode = source.readInt();
        deferRemoveMode = source.readInt();
        roundedCornerRadius = source.readFloat();
        windowlessSurface = source.readBoolean();
        removeImmediately = source.readBoolean();
@@ -128,7 +135,7 @@ public final class StartingWindowRemovalInfo implements Parcelable {
        dest.writeTypedObject(windowAnimationLeash, flags);
        dest.writeTypedObject(mainFrame, flags);
        dest.writeBoolean(playRevealAnimation);
        dest.writeInt(deferRemoveForImeMode);
        dest.writeInt(deferRemoveMode);
        dest.writeFloat(roundedCornerRadius);
        dest.writeBoolean(windowlessSurface);
        dest.writeBoolean(removeImmediately);
@@ -140,7 +147,7 @@ public final class StartingWindowRemovalInfo implements Parcelable {
                + " frame=" + mainFrame
                + " playRevealAnimation=" + playRevealAnimation
                + " roundedCornerRadius=" + roundedCornerRadius
                + " deferRemoveForImeMode=" + deferRemoveForImeMode
                + " deferRemoveMode=" + deferRemoveMode
                + " windowlessSurface=" + windowlessSurface
                + " removeImmediately=" + removeImmediately + "}";
    }
+8 −10
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.wm.shell.startingsurface;

import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.window.StartingWindowRemovalInfo.DEFER_MODE_NONE;
import static android.window.StartingWindowRemovalInfo.DEFER_MODE_NORMAL;
import static android.window.StartingWindowRemovalInfo.DEFER_MODE_ROTATION;

@@ -270,21 +271,18 @@ public class StartingSurfaceDrawer {

        @Override
        public final boolean removeIfPossible(StartingWindowRemovalInfo info, boolean immediately) {
            if (immediately) {
            if (immediately
                    // Show the latest content as soon as possible for unlocking to home.
                    || mActivityType == ACTIVITY_TYPE_HOME
                    || info.deferRemoveMode == DEFER_MODE_NONE) {
                removeImmediately();
            } else {
                scheduleRemove(info.deferRemoveForImeMode);
                return false;
            }
                return true;
            }
            scheduleRemove(info.deferRemoveMode);
            return false;
        }

        void scheduleRemove(@StartingWindowRemovalInfo.DeferMode int deferRemoveForImeMode) {
            // Show the latest content as soon as possible for unlocking to home.
            if (mActivityType == ACTIVITY_TYPE_HOME) {
                removeImmediately();
                return;
            }
            mRemoveExecutor.removeCallbacks(mScheduledRunnable);
            final long delayRemovalTime;
            switch (deferRemoveForImeMode) {
+3 −4
Original line number Diff line number Diff line
@@ -671,12 +671,10 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
            if (hasImeSurface) {
                if (topActivity.isVisibleRequested() && dc.mInputMethodWindow != null
                        && dc.isFixedRotationLaunchingApp(topActivity)) {
                    removalInfo.deferRemoveForImeMode = DEFER_MODE_ROTATION;
                    removalInfo.deferRemoveMode = DEFER_MODE_ROTATION;
                } else {
                    removalInfo.deferRemoveForImeMode = DEFER_MODE_NORMAL;
                    removalInfo.deferRemoveMode = DEFER_MODE_NORMAL;
                }
            } else {
                removalInfo.deferRemoveForImeMode = DEFER_MODE_NONE;
            }

            final WindowState mainWindow =
@@ -745,6 +743,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
        removalInfo.taskId = taskId;
        removalInfo.windowlessSurface = true;
        removalInfo.removeImmediately = immediately;
        removalInfo.deferRemoveMode = DEFER_MODE_NONE;
        try {
            lastOrganizer.removeStartingWindow(removalInfo);
        } catch (RemoteException e) {