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

Commit 96ed620f authored by Ben Lin's avatar Ben Lin Committed by Android (Google) Code Review
Browse files

Merge changes I8923ddfe,I56daea99 into main

* changes:
  DesktopModeWindowDecor: update App Handle holder after recents anim.
  Revert "Add a new Recents transition state to signal a stop request."
parents 0b7c799f 148e35c5
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ import static android.window.TransitionInfo.FLAG_TRANSLUCENT;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_ANIMATING;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_NOT_RUNNING;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_REQUESTED;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_STOP_REQUESTED;
import static com.android.wm.shell.shared.ShellSharedConstants.KEY_EXTRA_SHELL_CAN_HAND_OFF_ANIMATION;
import static com.android.wm.shell.shared.split.SplitBounds.KEY_EXTRA_SPLIT_BOUNDS;
import static com.android.wm.shell.transition.Transitions.TRANSIT_END_RECENTS_TRANSITION;
@@ -1572,10 +1571,6 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
                }
            }

            for (int i = 0; i < mStateListeners.size(); i++) {
                mStateListeners.get(i).onTransitionStateChanged(TRANSITION_STATE_STOP_REQUESTED);
            }

            // Notify the mixers of the pending finish
            for (int i = 0; i < mMixers.size(); ++i) {
                mMixers.get(i).handleFinishRecents(returningToApp, wct, t);
+0 −8
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ public interface RecentsTransitionStateListener {
            TRANSITION_STATE_NOT_RUNNING,
            TRANSITION_STATE_REQUESTED,
            TRANSITION_STATE_ANIMATING,
            TRANSITION_STATE_STOP_REQUESTED,
    })
    @Retention(RetentionPolicy.SOURCE)
    @interface RecentsTransitionState {}
@@ -36,7 +35,6 @@ public interface RecentsTransitionStateListener {
    int TRANSITION_STATE_NOT_RUNNING = 1;
    int TRANSITION_STATE_REQUESTED = 2;
    int TRANSITION_STATE_ANIMATING = 3;
    int TRANSITION_STATE_STOP_REQUESTED = 4;

    /** Notifies whether the recents transition state changes. */
    default void onTransitionStateChanged(@RecentsTransitionState int state) {
@@ -52,18 +50,12 @@ public interface RecentsTransitionStateListener {
        return state >= TRANSITION_STATE_ANIMATING;
    }

    /** Returns whether the recents transition has been requested to stop and is finishing up. */
    static boolean isFinishing(@RecentsTransitionState int state) {
        return state == TRANSITION_STATE_STOP_REQUESTED || state == TRANSITION_STATE_NOT_RUNNING;
    }

    /** Returns a string representation of the given state. */
    static String stateToString(@RecentsTransitionState int state) {
        return switch (state) {
            case TRANSITION_STATE_NOT_RUNNING -> "TRANSITION_STATE_NOT_RUNNING";
            case TRANSITION_STATE_REQUESTED -> "TRANSITION_STATE_REQUESTED";
            case TRANSITION_STATE_ANIMATING -> "TRANSITION_STATE_ANIMATING";
            case TRANSITION_STATE_STOP_REQUESTED -> "TRANSITION_STATE_STOP_REQUESTED";
            default -> "UNKNOWN";
        };
    }
+3 −13
Original line number Diff line number Diff line
@@ -1994,21 +1994,11 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                        setIsRecentsTransitionRunningForTask(taskId, true);
                    }
                    return;
                case RecentsTransitionStateListener.TRANSITION_STATE_STOP_REQUESTED:
                    if (DesktopModeFlags.ENABLE_INPUT_LAYER_TRANSITION_FIX.isTrue()) {
                        // No Recents transition running - clean up window decorations
                        for (int taskId : mAnimatingTaskIds) {
                            setIsRecentsTransitionRunningForTask(taskId, false);
                        }
                    }
                    return;
                case RecentsTransitionStateListener.TRANSITION_STATE_NOT_RUNNING:
                    if (!DesktopModeFlags.ENABLE_INPUT_LAYER_TRANSITION_FIX.isTrue()) {
                    // No Recents transition running - clean up window decorations
                    for (int taskId : mAnimatingTaskIds) {
                        setIsRecentsTransitionRunningForTask(taskId, false);
                    }
                    }
                    mAnimatingTaskIds.clear();
                    return;
                default:
+5 −0
Original line number Diff line number Diff line
@@ -1883,6 +1883,11 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
     */
    void setIsRecentsTransitionRunning(boolean isRecentsTransitionRunning) {
        mIsRecentsTransitionRunning = isRecentsTransitionRunning;
        // TODO (b/415631133): Update this to call on #relayout once b/415631133 is fixed
        if (isAppHandle(mWindowDecorViewHolder)
                && DesktopModeFlags.ENABLE_INPUT_LAYER_TRANSITION_FIX.isTrue()) {
            updateAppHandleViewHolder();
        }
    }

    /**
+12 −21
Original line number Diff line number Diff line
@@ -28,14 +28,12 @@ import static com.android.wm.shell.Flags.FLAG_ENABLE_RECENTS_BOOKEND_TRANSITION;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_ANIMATING;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_NOT_RUNNING;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_REQUESTED;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_STOP_REQUESTED;
import static com.android.wm.shell.transition.Transitions.TRANSIT_END_RECENTS_TRANSITION;
import static com.android.wm.shell.transition.Transitions.TRANSIT_START_RECENTS_TRANSITION;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
@@ -92,8 +90,6 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
@@ -223,7 +219,7 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
        startRecentsTransition(/* synthetic= */ false);
        mMainExecutor.flushAll();

        assertThat(listener.getLastProcessedState()).isEqualTo(TRANSITION_STATE_REQUESTED);
        assertThat(listener.getState()).isEqualTo(TRANSITION_STATE_REQUESTED);
    }

    @Test
