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

Commit 62892116 authored by Qinmei Du's avatar Qinmei Du Committed by Android (Google) Code Review
Browse files

Merge "Fix the sorting for more options in create flow"

parents ef3dd32c c4ee0b41
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -139,9 +139,6 @@ class CredentialManagerRepo(
    val providerEnabledList = CreateFlowUtils.toEnabledProviderList(
      // Handle runtime cast error
      providerEnabledList as List<CreateCredentialProviderData>, context)
    providerEnabledList.forEach{providerInfo -> providerInfo.createOptions =
      providerInfo.createOptions.sortedWith(compareBy { it.lastUsedTimeMillis }).reversed()
    }
    return providerEnabledList
  }

@@ -179,9 +176,9 @@ class CredentialManagerRepo(
              .setSaveEntries(
                  listOf<Entry>(
                      newCreateEntry("key1", "subkey-1", "elisa.beckett@gmail.com",
                          20, 7, 27, 10000),
                          20, 7, 27, 10L),
                      newCreateEntry("key1", "subkey-2", "elisa.work@google.com",
                          20, 7, 27, 11000),
                          20, 7, 27, 12L),
                  )
              )
              .setRemoteEntry(
@@ -193,9 +190,9 @@ class CredentialManagerRepo(
              .setSaveEntries(
                  listOf<Entry>(
                      newCreateEntry("key1", "subkey-3", "elisa.beckett@dashlane.com",
                          20, 7, 27, 30000),
                          20, 7, 27, 11L),
                      newCreateEntry("key1", "subkey-4", "elisa.work@dashlane.com",
                          20, 7, 27, 31000),
                          20, 7, 27, 14L),
                  )
              )
              .build(),
