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

Commit afa235e4 authored by Matthew Ng's avatar Matthew Ng Committed by android-build-merger
Browse files

Merge "Fixes the animation and state when docking a task by drag" into oc-dev

am: 008e6201

Change-Id: Id626a44a564ae0811338bb04c3c6efb698d07b37
parents 4ec78fa1 008e6201
Loading
Loading
Loading
Loading
+67 −61
Original line number Diff line number Diff line
@@ -2380,7 +2380,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
    }

    void notifyAppTransitionDone() {
        continueUpdateBounds(HOME_STACK_ID);
        continueUpdateBounds(RECENTS_STACK_ID);
        for (int i = mResizingTasksDuringAnimation.size() - 1; i >= 0; i--) {
            final int taskId = mResizingTasksDuringAnimation.valueAt(i);
            final TaskRecord task =
@@ -5094,6 +5094,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
                    + taskId + " can't be launch in the home/recents stack.");
        }

        mWindowManager.deferSurfaceLayout();
        try {
            if (launchStackId == DOCKED_STACK_ID) {
                mWindowManager.setDockedStackCreateState(
                        activityOptions.getDockCreateMode(), null /* initialBounds */);
@@ -5101,21 +5103,21 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
                // Defer updating the stack in which recents is until the app transition is done, to
                // not run into issues where we still need to draw the task in recents but the
                // docked stack is already created.
            deferUpdateBounds(HOME_STACK_ID);
                deferUpdateBounds(RECENTS_STACK_ID);
                mWindowManager.prepareAppTransition(TRANSIT_DOCK_TASK_FROM_RECENTS, false);
            }

            task = anyTaskForIdLocked(taskId, MATCH_TASK_IN_STACKS_OR_RECENT_TASKS_AND_RESTORE,
                    launchStackId);
            if (task == null) {
            continueUpdateBounds(HOME_STACK_ID);
                continueUpdateBounds(RECENTS_STACK_ID);
                mWindowManager.executeAppTransition();
                throw new IllegalArgumentException(
                        "startActivityFromRecentsInner: Task " + taskId + " not found.");
            }

        // Since we don't have an actual source record here, we assume that the currently focused
        // activity was the source.
            // Since we don't have an actual source record here, we assume that the currently
            // focused activity was the source.
            final ActivityStack focusedStack = getFocusedStack();
            final ActivityRecord sourceRecord =
                    focusedStack != null ? focusedStack.topActivity() : null;
@@ -5146,7 +5148,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D

                mService.mActivityStarter.postStartActivityProcessing(task.getTopActivity(),
                        ActivityManager.START_TASK_TO_FRONT,
                    sourceRecord != null ? sourceRecord.getTask().getStackId() : INVALID_STACK_ID,
                        sourceRecord != null
                                ? sourceRecord.getTask().getStackId() : INVALID_STACK_ID,
                        sourceRecord, task.getStack());
                return ActivityManager.START_TASK_TO_FRONT;
            }
@@ -5161,6 +5164,9 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
                setResizingDuringAnimation(task);
            }
            return result;
        } finally {
            mWindowManager.continueSurfaceLayout();
        }
    }

    /**
+8 −2
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.server.wm;

import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;

import static com.android.server.wm.AppTransition.TRANSIT_DOCK_TASK_FROM_RECENTS;
import static com.android.server.wm.AppTransition.TRANSIT_UNSET;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
@@ -581,8 +583,12 @@ public class AppWindowContainerController

    private int getStartingWindowType(boolean newTask, boolean taskSwitch, boolean processRunning,
            boolean allowTaskSnapshot, boolean activityCreated) {
        if (newTask || !processRunning
                || (taskSwitch && !activityCreated)) {
        if (mService.mAppTransition.getAppTransition() == TRANSIT_DOCK_TASK_FROM_RECENTS) {
            // TODO(b/34099271): Remove this statement to add back the starting window and figure
            // out why it causes flickering, the starting window appears over the thumbnail while
            // the docked from recents transition occurs
            return STARTING_WINDOW_TYPE_NONE;
        } else if (newTask || !processRunning || (taskSwitch && !activityCreated)) {
            return STARTING_WINDOW_TYPE_SPLASH_SCREEN;
        } else if (taskSwitch && allowTaskSnapshot) {
            return STARTING_WINDOW_TYPE_SNAPSHOT;