diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt index 5d22bfd68d0b7..b417b385ada76 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt @@ -118,7 +118,7 @@ fun CreateCredentialScreen( onCancel = viewModel::onCancel, ) } - } else if (uiState.hidden && uiState.selectedEntry != null) { + } else if (uiState.selectedEntry != null && !uiState.providerActivityPending) { viewModel.launchProviderUi(providerActivityLauncher) } }, diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialViewModel.kt index 3d23f5d424a51..518aaee5ea9bf 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialViewModel.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialViewModel.kt @@ -42,6 +42,7 @@ data class CreateCredentialUiState( val activeEntry: ActiveEntry? = null, val selectedEntry: EntryInfo? = null, val hidden: Boolean = false, + val providerActivityPending: Boolean = false, ) class CreateCredentialViewModel( @@ -162,6 +163,9 @@ class CreateCredentialViewModel( ) { val entry = uiState.selectedEntry if (entry != null && entry.pendingIntent != null) { + uiState = uiState.copy( + providerActivityPending = true, + ) val intentSenderRequest = IntentSenderRequest.Builder(entry.pendingIntent) .setFillInIntent(entry.fillInIntent).build() launcher.launch(intentSenderRequest) @@ -192,6 +196,7 @@ class CreateCredentialViewModel( uiState = uiState.copy( selectedEntry = null, hidden = false, + providerActivityPending = false, ) } else { if (entry != null) { diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt index 21342a15aca58..d6d71220e943f 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialComponents.kt @@ -97,7 +97,7 @@ fun GetCredentialScreen( onBackButtonClicked = viewModel::onBackToPrimarySelectionScreen, ) } - } else if (uiState.hidden && uiState.selectedEntry != null) { + } else if (uiState.selectedEntry != null && !uiState.providerActivityPending) { viewModel.launchProviderUi(providerActivityLauncher) } }, diff --git a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialViewModel.kt index 33e7021033893..7b80124d618c8 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialViewModel.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/getflow/GetCredentialViewModel.kt @@ -41,6 +41,7 @@ data class GetCredentialUiState( val providerDisplayInfo: ProviderDisplayInfo = toProviderDisplayInfo(providerInfoList), val selectedEntry: EntryInfo? = null, val hidden: Boolean = false, + val providerActivityPending: Boolean = false, ) class GetCredentialViewModel( @@ -79,6 +80,9 @@ class GetCredentialViewModel( ) { val entry = uiState.selectedEntry if (entry != null && entry.pendingIntent != null) { + uiState = uiState.copy( + providerActivityPending = true, + ) val intentSenderRequest = IntentSenderRequest.Builder(entry.pendingIntent) .setFillInIntent(entry.fillInIntent).build() launcher.launch(intentSenderRequest) @@ -96,6 +100,7 @@ class GetCredentialViewModel( uiState = uiState.copy( selectedEntry = null, hidden = false, + providerActivityPending = false, ) } else { if (entry != null) {