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

Commit c7b81721 authored by Evan Rosky's avatar Evan Rosky Committed by Android (Google) Code Review
Browse files

Merge "Assorted Prefactors for cause/effect tracking" into main

parents 6516d760 d2ab1f7f
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -1156,7 +1156,7 @@ class ActivityClientController extends IActivityClientController.Stub {
                }

                if (rootTask.inFreeformWindowingMode()) {
                    rootTask.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
                    rootTask.setRootTaskWindowingMode(WINDOWING_MODE_FULLSCREEN);
                    rootTask.setBounds(null);
                } else if (!r.supportsFreeform()) {
                    throw new IllegalStateException(
@@ -1165,9 +1165,9 @@ class ActivityClientController extends IActivityClientController.Stub {
                    // If the window is on a freeform display, set it to undefined. It will be
                    // resolved to freeform and it can adjust windowing mode when the display mode
                    // changes in runtime.
                    rootTask.setWindowingMode(WINDOWING_MODE_UNDEFINED);
                    rootTask.setRootTaskWindowingMode(WINDOWING_MODE_UNDEFINED);
                } else {
                    rootTask.setWindowingMode(WINDOWING_MODE_FREEFORM);
                    rootTask.setRootTaskWindowingMode(WINDOWING_MODE_FREEFORM);
                }
            }
        } finally {
@@ -1278,7 +1278,7 @@ class ActivityClientController extends IActivityClientController.Stub {
        if (fullscreenRequest == FULLSCREEN_MODE_REQUEST_ENTER) {
            final int restoreWindowingMode = requester.getRequestedOverrideWindowingMode();
            targetWindowingMode = WINDOWING_MODE_FULLSCREEN;
            requester.setWindowingMode(targetWindowingMode);
            requester.setRootTaskWindowingMode(targetWindowingMode);
            // The restore windowing mode must be set after the windowing mode is set since
            // Task#setWindowingMode resets the restore windowing mode to WINDOWING_MODE_INVALID.
            requester.mMultiWindowRestoreWindowingMode = restoreWindowingMode;
@@ -1297,11 +1297,10 @@ class ActivityClientController extends IActivityClientController.Stub {
    public void startLockTaskModeByToken(IBinder token) {
        synchronized (mGlobalLock) {
            final ActivityRecord r = ActivityRecord.forTokenLocked(token);
            if (r != null) {
            if (r == null) return;
            mService.startLockTaskMode(r.getTask(), false /* isSystemCaller */);
        }
    }
    }

    @Override
    public void stopLockTaskModeByToken(IBinder token) {
+25 −21
Original line number Diff line number Diff line
@@ -2016,7 +2016,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        mIsUserAlwaysVisible =  properties != null && properties.getAlwaysVisible();

        mShowForAllUsers = (info.flags & FLAG_SHOW_FOR_ALL_USERS) != 0 || mIsUserAlwaysVisible;
        setOrientation(info.screenOrientation);
        setOverrideOrientation(info.screenOrientation);
        mRotationAnimationHint = info.rotationAnimation;

        mShowWhenLocked = (aInfo.flags & ActivityInfo.FLAG_SHOW_WHEN_LOCKED) != 0;
@@ -3626,10 +3626,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            final WindowContainer<?> trigger = endTask ? task : this;
            final Transition newTransition =
                    mTransitionController.requestCloseTransitionIfNeeded(trigger);
            if (newTransition != null) {
                newTransition.collectClose(trigger);
            } else if (mTransitionController.isCollecting()) {
                mTransitionController.getCollectingTransition().collectClose(trigger);
            final Transition transition = newTransition != null
                    ? newTransition : mTransitionController.getCollectingTransition();
            if (transition != null) {
                transition.collectClose(trigger);
            }
            if (isState(RESUMED)) {
                if (endTask) {
@@ -4302,9 +4302,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        // closing the task.
        final WindowContainer trigger = remove && task != null && task.getChildCount() == 1
                ? task : this;
        final Transition newTransit = mTransitionController.requestCloseTransitionIfNeeded(trigger);
        if (newTransit != null) {
            newTransit.collectClose(trigger);
        final Transition tr = mTransitionController.requestCloseTransitionIfNeeded(trigger);
        if (tr != null) {
            tr.collectClose(trigger);
        } else if (mTransitionController.isCollecting()) {
            mTransitionController.getCollectingTransition().collectClose(trigger);
        }
@@ -5320,12 +5320,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        task.lastDescription = description;
    }

    void setDeferHidingClient(boolean deferHidingClient) {
        if (mDeferHidingClient == deferHidingClient) {
            return;
    void setDeferHidingClient() {
        mDeferHidingClient = true;
    }
        mDeferHidingClient = deferHidingClient;
        if (!mDeferHidingClient && !mVisibleRequested) {

    void clearDeferHidingClient() {
        if (!mDeferHidingClient) return;
        mDeferHidingClient = false;
        if (!mVisibleRequested) {
            // Hiding the client is no longer deferred and the app isn't visible still, go ahead and
            // update the visibility.
            setVisibility(false);
@@ -5449,8 +5451,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        boolean isCollecting = false;
        boolean inFinishingTransition = false;
        if (mTransitionController.isShellTransitionsEnabled()) {
            isCollecting = mTransitionController.isCollecting();
            if (isCollecting) {
            if (mTransitionController.isCollecting()) {
                isCollecting = true;
                mTransitionController.collect(this);
            } else {
                // Failsafe to make sure that we show any activities that were incorrectly hidden
@@ -6195,7 +6197,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            // stopped or stopping. This gives it a chance to enter Pip in onPause().
            final boolean deferHidingClient = canEnterPictureInPicture
                    && !isState(STARTED, STOPPING, STOPPED, PAUSED);
            setDeferHidingClient(deferHidingClient);
            if (deferHidingClient) {
                setDeferHidingClient();
            } else {
                clearDeferHidingClient();
            }
            setVisibility(false);

            switch (getState()) {
@@ -6234,7 +6240,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                Slog.v(TAG_VISIBILITY, "Resume visible activity, " + this);
            }
            return getRootTask().resumeTopActivityUncheckedLocked(activeActivity /* prev */,
                    null /* options */);
                    null /* options */, false /* skipPause */);
        } else if (shouldPauseActivity(activeActivity)) {
            if (DEBUG_VISIBILITY) {
                Slog.v(TAG_VISIBILITY, "Pause visible activity, " + this);
@@ -6524,9 +6530,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
    void stopIfPossible() {
        if (DEBUG_SWITCH) Slog.d(TAG_SWITCH, "Stopping: " + this);
        if (finishing) {
            Slog.e(TAG, "Request to stop a finishing activity: " + this);
            destroyIfPossible("stopIfPossible-finishing");
            return;
            throw new IllegalStateException("Request to stop a finishing activity: " + this);
        }
        if (isNoHistory()) {
            if (!task.shouldSleepActivities()) {
+2 −3
Original line number Diff line number Diff line
@@ -612,11 +612,10 @@ public class ActivityStartController {
        final Task task = r.getTask();
        mService.deferWindowLayout();
        try {
            final TransitionController controller = r.mTransitionController;
            final Transition transition = controller.getCollectingTransition();
            final Transition transition = r.mTransitionController.getCollectingTransition();
            if (transition != null) {
                transition.setRemoteAnimationApp(r.app.getThread());
                controller.setTransientLaunch(r, TaskDisplayArea.getRootTaskAbove(rootTask));
                transition.setTransientLaunch(r, TaskDisplayArea.getRootTaskAbove(rootTask));
            }
            task.moveToFront("startExistingRecents");
            task.mInResumeTopActivity = true;
+42 −33
Original line number Diff line number Diff line
@@ -1355,9 +1355,21 @@ class ActivityStarter {
            mService.resumeAppSwitches();
        }

        // Only do the create here since startActivityInner can abort. If it doesn't abort,
        // the requestStart will be sent in handleStartRequest.
        final Transition newTransition = r.mTransitionController.isShellTransitionsEnabled()
                ? r.mTransitionController.createAndStartCollecting(TRANSIT_OPEN) : null;
        // Because startActivity must run immediately, it can get combined with another
        // transition meaning it is no-longer independent. This is NOT desirable, but is the
        // only option for the time being.
        final boolean isIndependent = newTransition != null;
        final Transition transition = isIndependent ? newTransition
                : mService.getTransitionController().getCollectingTransition();

        mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession,
                request.voiceInteractor, startFlags, checkedOptions,
                inTask, inTaskFragment, balVerdict, intentGrants, realCallingUid);
                inTask, inTaskFragment, balVerdict, intentGrants, realCallingUid, transition,
                isIndependent);

        if (request.outActivity != null) {
            request.outActivity[0] = mLastStartActivityRecord;
@@ -1509,33 +1521,27 @@ class ActivityStarter {
            int startFlags, ActivityOptions options, Task inTask,
            TaskFragment inTaskFragment,
            BalVerdict balVerdict,
            NeededUriGrants intentGrants, int realCallingUid) {
            NeededUriGrants intentGrants, int realCallingUid, Transition transition,
            boolean isIndependentLaunch) {
        int result = START_CANCELED;
        final Task startedActivityRootTask;

        // Create a transition now to record the original intent of actions taken within
        // startActivityInner. Otherwise, logic in startActivityInner could start a different
        // transition based on a sub-action.
        // Only do the create here (and defer requestStart) since startActivityInner might abort.
        final TransitionController transitionController = r.mTransitionController;
        Transition newTransition = transitionController.isShellTransitionsEnabled()
                ? transitionController.createAndStartCollecting(TRANSIT_OPEN) : null;
        RemoteTransition remoteTransition = r.takeRemoteTransition();
        // Create a display snapshot as soon as possible.
        if (newTransition != null && mRequest.freezeScreen) {
        if (isIndependentLaunch && mRequest.freezeScreen) {
            final TaskDisplayArea tda = mLaunchParams.hasPreferredTaskDisplayArea()
                    ? mLaunchParams.mPreferredTaskDisplayArea
                    : mRootWindowContainer.getDefaultTaskDisplayArea();
            final DisplayContent dc = mRootWindowContainer.getDisplayContentOrCreate(
                    tda.getDisplayId());
            if (dc != null) {
                transitionController.collect(dc);
                transitionController.collectVisibleChange(dc);
                transition.collect(dc);
                transition.collectVisibleChange(dc);
            }
        }
        try {
            mService.deferWindowLayout();
            transitionController.collect(r);
            r.mTransitionController.collect(r);
            try {
                Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "startActivityInner");
                result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,
@@ -1545,8 +1551,8 @@ class ActivityStarter {
                Slog.e(TAG, "Exception on startActivityInner", ex);
            } finally {
                Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
                startedActivityRootTask = handleStartResult(r, options, result, newTransition,
                        remoteTransition);
                startedActivityRootTask = handleStartResult(r, options, result, isIndependentLaunch,
                        remoteTransition, transition);
            }
        } finally {
            mService.continueWindowLayout();
@@ -1571,8 +1577,8 @@ class ActivityStarter {
     * @return the root task where the successful started activity resides.
     */
    private @Nullable Task handleStartResult(@NonNull ActivityRecord started,
            ActivityOptions options, int result, Transition newTransition,
            RemoteTransition remoteTransition) {
            ActivityOptions options, int result, boolean isIndependentLaunch,
            RemoteTransition remoteTransition, @NonNull Transition transition) {
        final boolean userLeaving = mSupervisor.mUserLeaving;
        mSupervisor.mUserLeaving = false;
        final Task currentRootTask = started.getRootTask();
@@ -1596,8 +1602,9 @@ class ActivityStarter {
                    && !startedActivityRootTask.mCreatedByOrganizer) {
                startedActivityRootTask.removeIfPossible("handleStartResult");
            }
            if (newTransition != null) {
                newTransition.abort();
            if (isIndependentLaunch
                    && mService.getTransitionController().isShellTransitionsEnabled()) {
                transition.abort();
            }
            return null;
        }
@@ -1649,44 +1656,46 @@ class ActivityStarter {
            // The activity is started new rather than just brought forward, so record it as an
            // existence change.
            transitionController.collectExistenceChange(started);
        } else if (result == START_DELIVERED_TO_TOP && newTransition != null
        } else if (result == START_DELIVERED_TO_TOP && isIndependentLaunch
                // An activity has changed order/visibility or the task is occluded by a transient
                // activity, so this isn't just deliver-to-top
                && mMovedToTopActivity == null
                && !transitionController.hasOrderChanges()
                && !transitionController.isTransientHide(startedActivityRootTask)
                && !newTransition.hasChanged(mLastStartActivityRecord)) {
                && !transition.hasChanged(mLastStartActivityRecord)) {
            // We just delivered to top, so there isn't an actual transition here.
            if (!forceTransientTransition) {
                newTransition.abort();
                newTransition = null;
                transition.abort();
                transition = null;
            }
        }
        if (forceTransientTransition) {
            transitionController.collect(mLastStartActivityRecord);
            transitionController.collect(mPriorAboveTask);
        if (forceTransientTransition && transition != null) {
            transition.collect(mLastStartActivityRecord);
            transition.collect(mPriorAboveTask);
            // If keyguard is active and occluded, the transient target won't be moved to front
            // to be collected, so set transient again after it is collected.
            transitionController.setTransientLaunch(mLastStartActivityRecord, mPriorAboveTask);
            transition.setTransientLaunch(mLastStartActivityRecord, mPriorAboveTask);
            final DisplayContent dc = mLastStartActivityRecord.getDisplayContent();
            // update wallpaper target to TransientHide
            dc.mWallpaperController.adjustWallpaperWindows();
            // execute transition because there is no change
            transitionController.setReady(dc, true /* ready */);
            transition.setReady(dc, true /* ready */);
        }
        if (!userLeaving) {
        if (!userLeaving && transition != null) {
            // no-user-leaving implies not entering PiP.
            transitionController.setCanPipOnFinish(false /* canPipOnFinish */);
            transition.setCanPipOnFinish(false /* canPipOnFinish */);
        }
        if (newTransition != null) {
            transitionController.requestStartTransition(newTransition,
        if (isIndependentLaunch && transition != null) {
            transitionController.requestStartTransition(transition,
                    mTargetTask == null ? started.getTask() : mTargetTask,
                    remoteTransition, null /* displayChange */);
        } else if (result == START_SUCCESS && mStartActivity.isState(RESUMED)) {
            // Do nothing if the activity is started and is resumed directly.
        } else if (isStarted) {
            // Make the collecting transition wait until this request is ready.
            transitionController.setReady(started, false);
            if (transition != null) {
                transition.setReady(started, false);
            }
        }
        return startedActivityRootTask;
    }
+10 −7
Original line number Diff line number Diff line
@@ -2116,17 +2116,20 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
                    Slog.w(TAG, "removeTask: No task remove with id=" + taskId);
                    return false;
                }
                removeTask(task);
                return true;
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }
    }

    void removeTask(@NonNull Task task) {
        if (task.isLeafTask()) {
            mTaskSupervisor.removeTask(task, true, REMOVE_FROM_RECENTS, "remove-task");
        } else {
            mTaskSupervisor.removeRootTask(task);
        }
                return true;
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }
    }

    @Override
@@ -2938,7 +2941,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
                            }
                            getTransitionController().requestStartTransition(transition, task,
                                    null /* remoteTransition */, null /* displayChange */);
                            getTransitionController().collect(task);
                            transition.collect(task);
                            task.resize(bounds, resizeMode, preserveWindow);
                            transition.setReady(task, true);
                        });
Loading