diff --git a/core/java/android/credentials/CredentialManager.java b/core/java/android/credentials/CredentialManager.java index 93fa5d85796fe13436b6ff0c0522a32db0f26f57..d19e61f1e532aca94a089c3d2c41506282bc7fd7 100644 --- a/core/java/android/credentials/CredentialManager.java +++ b/core/java/android/credentials/CredentialManager.java @@ -131,6 +131,13 @@ public final class CredentialManager { private static final String DEVICE_CONFIG_ENABLE_CREDENTIAL_DESC_API = "enable_credential_description_api"; + /** + * @hide + */ + @Hide + public static final String EXTRA_AUTOFILL_RESULT_RECEIVER = + "android.credentials.AUTOFILL_RESULT_RECEIVER"; + /** * @hide instantiated by ContextImpl. */ diff --git a/core/java/android/credentials/selection/Constants.java b/core/java/android/credentials/selection/Constants.java index 2229f258a3a43bd74964590e116bf156d0ba8bad..a620621fc3b11a0e82cf0ffe566f733e14c03a1d 100644 --- a/core/java/android/credentials/selection/Constants.java +++ b/core/java/android/credentials/selection/Constants.java @@ -28,12 +28,5 @@ public class Constants { */ public static final String EXTRA_RESULT_RECEIVER = "android.credentials.selection.extra.RESULT_RECEIVER"; - - /** - * The intent extra key for the final result receiver object - */ - public static final String EXTRA_FINAL_RESPONSE_RECEIVER = - "android.credentials.selection.extra.FINAL_RESPONSE_RECEIVER"; - private Constants() {} } diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt index ab70394057f345d259fca950aad5dd6940df14eb..694e27af568244bc39c57c9071ebc68f0bbec988 100644 --- a/packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt @@ -21,7 +21,6 @@ import android.content.Context import android.content.Intent import android.credentials.selection.BaseDialogResult import android.credentials.selection.BaseDialogResult.RESULT_CODE_DIALOG_USER_CANCELED -import android.credentials.selection.Constants import android.credentials.selection.ProviderPendingIntentResponse import android.credentials.selection.UserSelectionDialogResult import android.os.Bundle @@ -117,21 +116,17 @@ class CredentialManagerClientImpl @Inject constructor( sendCancellationCode( cancelCode = cancelCode, requestToken = token, - resultReceiver = resultReceiver, - finalResponseReceiver = finalResponseReceiver + resultReceiver = resultReceiver ) } private fun sendCancellationCode( cancelCode: Int, requestToken: IBinder?, - resultReceiver: ResultReceiver?, - finalResponseReceiver: ResultReceiver? + resultReceiver: ResultReceiver? ) { if (requestToken != null && resultReceiver != null) { - val resultData = Bundle().apply { - putParcelable(Constants.EXTRA_FINAL_RESPONSE_RECEIVER, finalResponseReceiver) - } + val resultData = Bundle() BaseDialogResult.addToBundle(BaseDialogResult(requestToken), resultData) resultReceiver.send(cancelCode, resultData) } diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt index 786c441bb2e32b0b3b13b00784ad29898e69c777..9242141cfd6305b6b6a5468c8fc92a9e1c0fa054 100644 --- a/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt @@ -54,9 +54,3 @@ val Intent.resultReceiver: ResultReceiver? Constants.EXTRA_RESULT_RECEIVER, ResultReceiver::class.java ) - -val Intent.finalResponseReceiver: ResultReceiver? - get() = this.getParcelableExtra( - Constants.EXTRA_FINAL_RESPONSE_RECEIVER, - ResultReceiver::class.java - ) diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestGetMapper.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestGetMapper.kt index 1683cc43eef1fc54520ffcda43483c63a289310f..f1f1f7ca842e3a3a99fe904a181169aee4760eb2 100644 --- a/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestGetMapper.kt +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/mapper/RequestGetMapper.kt @@ -20,7 +20,6 @@ import android.content.Context import android.content.Intent import com.android.credentialmanager.ktx.getCredentialProviderDataList import com.android.credentialmanager.ktx.requestInfo -import com.android.credentialmanager.ktx.finalResponseReceiver import com.android.credentialmanager.ktx.resultReceiver import com.android.credentialmanager.ktx.toProviderList import com.android.credentialmanager.model.Request @@ -29,7 +28,6 @@ fun Intent.toGet(context: Context): Request.Get { return Request.Get( token = requestInfo?.token, resultReceiver = resultReceiver, - finalResponseReceiver = finalResponseReceiver, providerInfos = getCredentialProviderDataList.toProviderList(context) ) } diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt index fd99275ebc8ea0812a102adcb8b99057ea148b44..cb335fc229b29b50b19ccdbd171548b748666e06 100644 --- a/packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt @@ -25,8 +25,7 @@ import com.android.credentialmanager.model.get.ProviderInfo */ sealed class Request private constructor( open val token: IBinder?, - open val resultReceiver: ResultReceiver? = null, - open val finalResponseReceiver: ResultReceiver? = null, + open val resultReceiver: ResultReceiver? = null ) { /** @@ -51,9 +50,8 @@ sealed class Request private constructor( data class Get( override val token: IBinder?, override val resultReceiver: ResultReceiver?, - override val finalResponseReceiver: ResultReceiver?, val providerInfos: List, - ) : Request(token, resultReceiver, finalResponseReceiver) + ) : Request(token, resultReceiver) /** * Request to start the create credentials flow. */ diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt index b17a98b30eee744a89782e863312b9c3f14f5e24..3683235ff049970b03fdd7d04f0db190d77a9cf7 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 ec0da0986e45c5581fa38d2692c69fb5f42d32cc..a2f55cd50519b50a0cdbf37f140ddbf8bc69da03 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 1253ce3a6c80a6aff6a49644d15a806307114277..4109079e20a55640a93c323dd9c6201cedd2e7c9 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() diff --git a/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt b/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt index 3422d3dc4d94e65521e662ad6da825da3c421839..6a6a777091d28cc8adf8f252da8dd7b00f7ad417 100644 --- a/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt +++ b/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt @@ -100,7 +100,6 @@ class CredentialSelectorUiStateGetMapperTest { val getCredentialUiState = Request.Get( token = null, resultReceiver = null, - finalResponseReceiver = null, providerInfos = listOf(createProviderInfo(credentialList1))).toGet(isPrimary = true) assertThat(getCredentialUiState).isEqualTo( @@ -113,7 +112,6 @@ class CredentialSelectorUiStateGetMapperTest { val getCredentialUiState = Request.Get( token = null, resultReceiver = null, - finalResponseReceiver = null, providerInfos = listOf(createProviderInfo(listOf(passkeyCredentialEntryInfo, unknownCredentialEntryInfo)))).toGet(isPrimary = true) @@ -132,7 +130,6 @@ class CredentialSelectorUiStateGetMapperTest { val getCredentialUiState = Request.Get( token = null, resultReceiver = null, - finalResponseReceiver = null, providerInfos = listOf(createProviderInfo(credentialList1))).toGet(isPrimary = false) assertThat(getCredentialUiState).isEqualTo( @@ -151,7 +148,6 @@ class CredentialSelectorUiStateGetMapperTest { val getCredentialUiState = Request.Get( token = null, resultReceiver = null, - finalResponseReceiver = null, providerInfos = listOf(createProviderInfo(credentialList1), createProviderInfo(credentialList2))).toGet(isPrimary = false) diff --git a/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorViewModelTest.kt b/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorViewModelTest.kt index b79f34c54f51489dc3e816b81ef50450329b833e..cf839f83e6892f4eab9123dd79f7a8273ab20d56 100644 --- a/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorViewModelTest.kt +++ b/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorViewModelTest.kt @@ -121,7 +121,6 @@ class CredentialSelectorViewModelTest { stateFlow.value = Request.Get( token = null, resultReceiver = null, - finalResponseReceiver = null, providerInfos = emptyList()) mViewModel.back() @@ -136,7 +135,6 @@ class CredentialSelectorViewModelTest { stateFlow.value = Request.Get( token = null, resultReceiver = null, - finalResponseReceiver = null, providerInfos = emptyList()) mViewModel.back() diff --git a/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java b/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java index 4506779680652e9a83cd2daab57229d61a87a80b..ce9d1803d7647ea484a04e1734516cf74c0539c1 100644 --- a/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java +++ b/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java @@ -16,21 +16,16 @@ package com.android.server.autofill; -import static com.android.server.autofill.Session.REQUEST_ID_KEY; -import static com.android.server.autofill.Session.SESSION_ID_KEY; - import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ComponentName; import android.content.Context; import android.content.IntentSender; -import android.os.Bundle; import android.service.autofill.ConvertCredentialResponse; import android.service.autofill.FillRequest; import android.service.autofill.FillResponse; import android.util.Slog; import android.view.autofill.IAutoFillManagerClient; -import android.view.inputmethod.InlineSuggestionsRequest; /** * Requests autofill response from a Remote Autofill Service. This autofill service can be @@ -55,6 +50,7 @@ final class SecondaryProviderHandler implements RemoteFillService.FillServiceCal private final RemoteFillService mRemoteFillService; private final SecondaryProviderCallback mCallback; + private int mLastFlag; SecondaryProviderHandler( @@ -109,37 +105,18 @@ final class SecondaryProviderHandler implements RemoteFillService.FillServiceCal /** * Requests a new fill response. */ - public void onFillRequest(FillRequest pendingFillRequest, - InlineSuggestionsRequest pendingInlineSuggestionsRequest, int flag, int id, + public void onFillRequest(FillRequest pendingFillRequest, int flag, IAutoFillManagerClient client) { Slog.v(TAG, "Requesting fill response to secondary provider."); mLastFlag = flag; if (mRemoteFillService != null && mRemoteFillService.isCredentialAutofillService()) { Slog.v(TAG, "About to call CredAutofill service as secondary provider"); - FillRequest request = addSessionIdAndRequestIdToClientState(pendingFillRequest, - pendingInlineSuggestionsRequest, id); - mRemoteFillService.onFillCredentialRequest(request, client); + mRemoteFillService.onFillCredentialRequest(pendingFillRequest, client); } else { mRemoteFillService.onFillRequest(pendingFillRequest); } } - private FillRequest addSessionIdAndRequestIdToClientState(FillRequest pendingFillRequest, - InlineSuggestionsRequest pendingInlineSuggestionsRequest, int sessionId) { - if (pendingFillRequest.getClientState() == null) { - pendingFillRequest = new FillRequest(pendingFillRequest.getId(), - pendingFillRequest.getFillContexts(), - pendingFillRequest.getHints(), - new Bundle(), - pendingFillRequest.getFlags(), - pendingInlineSuggestionsRequest, - pendingFillRequest.getDelayedFillIntentSender()); - } - pendingFillRequest.getClientState().putInt(SESSION_ID_KEY, sessionId); - pendingFillRequest.getClientState().putInt(REQUEST_ID_KEY, pendingFillRequest.getId()); - return pendingFillRequest; - } - public void destroy() { mRemoteFillService.destroy(); } diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 0b68f5fd7b85ed4475ed014525aaa2038da83eef..3f3ff4a46edffe49197fced83639196dfc7146bf 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -117,6 +117,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; import android.content.pm.ServiceInfo; +import android.credentials.CredentialManager; import android.credentials.GetCredentialException; import android.credentials.GetCredentialResponse; import android.graphics.Bitmap; @@ -252,7 +253,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState private final AutofillManagerServiceImpl mService; private final Handler mHandler; private final AutoFillUI mUi; - /** * Context associated with the session, it has the same {@link Context#getDisplayId() displayId} * of the activity being autofilled. @@ -751,12 +751,17 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState if (shouldRequestSecondaryProvider(mPendingFillRequest.getFlags()) && mSecondaryProviderHandler != null) { Slog.v(TAG, "Requesting fill response to secondary provider."); + if (!mIsPrimaryCredential) { + mPendingFillRequest = addCredentialManagerDataToClientState( + mPendingFillRequest, + mPendingInlineSuggestionsRequest, id); + } mSecondaryProviderHandler.onFillRequest(mPendingFillRequest, - mPendingInlineSuggestionsRequest, - mPendingFillRequest.getFlags(), id, mClient); + mPendingFillRequest.getFlags(), mClient); } else if (mRemoteFillService != null) { if (mIsPrimaryCredential) { - mPendingFillRequest = addSessionIdAndRequestIdToClientState(mPendingFillRequest, + mPendingFillRequest = addCredentialManagerDataToClientState( + mPendingFillRequest, mPendingInlineSuggestionsRequest, id); mRemoteFillService.onFillCredentialRequest(mPendingFillRequest, mClient); } else { @@ -904,8 +909,9 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } - private FillRequest addSessionIdAndRequestIdToClientState(FillRequest pendingFillRequest, + private FillRequest addCredentialManagerDataToClientState(FillRequest pendingFillRequest, InlineSuggestionsRequest pendingInlineSuggestionsRequest, int sessionId) { + if (pendingFillRequest.getClientState() == null) { pendingFillRequest = new FillRequest(pendingFillRequest.getId(), pendingFillRequest.getFillContexts(), @@ -917,6 +923,10 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } pendingFillRequest.getClientState().putInt(SESSION_ID_KEY, sessionId); pendingFillRequest.getClientState().putInt(REQUEST_ID_KEY, pendingFillRequest.getId()); + ResultReceiver resultReceiver = constructCredentialManagerCallback( + pendingFillRequest.getId()); + pendingFillRequest.getClientState().putParcelable( + CredentialManager.EXTRA_AUTOFILL_RESULT_RECEIVER, resultReceiver); return pendingFillRequest; } @@ -4870,10 +4880,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } - if (isCredmanIntegrationActive(response)) { - addCredentialManagerCallback(response); - } - if (response.supportsInlineSuggestions()) { synchronized (mLock) { if (requestShowInlineSuggestionsLocked(response, filterText)) { @@ -5153,30 +5159,14 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState return mInlineSessionController.setInlineFillUiLocked(inlineFillUi); } - private void addCredentialManagerCallback(FillResponse response) { - if (response.getDatasets() == null) { - return; - } - for (Dataset dataset: response.getDatasets()) { - if (dataset.getId() != null - && dataset.getId().equals(AutofillManager.PINNED_DATASET_ID)) { - Slog.d(TAG, "Adding Credential Manager callback to a pinned entry"); - addCredentialManagerCallbackForDataset(dataset, response.getRequestId()); - } - } - } - - private void addCredentialManagerCallbackForDataset(Dataset dataset, int requestId) { - AutofillId autofillId = null; - if (dataset != null && dataset.getFieldIds().size() == 1) { - autofillId = dataset.getFieldIds().get(0); - } - final AutofillId finalAutofillId = autofillId; + private ResultReceiver constructCredentialManagerCallback(int requestId) { final ResultReceiver resultReceiver = new ResultReceiver(mHandler) { + final AutofillId mAutofillId = mCurrentViewId; @Override protected void onReceiveResult(int resultCode, Bundle resultData) { if (resultCode == SUCCESS_CREDMAN_SELECTOR) { - Slog.d(TAG, "onReceiveResult from Credential Manager bottom sheet"); + Slog.d(TAG, "onReceiveResult from Credential Manager " + + "bottom sheet with mCurrentViewId: " + mAutofillId); GetCredentialResponse getCredentialResponse = resultData.getParcelable( CredentialProviderService.EXTRA_GET_CREDENTIAL_RESPONSE, @@ -5184,7 +5174,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState if (Flags.autofillCredmanDevIntegration()) { sendCredentialManagerResponseToApp(getCredentialResponse, - /*exception=*/ null, finalAutofillId); + /*exception=*/ null, mAutofillId); } else { Dataset datasetFromCredential = getDatasetFromCredentialResponse( getCredentialResponse); @@ -5203,7 +5193,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState + exception[1]); sendCredentialManagerResponseToApp(/*response=*/ null, new GetCredentialException(exception[0], exception[1]), - finalAutofillId); + mAutofillId); } } else { Slog.d(TAG, "Unknown resultCode from credential " @@ -5214,15 +5204,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState ResultReceiver ipcFriendlyResultReceiver = toIpcFriendlyResultReceiver(resultReceiver); - Intent metadataIntent = dataset.getCredentialFillInIntent(); - if (metadataIntent == null) { - metadataIntent = new Intent(); - } - - metadataIntent.putExtra( - android.credentials.selection.Constants.EXTRA_FINAL_RESPONSE_RECEIVER, - ipcFriendlyResultReceiver); - dataset.setCredentialFillInIntent(metadataIntent); + return ipcFriendlyResultReceiver; } private ResultReceiver toIpcFriendlyResultReceiver(ResultReceiver resultReceiver) { diff --git a/services/credentials/java/com/android/server/credentials/ClearRequestSession.java b/services/credentials/java/com/android/server/credentials/ClearRequestSession.java index f5ba50d7f0791bd6f2417d98d0c9c2af0fd541cd..b1349ea92a4f163e965f8750e4f960547d8b3c18 100644 --- a/services/credentials/java/com/android/server/credentials/ClearRequestSession.java +++ b/services/credentials/java/com/android/server/credentials/ClearRequestSession.java @@ -27,7 +27,6 @@ import android.credentials.selection.ProviderData; import android.credentials.selection.RequestInfo; import android.os.CancellationSignal; import android.os.RemoteException; -import android.os.ResultReceiver; import android.service.credentials.CallingAppInfo; import android.util.Slog; @@ -150,7 +149,7 @@ public final class ClearRequestSession extends RequestSession implements CredentialManagerUi.Credential protected PendingIntent mPendingIntent; - @Nullable - protected ResultReceiver mFinalResponseReceiver; - @NonNull protected RequestSessionStatus mRequestSessionStatus = RequestSessionStatus.IN_PROGRESS; @@ -224,8 +219,7 @@ abstract class RequestSession implements CredentialManagerUi.Credential // UI callbacks @Override // from CredentialManagerUiCallbacks - public void onUiSelection(UserSelectionDialogResult selection, - ResultReceiver finalResponseReceiver) { + public void onUiSelection(UserSelectionDialogResult selection) { if (mRequestSessionStatus == RequestSessionStatus.COMPLETE) { Slog.w(TAG, "Request has already been completed. This is strange."); return; @@ -241,7 +235,7 @@ abstract class RequestSession implements CredentialManagerUi.Credential Slog.w(TAG, "providerSession not found in onUiSelection. This is strange."); return; } - mFinalResponseReceiver = finalResponseReceiver; + ProviderSessionMetric providerSessionMetric = providerSession.mProviderSessionMetric; int initialAuthMetricsProvider = providerSessionMetric.getBrowsedAuthenticationMetric() .size();