@@ -237,7 +233,7 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
                mock(Transitions.TransitionFinishCallback.class));
        mMainExecutor.flushAll();

        assertThat(listener.getLastProcessedState()).isEqualTo(TRANSITION_STATE_ANIMATING);
        assertThat(listener.getState()).isEqualTo(TRANSITION_STATE_ANIMATING);
    }

    @Test
@@ -253,8 +249,7 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
                false /* sendUserLeaveHint */, mock(IResultReceiver.class));
        mMainExecutor.flushAll();

        assertThat(listener.getLastProcessedState()).isEqualTo(TRANSITION_STATE_NOT_RUNNING);
        assertTrue(listener.didStateGetProcessed(TRANSITION_STATE_STOP_REQUESTED));
        assertThat(listener.getState()).isEqualTo(TRANSITION_STATE_NOT_RUNNING);
    }

    @Test
@@ -266,7 +261,7 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
        mRecentsTransitionHandler.findController(transition).cancel("test");
        mMainExecutor.flushAll();

        assertThat(listener.getLastProcessedState()).isEqualTo(TRANSITION_STATE_NOT_RUNNING);
        assertThat(listener.getState()).isEqualTo(TRANSITION_STATE_NOT_RUNNING);
    }

    @Test
@@ -277,7 +272,7 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
        startRecentsTransition(/* synthetic= */ true);
        mMainExecutor.flushAll();

        assertThat(listener.getLastProcessedState()).isEqualTo(TRANSITION_STATE_ANIMATING);
        assertThat(listener.getState()).isEqualTo(TRANSITION_STATE_ANIMATING);
    }

    @Test
@@ -290,7 +285,7 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
                false /* sendUserLeaveHint */, mock(IResultReceiver.class));
        mMainExecutor.flushAll();

        assertThat(listener.getLastProcessedState()).isEqualTo(TRANSITION_STATE_NOT_RUNNING);
        assertThat(listener.getState()).isEqualTo(TRANSITION_STATE_NOT_RUNNING);
    }

    @Test
@@ -302,7 +297,7 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
        mRecentsTransitionHandler.findController(transition).cancel("test");
        mMainExecutor.flushAll();

        assertThat(listener.getLastProcessedState()).isEqualTo(TRANSITION_STATE_NOT_RUNNING);
        assertThat(listener.getState()).isEqualTo(TRANSITION_STATE_NOT_RUNNING);
    }

    @Test
@@ -483,21 +478,17 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
    }

    private static class TestTransitionStateListener implements RecentsTransitionStateListener {
        private final List<Integer> mProcessedStates =
                new ArrayList<>(TRANSITION_STATE_NOT_RUNNING);
        @RecentsTransitionState
        private int mState = TRANSITION_STATE_NOT_RUNNING;

        @Override
        public void onTransitionStateChanged(int state) {
            mProcessedStates.add(state);
            mState = state;
        }

        @RecentsTransitionState
        int getLastProcessedState() {
            return mProcessedStates.getLast();
        }

        boolean didStateGetProcessed(int state) {
            return mProcessedStates.contains(state);
        int getState() {
            return mState;
        }
    }
}
Loading