From e6994831a4268f581859060ead3ca99e3c8fdd04 Mon Sep 17 00:00:00 2001 From: Gibran Chevalley Date: Mon, 19 Aug 2024 17:11:48 +0200 Subject: [PATCH 01/11] Extract the mutually exclusive component to its own file --- .../ui/components/SettingOption.kt | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/components/SettingOption.kt diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/components/SettingOption.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/SettingOption.kt new file mode 100644 index 000000000..83fe9e45a --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/components/SettingOption.kt @@ -0,0 +1,89 @@ +/* + * 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.components + +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.selection.selectable +import androidx.compose.foundation.selection.selectableGroup +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource +import com.infomaniak.swisstransfer.ui.icons.AppIcons +import com.infomaniak.swisstransfer.ui.icons.app.Checkmark +import com.infomaniak.swisstransfer.ui.theme.Margin +import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme + +@Composable +fun MutuallyExclusiveOptions(items: List) { + var selectedItem by rememberSaveable { mutableIntStateOf(0) } // TODO: Use DataStore or Realm + + Column(Modifier.selectableGroup()) { + items.forEachIndexed { index, item -> + if (index > 0) HorizontalDivider(Modifier.padding(horizontal = Margin.Medium)) + SettingOptionItem(item, isSelected = selectedItem == index) { selectedItem = index } + } + } +} + +@Composable +private fun SettingOptionItem(item: SettingOption, isSelected: Boolean, onClick: () -> Unit) { + SharpRippleButton( + modifier = Modifier.selectable(selected = isSelected, onClick = {}), // onClick left empty because handled by button + onClick = onClick + ) { + Row( + Modifier + .fillMaxWidth() + .padding(horizontal = Margin.Medium, vertical = Margin.Medium), + verticalAlignment = Alignment.CenterVertically, + ) { + item.icon?.let { + Icon(imageVector = it, contentDescription = null) + Spacer(modifier = Modifier.width(Margin.Medium)) + } + + Text(text = stringResource(id = item.title), Modifier.weight(1f)) + + if (isSelected) { + Spacer(modifier = Modifier.width(Margin.Medium)) + Icon( + imageVector = AppIcons.Checkmark, + contentDescription = null, + tint = SwissTransferTheme.materialColors.primary, + ) + } + } + } +} + +interface SettingOption { + @get:StringRes + val title: Int + val icon: ImageVector? +} From 11d7aeae2a591db98512aa16f7fedc3bd61fe417 Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Tue, 20 Aug 2024 14:41:03 +0200 Subject: [PATCH 02/11] Add icon for theme settings --- .../ui/icons/app/BlackAndWhiteCircle.kt | 103 ++++++++++++++++++ .../swisstransfer/ui/icons/app/BlackCircle.kt | 61 +++++++++++ .../swisstransfer/ui/icons/app/WhiteCircle.kt | 62 +++++++++++ .../main/settings/SettingsThemeScreen.kt | 8 +- .../components/MutuallyExclusiveOptions.kt | 3 +- .../swisstransfer/ui/theme/Theme.kt | 9 +- 6 files changed, 241 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackAndWhiteCircle.kt create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackCircle.kt create mode 100644 app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/WhiteCircle.kt diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackAndWhiteCircle.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackAndWhiteCircle.kt new file mode 100644 index 000000000..a8538a86d --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackAndWhiteCircle.kt @@ -0,0 +1,103 @@ +package com.infomaniak.swisstransfer.ui.icons.app + +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.StrokeCap.Companion.Butt +import androidx.compose.ui.graphics.StrokeJoin.Companion.Miter +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.ImageVector.Builder +import androidx.compose.ui.graphics.vector.PathData +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.icons.AppIcons + +val AppIcons.BlackAndWhiteCircle: ImageVector + get() { + if (_blackAndWhiteCircle != null) { + return _blackAndWhiteCircle!! + } + _blackAndWhiteCircle = Builder( + name = "BlackAndWhiteCircle", + defaultWidth = 24.0.dp, + defaultHeight = 24.0.dp, + viewportWidth = 24.0f, + viewportHeight = 24.0f + ).apply { + path( + fill = SolidColor(Color(0xFF000000)), + stroke = null, + strokeLineWidth = 0.0f, + strokeLineCap = Butt, + strokeLineJoin = Miter, + strokeLineMiter = 4.0f, + pathFillType = NonZero + ) { + moveTo(12.0f, 0.0f) + arcToRelative(12.0f, 12.0f, 0.0f, false, true, 12.0f, 12.0f) + arcToRelative(12.0f, 12.0f, 0.0f, false, true, -12.0f, 12.0f) + arcTo(12.0f, 12.0f, 0.0f, false, true, 0.0f, 12.0f) + arcTo(12.0f, 12.0f, 0.0f, false, true, 12.0f, 0.0f) + close() + } + group(clipPathData = PathData { + moveTo(12.0f, 0.0f) + arcToRelative(12.0f, 12.0f, 0.0f, false, true, 12.0f, 12.0f) + arcToRelative(12.0f, 12.0f, 0.0f, false, true, -12.0f, 12.0f) + arcTo(12.0f, 12.0f, 0.0f, false, true, 0.0f, 12.0f) + arcTo(12.0f, 12.0f, 0.0f, false, true, 12.0f, 0.0f) + close() + }) { + path( + fill = SolidColor(Color(0xFFF5F5F5)), + stroke = null, + strokeLineWidth = 0.0f, + strokeLineCap = Butt, + strokeLineJoin = Miter, + strokeLineMiter = 4.0f, + pathFillType = NonZero + ) { + moveTo(-4.5f, 27.5f) + lineTo(27.0f, -2.5f) + lineToRelative(-30.5f, -1.0f) + close() + } + path( + fill = null, + stroke = SolidColor(Color(0xFF000000)), + strokeLineWidth = 0.3f, + strokeLineCap = Butt, + strokeLineJoin = Miter, + strokeLineMiter = 4.0f, + pathFillType = NonZero + ) { + moveTo(12.0f, 0.15f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 23.85f, 12.0f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 12.0f, 23.85f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 0.15f, 12.0f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 12.0f, 0.15f) + close() + } + } + }.build() + return _blackAndWhiteCircle!! + } + +private var _blackAndWhiteCircle: ImageVector? = null + +@Preview +@Composable +private fun Preview() { + Box { + Image( + imageVector = AppIcons.BlackAndWhiteCircle, contentDescription = null, modifier = Modifier.size(AppIcons.previewSize) + ) + } +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackCircle.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackCircle.kt new file mode 100644 index 000000000..118b5cf08 --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackCircle.kt @@ -0,0 +1,61 @@ +package com.infomaniak.swisstransfer.ui.icons.app + +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.StrokeCap.Companion.Butt +import androidx.compose.ui.graphics.StrokeJoin.Companion.Miter +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.icons.AppIcons + +val AppIcons.BlackCircle: ImageVector + get() { + if (_blackCircle != null) { + return _blackCircle!! + } + _blackCircle = Builder( + name = "BlackCircle", + defaultWidth = 24.0.dp, + defaultHeight = 24.0.dp, + viewportWidth = 24.0f, + viewportHeight = 24.0f + ).apply { + path( + fill = SolidColor(Color(0xFF000000)), stroke = SolidColor(Color(0xFF000000)), + strokeLineWidth = 0.3f, strokeLineCap = Butt, strokeLineJoin = Miter, + strokeLineMiter = 4.0f, pathFillType = NonZero + ) { + moveTo(12.0f, 0.15f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 23.85f, 12.0f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 12.0f, 23.85f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 0.15f, 12.0f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 12.0f, 0.15f) + close() + } + } + .build() + return _blackCircle!! + } + +private var _blackCircle: ImageVector? = null + +@Preview +@Composable +private fun Preview() { + Box { + Image( + imageVector = AppIcons.BlackCircle, + contentDescription = null, + modifier = Modifier.size(AppIcons.previewSize) + ) + } +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/WhiteCircle.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/WhiteCircle.kt new file mode 100644 index 000000000..925b908c3 --- /dev/null +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/WhiteCircle.kt @@ -0,0 +1,62 @@ +package com.infomaniak.swisstransfer.ui.icons.app + +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.StrokeCap.Companion.Butt +import androidx.compose.ui.graphics.StrokeJoin.Companion.Miter +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.icons.AppIcons + +val AppIcons.WhiteCircle: ImageVector + get() { + if (_whiteCircle != null) { + return _whiteCircle!! + } + _whiteCircle = Builder( + name = "WhiteCircle", + defaultWidth = 24.0.dp, + defaultHeight = 24.0.dp, + viewportWidth = 24.0f, + viewportHeight = 24.0f + ).apply { + path( + fill = SolidColor(Color(0xFFF5F5F5)), + stroke = SolidColor(Color(0xFF000000)), + strokeLineWidth = 0.3f, + strokeLineCap = Butt, + strokeLineJoin = Miter, + strokeLineMiter = 4.0f, + pathFillType = NonZero + ) { + moveTo(12.0f, 0.15f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 23.85f, 12.0f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 12.0f, 23.85f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 0.15f, 12.0f) + arcTo(11.85f, 11.85f, 0.0f, false, true, 12.0f, 0.15f) + close() + } + }.build() + return _whiteCircle!! + } + +private var _whiteCircle: ImageVector? = null + +@Preview +@Composable +private fun Preview() { + Box { + Image( + imageVector = AppIcons.WhiteCircle, contentDescription = null, modifier = Modifier.size(AppIcons.previewSize) + ) + } +} diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt index 727b49a74..4ac2e6020 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt @@ -18,6 +18,7 @@ package com.infomaniak.swisstransfer.ui.screen.main.settings +import android.util.Log import androidx.compose.foundation.layout.Column import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -43,14 +44,15 @@ fun SettingsThemeScreen() { SettingTitle(titleRes = R.string.appName) val (selectedItem, setSelectedItem) = rememberSaveable { mutableIntStateOf(0) } // TODO: Use DataStore or Realm + Log.e("vincent", "SettingsThemeScreen: selectedItem=${ThemeOption.entries[selectedItem]}") MutuallyExclusiveOptions(ThemeOption.entries, selectedItem, setSelectedItem) } } enum class ThemeOption(override val title: Int, override val icon: ImageVector) : SettingOption { - SYSTEM(R.string.appName, AppIcons.Add), - LIGHT(R.string.appName, AppIcons.Add), - DARK(R.string.appName, AppIcons.Add), + SYSTEM(R.string.appName, AppIcons.BlackAndWhiteCircle), + LIGHT(R.string.appName, AppIcons.WhiteCircle), + DARK(R.string.appName, AppIcons.BlackCircle), } @PreviewMobile diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/MutuallyExclusiveOptions.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/MutuallyExclusiveOptions.kt index 741c60d99..335a6f335 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/MutuallyExclusiveOptions.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/MutuallyExclusiveOptions.kt @@ -23,6 +23,7 @@ import androidx.annotation.StringRes import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.scaleIn import androidx.compose.animation.scaleOut +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.selection.selectable import androidx.compose.foundation.selection.selectableGroup @@ -67,7 +68,7 @@ private fun SettingOptionItem(item: SettingOption, isSelected: Boolean, onClick: verticalAlignment = Alignment.CenterVertically, ) { item.icon?.let { - Icon(imageVector = it, contentDescription = null) + Image(imageVector = it, contentDescription = null) Spacer(modifier = Modifier.width(Margin.Medium)) } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt index 832c5ec04..6fa7cd30c 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt @@ -30,7 +30,7 @@ val LocalCustomColorScheme: ProvidableCompositionLocal = stat @Composable fun SwissTransferTheme( - darkTheme: Boolean = isSystemInDarkTheme(), + darkTheme: Boolean = isDarkTheme(), content: @Composable () -> Unit, ) { val customColors = if (darkTheme) CustomDarkColorScheme else CustomLightColorScheme @@ -47,6 +47,13 @@ fun SwissTransferTheme( } } +@Composable +fun isDarkTheme(): Boolean { + // rememberMutableStateOf + // TODO checker dans realm. Si system, isSystemDark, sinon, + return isSystemInDarkTheme() +} + object SwissTransferTheme { val typography: CustomTypography @Composable From 8e35849e895b0b252409b23155ac7f063301d95d Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 21 Aug 2024 06:55:17 +0200 Subject: [PATCH 03/11] Fix import --- .../ui/screen/main/settings/SettingsThemeScreen.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt index 4ac2e6020..a43d8320f 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt @@ -31,6 +31,9 @@ import androidx.compose.ui.graphics.vector.ImageVector import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.icons.AppIcons import com.infomaniak.swisstransfer.ui.icons.app.Add +import com.infomaniak.swisstransfer.ui.icons.app.BlackAndWhiteCircle +import com.infomaniak.swisstransfer.ui.icons.app.BlackCircle +import com.infomaniak.swisstransfer.ui.icons.app.WhiteCircle import com.infomaniak.swisstransfer.ui.screen.main.settings.components.MutuallyExclusiveOptions import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingOption import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingTitle From bdea68c44a34608843497375fcbcb909fc56ef4b Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 21 Aug 2024 07:18:46 +0200 Subject: [PATCH 04/11] Use real wording for Settings theme --- .../main/settings/SettingsThemeScreen.kt | 11 ++++------- .../main/settings/components/SettingTitle.kt | 13 +++++++++++++ app/src/main/res/values-de/strings.xml | 19 +++++++++++++++++++ app/src/main/res/values-es/strings.xml | 19 +++++++++++++++++++ app/src/main/res/values-fr/strings.xml | 19 +++++++++++++++++++ app/src/main/res/values-it/strings.xml | 19 +++++++++++++++++++ app/src/main/res/values/strings.xml | 19 +++++++++++++++++++ 7 files changed, 112 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt index a43d8320f..f1a53a180 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt @@ -18,7 +18,6 @@ package com.infomaniak.swisstransfer.ui.screen.main.settings -import android.util.Log import androidx.compose.foundation.layout.Column import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -30,7 +29,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.icons.AppIcons -import com.infomaniak.swisstransfer.ui.icons.app.Add import com.infomaniak.swisstransfer.ui.icons.app.BlackAndWhiteCircle import com.infomaniak.swisstransfer.ui.icons.app.BlackCircle import com.infomaniak.swisstransfer.ui.icons.app.WhiteCircle @@ -44,18 +42,17 @@ import com.infomaniak.swisstransfer.ui.utils.PreviewTablet @Composable fun SettingsThemeScreen() { Column(modifier = Modifier.verticalScroll(rememberScrollState())) { - SettingTitle(titleRes = R.string.appName) + SettingTitle(titleRes = R.string.settingsThemeTitle) val (selectedItem, setSelectedItem) = rememberSaveable { mutableIntStateOf(0) } // TODO: Use DataStore or Realm - Log.e("vincent", "SettingsThemeScreen: selectedItem=${ThemeOption.entries[selectedItem]}") MutuallyExclusiveOptions(ThemeOption.entries, selectedItem, setSelectedItem) } } enum class ThemeOption(override val title: Int, override val icon: ImageVector) : SettingOption { - SYSTEM(R.string.appName, AppIcons.BlackAndWhiteCircle), - LIGHT(R.string.appName, AppIcons.WhiteCircle), - DARK(R.string.appName, AppIcons.BlackCircle), + SYSTEM(R.string.settingsOptionThemeSystem, AppIcons.BlackAndWhiteCircle), + LIGHT(R.string.settingsOptionThemeLight, AppIcons.WhiteCircle), + DARK(R.string.settingsOptionThemeDark, AppIcons.BlackCircle), } @PreviewMobile diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SettingTitle.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SettingTitle.kt index 1c523c5bd..2d04bd648 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SettingTitle.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SettingTitle.kt @@ -19,11 +19,16 @@ package com.infomaniak.swisstransfer.ui.screen.main.settings.components import androidx.annotation.StringRes +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding 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.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.infomaniak.swisstransfer.R import com.infomaniak.swisstransfer.ui.theme.Dimens import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme @@ -36,3 +41,11 @@ fun SettingTitle(@StringRes titleRes: Int) { color = SwissTransferTheme.colors.secondaryTextColor, ) } + +@Preview +@Composable +private fun SettingTitlePreview() { + Box(Modifier.background(color = Color.White)) { + SettingTitle(titleRes = R.string.appName) + } +} diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index aa5b42743..998ef976b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -19,8 +19,16 @@ Dateien hinzufügen Weiter zu Neuer Transfer + Heruntergeladene Übertragung : %d/%d + Verfällt in %d Tagen Mache deine erste Überweisung! + Von: + Nachricht : Empfangen + + Empfänger : + Adressaten: + Unsere Geschichte beginnt hier Gesendet Über @@ -33,8 +41,19 @@ Benachrichtigungen Teile deine Ideen Thema + Sombre + Clair + Système Dauer der Gültigkeit + Wähle ein Thema aus Einstellungen + Geteilte Dateien + Inhalt der Übertragung : + E-Mail + Link + In der Nähe + QR-Code + Schicke deine Dateien per Kamera Dateien durchsuchen Foto- und Videogalerie diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 7882db19e..ae6ec4f99 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -19,8 +19,16 @@ Añadir archivos Siguiente Nueva transferencia + Transferencia descargada : %d/%d + Caduca en %d días Realice su primera transferencia + De : + Mensaje: Recibido + + Destinatario : + Para : + Nuestra historia comienza aquí Enviado a Quiénes somos @@ -33,8 +41,19 @@ Notificaciones Comparte tus ideas Tema + Sombre + Clair + Système Periodo de validez + Seleccione un tema Parámetros + Archivos compartidos + Contenido de la transferencia : + Correo electrónico + Enlace + Proximidad + Código QR + Envía tus archivos por Cámara Examinar archivos Galería de fotos y vídeos diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ac5185aee..7e1472ff0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -19,8 +19,16 @@ Ajouter des fichiers Suivant Nouveau transfert + Transfert téléchargé : %d/%d\u0020 + Expire dans %d jours Fais ton premier transfert ! + De : + Message : Recu + + Destinataire : + Destinataires : + Notre histoire commence ici Envoyé A propos @@ -33,8 +41,19 @@ Notifications Partage tes idées Thème + Sombre + Clair + Système Durée de validité + Sélectionne un thème Paramètres + Fichiers partagés + Contenu du transfert : + E-mail + Lien + A proximité + QR Code + Envoie tes fichiers par Appareil photo Parcourir les fichiers Galerie photos et vidéos diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 6b540844d..fd2df147b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -19,8 +19,16 @@ Aggiunta di file Avanti Nuovo trasferimento + Trasferimento scaricato : %d/%d + Scade tra %d giorni Effettuate il vostro primo trasferimento! + Da : + Messaggio: Ricevuto + + A: + A : + La nostra storia inizia qui Inviato a Chi siamo @@ -33,8 +41,19 @@ Notifiche Condividete le vostre idee Tema + Sombre + Clair + Système Periodo di validità + Selezionare un tema Parametri + File condivisi + Contenuto del trasferimento : + Email + Link + Vicino + Codice QR + Inviate i vostri file tramite Macchina fotografica Sfogliare i file Galleria di foto e video diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 11fd8a015..e3c115a6c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,8 +22,16 @@ Add files Next New transfer + Downloaded transfer: %d/%d\u0020 + Expires in %d days Make your first transfer! + From: + Message: Received + + Recipient: + Recipients: + Our story begins here Sent About @@ -36,8 +44,19 @@ Notifications Share your ideas Theme + Sombre + Clair + Système Validity period + Select a theme Settings + Shared files + Transfer content: + Email + Link + Proximity + QR Code + Send your files by Camera Browse files Photo and video gallery From 650f56ba2d4874493b252e6543403c933558e7c8 Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 21 Aug 2024 09:33:29 +0200 Subject: [PATCH 05/11] Update strings --- app/src/main/res/values-de/strings.xml | 15 --------------- app/src/main/res/values-es/strings.xml | 15 --------------- app/src/main/res/values-fr/strings.xml | 15 --------------- app/src/main/res/values-it/strings.xml | 15 --------------- app/src/main/res/values/strings.xml | 15 --------------- 5 files changed, 75 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 998ef976b..f15d554d4 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -19,16 +19,8 @@ Dateien hinzufügen Weiter zu Neuer Transfer - Heruntergeladene Übertragung : %d/%d - Verfällt in %d Tagen Mache deine erste Überweisung! - Von: - Nachricht : Empfangen - - Empfänger : - Adressaten: - Unsere Geschichte beginnt hier Gesendet Über @@ -47,13 +39,6 @@ Dauer der Gültigkeit Wähle ein Thema aus Einstellungen - Geteilte Dateien - Inhalt der Übertragung : - E-Mail - Link - In der Nähe - QR-Code - Schicke deine Dateien per Kamera Dateien durchsuchen Foto- und Videogalerie diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ae6ec4f99..d2d0d36b1 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -19,16 +19,8 @@ Añadir archivos Siguiente Nueva transferencia - Transferencia descargada : %d/%d - Caduca en %d días Realice su primera transferencia - De : - Mensaje: Recibido - - Destinatario : - Para : - Nuestra historia comienza aquí Enviado a Quiénes somos @@ -47,13 +39,6 @@ Periodo de validez Seleccione un tema Parámetros - Archivos compartidos - Contenido de la transferencia : - Correo electrónico - Enlace - Proximidad - Código QR - Envía tus archivos por Cámara Examinar archivos Galería de fotos y vídeos diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 7e1472ff0..062796893 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -19,16 +19,8 @@ Ajouter des fichiers Suivant Nouveau transfert - Transfert téléchargé : %d/%d\u0020 - Expire dans %d jours Fais ton premier transfert ! - De : - Message : Recu - - Destinataire : - Destinataires : - Notre histoire commence ici Envoyé A propos @@ -47,13 +39,6 @@ Durée de validité Sélectionne un thème Paramètres - Fichiers partagés - Contenu du transfert : - E-mail - Lien - A proximité - QR Code - Envoie tes fichiers par Appareil photo Parcourir les fichiers Galerie photos et vidéos diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index fd2df147b..a5db44617 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -19,16 +19,8 @@ Aggiunta di file Avanti Nuovo trasferimento - Trasferimento scaricato : %d/%d - Scade tra %d giorni Effettuate il vostro primo trasferimento! - Da : - Messaggio: Ricevuto - - A: - A : - La nostra storia inizia qui Inviato a Chi siamo @@ -47,13 +39,6 @@ Periodo di validità Selezionare un tema Parametri - File condivisi - Contenuto del trasferimento : - Email - Link - Vicino - Codice QR - Inviate i vostri file tramite Macchina fotografica Sfogliare i file Galleria di foto e video diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e3c115a6c..4967dfb7f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,16 +22,8 @@ Add files Next New transfer - Downloaded transfer: %d/%d\u0020 - Expires in %d days Make your first transfer! - From: - Message: Received - - Recipient: - Recipients: - Our story begins here Sent About @@ -50,13 +42,6 @@ Validity period Select a theme Settings - Shared files - Transfer content: - Email - Link - Proximity - QR Code - Send your files by Camera Browse files Photo and video gallery From e675400efa3b1453c523d3206b1f03948de2f56a Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 21 Aug 2024 10:02:26 +0200 Subject: [PATCH 06/11] Fix italian string --- app/src/main/res/values-it/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index a5db44617..eda6188b2 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -37,7 +37,7 @@ Clair Système Periodo di validità - Selezionare un tema + Seleziona un tema Parametri Macchina fotografica Sfogliare i file From a3afa899355fd112657c5decc57680646c7c3ad1 Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 21 Aug 2024 10:16:14 +0200 Subject: [PATCH 07/11] Update wordings --- app/src/main/res/values-de/strings.xml | 6 +++--- app/src/main/res/values-es/strings.xml | 6 +++--- app/src/main/res/values-it/strings.xml | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index f15d554d4..90c029790 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -33,9 +33,9 @@ Benachrichtigungen Teile deine Ideen Thema - Sombre - Clair - Système + Dunkel + Hell + System Dauer der Gültigkeit Wähle ein Thema aus Einstellungen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d2d0d36b1..a48beef22 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -33,9 +33,9 @@ Notificaciones Comparte tus ideas Tema - Sombre - Clair - Système + Oscuro + Luz + Sistema Periodo de validez Seleccione un tema Parámetros diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index eda6188b2..390d02db0 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -33,9 +33,9 @@ Notifiche Condividete le vostre idee Tema - Sombre - Clair - Système + Scuro + Chiaro + Sistema Periodo di validità Seleziona un tema Parametri From a171f8b544f75cb9104d7fa25a08bd756c1e3257 Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 21 Aug 2024 13:38:31 +0200 Subject: [PATCH 08/11] Remove wrong import --- .../swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt index 6988843b3..7d939e10f 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/SettingsThemeScreen.kt @@ -34,7 +34,6 @@ import com.infomaniak.swisstransfer.ui.icons.AppIcons import com.infomaniak.swisstransfer.ui.icons.app.BlackAndWhiteCircle import com.infomaniak.swisstransfer.ui.icons.app.BlackCircle import com.infomaniak.swisstransfer.ui.icons.app.WhiteCircle -import com.infomaniak.swisstransfer.ui.screen.main.settings.components.MutuallyExclusiveOptions import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingOption import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingTitle import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SingleSelectOptions From aeea84aa427636bdf7f16409d6515f84734d88f2 Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 21 Aug 2024 15:55:07 +0200 Subject: [PATCH 09/11] Format file --- .../swisstransfer/ui/icons/app/BlackAndWhiteCircle.kt | 4 +++- .../com/infomaniak/swisstransfer/ui/icons/app/WhiteCircle.kt | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackAndWhiteCircle.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackAndWhiteCircle.kt index a8538a86d..512a59f28 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackAndWhiteCircle.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/BlackAndWhiteCircle.kt @@ -97,7 +97,9 @@ private var _blackAndWhiteCircle: ImageVector? = null private fun Preview() { Box { Image( - imageVector = AppIcons.BlackAndWhiteCircle, contentDescription = null, modifier = Modifier.size(AppIcons.previewSize) + imageVector = AppIcons.BlackAndWhiteCircle, + contentDescription = null, + modifier = Modifier.size(AppIcons.previewSize) ) } } diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/WhiteCircle.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/WhiteCircle.kt index 925b908c3..005ca9147 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/WhiteCircle.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/icons/app/WhiteCircle.kt @@ -56,7 +56,9 @@ private var _whiteCircle: ImageVector? = null private fun Preview() { Box { Image( - imageVector = AppIcons.WhiteCircle, contentDescription = null, modifier = Modifier.size(AppIcons.previewSize) + imageVector = AppIcons.WhiteCircle, + contentDescription = null, + modifier = Modifier.size(AppIcons.previewSize) ) } } From 4115aba000c2b53eaf73ac09ea2590567ddf1f8d Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 21 Aug 2024 15:57:37 +0200 Subject: [PATCH 10/11] Fix preview for SettingTitle --- .../main/settings/components/SettingTitle.kt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SettingTitle.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SettingTitle.kt index 2d04bd648..1ff3b8678 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SettingTitle.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/screen/main/settings/components/SettingTitle.kt @@ -18,14 +18,14 @@ package com.infomaniak.swisstransfer.ui.screen.main.settings.components +import android.content.res.Configuration import androidx.annotation.StringRes -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Surface 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.res.stringResource import androidx.compose.ui.tooling.preview.Preview import com.infomaniak.swisstransfer.R @@ -42,10 +42,15 @@ fun SettingTitle(@StringRes titleRes: Int) { ) } -@Preview +@Preview(name = "Light") +@Preview(name = "Dark", uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL) @Composable private fun SettingTitlePreview() { - Box(Modifier.background(color = Color.White)) { - SettingTitle(titleRes = R.string.appName) + SwissTransferTheme { + Surface { + Box { + SettingTitle(titleRes = R.string.appName) + } + } } } From 508d044fd15f74a0434f6a0a7d298dfd397720a5 Mon Sep 17 00:00:00 2001 From: Vincent TE Date: Wed, 21 Aug 2024 16:01:14 +0200 Subject: [PATCH 11/11] Fix todo --- .../main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt index 1e2177f59..416cc6f6d 100644 --- a/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt +++ b/app/src/main/java/com/infomaniak/swisstransfer/ui/theme/Theme.kt @@ -50,7 +50,7 @@ fun SwissTransferTheme( @Composable fun isDarkTheme(): Boolean { // rememberMutableStateOf - // TODO checker dans realm. Si system, isSystemDark, sinon, + // TODO check in realm. If system, isSystemDark, otherwise, return isSystemInDarkTheme() }