Fix another race condition for provider ui launching.
Make sure that once a provider ui is launched, we don't relaunch it until that pending ui has finished. Test: verified locally Fix: 261676445 Change-Id: I2424f919bdabf0facf2d727f439235e7586953cf
This commit is contained in:
@@ -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)
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user