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)
+ }
}