Loading services/core/java/com/android/server/am/ActivityManagerService.java +35 −25 Original line number Diff line number Diff line Loading @@ -2849,7 +2849,7 @@ public class ActivityManagerService extends IActivityManager.Stub mTempConfig.setToDefaults(); mTempConfig.setLocales(LocaleList.getDefault()); mConfigurationSeq = mTempConfig.seq = 1; mStackSupervisor = new ActivityStackSupervisor(this); mStackSupervisor = createStackSupervisor(); mStackSupervisor.onConfigurationChanged(mTempConfig); mKeyguardController = mStackSupervisor.mKeyguardController; mCompatModePackages = new CompatModePackages(this, systemDir, mHandler); Loading Loading @@ -2897,6 +2897,10 @@ public class ActivityManagerService extends IActivityManager.Stub Watchdog.getInstance().addThread(mHandler); } protected ActivityStackSupervisor createStackSupervisor() { return new ActivityStackSupervisor(this, mHandler.getLooper()); } public void setSystemServiceManager(SystemServiceManager mgr) { mSystemServiceManager = mgr; } Loading Loading @@ -3151,7 +3155,8 @@ public class ActivityManagerService extends IActivityManager.Stub * {@link ActivityStack#setResumedActivityLocked} when an activity is resumed. */ void setResumedActivityUncheckLocked(ActivityRecord r, String reason) { if (r.task.isApplicationTask()) { final TaskRecord task = r.getTask(); if (task.isApplicationTask()) { if (mCurAppTimeTracker != r.appTimeTracker) { // We are switching app tracking. Complete the current one. if (mCurAppTimeTracker != null) { Loading @@ -3174,17 +3179,18 @@ public class ActivityManagerService extends IActivityManager.Stub // TODO: VI Maybe r.task.voiceInteractor || r.voiceInteractor != null // TODO: Probably not, because we don't want to resume voice on switching // back to this activity if (r.task.voiceInteractor != null) { startRunningVoiceLocked(r.task.voiceSession, r.info.applicationInfo.uid); if (task.voiceInteractor != null) { startRunningVoiceLocked(task.voiceSession, r.info.applicationInfo.uid); } else { finishRunningVoiceLocked(); if (mLastResumedActivity != null) { final IVoiceInteractionSession session; if (mLastResumedActivity.task != null && mLastResumedActivity.task.voiceSession != null) { session = mLastResumedActivity.task.voiceSession; final TaskRecord lastResumedActivityTask = mLastResumedActivity.getTask(); if (lastResumedActivityTask != null && lastResumedActivityTask.voiceSession != null) { session = lastResumedActivityTask.voiceSession; } else { session = mLastResumedActivity.voiceSession; } Loading Loading @@ -3317,7 +3323,7 @@ public class ActivityManagerService extends IActivityManager.Stub final void showAskCompatModeDialogLocked(ActivityRecord r) { Message msg = Message.obtain(); msg.what = SHOW_COMPAT_MODE_DIALOG_UI_MSG; msg.obj = r.task.askedCompatMode ? null : r; msg.obj = r.getTask().askedCompatMode ? null : r; mUiHandler.sendMessage(msg); } Loading Loading @@ -4723,7 +4729,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (ActivityRecord.forTokenLocked(callingActivity) != activity) { throw new SecurityException("Only focused activity can call startVoiceInteraction"); } if (mRunningVoice != null || activity.task.voiceSession != null if (mRunningVoice != null || activity.getTask().voiceSession != null || activity.voiceSession != null) { Slog.w(TAG, "Already in a voice interaction, cannot start new voice interaction"); return; Loading Loading @@ -5033,7 +5039,7 @@ public class ActivityManagerService extends IActivityManager.Stub return true; } // Keep track of the root activity of the task before we finish it TaskRecord tr = r.task; TaskRecord tr = r.getTask(); ActivityRecord rootR = tr.getRootActivity(); if (rootR == null) { Slog.w(TAG, "Finishing task with all activities already finished"); Loading Loading @@ -5170,7 +5176,7 @@ public class ActivityManagerService extends IActivityManager.Stub // Do not allow task to finish if last task in lockTask mode. Launchable priv-apps // can finish. final TaskRecord task = r.task; final TaskRecord task = r.getTask(); if (task.mLockTaskAuth != LOCK_TASK_AUTH_LAUNCHABLE_PRIV && mStackSupervisor.isLastLockedTask(task) && task.getRootActivity() == r) { mStackSupervisor.showLockTaskToast(); Loading Loading @@ -7834,7 +7840,7 @@ public class ActivityManagerService extends IActivityManager.Stub return false; } // An activity is consider to be in multi-window mode if its task isn't fullscreen. return !r.task.mFullscreen; return !r.getTask().mFullscreen; } } finally { Binder.restoreCallingIdentity(origId); Loading Loading @@ -9927,8 +9933,9 @@ public class ActivityManagerService extends IActivityManager.Stub ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r != null) { r.setTaskDescription(td); r.task.updateTaskDescription(); mTaskChangeNotificationController.notifyTaskDescriptionChanged(r.task.taskId, td); final TaskRecord task = r.getTask(); task.updateTaskDescription(); mTaskChangeNotificationController.notifyTaskDescriptionChanged(task.taskId, td); } } } Loading Loading @@ -10378,8 +10385,8 @@ public class ActivityManagerService extends IActivityManager.Stub } if (DEBUG_STACK) Slog.d(TAG_STACK, "exitFreeformMode: " + r); r.task.reparent(FULLSCREEN_WORKSPACE_STACK_ID, ON_TOP, REPARENT_KEEP_STACK_AT_FRONT, ANIMATE, !DEFER_RESUME, "exitFreeformMode"); r.getTask().reparent(FULLSCREEN_WORKSPACE_STACK_ID, ON_TOP, REPARENT_KEEP_STACK_AT_FRONT, ANIMATE, !DEFER_RESUME, "exitFreeformMode"); } finally { Binder.restoreCallingIdentity(ident); } Loading Loading @@ -10760,7 +10767,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (r == null) { return; } final TaskRecord task = r.task; final TaskRecord task = r.getTask(); if (task != null) { startLockTaskModeLocked(task); } Loading Loading @@ -10859,7 +10866,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (r == null) { return; } mStackSupervisor.showLockTaskEscapeMessageLocked(r.task); mStackSupervisor.showLockTaskEscapeMessageLocked(r.getTask()); } } Loading Loading @@ -13121,9 +13128,10 @@ public class ActivityManagerService extends IActivityManager.Stub if (r == null) { return false; } int index = r.task.mActivities.lastIndexOf(r); final TaskRecord task = r.getTask(); int index = task.mActivities.lastIndexOf(r); if (index > 0) { ActivityRecord under = r.task.mActivities.get(index - 1); ActivityRecord under = task.mActivities.get(index - 1); under.returningOptions = ActivityOptions.fromBundle(options); } final boolean translucentChanged = r.changeWindowTranslucency(false); Loading Loading @@ -13410,7 +13418,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (r == null) { throw new IllegalArgumentException(); } return r.task.getTopActivity() == r; return r.getTask().getTopActivity() == r; } } Loading Loading @@ -15928,8 +15936,9 @@ public class ActivityManagerService extends IActivityManager.Stub } needSep = true; synchronized (this) { if (lastTask != r.task) { lastTask = r.task; final TaskRecord task = r.getTask(); if (lastTask != task) { lastTask = task; pw.print("TASK "); pw.print(lastTask.affinity); pw.print(" id="); pw.print(lastTask.taskId); pw.print(" userId="); pw.println(lastTask.userId); Loading Loading @@ -20561,8 +20570,9 @@ public class ActivityManagerService extends IActivityManager.Stub app.cached = false; app.empty = false; foregroundActivities = true; if (r.task != null && minLayer > 0) { final int layer = r.task.mLayerRank; final TaskRecord task = r.getTask(); if (task != null && minLayer > 0) { final int layer = task.mLayerRank; if (layer >= 0 && minLayer > layer) { minLayer = layer; } services/core/java/com/android/server/am/ActivityRecord.java +42 −3 Original line number Diff line number Diff line Loading @@ -229,7 +229,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo private int theme; // resource identifier of activity's theme. private int realTheme; // actual theme resource we will use, never 0. private int windowFlags; // custom window flags for preview window. TaskRecord task; // the task this is in. private TaskRecord task; // the task this is in. private long createTime = System.currentTimeMillis(); long displayStartTime; // when we started launching this activity long fullyDrawnStartTime; // when we started launching this activity Loading Loading @@ -686,9 +686,48 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo @Override protected ConfigurationContainer getParent() { return getTask(); } TaskRecord getTask() { return task; } /** * Sets reference to the {@link TaskRecord} the {@link ActivityRecord} will treat as its parent. * Note that this does not actually add the {@link ActivityRecord} as a {@link TaskRecord} * children. However, this method will clean up references to this {@link ActivityRecord} in * {@link ActivityStack}. * @param task The new parent {@link TaskRecord}. */ void setTask(TaskRecord task) { setTask(task, false /*reparenting*/); } /** * This method should only be called by {@link TaskRecord#removeActivity(ActivityRecord)}. */ void setTask(TaskRecord task, boolean reparenting) { // Do nothing if the {@link TaskRecord} is the same as the current {@link getTask}. if (task != null && task == getTask()) { return; } final ActivityStack stack = getStack(); // If the new {@link TaskRecord} is from a different {@link ActivityStack}, remove this // {@link ActivityRecord} from its current {@link ActivityStack}. if (!reparenting && stack != null && (task == null || stack != task.getStack())) { stack.onActivityRemovedFromStack(this); } this.task = task; if (!reparenting) { onParentChanged(); } } static class Token extends IApplicationToken.Stub { private final WeakReference<ActivityRecord> weakActivity; Loading Loading @@ -925,8 +964,8 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo // Must reparent first in window manager mWindowContainerController.reparent(newTask.getWindowContainerController(), position); // Remove the activity from the old task and add it to the new task prevTask.removeActivity(this); // Remove the activity from the old task and add it to the new task. prevTask.removeActivity(this, true /*reparenting*/); newTask.addActivityAtIndex(position, this); } Loading services/core/java/com/android/server/am/ActivityStack.java +91 −65 File changed.Preview size limit exceeded, changes collapsed. Show changes services/core/java/com/android/server/am/ActivityStackSupervisor.java +35 −26 Original line number Diff line number Diff line Loading @@ -164,6 +164,7 @@ import android.view.Display; import android.view.InputEvent; import android.view.Surface; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.content.ReferrerIntent; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; Loading @@ -173,6 +174,7 @@ import com.android.internal.util.ArrayUtils; import com.android.internal.widget.LockPatternUtils; import com.android.server.LocalServices; import com.android.server.am.ActivityStack.ActivityState; import com.android.server.wm.StackWindowController; import com.android.server.wm.WindowManagerService; import java.io.FileDescriptor; Loading Loading @@ -553,9 +555,9 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } } public ActivityStackSupervisor(ActivityManagerService service) { public ActivityStackSupervisor(ActivityManagerService service, Looper looper) { mService = service; mHandler = new ActivityStackSupervisorHandler(mService.mHandler.getLooper()); mHandler = new ActivityStackSupervisorHandler(looper); mActivityMetricsLogger = new ActivityMetricsLogger(this, mService.mContext); mKeyguardController = new KeyguardController(service, this); } Loading Loading @@ -722,7 +724,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } if (prev != null) { prev.task.setTaskToReturnTo(APPLICATION_ACTIVITY_TYPE); prev.getTask().setTaskToReturnTo(APPLICATION_ACTIVITY_TYPE); } mHomeStack.moveHomeStackTaskToTop(); Loading Loading @@ -1314,7 +1316,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D mService.updateLruProcessLocked(app, true, null); mService.updateOomAdjLocked(); final TaskRecord task = r.task; final TaskRecord task = r.getTask(); if (task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE || task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE_PRIV) { setLockTaskModeLocked(task, LOCK_TASK_MODE_LOCKED, "mLockTaskAuth==LAUNCHABLE", false); Loading Loading @@ -2622,7 +2624,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } for (int k = 0; k < proc.activities.size(); k++) { TaskRecord otherTask = proc.activities.get(k).task; TaskRecord otherTask = proc.activities.get(k).getTask(); if (tr.taskId != otherTask.taskId && otherTask.inRecents) { // Don't kill process(es) that has an activity in a different task that is // also in recents. Loading Loading @@ -2837,7 +2839,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D final PinnedActivityStack stack = getStack(PINNED_STACK_ID, CREATE_IF_NEEDED, ON_TOP); try { final TaskRecord task = r.task; final TaskRecord task = r.getTask(); if (r == task.getStack().getVisibleBehindActivity()) { // An activity can't be pinned and visible behind at the same time. Go ahead and Loading Loading @@ -2910,7 +2912,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D return false; } final TaskRecord task = r.task; final TaskRecord task = r.getTask(); final ActivityStack stack = r.getStack(); if (stack == null) { Slog.w(TAG, "moveActivityStackToFront: invalid task or stack: r=" Loading Loading @@ -3203,7 +3205,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // Called when WindowManager has finished animating the launchingBehind activity to the back. private void handleLaunchTaskBehindCompleteLocked(ActivityRecord r) { final TaskRecord task = r.task; final TaskRecord task = r.getTask(); final ActivityStack stack = task.getStack(); r.mLaunchTaskBehind = false; Loading @@ -3216,7 +3218,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // task has been shown briefly final ActivityRecord top = stack.topActivity(); if (top != null) { top.task.touchActiveTime(); top.getTask().touchActiveTime(); } } Loading Loading @@ -3315,17 +3317,19 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Not releasing in-use activity: " + r); continue; } if (r.task != null) { if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Collecting release task " + r.task final TaskRecord task = r.getTask(); if (task != null) { if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Collecting release task " + task + " from " + r); if (firstTask == null) { firstTask = r.task; } else if (firstTask != r.task) { firstTask = task; } else if (firstTask != task) { if (tasks == null) { tasks = new ArraySet<>(); tasks.add(firstTask); } tasks.add(r.task); tasks.add(task); } } } Loading Loading @@ -3664,8 +3668,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D pw.println(header2); header2 = null; } if (lastTask != r.task) { lastTask = r.task; if (lastTask != r.getTask()) { lastTask = r.getTask(); pw.print(prefix); pw.print(full ? "* " : " "); pw.println(lastTask); Loading Loading @@ -4080,7 +4084,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } } final ActivityRecord r = topRunningActivityLocked(); final TaskRecord task = r != null ? r.task : null; final TaskRecord task = r != null ? r.getTask() : null; if (mLockTaskModeTasks.isEmpty() && task != null && task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE) { // This task must have just been authorized. Loading Loading @@ -4390,7 +4394,15 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D synchronized (mService) { mStackId = stackId; mActivityDisplay = activityDisplay; switch (mStackId) { mIdString = "ActivtyContainer{" + mStackId + "}"; createStack(stackId, onTop); if (DEBUG_STACK) Slog.d(TAG_STACK, "Creating " + this); } } protected void createStack(int stackId, boolean onTop) { switch (stackId) { case PINNED_STACK_ID: new PinnedActivityStack(this, mRecentTasks, onTop); break; Loading @@ -4398,9 +4410,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D new ActivityStack(this, mRecentTasks, onTop); break; } mIdString = "ActivtyContainer{" + mStackId + "}"; if (DEBUG_STACK) Slog.d(TAG_STACK, "Creating " + this); } } /** Loading Loading @@ -4926,7 +4935,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D mService.mActivityStarter.postStartActivityProcessing(task.getTopActivity(), ActivityManager.START_TASK_TO_FRONT, sourceRecord != null ? sourceRecord.task.getStackId() : INVALID_STACK_ID, sourceRecord != null ? sourceRecord.getTask().getStackId() : INVALID_STACK_ID, sourceRecord, task.getStack()); return ActivityManager.START_TASK_TO_FRONT; } Loading services/core/java/com/android/server/am/ActivityStartInterceptor.java +2 −2 Original line number Diff line number Diff line Loading @@ -188,10 +188,10 @@ class ActivityStartInterceptor { } ActivityRecord homeActivityRecord = mSupervisor.getHomeActivity(); if (homeActivityRecord != null && homeActivityRecord.task != null) { if (homeActivityRecord != null && homeActivityRecord.getTask() != null) { // Showing credential confirmation activity in home task to avoid stopping multi-windowed // mode after showing the full-screen credential confirmation activity. mActivityOptions.setLaunchTaskId(homeActivityRecord.task.taskId); mActivityOptions.setLaunchTaskId(homeActivityRecord.getTask().taskId); } final UserInfo parent = mUserManager.getProfileParent(mUserId); Loading Loading
services/core/java/com/android/server/am/ActivityManagerService.java +35 −25 Original line number Diff line number Diff line Loading @@ -2849,7 +2849,7 @@ public class ActivityManagerService extends IActivityManager.Stub mTempConfig.setToDefaults(); mTempConfig.setLocales(LocaleList.getDefault()); mConfigurationSeq = mTempConfig.seq = 1; mStackSupervisor = new ActivityStackSupervisor(this); mStackSupervisor = createStackSupervisor(); mStackSupervisor.onConfigurationChanged(mTempConfig); mKeyguardController = mStackSupervisor.mKeyguardController; mCompatModePackages = new CompatModePackages(this, systemDir, mHandler); Loading Loading @@ -2897,6 +2897,10 @@ public class ActivityManagerService extends IActivityManager.Stub Watchdog.getInstance().addThread(mHandler); } protected ActivityStackSupervisor createStackSupervisor() { return new ActivityStackSupervisor(this, mHandler.getLooper()); } public void setSystemServiceManager(SystemServiceManager mgr) { mSystemServiceManager = mgr; } Loading Loading @@ -3151,7 +3155,8 @@ public class ActivityManagerService extends IActivityManager.Stub * {@link ActivityStack#setResumedActivityLocked} when an activity is resumed. */ void setResumedActivityUncheckLocked(ActivityRecord r, String reason) { if (r.task.isApplicationTask()) { final TaskRecord task = r.getTask(); if (task.isApplicationTask()) { if (mCurAppTimeTracker != r.appTimeTracker) { // We are switching app tracking. Complete the current one. if (mCurAppTimeTracker != null) { Loading @@ -3174,17 +3179,18 @@ public class ActivityManagerService extends IActivityManager.Stub // TODO: VI Maybe r.task.voiceInteractor || r.voiceInteractor != null // TODO: Probably not, because we don't want to resume voice on switching // back to this activity if (r.task.voiceInteractor != null) { startRunningVoiceLocked(r.task.voiceSession, r.info.applicationInfo.uid); if (task.voiceInteractor != null) { startRunningVoiceLocked(task.voiceSession, r.info.applicationInfo.uid); } else { finishRunningVoiceLocked(); if (mLastResumedActivity != null) { final IVoiceInteractionSession session; if (mLastResumedActivity.task != null && mLastResumedActivity.task.voiceSession != null) { session = mLastResumedActivity.task.voiceSession; final TaskRecord lastResumedActivityTask = mLastResumedActivity.getTask(); if (lastResumedActivityTask != null && lastResumedActivityTask.voiceSession != null) { session = lastResumedActivityTask.voiceSession; } else { session = mLastResumedActivity.voiceSession; } Loading Loading @@ -3317,7 +3323,7 @@ public class ActivityManagerService extends IActivityManager.Stub final void showAskCompatModeDialogLocked(ActivityRecord r) { Message msg = Message.obtain(); msg.what = SHOW_COMPAT_MODE_DIALOG_UI_MSG; msg.obj = r.task.askedCompatMode ? null : r; msg.obj = r.getTask().askedCompatMode ? null : r; mUiHandler.sendMessage(msg); } Loading Loading @@ -4723,7 +4729,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (ActivityRecord.forTokenLocked(callingActivity) != activity) { throw new SecurityException("Only focused activity can call startVoiceInteraction"); } if (mRunningVoice != null || activity.task.voiceSession != null if (mRunningVoice != null || activity.getTask().voiceSession != null || activity.voiceSession != null) { Slog.w(TAG, "Already in a voice interaction, cannot start new voice interaction"); return; Loading Loading @@ -5033,7 +5039,7 @@ public class ActivityManagerService extends IActivityManager.Stub return true; } // Keep track of the root activity of the task before we finish it TaskRecord tr = r.task; TaskRecord tr = r.getTask(); ActivityRecord rootR = tr.getRootActivity(); if (rootR == null) { Slog.w(TAG, "Finishing task with all activities already finished"); Loading Loading @@ -5170,7 +5176,7 @@ public class ActivityManagerService extends IActivityManager.Stub // Do not allow task to finish if last task in lockTask mode. Launchable priv-apps // can finish. final TaskRecord task = r.task; final TaskRecord task = r.getTask(); if (task.mLockTaskAuth != LOCK_TASK_AUTH_LAUNCHABLE_PRIV && mStackSupervisor.isLastLockedTask(task) && task.getRootActivity() == r) { mStackSupervisor.showLockTaskToast(); Loading Loading @@ -7834,7 +7840,7 @@ public class ActivityManagerService extends IActivityManager.Stub return false; } // An activity is consider to be in multi-window mode if its task isn't fullscreen. return !r.task.mFullscreen; return !r.getTask().mFullscreen; } } finally { Binder.restoreCallingIdentity(origId); Loading Loading @@ -9927,8 +9933,9 @@ public class ActivityManagerService extends IActivityManager.Stub ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r != null) { r.setTaskDescription(td); r.task.updateTaskDescription(); mTaskChangeNotificationController.notifyTaskDescriptionChanged(r.task.taskId, td); final TaskRecord task = r.getTask(); task.updateTaskDescription(); mTaskChangeNotificationController.notifyTaskDescriptionChanged(task.taskId, td); } } } Loading Loading @@ -10378,8 +10385,8 @@ public class ActivityManagerService extends IActivityManager.Stub } if (DEBUG_STACK) Slog.d(TAG_STACK, "exitFreeformMode: " + r); r.task.reparent(FULLSCREEN_WORKSPACE_STACK_ID, ON_TOP, REPARENT_KEEP_STACK_AT_FRONT, ANIMATE, !DEFER_RESUME, "exitFreeformMode"); r.getTask().reparent(FULLSCREEN_WORKSPACE_STACK_ID, ON_TOP, REPARENT_KEEP_STACK_AT_FRONT, ANIMATE, !DEFER_RESUME, "exitFreeformMode"); } finally { Binder.restoreCallingIdentity(ident); } Loading Loading @@ -10760,7 +10767,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (r == null) { return; } final TaskRecord task = r.task; final TaskRecord task = r.getTask(); if (task != null) { startLockTaskModeLocked(task); } Loading Loading @@ -10859,7 +10866,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (r == null) { return; } mStackSupervisor.showLockTaskEscapeMessageLocked(r.task); mStackSupervisor.showLockTaskEscapeMessageLocked(r.getTask()); } } Loading Loading @@ -13121,9 +13128,10 @@ public class ActivityManagerService extends IActivityManager.Stub if (r == null) { return false; } int index = r.task.mActivities.lastIndexOf(r); final TaskRecord task = r.getTask(); int index = task.mActivities.lastIndexOf(r); if (index > 0) { ActivityRecord under = r.task.mActivities.get(index - 1); ActivityRecord under = task.mActivities.get(index - 1); under.returningOptions = ActivityOptions.fromBundle(options); } final boolean translucentChanged = r.changeWindowTranslucency(false); Loading Loading @@ -13410,7 +13418,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (r == null) { throw new IllegalArgumentException(); } return r.task.getTopActivity() == r; return r.getTask().getTopActivity() == r; } } Loading Loading @@ -15928,8 +15936,9 @@ public class ActivityManagerService extends IActivityManager.Stub } needSep = true; synchronized (this) { if (lastTask != r.task) { lastTask = r.task; final TaskRecord task = r.getTask(); if (lastTask != task) { lastTask = task; pw.print("TASK "); pw.print(lastTask.affinity); pw.print(" id="); pw.print(lastTask.taskId); pw.print(" userId="); pw.println(lastTask.userId); Loading Loading @@ -20561,8 +20570,9 @@ public class ActivityManagerService extends IActivityManager.Stub app.cached = false; app.empty = false; foregroundActivities = true; if (r.task != null && minLayer > 0) { final int layer = r.task.mLayerRank; final TaskRecord task = r.getTask(); if (task != null && minLayer > 0) { final int layer = task.mLayerRank; if (layer >= 0 && minLayer > layer) { minLayer = layer; }
services/core/java/com/android/server/am/ActivityRecord.java +42 −3 Original line number Diff line number Diff line Loading @@ -229,7 +229,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo private int theme; // resource identifier of activity's theme. private int realTheme; // actual theme resource we will use, never 0. private int windowFlags; // custom window flags for preview window. TaskRecord task; // the task this is in. private TaskRecord task; // the task this is in. private long createTime = System.currentTimeMillis(); long displayStartTime; // when we started launching this activity long fullyDrawnStartTime; // when we started launching this activity Loading Loading @@ -686,9 +686,48 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo @Override protected ConfigurationContainer getParent() { return getTask(); } TaskRecord getTask() { return task; } /** * Sets reference to the {@link TaskRecord} the {@link ActivityRecord} will treat as its parent. * Note that this does not actually add the {@link ActivityRecord} as a {@link TaskRecord} * children. However, this method will clean up references to this {@link ActivityRecord} in * {@link ActivityStack}. * @param task The new parent {@link TaskRecord}. */ void setTask(TaskRecord task) { setTask(task, false /*reparenting*/); } /** * This method should only be called by {@link TaskRecord#removeActivity(ActivityRecord)}. */ void setTask(TaskRecord task, boolean reparenting) { // Do nothing if the {@link TaskRecord} is the same as the current {@link getTask}. if (task != null && task == getTask()) { return; } final ActivityStack stack = getStack(); // If the new {@link TaskRecord} is from a different {@link ActivityStack}, remove this // {@link ActivityRecord} from its current {@link ActivityStack}. if (!reparenting && stack != null && (task == null || stack != task.getStack())) { stack.onActivityRemovedFromStack(this); } this.task = task; if (!reparenting) { onParentChanged(); } } static class Token extends IApplicationToken.Stub { private final WeakReference<ActivityRecord> weakActivity; Loading Loading @@ -925,8 +964,8 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo // Must reparent first in window manager mWindowContainerController.reparent(newTask.getWindowContainerController(), position); // Remove the activity from the old task and add it to the new task prevTask.removeActivity(this); // Remove the activity from the old task and add it to the new task. prevTask.removeActivity(this, true /*reparenting*/); newTask.addActivityAtIndex(position, this); } Loading
services/core/java/com/android/server/am/ActivityStack.java +91 −65 File changed.Preview size limit exceeded, changes collapsed. Show changes
services/core/java/com/android/server/am/ActivityStackSupervisor.java +35 −26 Original line number Diff line number Diff line Loading @@ -164,6 +164,7 @@ import android.view.Display; import android.view.InputEvent; import android.view.Surface; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.content.ReferrerIntent; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; Loading @@ -173,6 +174,7 @@ import com.android.internal.util.ArrayUtils; import com.android.internal.widget.LockPatternUtils; import com.android.server.LocalServices; import com.android.server.am.ActivityStack.ActivityState; import com.android.server.wm.StackWindowController; import com.android.server.wm.WindowManagerService; import java.io.FileDescriptor; Loading Loading @@ -553,9 +555,9 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } } public ActivityStackSupervisor(ActivityManagerService service) { public ActivityStackSupervisor(ActivityManagerService service, Looper looper) { mService = service; mHandler = new ActivityStackSupervisorHandler(mService.mHandler.getLooper()); mHandler = new ActivityStackSupervisorHandler(looper); mActivityMetricsLogger = new ActivityMetricsLogger(this, mService.mContext); mKeyguardController = new KeyguardController(service, this); } Loading Loading @@ -722,7 +724,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } if (prev != null) { prev.task.setTaskToReturnTo(APPLICATION_ACTIVITY_TYPE); prev.getTask().setTaskToReturnTo(APPLICATION_ACTIVITY_TYPE); } mHomeStack.moveHomeStackTaskToTop(); Loading Loading @@ -1314,7 +1316,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D mService.updateLruProcessLocked(app, true, null); mService.updateOomAdjLocked(); final TaskRecord task = r.task; final TaskRecord task = r.getTask(); if (task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE || task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE_PRIV) { setLockTaskModeLocked(task, LOCK_TASK_MODE_LOCKED, "mLockTaskAuth==LAUNCHABLE", false); Loading Loading @@ -2622,7 +2624,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } for (int k = 0; k < proc.activities.size(); k++) { TaskRecord otherTask = proc.activities.get(k).task; TaskRecord otherTask = proc.activities.get(k).getTask(); if (tr.taskId != otherTask.taskId && otherTask.inRecents) { // Don't kill process(es) that has an activity in a different task that is // also in recents. Loading Loading @@ -2837,7 +2839,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D final PinnedActivityStack stack = getStack(PINNED_STACK_ID, CREATE_IF_NEEDED, ON_TOP); try { final TaskRecord task = r.task; final TaskRecord task = r.getTask(); if (r == task.getStack().getVisibleBehindActivity()) { // An activity can't be pinned and visible behind at the same time. Go ahead and Loading Loading @@ -2910,7 +2912,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D return false; } final TaskRecord task = r.task; final TaskRecord task = r.getTask(); final ActivityStack stack = r.getStack(); if (stack == null) { Slog.w(TAG, "moveActivityStackToFront: invalid task or stack: r=" Loading Loading @@ -3203,7 +3205,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // Called when WindowManager has finished animating the launchingBehind activity to the back. private void handleLaunchTaskBehindCompleteLocked(ActivityRecord r) { final TaskRecord task = r.task; final TaskRecord task = r.getTask(); final ActivityStack stack = task.getStack(); r.mLaunchTaskBehind = false; Loading @@ -3216,7 +3218,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // task has been shown briefly final ActivityRecord top = stack.topActivity(); if (top != null) { top.task.touchActiveTime(); top.getTask().touchActiveTime(); } } Loading Loading @@ -3315,17 +3317,19 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Not releasing in-use activity: " + r); continue; } if (r.task != null) { if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Collecting release task " + r.task final TaskRecord task = r.getTask(); if (task != null) { if (DEBUG_RELEASE) Slog.d(TAG_RELEASE, "Collecting release task " + task + " from " + r); if (firstTask == null) { firstTask = r.task; } else if (firstTask != r.task) { firstTask = task; } else if (firstTask != task) { if (tasks == null) { tasks = new ArraySet<>(); tasks.add(firstTask); } tasks.add(r.task); tasks.add(task); } } } Loading Loading @@ -3664,8 +3668,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D pw.println(header2); header2 = null; } if (lastTask != r.task) { lastTask = r.task; if (lastTask != r.getTask()) { lastTask = r.getTask(); pw.print(prefix); pw.print(full ? "* " : " "); pw.println(lastTask); Loading Loading @@ -4080,7 +4084,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } } final ActivityRecord r = topRunningActivityLocked(); final TaskRecord task = r != null ? r.task : null; final TaskRecord task = r != null ? r.getTask() : null; if (mLockTaskModeTasks.isEmpty() && task != null && task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE) { // This task must have just been authorized. Loading Loading @@ -4390,7 +4394,15 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D synchronized (mService) { mStackId = stackId; mActivityDisplay = activityDisplay; switch (mStackId) { mIdString = "ActivtyContainer{" + mStackId + "}"; createStack(stackId, onTop); if (DEBUG_STACK) Slog.d(TAG_STACK, "Creating " + this); } } protected void createStack(int stackId, boolean onTop) { switch (stackId) { case PINNED_STACK_ID: new PinnedActivityStack(this, mRecentTasks, onTop); break; Loading @@ -4398,9 +4410,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D new ActivityStack(this, mRecentTasks, onTop); break; } mIdString = "ActivtyContainer{" + mStackId + "}"; if (DEBUG_STACK) Slog.d(TAG_STACK, "Creating " + this); } } /** Loading Loading @@ -4926,7 +4935,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D mService.mActivityStarter.postStartActivityProcessing(task.getTopActivity(), ActivityManager.START_TASK_TO_FRONT, sourceRecord != null ? sourceRecord.task.getStackId() : INVALID_STACK_ID, sourceRecord != null ? sourceRecord.getTask().getStackId() : INVALID_STACK_ID, sourceRecord, task.getStack()); return ActivityManager.START_TASK_TO_FRONT; } Loading
services/core/java/com/android/server/am/ActivityStartInterceptor.java +2 −2 Original line number Diff line number Diff line Loading @@ -188,10 +188,10 @@ class ActivityStartInterceptor { } ActivityRecord homeActivityRecord = mSupervisor.getHomeActivity(); if (homeActivityRecord != null && homeActivityRecord.task != null) { if (homeActivityRecord != null && homeActivityRecord.getTask() != null) { // Showing credential confirmation activity in home task to avoid stopping multi-windowed // mode after showing the full-screen credential confirmation activity. mActivityOptions.setLaunchTaskId(homeActivityRecord.task.taskId); mActivityOptions.setLaunchTaskId(homeActivityRecord.getTask().taskId); } final UserInfo parent = mUserManager.getProfileParent(mUserId); Loading