Switched TaskRecord.mService to ActivityTaskManagerService (6/n)
Objects that contain or represent activities like TaskRecord can
no longer rely on ActivityManagerService as it is going to be in a
different package.
Test: Existing tests pass
Test: go/wm-smoke-auto
Bug: 80414790
Change-Id: Ia17591f7d709839c18762d1eb2474b2e2f649dfc
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 7417326..e4e218f 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -680,11 +680,6 @@
*/
String mDeviceOwnerName;
- /**
- * The controller for all operations related to locktask.
- */
- private final LockTaskController mLockTaskController;
-
final UserController mUserController;
/**
@@ -2596,7 +2591,6 @@
mWindowManager = wm;
mActivityTaskManager.setWindowManager(wm);
mStackSupervisor.setWindowManager(wm);
- mLockTaskController.setWindowManager(wm);
}
}
@@ -2864,7 +2858,6 @@
mSystemThread = null;
mUiHandler = injector.getUiHandler(null);
mUserController = null;
- mLockTaskController = null;
mProcStartHandlerThread = null;
mProcStartHandler = null;
mHiddenApiBlacklist = null;
@@ -2957,7 +2950,6 @@
mCompatModePackages = new CompatModePackages(this, systemDir, mHandler);
mIntentFirewall = new IntentFirewall(new IntentFirewallInterface(), mHandler);
mActivityStartController = new ActivityStartController(this);
- mLockTaskController = new LockTaskController(mContext, mStackSupervisor, mHandler);
mProcessCpuThread = new Thread("CpuTracker") {
@Override
@@ -9366,7 +9358,7 @@
synchronized (this) {
if (DEBUG_LOCKTASK) Slog.w(TAG_LOCKTASK, "Whitelisting " + userId + ":" +
Arrays.toString(packages));
- mLockTaskController.updateLockTaskPackages(userId, packages);
+ mActivityTaskManager.getLockTaskController().updateLockTaskPackages(userId, packages);
}
}
@@ -10142,10 +10134,6 @@
return mActivityStartController;
}
- LockTaskController getLockTaskController() {
- return mLockTaskController;
- }
-
ClientLifecycleManager getLifecycleManager() {
return mActivityTaskManager.getLifecycleManager();
}
@@ -10913,11 +10901,6 @@
}
}
- /** Pokes the task persister. */
- void notifyTaskPersisterLocked(TaskRecord task, boolean flush) {
- mActivityTaskManager.getRecentTasks().notifyTaskPersisterLocked(task, flush);
- }
-
@Override
public void notifyCleartextNetwork(int uid, byte[] firstPacket) {
mHandler.obtainMessage(NOTIFY_CLEARTEXT_NETWORK_MSG, uid, 0, firstPacket).sendToTarget();
@@ -10947,7 +10930,7 @@
mBatteryStatsService.shutdown();
synchronized (this) {
mProcessStats.shutdownLocked();
- notifyTaskPersisterLocked(null, true);
+ mActivityTaskManager.notifyTaskPersisterLocked(null, true);
}
return timedout;
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 3869f83..370d90e 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -3739,7 +3739,7 @@
}
if (endTask) {
- mService.getLockTaskController().clearLockedTask(task);
+ mService.mActivityTaskManager.getLockTaskController().clearLockedTask(task);
}
} else if (!r.isState(PAUSING)) {
// If the activity is PAUSING, we will complete the finish once
@@ -4656,7 +4656,7 @@
// In LockTask mode, moving a locked task to the back of the stack may expose unlocked
// ones. Therefore we need to check if this operation is allowed.
- if (!mService.getLockTaskController().canMoveTaskToBack(tr)) {
+ if (!mService.mActivityTaskManager.getLockTaskController().canMoveTaskToBack(tr)) {
return false;
}
@@ -5176,7 +5176,7 @@
boolean toTop, ActivityRecord activity, ActivityRecord source,
ActivityOptions options) {
final TaskRecord task = TaskRecord.create(
- mService, taskId, info, intent, voiceSession, voiceInteractor);
+ mService.mActivityTaskManager, taskId, info, intent, voiceSession, voiceInteractor);
// add the task to stack first, mTaskPositioner might need the stack association
addTask(task, toTop, "createTaskRecord");
final int displayId = mDisplayId != INVALID_DISPLAY ? mDisplayId : DEFAULT_DISPLAY;
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index df09b4a..79b9339 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -1456,7 +1456,7 @@
mService.updateLruProcessLocked(app, true, null);
mService.updateOomAdjLocked();
- final LockTaskController lockTaskController = mService.getLockTaskController();
+ final LockTaskController lockTaskController = mService.mActivityTaskManager.getLockTaskController();
if (task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE
|| task.mLockTaskAuth == LOCK_TASK_AUTH_LAUNCHABLE_PRIV
|| (task.mLockTaskAuth == LOCK_TASK_AUTH_WHITELISTED
@@ -3077,9 +3077,9 @@
if (tr != null) {
tr.removeTaskActivitiesLocked(pauseImmediately, reason);
cleanUpRemovedTaskLocked(tr, killProcess, removeFromRecents);
- mService.getLockTaskController().clearLockedTask(tr);
+ mService.mActivityTaskManager.getLockTaskController().clearLockedTask(tr);
if (tr.isPersistable) {
- mService.notifyTaskPersisterLocked(null, true);
+ mService.mActivityTaskManager.notifyTaskPersisterLocked(null, true);
}
return true;
}
@@ -4005,7 +4005,7 @@
pw.print(mRecentTasks.isRecentsComponentHomeActivity(mCurrentUser));
getKeyguardController().dump(pw, prefix);
- mService.getLockTaskController().dump(pw, prefix);
+ mService.mActivityTaskManager.getLockTaskController().dump(pw, prefix);
}
public void writeToProto(ProtoOutputStream proto, long fieldId) {
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 796018c..dad50bf 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -1257,7 +1257,7 @@
// When the flags NEW_TASK and CLEAR_TASK are set, then the task gets reused but
// still needs to be a lock task mode violation since the task gets cleared out and
// the device would otherwise leave the locked task.
- if (mService.getLockTaskController().isLockTaskModeViolation(reusedActivity.getTask(),
+ if (mService.mActivityTaskManager.getLockTaskController().isLockTaskModeViolation(reusedActivity.getTask(),
(mLaunchFlags & (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK))
== (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK))) {
Slog.e(TAG, "startActivityUnchecked: Attempt to violate Lock Task Mode");
@@ -2070,7 +2070,7 @@
mStartActivity.setTaskToAffiliateWith(taskToAffiliate);
}
- if (mService.getLockTaskController().isLockTaskModeViolation(mStartActivity.getTask())) {
+ if (mService.mActivityTaskManager.getLockTaskController().isLockTaskModeViolation(mStartActivity.getTask())) {
Slog.e(TAG, "Attempted Lock Task Mode violation mStartActivity=" + mStartActivity);
return START_RETURN_LOCK_TASK_MODE_VIOLATION;
}
@@ -2093,7 +2093,7 @@
}
private int setTaskFromSourceRecord() {
- if (mService.getLockTaskController().isLockTaskModeViolation(mSourceRecord.getTask())) {
+ if (mService.mActivityTaskManager.getLockTaskController().isLockTaskModeViolation(mSourceRecord.getTask())) {
Slog.e(TAG, "Attempted Lock Task Mode violation mStartActivity=" + mStartActivity);
return START_RETURN_LOCK_TASK_MODE_VIOLATION;
}
@@ -2187,7 +2187,7 @@
private int setTaskFromInTask() {
// The caller is asking that the new activity be started in an explicit
// task it has provided to us.
- if (mService.getLockTaskController().isLockTaskModeViolation(mInTask)) {
+ if (mService.mActivityTaskManager.getLockTaskController().isLockTaskModeViolation(mInTask)) {
Slog.e(TAG, "Attempted Lock Task Mode violation mStartActivity=" + mStartActivity);
return START_RETURN_LOCK_TASK_MODE_VIOLATION;
}
diff --git a/services/core/java/com/android/server/am/ActivityTaskManagerService.java b/services/core/java/com/android/server/am/ActivityTaskManagerService.java
index 37ee3f7..a49e20d 100644
--- a/services/core/java/com/android/server/am/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityTaskManagerService.java
@@ -222,6 +222,8 @@
KeyguardController mKeyguardController;
private final ClientLifecycleManager mLifecycleManager;
private TaskChangeNotificationController mTaskChangeNotificationController;
+ /** The controller for all operations related to locktask. */
+ private LockTaskController mLockTaskController;
boolean mSuppressResizeConfigChanges;
@@ -259,6 +261,7 @@
mStackSupervisor = mAm.mStackSupervisor;
mTaskChangeNotificationController =
new TaskChangeNotificationController(mAm, mStackSupervisor, mH);
+ mLockTaskController = new LockTaskController(mContext, mStackSupervisor, mH);
mRecentTasks = createRecentTasks();
mStackSupervisor.setRecentTasks(mRecentTasks);
mVrController = new VrController(mAm);
@@ -267,6 +270,7 @@
void setWindowManager(WindowManagerService wm) {
mWindowManager = wm;
+ mLockTaskController.setWindowManager(wm);
}
protected RecentTasks createRecentTasks() {
@@ -285,6 +289,10 @@
return mTaskChangeNotificationController;
}
+ LockTaskController getLockTaskController() {
+ return mLockTaskController;
+ }
+
private void start() {
LocalServices.addService(ActivityTaskManagerInternal.class, new LocalService());
}
@@ -769,7 +777,7 @@
}
// Do not allow task to finish if last task in lockTask mode. Launchable priv-apps can
// finish.
- if (mAm.getLockTaskController().activityBlockedFromFinish(r)) {
+ if (getLockTaskController().activityBlockedFromFinish(r)) {
return false;
}
@@ -836,7 +844,7 @@
// Do not allow task to finish if last task in lockTask mode. Launchable priv-apps
// can finish.
final TaskRecord task = r.getTask();
- if (mAm.getLockTaskController().activityBlockedFromFinish(r)) {
+ if (getLockTaskController().activityBlockedFromFinish(r)) {
return false;
}
return task.getStack().finishActivityAffinityLocked(r);
@@ -1442,7 +1450,7 @@
Slog.d(TAG, "Could not find task for id: "+ taskId);
return;
}
- if (mAm.getLockTaskController().isLockTaskModeViolation(task)) {
+ if (getLockTaskController().isLockTaskModeViolation(task)) {
Slog.e(TAG, "moveTaskToFront: Attempt to violate Lock Task Mode");
return;
}
@@ -1812,7 +1820,7 @@
// When a task is locked, dismiss the pinned stack if it exists
mStackSupervisor.removeStacksInWindowingModes(WINDOWING_MODE_PINNED);
- mAm.getLockTaskController().startLockTaskMode(task, isSystemCaller, callingUid);
+ getLockTaskController().startLockTaskMode(task, isSystemCaller, callingUid);
} finally {
Binder.restoreCallingIdentity(ident);
}
@@ -1823,7 +1831,7 @@
long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
- mAm.getLockTaskController().stopLockTaskMode(task, isSystemCaller, callingUid);
+ getLockTaskController().stopLockTaskMode(task, isSystemCaller, callingUid);
}
// Launch in-call UI if a call is ongoing. This is necessary to allow stopping the lock
// task and jumping straight into a call in the case of emergency call back.
@@ -1844,7 +1852,7 @@
@Override
public int getLockTaskModeState() {
synchronized (mGlobalLock) {
- return mAm.getLockTaskController().getLockTaskModeState();
+ return getLockTaskController().getLockTaskModeState();
}
}
@@ -2601,7 +2609,7 @@
if (r == null) {
return;
}
- mAm.getLockTaskController().showLockTaskToast();
+ getLockTaskController().showLockTaskToast();
}
}
@@ -3319,7 +3327,7 @@
synchronized (mGlobalLock) {
if (DEBUG_LOCKTASK) Slog.w(TAG_LOCKTASK, "Allowing features " + userId + ":0x" +
Integer.toHexString(flags));
- mAm.getLockTaskController().updateLockTaskFeatures(userId, flags);
+ getLockTaskController().updateLockTaskFeatures(userId, flags);
}
}
diff --git a/services/core/java/com/android/server/am/RecentTasks.java b/services/core/java/com/android/server/am/RecentTasks.java
index 5390127..749589b 100644
--- a/services/core/java/com/android/server/am/RecentTasks.java
+++ b/services/core/java/com/android/server/am/RecentTasks.java
@@ -529,7 +529,7 @@
}
for (int i = mTasks.size() - 1; i >= 0; --i) {
final TaskRecord tr = mTasks.get(i);
- if (tr.userId == userId && !mService.mAm.getLockTaskController().isTaskWhitelisted(tr)) {
+ if (tr.userId == userId && !mService.getLockTaskController().isTaskWhitelisted(tr)) {
remove(tr);
}
}
@@ -1162,7 +1162,7 @@
}
// If we're in lock task mode, ignore the root task
- if (task == mService.mAm.getLockTaskController().getRootTask()) {
+ if (task == mService.getLockTaskController().getRootTask()) {
return false;
}
diff --git a/services/core/java/com/android/server/am/SafeActivityOptions.java b/services/core/java/com/android/server/am/SafeActivityOptions.java
index 55d17a9..837432d 100644
--- a/services/core/java/com/android/server/am/SafeActivityOptions.java
+++ b/services/core/java/com/android/server/am/SafeActivityOptions.java
@@ -219,7 +219,7 @@
// Check if someone tries to launch an unwhitelisted activity into LockTask mode.
final boolean lockTaskMode = options.getLockTaskMode();
if (aInfo != null && lockTaskMode
- && !supervisor.mService.getLockTaskController().isPackageWhitelisted(
+ && !supervisor.mService.mActivityTaskManager.getLockTaskController().isPackageWhitelisted(
UserHandle.getUserId(callingUid), aInfo.packageName)) {
final String msg = "Permission Denial: starting " + getIntentString(intent)
+ " from " + callerApp + " (pid=" + callingPid
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index b363866..d984016 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -295,7 +295,7 @@
int mCallingUid;
String mCallingPackage;
- final ActivityManagerService mService;
+ final ActivityTaskManagerService mService;
private final Rect mTmpStableBounds = new Rect();
private final Rect mTmpNonDecorBounds = new Rect();
@@ -320,10 +320,10 @@
private TaskWindowContainerController mWindowContainerController;
/**
- * Don't use constructor directly. Use {@link #create(ActivityManagerService, int, ActivityInfo,
- * Intent, TaskDescription)} instead.
+ * Don't use constructor directly. Use {@link #create(ActivityTaskManagerService, int,
+ * ActivityInfo, Intent, TaskDescription)} instead.
*/
- TaskRecord(ActivityManagerService service, int _taskId, ActivityInfo info, Intent _intent,
+ TaskRecord(ActivityTaskManagerService service, int _taskId, ActivityInfo info, Intent _intent,
IVoiceInteractionSession _voiceSession, IVoiceInteractor _voiceInteractor) {
mService = service;
userId = UserHandle.getUserId(info.applicationInfo.uid);
@@ -339,14 +339,15 @@
setIntent(_intent, info);
setMinDimensions(info);
touchActiveTime();
- mService.mActivityTaskManager.getTaskChangeNotificationController().notifyTaskCreated(_taskId, realActivity);
+ mService.getTaskChangeNotificationController().notifyTaskCreated(_taskId, realActivity);
}
/**
- * Don't use constructor directly. Use {@link #create(ActivityManagerService, int, ActivityInfo,
+ * Don't use constructor directly.
+ * Use {@link #create(ActivityTaskManagerService, int, ActivityInfo,
* Intent, IVoiceInteractionSession, IVoiceInteractor)} instead.
*/
- TaskRecord(ActivityManagerService service, int _taskId, ActivityInfo info, Intent _intent,
+ TaskRecord(ActivityTaskManagerService service, int _taskId, ActivityInfo info, Intent _intent,
TaskDescription _taskDescription) {
mService = service;
userId = UserHandle.getUserId(info.applicationInfo.uid);
@@ -369,13 +370,13 @@
lastTaskDescription = _taskDescription;
touchActiveTime();
- mService.mActivityTaskManager.getTaskChangeNotificationController().notifyTaskCreated(_taskId, realActivity);
+ mService.getTaskChangeNotificationController().notifyTaskCreated(_taskId, realActivity);
}
/**
* Don't use constructor directly. This is only used by XML parser.
*/
- TaskRecord(ActivityManagerService service, int _taskId, Intent _intent,
+ TaskRecord(ActivityTaskManagerService service, int _taskId, Intent _intent,
Intent _affinityIntent, String _affinity, String _rootAffinity,
ComponentName _realActivity, ComponentName _origActivity, boolean _rootWasReset,
boolean _autoRemoveRecents, boolean _askedCompatMode, int _userId,
@@ -419,7 +420,7 @@
mSupportsPictureInPicture = supportsPictureInPicture;
mMinWidth = minWidth;
mMinHeight = minHeight;
- mService.mActivityTaskManager.getTaskChangeNotificationController().notifyTaskCreated(_taskId, realActivity);
+ mService.getTaskChangeNotificationController().notifyTaskCreated(_taskId, realActivity);
}
TaskWindowContainerController getWindowContainerController() {
@@ -460,13 +461,13 @@
// default configuration the next time it launches.
updateOverrideConfiguration(null);
}
- mService.mActivityTaskManager.getTaskChangeNotificationController().notifyTaskRemoved(taskId);
+ mService.getTaskChangeNotificationController().notifyTaskRemoved(taskId);
mWindowContainerController = null;
}
@Override
public void onSnapshotChanged(TaskSnapshot snapshot) {
- mService.mActivityTaskManager.getTaskChangeNotificationController().notifyTaskSnapshotChanged(taskId, snapshot);
+ mService.getTaskChangeNotificationController().notifyTaskSnapshotChanged(taskId, snapshot);
}
void setResizeMode(int resizeMode) {
@@ -486,7 +487,7 @@
// TODO: Consolidate this with the resize() method below.
@Override
public void requestResize(Rect bounds, int resizeMode) {
- mService.mActivityTaskManager.resizeTask(taskId, bounds, resizeMode);
+ mService.resizeTask(taskId, bounds, resizeMode);
}
boolean resize(Rect bounds, int resizeMode, boolean preserveWindow, boolean deferResume) {
@@ -1302,7 +1303,7 @@
// We normally notify listeners of task stack changes on pause, however pinned stack
// activities are normally in the paused state so no notification will be sent there
// before the activity is removed. We send it here so instead.
- mService.mActivityTaskManager.getTaskChangeNotificationController().notifyTaskStackChanged();
+ mService.getTaskChangeNotificationController().notifyTaskStackChanged();
}
if (mActivities.isEmpty()) {
@@ -1493,7 +1494,7 @@
}
private boolean isResizeable(boolean checkSupportsPip) {
- return (mService.mForceResizableActivities || ActivityInfo.isResizeableMode(mResizeMode)
+ return (mService.mAm.mForceResizableActivities || ActivityInfo.isResizeableMode(mResizeMode)
|| (checkSupportsPip && mSupportsPictureInPicture));
}
@@ -1506,8 +1507,8 @@
// A task can not be docked even if it is considered resizeable because it only supports
// picture-in-picture mode but has a non-resizeable resizeMode
return super.supportsSplitScreenWindowingMode()
- && mService.mSupportsSplitScreenMultiWindow
- && (mService.mForceResizableActivities
+ && mService.mAm.mSupportsSplitScreenMultiWindow
+ && (mService.mAm.mForceResizableActivities
|| (isResizeable(false /* checkSupportsPip */)
&& !ActivityInfo.isPreserveOrientationMode(mResizeMode)));
}
@@ -2205,14 +2206,14 @@
sTaskRecordFactory = factory;
}
- static TaskRecord create(ActivityManagerService service, int taskId, ActivityInfo info,
+ static TaskRecord create(ActivityTaskManagerService service, int taskId, ActivityInfo info,
Intent intent, IVoiceInteractionSession voiceSession,
IVoiceInteractor voiceInteractor) {
return getTaskRecordFactory().create(
service, taskId, info, intent, voiceSession, voiceInteractor);
}
- static TaskRecord create(ActivityManagerService service, int taskId, ActivityInfo info,
+ static TaskRecord create(ActivityTaskManagerService service, int taskId, ActivityInfo info,
Intent intent, TaskDescription taskDescription) {
return getTaskRecordFactory().create(service, taskId, info, intent, taskDescription);
}
@@ -2229,14 +2230,14 @@
*/
static class TaskRecordFactory {
- TaskRecord create(ActivityManagerService service, int taskId, ActivityInfo info,
+ TaskRecord create(ActivityTaskManagerService service, int taskId, ActivityInfo info,
Intent intent, IVoiceInteractionSession voiceSession,
IVoiceInteractor voiceInteractor) {
return new TaskRecord(
service, taskId, info, intent, voiceSession, voiceInteractor);
}
- TaskRecord create(ActivityManagerService service, int taskId, ActivityInfo info,
+ TaskRecord create(ActivityTaskManagerService service, int taskId, ActivityInfo info,
Intent intent, TaskDescription taskDescription) {
return new TaskRecord(service, taskId, info, intent, taskDescription);
}
@@ -2244,7 +2245,7 @@
/**
* Should only be used when we're restoring {@link TaskRecord} from storage.
*/
- TaskRecord create(ActivityManagerService service, int taskId, Intent intent,
+ TaskRecord create(ActivityTaskManagerService service, int taskId, Intent intent,
Intent affinityIntent, String affinity, String rootAffinity,
ComponentName realActivity, ComponentName origActivity, boolean rootWasReset,
boolean autoRemoveRecents, boolean askedCompatMode, int userId,
@@ -2468,7 +2469,8 @@
}
}
- final TaskRecord task = create(stackSupervisor.mService, taskId, intent, affinityIntent,
+ final TaskRecord task = create(stackSupervisor.mService.mActivityTaskManager,
+ taskId, intent, affinityIntent,
affinity, rootAffinity, realActivity, origActivity, rootHasReset,
autoRemoveRecents, askedCompatMode, userId, effectiveUid, lastDescription,
activities, lastTimeOnTop, neverRelinquishIdentity, taskDescription,
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 2fbe56b..b500bbf 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -2248,7 +2248,7 @@
protected void clearAllLockedTasks(String reason) {
synchronized (mService) {
- mService.getLockTaskController().clearLockedTasks(reason);
+ mService.mActivityTaskManager.getLockTaskController().clearLockedTasks(reason);
}
}