summaryrefslogtreecommitdiff
path: root/services/people
diff options
context:
space:
mode:
authorDanning Chen <danningc@google.com>2020-03-18 21:11:43 -0700
committerDanning Chen <danningc@google.com>2020-03-18 21:11:47 -0700
commit161f57512f3939849fcca684452ba073ab937a79 (patch)
tree9a95b45125782a9e1a1c01d83299fe72c4f8cf05 /services/people
parentaa22f3e07fbe7e91f64ce7b5f9738a9da5f78d53 (diff)
Run PeopleService#onUserStopping on a background thread
Bug: 151481286 Test: atest com.android.server.people.data.DataManagerTest Change-Id: If2b9215597ef280600c8834f414de780e3ef4f0b
Diffstat (limited to 'services/people')
-rw-r--r--services/people/java/com/android/server/people/data/DataManager.java79
1 files changed, 45 insertions, 34 deletions
diff --git a/services/people/java/com/android/server/people/data/DataManager.java b/services/people/java/com/android/server/people/data/DataManager.java
index 7085f96dd31a..ae8d5743668a 100644
--- a/services/people/java/com/android/server/people/data/DataManager.java
+++ b/services/people/java/com/android/server/people/data/DataManager.java
@@ -152,42 +152,12 @@ public class DataManager {
/** This method is called when a user is stopping. */
public void onUserStopping(int userId) {
synchronized (mLock) {
- ContentResolver contentResolver = mContext.getContentResolver();
- if (mUserDataArray.indexOfKey(userId) >= 0) {
- mUserDataArray.get(userId).setUserStopped();
- }
- if (mUsageStatsQueryFutures.indexOfKey(userId) >= 0) {
- mUsageStatsQueryFutures.get(userId).cancel(true);
- }
- if (mBroadcastReceivers.indexOfKey(userId) >= 0) {
- mContext.unregisterReceiver(mBroadcastReceivers.get(userId));
- }
- if (mContactsContentObservers.indexOfKey(userId) >= 0) {
- contentResolver.unregisterContentObserver(mContactsContentObservers.get(userId));
- }
- if (mNotificationListeners.indexOfKey(userId) >= 0) {
- try {
- mNotificationListeners.get(userId).unregisterAsSystemService();
- } catch (RemoteException e) {
- // Should never occur for local calls.
- }
- }
- if (mPackageMonitors.indexOfKey(userId) >= 0) {
- mPackageMonitors.get(userId).unregister();
- }
- if (userId == UserHandle.USER_SYSTEM) {
- if (mCallLogContentObserver != null) {
- contentResolver.unregisterContentObserver(mCallLogContentObserver);
- mCallLogContentObserver = null;
- }
- if (mMmsSmsContentObserver != null) {
- contentResolver.unregisterContentObserver(mMmsSmsContentObserver);
- mCallLogContentObserver = null;
- }
+ UserData userData = mUserDataArray.get(userId);
+ if (userData != null) {
+ userData.setUserStopped();
}
-
- DataMaintenanceService.cancelJob(mContext, userId);
}
+ mScheduledExecutor.execute(() -> cleanupUser(userId));
}
/**
@@ -371,6 +341,47 @@ public class DataManager {
}
}
+ private void cleanupUser(@UserIdInt int userId) {
+ synchronized (mLock) {
+ UserData userData = mUserDataArray.get(userId);
+ if (userData == null || userData.isUnlocked()) {
+ return;
+ }
+ ContentResolver contentResolver = mContext.getContentResolver();
+ if (mUsageStatsQueryFutures.indexOfKey(userId) >= 0) {
+ mUsageStatsQueryFutures.get(userId).cancel(true);
+ }
+ if (mBroadcastReceivers.indexOfKey(userId) >= 0) {
+ mContext.unregisterReceiver(mBroadcastReceivers.get(userId));
+ }
+ if (mContactsContentObservers.indexOfKey(userId) >= 0) {
+ contentResolver.unregisterContentObserver(mContactsContentObservers.get(userId));
+ }
+ if (mNotificationListeners.indexOfKey(userId) >= 0) {
+ try {
+ mNotificationListeners.get(userId).unregisterAsSystemService();
+ } catch (RemoteException e) {
+ // Should never occur for local calls.
+ }
+ }
+ if (mPackageMonitors.indexOfKey(userId) >= 0) {
+ mPackageMonitors.get(userId).unregister();
+ }
+ if (userId == UserHandle.USER_SYSTEM) {
+ if (mCallLogContentObserver != null) {
+ contentResolver.unregisterContentObserver(mCallLogContentObserver);
+ mCallLogContentObserver = null;
+ }
+ if (mMmsSmsContentObserver != null) {
+ contentResolver.unregisterContentObserver(mMmsSmsContentObserver);
+ mCallLogContentObserver = null;
+ }
+ }
+
+ DataMaintenanceService.cancelJob(mContext, userId);
+ }
+ }
+
private int mimeTypeToShareEventType(String mimeType) {
if (mimeType.startsWith("text/")) {
return Event.TYPE_SHARE_TEXT;