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

Commit da8b827e authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Unify Activity level of window hierarchy (50/n).

Make ActivityRecord extend AppWindowToken so we have a single object
for acitvities in the hierarchy.

Bug: 80414790
Test: Existing tests pass.
Change-Id: Ia7f52ef444cba88223f4e8a9586f6c12b1b5e4ea
parent b5a99eda
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -118,13 +118,15 @@ message TaskRecordProto {
message ActivityRecordProto {
    option (.android.msg_privacy).dest = DEST_AUTOMATIC;

    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1;
    // To be removed soon.
    optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1 [deprecated=true];
    optional .com.android.server.wm.IdentifierProto identifier = 2;
    optional string state = 3;
    optional bool visible = 4;
    optional bool front_of_task = 5;
    optional int32 proc_id = 6;
    optional bool translucent = 7;
    optional .com.android.server.wm.AppWindowTokenProto app_window_token = 8;
}

message KeyguardControllerProto {
+6 −6
Original line number Diff line number Diff line
@@ -823,6 +823,12 @@
      "group": "WM_DEBUG_ORIENTATION",
      "at": "com\/android\/server\/wm\/DisplayRotation.java"
    },
    "-415912575": {
      "message": "setTask: %s at top.",
      "level": "VERBOSE",
      "group": "WM_DEBUG_ADD_REMOVE",
      "at": "com\/android\/server\/wm\/ActivityRecord.java"
    },
    "-415865166": {
      "message": "findFocusedWindow: Found new focus @ %s",
      "level": "VERBOSE",
@@ -925,12 +931,6 @@
      "group": "WM_DEBUG_APP_TRANSITIONS",
      "at": "com\/android\/server\/wm\/WindowState.java"
    },
    "-117925665": {
      "message": "addAppToken: %s task=%s at %d",
      "level": "VERBOSE",
      "group": "WM_DEBUG_ADD_REMOVE",
      "at": "com\/android\/server\/wm\/ActivityRecord.java"
    },
    "-116086365": {
      "message": "******************** ENABLING SCREEN!",
      "level": "INFO",
+151 −457

File changed.

Preview size limit exceeded, changes collapsed.

+15 −23
Original line number Diff line number Diff line
@@ -1896,7 +1896,7 @@ class ActivityStack extends ConfigurationContainer {
                    continue;
                }

                if (r.fullscreen || r.hasWallpaper) {
                if (r.occludesParent() || r.hasWallpaper) {
                    // Stack isn't translucent if it has at least one fullscreen activity
                    // that is visible.
                    return false;
@@ -2259,8 +2259,7 @@ class ActivityStack extends ConfigurationContainer {
                .isKeyguardOrAodShowing(displayId);
        final boolean keyguardLocked = mStackSupervisor.getKeyguardController().isKeyguardLocked();
        final boolean showWhenLocked = r.canShowWhenLocked();
        final boolean dismissKeyguard = r.mAppWindowToken != null
                && r.mAppWindowToken.containsDismissKeyguardWindow();
        final boolean dismissKeyguard = r.containsDismissKeyguardWindow();
        if (shouldBeVisible) {
            if (dismissKeyguard && mTopDismissingKeyguardActivity == null) {
                mTopDismissingKeyguardActivity = r;
@@ -2329,7 +2328,7 @@ class ActivityStack extends ConfigurationContainer {
            // get it started and resume if no other stack in this stack is resumed.
            if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Start and freeze screen for " + r);
            if (r != starting) {
                r.startFreezingScreenLocked(r.app, configChanges);
                r.startFreezingScreenLocked(configChanges);
            }
            if (!r.visible || r.mLaunchTaskBehind) {
                if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Starting and making visible: " + r);
@@ -2345,7 +2344,7 @@ class ActivityStack extends ConfigurationContainer {

    private boolean updateBehindFullscreen(boolean stackInvisible, boolean behindFullscreenActivity,
            ActivityRecord r) {
        if (r.fullscreen) {
        if (r.occludesParent()) {
            if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Fullscreen: at " + r
                        + " stackInvisible=" + stackInvisible
                        + " behindFullscreenActivity=" + behindFullscreenActivity);
@@ -2431,12 +2430,12 @@ class ActivityStack extends ConfigurationContainer {
                    if (r == topActivity) {
                        aboveTop = false;
                    }
                    behindFullscreenActivity |= r.fullscreen;
                    behindFullscreenActivity |= r.occludesParent();
                    continue;
                }

                r.removeOrphanedStartingWindow(behindFullscreenActivity);
                behindFullscreenActivity |= r.fullscreen;
                behindFullscreenActivity |= r.occludesParent();
            }
        }
    }
@@ -2566,8 +2565,7 @@ class ActivityStack extends ConfigurationContainer {
                final boolean canShowWhenLocked = !mTopActivityOccludesKeyguard
                        && next.canShowWhenLocked();
                final boolean mayDismissKeyguard = mTopDismissingKeyguardActivity != next
                        && next.mAppWindowToken != null
                        && next.mAppWindowToken.containsDismissKeyguardWindow();
                        && next.containsDismissKeyguardWindow();

                if (canShowWhenLocked || mayDismissKeyguard) {
                    ensureActivitiesVisibleLocked(null /* starting */, 0 /* configChanges */,
@@ -2776,7 +2774,7 @@ class ActivityStack extends ConfigurationContainer {
            final boolean lastActivityTranslucent = lastFocusedStack != null
                    && (lastFocusedStack.inMultiWindowMode()
                    || (lastFocusedStack.mLastPausedActivity != null
                    && !lastFocusedStack.mLastPausedActivity.fullscreen));
                    && !lastFocusedStack.mLastPausedActivity.occludesParent()));

            // This activity is now becoming visible.
            if (!next.visible || next.stopped || lastActivityTranslucent) {
@@ -3055,7 +3053,7 @@ class ActivityStack extends ConfigurationContainer {
                    if (!startIt) {
                        if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Adding activity " + r + " to task "
                                + task, new RuntimeException("here").fillInStackTrace());
                        r.createAppWindowToken();
                        r.setTask(rTask);
                        ActivityOptions.abort(options);
                        return;
                    }
@@ -3082,12 +3080,7 @@ class ActivityStack extends ConfigurationContainer {
        // Slot the activity into the history stack and proceed
        if (DEBUG_ADD_REMOVE) Slog.i(TAG, "Adding activity " + r + " to stack to task " + task,
                new RuntimeException("here").fillInStackTrace());
        // TODO: Need to investigate if it is okay for the controller to already be created by the
        // time we get to this point. I think it is, but need to double check.
        // Use test in b/34179495 to trace the call path.
        if (r.mAppWindowToken == null) {
            r.createAppWindowToken();
        }
        r.setTask(task);

        // The transition animation and starting window are not needed if {@code allowMoveToFront}
        // is false, because the activity won't be visible.
@@ -3944,7 +3937,7 @@ class ActivityStack extends ConfigurationContainer {
                if (r.finishing) {
                    continue;
                }
                if (r.fullscreen) {
                if (r.occludesParent()) {
                    lastIsOpaque = true;
                }
                if (owner != null && r.app != owner) {
@@ -4335,7 +4328,7 @@ class ActivityStack extends ConfigurationContainer {
                final ActivityRecord r = activities.get(activityIndex);
                updatedConfig |= r.ensureActivityConfiguration(0 /* globalChanges */,
                        preserveWindow);
                if (r.fullscreen) {
                if (r.occludesParent()) {
                    behindFullscreen = true;
                    break;
                }
@@ -4438,7 +4431,7 @@ class ActivityStack extends ConfigurationContainer {
                if (r.appToken == token) {
                    return true;
                }
                if (r.fullscreen && !r.finishing) {
                if (r.occludesParent() && !r.finishing) {
                    return false;
                }
            }
@@ -4718,8 +4711,7 @@ class ActivityStack extends ConfigurationContainer {
                if (a.info.packageName.equals(packageName)) {
                    a.forceNewConfig = true;
                    if (starting != null && a == starting && a.visible) {
                        a.startFreezingScreenLocked(starting.app,
                                CONFIG_SCREEN_LAYOUT);
                        a.startFreezingScreenLocked(CONFIG_SCREEN_LAYOUT);
                    }
                }
            }
@@ -4950,7 +4942,7 @@ class ActivityStack extends ConfigurationContainer {
            if (top != null && !top.isConfigurationCompatible(parentConfig)) {
                // The final orientation of this activity will change after moving to full screen.
                // Start freezing screen here to prevent showing a temporary full screen window.
                top.startFreezingScreenLocked(top.app, CONFIG_SCREEN_LAYOUT);
                top.startFreezingScreenLocked(CONFIG_SCREEN_LAYOUT);
                mService.moveTasksToFullscreenStack(mStackId, true /* onTop */);
                return;
            }
+4 −5
Original line number Diff line number Diff line
@@ -1901,7 +1901,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
                "Added restored task=" + task + " to stack=" + stack);
        final ArrayList<ActivityRecord> activities = task.mActivities;
        for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
            activities.get(activityNdx).createAppWindowToken();
            activities.get(activityNdx).setTask(task);
        }
        return true;
    }
@@ -2123,6 +2123,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
        return false;
    }

    // TODO: Change method name to reflect what it actually does.
    final ArrayList<ActivityRecord> processStoppingActivitiesLocked(ActivityRecord idleActivity,
            boolean remove, boolean processPausingActivities) {
        ArrayList<ActivityRecord> stops = null;
@@ -2131,7 +2132,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
        for (int activityNdx = mStoppingActivities.size() - 1; activityNdx >= 0; --activityNdx) {
            ActivityRecord s = mStoppingActivities.get(activityNdx);

            final boolean animating = s.mAppWindowToken.isSelfAnimating();
            final boolean animating = s.isSelfAnimating();

            if (DEBUG_STATES) Slog.v(TAG, "Stopping " + s + ": nowVisible=" + nowVisible
                    + " animating=" + animating + " finishing=" + s.finishing);
@@ -2482,9 +2483,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks {
    void activityRelaunchedLocked(IBinder token) {
        final ActivityRecord r = ActivityRecord.isInStackLocked(token);
        if (r != null) {
            if (r.mAppWindowToken != null) {
                r.mAppWindowToken.finishRelaunching();
            }
            r.finishRelaunching();
            if (r.getActivityStack().shouldSleepOrShutDownActivities()) {
                r.setSleeping(true, true);
            }
Loading