From 99a91be8ca67b10d891d7e2bdb2b9cba578eb057 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Mon, 13 Nov 2023 22:31:39 +0300 Subject: [PATCH] Clear input as an option ON by default closes #117 --- core/base/src/main/res/values/strings.xml | 2 ++ .../repository/UserPreferencesRepository.kt | 2 ++ .../model/userprefs/CalculatorPreferences.kt | 1 + .../unitto/data/userprefs/PreferenceModels.kt | 2 +- .../unitto/data/userprefs/PrefsKeys.kt | 1 + .../unitto/data/userprefs/UserPreferences.kt | 11 +++++++++++ .../feature/calculator/CalculatorViewModel.kt | 15 +++++++++------ .../calculator/CalculatorSettingsScreen.kt | 19 +++++++++++++++++-- .../calculator/CalculatorViewModel.kt | 4 ++++ 9 files changed, 48 insertions(+), 9 deletions(-) diff --git a/core/base/src/main/res/values/strings.xml b/core/base/src/main/res/values/strings.xml index 8ce71c9e..1b0cf92c 100644 --- a/core/base/src/main/res/values/strings.xml +++ b/core/base/src/main/res/values/strings.xml @@ -94,6 +94,8 @@ Used in this dialog window. Should be short --> Auto History view Clear cache + Clear input + Start new expression when clicking \"=\" and clicking any button Color scheme Color theme Pick a theming mode diff --git a/data/model/src/main/java/com/sadellie/unitto/data/model/repository/UserPreferencesRepository.kt b/data/model/src/main/java/com/sadellie/unitto/data/model/repository/UserPreferencesRepository.kt index 25b55367..1157240f 100644 --- a/data/model/src/main/java/com/sadellie/unitto/data/model/repository/UserPreferencesRepository.kt +++ b/data/model/src/main/java/com/sadellie/unitto/data/model/repository/UserPreferencesRepository.kt @@ -86,4 +86,6 @@ interface UserPreferencesRepository { suspend fun updatePartialHistoryView(enabled: Boolean) suspend fun updateAcButton(enabled: Boolean) + + suspend fun updateClearInputAfterEquals(enabled: Boolean) } diff --git a/data/model/src/main/java/com/sadellie/unitto/data/model/userprefs/CalculatorPreferences.kt b/data/model/src/main/java/com/sadellie/unitto/data/model/userprefs/CalculatorPreferences.kt index ac94e89a..36e47982 100644 --- a/data/model/src/main/java/com/sadellie/unitto/data/model/userprefs/CalculatorPreferences.kt +++ b/data/model/src/main/java/com/sadellie/unitto/data/model/userprefs/CalculatorPreferences.kt @@ -27,4 +27,5 @@ interface CalculatorPreferences { val partialHistoryView: Boolean val precision: Int val outputFormat: Int + val clearInputAfterEquals: Boolean } diff --git a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PreferenceModels.kt b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PreferenceModels.kt index a2eeaf0d..c24bb23c 100644 --- a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PreferenceModels.kt +++ b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PreferenceModels.kt @@ -43,7 +43,6 @@ data class AppPreferencesImpl( override val systemFont: Boolean, ) : AppPreferences - data class GeneralPreferencesImpl( override val enableVibrations: Boolean, ) : GeneralPreferences @@ -57,6 +56,7 @@ data class CalculatorPreferencesImpl( override val partialHistoryView: Boolean, override val precision: Int, override val outputFormat: Int, + override val clearInputAfterEquals: Boolean, ) : CalculatorPreferences data class ConverterPreferencesImpl( diff --git a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PrefsKeys.kt b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PrefsKeys.kt index 156a6c44..7ecd722b 100644 --- a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PrefsKeys.kt +++ b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PrefsKeys.kt @@ -47,4 +47,5 @@ internal object PrefsKeys { val SYSTEM_FONT = booleanPreferencesKey("SYSTEM_FONT_PREF_KEY") val PARTIAL_HISTORY_VIEW = booleanPreferencesKey("PARTIAL_HISTORY_VIEW_PREF_KEY") val AC_BUTTON = booleanPreferencesKey("AC_BUTTON_PREF_KEY") + val CLEAR_INPUT_AFTER_EQUALS = booleanPreferencesKey("CLEAR_INPUT_AFTER_EQUALS_PREF_KEY") } 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 1c9089a0..e74567b0 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 @@ -85,6 +85,7 @@ class UserPreferencesRepositoryImpl @Inject constructor( precision = preferences.getDigitsPrecision(), outputFormat = preferences.getOutputFormat(), acButton = preferences.getAcButton(), + clearInputAfterEquals = preferences.getClearInputAfterEquals() ) } @@ -280,6 +281,12 @@ class UserPreferencesRepositoryImpl @Inject constructor( preferences[PrefsKeys.AC_BUTTON] = enabled } } + + override suspend fun updateClearInputAfterEquals(enabled: Boolean) { + dataStore.edit { preferences -> + preferences[PrefsKeys.CLEAR_INPUT_AFTER_EQUALS] = enabled + } + } } private fun Preferences.getEnableDynamicTheme(): Boolean { @@ -376,6 +383,10 @@ private fun Preferences.getAcButton(): Boolean { return this[PrefsKeys.AC_BUTTON] ?: false } +private fun Preferences.getClearInputAfterEquals(): Boolean { + return this[PrefsKeys.CLEAR_INPUT_AFTER_EQUALS] ?: true +} + private inline fun T.letTryOrNull(block: (T) -> R): R? = try { this?.let(block) } catch (e: Exception) { 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 d50e6698..b4af4ef6 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 @@ -120,36 +120,39 @@ internal class CalculatorViewModel @Inject constructor( .stateIn(viewModelScope, CalculatorUIState.Loading) fun addTokens(tokens: String) = _input.update { - val newValue = if (_equalClicked.value) { - _equalClicked.update { false } + val clearInputAfterEquals = _prefs.value?.clearInputAfterEquals ?: true + val newValue = if (_equalClicked.value and clearInputAfterEquals) { TextFieldValue().addTokens(tokens) } else { it.addTokens(tokens) } + _equalClicked.update { false } _fractionJob?.cancel() savedStateHandle[_inputKey] = newValue.text newValue } fun addBracket() = _input.update { - val newValue = if (_equalClicked.value) { - _equalClicked.update { false } + val clearInputAfterEquals = _prefs.value?.clearInputAfterEquals ?: true + val newValue = if (_equalClicked.value and clearInputAfterEquals) { TextFieldValue().addBracket() } else { it.addBracket() } + _equalClicked.update { false } _fractionJob?.cancel() savedStateHandle[_inputKey] = newValue.text newValue } fun deleteTokens() = _input.update { - val newValue = if (_equalClicked.value) { - _equalClicked.update { false } + val clearInputAfterEquals = _prefs.value?.clearInputAfterEquals ?: true + val newValue = if (_equalClicked.value and clearInputAfterEquals) { TextFieldValue().deleteTokens() } else { it.deleteTokens() } + _equalClicked.update { false } _fractionJob?.cancel() savedStateHandle[_inputKey] = newValue.text newValue diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/calculator/CalculatorSettingsScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/calculator/CalculatorSettingsScreen.kt index 163f0e37..6900160e 100644 --- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/calculator/CalculatorSettingsScreen.kt +++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/calculator/CalculatorSettingsScreen.kt @@ -20,6 +20,7 @@ package com.sadellie.unitto.feature.settings.calculator import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.Backspace import androidx.compose.material.icons.filled.Timer import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource @@ -47,7 +48,8 @@ internal fun CalculatorSettingsRoute( CalculatorSettingsScreen( prefs = prefs, navigateUpAction = navigateUpAction, - updatePartialHistoryView = viewModel::updatePartialHistoryView + updatePartialHistoryView = viewModel::updatePartialHistoryView, + updateClearInputAfterEquals = viewModel::updateClearInputAfterEquals, ) } } @@ -58,6 +60,7 @@ private fun CalculatorSettingsScreen( prefs: CalculatorPreferences, navigateUpAction: () -> Unit, updatePartialHistoryView: (Boolean) -> Unit, + updateClearInputAfterEquals: (Boolean) -> Unit, ) { UnittoScreenWithLargeTopBar( title = stringResource(R.string.calculator_title), @@ -73,6 +76,16 @@ private fun CalculatorSettingsScreen( onSwitchChange = updatePartialHistoryView ) } + + item("clear input") { + UnittoListItem( + headlineText = stringResource(R.string.settings_clear_input), + icon = Icons.AutoMirrored.Filled.Backspace, + supportingText = stringResource(R.string.settings_clear_input_support), + switchState = prefs.clearInputAfterEquals, + onSwitchChange = updateClearInputAfterEquals + ) + } } } } @@ -90,8 +103,10 @@ private fun PreviewCalculatorSettingsScreen() { precision = 3, outputFormat = OutputFormat.PLAIN, acButton = true, + clearInputAfterEquals = true, ), navigateUpAction = {}, - updatePartialHistoryView = {} + updatePartialHistoryView = {}, + updateClearInputAfterEquals = {}, ) } diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/calculator/CalculatorViewModel.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/calculator/CalculatorViewModel.kt index b2cb08f3..c7c4650b 100644 --- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/calculator/CalculatorViewModel.kt +++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/calculator/CalculatorViewModel.kt @@ -36,4 +36,8 @@ class CalculatorViewModel @Inject constructor( fun updatePartialHistoryView(enabled: Boolean) = viewModelScope.launch { userPrefsRepository.updatePartialHistoryView(enabled) } + + fun updateClearInputAfterEquals(enabled: Boolean) = viewModelScope.launch { + userPrefsRepository.updateClearInputAfterEquals(enabled) + } }