From 9712bc2c1c109617f3d3c20b5acc38967b2b3aa3 Mon Sep 17 00:00:00 2001 From: Gibran Chevalley Date: Fri, 11 Oct 2024 15:59:40 +0200 Subject: [PATCH] Extract composables into a SelectedFilesCard for readability --- .../importfiles/ImportFilesScreen.kt | 130 ++++++++++-------- 1 file changed, 74 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ImportFilesScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ImportFilesScreen.kt index 55753d06ab..544544bf25 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ImportFilesScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/ImportFilesScreen.kt @@ -105,56 +105,13 @@ private fun ImportFilesScreen( ) }, content = { - SwissTransferCard(Modifier.padding(Margin.Medium)) { - SharpRippleButton(onClick = { /*TODO*/ }) { - Text( - pluralStringResource(R.plurals.filesCount, fileCount, fileCount), - modifier = Modifier.padding(start = Margin.Medium), - color = SwissTransferTheme.colors.secondaryTextColor, - style = SwissTransferTheme.typography.bodySmallRegular, - ) - Text( - "•", - modifier = Modifier.padding(horizontal = Margin.Small), - color = SwissTransferTheme.colors.secondaryTextColor, - style = SwissTransferTheme.typography.bodySmallRegular, - ) - Text( - formatSpaceLeft(formattedSizeWithUnits), - color = SwissTransferTheme.colors.secondaryTextColor, - style = SwissTransferTheme.typography.bodySmallRegular, - ) - Spacer(modifier = Modifier.weight(1f)) - Icon( - imageVector = AppImages.AppIcons.ChevronRightSmall, - contentDescription = null, - modifier = Modifier.padding(Margin.Medium), - tint = SwissTransferTheme.colors.iconColor - ) - } - - LazyRow( - Modifier.fillMaxWidth(), - contentPadding = PaddingValues(Margin.Medium), - horizontalArrangement = Arrangement.spacedBy(Margin.Medium) - ) { - item(key = TransferLazyRowKey(TransferLazyRowKey.Type.ADD_BUTTON)) { - AddNewFileButton(Modifier.animateItem()) { showUploadSourceChoiceBottomSheet = true } - } - - items( - items = files(), - key = { TransferLazyRowKey(TransferLazyRowKey.Type.FILE, it.uid) }, - ) { file -> - SmallFileTile( - modifier = Modifier.animateItem(), - file = file, - smallFileTileSize = SmallFileTileSize.LARGE, - onRemove = { removeFileByUid(file.uid) } - ) - } - } - } + SelectedFilesCard( + fileCount = { fileCount }, + formattedSizeWithUnits = { formattedSizeWithUnits }, + showUploadSourceChoiceBottomSheet = { showUploadSourceChoiceBottomSheet = true }, + files = files, + removeFileByUid = removeFileByUid, + ) UploadSourceChoiceBottomSheet( isBottomSheetVisible = { showUploadSourceChoiceBottomSheet }, @@ -165,6 +122,67 @@ private fun ImportFilesScreen( ) } +@Composable +private fun SelectedFilesCard( + fileCount: () -> Int, + formattedSizeWithUnits: () -> String, + showUploadSourceChoiceBottomSheet: () -> Unit, + files: () -> List, + removeFileByUid: (uid: String) -> Unit +) { + SwissTransferCard(Modifier.padding(Margin.Medium)) { + SharpRippleButton(onClick = { /*TODO*/ }) { + val count = fileCount() + Text( + pluralStringResource(R.plurals.filesCount, count, count), + modifier = Modifier.padding(start = Margin.Medium), + color = SwissTransferTheme.colors.secondaryTextColor, + style = SwissTransferTheme.typography.bodySmallRegular, + ) + Text( + "•", + modifier = Modifier.padding(horizontal = Margin.Small), + color = SwissTransferTheme.colors.secondaryTextColor, + style = SwissTransferTheme.typography.bodySmallRegular, + ) + Text( + formatSpaceLeft(formattedSizeWithUnits), + color = SwissTransferTheme.colors.secondaryTextColor, + style = SwissTransferTheme.typography.bodySmallRegular, + ) + Spacer(modifier = Modifier.weight(1f)) + Icon( + imageVector = AppImages.AppIcons.ChevronRightSmall, + contentDescription = null, + modifier = Modifier.padding(Margin.Medium), + tint = SwissTransferTheme.colors.iconColor + ) + } + + LazyRow( + Modifier.fillMaxWidth(), + contentPadding = PaddingValues(Margin.Medium), + horizontalArrangement = Arrangement.spacedBy(Margin.Medium) + ) { + item(key = TransferLazyRowKey(TransferLazyRowKey.Type.ADD_BUTTON)) { + AddNewFileButton(Modifier.animateItem()) { showUploadSourceChoiceBottomSheet() } + } + + items( + items = files(), + key = { TransferLazyRowKey(TransferLazyRowKey.Type.FILE, it.uid) }, + ) { file -> + SmallFileTile( + modifier = Modifier.animateItem(), + file = file, + smallFileTileSize = SmallFileTileSize.LARGE, + onRemove = { removeFileByUid(file.uid) } + ) + } + } + } +} + @Composable private fun AddNewFileButton(modifier: Modifier = Modifier, onClick: () -> Unit) { Button( @@ -190,17 +208,17 @@ private fun getFormattedSizeWithUnits(usedSpace: Long, context: Context): String } @Composable -private fun formatSpaceLeft(formattedSizeWithUnits: String): String { - val quantity = getQuantityFromFormattedSizeWithUnits(formattedSizeWithUnits) - return pluralStringResource(R.plurals.transferSpaceLeft, quantity, formattedSizeWithUnits) +private fun formatSpaceLeft(formattedSizeWithUnits: () -> String): String { + val formattedSize = formattedSizeWithUnits() + val quantity = LocalContext.current.getQuantityFromFormattedSizeWithUnits(formattedSize) + return pluralStringResource(R.plurals.transferSpaceLeft, quantity, formattedSize) } -@Composable -private fun getQuantityFromFormattedSizeWithUnits(formattedSize: String): Int { +private fun Context.getQuantityFromFormattedSizeWithUnits(formattedSize: String): Int { val sizeParts = formattedSize.split(' ', Typography.nbsp) // Space for languages such as EN and NBSP for languages such as FR return if (sizeParts.size == 2) { - val local = LocalContext.current.resources.configuration.getLocales().get(0) + val local = resources.configuration.getLocales().get(0) val parsedNumber = NumberFormat.getInstance(local).parse(sizeParts[0]) parsedNumber?.toDouble()?.toInt() ?: 0 } else {