Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc42ccda authored by Helen Qin's avatar Helen Qin
Browse files

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
parent e8b2569d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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)
            }
        },
+5 −0
Original line number Diff line number Diff line
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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)
            }
        },
+5 −0
Original line number Diff line number Diff line
@@ -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) {