Loading services/core/java/com/android/server/infra/AbstractMasterSystemService.java +22 −0 Original line number Diff line number Diff line Loading @@ -684,6 +684,15 @@ public abstract class AbstractMasterSystemService<M extends AbstractMasterSystem */ @GuardedBy("mLock") protected List<S> updateCachedServiceListLocked(@UserIdInt int userId, boolean disabled) { if (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; Loading @@ -704,6 +713,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 Loading services/core/java/com/android/server/infra/AbstractPerUserSystemService.java +10 −18 Original line number Diff line number Diff line Loading @@ -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(); } Loading @@ -166,29 +173,14 @@ public abstract class AbstractPerUserSystemService<S extends AbstractPerUserSyst */ @GuardedBy("mLock") protected final ComponentName updateServiceInfoLocked() { ComponentName[] componentNames = updateServiceInfoListLocked(); return componentNames == null || componentNames.length == 0 ? null : componentNames[0]; } /** * Updates the internal reference to the service info, and returns the service's component. */ @GuardedBy("mLock") protected final ComponentName[] updateServiceInfoListLocked() { if (mMaster.mServiceNameResolver == null) { return null; } if (!mMaster.mServiceNameResolver.isConfiguredInMultipleMode()) { final String componentName = getComponentNameLocked(); return new ComponentName[] { getServiceComponent(componentName) }; return getServiceComponent(componentName); } final String[] componentNames = mMaster.mServiceNameResolver.getServiceNameList( mUserId); ComponentName[] serviceComponents = new ComponentName[componentNames.length]; for (int i = 0; i < componentNames.length; i++) { serviceComponents[i] = getServiceComponent(componentNames[i]); } return serviceComponents; return null; } private ComponentName getServiceComponent(String componentName) { Loading Loading
services/core/java/com/android/server/infra/AbstractMasterSystemService.java +22 −0 Original line number Diff line number Diff line Loading @@ -684,6 +684,15 @@ public abstract class AbstractMasterSystemService<M extends AbstractMasterSystem */ @GuardedBy("mLock") protected List<S> updateCachedServiceListLocked(@UserIdInt int userId, boolean disabled) { if (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; Loading @@ -704,6 +713,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 Loading
services/core/java/com/android/server/infra/AbstractPerUserSystemService.java +10 −18 Original line number Diff line number Diff line Loading @@ -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(); } Loading @@ -166,29 +173,14 @@ public abstract class AbstractPerUserSystemService<S extends AbstractPerUserSyst */ @GuardedBy("mLock") protected final ComponentName updateServiceInfoLocked() { ComponentName[] componentNames = updateServiceInfoListLocked(); return componentNames == null || componentNames.length == 0 ? null : componentNames[0]; } /** * Updates the internal reference to the service info, and returns the service's component. */ @GuardedBy("mLock") protected final ComponentName[] updateServiceInfoListLocked() { if (mMaster.mServiceNameResolver == null) { return null; } if (!mMaster.mServiceNameResolver.isConfiguredInMultipleMode()) { final String componentName = getComponentNameLocked(); return new ComponentName[] { getServiceComponent(componentName) }; return getServiceComponent(componentName); } final String[] componentNames = mMaster.mServiceNameResolver.getServiceNameList( mUserId); ComponentName[] serviceComponents = new ComponentName[componentNames.length]; for (int i = 0; i < componentNames.length; i++) { serviceComponents[i] = getServiceComponent(componentNames[i]); } return serviceComponents; return null; } private ComponentName getServiceComponent(String componentName) { Loading