+9 −5
Original line number Diff line number Diff line
@@ -304,20 +304,23 @@ class CreateFlowUtils {
      isOnPasskeyIntroStateAlready: Boolean,
      isPasskeyFirstUse: Boolean,
    ): CreateCredentialUiState {
      var createOptionSize = 0
      var lastSeenProviderWithNonEmptyCreateOptions: EnabledProviderInfo? = null
      var remoteEntry: RemoteInfo? = null
      var defaultProvider: EnabledProviderInfo? = null
      var createOptionsPairs:
              MutableList<Pair<CreateOptionInfo, EnabledProviderInfo>> = mutableListOf()
      enabledProviders.forEach {
          enabledProvider ->
        if (defaultProviderId != null) {
          if (enabledProvider.name == defaultProviderId) {
          if (enabledProvider.id == defaultProviderId) {
            defaultProvider = enabledProvider
          }
        }
        if (enabledProvider.createOptions.isNotEmpty()) {
          createOptionSize += enabledProvider.createOptions.size
          lastSeenProviderWithNonEmptyCreateOptions = enabledProvider
          enabledProvider.createOptions.forEach {
            createOptionsPairs.add(Pair(it, enabledProvider))
          }
        }
        if (enabledProvider.remoteEntry != null) {
          remoteEntry = enabledProvider.remoteEntry!!
@@ -327,16 +330,17 @@ class CreateFlowUtils {
        enabledProviders = enabledProviders,
        disabledProviders = disabledProviders,
        toCreateScreenState(
          /*createOptionSize=*/createOptionSize,
          /*createOptionSize=*/createOptionsPairs.size,
          /*isOnPasskeyIntroStateAlready=*/isOnPasskeyIntroStateAlready,
          /*requestDisplayInfo=*/requestDisplayInfo,
          /*defaultProvider=*/defaultProvider, /*remoteEntry=*/remoteEntry,
          /*isPasskeyFirstUse=*/isPasskeyFirstUse),
        requestDisplayInfo,
        createOptionsPairs.sortedWith(compareByDescending{ it.first.lastUsedTimeMillis }),
        defaultProvider != null,
        toActiveEntry(
          /*defaultProvider=*/defaultProvider,
          /*createOptionSize=*/createOptionSize,
          /*createOptionSize=*/createOptionsPairs.size,
          /*lastSeenProviderWithNonEmptyCreateOptions=*/lastSeenProviderWithNonEmptyCreateOptions,
          /*remoteEntry=*/remoteEntry),
      )
+33 −30
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ fun CreateCredentialScreen(
                        requestDisplayInfo = uiState.requestDisplayInfo,
                        enabledProviderList = uiState.enabledProviders,
                        disabledProviderList = uiState.disabledProviders,
                        sortedCreateOptionsPairs = uiState.sortedCreateOptionsPairs,
                        onOptionSelected = viewModel::onEntrySelectedFromFirstUseScreen,
                        onDisabledPasswordManagerSelected =
                        viewModel::onDisabledPasswordManagerSelected,
@@ -94,6 +95,7 @@ fun CreateCredentialScreen(
                        requestDisplayInfo = uiState.requestDisplayInfo,
                        enabledProviderList = uiState.enabledProviders,
                        disabledProviderList = uiState.disabledProviders,
                        sortedCreateOptionsPairs = uiState.sortedCreateOptionsPairs,
                        hasDefaultProvider = uiState.hasDefaultProvider,
                        isFromProviderSelection = uiState.isFromProviderSelection!!,
                        onBackProviderSelectionButtonSelected =
@@ -246,6 +248,7 @@ fun ProviderSelectionCard(
    requestDisplayInfo: RequestDisplayInfo,
    enabledProviderList: List<EnabledProviderInfo>,
    disabledProviderList: List<DisabledProviderInfo>?,
    sortedCreateOptionsPairs: List<Pair<CreateOptionInfo, EnabledProviderInfo>>,
    onOptionSelected: (ActiveEntry) -> Unit,
    onDisabledPasswordManagerSelected: () -> Unit,
    onMoreOptionsSelected: () -> Unit,
@@ -295,22 +298,21 @@ fun ProviderSelectionCard(
                LazyColumn(
                    verticalArrangement = Arrangement.spacedBy(2.dp)
                ) {
                    enabledProviderList.forEach { enabledProviderInfo ->
                        enabledProviderInfo.createOptions.forEach { createOptionInfo ->
                    sortedCreateOptionsPairs.forEach { entry ->
                        item {
                            MoreOptionsInfoRow(
                                requestDisplayInfo = requestDisplayInfo,
                                    providerInfo = enabledProviderInfo,
                                    createOptionInfo = createOptionInfo,
                                providerInfo = entry.second,
                                createOptionInfo = entry.first,
                                onOptionSelected = {
                                    onOptionSelected(
                                        ActiveEntry(
                                                enabledProviderInfo,
                                                createOptionInfo
                                            entry.second,
                                            entry.first
                                        )
                                    )
                                    })
                                }
                            )
                        }
                    }
                    item {
@@ -355,6 +357,7 @@ fun MoreOptionsSelectionCard(
    requestDisplayInfo: RequestDisplayInfo,
    enabledProviderList: List<EnabledProviderInfo>,
    disabledProviderList: List<DisabledProviderInfo>?,
    sortedCreateOptionsPairs: List<Pair<CreateOptionInfo, EnabledProviderInfo>>,
    hasDefaultProvider: Boolean,
    isFromProviderSelection: Boolean,
    onBackProviderSelectionButtonSelected: () -> Unit,
@@ -411,25 +414,25 @@ fun MoreOptionsSelectionCard(
                LazyColumn(
                    verticalArrangement = Arrangement.spacedBy(2.dp)
                ) {
                    // Only in the flows with default provider(not first time use) we can show the
                    // createOptions here, or they will be shown on ProviderSelectionCard
                    if (hasDefaultProvider) {
                        enabledProviderList.forEach { enabledProviderInfo ->
                            enabledProviderInfo.createOptions.forEach { createOptionInfo ->
                        sortedCreateOptionsPairs.forEach { entry ->
                            item {
                                MoreOptionsInfoRow(
                                    requestDisplayInfo = requestDisplayInfo,
                                        providerInfo = enabledProviderInfo,
                                        createOptionInfo = createOptionInfo,
                                    providerInfo = entry.second,
                                    createOptionInfo = entry.first,
                                    onOptionSelected = {
                                        onOptionSelected(
                                            ActiveEntry(
                                                    enabledProviderInfo,
                                                    createOptionInfo
                                                entry.second,
                                                entry.first
                                            )
                                        )
                                    })
                            }
                        }
                        }
                        item {
                            MoreOptionsDisabledProvidersRow(
                                disabledProviders = disabledProviderList,
+5 −4
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ data class CreateCredentialUiState(
  val disabledProviders: List<DisabledProviderInfo>? = null,
  val currentScreenState: CreateScreenState,
  val requestDisplayInfo: RequestDisplayInfo,
  val sortedCreateOptionsPairs: List<Pair<CreateOptionInfo, EnabledProviderInfo>>,
  // Should not change with the real time update of default provider, only determine whether we're
  // showing provider selection page at the beginning
  val hasDefaultProvider: Boolean,
@@ -89,9 +90,9 @@ class CreateCredentialViewModel(
    UserConfigRepo.getInstance().setIsPasskeyFirstUse(false)
  }

  fun getProviderInfoByName(providerName: String): EnabledProviderInfo {
  fun getProviderInfoByName(providerId: String): EnabledProviderInfo {
    return uiState.enabledProviders.single {
      it.name == providerName
      it.id == providerId
    }
  }

@@ -133,7 +134,7 @@ class CreateCredentialViewModel(
      currentScreenState = CreateScreenState.CREATION_OPTION_SELECTION,
      activeEntry = activeEntry
    )
    val providerId = uiState.activeEntry?.activeProvider?.name
    val providerId = uiState.activeEntry?.activeProvider?.id
    onDefaultChanged(providerId)
  }

@@ -150,7 +151,7 @@ class CreateCredentialViewModel(
    uiState = uiState.copy(
      currentScreenState = CreateScreenState.CREATION_OPTION_SELECTION,
    )
    val providerId = uiState.activeEntry?.activeProvider?.name
    val providerId = uiState.activeEntry?.activeProvider?.id
    onDefaultChanged(providerId)
  }

+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ import android.graphics.drawable.Drawable

open class ProviderInfo(
  val icon: Drawable,
  val name: String,
  val id: String,
  val displayName: String,
)