Merge "Fix deadlock when creating new OneTimePermissionUserManager" into rvc-dev am: ee35eba00e am: b9553dc63e
Change-Id: Ia49c0339602740c2bbdfbb5b6e367cfc35c31cc2
This commit is contained in:
@@ -81,9 +81,6 @@ public class OneTimePermissionUserManager {
|
||||
mAlarmManager = context.getSystemService(AlarmManager.class);
|
||||
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
|
||||
mHandler = context.getMainThreadHandler();
|
||||
|
||||
// Listen for tracked uid being uninstalled
|
||||
context.registerReceiver(mUninstallListener, new IntentFilter(Intent.ACTION_UID_REMOVED));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -170,6 +167,14 @@ public class OneTimePermissionUserManager {
|
||||
PROPERTY_KILLED_DELAY_CONFIG_KEY, DEFAULT_KILLED_DELAY_MILLIS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register to listen for Uids being uninstalled. This must be done outside of the
|
||||
* PermissionManagerService lock.
|
||||
*/
|
||||
void registerUninstallListener() {
|
||||
mContext.registerReceiver(mUninstallListener, new IntentFilter(Intent.ACTION_UID_REMOVED));
|
||||
}
|
||||
|
||||
/**
|
||||
* A class which watches a package for inactivity and notifies the permission controller when
|
||||
* the package becomes inactive
|
||||
|
||||
@@ -3210,16 +3210,19 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
||||
}
|
||||
|
||||
private OneTimePermissionUserManager getOneTimePermissionUserManager(@UserIdInt int userId) {
|
||||
OneTimePermissionUserManager oneTimePermissionUserManager;
|
||||
synchronized (mLock) {
|
||||
OneTimePermissionUserManager oneTimePermissionUserManager =
|
||||
oneTimePermissionUserManager =
|
||||
mOneTimePermissionUserManagers.get(userId);
|
||||
if (oneTimePermissionUserManager == null) {
|
||||
oneTimePermissionUserManager = new OneTimePermissionUserManager(
|
||||
mContext.createContextAsUser(UserHandle.of(userId), /*flags*/ 0));
|
||||
mOneTimePermissionUserManagers.put(userId, oneTimePermissionUserManager);
|
||||
if (oneTimePermissionUserManager != null) {
|
||||
return oneTimePermissionUserManager;
|
||||
}
|
||||
return oneTimePermissionUserManager;
|
||||
oneTimePermissionUserManager = new OneTimePermissionUserManager(
|
||||
mContext.createContextAsUser(UserHandle.of(userId), /*flags*/ 0));
|
||||
mOneTimePermissionUserManagers.put(userId, oneTimePermissionUserManager);
|
||||
}
|
||||
oneTimePermissionUserManager.registerUninstallListener();
|
||||
return oneTimePermissionUserManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user