diff options
| author | 2022-11-21 16:48:05 +0000 | |
|---|---|---|
| committer | 2022-11-21 16:48:05 +0000 | |
| commit | 024ceef290a63587a2de6dfbf79a44dedefe7582 (patch) | |
| tree | ecf5afc65ab984ce0266e424d54a19d0ec37e1b6 | |
| parent | 970a248a1381bd37a1edb287d7c085fae7750bf5 (diff) | |
| parent | 65a9b5c423ab805e7fff6b902503cdbccdef0581 (diff) | |
Merge "Invoke Credential Manager UI from the apps process through a pending intent generated by the framework Test: Locally built & deployed Bug: 253155429"
3 files changed, 29 insertions, 12 deletions
diff --git a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java index 06d8e6280bef..3d337b896bb7 100644 --- a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java +++ b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java @@ -72,9 +72,15 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR @Override protected void launchUiWithProviderData(ArrayList<ProviderData> providerDataList) { - mHandler.post(() -> mCredentialManagerUi.show(RequestInfo.newCreateRequestInfo( - mRequestId, mClientRequest, mIsFirstUiTurn, mClientCallingPackage), - providerDataList)); + try { + mClientCallback.onPendingIntent(mCredentialManagerUi.createPendingIntent( + RequestInfo.newCreateRequestInfo( + mRequestId, mClientRequest, mIsFirstUiTurn, mClientCallingPackage), + providerDataList)); + } catch (RemoteException e) { + Log.i(TAG, "Issue with invoking pending intent: " + e.getMessage()); + // TODO: Propagate failure + } } private void respondToClientAndFinish(CreateCredentialResponse response) { diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java index e889594ff857..7408f9ceb97d 100644 --- a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java +++ b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java @@ -16,6 +16,7 @@ package com.android.server.credentials; import android.annotation.NonNull; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.credentials.ui.IntentFactory; @@ -79,14 +80,18 @@ public class CredentialManagerUi { } /** - * Surfaces the Credential Manager bottom sheet UI. + * Creates a {@link PendingIntent} to be used to invoke the credential manager selector UI, + * by the calling app process. + * @param requestInfo the information about the request * @param providerDataList the list of provider data from remote providers */ - public void show(RequestInfo requestInfo, ArrayList<ProviderData> providerDataList) { - Log.i(TAG, "In show"); + public PendingIntent createPendingIntent( + RequestInfo requestInfo, ArrayList<ProviderData> providerDataList) { + Log.i(TAG, "In createPendingIntent"); Intent intent = IntentFactory.newIntent(requestInfo, providerDataList, new ArrayList<>(), - mResultReceiver); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); + mResultReceiver).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + //TODO: Determine if a specific request code is needed + return PendingIntent.getActivity( + mContext, /*requestCode=*/0, intent, PendingIntent.FLAG_IMMUTABLE); } } diff --git a/services/credentials/java/com/android/server/credentials/GetRequestSession.java b/services/credentials/java/com/android/server/credentials/GetRequestSession.java index 8a698cab92a1..c092b3af9699 100644 --- a/services/credentials/java/com/android/server/credentials/GetRequestSession.java +++ b/services/credentials/java/com/android/server/credentials/GetRequestSession.java @@ -68,9 +68,15 @@ public final class GetRequestSession extends RequestSession<GetCredentialRequest @Override protected void launchUiWithProviderData(ArrayList<ProviderData> providerDataList) { - mHandler.post(() -> mCredentialManagerUi.show(RequestInfo.newGetRequestInfo( - mRequestId, null, mIsFirstUiTurn, ""), - providerDataList)); + try { + mClientCallback.onPendingIntent(mCredentialManagerUi.createPendingIntent( + RequestInfo.newGetRequestInfo( + mRequestId, null, mIsFirstUiTurn, ""), + providerDataList)); + } catch (RemoteException e) { + Log.i(TAG, "Issue with invoking pending intent: " + e.getMessage()); + // TODO: Propagate failure + } } @Override // from provider session |