diff options
-rw-r--r-- | services/people/java/com/android/server/people/data/DataManager.java | 79 |
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; |