Merge changes I84d43fdb,I726037d5
* changes:
Removed references to ATMS.getLockTaskController() from AMS (34/n)
Removed references to ATMS.mHomeProcess and mPreviousProcess from AMS (33/n)
diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl
index b7b6352..fcfcc21 100644
--- a/core/java/android/app/IActivityTaskManager.aidl
+++ b/core/java/android/app/IActivityTaskManager.aidl
@@ -177,6 +177,7 @@
void cancelRecentsAnimation(boolean restoreHomeStackPosition);
void startLockTaskModeByToken(in IBinder token);
void stopLockTaskModeByToken(in IBinder token);
+ void updateLockTaskPackages(int userId, in String[] packages);
boolean isInLockTaskMode();
int getLockTaskModeState();
void setTaskDescription(in IBinder token, in ActivityManager.TaskDescription values);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index b5a054e..b6f4d7f 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -5815,16 +5815,7 @@
@Override
public void updateLockTaskPackages(int userId, String[] packages) {
- final int callingUid = Binder.getCallingUid();
- if (callingUid != 0 && callingUid != SYSTEM_UID) {
- enforceCallingPermission(android.Manifest.permission.UPDATE_LOCK_TASK_PACKAGES,
- "updateLockTaskPackages()");
- }
- synchronized (this) {
- if (DEBUG_LOCKTASK) Slog.w(TAG_LOCKTASK, "Whitelisting " + userId + ":" +
- Arrays.toString(packages));
- mActivityTaskManager.getLockTaskController().updateLockTaskPackages(userId, packages);
- }
+ mActivityTaskManager.updateLockTaskPackages(userId, packages);
}
@Override
@@ -7284,7 +7275,6 @@
mBatteryStatsService.shutdown();
synchronized (this) {
mProcessStats.shutdownLocked();
- mActivityTaskManager.notifyTaskPersisterLocked(null, true);
}
return timedout;
@@ -10384,11 +10374,7 @@
dumpProcessesToGc(pw, needSep, null);
pw.println();
- pw.println(" mHomeProcess: " + mActivityTaskManager.mHomeProcess);
- pw.println(" mPreviousProcess: " + mActivityTaskManager.mPreviousProcess);
- if (mActivityTaskManager.mHeavyWeightProcess != null) {
- pw.println(" mHeavyWeightProcess: " + mActivityTaskManager.mHeavyWeightProcess);
- }
+ mAtmInternal.dumpForOom(pw);
return true;
}
@@ -15442,7 +15428,7 @@
}
}
- if (wpc == mActivityTaskManager.mHomeProcess) {
+ if (wpc.isHomeProcess()) {
if (adj > ProcessList.HOME_APP_ADJ) {
// This process is hosting what we currently consider to be the
// home app, so we don't want to let it go into the background.
@@ -15463,7 +15449,7 @@
}
}
- if (wpc == mActivityTaskManager.mPreviousProcess && app.hasActivities()) {
+ if (wpc.isPreviousProcess() && app.hasActivities()) {
if (adj > ProcessList.PREVIOUS_APP_ADJ) {
// This was the previous process that showed UI to the user.
// We want to try to keep it around more aggressively, to give
@@ -15540,7 +15526,7 @@
"Raise procstate to started service: " + app);
}
}
- if (app.hasShownUi && wpc != mActivityTaskManager.mHomeProcess) {
+ if (app.hasShownUi && !wpc.isHomeProcess()) {
// If this process has shown some UI, let it immediately
// go to the LRU list because it may be pretty heavy with
// UI stuff. We'll tag it with a label just to help
@@ -15619,7 +15605,7 @@
if ((cr.flags&Context.BIND_ALLOW_OOM_MANAGEMENT) != 0) {
// Not doing bind OOM management, so treat
// this guy more like a started service.
- if (app.hasShownUi && wpc != mActivityTaskManager.mHomeProcess) {
+ if (app.hasShownUi && !wpc.isHomeProcess()) {
// If this process has shown some UI, let it immediately
// go to the LRU list because it may be pretty heavy with
// UI stuff. We'll tag it with a label just to help
@@ -15652,7 +15638,7 @@
// about letting this process get into the LRU
// list to be killed and restarted if needed for
// memory.
- if (app.hasShownUi && wpc != mActivityTaskManager.mHomeProcess
+ if (app.hasShownUi && !wpc.isHomeProcess()
&& clientAdj > ProcessList.PERCEPTIBLE_APP_ADJ) {
if (adj >= ProcessList.CACHED_APP_MIN_ADJ) {
adjType = "cch-bound-ui-services";
@@ -15858,7 +15844,7 @@
}
String adjType = null;
if (adj > clientAdj) {
- if (app.hasShownUi && wpc != mActivityTaskManager.mHomeProcess
+ if (app.hasShownUi && !wpc.isHomeProcess()
&& clientAdj > ProcessList.PERCEPTIBLE_APP_ADJ) {
adjType = "cch-ui-provider";
} else {
@@ -17349,8 +17335,8 @@
}
int factor = numTrimming/3;
int minFactor = 2;
- if (mActivityTaskManager.mHomeProcess != null) minFactor++;
- if (mActivityTaskManager.mPreviousProcess != null) minFactor++;
+ if (mAtmInternal.getHomeProcess() != null) minFactor++;
+ if (mAtmInternal.getPreviousProcess() != null) minFactor++;
if (factor < minFactor) factor = minFactor;
int curLevel = ComponentCallbacks2.TRIM_MEMORY_COMPLETE;
for (int i=N-1; i>=0; i--) {
diff --git a/services/core/java/com/android/server/am/ActivityTaskManagerService.java b/services/core/java/com/android/server/am/ActivityTaskManagerService.java
index 0c8716c..4ae9856 100644
--- a/services/core/java/com/android/server/am/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityTaskManagerService.java
@@ -273,6 +273,7 @@
import java.lang.ref.WeakReference;
import java.text.DateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@@ -2512,6 +2513,20 @@
}
@Override
+ public void updateLockTaskPackages(int userId, String[] packages) {
+ final int callingUid = Binder.getCallingUid();
+ if (callingUid != 0 && callingUid != SYSTEM_UID) {
+ mAmInternal.enforceCallingPermission(Manifest.permission.UPDATE_LOCK_TASK_PACKAGES,
+ "updateLockTaskPackages()");
+ }
+ synchronized (this) {
+ if (DEBUG_LOCKTASK) Slog.w(TAG_LOCKTASK, "Whitelisting " + userId + ":"
+ + Arrays.toString(packages));
+ getLockTaskController().updateLockTaskPackages(userId, packages);
+ }
+ }
+
+ @Override
public boolean isInLockTaskMode() {
return getLockTaskModeState() != LOCK_TASK_MODE_NONE;
}
@@ -4613,17 +4628,6 @@
}
}
- void updateUserConfiguration() {
- synchronized (mGlobalLock) {
- final Configuration configuration = new Configuration(getGlobalConfiguration());
- final int currentUserId = mAmInternal.getCurrentUserId();
- Settings.System.adjustConfigurationForUser(mContext.getContentResolver(), configuration,
- currentUserId, Settings.System.canWrite(mContext));
- updateConfigurationLocked(configuration, null /* starting */, false /* initLocale */,
- false /* persistent */, currentUserId, false /* deferResume */);
- }
- }
-
private boolean updateConfigurationLocked(Configuration values, ActivityRecord starting,
boolean initLocale, boolean persistent, int userId, boolean deferResume) {
return updateConfigurationLocked(values, starting, initLocale, persistent, userId,
@@ -5904,6 +5908,7 @@
mShuttingDown = true;
mStackSupervisor.prepareForShutdownLocked();
updateEventDispatchingLocked(booted);
+ notifyTaskPersisterLocked(null, true);
return mStackSupervisor.shutdownLocked(timeout);
}
}
@@ -6584,6 +6589,17 @@
}
@Override
+ public void dumpForOom(PrintWriter pw) {
+ synchronized (mGlobalLock) {
+ pw.println(" mHomeProcess: " + mHomeProcess);
+ pw.println(" mPreviousProcess: " + mPreviousProcess);
+ if (mHeavyWeightProcess != null) {
+ pw.println(" mHeavyWeightProcess: " + mHeavyWeightProcess);
+ }
+ }
+ }
+
+ @Override
public boolean canGcNow() {
synchronized (mGlobalLock) {
return isSleeping() || mStackSupervisor.allResumedActivitiesIdle();
@@ -6741,5 +6757,39 @@
public void flushRecentTasks() {
mRecentTasks.flush();
}
+
+ @Override
+ public WindowProcessController getHomeProcess() {
+ synchronized (mGlobalLock) {
+ return mHomeProcess;
+ }
+ }
+
+ @Override
+ public WindowProcessController getPreviousProcess() {
+ synchronized (mGlobalLock) {
+ return mPreviousProcess;
+ }
+ }
+
+ @Override
+ public void clearLockedTasks(String reason) {
+ synchronized (mGlobalLock) {
+ getLockTaskController().clearLockedTasks(reason);
+ }
+ }
+
+ @Override
+ public void updateUserConfiguration() {
+ synchronized (mGlobalLock) {
+ final Configuration configuration = new Configuration(getGlobalConfiguration());
+ final int currentUserId = mAmInternal.getCurrentUserId();
+ Settings.System.adjustConfigurationForUser(mContext.getContentResolver(),
+ configuration, currentUserId, Settings.System.canWrite(mContext));
+ updateConfigurationLocked(configuration, null /* starting */,
+ false /* initLocale */, false /* persistent */, currentUserId,
+ false /* deferResume */);
+ }
+ }
}
}
diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java
index 0b8b74d..dee59cc 100644
--- a/services/core/java/com/android/server/am/AppErrors.java
+++ b/services/core/java/com/android/server/am/AppErrors.java
@@ -730,7 +730,7 @@
// with a home activity running in the process to prevent a repeatedly crashing app
// from blocking the user to manually clear the list.
final WindowProcessController proc = app.getWindowProcessController();
- final WindowProcessController homeProc = mService.mActivityTaskManager.mHomeProcess;
+ final WindowProcessController homeProc = mService.mAtmInternal.getHomeProcess();
if (proc == homeProc && proc.hasActivities()
&& (homeProc.mInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
proc.clearPackagePreferredForHomeActivities();
diff --git a/services/core/java/com/android/server/am/LockTaskController.java b/services/core/java/com/android/server/am/LockTaskController.java
index 5b31d5f..d5f2d34 100644
--- a/services/core/java/com/android/server/am/LockTaskController.java
+++ b/services/core/java/com/android/server/am/LockTaskController.java
@@ -78,7 +78,8 @@
* mode that can be launched via System UI as well as the fully locked mode that can be achieved
* on fully managed devices.
*
- * Note: All methods in this class should only be called with the ActivityManagerService lock held.
+ * Note: All methods in this class should only be called with the ActivityTaskManagerService lock
+ * held.
*
* @see Activity#startLockTask()
* @see Activity#stopLockTask()
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index decb194..81f853d 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -2189,7 +2189,7 @@
}
void updateUserConfiguration() {
- mService.mActivityTaskManager.updateUserConfiguration();
+ mService.mAtmInternal.updateUserConfiguration();
}
void clearBroadcastQueueForUser(int userId) {
@@ -2199,9 +2199,7 @@
}
void loadUserRecents(int userId) {
- synchronized (mService) {
- mService.mAtmInternal.loadRecentTasksForUser(userId);
- }
+ mService.mAtmInternal.loadRecentTasksForUser(userId);
}
void startPersistentApps(int matchFlags) {
@@ -2254,9 +2252,7 @@
}
protected void clearAllLockedTasks(String reason) {
- synchronized (mService) {
- mService.mActivityTaskManager.getLockTaskController().clearLockedTasks(reason);
- }
+ mService.mAtmInternal.clearLockedTasks(reason);
}
protected boolean isCallerRecents(int callingUid) {
diff --git a/services/core/java/com/android/server/am/WindowProcessController.java b/services/core/java/com/android/server/am/WindowProcessController.java
index 7e66d50..32d19aa 100644
--- a/services/core/java/com/android/server/am/WindowProcessController.java
+++ b/services/core/java/com/android/server/am/WindowProcessController.java
@@ -860,6 +860,18 @@
}
}
+ public boolean isHomeProcess() {
+ synchronized (mAtm.mGlobalLock) {
+ return this == mAtm.mHomeProcess;
+ }
+ }
+
+ public boolean isPreviousProcess() {
+ synchronized (mAtm.mGlobalLock) {
+ return this == mAtm.mPreviousProcess;
+ }
+ }
+
public void dump(PrintWriter pw, String prefix) {
synchronized (mAtm.mGlobalLock) {
if (mActivities.size() > 0) {
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
index b017d14..d652d95 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
@@ -410,6 +410,9 @@
String[] args, int opti, boolean dumpAll, boolean dumpVisibleStacksOnly,
boolean dumpFocusedStackOnly);
+ /** Dump the current state for inclusion in oom dump. */
+ public abstract void dumpForOom(PrintWriter pw);
+
/** @return true if it the activity management system is okay with GC running now. */
public abstract boolean canGcNow();
@@ -460,4 +463,10 @@
int userId);
/** Flush recent tasks to disk. */
public abstract void flushRecentTasks();
+
+ public abstract WindowProcessController getHomeProcess();
+ public abstract WindowProcessController getPreviousProcess();
+
+ public abstract void clearLockedTasks(String reason);
+ public abstract void updateUserConfiguration();
}
diff --git a/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java b/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java
index 1c4e0f6..4beebc4 100644
--- a/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/PendingRemoteAnimationRegistryTest.java
@@ -50,17 +50,17 @@
private PendingRemoteAnimationRegistry mRegistry;
private final OffsettableClock mClock = new OffsettableClock.Stopped();
private TestHandler mHandler;
- private ActivityManagerService mService;
+ private ActivityTaskManagerService mService;
@Before
public void setUp() throws Exception {
super.setUp();
MockitoAnnotations.initMocks(this);
- mService = createActivityManagerService();
- mService.mHandlerThread.getThreadHandler().runWithScissors(() -> {
+ mService = createActivityTaskManagerService();
+ mService.mH.runWithScissors(() -> {
mHandler = new TestHandler(null, mClock);
}, 0);
- mRegistry = new PendingRemoteAnimationRegistry(mService.mActivityTaskManager, mHandler);
+ mRegistry = new PendingRemoteAnimationRegistry(mService, mHandler);
}
@Test