Merge "Fix the sorting for more options in create flow"
This commit is contained in:
@@ -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(),
|
||||
|
||||
@@ -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),
|
||||
)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ import android.graphics.drawable.Drawable
|
||||
|
||||
open class ProviderInfo(
|
||||
val icon: Drawable,
|
||||
val name: String,
|
||||
val id: String,
|
||||
val displayName: String,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user