From 388f9ab78c2dc2d37ee32bb1a65c94c0de17de1b Mon Sep 17 00:00:00 2001 From: Reema Bajwa Date: Fri, 12 Apr 2024 00:14:08 +0000 Subject: Direct connection btw Autofill & Credman sessions Before this change, a result reciever was added to each pinned dataset's associated intent, and then retrieved in the from the intent that starts the credman selector intent which then passed it to credman session. Now, autofill session constructs one resultreciever per FillRequest and adds it to client state, proxy service retrieves it from clientstate and adds it to the req top level bundle, which is then extracted by credman session and used to propagate the final response. Hence we remove the dependency on the selector passing the resultReciver to the credman session Test: Cts Bug: 333455221 Change-Id: Ic17091841edbcf0975d0ff238f2d8b72d8cd5593 --- .../android/credentialmanager/CredentialManagerRepo.kt | 17 ++--------------- .../credentialmanager/CredentialSelectorActivity.kt | 7 +------ .../autofill/CredentialAutofillService.kt | 15 +++++++++++---- 3 files changed, 14 insertions(+), 25 deletions(-) (limited to 'packages/CredentialManager/src') diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt index b17a98b30eee..3683235ff049 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt @@ -58,7 +58,6 @@ class CredentialManagerRepo( private val providerEnabledList: List private val providerDisabledList: List? val resultReceiver: ResultReceiver? - val finalResponseReceiver: ResultReceiver? var initialUiState: UiState @@ -105,12 +104,6 @@ class CredentialManagerRepo( Constants.EXTRA_RESULT_RECEIVER, ResultReceiver::class.java ) - - finalResponseReceiver = intent.getParcelableExtra( - Constants.EXTRA_FINAL_RESPONSE_RECEIVER, - ResultReceiver::class.java - ) - isReqForAllOptions = requestInfo?.isShowAllOptionsRequested ?: false val cancellationRequest = getCancelUiRequest(intent) @@ -206,7 +199,7 @@ class CredentialManagerRepo( } fun onCancel(cancelCode: Int) { - sendCancellationCode(cancelCode, requestInfo?.token, resultReceiver, finalResponseReceiver) + sendCancellationCode(cancelCode, requestInfo?.token, resultReceiver) } fun onOptionSelected( @@ -226,9 +219,6 @@ class CredentialManagerRepo( val resultDataBundle = Bundle() UserSelectionDialogResult.addToBundle(userSelectionDialogResult, resultDataBundle) - resultDataBundle.putParcelable(Constants.EXTRA_FINAL_RESPONSE_RECEIVER, - finalResponseReceiver) - resultReceiver?.send( BaseDialogResult.RESULT_CODE_DIALOG_COMPLETE_WITH_SELECTION, resultDataBundle @@ -296,13 +286,10 @@ class CredentialManagerRepo( fun sendCancellationCode( cancelCode: Int, requestToken: IBinder?, - resultReceiver: ResultReceiver?, - finalResponseReceiver: ResultReceiver? + resultReceiver: ResultReceiver? ) { if (requestToken != null && resultReceiver != null) { val resultData = Bundle() - resultData.putParcelable(Constants.EXTRA_FINAL_RESPONSE_RECEIVER, - finalResponseReceiver) BaseDialogResult.addToBundle(BaseDialogResult(requestToken), resultData) resultReceiver.send(cancelCode, resultData) diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt index ec0da0986e45..a2f55cd50519 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt @@ -208,18 +208,13 @@ class CredentialSelectorActivity : ComponentActivity() { android.credentials.selection.Constants.EXTRA_RESULT_RECEIVER, ResultReceiver::class.java ) - val finalResponseResultReceiver = intent.getParcelableExtra( - android.credentials.selection.Constants.EXTRA_FINAL_RESPONSE_RECEIVER, - ResultReceiver::class.java - ) - val requestInfo = intent.extras?.getParcelable( RequestInfo.EXTRA_REQUEST_INFO, RequestInfo::class.java ) CredentialManagerRepo.sendCancellationCode( BaseDialogResult.RESULT_CODE_DATA_PARSING_FAILURE, - requestInfo?.token, resultReceiver, finalResponseResultReceiver + requestInfo?.token, resultReceiver ) this.finish() } diff --git a/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt b/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt index 1253ce3a6c80..4109079e20a5 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt @@ -32,6 +32,7 @@ import android.graphics.drawable.Icon import android.os.Bundle import android.os.CancellationSignal import android.os.OutcomeReceiver +import android.os.ResultReceiver import android.service.autofill.AutofillService import android.service.autofill.Dataset import android.service.autofill.Field @@ -109,17 +110,19 @@ class CredentialAutofillService : AutofillService() { } val sessionId = clientState.getInt(SESSION_ID_KEY) val requestId = clientState.getInt(REQUEST_ID_KEY) + val resultReceiver = clientState.getParcelable( + CredentialManager.EXTRA_AUTOFILL_RESULT_RECEIVER, ResultReceiver::class.java) Log.i(TAG, "Autofill sessionId: $sessionId, autofill requestId: $requestId") - if (sessionId == 0 || requestId == 0) { - Log.i(TAG, "Session Id or request Id not found") - callback.onFailure("Session Id or request Id not found") + if (sessionId == 0 || requestId == 0 || resultReceiver == null) { + Log.i(TAG, "Session Id or request Id or resultReceiver not found") + callback.onFailure("Session Id or request Id or resultReceiver not found") return } val responseClientState = Bundle() responseClientState.putBoolean(WEBVIEW_REQUESTED_CREDENTIAL_KEY, false) val getCredRequest: GetCredentialRequest? = getCredManRequest(structure, sessionId, - requestId, responseClientState) + requestId, resultReceiver, responseClientState) // TODO(b/324635774): Use callback for validating. If the request is coming // directly from the view, there should be a corresponding callback, otherwise // we should fail fast, @@ -531,6 +534,7 @@ class CredentialAutofillService : AutofillService() { structure: AssistStructure, sessionId: Int, requestId: Int, + resultReceiver: ResultReceiver, responseClientState: Bundle ): GetCredentialRequest? { val credentialOptions: MutableList = mutableListOf() @@ -540,6 +544,9 @@ class CredentialAutofillService : AutofillService() { val dataBundle = Bundle() dataBundle.putInt(SESSION_ID_KEY, sessionId) dataBundle.putInt(REQUEST_ID_KEY, requestId) + dataBundle.putParcelable(CredentialManager.EXTRA_AUTOFILL_RESULT_RECEIVER, + resultReceiver) + return GetCredentialRequest.Builder(dataBundle) .setCredentialOptions(credentialOptions) .build() -- cgit v1.2.3-59-g8ed1b