From ee5435dc7aec00c94de6524cbdbc79b7ef7c3997 Mon Sep 17 00:00:00 2001 From: sadellie Date: Mon, 31 Jul 2023 11:32:17 +0300 Subject: [PATCH] Dude gave 2 stars cause of this Hopefully he gives the app at least 3 stars now --- core/base/src/main/res/values/strings.xml | 2 ++ .../unitto/data/userprefs/UserPreferences.kt | 17 +++++++++++ .../feature/calculator/CalculatorScreen.kt | 3 +- .../feature/calculator/CalculatorUIState.kt | 3 +- .../feature/calculator/CalculatorViewModel.kt | 3 +- .../components/CalculatorKeyboard.kt | 29 +++++++++++++++---- .../feature/converter/ConverterScreen.kt | 1 + .../feature/converter/ConverterUIState.kt | 1 + .../feature/converter/ConverterViewModel.kt | 3 +- .../converter/components/ConverterKeyboard.kt | 13 +++++++-- .../unitto/feature/settings/SettingsScreen.kt | 17 +++++++++++ .../feature/settings/SettingsViewModel.kt | 9 ++++++ 12 files changed, 89 insertions(+), 12 deletions(-) diff --git a/core/base/src/main/res/values/strings.xml b/core/base/src/main/res/values/strings.xml index d8408acd..4b7955a9 100644 --- a/core/base/src/main/res/values/strings.xml +++ b/core/base/src/main/res/values/strings.xml @@ -1368,4 +1368,6 @@ Used in this dialog window. Should be short --> Yesterday Search… Add time zone + Zero in the middle + Swap zero and decimal buttons \ No newline at end of file diff --git a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferences.kt b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferences.kt index 6f2b797e..f65b7fca 100644 --- a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferences.kt +++ b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferences.kt @@ -83,6 +83,7 @@ data class UserPreferences( val unitConverterFavoritesOnly: Boolean = false, val unitConverterFormatTime: Boolean = false, val unitConverterSorting: UnitsListSorting = UnitsListSorting.USAGE, + val middleZero: Boolean = false, ) data class UIPreferences( @@ -107,6 +108,7 @@ data class MainPreferences( val unitConverterFavoritesOnly: Boolean = false, val unitConverterFormatTime: Boolean = false, val unitConverterSorting: UnitsListSorting = UnitsListSorting.USAGE, + val middleZero: Boolean = false, ) /** @@ -135,6 +137,7 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS val UNIT_CONVERTER_FAVORITES_ONLY = booleanPreferencesKey("UNIT_CONVERTER_FAVORITES_ONLY_PREF_KEY") val UNIT_CONVERTER_FORMAT_TIME = booleanPreferencesKey("UNIT_CONVERTER_FORMAT_TIME_PREF_KEY") val UNIT_CONVERTER_SORTING = stringPreferencesKey("UNIT_CONVERTER_SORTING_PREF_KEY") + val MIDDLE_ZERO = booleanPreferencesKey("MIDDLE_ZERO_PREF_KEY") } val uiPreferencesFlow: Flow = dataStore.data @@ -199,6 +202,7 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS val unitConverterFavoritesOnly: Boolean = preferences[PrefsKeys.UNIT_CONVERTER_FAVORITES_ONLY] ?: false val unitConverterFormatTime: Boolean = preferences[PrefsKeys.UNIT_CONVERTER_FORMAT_TIME] ?: false val unitConverterSorting: UnitsListSorting = preferences[PrefsKeys.UNIT_CONVERTER_SORTING]?.let { UnitsListSorting.valueOf(it) } ?: UnitsListSorting.USAGE + val middleZero: Boolean = preferences[PrefsKeys.MIDDLE_ZERO] ?: false MainPreferences( digitsPrecision = digitsPrecision, @@ -212,6 +216,7 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS unitConverterFavoritesOnly = unitConverterFavoritesOnly, unitConverterFormatTime = unitConverterFormatTime, unitConverterSorting = unitConverterSorting, + middleZero = middleZero, ) } @@ -237,6 +242,7 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS unitConverterFavoritesOnly = main.unitConverterFavoritesOnly, unitConverterFormatTime = main.unitConverterFormatTime, unitConverterSorting = main.unitConverterSorting, + middleZero = main.middleZero, ) } @@ -370,6 +376,17 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS } } + /** + * Update preference on where zero should be. + * + * @param enabled True if user wants zero button to be in the middle. + */ + suspend fun updateMiddleZero(enabled: Boolean) { + dataStore.edit { preferences -> + preferences[PrefsKeys.MIDDLE_ZERO] = enabled + } + } + /** * Update preference on whether or not show tools screen. * diff --git a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorScreen.kt b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorScreen.kt index 4b9f986d..5930c9d6 100644 --- a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorScreen.kt +++ b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorScreen.kt @@ -278,7 +278,8 @@ private fun CalculatorScreen( clearSymbols = clearSymbols, deleteSymbol = deleteSymbol, toggleAngleMode = toggleAngleMode, - evaluate = evaluate + evaluate = evaluate, + middleZero = uiState.middleZero, ) } } diff --git a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorUIState.kt b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorUIState.kt index dfb500ca..e4f5d499 100644 --- a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorUIState.kt +++ b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorUIState.kt @@ -30,7 +30,8 @@ data class CalculatorUIState( val radianMode: Boolean = true, val history: List = emptyList(), val allowVibration: Boolean = false, - val formatterSymbols: FormatterSymbols = FormatterSymbols.Spaces + val formatterSymbols: FormatterSymbols = FormatterSymbols.Spaces, + val middleZero: Boolean = false, ) sealed class CalculationResult(@StringRes val label: Int? = null) { diff --git a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorViewModel.kt b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorViewModel.kt index 80bc810f..2517823a 100644 --- a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorViewModel.kt +++ b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorViewModel.kt @@ -75,7 +75,8 @@ internal class CalculatorViewModel @Inject constructor( radianMode = userPrefs.radianMode, history = history, allowVibration = userPrefs.enableVibrations, - formatterSymbols = AllFormatterSymbols.getById(userPrefs.separator) + formatterSymbols = AllFormatterSymbols.getById(userPrefs.separator), + middleZero = userPrefs.middleZero, ) }.stateIn( viewModelScope, SharingStarted.WhileSubscribed(5000L), CalculatorUIState() diff --git a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/CalculatorKeyboard.kt b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/CalculatorKeyboard.kt index f2df5c0b..4599660c 100644 --- a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/CalculatorKeyboard.kt +++ b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/CalculatorKeyboard.kt @@ -104,6 +104,7 @@ internal fun CalculatorKeyboard( radianMode: Boolean, fractional: String, allowVibration: Boolean, + middleZero: Boolean, addSymbol: (String) -> Unit, clearSymbols: () -> Unit, deleteSymbol: () -> Unit, @@ -116,6 +117,7 @@ internal fun CalculatorKeyboard( radianMode = radianMode, fractional = fractional, allowVibration = allowVibration, + middleZero = middleZero, addSymbol = addSymbol, toggleAngleMode = toggleAngleMode, deleteSymbol = deleteSymbol, @@ -128,6 +130,7 @@ internal fun CalculatorKeyboard( radianMode = radianMode, fractional = fractional, allowVibration = allowVibration, + middleZero = middleZero, addSymbol = addSymbol, toggleAngleMode = toggleAngleMode, deleteSymbol = deleteSymbol, @@ -143,6 +146,7 @@ private fun PortraitKeyboard( radianMode: Boolean, fractional: String, allowVibration: Boolean, + middleZero: Boolean, addSymbol: (String) -> Unit, toggleAngleMode: () -> Unit, deleteSymbol: () -> Unit, @@ -257,8 +261,13 @@ private fun PortraitKeyboard( KeyboardButtonFilled(mainButtonModifier, UnittoIcons.Plus, allowVibration) { addSymbol(Token.Operator.plus) } } Row(weightModifier) { - KeyboardButtonLight(mainButtonModifier, UnittoIcons.Key0, allowVibration) { addSymbol(Token.Digit._0) } - KeyboardButtonLight(mainButtonModifier, fractionalIcon, allowVibration) { addSymbol(Token.Digit.dot) } + if (middleZero) { + KeyboardButtonLight(mainButtonModifier, fractionalIcon, allowVibration) { addSymbol(Token.Digit.dot) } + KeyboardButtonLight(mainButtonModifier, UnittoIcons.Key0, allowVibration) { addSymbol(Token.Digit._0) } + } else { + KeyboardButtonLight(mainButtonModifier, UnittoIcons.Key0, allowVibration) { addSymbol(Token.Digit._0) } + KeyboardButtonLight(mainButtonModifier, fractionalIcon, allowVibration) { addSymbol(Token.Digit.dot) } + } KeyboardButtonLight(mainButtonModifier, UnittoIcons.Backspace, allowVibration, clearSymbols) { deleteSymbol() } KeyboardButtonFilled(mainButtonModifier, UnittoIcons.Equal, allowVibration) { evaluate() } } @@ -345,6 +354,7 @@ private fun LandscapeKeyboard( radianMode: Boolean, fractional: String, allowVibration: Boolean, + middleZero: Boolean, addSymbol: (String) -> Unit, toggleAngleMode: () -> Unit, deleteSymbol: () -> Unit, @@ -390,13 +400,21 @@ private fun LandscapeKeyboard( KeyboardButtonLight(buttonModifier, UnittoIcons.Key7, allowVibration) { addSymbol(Token.Digit._7) } KeyboardButtonLight(buttonModifier, UnittoIcons.Key4, allowVibration) { addSymbol(Token.Digit._4) } KeyboardButtonLight(buttonModifier, UnittoIcons.Key1, allowVibration) { addSymbol(Token.Digit._1) } - KeyboardButtonLight(buttonModifier, UnittoIcons.Key0, allowVibration) { addSymbol(Token.Digit._0) } + if (middleZero) { + KeyboardButtonLight(buttonModifier, fractionalIcon, allowVibration) { addSymbol(Token.Digit.dot) } + } else { + KeyboardButtonLight(buttonModifier, UnittoIcons.Key0, allowVibration) { addSymbol(Token.Digit._0) } + } } Column(Modifier.weight(1f)) { KeyboardButtonLight(buttonModifier, UnittoIcons.Key8, allowVibration) { addSymbol(Token.Digit._8) } KeyboardButtonLight(buttonModifier, UnittoIcons.Key5, allowVibration) { addSymbol(Token.Digit._5) } KeyboardButtonLight(buttonModifier, UnittoIcons.Key2, allowVibration) { addSymbol(Token.Digit._2) } - KeyboardButtonLight(buttonModifier, fractionalIcon, allowVibration) { addSymbol(Token.Digit.dot) } + if (middleZero) { + KeyboardButtonLight(buttonModifier, UnittoIcons.Key0, allowVibration) { addSymbol(Token.Digit._0) } + } else { + KeyboardButtonLight(buttonModifier, fractionalIcon, allowVibration) { addSymbol(Token.Digit.dot) } + } } Column(Modifier.weight(1f)) { KeyboardButtonLight(buttonModifier, UnittoIcons.Key9, allowVibration) { addSymbol(Token.Digit._9) } @@ -496,6 +514,7 @@ private fun PreviewCalculatorKeyboard() { deleteSymbol = {}, toggleAngleMode = {}, evaluate = {}, - allowVibration = false + allowVibration = false, + middleZero = false, ) } diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterScreen.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterScreen.kt index 2f684d20..6cd28d27 100644 --- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterScreen.kt +++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterScreen.kt @@ -121,6 +121,7 @@ private fun ConverterScreen( converterMode = uiState.mode, allowVibration = uiState.allowVibration, fractional = uiState.formatterSymbols.fractional, + middleZero = uiState.middleZero ) } ) diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterUIState.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterUIState.kt index f225cd85..00458616 100644 --- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterUIState.kt +++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterUIState.kt @@ -47,6 +47,7 @@ data class ConverterUIState( val unitTo: AbstractUnit? = null, val mode: ConverterMode = ConverterMode.DEFAULT, val allowVibration: Boolean = false, + val middleZero: Boolean = false, val formatterSymbols: FormatterSymbols = FormatterSymbols.Spaces, ) diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterViewModel.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterViewModel.kt index 016bfe31..93d0ceec 100644 --- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterViewModel.kt +++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/ConverterViewModel.kt @@ -126,7 +126,8 @@ class ConverterViewModel @Inject constructor( unitTo = unitToValue, mode = if (_unitFrom.value is NumberBaseUnit) ConverterMode.BASE else ConverterMode.DEFAULT, allowVibration = prefs.enableVibrations, - formatterSymbols = AllFormatterSymbols.getById(prefs.separator) + formatterSymbols = AllFormatterSymbols.getById(prefs.separator), + middleZero = prefs.middleZero, ) }.stateIn( viewModelScope, SharingStarted.WhileSubscribed(5000), ConverterUIState() diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/ConverterKeyboard.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/ConverterKeyboard.kt index 74a05162..38d8e94e 100644 --- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/ConverterKeyboard.kt +++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/ConverterKeyboard.kt @@ -78,10 +78,11 @@ internal fun ConverterKeyboard( converterMode: ConverterMode, allowVibration: Boolean, fractional: String, + middleZero: Boolean, ) { Crossfade(converterMode, modifier = modifier) { when (it) { - ConverterMode.DEFAULT -> DefaultKeyboard(addDigit, clearInput, deleteDigit, allowVibration, fractional) + ConverterMode.DEFAULT -> DefaultKeyboard(addDigit, clearInput, deleteDigit, allowVibration, fractional, middleZero) ConverterMode.BASE -> BaseKeyboard(addDigit, clearInput, deleteDigit, allowVibration) } } @@ -94,6 +95,7 @@ private fun DefaultKeyboard( deleteDigit: () -> Unit, allowVibration: Boolean, fractional: String, + middleZero: Boolean, ) { val fractionalIcon = remember { if (fractional == Token.Digit.dot) UnittoIcons.Dot else UnittoIcons.Comma } ColumnWithConstraints { @@ -129,8 +131,13 @@ private fun DefaultKeyboard( KeyboardButtonFilled(bModifier, UnittoIcons.Minus, allowVibration) { addDigit(Token.Operator.minus) } } Row(cModifier, horizontalArrangement) { - KeyboardButtonLight(bModifier, UnittoIcons.Key0, allowVibration) { addDigit(Token.Digit._0) } - KeyboardButtonLight(bModifier, fractionalIcon, allowVibration) { addDigit(Token.Digit.dot) } + if (middleZero) { + KeyboardButtonLight(bModifier, fractionalIcon, allowVibration) { addDigit(Token.Digit.dot) } + KeyboardButtonLight(bModifier, UnittoIcons.Key0, allowVibration) { addDigit(Token.Digit._0) } + } else { + KeyboardButtonLight(bModifier, UnittoIcons.Key0, allowVibration) { addDigit(Token.Digit._0) } + KeyboardButtonLight(bModifier, fractionalIcon, allowVibration) { addDigit(Token.Digit.dot) } + } KeyboardButtonLight(bModifier, UnittoIcons.Backspace, allowVibration, clearInput) { deleteDigit() } KeyboardButtonFilled(bModifier, UnittoIcons.Plus, allowVibration) { addDigit(Token.Operator.plus) } } diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt index e0f97a18..67733db8 100644 --- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt +++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt @@ -21,6 +21,7 @@ package com.sadellie.unitto.feature.settings import androidx.compose.foundation.clickable import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ExposureZero import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.Info import androidx.compose.material.icons.filled.Palette @@ -173,6 +174,22 @@ internal fun SettingsScreen( // ADDITIONAL GROUP item { Header(stringResource(R.string.additional_settings_group)) } + // MIDDLE ZERO + item { + UnittoListItem( + label = stringResource(R.string.middle_zero_option), + leadingContent = { + Icon( + Icons.Default.ExposureZero, + stringResource(R.string.middle_zero_option) + ) + }, + supportContent = stringResource(R.string.middle_zero_option_support), + switchState = userPrefs.value.middleZero, + onSwitchChange = viewModel::updateMiddleZero + ) + } + // VIBRATIONS item { UnittoListItem( diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsViewModel.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsViewModel.kt index d2f891c6..a9e7720d 100644 --- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsViewModel.kt +++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsViewModel.kt @@ -49,6 +49,15 @@ class SettingsViewModel @Inject constructor( } } + /** + * @see UserPreferencesRepository.updateMiddleZero + */ + fun updateMiddleZero(enabled: Boolean) { + viewModelScope.launch { + userPrefsRepository.updateMiddleZero(enabled) + } + } + /** * @see UserPreferencesRepository.updateStartingScreen */