From e31fae931ee1055483648e077407ecb6679cb9da Mon Sep 17 00:00:00 2001 From: Fabian DEVEL Date: Tue, 28 Jan 2025 10:22:15 +0100 Subject: [PATCH] refactor(MyKSuite): Extract UpgradeFeature component to its own file --- .../ui/screens/MyKSuiteUpgradeBottomSheet.kt | 41 ++++------- .../ui/screens/components/UpgradeFeature.kt | 72 +++++++++++++++++++ 2 files changed, 86 insertions(+), 27 deletions(-) create mode 100644 MykSuite/src/main/java/com/infomaniak/lib/myksuite/ui/screens/components/UpgradeFeature.kt diff --git a/MykSuite/src/main/java/com/infomaniak/lib/myksuite/ui/screens/MyKSuiteUpgradeBottomSheet.kt b/MykSuite/src/main/java/com/infomaniak/lib/myksuite/ui/screens/MyKSuiteUpgradeBottomSheet.kt index f48b4eb9..91addd07 100644 --- a/MykSuite/src/main/java/com/infomaniak/lib/myksuite/ui/screens/MyKSuiteUpgradeBottomSheet.kt +++ b/MykSuite/src/main/java/com/infomaniak/lib/myksuite/ui/screens/MyKSuiteUpgradeBottomSheet.kt @@ -32,9 +32,9 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp import com.infomaniak.lib.myksuite.R import com.infomaniak.lib.myksuite.ui.screens.components.ButtonType +import com.infomaniak.lib.myksuite.ui.screens.components.UpgradeFeature import com.infomaniak.lib.myksuite.ui.theme.Dimens import com.infomaniak.lib.myksuite.ui.theme.Margin import com.infomaniak.lib.myksuite.ui.theme.MyKSuiteTheme @@ -90,32 +90,7 @@ private fun BottomSheetContent( color = MyKSuiteTheme.colors.secondaryTextColor, ) Spacer(Modifier.height(Margin.Medium)) - - customFeatures?.let { - (it() + MyKSuiteUpgradeFeatures.MoreFeatures).forEach { customFeature -> - Row( - modifier = paddedModifier - .padding(vertical = Margin.Mini) - .align(Alignment.Start), - verticalAlignment = Alignment.CenterVertically, - ) { - Icon( - modifier = Modifier.size(Dimens.iconSize), - imageVector = ImageVector.vectorResource(customFeature.icon), - contentDescription = null, - tint = MyKSuiteTheme.colors.iconColor, - ) - Spacer(Modifier.width(Margin.Mini)) - Text( - text = stringResource(customFeature.title), - style = MyKSuiteTheme.typography.bodyRegular, - color = MyKSuiteTheme.colors.secondaryTextColor, - ) - } - } - Spacer(Modifier.height(Margin.Large)) - } - + UpgradeFeatures(customFeatures, paddedModifier) Text( modifier = paddedModifier, text = stringResource(R.string.myKSuiteUpgradeDetails), @@ -137,6 +112,18 @@ private fun BottomSheetContent( } } +@Composable +private fun ColumnScope.UpgradeFeatures( + customFeatures: @Composable (() -> List)?, + modifier: Modifier, +) { + customFeatures?.let { + it().forEach { UpgradeFeature(it, modifier) } + UpgradeFeature(MyKSuiteUpgradeFeatures.MoreFeatures, modifier) + Spacer(Modifier.height(Margin.Large)) + } +} + @OptIn(ExperimentalMaterial3Api::class) @Preview(name = "(1) Light") @Preview(name = "(2) Dark", uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL) diff --git a/MykSuite/src/main/java/com/infomaniak/lib/myksuite/ui/screens/components/UpgradeFeature.kt b/MykSuite/src/main/java/com/infomaniak/lib/myksuite/ui/screens/components/UpgradeFeature.kt new file mode 100644 index 00000000..e0c3b7cd --- /dev/null +++ b/MykSuite/src/main/java/com/infomaniak/lib/myksuite/ui/screens/components/UpgradeFeature.kt @@ -0,0 +1,72 @@ +/* + * Infomaniak Core - Android + * Copyright (C) 2025 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.lib.myksuite.ui.screens.components + +import android.content.res.Configuration +import androidx.compose.foundation.layout.* +import androidx.compose.material3.Icon +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.tooling.preview.Preview +import com.infomaniak.lib.myksuite.ui.screens.MyKSuiteUpgradeFeatures +import com.infomaniak.lib.myksuite.ui.theme.Dimens +import com.infomaniak.lib.myksuite.ui.theme.Margin +import com.infomaniak.lib.myksuite.ui.theme.MyKSuiteTheme + +@Composable +fun ColumnScope.UpgradeFeature(customFeature: MyKSuiteUpgradeFeatures, modifier: Modifier = Modifier) { + Row( + modifier = modifier + .padding(vertical = Margin.Mini) + .align(Alignment.Start), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier.size(Dimens.iconSize), + imageVector = ImageVector.vectorResource(customFeature.icon), + contentDescription = null, + tint = MyKSuiteTheme.colors.iconColor, + ) + Spacer(Modifier.width(Margin.Mini)) + Text( + text = stringResource(customFeature.title), + style = MyKSuiteTheme.typography.bodyRegular, + color = MyKSuiteTheme.colors.secondaryTextColor, + ) + } +} + +@Preview(name = "(1) Light") +@Preview(name = "(2) Dark", uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL) +@Composable +private fun Preview() { + MyKSuiteTheme { + Surface { + Column { + UpgradeFeature(MyKSuiteUpgradeFeatures.MoreFeatures) + UpgradeFeature(MyKSuiteUpgradeFeatures.MoreFeatures) + } + } + } +}