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

Commit 34c0204d authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Android (Google) Code Review
Browse files

Merge "Remove snapshot starting window immediately if no defer request." into main

parents ac4a6f16 10e6e8d7
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) {