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

Commit 2e941b15 authored by Helen Qin's avatar Helen Qin
Browse files

Hide CredMan UI when provider UI is launched.

Also, if provider UI is canceled, re-show the CredMan UI.

Bug: 261229077
Test: local deployment
Change-Id: I8613dd0c3d81566d10e59cb153e4b4069c899d16
parent 2a27fab6
Loading
Loading
Loading
Loading
+50 −47
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ fun CreateCredentialScreen(
        sheetState = state,
        sheetContent = {
            val uiState = viewModel.uiState
            if (!uiState.hidden) {
                when (uiState.currentScreenState) {
                    CreateScreenState.PASSKEY_INTRO -> ConfirmationCard(
                        onConfirm = viewModel::onConfirmIntro,
@@ -123,6 +124,7 @@ fun CreateCredentialScreen(
                        onCancel = viewModel::onCancel,
                    )
                }
            }
        },
        scrimColor = MaterialTheme.colorScheme.scrim.copy(alpha = 0.8f),
        sheetShape = EntryShape.TopRoundedCorner,
@@ -782,7 +784,8 @@ fun MoreOptionsInfoRow(
                    )
                }
                if (createOptionInfo.passwordCount != null &&
                    createOptionInfo.passkeyCount != null) {
                    createOptionInfo.passkeyCount != null
                ) {
                    TextSecondary(
                        text =
                        stringResource(
+27 −14
Original line number Diff line number Diff line
@@ -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,6 +179,13 @@ class CreateCredentialViewModel(
    val entry = uiState.selectedEntry
    val resultCode = providerActivityResult.resultCode
    val resultData = providerActivityResult.data
    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 {
      if (entry != null) {
        val providerId = entry.providerId
        Log.d("Account Selector", "Got provider activity result: {provider=" +
@@ -192,3 +204,4 @@ class CreateCredentialViewModel(
      )
    }
  }
}
+16 −14
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ fun GetCredentialScreen(
        sheetState = state,
        sheetContent = {
            val uiState = viewModel.uiState
            if (!uiState.hidden) {
                when (uiState.currentScreenState) {
                    GetScreenState.PRIMARY_SELECTION -> PrimarySelectionCard(
                        requestDisplayInfo = uiState.requestDisplayInfo,
@@ -99,6 +100,7 @@ fun GetCredentialScreen(
                        onBackButtonClicked = viewModel::onBackToPrimarySelectionScreen,
                    )
                }
            }
        },
        scrimColor = MaterialTheme.colorScheme.scrim.copy(alpha = 0.8f),
        sheetShape = EntryShape.TopRoundedCorner,
+25 −12
Original line number Diff line number Diff line
@@ -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,6 +84,13 @@ class GetCredentialViewModel(
    val entry = uiState.selectedEntry
    val resultCode = providerActivityResult.resultCode
    val resultData = providerActivityResult.data
    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 {
      if (entry != null) {
        Log.d("Account Selector", "Got provider activity result: {provider=" +
                "${entry.providerId}, key=${entry.entryKey}, subkey=${entry.entrySubkey}, " +
@@ -94,6 +106,7 @@ class GetCredentialViewModel(
      }
      dialogResult.value = DialogResult(ResultState.COMPLETE)
    }
  }

  fun onMoreOptionSelected() {
    Log.d("Account Selector", "More Option selected")