Loading core/proto/android/server/activitymanagerservice.proto +2 −1 Original line number Original line Diff line number Diff line Loading @@ -60,7 +60,7 @@ message ActivityManagerServiceDumpActivitiesProto { message ActivityStackSupervisorProto { message ActivityStackSupervisorProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; option (.android.msg_privacy).dest = DEST_AUTOMATIC; optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1; optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1 [deprecated=true]; repeated ActivityDisplayProto displays = 2; repeated ActivityDisplayProto displays = 2; optional KeyguardControllerProto keyguard_controller = 3; optional KeyguardControllerProto keyguard_controller = 3; // TODO(b/111541062): Focused stack and resumed activity are now per-display. Topmost instances // TODO(b/111541062): Focused stack and resumed activity are now per-display. Topmost instances Loading @@ -71,6 +71,7 @@ message ActivityStackSupervisorProto { // know what activity types to check for when invoking splitscreen multi-window. // know what activity types to check for when invoking splitscreen multi-window. optional bool is_home_recents_component = 6; optional bool is_home_recents_component = 6; repeated .com.android.server.wm.IdentifierProto pending_activities = 7; repeated .com.android.server.wm.IdentifierProto pending_activities = 7; optional .com.android.server.wm.RootWindowContainerProto root_window_container = 8; } } /* represents ActivityStackSupervisor.ActivityDisplay */ /* represents ActivityStackSupervisor.ActivityDisplay */ Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +16 −7 Original line number Original line Diff line number Diff line Loading @@ -825,13 +825,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { mAppWarnings = createAppWarnings(mUiContext, mH, mUiHandler, systemDir); mAppWarnings = createAppWarnings(mUiContext, mH, mUiHandler, systemDir); mCompatModePackages = new CompatModePackages(this, systemDir, mH); mCompatModePackages = new CompatModePackages(this, systemDir, mH); mPendingIntentController = intentController; mPendingIntentController = intentController; mTempConfig.setToDefaults(); mTempConfig.setLocales(LocaleList.getDefault()); mConfigurationSeq = mTempConfig.seq = 1; mStackSupervisor = createStackSupervisor(); mStackSupervisor = createStackSupervisor(); mRootActivityContainer = new RootActivityContainer(this); mRootActivityContainer.onConfigurationChanged(mTempConfig); mTaskChangeNotificationController = mTaskChangeNotificationController = new TaskChangeNotificationController(mGlobalLock, mStackSupervisor, mH); new TaskChangeNotificationController(mGlobalLock, mStackSupervisor, mH); Loading Loading @@ -868,6 +862,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { public void setWindowManager(WindowManagerService wm) { public void setWindowManager(WindowManagerService wm) { synchronized (mGlobalLock) { synchronized (mGlobalLock) { mWindowManager = wm; mWindowManager = wm; // TODO(merge-root): Remove cast mRootActivityContainer = (RootActivityContainer) wm.mRoot; mTempConfig.setToDefaults(); mTempConfig.setLocales(LocaleList.getDefault()); mConfigurationSeq = mTempConfig.seq = 1; mRootActivityContainer.onConfigurationChanged(mTempConfig); mLockTaskController.setWindowManager(wm); mLockTaskController.setWindowManager(wm); mStackSupervisor.setWindowManager(wm); mStackSupervisor.setWindowManager(wm); mRootActivityContainer.setWindowManager(wm); mRootActivityContainer.setWindowManager(wm); Loading Loading @@ -5216,7 +5216,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { * also corresponds to the merged configuration of the default display. * also corresponds to the merged configuration of the default display. */ */ Configuration getGlobalConfiguration() { Configuration getGlobalConfiguration() { return mRootActivityContainer.getConfiguration(); // Return default configuration before mRootActivityContainer initialized, which happens // while initializing process record for system, see {@link // ActivityManagerService#setSystemProcess}. return mRootActivityContainer != null ? mRootActivityContainer.getConfiguration() : new Configuration(); } } boolean updateConfigurationLocked(Configuration values, ActivityRecord starting, boolean updateConfigurationLocked(Configuration values, ActivityRecord starting, Loading Loading @@ -7277,6 +7281,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @Override @Override public WindowProcessController getTopApp() { public WindowProcessController getTopApp() { synchronized (mGlobalLockWithoutBoost) { synchronized (mGlobalLockWithoutBoost) { if (mRootActivityContainer == null) { // Return null if mRootActivityContainer not yet initialize, while update // oomadj after AMS created. return null; } final ActivityRecord top = mRootActivityContainer.getTopResumedActivity(); final ActivityRecord top = mRootActivityContainer.getTopResumedActivity(); return top != null ? top.app : null; return top != null ? top.app : null; } } Loading services/core/java/com/android/server/wm/DisplayContent.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -1038,7 +1038,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo onDisplayChanged(this); onDisplayChanged(this); // Add itself as a child to the root container. // Add itself as a child to the root container. mWmService.mRoot.addChild(this, null); mWmService.mRoot.addChild(this, POSITION_BOTTOM); // TODO(b/62541591): evaluate whether this is the best spot to declare the // TODO(b/62541591): evaluate whether this is the best spot to declare the // {@link DisplayContent} ready for use. // {@link DisplayContent} ready for use. Loading Loading @@ -6410,7 +6410,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo stack.removeIfPossible(); stack.removeIfPossible(); } else if (getTopStack() == null) { } else if (getTopStack() == null) { removeIfPossible(); removeIfPossible(); mRootActivityContainer.removeChild(this); mRootActivityContainer.mStackSupervisor mRootActivityContainer.mStackSupervisor .getKeyguardController().onDisplayRemoved(mDisplayId); .getKeyguardController().onDisplayRemoved(mDisplayId); } } Loading services/core/java/com/android/server/wm/LockTaskController.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -653,7 +653,7 @@ public class LockTaskController { taskChanged = true; taskChanged = true; } } mSupervisor.mRootActivityContainer.mRootWindowContainer.forAllTasks(Task::setLockTaskAuth); mSupervisor.mRootActivityContainer.forAllTasks(Task::setLockTaskAuth); final ActivityRecord r = mSupervisor.mRootActivityContainer.topRunningActivity(); final ActivityRecord r = mSupervisor.mRootActivityContainer.topRunningActivity(); final Task task = (r != null) ? r.getTask() : null; final Task task = (r != null) ? r.getTask() : null; Loading services/core/java/com/android/server/wm/RootActivityContainer.java +22 −78 Original line number Original line Diff line number Diff line Loading @@ -36,13 +36,13 @@ import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE; import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE; import static android.view.WindowManager.TRANSIT_SHOW_SINGLE_TASK_DISPLAY; import static android.view.WindowManager.TRANSIT_SHOW_SINGLE_TASK_DISPLAY; import static com.android.server.am.ActivityStackSupervisorProto.CONFIGURATION_CONTAINER; import static com.android.server.am.ActivityStackSupervisorProto.DISPLAYS; import static com.android.server.am.ActivityStackSupervisorProto.DISPLAYS; import static com.android.server.am.ActivityStackSupervisorProto.FOCUSED_STACK_ID; import static com.android.server.am.ActivityStackSupervisorProto.FOCUSED_STACK_ID; import static com.android.server.am.ActivityStackSupervisorProto.IS_HOME_RECENTS_COMPONENT; import static com.android.server.am.ActivityStackSupervisorProto.IS_HOME_RECENTS_COMPONENT; import static com.android.server.am.ActivityStackSupervisorProto.KEYGUARD_CONTROLLER; import static com.android.server.am.ActivityStackSupervisorProto.KEYGUARD_CONTROLLER; import static com.android.server.am.ActivityStackSupervisorProto.PENDING_ACTIVITIES; import static com.android.server.am.ActivityStackSupervisorProto.PENDING_ACTIVITIES; import static com.android.server.am.ActivityStackSupervisorProto.RESUMED_ACTIVITY; import static com.android.server.am.ActivityStackSupervisorProto.RESUMED_ACTIVITY; import static com.android.server.am.ActivityStackSupervisorProto.ROOT_WINDOW_CONTAINER; import static com.android.server.wm.ActivityStack.ActivityState.PAUSED; import static com.android.server.wm.ActivityStack.ActivityState.PAUSED; import static com.android.server.wm.ActivityStack.ActivityState.RESUMED; import static com.android.server.wm.ActivityStack.ActivityState.RESUMED; import static com.android.server.wm.ActivityStack.ActivityState.STOPPED; import static com.android.server.wm.ActivityStack.ActivityState.STOPPED; Loading Loading @@ -135,7 +135,7 @@ import java.util.function.Function; * TODO: This class is mostly temporary to separate things out of ActivityStackSupervisor.java. The * TODO: This class is mostly temporary to separate things out of ActivityStackSupervisor.java. The * intention is to have this merged with RootWindowContainer.java as part of unifying the hierarchy. * intention is to have this merged with RootWindowContainer.java as part of unifying the hierarchy. */ */ class RootActivityContainer extends ConfigurationContainer class RootActivityContainer extends RootWindowContainer implements DisplayManager.DisplayListener { implements DisplayManager.DisplayListener { private static final String TAG = TAG_WITH_CLASS_NAME ? "RootActivityContainer" : TAG_ATM; private static final String TAG = TAG_WITH_CLASS_NAME ? "RootActivityContainer" : TAG_ATM; Loading Loading @@ -168,14 +168,6 @@ class RootActivityContainer extends ConfigurationContainer WindowManagerService mWindowManager; WindowManagerService mWindowManager; DisplayManager mDisplayManager; DisplayManager mDisplayManager; private DisplayManagerInternal mDisplayManagerInternal; private DisplayManagerInternal mDisplayManagerInternal; // TODO(root-unify): Remove after object merge with RootWindowContainer. RootWindowContainer mRootWindowContainer; /** * List of displays which contain activities, sorted by z-order. * The last entry in the list is the topmost. */ private final ArrayList<DisplayContent> mDisplayContents = new ArrayList<>(); /** Reference to default display so we can quickly look it up. */ /** Reference to default display so we can quickly look it up. */ private DisplayContent mDefaultDisplay; private DisplayContent mDefaultDisplay; Loading Loading @@ -337,7 +329,8 @@ class RootActivityContainer extends ConfigurationContainer } } } } RootActivityContainer(ActivityTaskManagerService service) { RootActivityContainer(ActivityTaskManagerService service, WindowManagerService wmService) { super(wmService); mService = service; mService = service; mStackSupervisor = service.mStackSupervisor; mStackSupervisor = service.mStackSupervisor; mStackSupervisor.mRootActivityContainer = this; mStackSupervisor.mRootActivityContainer = this; Loading @@ -345,8 +338,6 @@ class RootActivityContainer extends ConfigurationContainer void setWindowManager(WindowManagerService wm) { void setWindowManager(WindowManagerService wm) { mWindowManager = wm; mWindowManager = wm; mRootWindowContainer = mWindowManager.mRoot; mRootWindowContainer.setRootActivityContainer(this); mDisplayManager = mService.mContext.getSystemService(DisplayManager.class); mDisplayManager = mService.mContext.getSystemService(DisplayManager.class); mDisplayManager.registerDisplayListener(this, mService.mUiHandler); mDisplayManager.registerDisplayListener(this, mService.mUiHandler); mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); Loading @@ -358,14 +349,13 @@ class RootActivityContainer extends ConfigurationContainer if (displayContent.mDisplayId == DEFAULT_DISPLAY) { if (displayContent.mDisplayId == DEFAULT_DISPLAY) { mDefaultDisplay = displayContent; mDefaultDisplay = displayContent; } } addChild(displayContent, DisplayContent.POSITION_TOP); } } calculateDefaultMinimalSizeOfResizeableTasks(); calculateDefaultMinimalSizeOfResizeableTasks(); final DisplayContent defaultDisplay = getDefaultDisplay(); final DisplayContent defaultDisplay = getDefaultDisplay(); defaultDisplay.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP); defaultDisplay.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP); positionChildAt(defaultDisplay, DisplayContent.POSITION_TOP); positionChildAt(POSITION_TOP, defaultDisplay, false /* includingParents */); } } // TODO(multi-display): Look at all callpoints to make sure they make sense in multi-display. // TODO(multi-display): Look at all callpoints to make sure they make sense in multi-display. Loading Loading @@ -424,7 +414,6 @@ class RootActivityContainer extends ConfigurationContainer } } // The display hasn't been added to ActivityManager yet, create a new record now. // The display hasn't been added to ActivityManager yet, create a new record now. displayContent = new DisplayContent(display, this); displayContent = new DisplayContent(display, this); addChild(displayContent, DisplayContent.POSITION_BOTTOM); return displayContent; return displayContent; } } Loading Loading @@ -750,7 +739,7 @@ class RootActivityContainer extends ConfigurationContainer // Force-update the orientation from the WindowManager, since we need the true configuration // Force-update the orientation from the WindowManager, since we need the true configuration // to send to the client now. // to send to the client now. final DisplayContent displayContent = mRootWindowContainer.getDisplayContent(displayId); final DisplayContent displayContent = getDisplayContent(displayId); Configuration config = null; Configuration config = null; if (displayContent != null) { if (displayContent != null) { config = displayContent.updateOrientation( config = displayContent.updateOrientation( Loading Loading @@ -1564,57 +1553,11 @@ class RootActivityContainer extends ConfigurationContainer } } @Override @Override protected int getChildCount() { void positionChildAt(int position, DisplayContent child, boolean includingParents) { return mDisplayContents.size(); super.positionChildAt(position, child, includingParents); } @Override protected DisplayContent getChildAt(int index) { return mDisplayContents.get(index); } @Override protected ConfigurationContainer getParent() { return null; } // TODO: remove after object merge with RootWindowContainer void onChildPositionChanged(DisplayContent display, int position) { // Assume AM lock is held from positionChildAt of controller in each hierarchy. if (display != null) { positionChildAt(display, position); } } /** Change the z-order of the given display. */ private void positionChildAt(DisplayContent display, int position) { if (position >= mDisplayContents.size()) { position = mDisplayContents.size() - 1; } else if (position < 0) { position = 0; } if (mDisplayContents.isEmpty()) { mDisplayContents.add(display); } else if (mDisplayContents.get(position) != display) { mDisplayContents.remove(display); mDisplayContents.add(position, display); } mStackSupervisor.updateTopResumedActivityIfNeeded(); mStackSupervisor.updateTopResumedActivityIfNeeded(); } } @VisibleForTesting void addChild(DisplayContent displayContent, int position) { positionChildAt(displayContent, position); mRootWindowContainer.positionChildAt(position, displayContent); } void removeChild(DisplayContent displayContent) { // The caller must tell the controller of {@link DisplayContent} to release its container // {@link DisplayContent}. That is done in {@link DisplayContent#releaseSelfIfNeeded}). mDisplayContents.remove(displayContent); } Configuration getDisplayOverrideConfiguration(int displayId) { Configuration getDisplayOverrideConfiguration(int displayId) { final DisplayContent displayContent = getDisplayContentOrCreate(displayId); final DisplayContent displayContent = getDisplayContentOrCreate(displayId); if (displayContent == null) { if (displayContent == null) { Loading Loading @@ -1664,7 +1607,7 @@ class RootActivityContainer extends ConfigurationContainer } } void addStartingWindowsForVisibleActivities() { void addStartingWindowsForVisibleActivities() { mRootWindowContainer.forAllActivities((r) -> { forAllActivities((r) -> { if (r.mVisibleRequested) { if (r.mVisibleRequested) { r.showStartingWindow(null /* prev */, false /* newTask */, true /*taskSwitch*/); r.showStartingWindow(null /* prev */, false /* newTask */, true /*taskSwitch*/); } } Loading @@ -1676,7 +1619,7 @@ class RootActivityContainer extends ConfigurationContainer } } void rankTaskLayersIfNeeded() { void rankTaskLayersIfNeeded() { if (!mTaskLayersChanged || mRootWindowContainer == null) { if (!mTaskLayersChanged) { return; return; } } mTaskLayersChanged = false; mTaskLayersChanged = false; Loading @@ -1684,7 +1627,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::rankTaskLayerForActivity, this, RootActivityContainer::rankTaskLayerForActivity, this, PooledLambda.__(ActivityRecord.class)); PooledLambda.__(ActivityRecord.class)); mRootWindowContainer.forAllActivities(c); forAllActivities(c); c.recycle(); c.recycle(); } } Loading @@ -1700,7 +1643,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::clearOtherAppTimeTrackers, RootActivityContainer::clearOtherAppTimeTrackers, PooledLambda.__(ActivityRecord.class), except); PooledLambda.__(ActivityRecord.class), except); mRootWindowContainer.forAllActivities(c); forAllActivities(c); c.recycle(); c.recycle(); } } Loading Loading @@ -1748,7 +1691,7 @@ class RootActivityContainer extends ConfigurationContainer void handleAppCrash(WindowProcessController app) { void handleAppCrash(WindowProcessController app) { final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::handleAppCrash, PooledLambda.__(ActivityRecord.class), app); RootActivityContainer::handleAppCrash, PooledLambda.__(ActivityRecord.class), app); mRootWindowContainer.forAllActivities(c); forAllActivities(c); c.recycle(); c.recycle(); } } Loading @@ -1773,7 +1716,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledPredicate p = PooledLambda.obtainPredicate( final PooledPredicate p = PooledLambda.obtainPredicate( RootActivityContainer::matchesActivity, PooledLambda.__(ActivityRecord.class), RootActivityContainer::matchesActivity, PooledLambda.__(ActivityRecord.class), userId, compareIntentFilters, intent, cls); userId, compareIntentFilters, intent, cls); final ActivityRecord r = mRootWindowContainer.getActivity(p); final ActivityRecord r = getActivity(p); p.recycle(); p.recycle(); return r; return r; } } Loading Loading @@ -2123,7 +2066,7 @@ class RootActivityContainer extends ConfigurationContainer } } void closeSystemDialogs() { void closeSystemDialogs() { mRootWindowContainer.forAllActivities((r) -> { forAllActivities((r) -> { if ((r.info.flags & ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) { if ((r.info.flags & ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) { r.finishIfPossible("close-sys", true /* oomAdj */); r.finishIfPossible("close-sys", true /* oomAdj */); } } Loading Loading @@ -2161,7 +2104,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledFunction f = PooledLambda.obtainFunction( final PooledFunction f = PooledLambda.obtainFunction( FinishDisabledPackageActivitiesHelper::processActivity, this, FinishDisabledPackageActivitiesHelper::processActivity, this, PooledLambda.__(ActivityRecord.class)); PooledLambda.__(ActivityRecord.class)); mRootWindowContainer.forAllActivities(f); forAllActivities(f); f.recycle(); f.recycle(); return mDidSomething; return mDidSomething; } } Loading Loading @@ -2213,7 +2156,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::updateActivityApplicationInfo, RootActivityContainer::updateActivityApplicationInfo, PooledLambda.__(ActivityRecord.class), aInfo, userId, packageName); PooledLambda.__(ActivityRecord.class), aInfo, userId, packageName); mRootWindowContainer.forAllActivities(c); forAllActivities(c); c.recycle(); c.recycle(); } } Loading Loading @@ -2341,7 +2284,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::taskTopActivityIsUser, this, PooledLambda.__(Task.class), RootActivityContainer::taskTopActivityIsUser, this, PooledLambda.__(Task.class), userId); userId); mRootWindowContainer.forAllTasks(c); forAllTasks(c); c.recycle(); c.recycle(); } finally { } finally { mService.continueWindowLayout(); mService.continueWindowLayout(); Loading Loading @@ -2409,7 +2352,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledPredicate p = PooledLambda.obtainPredicate( final PooledPredicate p = PooledLambda.obtainPredicate( Task::isTaskId, PooledLambda.__(Task.class), id); Task::isTaskId, PooledLambda.__(Task.class), id); Task task = mRootWindowContainer.getTask(p); Task task = getTask(p); p.recycle(); p.recycle(); if (task != null) { if (task != null) { Loading Loading @@ -2621,10 +2564,11 @@ class RootActivityContainer extends ConfigurationContainer return printed; return printed; } } protected void dumpDebug(ProtoOutputStream proto, long fieldId, @Override public void dumpDebug(ProtoOutputStream proto, long fieldId, @WindowTraceLogLevel int logLevel) { @WindowTraceLogLevel int logLevel) { final long token = proto.start(fieldId); final long token = proto.start(fieldId); super.dumpDebug(proto, CONFIGURATION_CONTAINER, logLevel); dumpDebugInner(proto, ROOT_WINDOW_CONTAINER, logLevel); for (int displayNdx = 0; displayNdx < getChildCount(); ++displayNdx) { for (int displayNdx = 0; displayNdx < getChildCount(); ++displayNdx) { final DisplayContent displayContent = getChildAt(displayNdx); final DisplayContent displayContent = getChildAt(displayNdx); displayContent.dumpDebug(proto, DISPLAYS, logLevel); displayContent.dumpDebug(proto, DISPLAYS, logLevel); Loading Loading
core/proto/android/server/activitymanagerservice.proto +2 −1 Original line number Original line Diff line number Diff line Loading @@ -60,7 +60,7 @@ message ActivityManagerServiceDumpActivitiesProto { message ActivityStackSupervisorProto { message ActivityStackSupervisorProto { option (.android.msg_privacy).dest = DEST_AUTOMATIC; option (.android.msg_privacy).dest = DEST_AUTOMATIC; optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1; optional .com.android.server.wm.ConfigurationContainerProto configuration_container = 1 [deprecated=true]; repeated ActivityDisplayProto displays = 2; repeated ActivityDisplayProto displays = 2; optional KeyguardControllerProto keyguard_controller = 3; optional KeyguardControllerProto keyguard_controller = 3; // TODO(b/111541062): Focused stack and resumed activity are now per-display. Topmost instances // TODO(b/111541062): Focused stack and resumed activity are now per-display. Topmost instances Loading @@ -71,6 +71,7 @@ message ActivityStackSupervisorProto { // know what activity types to check for when invoking splitscreen multi-window. // know what activity types to check for when invoking splitscreen multi-window. optional bool is_home_recents_component = 6; optional bool is_home_recents_component = 6; repeated .com.android.server.wm.IdentifierProto pending_activities = 7; repeated .com.android.server.wm.IdentifierProto pending_activities = 7; optional .com.android.server.wm.RootWindowContainerProto root_window_container = 8; } } /* represents ActivityStackSupervisor.ActivityDisplay */ /* represents ActivityStackSupervisor.ActivityDisplay */ Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +16 −7 Original line number Original line Diff line number Diff line Loading @@ -825,13 +825,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { mAppWarnings = createAppWarnings(mUiContext, mH, mUiHandler, systemDir); mAppWarnings = createAppWarnings(mUiContext, mH, mUiHandler, systemDir); mCompatModePackages = new CompatModePackages(this, systemDir, mH); mCompatModePackages = new CompatModePackages(this, systemDir, mH); mPendingIntentController = intentController; mPendingIntentController = intentController; mTempConfig.setToDefaults(); mTempConfig.setLocales(LocaleList.getDefault()); mConfigurationSeq = mTempConfig.seq = 1; mStackSupervisor = createStackSupervisor(); mStackSupervisor = createStackSupervisor(); mRootActivityContainer = new RootActivityContainer(this); mRootActivityContainer.onConfigurationChanged(mTempConfig); mTaskChangeNotificationController = mTaskChangeNotificationController = new TaskChangeNotificationController(mGlobalLock, mStackSupervisor, mH); new TaskChangeNotificationController(mGlobalLock, mStackSupervisor, mH); Loading Loading @@ -868,6 +862,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { public void setWindowManager(WindowManagerService wm) { public void setWindowManager(WindowManagerService wm) { synchronized (mGlobalLock) { synchronized (mGlobalLock) { mWindowManager = wm; mWindowManager = wm; // TODO(merge-root): Remove cast mRootActivityContainer = (RootActivityContainer) wm.mRoot; mTempConfig.setToDefaults(); mTempConfig.setLocales(LocaleList.getDefault()); mConfigurationSeq = mTempConfig.seq = 1; mRootActivityContainer.onConfigurationChanged(mTempConfig); mLockTaskController.setWindowManager(wm); mLockTaskController.setWindowManager(wm); mStackSupervisor.setWindowManager(wm); mStackSupervisor.setWindowManager(wm); mRootActivityContainer.setWindowManager(wm); mRootActivityContainer.setWindowManager(wm); Loading Loading @@ -5216,7 +5216,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { * also corresponds to the merged configuration of the default display. * also corresponds to the merged configuration of the default display. */ */ Configuration getGlobalConfiguration() { Configuration getGlobalConfiguration() { return mRootActivityContainer.getConfiguration(); // Return default configuration before mRootActivityContainer initialized, which happens // while initializing process record for system, see {@link // ActivityManagerService#setSystemProcess}. return mRootActivityContainer != null ? mRootActivityContainer.getConfiguration() : new Configuration(); } } boolean updateConfigurationLocked(Configuration values, ActivityRecord starting, boolean updateConfigurationLocked(Configuration values, ActivityRecord starting, Loading Loading @@ -7277,6 +7281,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @Override @Override public WindowProcessController getTopApp() { public WindowProcessController getTopApp() { synchronized (mGlobalLockWithoutBoost) { synchronized (mGlobalLockWithoutBoost) { if (mRootActivityContainer == null) { // Return null if mRootActivityContainer not yet initialize, while update // oomadj after AMS created. return null; } final ActivityRecord top = mRootActivityContainer.getTopResumedActivity(); final ActivityRecord top = mRootActivityContainer.getTopResumedActivity(); return top != null ? top.app : null; return top != null ? top.app : null; } } Loading
services/core/java/com/android/server/wm/DisplayContent.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -1038,7 +1038,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo onDisplayChanged(this); onDisplayChanged(this); // Add itself as a child to the root container. // Add itself as a child to the root container. mWmService.mRoot.addChild(this, null); mWmService.mRoot.addChild(this, POSITION_BOTTOM); // TODO(b/62541591): evaluate whether this is the best spot to declare the // TODO(b/62541591): evaluate whether this is the best spot to declare the // {@link DisplayContent} ready for use. // {@link DisplayContent} ready for use. Loading Loading @@ -6410,7 +6410,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo stack.removeIfPossible(); stack.removeIfPossible(); } else if (getTopStack() == null) { } else if (getTopStack() == null) { removeIfPossible(); removeIfPossible(); mRootActivityContainer.removeChild(this); mRootActivityContainer.mStackSupervisor mRootActivityContainer.mStackSupervisor .getKeyguardController().onDisplayRemoved(mDisplayId); .getKeyguardController().onDisplayRemoved(mDisplayId); } } Loading
services/core/java/com/android/server/wm/LockTaskController.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -653,7 +653,7 @@ public class LockTaskController { taskChanged = true; taskChanged = true; } } mSupervisor.mRootActivityContainer.mRootWindowContainer.forAllTasks(Task::setLockTaskAuth); mSupervisor.mRootActivityContainer.forAllTasks(Task::setLockTaskAuth); final ActivityRecord r = mSupervisor.mRootActivityContainer.topRunningActivity(); final ActivityRecord r = mSupervisor.mRootActivityContainer.topRunningActivity(); final Task task = (r != null) ? r.getTask() : null; final Task task = (r != null) ? r.getTask() : null; Loading
services/core/java/com/android/server/wm/RootActivityContainer.java +22 −78 Original line number Original line Diff line number Diff line Loading @@ -36,13 +36,13 @@ import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE; import static android.view.WindowManager.TRANSIT_CRASHING_ACTIVITY_CLOSE; import static android.view.WindowManager.TRANSIT_SHOW_SINGLE_TASK_DISPLAY; import static android.view.WindowManager.TRANSIT_SHOW_SINGLE_TASK_DISPLAY; import static com.android.server.am.ActivityStackSupervisorProto.CONFIGURATION_CONTAINER; import static com.android.server.am.ActivityStackSupervisorProto.DISPLAYS; import static com.android.server.am.ActivityStackSupervisorProto.DISPLAYS; import static com.android.server.am.ActivityStackSupervisorProto.FOCUSED_STACK_ID; import static com.android.server.am.ActivityStackSupervisorProto.FOCUSED_STACK_ID; import static com.android.server.am.ActivityStackSupervisorProto.IS_HOME_RECENTS_COMPONENT; import static com.android.server.am.ActivityStackSupervisorProto.IS_HOME_RECENTS_COMPONENT; import static com.android.server.am.ActivityStackSupervisorProto.KEYGUARD_CONTROLLER; import static com.android.server.am.ActivityStackSupervisorProto.KEYGUARD_CONTROLLER; import static com.android.server.am.ActivityStackSupervisorProto.PENDING_ACTIVITIES; import static com.android.server.am.ActivityStackSupervisorProto.PENDING_ACTIVITIES; import static com.android.server.am.ActivityStackSupervisorProto.RESUMED_ACTIVITY; import static com.android.server.am.ActivityStackSupervisorProto.RESUMED_ACTIVITY; import static com.android.server.am.ActivityStackSupervisorProto.ROOT_WINDOW_CONTAINER; import static com.android.server.wm.ActivityStack.ActivityState.PAUSED; import static com.android.server.wm.ActivityStack.ActivityState.PAUSED; import static com.android.server.wm.ActivityStack.ActivityState.RESUMED; import static com.android.server.wm.ActivityStack.ActivityState.RESUMED; import static com.android.server.wm.ActivityStack.ActivityState.STOPPED; import static com.android.server.wm.ActivityStack.ActivityState.STOPPED; Loading Loading @@ -135,7 +135,7 @@ import java.util.function.Function; * TODO: This class is mostly temporary to separate things out of ActivityStackSupervisor.java. The * TODO: This class is mostly temporary to separate things out of ActivityStackSupervisor.java. The * intention is to have this merged with RootWindowContainer.java as part of unifying the hierarchy. * intention is to have this merged with RootWindowContainer.java as part of unifying the hierarchy. */ */ class RootActivityContainer extends ConfigurationContainer class RootActivityContainer extends RootWindowContainer implements DisplayManager.DisplayListener { implements DisplayManager.DisplayListener { private static final String TAG = TAG_WITH_CLASS_NAME ? "RootActivityContainer" : TAG_ATM; private static final String TAG = TAG_WITH_CLASS_NAME ? "RootActivityContainer" : TAG_ATM; Loading Loading @@ -168,14 +168,6 @@ class RootActivityContainer extends ConfigurationContainer WindowManagerService mWindowManager; WindowManagerService mWindowManager; DisplayManager mDisplayManager; DisplayManager mDisplayManager; private DisplayManagerInternal mDisplayManagerInternal; private DisplayManagerInternal mDisplayManagerInternal; // TODO(root-unify): Remove after object merge with RootWindowContainer. RootWindowContainer mRootWindowContainer; /** * List of displays which contain activities, sorted by z-order. * The last entry in the list is the topmost. */ private final ArrayList<DisplayContent> mDisplayContents = new ArrayList<>(); /** Reference to default display so we can quickly look it up. */ /** Reference to default display so we can quickly look it up. */ private DisplayContent mDefaultDisplay; private DisplayContent mDefaultDisplay; Loading Loading @@ -337,7 +329,8 @@ class RootActivityContainer extends ConfigurationContainer } } } } RootActivityContainer(ActivityTaskManagerService service) { RootActivityContainer(ActivityTaskManagerService service, WindowManagerService wmService) { super(wmService); mService = service; mService = service; mStackSupervisor = service.mStackSupervisor; mStackSupervisor = service.mStackSupervisor; mStackSupervisor.mRootActivityContainer = this; mStackSupervisor.mRootActivityContainer = this; Loading @@ -345,8 +338,6 @@ class RootActivityContainer extends ConfigurationContainer void setWindowManager(WindowManagerService wm) { void setWindowManager(WindowManagerService wm) { mWindowManager = wm; mWindowManager = wm; mRootWindowContainer = mWindowManager.mRoot; mRootWindowContainer.setRootActivityContainer(this); mDisplayManager = mService.mContext.getSystemService(DisplayManager.class); mDisplayManager = mService.mContext.getSystemService(DisplayManager.class); mDisplayManager.registerDisplayListener(this, mService.mUiHandler); mDisplayManager.registerDisplayListener(this, mService.mUiHandler); mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); Loading @@ -358,14 +349,13 @@ class RootActivityContainer extends ConfigurationContainer if (displayContent.mDisplayId == DEFAULT_DISPLAY) { if (displayContent.mDisplayId == DEFAULT_DISPLAY) { mDefaultDisplay = displayContent; mDefaultDisplay = displayContent; } } addChild(displayContent, DisplayContent.POSITION_TOP); } } calculateDefaultMinimalSizeOfResizeableTasks(); calculateDefaultMinimalSizeOfResizeableTasks(); final DisplayContent defaultDisplay = getDefaultDisplay(); final DisplayContent defaultDisplay = getDefaultDisplay(); defaultDisplay.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP); defaultDisplay.getOrCreateStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME, ON_TOP); positionChildAt(defaultDisplay, DisplayContent.POSITION_TOP); positionChildAt(POSITION_TOP, defaultDisplay, false /* includingParents */); } } // TODO(multi-display): Look at all callpoints to make sure they make sense in multi-display. // TODO(multi-display): Look at all callpoints to make sure they make sense in multi-display. Loading Loading @@ -424,7 +414,6 @@ class RootActivityContainer extends ConfigurationContainer } } // The display hasn't been added to ActivityManager yet, create a new record now. // The display hasn't been added to ActivityManager yet, create a new record now. displayContent = new DisplayContent(display, this); displayContent = new DisplayContent(display, this); addChild(displayContent, DisplayContent.POSITION_BOTTOM); return displayContent; return displayContent; } } Loading Loading @@ -750,7 +739,7 @@ class RootActivityContainer extends ConfigurationContainer // Force-update the orientation from the WindowManager, since we need the true configuration // Force-update the orientation from the WindowManager, since we need the true configuration // to send to the client now. // to send to the client now. final DisplayContent displayContent = mRootWindowContainer.getDisplayContent(displayId); final DisplayContent displayContent = getDisplayContent(displayId); Configuration config = null; Configuration config = null; if (displayContent != null) { if (displayContent != null) { config = displayContent.updateOrientation( config = displayContent.updateOrientation( Loading Loading @@ -1564,57 +1553,11 @@ class RootActivityContainer extends ConfigurationContainer } } @Override @Override protected int getChildCount() { void positionChildAt(int position, DisplayContent child, boolean includingParents) { return mDisplayContents.size(); super.positionChildAt(position, child, includingParents); } @Override protected DisplayContent getChildAt(int index) { return mDisplayContents.get(index); } @Override protected ConfigurationContainer getParent() { return null; } // TODO: remove after object merge with RootWindowContainer void onChildPositionChanged(DisplayContent display, int position) { // Assume AM lock is held from positionChildAt of controller in each hierarchy. if (display != null) { positionChildAt(display, position); } } /** Change the z-order of the given display. */ private void positionChildAt(DisplayContent display, int position) { if (position >= mDisplayContents.size()) { position = mDisplayContents.size() - 1; } else if (position < 0) { position = 0; } if (mDisplayContents.isEmpty()) { mDisplayContents.add(display); } else if (mDisplayContents.get(position) != display) { mDisplayContents.remove(display); mDisplayContents.add(position, display); } mStackSupervisor.updateTopResumedActivityIfNeeded(); mStackSupervisor.updateTopResumedActivityIfNeeded(); } } @VisibleForTesting void addChild(DisplayContent displayContent, int position) { positionChildAt(displayContent, position); mRootWindowContainer.positionChildAt(position, displayContent); } void removeChild(DisplayContent displayContent) { // The caller must tell the controller of {@link DisplayContent} to release its container // {@link DisplayContent}. That is done in {@link DisplayContent#releaseSelfIfNeeded}). mDisplayContents.remove(displayContent); } Configuration getDisplayOverrideConfiguration(int displayId) { Configuration getDisplayOverrideConfiguration(int displayId) { final DisplayContent displayContent = getDisplayContentOrCreate(displayId); final DisplayContent displayContent = getDisplayContentOrCreate(displayId); if (displayContent == null) { if (displayContent == null) { Loading Loading @@ -1664,7 +1607,7 @@ class RootActivityContainer extends ConfigurationContainer } } void addStartingWindowsForVisibleActivities() { void addStartingWindowsForVisibleActivities() { mRootWindowContainer.forAllActivities((r) -> { forAllActivities((r) -> { if (r.mVisibleRequested) { if (r.mVisibleRequested) { r.showStartingWindow(null /* prev */, false /* newTask */, true /*taskSwitch*/); r.showStartingWindow(null /* prev */, false /* newTask */, true /*taskSwitch*/); } } Loading @@ -1676,7 +1619,7 @@ class RootActivityContainer extends ConfigurationContainer } } void rankTaskLayersIfNeeded() { void rankTaskLayersIfNeeded() { if (!mTaskLayersChanged || mRootWindowContainer == null) { if (!mTaskLayersChanged) { return; return; } } mTaskLayersChanged = false; mTaskLayersChanged = false; Loading @@ -1684,7 +1627,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::rankTaskLayerForActivity, this, RootActivityContainer::rankTaskLayerForActivity, this, PooledLambda.__(ActivityRecord.class)); PooledLambda.__(ActivityRecord.class)); mRootWindowContainer.forAllActivities(c); forAllActivities(c); c.recycle(); c.recycle(); } } Loading @@ -1700,7 +1643,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::clearOtherAppTimeTrackers, RootActivityContainer::clearOtherAppTimeTrackers, PooledLambda.__(ActivityRecord.class), except); PooledLambda.__(ActivityRecord.class), except); mRootWindowContainer.forAllActivities(c); forAllActivities(c); c.recycle(); c.recycle(); } } Loading Loading @@ -1748,7 +1691,7 @@ class RootActivityContainer extends ConfigurationContainer void handleAppCrash(WindowProcessController app) { void handleAppCrash(WindowProcessController app) { final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::handleAppCrash, PooledLambda.__(ActivityRecord.class), app); RootActivityContainer::handleAppCrash, PooledLambda.__(ActivityRecord.class), app); mRootWindowContainer.forAllActivities(c); forAllActivities(c); c.recycle(); c.recycle(); } } Loading @@ -1773,7 +1716,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledPredicate p = PooledLambda.obtainPredicate( final PooledPredicate p = PooledLambda.obtainPredicate( RootActivityContainer::matchesActivity, PooledLambda.__(ActivityRecord.class), RootActivityContainer::matchesActivity, PooledLambda.__(ActivityRecord.class), userId, compareIntentFilters, intent, cls); userId, compareIntentFilters, intent, cls); final ActivityRecord r = mRootWindowContainer.getActivity(p); final ActivityRecord r = getActivity(p); p.recycle(); p.recycle(); return r; return r; } } Loading Loading @@ -2123,7 +2066,7 @@ class RootActivityContainer extends ConfigurationContainer } } void closeSystemDialogs() { void closeSystemDialogs() { mRootWindowContainer.forAllActivities((r) -> { forAllActivities((r) -> { if ((r.info.flags & ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) { if ((r.info.flags & ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS) != 0) { r.finishIfPossible("close-sys", true /* oomAdj */); r.finishIfPossible("close-sys", true /* oomAdj */); } } Loading Loading @@ -2161,7 +2104,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledFunction f = PooledLambda.obtainFunction( final PooledFunction f = PooledLambda.obtainFunction( FinishDisabledPackageActivitiesHelper::processActivity, this, FinishDisabledPackageActivitiesHelper::processActivity, this, PooledLambda.__(ActivityRecord.class)); PooledLambda.__(ActivityRecord.class)); mRootWindowContainer.forAllActivities(f); forAllActivities(f); f.recycle(); f.recycle(); return mDidSomething; return mDidSomething; } } Loading Loading @@ -2213,7 +2156,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::updateActivityApplicationInfo, RootActivityContainer::updateActivityApplicationInfo, PooledLambda.__(ActivityRecord.class), aInfo, userId, packageName); PooledLambda.__(ActivityRecord.class), aInfo, userId, packageName); mRootWindowContainer.forAllActivities(c); forAllActivities(c); c.recycle(); c.recycle(); } } Loading Loading @@ -2341,7 +2284,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledConsumer c = PooledLambda.obtainConsumer( final PooledConsumer c = PooledLambda.obtainConsumer( RootActivityContainer::taskTopActivityIsUser, this, PooledLambda.__(Task.class), RootActivityContainer::taskTopActivityIsUser, this, PooledLambda.__(Task.class), userId); userId); mRootWindowContainer.forAllTasks(c); forAllTasks(c); c.recycle(); c.recycle(); } finally { } finally { mService.continueWindowLayout(); mService.continueWindowLayout(); Loading Loading @@ -2409,7 +2352,7 @@ class RootActivityContainer extends ConfigurationContainer final PooledPredicate p = PooledLambda.obtainPredicate( final PooledPredicate p = PooledLambda.obtainPredicate( Task::isTaskId, PooledLambda.__(Task.class), id); Task::isTaskId, PooledLambda.__(Task.class), id); Task task = mRootWindowContainer.getTask(p); Task task = getTask(p); p.recycle(); p.recycle(); if (task != null) { if (task != null) { Loading Loading @@ -2621,10 +2564,11 @@ class RootActivityContainer extends ConfigurationContainer return printed; return printed; } } protected void dumpDebug(ProtoOutputStream proto, long fieldId, @Override public void dumpDebug(ProtoOutputStream proto, long fieldId, @WindowTraceLogLevel int logLevel) { @WindowTraceLogLevel int logLevel) { final long token = proto.start(fieldId); final long token = proto.start(fieldId); super.dumpDebug(proto, CONFIGURATION_CONTAINER, logLevel); dumpDebugInner(proto, ROOT_WINDOW_CONTAINER, logLevel); for (int displayNdx = 0; displayNdx < getChildCount(); ++displayNdx) { for (int displayNdx = 0; displayNdx < getChildCount(); ++displayNdx) { final DisplayContent displayContent = getChildAt(displayNdx); final DisplayContent displayContent = getChildAt(displayNdx); displayContent.dumpDebug(proto, DISPLAYS, logLevel); displayContent.dumpDebug(proto, DISPLAYS, logLevel); Loading