diff options
| author | 2022-12-05 23:23:45 +0000 | |
|---|---|---|
| committer | 2022-12-05 23:23:45 +0000 | |
| commit | c5c7858b88409216fec656d6b9f4c19cff0ae52f (patch) | |
| tree | afb08b3fe9fe66783399e3a9b1a0af7d83ccc065 | |
| parent | 4702c44128670f0ec5d89d14cffa743b9a60eadd (diff) | |
| parent | 2e941b157bac0bd92a3087cb73ebb7f9b998ea36 (diff) | |
Merge "Hide CredMan UI when provider UI is launched."
4 files changed, 118 insertions, 87 deletions
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt index d8dd1a722b1e..5efedd1a8863 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt @@ -75,53 +75,55 @@ fun CreateCredentialScreen( sheetState = state, sheetContent = { val uiState = viewModel.uiState - when (uiState.currentScreenState) { - CreateScreenState.PASSKEY_INTRO -> ConfirmationCard( - onConfirm = viewModel::onConfirmIntro, - onCancel = viewModel::onCancel, - ) - CreateScreenState.PROVIDER_SELECTION -> ProviderSelectionCard( - requestDisplayInfo = uiState.requestDisplayInfo, - enabledProviderList = uiState.enabledProviders, - disabledProviderList = uiState.disabledProviders, - onCancel = viewModel::onCancel, - onOptionSelected = viewModel::onEntrySelectedFromFirstUseScreen, - onDisabledPasswordManagerSelected = + if (!uiState.hidden) { + when (uiState.currentScreenState) { + CreateScreenState.PASSKEY_INTRO -> ConfirmationCard( + onConfirm = viewModel::onConfirmIntro, + onCancel = viewModel::onCancel, + ) + CreateScreenState.PROVIDER_SELECTION -> ProviderSelectionCard( + requestDisplayInfo = uiState.requestDisplayInfo, + enabledProviderList = uiState.enabledProviders, + disabledProviderList = uiState.disabledProviders, + onCancel = viewModel::onCancel, + onOptionSelected = viewModel::onEntrySelectedFromFirstUseScreen, + onDisabledPasswordManagerSelected = viewModel::onDisabledPasswordManagerSelected, - onRemoteEntrySelected = selectEntryCallback, - ) - CreateScreenState.CREATION_OPTION_SELECTION -> CreationSelectionCard( - requestDisplayInfo = uiState.requestDisplayInfo, - enabledProviderList = uiState.enabledProviders, - providerInfo = uiState.activeEntry?.activeProvider!!, - createOptionInfo = uiState.activeEntry.activeEntryInfo as CreateOptionInfo, - showActiveEntryOnly = uiState.showActiveEntryOnly, - onOptionSelected = selectEntryCallback, - onConfirm = confirmEntryCallback, - onCancel = viewModel::onCancel, - onMoreOptionsSelected = viewModel::onMoreOptionsSelected, - ) - CreateScreenState.MORE_OPTIONS_SELECTION -> MoreOptionsSelectionCard( - requestDisplayInfo = uiState.requestDisplayInfo, - enabledProviderList = uiState.enabledProviders, - disabledProviderList = uiState.disabledProviders, - onBackButtonSelected = viewModel::onBackButtonSelected, - onOptionSelected = viewModel::onEntrySelectedFromMoreOptionScreen, - onDisabledPasswordManagerSelected = + onRemoteEntrySelected = selectEntryCallback, + ) + CreateScreenState.CREATION_OPTION_SELECTION -> CreationSelectionCard( + requestDisplayInfo = uiState.requestDisplayInfo, + enabledProviderList = uiState.enabledProviders, + providerInfo = uiState.activeEntry?.activeProvider!!, + createOptionInfo = uiState.activeEntry.activeEntryInfo as CreateOptionInfo, + showActiveEntryOnly = uiState.showActiveEntryOnly, + onOptionSelected = selectEntryCallback, + onConfirm = confirmEntryCallback, + onCancel = viewModel::onCancel, + onMoreOptionsSelected = viewModel::onMoreOptionsSelected, + ) + CreateScreenState.MORE_OPTIONS_SELECTION -> MoreOptionsSelectionCard( + requestDisplayInfo = uiState.requestDisplayInfo, + enabledProviderList = uiState.enabledProviders, + disabledProviderList = uiState.disabledProviders, + onBackButtonSelected = viewModel::onBackButtonSelected, + onOptionSelected = viewModel::onEntrySelectedFromMoreOptionScreen, + onDisabledPasswordManagerSelected = viewModel::onDisabledPasswordManagerSelected, - onRemoteEntrySelected = selectEntryCallback, - ) - CreateScreenState.MORE_OPTIONS_ROW_INTRO -> MoreOptionsRowIntroCard( - providerInfo = uiState.activeEntry?.activeProvider!!, - onDefaultOrNotSelected = viewModel::onDefaultOrNotSelected - ) - CreateScreenState.EXTERNAL_ONLY_SELECTION -> ExternalOnlySelectionCard( - requestDisplayInfo = uiState.requestDisplayInfo, - activeRemoteEntry = uiState.activeEntry?.activeEntryInfo!!, - onOptionSelected = selectEntryCallback, - onConfirm = confirmEntryCallback, - onCancel = viewModel::onCancel, - ) + onRemoteEntrySelected = selectEntryCallback, + ) + CreateScreenState.MORE_OPTIONS_ROW_INTRO -> MoreOptionsRowIntroCard( + providerInfo = uiState.activeEntry?.activeProvider!!, + onDefaultOrNotSelected = viewModel::onDefaultOrNotSelected + ) + CreateScreenState.EXTERNAL_ONLY_SELECTION -> ExternalOnlySelectionCard( + requestDisplayInfo = uiState.requestDisplayInfo, + activeRemoteEntry = uiState.activeEntry?.activeEntryInfo!!, + onOptionSelected = selectEntryCallback, + onConfirm = confirmEntryCallback, + onCancel = viewModel::onCancel, + ) + } } }, scrimColor = MaterialTheme.colorScheme.scrim.copy(alpha = 0.8f), @@ -270,7 +272,7 @@ fun ProviderSelectionCard( MoreOptionsDisabledProvidersRow( disabledProviders = disabledProviderList, onDisabledPasswordManagerSelected = - onDisabledPasswordManagerSelected, + onDisabledPasswordManagerSelected, ) } } @@ -782,7 +784,8 @@ fun MoreOptionsInfoRow( ) } if (createOptionInfo.passwordCount != null && - createOptionInfo.passkeyCount != null) { + createOptionInfo.passkeyCount != null + ) { TextSecondary( text = stringResource( diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialViewModel.kt index 393cf7d9ae01..f81f08babdac 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialViewModel.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialViewModel.kt @@ -16,6 +16,7 @@ package com.android.credentialmanager.createflow +import android.app.Activity import android.util.Log import androidx.activity.compose.ManagedActivityResultLauncher import androidx.activity.result.ActivityResult @@ -39,6 +40,7 @@ data class CreateCredentialUiState( val showActiveEntryOnly: Boolean, val activeEntry: ActiveEntry? = null, val selectedEntry: EntryInfo? = null, + val hidden: Boolean = false, ) class CreateCredentialViewModel( @@ -139,7 +141,10 @@ class CreateCredentialViewModel( "Account Selector", "Option selected for entry: " + " {provider=$providerId, key=$entryKey, subkey=$entrySubkey") if (selectedEntry.pendingIntent != null) { - uiState = uiState.copy(selectedEntry = selectedEntry) + uiState = uiState.copy( + selectedEntry = selectedEntry, + hidden = true, + ) val intentSenderRequest = IntentSenderRequest.Builder(selectedEntry.pendingIntent) .setFillInIntent(selectedEntry.fillInIntent).build() launcher.launch(intentSenderRequest) @@ -174,21 +179,29 @@ class CreateCredentialViewModel( val entry = uiState.selectedEntry val resultCode = providerActivityResult.resultCode val resultData = providerActivityResult.data - if (entry != null) { - val providerId = entry.providerId - Log.d("Account Selector", "Got provider activity result: {provider=" + - "$providerId, key=${entry.entryKey}, subkey=${entry.entrySubkey}, " + - "resultCode=$resultCode, resultData=$resultData}" - ) - CredentialManagerRepo.getInstance().onOptionSelected( - providerId, entry.entryKey, entry.entrySubkey, resultCode, resultData, + if (resultCode == Activity.RESULT_CANCELED) { + // Re-display the CredMan UI if the user canceled from the provider UI. + uiState = uiState.copy( + selectedEntry = null, + hidden = false, ) } else { - Log.w("Account Selector", - "Illegal state: received a provider result but found no matching entry.") + if (entry != null) { + val providerId = entry.providerId + Log.d("Account Selector", "Got provider activity result: {provider=" + + "$providerId, key=${entry.entryKey}, subkey=${entry.entrySubkey}, " + + "resultCode=$resultCode, resultData=$resultData}" + ) + CredentialManagerRepo.getInstance().onOptionSelected( + providerId, entry.entryKey, entry.entrySubkey, resultCode, resultData, + ) + } else { + Log.w("Account Selector", + "Illegal state: received a provider result but found no matching entry.") + } + dialogResult.value = DialogResult( + ResultState.COMPLETE, + ) } - dialogResult.value = DialogResult( - ResultState.COMPLETE, - ) } } diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt index 31dc0695e8ed..7f65865b3b5e 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt @@ -84,20 +84,22 @@ fun GetCredentialScreen( sheetState = state, sheetContent = { val uiState = viewModel.uiState - when (uiState.currentScreenState) { - GetScreenState.PRIMARY_SELECTION -> PrimarySelectionCard( - requestDisplayInfo = uiState.requestDisplayInfo, - providerDisplayInfo = uiState.providerDisplayInfo, - onEntrySelected = entrySelectionCallback, - onCancel = viewModel::onCancel, - onMoreOptionSelected = viewModel::onMoreOptionSelected, - ) - GetScreenState.ALL_SIGN_IN_OPTIONS -> AllSignInOptionCard( - providerInfoList = uiState.providerInfoList, - providerDisplayInfo = uiState.providerDisplayInfo, - onEntrySelected = entrySelectionCallback, - onBackButtonClicked = viewModel::onBackToPrimarySelectionScreen, - ) + if (!uiState.hidden) { + when (uiState.currentScreenState) { + GetScreenState.PRIMARY_SELECTION -> PrimarySelectionCard( + requestDisplayInfo = uiState.requestDisplayInfo, + providerDisplayInfo = uiState.providerDisplayInfo, + onEntrySelected = entrySelectionCallback, + onCancel = viewModel::onCancel, + onMoreOptionSelected = viewModel::onMoreOptionSelected, + ) + GetScreenState.ALL_SIGN_IN_OPTIONS -> AllSignInOptionCard( + providerInfoList = uiState.providerInfoList, + providerDisplayInfo = uiState.providerDisplayInfo, + onEntrySelected = entrySelectionCallback, + onBackButtonClicked = viewModel::onBackToPrimarySelectionScreen, + ) + } } }, scrimColor = MaterialTheme.colorScheme.scrim.copy(alpha = 0.8f), diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialViewModel.kt index 6dea9c299989..c64dae3d5a13 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialViewModel.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialViewModel.kt @@ -16,6 +16,7 @@ package com.android.credentialmanager.getflow +import android.app.Activity import android.util.Log import androidx.activity.compose.ManagedActivityResultLauncher import androidx.activity.result.ActivityResult @@ -39,6 +40,7 @@ data class GetCredentialUiState( val requestDisplayInfo: RequestDisplayInfo, val providerDisplayInfo: ProviderDisplayInfo = toProviderDisplayInfo(providerInfoList), val selectedEntry: EntryInfo? = null, + val hidden: Boolean = false, ) class GetCredentialViewModel( @@ -63,7 +65,10 @@ class GetCredentialViewModel( Log.d("Account Selector", "credential selected:" + " {provider=${entry.providerId}, key=${entry.entryKey}, subkey=${entry.entrySubkey}}") if (entry.pendingIntent != null) { - uiState = uiState.copy(selectedEntry = entry) + uiState = uiState.copy( + selectedEntry = entry, + hidden = true, + ) val intentSenderRequest = IntentSenderRequest.Builder(entry.pendingIntent) .setFillInIntent(entry.fillInIntent).build() launcher.launch(intentSenderRequest) @@ -79,20 +84,28 @@ class GetCredentialViewModel( val entry = uiState.selectedEntry val resultCode = providerActivityResult.resultCode val resultData = providerActivityResult.data - if (entry != null) { - Log.d("Account Selector", "Got provider activity result: {provider=" + - "${entry.providerId}, key=${entry.entryKey}, subkey=${entry.entrySubkey}, " + - "resultCode=$resultCode, resultData=$resultData}" - ) - CredentialManagerRepo.getInstance().onOptionSelected( - entry.providerId, entry.entryKey, entry.entrySubkey, - resultCode, resultData, + if (resultCode == Activity.RESULT_CANCELED) { + // Re-display the CredMan UI if the user canceled from the provider UI. + uiState = uiState.copy( + selectedEntry = null, + hidden = false, ) } else { - Log.w("Account Selector", - "Illegal state: received a provider result but found no matching entry.") + if (entry != null) { + Log.d("Account Selector", "Got provider activity result: {provider=" + + "${entry.providerId}, key=${entry.entryKey}, subkey=${entry.entrySubkey}, " + + "resultCode=$resultCode, resultData=$resultData}" + ) + CredentialManagerRepo.getInstance().onOptionSelected( + entry.providerId, entry.entryKey, entry.entrySubkey, + resultCode, resultData, + ) + } else { + Log.w("Account Selector", + "Illegal state: received a provider result but found no matching entry.") + } + dialogResult.value = DialogResult(ResultState.COMPLETE) } - dialogResult.value = DialogResult(ResultState.COMPLETE) } fun onMoreOptionSelected() { |