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

Commit 1c2052c6 authored by Issei Suzuki's avatar Issei Suzuki Committed by Automerger Merge Worker
Browse files

Merge "Use visible activity for remote animation target if available." into tm-dev am: db743bb1

parents fce843c7 db743bb1
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1197,7 +1197,10 @@ public class RecentsAnimationController implements DeathRecipient {
         *                     this is the target task, CLOSING otherwise).
         */
        RemoteAnimationTarget createRemoteAnimationTarget(int overrideTaskId, int overrideMode) {
            final ActivityRecord topApp = mTask.getTopVisibleActivity();
            ActivityRecord topApp = mTask.getTopRealVisibleActivity();
            if (topApp == null) {
                topApp = mTask.getTopVisibleActivity();
            }
            final WindowState mainWindow = topApp != null
                    ? topApp.findMainWindow()
                    : null;
+15 −4
Original line number Diff line number Diff line
@@ -3070,11 +3070,22 @@ class Task extends TaskFragment {
        });
    }

    /**
     * Return the top visible requested activity. The activity has been requested to be visible,
     * but it's possible that the activity has just been created, so no window is yet attached to
     * this activity.
     */
    ActivityRecord getTopVisibleActivity() {
        return getActivity((r) -> {
            // skip hidden (or about to hide) apps
            return !r.mIsExiting && r.isClientVisible() && r.mVisibleRequested;
        });
        return getActivity((r) -> !r.mIsExiting && r.isClientVisible() && r.mVisibleRequested);
    }

    /**
     * Return the top visible activity. The activity has a window on which contents are drawn.
     * However it's possible that the activity has already been requested to be invisible, but the
     * visibility is not yet committed.
     */
    ActivityRecord getTopRealVisibleActivity() {
        return getActivity((r) -> !r.mIsExiting && r.isClientVisible() && r.isVisible());
    }

    ActivityRecord getTopWaitSplashScreenActivity() {
+25 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import android.platform.test.annotations.Presubmit;
import android.util.SparseBooleanArray;
import android.view.IRecentsAnimationRunner;
import android.view.SurfaceControl;
import android.view.WindowManager.LayoutParams;
import android.window.TaskSnapshot;

import androidx.test.filters.SmallTest;
@@ -161,6 +162,30 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
        assertFalse(mController.isAnimatingTask(hiddenActivity.getTask()));
    }

    @Test
    public void testLaunchAndStartRecents_expectTargetAndVisible() throws Exception {
        mWm.setRecentsAnimationController(mController);
        final ActivityRecord homeActivity = createHomeActivity();
        final Task task = createTask(mDefaultDisplay);
        // Emulate that activity1 has just launched activity2, but app transition has not yet been
        // executed.
        final ActivityRecord activity1 = createActivityRecord(task);
        activity1.setVisible(true);
        activity1.mVisibleRequested = false;
        activity1.addWindow(createWindowState(new LayoutParams(TYPE_BASE_APPLICATION), activity1));

        final ActivityRecord activity2 = createActivityRecord(task);
        activity2.setVisible(false);
        activity2.mVisibleRequested = true;

        mDefaultDisplay.getConfiguration().windowConfiguration.setRotation(
                mDefaultDisplay.getRotation());
        initializeRecentsAnimationController(mController, homeActivity);
        mController.startAnimation();
        verify(mMockRunner, never()).onAnimationCanceled(null /* taskIds */,
                null /* taskSnapshots */);
    }

    @Test
    public void testWallpaperIncluded_expectTarget() throws Exception {
        mWm.setRecentsAnimationController(mController);