Skip to content

Commit 03df341

Browse files
Consolidate the VaultVerificationCodeItems (#6035)
1 parent d966423 commit 03df341

File tree

16 files changed

+124
-265
lines changed

16 files changed

+124
-265
lines changed

authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreen.kt

Lines changed: 19 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,11 @@ import androidx.compose.ui.unit.dp
4343
import androidx.core.net.toUri
4444
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
4545
import androidx.lifecycle.compose.collectAsStateWithLifecycle
46-
import com.bitwarden.authenticator.ui.authenticator.feature.itemlisting.model.VaultDropdownMenuAction
47-
import com.bitwarden.authenticator.ui.authenticator.feature.model.SharedCodesDisplayState
48-
import com.bitwarden.authenticator.ui.authenticator.feature.model.VerificationCodeDisplayItem
4946
import com.bitwarden.authenticator.ui.platform.components.header.AuthenticatorExpandingHeader
47+
import com.bitwarden.authenticator.ui.platform.components.listitem.VaultVerificationCodeItem
48+
import com.bitwarden.authenticator.ui.platform.components.listitem.model.SharedCodesDisplayState
49+
import com.bitwarden.authenticator.ui.platform.components.listitem.model.VaultDropdownMenuAction
50+
import com.bitwarden.authenticator.ui.platform.components.listitem.model.VerificationCodeDisplayItem
5051
import com.bitwarden.authenticator.ui.platform.composition.LocalPermissionsManager
5152
import com.bitwarden.authenticator.ui.platform.manager.permissions.PermissionsManager
5253
import com.bitwarden.authenticator.ui.platform.util.startAuthenticatorAppSettings
@@ -371,25 +372,16 @@ private fun ItemListingContent(
371372
itemsIndexed(
372373
items = state.favoriteItems,
373374
key = { _, it -> "favorite_item_${it.id}" },
374-
) { index, it ->
375+
) { index, item ->
375376
VaultVerificationCodeItem(
376-
authCode = it.authCode,
377-
primaryLabel = it.title,
378-
secondaryLabel = it.subtitle,
379-
periodSeconds = it.periodSeconds,
380-
timeLeftSeconds = it.timeLeftSeconds,
381-
alertThresholdSeconds = it.alertThresholdSeconds,
382-
startIcon = it.startIcon,
383-
onItemClick = { onItemClick(it.authCode) },
384-
onDropdownMenuClick = { action ->
385-
onDropdownMenuClick(action, it)
386-
},
387-
showMoveToBitwarden = it.showMoveToBitwarden,
388-
allowLongPress = it.allowLongPressActions,
377+
displayItem = item,
378+
onItemClick = { onItemClick(item.authCode) },
379+
onDropdownMenuClick = { action -> onDropdownMenuClick(action, item) },
389380
cardStyle = state.favoriteItems.toListItemCardStyle(index = index),
390381
modifier = Modifier
391382
.standardHorizontalMargin()
392-
.fillMaxWidth(),
383+
.fillMaxWidth()
384+
.animateItem(),
393385
)
394386
}
395387
}
@@ -422,21 +414,11 @@ private fun ItemListingContent(
422414
itemsIndexed(
423415
items = state.itemList,
424416
key = { _, it -> "local_item_${it.id}" },
425-
) { index, it ->
417+
) { index, item ->
426418
VaultVerificationCodeItem(
427-
authCode = it.authCode,
428-
primaryLabel = it.title,
429-
secondaryLabel = it.subtitle,
430-
periodSeconds = it.periodSeconds,
431-
timeLeftSeconds = it.timeLeftSeconds,
432-
alertThresholdSeconds = it.alertThresholdSeconds,
433-
startIcon = it.startIcon,
434-
onItemClick = { onItemClick(it.authCode) },
435-
onDropdownMenuClick = { action ->
436-
onDropdownMenuClick(action, it)
437-
},
438-
showMoveToBitwarden = it.showMoveToBitwarden,
439-
allowLongPress = it.allowLongPressActions,
419+
displayItem = item,
420+
onItemClick = { onItemClick(item.authCode) },
421+
onDropdownMenuClick = { action -> onDropdownMenuClick(action, item) },
440422
cardStyle = state.itemList.toListItemCardStyle(index = index),
441423
modifier = Modifier
442424
.standardHorizontalMargin()
@@ -449,7 +431,7 @@ private fun ItemListingContent(
449431
when (state.sharedItems) {
450432
is SharedCodesDisplayState.Codes -> {
451433
state.sharedItems.sections.forEachIndexed { index, section ->
452-
item(key = "sharedSection_${section.label}") {
434+
item(key = "sharedSection_${section.id}") {
453435
AuthenticatorExpandingHeader(
454436
label = section.label(),
455437
isExpanded = section.isExpanded,
@@ -473,21 +455,13 @@ private fun ItemListingContent(
473455
itemsIndexed(
474456
items = section.codes,
475457
key = { _, code -> "code_${code.id}" },
476-
) { index, it ->
458+
) { index, item ->
477459
VaultVerificationCodeItem(
478-
authCode = it.authCode,
479-
primaryLabel = it.title,
480-
secondaryLabel = it.subtitle,
481-
periodSeconds = it.periodSeconds,
482-
timeLeftSeconds = it.timeLeftSeconds,
483-
alertThresholdSeconds = it.alertThresholdSeconds,
484-
startIcon = it.startIcon,
485-
onItemClick = { onItemClick(it.authCode) },
460+
displayItem = item,
461+
onItemClick = { onItemClick(item.authCode) },
486462
onDropdownMenuClick = { action ->
487-
onDropdownMenuClick(action, it)
463+
onDropdownMenuClick(action, item)
488464
},
489-
showMoveToBitwarden = it.showMoveToBitwarden,
490-
allowLongPress = it.allowLongPressActions,
491465
cardStyle = section.codes.toListItemCardStyle(index = index),
492466
modifier = Modifier
493467
.standardHorizontalMargin()

authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingViewModel.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ import com.bitwarden.authenticator.data.platform.manager.BitwardenEncodingManage
1818
import com.bitwarden.authenticator.data.platform.manager.clipboard.BitwardenClipboardManager
1919
import com.bitwarden.authenticator.data.platform.manager.imports.model.GoogleAuthenticatorProtos
2020
import com.bitwarden.authenticator.data.platform.repository.SettingsRepository
21-
import com.bitwarden.authenticator.ui.authenticator.feature.itemlisting.model.VaultDropdownMenuAction
22-
import com.bitwarden.authenticator.ui.authenticator.feature.model.SharedCodesDisplayState
23-
import com.bitwarden.authenticator.ui.authenticator.feature.model.VerificationCodeDisplayItem
2421
import com.bitwarden.authenticator.ui.authenticator.feature.util.toDisplayItem
2522
import com.bitwarden.authenticator.ui.authenticator.feature.util.toSharedCodesDisplayState
23+
import com.bitwarden.authenticator.ui.platform.components.listitem.model.SharedCodesDisplayState
24+
import com.bitwarden.authenticator.ui.platform.components.listitem.model.VaultDropdownMenuAction
25+
import com.bitwarden.authenticator.ui.platform.components.listitem.model.VerificationCodeDisplayItem
2626
import com.bitwarden.authenticatorbridge.manager.AuthenticatorBridgeManager
2727
import com.bitwarden.core.data.repository.model.DataState
2828
import com.bitwarden.ui.platform.base.BaseViewModel
@@ -506,17 +506,21 @@ class ItemListingViewModel @Inject constructor(
506506
.map {
507507
it.toDisplayItem(
508508
alertThresholdSeconds = state.alertThresholdSeconds,
509-
sharedVerificationCodesState =
510-
authenticatorRepository.sharedCodesStateFlow.value,
509+
sharedVerificationCodesState = authenticatorRepository
510+
.sharedCodesStateFlow
511+
.value,
512+
allowLongPressActions = true,
511513
)
512514
},
513515
itemList = localItems
514516
.filter { it.source is AuthenticatorItem.Source.Local && !it.source.isFavorite }
515517
.map {
516518
it.toDisplayItem(
517519
alertThresholdSeconds = state.alertThresholdSeconds,
518-
sharedVerificationCodesState =
519-
authenticatorRepository.sharedCodesStateFlow.value,
520+
sharedVerificationCodesState = authenticatorRepository
521+
.sharedCodesStateFlow
522+
.value,
523+
allowLongPressActions = true,
520524
)
521525
},
522526
sharedItems = sharedItemsState,

authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/search/ItemSearchContent.kt

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@ import androidx.compose.runtime.Composable
1313
import androidx.compose.ui.Modifier
1414
import androidx.compose.ui.res.stringResource
1515
import androidx.compose.ui.unit.dp
16-
import com.bitwarden.authenticator.ui.authenticator.feature.model.SharedCodesDisplayState
17-
import com.bitwarden.authenticator.ui.authenticator.feature.model.VerificationCodeDisplayItem
1816
import com.bitwarden.authenticator.ui.authenticator.feature.search.handlers.SearchHandlers
17+
import com.bitwarden.authenticator.ui.platform.components.listitem.VaultVerificationCodeItem
18+
import com.bitwarden.authenticator.ui.platform.components.listitem.model.SharedCodesDisplayState
1919
import com.bitwarden.ui.platform.base.util.standardHorizontalMargin
2020
import com.bitwarden.ui.platform.base.util.toListItemCardStyle
2121
import com.bitwarden.ui.platform.components.header.BitwardenListHeaderText
22-
import com.bitwarden.ui.platform.components.model.CardStyle
2322
import com.bitwarden.ui.platform.resource.BitwardenString
2423
import com.bitwarden.ui.platform.theme.BitwardenTheme
2524

@@ -50,10 +49,11 @@ fun ItemSearchContent(
5049
}
5150
}
5251

53-
itemsIndexed(viewState.itemList) { index, it ->
52+
itemsIndexed(viewState.itemList) { index, item ->
5453
VaultVerificationCodeItem(
55-
displayItem = it,
56-
onCopyClick = searchHandlers.onItemClick,
54+
displayItem = item,
55+
onItemClick = { searchHandlers.onItemClick(item.authCode) },
56+
onDropdownMenuClick = { },
5757
cardStyle = viewState.itemList.toListItemCardStyle(index = index),
5858
modifier = Modifier
5959
.fillMaxWidth()
@@ -97,16 +97,15 @@ private fun LazyListScope.sharedCodes(
9797
Spacer(Modifier.height(height = 12.dp))
9898
}
9999

100-
itemsIndexed(section.codes) { index, it ->
100+
itemsIndexed(section.codes) { index, item ->
101101
VaultVerificationCodeItem(
102-
displayItem = it,
103-
onCopyClick = onCopyClick,
102+
displayItem = item,
103+
onItemClick = { onCopyClick(item.authCode) },
104+
onDropdownMenuClick = { },
104105
cardStyle = section.codes.toListItemCardStyle(index = index),
105106
modifier = Modifier
106107
.fillMaxWidth()
107-
// There is some built-in padding to the menu button that
108-
// makes up the visual difference here.
109-
.padding(start = 16.dp, end = 12.dp),
108+
.standardHorizontalMargin(),
110109
)
111110
}
112111
}
@@ -118,31 +117,9 @@ private fun LazyListScope.sharedCodes(
118117
text = stringResource(BitwardenString.shared_codes_error),
119118
color = BitwardenTheme.colorScheme.text.secondary,
120119
style = BitwardenTheme.typography.bodySmall,
121-
modifier = Modifier.padding(horizontal = 16.dp),
120+
modifier = Modifier.standardHorizontalMargin(),
122121
)
123122
}
124123
}
125124
}
126125
}
127-
128-
@Composable
129-
private fun VaultVerificationCodeItem(
130-
displayItem: VerificationCodeDisplayItem,
131-
cardStyle: CardStyle,
132-
onCopyClick: (authCode: String) -> Unit,
133-
modifier: Modifier = Modifier,
134-
) {
135-
VaultVerificationCodeItem(
136-
authCode = displayItem.authCode,
137-
issuer = displayItem.title,
138-
periodSeconds = displayItem.periodSeconds,
139-
timeLeftSeconds = displayItem.timeLeftSeconds,
140-
alertThresholdSeconds = displayItem.alertThresholdSeconds,
141-
supportingLabel = displayItem.subtitle,
142-
startIcon = displayItem.startIcon,
143-
onCopyClick = { onCopyClick(displayItem.authCode) },
144-
onItemClick = { onCopyClick(displayItem.authCode) },
145-
cardStyle = cardStyle,
146-
modifier = modifier,
147-
)
148-
}

authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/search/ItemSearchViewModel.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import com.bitwarden.authenticator.data.authenticator.manager.model.Verification
77
import com.bitwarden.authenticator.data.authenticator.repository.AuthenticatorRepository
88
import com.bitwarden.authenticator.data.authenticator.repository.model.SharedVerificationCodesState
99
import com.bitwarden.authenticator.data.platform.manager.clipboard.BitwardenClipboardManager
10-
import com.bitwarden.authenticator.ui.authenticator.feature.model.SharedCodesDisplayState
11-
import com.bitwarden.authenticator.ui.authenticator.feature.model.VerificationCodeDisplayItem
1210
import com.bitwarden.authenticator.ui.authenticator.feature.util.toDisplayItem
1311
import com.bitwarden.authenticator.ui.authenticator.feature.util.toSharedCodesDisplayState
12+
import com.bitwarden.authenticator.ui.platform.components.listitem.model.SharedCodesDisplayState
13+
import com.bitwarden.authenticator.ui.platform.components.listitem.model.VerificationCodeDisplayItem
1414
import com.bitwarden.core.data.repository.model.DataState
1515
import com.bitwarden.ui.platform.base.BaseViewModel
1616
import com.bitwarden.ui.platform.base.util.removeDiacritics
@@ -190,6 +190,7 @@ class ItemSearchViewModel @Inject constructor(
190190
sharedVerificationCodesState = authenticatorRepository
191191
.sharedCodesStateFlow
192192
.value,
193+
allowLongPressActions = false,
193194
)
194195
},
195196
sharedItems = sharedItemsState,

authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/search/VaultVerificationCodeItem.kt

Lines changed: 0 additions & 143 deletions
This file was deleted.

0 commit comments

Comments
 (0)