Merge "Hide CredMan UI when provider UI is launched."
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user