Merge "Fix another race condition for provider ui launching."

This commit is contained in:
Helen Qin
2022-12-07 16:58:32 +00:00
committed by Android (Google) Code Review
4 changed files with 12 additions and 2 deletions

View File

@@ -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)
}
},

View File

@@ -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) {

View File

@@ -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)
}
},

View File

@@ -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) {