Loading packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt +1 −4 Original line number Diff line number Diff line Loading @@ -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 Loading packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt +11 −6 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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, Loading packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt +5 −3 Original line number Diff line number Diff line Loading @@ -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, ) { /** Loading @@ -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. */ Loading packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorApp.kt +1 −0 Original line number Diff line number Diff line Loading @@ -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 packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt +14 −11 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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) { Loading @@ -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() { Loading Loading
packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt +1 −4 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt +11 −6 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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, Loading
packages/CredentialManager/shared/src/com/android/credentialmanager/model/Request.kt +5 −3 Original line number Diff line number Diff line Loading @@ -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, ) { /** Loading @@ -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. */ Loading
packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorApp.kt +1 −0 Original line number Diff line number Diff line Loading @@ -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
packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt +14 −11 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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) { Loading @@ -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() { Loading