Continuous calculations

closes #147
This commit is contained in:
Sad Ellie 2024-01-03 14:45:44 +03:00
parent 659b64ebd4
commit d0fcf5b138
13 changed files with 4 additions and 52 deletions

View File

@ -83,7 +83,6 @@ class BackupManagerTest {
// CALCULATOR // CALCULATOR
it[PrefsKeys.RADIAN_MODE] = FakeUsrPreferenceValues.radianMode it[PrefsKeys.RADIAN_MODE] = FakeUsrPreferenceValues.radianMode
it[PrefsKeys.PARTIAL_HISTORY_VIEW] = FakeUsrPreferenceValues.partialHistoryView it[PrefsKeys.PARTIAL_HISTORY_VIEW] = FakeUsrPreferenceValues.partialHistoryView
it[PrefsKeys.CLEAR_INPUT_AFTER_EQUALS] = FakeUsrPreferenceValues.clearInputAfterEquals
// UNIT CONVERTER // UNIT CONVERTER
it[PrefsKeys.LATEST_LEFT_SIDE] = FakeUsrPreferenceValues.latestLeftSide it[PrefsKeys.LATEST_LEFT_SIDE] = FakeUsrPreferenceValues.latestLeftSide
@ -116,7 +115,6 @@ class BackupManagerTest {
outputFormat = FakeUsrPreferenceValues.outputFormat, outputFormat = FakeUsrPreferenceValues.outputFormat,
radianMode = FakeUsrPreferenceValues.radianMode, radianMode = FakeUsrPreferenceValues.radianMode,
partialHistoryView = FakeUsrPreferenceValues.partialHistoryView, partialHistoryView = FakeUsrPreferenceValues.partialHistoryView,
clearInputAfterEquals = FakeUsrPreferenceValues.clearInputAfterEquals,
latestLeftSide = FakeUsrPreferenceValues.latestLeftSide, latestLeftSide = FakeUsrPreferenceValues.latestLeftSide,
latestRightSide = FakeUsrPreferenceValues.latestRightSide, latestRightSide = FakeUsrPreferenceValues.latestRightSide,
shownUnitGroups = FakeUsrPreferenceValues.shownUnitGroups, shownUnitGroups = FakeUsrPreferenceValues.shownUnitGroups,

View File

@ -29,7 +29,6 @@ import com.sadellie.unitto.data.database.TimeZoneDao
import com.sadellie.unitto.data.database.UnitsDao import com.sadellie.unitto.data.database.UnitsDao
import com.sadellie.unitto.data.userprefs.PrefsKeys import com.sadellie.unitto.data.userprefs.PrefsKeys
import com.sadellie.unitto.data.userprefs.getAcButton import com.sadellie.unitto.data.userprefs.getAcButton
import com.sadellie.unitto.data.userprefs.getClearInputAfterEquals
import com.sadellie.unitto.data.userprefs.getCustomColor import com.sadellie.unitto.data.userprefs.getCustomColor
import com.sadellie.unitto.data.userprefs.getDigitsPrecision import com.sadellie.unitto.data.userprefs.getDigitsPrecision
import com.sadellie.unitto.data.userprefs.getEnableAmoledTheme import com.sadellie.unitto.data.userprefs.getEnableAmoledTheme
@ -137,7 +136,6 @@ class BackupManager @Inject constructor(
outputFormat = data.getOutputFormat(), outputFormat = data.getOutputFormat(),
radianMode = data.getRadianMode(), radianMode = data.getRadianMode(),
partialHistoryView = data.getPartialHistoryView(), partialHistoryView = data.getPartialHistoryView(),
clearInputAfterEquals = data.getClearInputAfterEquals(),
latestLeftSide = data.getLatestLeftSide(), latestLeftSide = data.getLatestLeftSide(),
latestRightSide = data.getLatestRightSide(), latestRightSide = data.getLatestRightSide(),
shownUnitGroups = data.getShownUnitGroups().joinToString(","), shownUnitGroups = data.getShownUnitGroups().joinToString(","),
@ -174,7 +172,6 @@ class BackupManager @Inject constructor(
// CALCULATOR // CALCULATOR
it[PrefsKeys.RADIAN_MODE] = userData.radianMode it[PrefsKeys.RADIAN_MODE] = userData.radianMode
it[PrefsKeys.PARTIAL_HISTORY_VIEW] = userData.partialHistoryView it[PrefsKeys.PARTIAL_HISTORY_VIEW] = userData.partialHistoryView
it[PrefsKeys.CLEAR_INPUT_AFTER_EQUALS] = userData.clearInputAfterEquals
// UNIT CONVERTER // UNIT CONVERTER
it[PrefsKeys.LATEST_LEFT_SIDE] = userData.latestLeftSide it[PrefsKeys.LATEST_LEFT_SIDE] = userData.latestLeftSide

View File

@ -46,7 +46,6 @@ internal data class UserData(
@Json(name = "radianMode") val radianMode: Boolean, @Json(name = "radianMode") val radianMode: Boolean,
@Json(name = "partialHistoryView") val partialHistoryView: Boolean, @Json(name = "partialHistoryView") val partialHistoryView: Boolean,
@Json(name = "clearInputAfterEquals") val clearInputAfterEquals: Boolean,
@Json(name = "latestLeftSide") val latestLeftSide: String, @Json(name = "latestLeftSide") val latestLeftSide: String,
@Json(name = "latestRightSide") val latestRightSide: String, @Json(name = "latestRightSide") val latestRightSide: String,

View File

@ -87,7 +87,5 @@ interface UserPreferencesRepository {
suspend fun updateAcButton(enabled: Boolean) suspend fun updateAcButton(enabled: Boolean)
suspend fun updateClearInputAfterEquals(enabled: Boolean)
suspend fun updateRpnMode(enabled: Boolean) suspend fun updateRpnMode(enabled: Boolean)
} }

View File

@ -27,5 +27,4 @@ interface CalculatorPreferences {
val partialHistoryView: Boolean val partialHistoryView: Boolean
val precision: Int val precision: Int
val outputFormat: Int val outputFormat: Int
val clearInputAfterEquals: Boolean
} }

View File

@ -124,10 +124,6 @@ fun Preferences.getAcButton(): Boolean {
return this[PrefsKeys.AC_BUTTON] ?: true return this[PrefsKeys.AC_BUTTON] ?: true
} }
fun Preferences.getClearInputAfterEquals(): Boolean {
return this[PrefsKeys.CLEAR_INPUT_AFTER_EQUALS] ?: false
}
fun Preferences.getRpnMode(): Boolean { fun Preferences.getRpnMode(): Boolean {
return this[PrefsKeys.RPN_MODE] ?: false return this[PrefsKeys.RPN_MODE] ?: false
} }

View File

@ -57,7 +57,6 @@ data class CalculatorPreferencesImpl(
override val partialHistoryView: Boolean, override val partialHistoryView: Boolean,
override val precision: Int, override val precision: Int,
override val outputFormat: Int, override val outputFormat: Int,
override val clearInputAfterEquals: Boolean,
) : CalculatorPreferences ) : CalculatorPreferences
data class ConverterPreferencesImpl( data class ConverterPreferencesImpl(

View File

@ -46,7 +46,6 @@ object PrefsKeys {
// CALCULATOR // CALCULATOR
val RADIAN_MODE = booleanPreferencesKey("RADIAN_MODE_PREF_KEY") val RADIAN_MODE = booleanPreferencesKey("RADIAN_MODE_PREF_KEY")
val PARTIAL_HISTORY_VIEW = booleanPreferencesKey("PARTIAL_HISTORY_VIEW_PREF_KEY") val PARTIAL_HISTORY_VIEW = booleanPreferencesKey("PARTIAL_HISTORY_VIEW_PREF_KEY")
val CLEAR_INPUT_AFTER_EQUALS = booleanPreferencesKey("CLEAR_INPUT_AFTER_EQUALS_PREF_KEY")
// UNIT CONVERTER // UNIT CONVERTER
val LATEST_LEFT_SIDE = stringPreferencesKey("LATEST_LEFT_SIDE_PREF_KEY") val LATEST_LEFT_SIDE = stringPreferencesKey("LATEST_LEFT_SIDE_PREF_KEY")

View File

@ -81,7 +81,6 @@ class UserPreferencesRepositoryImpl @Inject constructor(
precision = preferences.getDigitsPrecision(), precision = preferences.getDigitsPrecision(),
outputFormat = preferences.getOutputFormat(), outputFormat = preferences.getOutputFormat(),
acButton = preferences.getAcButton(), acButton = preferences.getAcButton(),
clearInputAfterEquals = preferences.getClearInputAfterEquals()
) )
} }
@ -278,12 +277,6 @@ class UserPreferencesRepositoryImpl @Inject constructor(
} }
} }
override suspend fun updateClearInputAfterEquals(enabled: Boolean) {
dataStore.edit { preferences ->
preferences[PrefsKeys.CLEAR_INPUT_AFTER_EQUALS] = enabled
}
}
override suspend fun updateRpnMode(enabled: Boolean) { override suspend fun updateRpnMode(enabled: Boolean) {
dataStore.edit { preferences -> dataStore.edit { preferences ->
preferences[PrefsKeys.RPN_MODE] = enabled preferences[PrefsKeys.RPN_MODE] = enabled

View File

@ -116,8 +116,8 @@ internal class CalculatorViewModel @Inject constructor(
.stateIn(viewModelScope, CalculatorUIState.Loading) .stateIn(viewModelScope, CalculatorUIState.Loading)
fun addTokens(tokens: String) = _input.update { fun addTokens(tokens: String) = _input.update {
val clearInputAfterEquals = _prefs.value?.clearInputAfterEquals ?: true val newValue = if (_equalClicked.value and Token.Digit.allWithDot.contains(tokens)) {
val newValue = if (_equalClicked.value and clearInputAfterEquals) { // Clean input after clicking "=" and any token that is a Digit
TextFieldValue().addTokens(tokens) TextFieldValue().addTokens(tokens)
} else { } else {
it.addTokens(tokens) it.addTokens(tokens)
@ -129,12 +129,7 @@ internal class CalculatorViewModel @Inject constructor(
} }
fun addBracket() = _input.update { fun addBracket() = _input.update {
val clearInputAfterEquals = _prefs.value?.clearInputAfterEquals ?: true val newValue = it.addBracket()
val newValue = if (_equalClicked.value and clearInputAfterEquals) {
TextFieldValue().addBracket()
} else {
it.addBracket()
}
_equalClicked.update { false } _equalClicked.update { false }
_fractionJob?.cancel() _fractionJob?.cancel()
savedStateHandle[_inputKey] = newValue.text savedStateHandle[_inputKey] = newValue.text
@ -142,8 +137,7 @@ internal class CalculatorViewModel @Inject constructor(
} }
fun deleteTokens() = _input.update { fun deleteTokens() = _input.update {
val clearInputAfterEquals = _prefs.value?.clearInputAfterEquals ?: true val newValue = if (_equalClicked.value) {
val newValue = if (_equalClicked.value and clearInputAfterEquals) {
TextFieldValue().deleteTokens() TextFieldValue().deleteTokens()
} else { } else {
it.deleteTokens() it.deleteTokens()

View File

@ -22,7 +22,6 @@ import androidx.compose.animation.Crossfade
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Backspace
import androidx.compose.material.icons.filled.Timer import androidx.compose.material.icons.filled.Timer
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -48,7 +47,6 @@ internal fun CalculatorSettingsRoute(
uiState = prefs, uiState = prefs,
navigateUpAction = navigateUpAction, navigateUpAction = navigateUpAction,
updatePartialHistoryView = viewModel::updatePartialHistoryView, updatePartialHistoryView = viewModel::updatePartialHistoryView,
updateClearInputAfterEquals = viewModel::updateClearInputAfterEquals,
updateRpnMode = viewModel::updateRpnMode, updateRpnMode = viewModel::updateRpnMode,
) )
} }
@ -61,7 +59,6 @@ private fun CalculatorSettingsScreen(
uiState: CalculatorSettingsUIState, uiState: CalculatorSettingsUIState,
navigateUpAction: () -> Unit, navigateUpAction: () -> Unit,
updatePartialHistoryView: (Boolean) -> Unit, updatePartialHistoryView: (Boolean) -> Unit,
updateClearInputAfterEquals: (Boolean) -> Unit,
updateRpnMode: (Boolean) -> Unit, updateRpnMode: (Boolean) -> Unit,
) { ) {
UnittoScreenWithLargeTopBar( UnittoScreenWithLargeTopBar(
@ -104,14 +101,6 @@ private fun CalculatorSettingsScreen(
switchState = state.partialHistoryView, switchState = state.partialHistoryView,
onSwitchChange = updatePartialHistoryView onSwitchChange = updatePartialHistoryView
) )
UnittoListItem(
headlineText = stringResource(R.string.settings_clear_input),
icon = Icons.AutoMirrored.Filled.Backspace,
supportingText = stringResource(R.string.settings_clear_input_support),
switchState = state.clearInputAfterEquals,
onSwitchChange = updateClearInputAfterEquals
)
} }
} }
@ -128,11 +117,9 @@ private fun PreviewCalculatorSettingsScreenStandard() {
CalculatorSettingsScreen( CalculatorSettingsScreen(
uiState = CalculatorSettingsUIState.Standard( uiState = CalculatorSettingsUIState.Standard(
partialHistoryView = true, partialHistoryView = true,
clearInputAfterEquals = false
), ),
navigateUpAction = {}, navigateUpAction = {},
updatePartialHistoryView = {}, updatePartialHistoryView = {},
updateClearInputAfterEquals = {},
updateRpnMode = {} updateRpnMode = {}
) )
} }
@ -144,7 +131,6 @@ private fun PreviewCalculatorSettingsScreenRPN() {
uiState = CalculatorSettingsUIState.RPN, uiState = CalculatorSettingsUIState.RPN,
navigateUpAction = {}, navigateUpAction = {},
updatePartialHistoryView = {}, updatePartialHistoryView = {},
updateClearInputAfterEquals = {},
updateRpnMode = {} updateRpnMode = {}
) )
} }

View File

@ -25,6 +25,5 @@ internal sealed class CalculatorSettingsUIState {
data class Standard( data class Standard(
val partialHistoryView: Boolean, val partialHistoryView: Boolean,
val clearInputAfterEquals: Boolean,
) : CalculatorSettingsUIState() ) : CalculatorSettingsUIState()
} }

View File

@ -40,7 +40,6 @@ internal class CalculatorSettingsViewModel @Inject constructor(
} else { } else {
CalculatorSettingsUIState.Standard( CalculatorSettingsUIState.Standard(
partialHistoryView = calc.partialHistoryView, partialHistoryView = calc.partialHistoryView,
clearInputAfterEquals = calc.clearInputAfterEquals
) )
} }
} }
@ -50,10 +49,6 @@ internal class CalculatorSettingsViewModel @Inject constructor(
userPrefsRepository.updatePartialHistoryView(enabled) userPrefsRepository.updatePartialHistoryView(enabled)
} }
fun updateClearInputAfterEquals(enabled: Boolean) = viewModelScope.launch {
userPrefsRepository.updateClearInputAfterEquals(enabled)
}
fun updateRpnMode(enabled: Boolean) = viewModelScope.launch { fun updateRpnMode(enabled: Boolean) = viewModelScope.launch {
userPrefsRepository.updateRpnMode(enabled) userPrefsRepository.updateRpnMode(enabled)
} }