diff --git a/core/api/current.txt b/core/api/current.txt index d4c461cd93846..e83214cae96db 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -13018,8 +13018,8 @@ package android.credentials { public final class CredentialManager { method public void clearCredentialState(@NonNull android.credentials.ClearCredentialStateRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); - method public void executeCreateCredential(@NonNull android.credentials.CreateCredentialRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); - method public void executeGetCredential(@NonNull android.credentials.GetCredentialRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method public void executeCreateCredential(@NonNull android.credentials.CreateCredentialRequest, @NonNull android.app.Activity, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method public void executeGetCredential(@NonNull android.credentials.GetCredentialRequest, @NonNull android.app.Activity, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); } public class CredentialManagerException extends java.lang.Exception { diff --git a/core/java/android/credentials/CredentialManager.java b/core/java/android/credentials/CredentialManager.java index f9973a24b35f4..1efac6c2f332a 100644 --- a/core/java/android/credentials/CredentialManager.java +++ b/core/java/android/credentials/CredentialManager.java @@ -22,6 +22,7 @@ import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemService; +import android.app.Activity; import android.app.PendingIntent; import android.content.Context; import android.content.IntentSender; @@ -65,17 +66,20 @@ public final class CredentialManager { * credential, display a picker when multiple credentials exist, etc. * * @param request the request specifying type(s) of credentials to get from the user + * @param activity the activity used to launch any UI needed * @param cancellationSignal an optional signal that allows for cancelling this call * @param executor the callback will take place on this {@link Executor} * @param callback the callback invoked when the request succeeds or fails */ public void executeGetCredential( @NonNull GetCredentialRequest request, + @NonNull Activity activity, @Nullable CancellationSignal cancellationSignal, @CallbackExecutor @NonNull Executor executor, @NonNull OutcomeReceiver< GetCredentialResponse, CredentialManagerException> callback) { requireNonNull(request, "request must not be null"); + requireNonNull(activity, "activity must not be null"); requireNonNull(executor, "executor must not be null"); requireNonNull(callback, "callback must not be null"); @@ -88,8 +92,7 @@ public final class CredentialManager { try { cancelRemote = mService.executeGetCredential( request, - // TODO: use a real activity instead of context. - new GetCredentialTransport(mContext, executor, callback), + new GetCredentialTransport(activity, executor, callback), mContext.getOpPackageName()); } catch (RemoteException e) { e.rethrowFromSystemServer(); @@ -107,17 +110,20 @@ public final class CredentialManager { * or storing the new credential, etc. * * @param request the request specifying type(s) of credentials to get from the user + * @param activity the activity used to launch any UI needed * @param cancellationSignal an optional signal that allows for cancelling this call * @param executor the callback will take place on this {@link Executor} * @param callback the callback invoked when the request succeeds or fails */ public void executeCreateCredential( @NonNull CreateCredentialRequest request, + @NonNull Activity activity, @Nullable CancellationSignal cancellationSignal, @CallbackExecutor @NonNull Executor executor, @NonNull OutcomeReceiver< CreateCredentialResponse, CredentialManagerException> callback) { requireNonNull(request, "request must not be null"); + requireNonNull(activity, "activity must not be null"); requireNonNull(executor, "executor must not be null"); requireNonNull(callback, "callback must not be null"); @@ -129,8 +135,7 @@ public final class CredentialManager { ICancellationSignal cancelRemote = null; try { cancelRemote = mService.executeCreateCredential(request, - // TODO: use a real activity instead of context. - new CreateCredentialTransport(mContext, executor, callback), + new CreateCredentialTransport(activity, executor, callback), mContext.getOpPackageName()); } catch (RemoteException e) { e.rethrowFromSystemServer(); @@ -188,14 +193,14 @@ public final class CredentialManager { private static class GetCredentialTransport extends IGetCredentialCallback.Stub { // TODO: listen for cancellation to release callback. - private final Context mActivityContext; + private final Activity mActivity; private final Executor mExecutor; private final OutcomeReceiver< GetCredentialResponse, CredentialManagerException> mCallback; - private GetCredentialTransport(Context activityContext, Executor executor, + private GetCredentialTransport(Activity activity, Executor executor, OutcomeReceiver callback) { - mActivityContext = activityContext; + mActivity = activity; mExecutor = executor; mCallback = callback; } @@ -203,7 +208,7 @@ public final class CredentialManager { @Override public void onPendingIntent(PendingIntent pendingIntent) { try { - mActivityContext.startIntentSender(pendingIntent.getIntentSender(), null, 0, 0, 0); + mActivity.startIntentSender(pendingIntent.getIntentSender(), null, 0, 0, 0); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "startIntentSender() failed for intent:" + pendingIntent.getIntentSender(), e); @@ -226,14 +231,14 @@ public final class CredentialManager { private static class CreateCredentialTransport extends ICreateCredentialCallback.Stub { // TODO: listen for cancellation to release callback. - private final Context mActivityContext; + private final Activity mActivity; private final Executor mExecutor; private final OutcomeReceiver< CreateCredentialResponse, CredentialManagerException> mCallback; - private CreateCredentialTransport(Context activityContext, Executor executor, + private CreateCredentialTransport(Activity activity, Executor executor, OutcomeReceiver callback) { - mActivityContext = activityContext; + mActivity = activity; mExecutor = executor; mCallback = callback; } @@ -241,7 +246,7 @@ public final class CredentialManager { @Override public void onPendingIntent(PendingIntent pendingIntent) { try { - mActivityContext.startIntentSender(pendingIntent.getIntentSender(), null, 0, 0, 0); + mActivity.startIntentSender(pendingIntent.getIntentSender(), null, 0, 0, 0); } catch (IntentSender.SendIntentException e) { Log.e(TAG, "startIntentSender() failed for intent:" + pendingIntent.getIntentSender(), e);