summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Reema Bajwa <reemabajwa@google.com> 2022-11-21 16:48:05 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-11-21 16:48:05 +0000
commit024ceef290a63587a2de6dfbf79a44dedefe7582 (patch)
treeecf5afc65ab984ce0266e424d54a19d0ec37e1b6
parent970a248a1381bd37a1edb287d7c085fae7750bf5 (diff)
parent65a9b5c423ab805e7fff6b902503cdbccdef0581 (diff)
Merge "Invoke Credential Manager UI from the apps process through a pending intent generated by the framework Test: Locally built & deployed Bug: 253155429"
-rw-r--r--services/credentials/java/com/android/server/credentials/CreateRequestSession.java12
-rw-r--r--services/credentials/java/com/android/server/credentials/CredentialManagerUi.java17
-rw-r--r--services/credentials/java/com/android/server/credentials/GetRequestSession.java12
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