Merge "Fix deadlock when creating new OneTimePermissionUserManager" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
ee35eba00e
@@ -81,9 +81,6 @@ public class OneTimePermissionUserManager {
|
|||||||
mAlarmManager = context.getSystemService(AlarmManager.class);
|
mAlarmManager = context.getSystemService(AlarmManager.class);
|
||||||
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
|
mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class);
|
||||||
mHandler = context.getMainThreadHandler();
|
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);
|
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
|
* A class which watches a package for inactivity and notifies the permission controller when
|
||||||
* the package becomes inactive
|
* the package becomes inactive
|
||||||
|
|||||||
@@ -3210,17 +3210,20 @@ public class PermissionManagerService extends IPermissionManager.Stub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private OneTimePermissionUserManager getOneTimePermissionUserManager(@UserIdInt int userId) {
|
private OneTimePermissionUserManager getOneTimePermissionUserManager(@UserIdInt int userId) {
|
||||||
|
OneTimePermissionUserManager oneTimePermissionUserManager;
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
OneTimePermissionUserManager oneTimePermissionUserManager =
|
oneTimePermissionUserManager =
|
||||||
mOneTimePermissionUserManagers.get(userId);
|
mOneTimePermissionUserManagers.get(userId);
|
||||||
if (oneTimePermissionUserManager == null) {
|
if (oneTimePermissionUserManager != null) {
|
||||||
|
return oneTimePermissionUserManager;
|
||||||
|
}
|
||||||
oneTimePermissionUserManager = new OneTimePermissionUserManager(
|
oneTimePermissionUserManager = new OneTimePermissionUserManager(
|
||||||
mContext.createContextAsUser(UserHandle.of(userId), /*flags*/ 0));
|
mContext.createContextAsUser(UserHandle.of(userId), /*flags*/ 0));
|
||||||
mOneTimePermissionUserManagers.put(userId, oneTimePermissionUserManager);
|
mOneTimePermissionUserManagers.put(userId, oneTimePermissionUserManager);
|
||||||
}
|
}
|
||||||
|
oneTimePermissionUserManager.registerUninstallListener();
|
||||||
return oneTimePermissionUserManager;
|
return oneTimePermissionUserManager;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startOneTimePermissionSession(String packageName, @UserIdInt int userId,
|
public void startOneTimePermissionSession(String packageName, @UserIdInt int userId,
|
||||||
|
|||||||
Reference in New Issue
Block a user