Merge "Fix update logic for multi backend"
This commit is contained in:
@@ -684,6 +684,16 @@ public abstract class AbstractMasterSystemService<M extends AbstractMasterSystem
|
||||
*/
|
||||
@GuardedBy("mLock")
|
||||
protected List<S> updateCachedServiceListLocked(@UserIdInt int userId, boolean disabled) {
|
||||
if (mServiceNameResolver != null
|
||||
&& mServiceNameResolver.isConfiguredInMultipleMode()) {
|
||||
// In multiple mode, we have multiple instances of AbstractPerUserSystemService, per
|
||||
// user where each instance holds information needed to connect to a backend. An
|
||||
// update operation in this mode needs to account for addition, deletion, change
|
||||
// of backends and cannot be executed in the scope of a given
|
||||
// AbstractPerUserSystemService.
|
||||
return updateCachedServiceListMultiModeLocked(userId, disabled);
|
||||
}
|
||||
// isConfiguredInMultipleMode is false
|
||||
final List<S> services = getServiceListForUserLocked(userId);
|
||||
if (services == null) {
|
||||
return null;
|
||||
@@ -704,6 +714,19 @@ public abstract class AbstractMasterSystemService<M extends AbstractMasterSystem
|
||||
return services;
|
||||
}
|
||||
|
||||
@GuardedBy("mLock")
|
||||
private List<S> updateCachedServiceListMultiModeLocked(int userId, boolean disabled) {
|
||||
final int resolvedUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
|
||||
Binder.getCallingUid(), userId, false, false, null,
|
||||
null);
|
||||
List<S> services = new ArrayList<>();
|
||||
synchronized (mLock) {
|
||||
removeCachedServiceListLocked(resolvedUserId);
|
||||
services = getServiceListForUserLocked(userId);
|
||||
}
|
||||
return services;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Settings property that defines the name of the component name used to bind this
|
||||
* service to an external service, or {@code null} when the service is not defined by such
|
||||
|
||||
@@ -154,7 +154,14 @@ public abstract class AbstractPerUserSystemService<S extends AbstractPerUserSyst
|
||||
|
||||
if (mMaster.mServiceNameResolver != null
|
||||
&& mMaster.mServiceNameResolver.isConfiguredInMultipleMode()) {
|
||||
updateServiceInfoListLocked();
|
||||
// Update of multi configured mode should always happen in AbstractMasterSystemService
|
||||
// as this class is not aware of the complete list of multiple backends. Since we
|
||||
// should never end up in this state, it is safe to not do anything if we end up here
|
||||
// through a different code path.
|
||||
if (mMaster.debug) {
|
||||
Slog.d(mTag, "Should not end up in updateLocked when "
|
||||
+ "isConfiguredInMultipleMode is true");
|
||||
}
|
||||
} else {
|
||||
updateServiceInfoLocked();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user