Loading services/credentials/java/com/android/server/credentials/CredentialManagerService.java +14 −12 Original line number Original line Diff line number Diff line Loading @@ -112,8 +112,9 @@ public final class CredentialManagerService continue; continue; } } try { try { serviceList.add( serviceList.add(new CredentialManagerServiceImpl(this, mLock, new CredentialManagerServiceImpl(this, mLock, resolvedUserId, serviceName)); resolvedUserId, serviceName)); } catch (PackageManager.NameNotFoundException | SecurityException e) { } catch (PackageManager.NameNotFoundException | SecurityException e) { Log.i(TAG, "Unable to add serviceInfo : " + e.getMessage()); Log.i(TAG, "Unable to add serviceInfo : " + e.getMessage()); } } Loading @@ -137,15 +138,16 @@ public final class CredentialManagerService } } } } @SuppressWarnings("GuardedBy") // ErrorProne requires initiateProviderSessionForRequestLocked // to be guarded by 'service.mLock', which is the same as mLock. private List<ProviderSession> initiateProviderSessions( private List<ProviderSession> initiateProviderSessions( RequestSession session, List<String> requestOptions) { RequestSession session, List<String> requestOptions) { List<ProviderSession> providerSessions = new ArrayList<>(); List<ProviderSession> providerSessions = new ArrayList<>(); // Invoke all services of a user to initiate a provider session // Invoke all services of a user to initiate a provider session runForUser( runForUser((service) -> { (service) -> { synchronized (mLock) { if (service.isServiceCapable(requestOptions)) { ProviderSession providerSession = service ProviderSession providerSession = .initiateProviderSessionForRequestLocked(session, requestOptions); service.initiateProviderSessionForRequest(session); if (providerSession != null) { if (providerSession != null) { providerSessions.add(providerSession); providerSessions.add(providerSession); } } Loading services/credentials/java/com/android/server/credentials/CredentialManagerServiceImpl.java +26 −11 Original line number Original line Diff line number Diff line Loading @@ -22,8 +22,10 @@ import android.content.ComponentName; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.content.pm.ServiceInfo; import android.service.credentials.CredentialProviderInfo; import android.service.credentials.CredentialProviderInfo; import android.util.Log; import android.util.Slog; import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.server.infra.AbstractPerUserSystemService; import com.android.server.infra.AbstractPerUserSystemService; import java.util.List; import java.util.List; Loading @@ -37,26 +39,33 @@ public final class CredentialManagerServiceImpl extends private static final String TAG = "CredManSysServiceImpl"; private static final String TAG = "CredManSysServiceImpl"; // TODO(b/210531) : Make final when update flow is fixed // TODO(b/210531) : Make final when update flow is fixed private ComponentName mRemoteServiceComponentName; @GuardedBy("mLock") private CredentialProviderInfo mInfo; private CredentialProviderInfo mInfo; public CredentialManagerServiceImpl( CredentialManagerServiceImpl( @NonNull CredentialManagerService master, @NonNull CredentialManagerService master, @NonNull Object lock, int userId, String serviceName) @NonNull Object lock, int userId, String serviceName) throws PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException { super(master, lock, userId); super(master, lock, userId); Slog.i(TAG, "in CredentialManagerServiceImpl cons"); Log.i(TAG, "in CredentialManagerServiceImpl constructed with: " + serviceName); // TODO : Replace with newServiceInfoLocked after confirming behavior synchronized (mLock) { mRemoteServiceComponentName = ComponentName.unflattenFromString(serviceName); newServiceInfoLocked(ComponentName.unflattenFromString(serviceName)); mInfo = new CredentialProviderInfo(getContext(), mRemoteServiceComponentName, mUserId); } } } @Override // from PerUserSystemService @Override // from PerUserSystemService @GuardedBy("mLock") protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent) protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent) throws PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException { // TODO : Test update flows with multiple providers // TODO : Test update flows with multiple providers Slog.i(TAG , "newServiceInfoLocked with : " + serviceComponent.getPackageName()); if (mInfo != null) { mRemoteServiceComponentName = serviceComponent; Log.i(TAG, "newServiceInfoLocked with : " + mInfo.getServiceInfo().getComponentName().flattenToString() + " , " + serviceComponent.getPackageName()); } else { Log.i(TAG, "newServiceInfoLocked with null mInfo , " + serviceComponent.getPackageName()); } mInfo = new CredentialProviderInfo(getContext(), serviceComponent, mUserId); mInfo = new CredentialProviderInfo(getContext(), serviceComponent, mUserId); return mInfo.getServiceInfo(); return mInfo.getServiceInfo(); } } Loading @@ -64,8 +73,13 @@ public final class CredentialManagerServiceImpl extends /** /** * Starts a provider session and associates it with the given request session. */ * Starts a provider session and associates it with the given request session. */ @Nullable @Nullable public ProviderSession initiateProviderSessionForRequest( @GuardedBy("mLock") RequestSession requestSession) { public ProviderSession initiateProviderSessionForRequestLocked( RequestSession requestSession, List<String> requestOptions) { if (!isServiceCapableLocked(requestOptions)) { Log.i(TAG, "Service is not capable"); return null; } Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl"); Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl"); if (mInfo == null) { if (mInfo == null) { Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl, " Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl, " Loading @@ -80,7 +94,8 @@ public final class CredentialManagerServiceImpl extends } } /** Return true if at least one capability found. */ /** Return true if at least one capability found. */ boolean isServiceCapable(List<String> requestedOptions) { @GuardedBy("mLock") boolean isServiceCapableLocked(List<String> requestedOptions) { if (mInfo == null) { if (mInfo == null) { Slog.i(TAG, "in isServiceCapable, mInfo is null"); Slog.i(TAG, "in isServiceCapable, mInfo is null"); return false; return false; Loading Loading
services/credentials/java/com/android/server/credentials/CredentialManagerService.java +14 −12 Original line number Original line Diff line number Diff line Loading @@ -112,8 +112,9 @@ public final class CredentialManagerService continue; continue; } } try { try { serviceList.add( serviceList.add(new CredentialManagerServiceImpl(this, mLock, new CredentialManagerServiceImpl(this, mLock, resolvedUserId, serviceName)); resolvedUserId, serviceName)); } catch (PackageManager.NameNotFoundException | SecurityException e) { } catch (PackageManager.NameNotFoundException | SecurityException e) { Log.i(TAG, "Unable to add serviceInfo : " + e.getMessage()); Log.i(TAG, "Unable to add serviceInfo : " + e.getMessage()); } } Loading @@ -137,15 +138,16 @@ public final class CredentialManagerService } } } } @SuppressWarnings("GuardedBy") // ErrorProne requires initiateProviderSessionForRequestLocked // to be guarded by 'service.mLock', which is the same as mLock. private List<ProviderSession> initiateProviderSessions( private List<ProviderSession> initiateProviderSessions( RequestSession session, List<String> requestOptions) { RequestSession session, List<String> requestOptions) { List<ProviderSession> providerSessions = new ArrayList<>(); List<ProviderSession> providerSessions = new ArrayList<>(); // Invoke all services of a user to initiate a provider session // Invoke all services of a user to initiate a provider session runForUser( runForUser((service) -> { (service) -> { synchronized (mLock) { if (service.isServiceCapable(requestOptions)) { ProviderSession providerSession = service ProviderSession providerSession = .initiateProviderSessionForRequestLocked(session, requestOptions); service.initiateProviderSessionForRequest(session); if (providerSession != null) { if (providerSession != null) { providerSessions.add(providerSession); providerSessions.add(providerSession); } } Loading
services/credentials/java/com/android/server/credentials/CredentialManagerServiceImpl.java +26 −11 Original line number Original line Diff line number Diff line Loading @@ -22,8 +22,10 @@ import android.content.ComponentName; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.content.pm.ServiceInfo; import android.service.credentials.CredentialProviderInfo; import android.service.credentials.CredentialProviderInfo; import android.util.Log; import android.util.Slog; import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.server.infra.AbstractPerUserSystemService; import com.android.server.infra.AbstractPerUserSystemService; import java.util.List; import java.util.List; Loading @@ -37,26 +39,33 @@ public final class CredentialManagerServiceImpl extends private static final String TAG = "CredManSysServiceImpl"; private static final String TAG = "CredManSysServiceImpl"; // TODO(b/210531) : Make final when update flow is fixed // TODO(b/210531) : Make final when update flow is fixed private ComponentName mRemoteServiceComponentName; @GuardedBy("mLock") private CredentialProviderInfo mInfo; private CredentialProviderInfo mInfo; public CredentialManagerServiceImpl( CredentialManagerServiceImpl( @NonNull CredentialManagerService master, @NonNull CredentialManagerService master, @NonNull Object lock, int userId, String serviceName) @NonNull Object lock, int userId, String serviceName) throws PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException { super(master, lock, userId); super(master, lock, userId); Slog.i(TAG, "in CredentialManagerServiceImpl cons"); Log.i(TAG, "in CredentialManagerServiceImpl constructed with: " + serviceName); // TODO : Replace with newServiceInfoLocked after confirming behavior synchronized (mLock) { mRemoteServiceComponentName = ComponentName.unflattenFromString(serviceName); newServiceInfoLocked(ComponentName.unflattenFromString(serviceName)); mInfo = new CredentialProviderInfo(getContext(), mRemoteServiceComponentName, mUserId); } } } @Override // from PerUserSystemService @Override // from PerUserSystemService @GuardedBy("mLock") protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent) protected ServiceInfo newServiceInfoLocked(@NonNull ComponentName serviceComponent) throws PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException { // TODO : Test update flows with multiple providers // TODO : Test update flows with multiple providers Slog.i(TAG , "newServiceInfoLocked with : " + serviceComponent.getPackageName()); if (mInfo != null) { mRemoteServiceComponentName = serviceComponent; Log.i(TAG, "newServiceInfoLocked with : " + mInfo.getServiceInfo().getComponentName().flattenToString() + " , " + serviceComponent.getPackageName()); } else { Log.i(TAG, "newServiceInfoLocked with null mInfo , " + serviceComponent.getPackageName()); } mInfo = new CredentialProviderInfo(getContext(), serviceComponent, mUserId); mInfo = new CredentialProviderInfo(getContext(), serviceComponent, mUserId); return mInfo.getServiceInfo(); return mInfo.getServiceInfo(); } } Loading @@ -64,8 +73,13 @@ public final class CredentialManagerServiceImpl extends /** /** * Starts a provider session and associates it with the given request session. */ * Starts a provider session and associates it with the given request session. */ @Nullable @Nullable public ProviderSession initiateProviderSessionForRequest( @GuardedBy("mLock") RequestSession requestSession) { public ProviderSession initiateProviderSessionForRequestLocked( RequestSession requestSession, List<String> requestOptions) { if (!isServiceCapableLocked(requestOptions)) { Log.i(TAG, "Service is not capable"); return null; } Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl"); Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl"); if (mInfo == null) { if (mInfo == null) { Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl, " Slog.i(TAG, "in initiateProviderSessionForRequest in CredManServiceImpl, " Loading @@ -80,7 +94,8 @@ public final class CredentialManagerServiceImpl extends } } /** Return true if at least one capability found. */ /** Return true if at least one capability found. */ boolean isServiceCapable(List<String> requestedOptions) { @GuardedBy("mLock") boolean isServiceCapableLocked(List<String> requestedOptions) { if (mInfo == null) { if (mInfo == null) { Slog.i(TAG, "in isServiceCapable, mInfo is null"); Slog.i(TAG, "in isServiceCapable, mInfo is null"); return false; return false; Loading