diff options
6 files changed, 32 insertions, 25 deletions
diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt index 6f70cfb14238..6902b6fcc69d 100644 --- a/packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt @@ -31,10 +31,7 @@ interface CredentialManagerClient { fun updateRequest(intent: Intent) /** Sends an error encountered during the UI. */ - fun sendError( - @BaseDialogResult.ResultCode resultCode: Int, - errorMessage: String? = null, - ) + fun sendError(@BaseDialogResult.ResultCode resultCode: Int) /** * Sends a response to the system service. The response 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 7f59ba3c4a13..ab70394057f3 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 @@ -48,9 +48,13 @@ class CredentialManagerClientImpl @Inject constructor( override fun updateRequest(intent: Intent) { - val request = intent.parse( - context = context, - ) + val request: Request + try { + request = intent.parse(context) + } catch (e: Exception) { + sendError(BaseDialogResult.RESULT_CODE_DATA_PARSING_FAILURE) + return + } Log.d(TAG, "Request parsed: $request, client instance: $this") if (request is Request.Cancel || request is Request.Close) { if (request.token != null && request.token != _requests.value?.token) { @@ -61,8 +65,9 @@ class CredentialManagerClientImpl @Inject constructor( _requests.value = request } - override fun sendError(resultCode: Int, errorMessage: String?) { - TODO("b/300422310 - [Wear] Implement UI for cancellation request with message") + override fun sendError(resultCode: Int) { + Log.w(TAG, "Error occurred, resultCode: $resultCode, current request: ${ requests.value }") + requests.value?.sendCancellationCode(resultCode) } override fun sendResult(result: UserSelectionDialogResult) { @@ -108,7 +113,7 @@ class CredentialManagerClientImpl @Inject constructor( return entryInfo.shouldTerminateUiUponSuccessfulProviderResult } - private fun Request.Get.sendCancellationCode(cancelCode: Int) { + private fun Request.sendCancellationCode(cancelCode: Int) { sendCancellationCode( cancelCode = cancelCode, requestToken = token, 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 4a1c260ae332..fd99275ebc8e 100644 --- a/packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt +++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt @@ -25,6 +25,8 @@ 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, ) { /** @@ -48,10 +50,10 @@ sealed class Request private constructor( */ data class Get( override val token: IBinder?, - val resultReceiver: ResultReceiver?, - val finalResponseReceiver: ResultReceiver?, + override val resultReceiver: ResultReceiver?, + override val finalResponseReceiver: ResultReceiver?, val providerInfos: List<ProviderInfo>, - ) : Request(token) + ) : Request(token, resultReceiver, finalResponseReceiver) /** * Request to start the create credentials flow. */ diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorApp.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorApp.kt index 6bd166e855ff..8c5c085d2880 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorApp.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorApp.kt @@ -19,5 +19,6 @@ package com.android.credentialmanager import android.app.Application import dagger.hilt.android.HiltAndroidApp +/** [Application] of credential selector. */ @HiltAndroidApp(Application::class) class CredentialSelectorApp : Hilt_CredentialSelectorApp()
\ No newline at end of file diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt index bfe80c4c0b97..463c4d1b063e 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt @@ -17,6 +17,7 @@ package com.android.credentialmanager import android.content.Intent +import android.credentials.selection.BaseDialogResult import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.android.credentialmanager.CredentialSelectorUiState.Get @@ -28,6 +29,10 @@ import com.android.credentialmanager.model.get.AuthenticationEntryInfo import com.android.credentialmanager.model.get.CredentialEntryInfo import com.android.credentialmanager.ui.mappers.toGet import android.util.Log +import com.android.credentialmanager.CredentialSelectorUiState.Cancel +import com.android.credentialmanager.CredentialSelectorUiState.Close +import com.android.credentialmanager.CredentialSelectorUiState.Create +import com.android.credentialmanager.CredentialSelectorUiState.Idle import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -50,21 +55,21 @@ class CredentialSelectorViewModel @Inject constructor( ) { request, isPrimary, shouldClose -> if (shouldClose) { Log.d(TAG, "Request finished, closing ") - return@combine CredentialSelectorUiState.Close + return@combine Close } when (request) { - null -> CredentialSelectorUiState.Idle - is Request.Cancel -> CredentialSelectorUiState.Cancel(request.appName) - is Request.Close -> CredentialSelectorUiState.Close - is Request.Create -> CredentialSelectorUiState.Create + null -> Idle + is Request.Cancel -> Cancel(request.appName) + is Request.Close -> Close + is Request.Create -> Create is Request.Get -> request.toGet(isPrimary) } } .stateIn( viewModelScope, started = SharingStarted.WhileSubscribed(5000), - initialValue = CredentialSelectorUiState.Idle, + initialValue = Idle, ) fun updateRequest(intent: Intent) { @@ -75,16 +80,14 @@ class CredentialSelectorViewModel @Inject constructor( Log.d(TAG, "OnBackPressed") when (uiState.value) { is Get.MultipleEntry -> isPrimaryScreen.value = true - else -> { - shouldClose.value = true - // TODO("b/300422310 - [Wear] Implement UI for cancellation request with message") - } + is Create, Close, is Cancel, Idle -> shouldClose.value = true + is Get.SingleEntry, is Get.SingleEntryPerAccount -> cancel() } } override fun cancel() { + credentialManagerClient.sendError(BaseDialogResult.RESULT_CODE_DIALOG_USER_CANCELED) shouldClose.value = true - // TODO("b/300422310 - [Wear] Implement UI for cancellation request with message") } override fun openSecondaryScreen() { diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt index 332b81634df7..f9a5887158eb 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt @@ -120,7 +120,6 @@ fun WearApp( } is CredentialSelectorUiState.Cancel -> { - // TODO: b/300422310 - Implement cancel with message flow onCloseApp() } |