From 2e76ce4c4eb286bcd1153d136517fa613d82e9fc Mon Sep 17 00:00:00 2001 From: Fabian Devel Date: Tue, 15 Oct 2024 17:05:07 +0200 Subject: [PATCH 1/5] feat(TransferTypesButtons): Add icons files --- .../swisstransfer/ui/images/icons/Chain.kt | 82 +++++++++++++ .../swisstransfer/ui/images/icons/Envelope.kt | 75 ++++++++++++ .../swisstransfer/ui/images/icons/QrCode.kt | 108 ++++++++++++++++++ .../swisstransfer/ui/images/icons/WifiWave.kt | 68 +++++++++++ 4 files changed, 333 insertions(+) create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Chain.kt create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Envelope.kt create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/QrCode.kt create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/WifiWave.kt diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Chain.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Chain.kt new file mode 100644 index 000000000..99555e643 --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Chain.kt @@ -0,0 +1,82 @@ +package com.infomaniak.swisstransfer.ui.images.icons + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType.Companion.NonZero +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.ImageVector.Builder +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.infomaniak.swisstransfer.ui.images.AppImages +import com.infomaniak.swisstransfer.ui.images.AppImages.AppIcons +import androidx.compose.ui.graphics.StrokeCap.Companion.Round as strokeCapRound +import androidx.compose.ui.graphics.StrokeJoin.Companion.Round as strokeJoinRound + +val AppIcons.Chain: ImageVector + get() { + if (_chain != null) return _chain!! + + _chain = Builder( + name = "Chain", + defaultWidth = 24.0.dp, + defaultHeight = 24.0.dp, + viewportWidth = 24.0f, + viewportHeight = 24.0f, + ).apply { + group { + path( + fill = null, + stroke = SolidColor(Color(0xFF9F9F9F)), + strokeLineWidth = 1.5f, + strokeLineCap = strokeCapRound, + strokeLineJoin = strokeJoinRound, + strokeLineMiter = 4.0f, + pathFillType = NonZero, + ) { + moveTo(9.365f, 19.127f) + lineToRelative(-0.932f, 0.932f) + arcToRelative(4.5f, 4.5f, 0.0f, false, true, -6.364f, -6.364f) + lineTo(6.842f, 8.92f) + arcToRelative(4.5f, 4.5f, 0.0f, false, true, 6.826f, 5.825f) + } + path( + fill = null, + stroke = SolidColor(Color(0xFF9F9F9F)), + strokeLineWidth = 1.5f, + strokeLineCap = strokeCapRound, + strokeLineJoin = strokeJoinRound, + strokeLineMiter = 4.0f, + pathFillType = NonZero + ) { + moveTo(14.82f, 6.194f) + lineToRelative(0.75f, -0.75f) + arcToRelative(4.5f, 4.5f, 0.0f, true, true, 6.363f, 6.364f) + lineTo(17.16f, 16.58f) + arcToRelative(4.5f, 4.5f, 0.0f, false, true, -6.824f, -5.826f) + } + } + }.build() + return _chain!! + } + +private var _chain: ImageVector? = null + +@Preview +@Composable +private fun Preview() { + Box { + Image( + imageVector = AppIcons.Chain, + contentDescription = null, + modifier = Modifier.size(AppImages.previewSize) + ) + } +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Envelope.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Envelope.kt new file mode 100644 index 000000000..bbd5b3195 --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Envelope.kt @@ -0,0 +1,75 @@ +package com.infomaniak.swisstransfer.ui.images.icons + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType.Companion.NonZero +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.ImageVector.Builder +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.infomaniak.swisstransfer.ui.images.AppImages +import com.infomaniak.swisstransfer.ui.images.AppImages.AppIcons +import androidx.compose.ui.graphics.StrokeCap.Companion.Round as strokeCapRound +import androidx.compose.ui.graphics.StrokeJoin.Companion.Round as strokeJoinRound + +val AppIcons.Envelope: ImageVector + get() { + if (_envelope != null) return _envelope!! + + _envelope = Builder( + name = "Envelope", + defaultWidth = 24.0.dp, + defaultHeight = 24.0.dp, + viewportWidth = 24.0f, + viewportHeight = 24.0f, + ).apply { + path( + fill = null, + stroke = SolidColor(Color(0xFF9F9F9F)), + strokeLineWidth = 1.5f, + strokeLineCap = strokeCapRound, + strokeLineJoin = strokeJoinRound, + strokeLineMiter = 4.0f, + pathFillType = NonZero, + ) { + moveTo(1.22f, 5.695f) + curveToRelative(-0.3f, 0.282f, -0.47f, 0.663f, -0.47f, 1.061f) + verticalLineToRelative(12.0f) + curveToRelative(0.0f, 0.398f, 0.17f, 0.78f, 0.47f, 1.06f) + curveToRelative(0.302f, 0.282f, 0.71f, 0.44f, 1.137f, 0.44f) + horizontalLineToRelative(19.286f) + curveToRelative(0.426f, 0.0f, 0.835f, -0.158f, 1.136f, -0.44f) + curveToRelative(0.302f, -0.28f, 0.471f, -0.662f, 0.471f, -1.06f) + verticalLineToRelative(-12.0f) + curveToRelative(0.0f, -0.398f, -0.17f, -0.78f, -0.47f, -1.06f) + moveToRelative(-21.56f, 0.0f) + curveToRelative(0.302f, -0.282f, 0.71f, -0.44f, 1.137f, -0.44f) + horizontalLineToRelative(19.286f) + curveToRelative(0.426f, 0.0f, 0.835f, 0.158f, 1.136f, 0.44f) + moveToRelative(-21.558f, 0.0f) + lineToRelative(8.618f, 6.374f) + arcTo(3.7f, 3.7f, 0.0f, false, false, 12.0f, 12.756f) + arcToRelative(3.7f, 3.7f, 0.0f, false, false, 2.161f, -0.686f) + lineToRelative(8.618f, -6.375f) + } + }.build() + return _envelope!! + } + +private var _envelope: ImageVector? = null + +@Preview +@Composable +private fun Preview() { + Box { + Image( + imageVector = AppIcons.Envelope, contentDescription = null, modifier = Modifier.size(AppImages.previewSize) + ) + } +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/QrCode.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/QrCode.kt new file mode 100644 index 000000000..dcdfffe76 --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/QrCode.kt @@ -0,0 +1,108 @@ +package com.infomaniak.swisstransfer.ui.images.icons + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType.Companion.NonZero +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.ImageVector.Builder +import androidx.compose.ui.graphics.vector.group +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.infomaniak.swisstransfer.ui.images.AppImages +import com.infomaniak.swisstransfer.ui.images.AppImages.AppIcons +import androidx.compose.ui.graphics.StrokeCap.Companion.Round as strokeCapRound +import androidx.compose.ui.graphics.StrokeJoin.Companion.Round as strokeJoinRound + +val AppIcons.QrCode: ImageVector + get() { + if (_qrCode != null) return _qrCode!! + + _qrCode = Builder( + name = "QrCode", + defaultWidth = 24.0.dp, + defaultHeight = 25.0.dp, + viewportWidth = 24.0f, + viewportHeight = 25.0f, + ).apply { + group { + path( + fill = null, + stroke = SolidColor(Color(0xFF9F9F9F)), + strokeLineWidth = 1.5f, + strokeLineCap = strokeCapRound, + strokeLineJoin = strokeJoinRound, + strokeLineMiter = 4.0f, + pathFillType = NonZero, + ) { + moveTo(5.25f, 6.033f) + horizontalLineToRelative(3.0f) + verticalLineToRelative(3.0f) + horizontalLineToRelative(-3.0f) + close() + moveToRelative(0.0f, 10.5f) + horizontalLineToRelative(3.0f) + verticalLineToRelative(3.0f) + horizontalLineToRelative(-3.0f) + close() + moveToRelative(10.5f, -10.5f) + horizontalLineToRelative(3.0f) + verticalLineToRelative(3.0f) + horizontalLineToRelative(-3.0f) + close() + moveToRelative(-10.5f, 7.5f) + horizontalLineToRelative(6.0f) + verticalLineToRelative(1.5f) + moveToRelative(3.0f, 0.0f) + verticalLineToRelative(4.5f) + horizontalLineToRelative(4.5f) + verticalLineToRelative(-4.5f) + horizontalLineToRelative(-1.5f) + moveToRelative(-6.0f, 3.0f) + verticalLineToRelative(1.5f) + moveToRelative(0.0f, -13.5f) + verticalLineToRelative(4.5f) + horizontalLineToRelative(1.5f) + moveToRelative(3.0f, 1.5f) + horizontalLineToRelative(3.0f) + moveToRelative(-18.0f, -5.25f) + verticalLineToRelative(-3.75f) + arcToRelative(1.5f, 1.5f, 0.0f, false, true, 1.5f, -1.5f) + horizontalLineTo(6.0f) + moveToRelative(12.0f, 0.0f) + horizontalLineToRelative(3.75f) + arcToRelative(1.5f, 1.5f, 0.0f, false, true, 1.5f, 1.5f) + verticalLineToRelative(3.75f) + moveToRelative(0.0f, 12.0f) + verticalLineToRelative(3.75f) + arcToRelative(1.5f, 1.5f, 0.0f, false, true, -1.5f, 1.5f) + horizontalLineTo(18.0f) + moveToRelative(-12.0f, 0.0f) + horizontalLineTo(2.25f) + arcToRelative(1.5f, 1.5f, 0.0f, false, true, -1.5f, -1.5f) + verticalLineToRelative(-3.75f) + } + } + }.build() + return _qrCode!! + } + +private var _qrCode: ImageVector? = null + +@Preview +@Composable +private fun Preview() { + Box { + Image( + imageVector = AppIcons.QrCode, + contentDescription = null, + modifier = Modifier.size(AppImages.previewSize) + ) + } +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/WifiWave.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/WifiWave.kt new file mode 100644 index 000000000..3a055d780 --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/WifiWave.kt @@ -0,0 +1,68 @@ +package com.infomaniak.swisstransfer.ui.images.icons + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.PathFillType.Companion.NonZero +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.ImageVector.Builder +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.infomaniak.swisstransfer.ui.images.AppImages +import com.infomaniak.swisstransfer.ui.images.AppImages.AppIcons +import androidx.compose.ui.graphics.StrokeCap.Companion.Round as strokeCapRound +import androidx.compose.ui.graphics.StrokeJoin.Companion.Round as strokeJoinRound + +val AppIcons.WifiWave: ImageVector + get() { + if (_wifiWave != null) return _wifiWave!! + + _wifiWave = Builder( + name = "WifiWave", + defaultWidth = 24.0.dp, + defaultHeight = 24.0.dp, + viewportWidth = 24.0f, + viewportHeight = 24.0f, + ).apply { + path( + fill = null, + stroke = SolidColor(Color(0xFF9F9F9F)), + strokeLineWidth = 1.5f, + strokeLineCap = strokeCapRound, + strokeLineJoin = strokeJoinRound, + strokeLineMiter = 4.0f, + pathFillType = NonZero, + ) { + moveTo(9.0f, 19.632f) + arcToRelative(3.0f, 3.0f, 0.0f, true, false, 6.0f, 0.0f) + arcToRelative(3.0f, 3.0f, 0.0f, false, false, -6.0f, 0.0f) + moveToRelative(8.3f, -5.303f) + arcToRelative(7.5f, 7.5f, 0.0f, false, false, -10.606f, 0.0f) + moveToRelative(13.791f, -3.182f) + arcToRelative(12.0f, 12.0f, 0.0f, false, false, -16.97f, 0.0f) + moveTo(23.25f, 7.563f) + arcToRelative(16.5f, 16.5f, 0.0f, false, false, -22.5f, 0.0f) + } + }.build() + return _wifiWave!! + } + +private var _wifiWave: ImageVector? = null + +@Preview +@Composable +private fun Preview() { + Box { + Image( + imageVector = AppIcons.WifiWave, + contentDescription = null, + modifier = Modifier.size(AppImages.previewSize) + ) + } +} \ No newline at end of file From 28b2877d6b6623d4cd1ade255e3e566191138760 Mon Sep 17 00:00:00 2001 From: Fabian Devel Date: Wed, 16 Oct 2024 12:46:59 +0200 Subject: [PATCH 2/5] feat(TransferTypesButtons): Add components --- .../swisstransfer/ui/components/Buttons.kt | 2 +- .../importfiles/TransferTypeScreen.kt | 43 +------- .../components/TransferTypeButton.kt | 78 +++++++++++++ .../components/TransferTypeButtons.kt | 103 +++++------------- 4 files changed, 109 insertions(+), 117 deletions(-) create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/components/Buttons.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/Buttons.kt index 0afd43465..2b70524e4 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/components/Buttons.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/Buttons.kt @@ -112,7 +112,7 @@ enum class ButtonType(val buttonColors: @Composable () -> ButtonColors) { }), } -private enum class ButtonSize(val height: Dp) { +enum class ButtonSize(val height: Dp) { LARGE(56.dp), SMALL(40.dp), } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferTypeScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferTypeScreen.kt index 74dd6584c..698932bff 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferTypeScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferTypeScreen.kt @@ -17,7 +17,6 @@ */ package com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles -import androidx.annotation.StringRes import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -25,18 +24,12 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar import com.infomaniak.swisstransfer.ui.components.TopAppBarButton -import com.infomaniak.swisstransfer.ui.images.AppImages.AppIllus -import com.infomaniak.swisstransfer.ui.images.illus.ChainTilted -import com.infomaniak.swisstransfer.ui.images.illus.EnvelopeTilted -import com.infomaniak.swisstransfer.ui.images.illus.QrCodeTilted -import com.infomaniak.swisstransfer.ui.images.illus.WaveSignalTilted +import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.components.TransferType import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.components.TransferTypeButtons import com.infomaniak.swisstransfer.ui.theme.Margin import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme @@ -68,43 +61,11 @@ fun TransferTypeScreen(navigateToTransfer: (TransferType) -> Unit, popBack: () - textAlign = TextAlign.Center, ) - TransferTypeButtons(TransferType.entries, navigateToTransfer) + TransferTypeButtons(TransferType.LINK) } } } -enum class TransferType( - @StringRes val titleRes: Int, - val background: @Composable () -> Color, - val foreground: @Composable () -> Color, - val icon: ImageVector, -) { - LINK( - titleRes = R.string.transferTypeLink, - background = { SwissTransferTheme.colors.transferTypeLinkContainer }, - foreground = { SwissTransferTheme.colors.transferTypeLinkOnContainer }, - icon = AppIllus.ChainTilted, - ), - EMAIL( - titleRes = R.string.transferTypeEmail, - background = { SwissTransferTheme.colors.transferTypeEmailContainer }, - foreground = { SwissTransferTheme.colors.transferTypeEmailOnContainer }, - icon = AppIllus.EnvelopeTilted, - ), - QR_CODE( - titleRes = R.string.transferTypeQrCode, - background = { SwissTransferTheme.colors.transferTypeQrContainer }, - foreground = { SwissTransferTheme.colors.transferTypeQrOnContainer }, - icon = AppIllus.QrCodeTilted, - ), - PROXIMITY( - titleRes = R.string.transferTypeProximity, - background = { SwissTransferTheme.colors.transferTypeProximityContainer }, - foreground = { SwissTransferTheme.colors.transferTypeProximityOnContainer }, - icon = AppIllus.WaveSignalTilted, - ), -} - @PreviewSmallWindow @PreviewLargeWindow @Composable diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt new file mode 100644 index 000000000..5e4bf7e1a --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt @@ -0,0 +1,78 @@ +/* + * Infomaniak SwissTransfer - Android + * Copyright (C) 2024 Infomaniak Network SA + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.components + +import android.content.res.Configuration +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.* +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.infomaniak.swisstransfer.ui.components.ButtonSize +import com.infomaniak.swisstransfer.ui.theme.Margin +import com.infomaniak.swisstransfer.ui.theme.Shapes +import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme + +@Composable +fun TransferTypeButton( + transferType: TransferType, + isActive: () -> Boolean, +) { + val (borderColor, contentColor) = if (isActive()) { + SwissTransferTheme.materialColors.primary to SwissTransferTheme.materialColors.primary + } else { + SwissTransferTheme.materialColors.outlineVariant to SwissTransferTheme.colors.secondaryTextColor + } + Button( + modifier = Modifier + .padding(Margin.XSmall) + .height(ButtonSize.LARGE.height) + .border(width = 1.dp, color = borderColor, shape = Shapes.small), + shape = Shapes.small, + colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent, contentColor = contentColor), + onClick = transferType.onClick, + contentPadding = PaddingValues(Margin.Medium), + ) { + Icon(modifier = Modifier.size(Margin.Medium), imageVector = transferType.buttonIcon, contentDescription = null) + Spacer(modifier = Modifier.width(Margin.Small)) + Text(text = stringResource(id = transferType.buttonText), style = SwissTransferTheme.typography.bodyRegular) + } +} + +@Preview(name = "Light") +@Preview(name = "Dark", uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL) +@Composable +private fun TransferTypeButtonPreview() { + SwissTransferTheme { + Surface { + Column { + TransferType.entries.forEach { entry -> + TransferTypeButton( + transferType = entry, + isActive = { entry.ordinal == 0 } + ) + } + } + } + } +} + diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt index f73bbbef2..8c6b0df6b 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt @@ -18,93 +18,46 @@ package com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.components import android.content.res.Configuration -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.items -import androidx.compose.material3.* +import androidx.annotation.StringRes +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.rememberScrollState +import androidx.compose.material3.Surface import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.TransferType +import com.infomaniak.swisstransfer.R +import com.infomaniak.swisstransfer.ui.images.AppImages.AppIcons +import com.infomaniak.swisstransfer.ui.images.icons.Chain +import com.infomaniak.swisstransfer.ui.images.icons.Envelope +import com.infomaniak.swisstransfer.ui.images.icons.QrCode +import com.infomaniak.swisstransfer.ui.images.icons.WifiWave import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme -private val SPACE_AROUND_BUTTONS = 20.dp -private val COLUMN_MIN_WIDTH = 150.dp - @Composable -fun TransferTypeButtons(items: List, navigateToTransfer: (TransferType) -> Unit) { - LazyVerticalGrid( - modifier = Modifier - .padding(horizontal = SPACE_AROUND_BUTTONS) - .wrapContentHeight(), - userScrollEnabled = false, - columns = GridCells.Adaptive(COLUMN_MIN_WIDTH), - verticalArrangement = Arrangement.spacedBy(SPACE_AROUND_BUTTONS), - horizontalArrangement = Arrangement.spacedBy(SPACE_AROUND_BUTTONS), - ) { - items(items = items, key = { it.titleRes }) { item -> - TransferTypeButton( - modifier = Modifier.aspectRatio(0.87f), - item = item, - onClick = { navigateToTransfer(item) }, - ) - } - } -} +fun TransferTypeButtons(selectedTransferType: TransferType) { -@Composable -private fun TransferTypeButton(modifier: Modifier = Modifier, item: TransferType, onClick: () -> Unit) { - Button( - contentPadding = PaddingValues(0.dp), - modifier = modifier.fillMaxSize(), - colors = ButtonDefaults.buttonColors(containerColor = item.background(), contentColor = item.foreground()), - shape = ShapeDefaults.Medium, - onClick = onClick, - ) { - Box(modifier = Modifier.fillMaxSize()) { - Text( - modifier = Modifier - .fillMaxHeight(0.80f) - .align(Alignment.BottomCenter), - text = stringResource(id = item.titleRes), - textAlign = TextAlign.Center, - style = SwissTransferTheme.typography.bodyMedium, - ) + val selectedItem by rememberSaveable { mutableStateOf(selectedTransferType) } - Icon( - modifier = Modifier - .fillMaxWidth(0.75f) - .align(Alignment.BottomCenter), - imageVector = item.icon, - contentDescription = null, + Row(modifier = Modifier.horizontalScroll(rememberScrollState())) { + for (entry in TransferType.entries) { + TransferTypeButton( + transferType = entry, + isActive = { entry == selectedItem }, ) } } } -@Preview(name = "Light") -@Preview(name = "Dark", uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL) -@Composable -private fun TransferTypeButtonPreview() { - SwissTransferTheme { - Surface { - Column { - TransferType.entries.forEach { entry -> - TransferTypeButton( - modifier = Modifier - .size(160.dp, 200.dp) - .padding(20.dp), - item = entry, - ) {} - } - } - } - } +enum class TransferType(val buttonIcon: ImageVector, @StringRes val buttonText: Int, val onClick: () -> Unit = {}) { + LINK(buttonIcon = AppIcons.Chain, buttonText = R.string.transferTypeLink), + QR_CODE(buttonIcon = AppIcons.QrCode, buttonText = R.string.transferTypeQrCode), + PROXIMITY(buttonIcon = AppIcons.WifiWave, buttonText = R.string.transferTypeProximity), + MAIL(buttonIcon = AppIcons.Envelope, buttonText = R.string.transferTypeEmail), } @Preview(name = "Light") @@ -113,7 +66,7 @@ private fun TransferTypeButtonPreview() { private fun TransferTypeButtonsPreview() { SwissTransferTheme { Surface { - TransferTypeButtons(TransferType.entries) {} + TransferTypeButtons(selectedTransferType = TransferType.QR_CODE) } } } From 525ee3fcac6622faa3c543e82527cbfd0af04b78 Mon Sep 17 00:00:00 2001 From: Fabian Devel Date: Wed, 16 Oct 2024 12:51:32 +0200 Subject: [PATCH 3/5] feat(TransferTypesButtons): Remove old TransferScreen --- .../screen/newtransfer/NewTransferNavHost.kt | 8 -- .../importfiles/TransferTypeScreen.kt | 76 ------------------- 2 files changed, 84 deletions(-) delete mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferTypeScreen.kt diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/NewTransferNavHost.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/NewTransferNavHost.kt index 12a3530db..4a1e59b66 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/NewTransferNavHost.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/NewTransferNavHost.kt @@ -25,7 +25,6 @@ import com.infomaniak.swisstransfer.ui.navigation.NewTransferNavigation import com.infomaniak.swisstransfer.ui.navigation.NewTransferNavigation.* import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.ImportFilesScreen import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.TransferOptionsScreen -import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.TransferTypeScreen import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.ValidateUserEmailScreen import com.infomaniak.swisstransfer.ui.screen.newtransfer.upload.UploadProgressScreen import com.infomaniak.swisstransfer.ui.screen.newtransfer.upload.UploadSuccessScreen @@ -40,13 +39,6 @@ fun NewTransferNavHost(navController: NavHostController, closeActivity: () -> Un closeActivity = closeActivity, ) } - composable { - TransferTypeScreen( - navigateToTransfer = { /* TODO */ }, - popBack = { navController.navigateUp() }, - closeActivity = closeActivity, - ) - } composable { TransferOptionsScreen() } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferTypeScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferTypeScreen.kt deleted file mode 100644 index 698932bff..000000000 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/TransferTypeScreen.kt +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Infomaniak SwissTransfer - Android - * Copyright (C) 2024 Infomaniak Network SA - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign -import com.infomaniak.swisstransfer.R -import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar -import com.infomaniak.swisstransfer.ui.components.TopAppBarButton -import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.components.TransferType -import com.infomaniak.swisstransfer.ui.screen.newtransfer.importfiles.components.TransferTypeButtons -import com.infomaniak.swisstransfer.ui.theme.Margin -import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme -import com.infomaniak.swisstransfer.ui.utils.PreviewLargeWindow -import com.infomaniak.swisstransfer.ui.utils.PreviewSmallWindow - -@Composable -fun TransferTypeScreen(navigateToTransfer: (TransferType) -> Unit, popBack: () -> Unit, closeActivity: () -> Unit) { - Scaffold( - topBar = { - SwissTransferTopAppBar( - titleRes = R.string.transferTypeScreenTitle, - navigationMenu = TopAppBarButton.backButton(popBack), - TopAppBarButton.closeButton { closeActivity() }, - ) - }, - ) { contentPaddings -> - Column( - modifier = Modifier - .fillMaxWidth() - .padding(contentPaddings), - ) { - Text( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = Margin.Large, horizontal = Margin.Medium), - text = stringResource(R.string.transferTypeTitle), - style = SwissTransferTheme.typography.h1, - textAlign = TextAlign.Center, - ) - - TransferTypeButtons(TransferType.LINK) - } - } -} - -@PreviewSmallWindow -@PreviewLargeWindow -@Composable -private fun TransferTypeScreenPreview() { - SwissTransferTheme { - TransferTypeScreen({}, {}, {}) - } -} From ebb44dc98e548edbae43f5bd5a64ee85e7d218b5 Mon Sep 17 00:00:00 2001 From: Fabian Devel Date: Wed, 16 Oct 2024 13:12:00 +0200 Subject: [PATCH 4/5] chore(TransferTypeButtons): Clean code --- .../swisstransfer/ui/images/icons/WifiWave.kt | 3 +-- .../importfiles/components/TransferTypeButton.kt | 3 ++- .../importfiles/components/TransferTypeButtons.kt | 15 +++++++++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/WifiWave.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/WifiWave.kt index 3a055d780..22c71372b 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/WifiWave.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/WifiWave.kt @@ -2,7 +2,6 @@ package com.infomaniak.swisstransfer.ui.images.icons import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -65,4 +64,4 @@ private fun Preview() { modifier = Modifier.size(AppImages.previewSize) ) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt index 5e4bf7e1a..b5c02a72d 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt @@ -42,6 +42,7 @@ fun TransferTypeButton( } else { SwissTransferTheme.materialColors.outlineVariant to SwissTransferTheme.colors.secondaryTextColor } + Button( modifier = Modifier .padding(Margin.XSmall) @@ -54,7 +55,7 @@ fun TransferTypeButton( ) { Icon(modifier = Modifier.size(Margin.Medium), imageVector = transferType.buttonIcon, contentDescription = null) Spacer(modifier = Modifier.width(Margin.Small)) - Text(text = stringResource(id = transferType.buttonText), style = SwissTransferTheme.typography.bodyRegular) + Text(text = stringResource(transferType.buttonText), style = SwissTransferTheme.typography.bodySmallRegular) } } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt index 8c6b0df6b..254ac8e4e 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt @@ -21,6 +21,7 @@ import android.content.res.Configuration import androidx.annotation.StringRes import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.material3.Surface import androidx.compose.runtime.Composable @@ -36,6 +37,7 @@ import com.infomaniak.swisstransfer.ui.images.icons.Chain import com.infomaniak.swisstransfer.ui.images.icons.Envelope import com.infomaniak.swisstransfer.ui.images.icons.QrCode import com.infomaniak.swisstransfer.ui.images.icons.WifiWave +import com.infomaniak.swisstransfer.ui.theme.Margin import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme @Composable @@ -43,16 +45,21 @@ fun TransferTypeButtons(selectedTransferType: TransferType) { val selectedItem by rememberSaveable { mutableStateOf(selectedTransferType) } - Row(modifier = Modifier.horizontalScroll(rememberScrollState())) { - for (entry in TransferType.entries) { + Row( + modifier = Modifier + .horizontalScroll(rememberScrollState()) + .padding(horizontal = Margin.Small), + ) { + for (transferTypeEntry in TransferType.entries) { TransferTypeButton( - transferType = entry, - isActive = { entry == selectedItem }, + transferType = transferTypeEntry, + isActive = { transferTypeEntry == selectedItem }, ) } } } +// TODO: onClick enum class TransferType(val buttonIcon: ImageVector, @StringRes val buttonText: Int, val onClick: () -> Unit = {}) { LINK(buttonIcon = AppIcons.Chain, buttonText = R.string.transferTypeLink), QR_CODE(buttonIcon = AppIcons.QrCode, buttonText = R.string.transferTypeQrCode), From b8c5080c91b44be4dc2dc303dfe19dc985af5af9 Mon Sep 17 00:00:00 2001 From: Fabian Devel Date: Wed, 16 Oct 2024 15:13:11 +0200 Subject: [PATCH 5/5] chore(TransferTypeButtons): Apply suggestions --- .../swisstransfer/ui/components/Buttons.kt | 5 +- .../swisstransfer/ui/images/icons/Chain.kt | 62 +++++++++---------- .../components/TransferTypeButton.kt | 10 +-- .../components/TransferTypeButtons.kt | 10 +-- .../swisstransfer/ui/theme/Dimens.kt | 1 + 5 files changed, 44 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/components/Buttons.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/Buttons.kt index 2b70524e4..083ae2d95 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/components/Buttons.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/Buttons.kt @@ -32,6 +32,7 @@ import androidx.compose.ui.unit.dp import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.images.AppImages.AppIcons import com.infomaniak.swisstransfer.ui.images.icons.Add +import com.infomaniak.swisstransfer.ui.theme.Dimens import com.infomaniak.swisstransfer.ui.theme.Margin import com.infomaniak.swisstransfer.ui.theme.Shapes import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme @@ -112,8 +113,8 @@ enum class ButtonType(val buttonColors: @Composable () -> ButtonColors) { }), } -enum class ButtonSize(val height: Dp) { - LARGE(56.dp), +private enum class ButtonSize(val height: Dp) { + LARGE(Dimens.LargeButtonHeight), SMALL(40.dp), } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Chain.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Chain.kt index 99555e643..d11718e8c 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Chain.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/images/icons/Chain.kt @@ -2,7 +2,6 @@ package com.infomaniak.swisstransfer.ui.images.icons import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -11,7 +10,6 @@ import androidx.compose.ui.graphics.PathFillType.Companion.NonZero import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector.Builder -import androidx.compose.ui.graphics.vector.group import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -31,37 +29,35 @@ val AppIcons.Chain: ImageVector viewportWidth = 24.0f, viewportHeight = 24.0f, ).apply { - group { - path( - fill = null, - stroke = SolidColor(Color(0xFF9F9F9F)), - strokeLineWidth = 1.5f, - strokeLineCap = strokeCapRound, - strokeLineJoin = strokeJoinRound, - strokeLineMiter = 4.0f, - pathFillType = NonZero, - ) { - moveTo(9.365f, 19.127f) - lineToRelative(-0.932f, 0.932f) - arcToRelative(4.5f, 4.5f, 0.0f, false, true, -6.364f, -6.364f) - lineTo(6.842f, 8.92f) - arcToRelative(4.5f, 4.5f, 0.0f, false, true, 6.826f, 5.825f) - } - path( - fill = null, - stroke = SolidColor(Color(0xFF9F9F9F)), - strokeLineWidth = 1.5f, - strokeLineCap = strokeCapRound, - strokeLineJoin = strokeJoinRound, - strokeLineMiter = 4.0f, - pathFillType = NonZero - ) { - moveTo(14.82f, 6.194f) - lineToRelative(0.75f, -0.75f) - arcToRelative(4.5f, 4.5f, 0.0f, true, true, 6.363f, 6.364f) - lineTo(17.16f, 16.58f) - arcToRelative(4.5f, 4.5f, 0.0f, false, true, -6.824f, -5.826f) - } + path( + fill = null, + stroke = SolidColor(Color(0xFF9F9F9F)), + strokeLineWidth = 1.5f, + strokeLineCap = strokeCapRound, + strokeLineJoin = strokeJoinRound, + strokeLineMiter = 4.0f, + pathFillType = NonZero, + ) { + moveTo(9.365f, 19.127f) + lineToRelative(-0.932f, 0.932f) + arcToRelative(4.5f, 4.5f, 0.0f, false, true, -6.364f, -6.364f) + lineTo(6.842f, 8.92f) + arcToRelative(4.5f, 4.5f, 0.0f, false, true, 6.826f, 5.825f) + } + path( + fill = null, + stroke = SolidColor(Color(0xFF9F9F9F)), + strokeLineWidth = 1.5f, + strokeLineCap = strokeCapRound, + strokeLineJoin = strokeJoinRound, + strokeLineMiter = 4.0f, + pathFillType = NonZero + ) { + moveTo(14.82f, 6.194f) + lineToRelative(0.75f, -0.75f) + arcToRelative(4.5f, 4.5f, 0.0f, true, true, 6.363f, 6.364f) + lineTo(17.16f, 16.58f) + arcToRelative(4.5f, 4.5f, 0.0f, false, true, -6.824f, -5.826f) } }.build() return _chain!! diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt index b5c02a72d..206accd96 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButton.kt @@ -27,7 +27,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.infomaniak.swisstransfer.ui.components.ButtonSize +import com.infomaniak.swisstransfer.ui.theme.Dimens import com.infomaniak.swisstransfer.ui.theme.Margin import com.infomaniak.swisstransfer.ui.theme.Shapes import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme @@ -36,6 +36,7 @@ import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme fun TransferTypeButton( transferType: TransferType, isActive: () -> Boolean, + onClick: () -> Unit, ) { val (borderColor, contentColor) = if (isActive()) { SwissTransferTheme.materialColors.primary to SwissTransferTheme.materialColors.primary @@ -46,11 +47,11 @@ fun TransferTypeButton( Button( modifier = Modifier .padding(Margin.XSmall) - .height(ButtonSize.LARGE.height) + .height(Dimens.LargeButtonHeight) .border(width = 1.dp, color = borderColor, shape = Shapes.small), shape = Shapes.small, colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent, contentColor = contentColor), - onClick = transferType.onClick, + onClick = onClick, contentPadding = PaddingValues(Margin.Medium), ) { Icon(modifier = Modifier.size(Margin.Medium), imageVector = transferType.buttonIcon, contentDescription = null) @@ -69,7 +70,8 @@ private fun TransferTypeButtonPreview() { TransferType.entries.forEach { entry -> TransferTypeButton( transferType = entry, - isActive = { entry.ordinal == 0 } + isActive = { entry.ordinal == 0 }, + onClick = {}, ) } } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt index 254ac8e4e..b52220934 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/newtransfer/importfiles/components/TransferTypeButtons.kt @@ -41,9 +41,9 @@ import com.infomaniak.swisstransfer.ui.theme.Margin import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme @Composable -fun TransferTypeButtons(selectedTransferType: TransferType) { +fun TransferTypeButtons(initialSelectedTransferType: TransferType, onClick: (TransferType) -> Unit) { - val selectedItem by rememberSaveable { mutableStateOf(selectedTransferType) } + val selectedItem by rememberSaveable { mutableStateOf(initialSelectedTransferType) } Row( modifier = Modifier @@ -54,13 +54,13 @@ fun TransferTypeButtons(selectedTransferType: TransferType) { TransferTypeButton( transferType = transferTypeEntry, isActive = { transferTypeEntry == selectedItem }, + onClick = { onClick(transferTypeEntry) }, ) } } } -// TODO: onClick -enum class TransferType(val buttonIcon: ImageVector, @StringRes val buttonText: Int, val onClick: () -> Unit = {}) { +enum class TransferType(val buttonIcon: ImageVector, @StringRes val buttonText: Int) { LINK(buttonIcon = AppIcons.Chain, buttonText = R.string.transferTypeLink), QR_CODE(buttonIcon = AppIcons.QrCode, buttonText = R.string.transferTypeQrCode), PROXIMITY(buttonIcon = AppIcons.WifiWave, buttonText = R.string.transferTypeProximity), @@ -73,7 +73,7 @@ enum class TransferType(val buttonIcon: ImageVector, @StringRes val buttonText: private fun TransferTypeButtonsPreview() { SwissTransferTheme { Surface { - TransferTypeButtons(selectedTransferType = TransferType.QR_CODE) + TransferTypeButtons(initialSelectedTransferType = TransferType.QR_CODE, onClick = {}) } } } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Dimens.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Dimens.kt index fb54fcf51..ff95a3e97 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Dimens.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Dimens.kt @@ -23,4 +23,5 @@ object Dimens { val SettingHorizontalMargin = Margin.Medium val SettingVerticalMargin = 12.dp val DescriptionWidth = 300.dp + val LargeButtonHeight = 56.dp }