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

This commit is contained in:
Qinmei Du
2023-01-07 01:27:34 +00:00
committed by Android (Google) Code Review
5 changed files with 52 additions and 47 deletions

View File

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

View File

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

View File

@@ -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 ->
item {
MoreOptionsInfoRow(
requestDisplayInfo = requestDisplayInfo,
providerInfo = enabledProviderInfo,
createOptionInfo = createOptionInfo,
onOptionSelected = {
onOptionSelected(
ActiveEntry(
enabledProviderInfo,
createOptionInfo
)
sortedCreateOptionsPairs.forEach { entry ->
item {
MoreOptionsInfoRow(
requestDisplayInfo = requestDisplayInfo,
providerInfo = entry.second,
createOptionInfo = entry.first,
onOptionSelected = {
onOptionSelected(
ActiveEntry(
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,23 +414,23 @@ 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 ->
item {
MoreOptionsInfoRow(
requestDisplayInfo = requestDisplayInfo,
providerInfo = enabledProviderInfo,
createOptionInfo = createOptionInfo,
onOptionSelected = {
onOptionSelected(
ActiveEntry(
enabledProviderInfo,
createOptionInfo
)
sortedCreateOptionsPairs.forEach { entry ->
item {
MoreOptionsInfoRow(
requestDisplayInfo = requestDisplayInfo,
providerInfo = entry.second,
createOptionInfo = entry.first,
onOptionSelected = {
onOptionSelected(
ActiveEntry(
entry.second,
entry.first
)
})
}
)
})
}
}
item {

View File

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

View File

@@ -22,7 +22,7 @@ import android.graphics.drawable.Drawable
open class ProviderInfo(
val icon: Drawable,
val name: String,
val id: String,
val displayName: String,
)