From 76685339d742ff5f5f0bfec2de98988eec4aef5c Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Wed, 14 Feb 2024 22:42:13 +0300 Subject: [PATCH] Save calculator keyboard state closes #175 --- .../repository/UserPreferencesRepository.kt | 4 + .../model/userprefs/CalculatorPreferences.kt | 2 + .../unitto/data/userprefs/PreferenceExt.kt | 8 ++ .../unitto/data/userprefs/PreferenceModels.kt | 2 + .../unitto/data/userprefs/PrefsKeys.kt | 2 + .../UserPreferencesRepositoryImpl.kt | 14 +++ .../calculator/CalculatorScreenTest.kt | 18 +++- .../feature/calculator/CalculatorScreen.kt | 23 +++-- .../feature/calculator/CalculatorUIState.kt | 2 + .../feature/calculator/CalculatorViewModel.kt | 10 +++ .../components/CalculatorKeyboard.kt | 87 ++++++++++--------- .../calculator/CalculatorSettingsScreen.kt | 2 + 12 files changed, 124 insertions(+), 50 deletions(-) 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 d1304343..c66c76eb 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 @@ -96,4 +96,8 @@ interface UserPreferencesRepository { suspend fun updatePartialHistoryView(enabled: Boolean) suspend fun updateAcButton(enabled: Boolean) + + suspend fun updateAdditionalButtons(enabled: Boolean) + + suspend fun updateInverseMode(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 44f063ae..b73e03d1 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 @@ -25,6 +25,8 @@ interface CalculatorPreferences { val formatterSymbols: FormatterSymbols val middleZero: Boolean val acButton: Boolean + val additionalButtons: Boolean + val inverseMode: Boolean val partialHistoryView: Boolean val precision: Int val outputFormat: Int diff --git a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PreferenceExt.kt b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PreferenceExt.kt index 15e54fbd..a92d7234 100644 --- a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PreferenceExt.kt +++ b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/PreferenceExt.kt @@ -147,6 +147,14 @@ internal fun Preferences.getAcButton(): Boolean { return this[PrefsKeys.AC_BUTTON] ?: true } +internal fun Preferences.getAdditionalButtons(): Boolean { + return this[PrefsKeys.ADDITIONAL_BUTTONS] ?: false +} + +internal fun Preferences.getInverseMode(): Boolean { + return this[PrefsKeys.INVERSE_MODE] ?: false +} + internal fun List.packToString(): String = this.joinToString(",") private inline fun T.letTryOrNull(block: (T) -> R): R? = try { 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 53bfaa16..98913d3f 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 @@ -57,6 +57,8 @@ data class CalculatorPreferencesImpl( override val formatterSymbols: FormatterSymbols, override val middleZero: Boolean, override val acButton: Boolean, + override val additionalButtons: Boolean, + override val inverseMode: Boolean, override val partialHistoryView: Boolean, override val precision: Int, override val outputFormat: Int, 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 8d38aae7..6a82a830 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 @@ -49,6 +49,8 @@ object PrefsKeys { // CALCULATOR val RADIAN_MODE = booleanPreferencesKey("RADIAN_MODE_PREF_KEY") val PARTIAL_HISTORY_VIEW = booleanPreferencesKey("PARTIAL_HISTORY_VIEW_PREF_KEY") + val ADDITIONAL_BUTTONS = booleanPreferencesKey("ADDITIONAL_BUTTONS_PREF_KEY") + val INVERSE_MODE = booleanPreferencesKey("INVERSE_MODE_PREF_KEY") // UNIT CONVERTER val LATEST_LEFT_SIDE = stringPreferencesKey("LATEST_LEFT_SIDE_PREF_KEY") diff --git a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferencesRepositoryImpl.kt b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferencesRepositoryImpl.kt index 0619eb07..5277ddb2 100644 --- a/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferencesRepositoryImpl.kt +++ b/data/userprefs/src/main/java/com/sadellie/unitto/data/userprefs/UserPreferencesRepositoryImpl.kt @@ -84,6 +84,8 @@ class UserPreferencesRepositoryImpl @Inject constructor( precision = preferences.getDigitsPrecision(), outputFormat = preferences.getOutputFormat(), acButton = preferences.getAcButton(), + additionalButtons = preferences.getAdditionalButtons(), + inverseMode = preferences.getInverseMode(), ) } @@ -312,4 +314,16 @@ class UserPreferencesRepositoryImpl @Inject constructor( preferences[PrefsKeys.AC_BUTTON] = enabled } } + + override suspend fun updateAdditionalButtons(enabled: Boolean) { + dataStore.edit { preferences -> + preferences[PrefsKeys.ADDITIONAL_BUTTONS] = enabled + } + } + + override suspend fun updateInverseMode(enabled: Boolean) { + dataStore.edit { preferences -> + preferences[PrefsKeys.INVERSE_MODE] = enabled + } + } } diff --git a/feature/calculator/src/androidTest/java/com/sadellie/unitto/feature/calculator/CalculatorScreenTest.kt b/feature/calculator/src/androidTest/java/com/sadellie/unitto/feature/calculator/CalculatorScreenTest.kt index a0e1dd50..85e1e21e 100644 --- a/feature/calculator/src/androidTest/java/com/sadellie/unitto/feature/calculator/CalculatorScreenTest.kt +++ b/feature/calculator/src/androidTest/java/com/sadellie/unitto/feature/calculator/CalculatorScreenTest.kt @@ -51,6 +51,8 @@ class CalculatorScreenTest { history = emptyList(), middleZero = false, acButton = true, + additionalButtons = false, + inverseMode = false, partialHistoryView = true ), openDrawer = {}, @@ -60,9 +62,12 @@ class CalculatorScreenTest { onDeleteClick = {}, onClearClick = {}, onEqualClick = {}, - onAngleClick = {}, + onRadianModeClick = {}, + onAdditionalButtonsClick = {}, + onInverseModeClick = {}, onClearHistoryClick = {}, - ) {} + onDeleteHistoryItemClick = {}, + ) } onNodeWithTag("loading").assertDoesNotExist() @@ -83,6 +88,8 @@ class CalculatorScreenTest { history = emptyList(), middleZero = false, acButton = true, + additionalButtons = false, + inverseMode = false, partialHistoryView = true ), openDrawer = {}, @@ -92,9 +99,12 @@ class CalculatorScreenTest { onDeleteClick = {}, onClearClick = {}, onEqualClick = {}, - onAngleClick = {}, + onRadianModeClick = {}, + onAdditionalButtonsClick = {}, + onInverseModeClick = {}, onClearHistoryClick = {}, - ) {} + onDeleteHistoryItemClick = {}, + ) } onNodeWithTag("inputBox") 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 46efaa8c..37db5b22 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 @@ -97,7 +97,9 @@ internal fun CalculatorRoute( onDeleteClick = viewModel::deleteTokens, onClearClick = viewModel::clearInput, onEqualClick = viewModel::equal, - onAngleClick = viewModel::updateRadianMode, + onRadianModeClick = viewModel::updateRadianMode, + onAdditionalButtonsClick = viewModel::updateAdditionalButtons, + onInverseModeClick = viewModel::updateInverseMode, onClearHistoryClick = viewModel::clearHistory, onDeleteHistoryItemClick = viewModel::deleteHistoryItem, ) @@ -114,7 +116,9 @@ internal fun Ready( onDeleteClick: () -> Unit, onClearClick: () -> Unit, onEqualClick: () -> Unit, - onAngleClick: (Boolean) -> Unit, + onRadianModeClick: (Boolean) -> Unit, + onAdditionalButtonsClick: (Boolean) -> Unit, + onInverseModeClick: (Boolean) -> Unit, onClearHistoryClick: () -> Unit, onDeleteHistoryItemClick: (HistoryItem) -> Unit, ) { @@ -248,8 +252,12 @@ internal fun Ready( onDeleteClick = onDeleteClick, onClearClick = onClearClick, onEqualClick = { focusManager.clearFocus(); onEqualClick() }, - onAngleClick = onAngleClick, radianMode = uiState.radianMode, + onRadianModeClick = onRadianModeClick, + additionalButtons = uiState.additionalButtons, + onAdditionalButtonsClick = onAdditionalButtonsClick, + inverseMode = uiState.inverseMode, + onInverseModeClick = onInverseModeClick, showAcButton = uiState.acButton, middleZero = uiState.middleZero, fractional = uiState.formatterSymbols.fractional, @@ -329,6 +337,8 @@ private fun PreviewCalculatorScreen() { history = historyItems, middleZero = false, acButton = true, + additionalButtons = false, + inverseMode = false, partialHistoryView = true ), openDrawer = {}, @@ -338,7 +348,10 @@ private fun PreviewCalculatorScreen() { onDeleteClick = {}, onClearClick = {}, onEqualClick = {}, - onAngleClick = {}, + onRadianModeClick = {}, + onAdditionalButtonsClick = {}, + onInverseModeClick = {}, onClearHistoryClick = {}, - ) {} + onDeleteHistoryItemClick = {}, + ) } \ No newline at end of file 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 3a2b844a..80455628 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 @@ -35,6 +35,8 @@ internal sealed class CalculatorUIState { val history: List, val middleZero: Boolean, val acButton: Boolean, + val additionalButtons: Boolean, + val inverseMode: Boolean, val partialHistoryView: Boolean, ) : CalculatorUIState() } 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 98b6714f..6889e942 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 @@ -83,6 +83,8 @@ internal class CalculatorViewModel @Inject constructor( history = history, middleZero = prefs.middleZero, acButton = prefs.acButton, + additionalButtons = prefs.additionalButtons, + inverseMode = prefs.inverseMode, partialHistoryView = prefs.partialHistoryView, ) } @@ -158,6 +160,14 @@ internal class CalculatorViewModel @Inject constructor( userPrefsRepository.updateRadianMode(newValue) } + fun updateAdditionalButtons(newValue: Boolean) = viewModelScope.launch { + userPrefsRepository.updateAdditionalButtons(newValue) + } + + fun updateInverseMode(newValue: Boolean) = viewModelScope.launch { + userPrefsRepository.updateInverseMode(newValue) + } + fun clearHistory() = viewModelScope.launch(Dispatchers.IO) { calculatorHistoryRepository.clear() } 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 9e04c96f..d629b9ce 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 @@ -44,9 +44,7 @@ import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.rotate @@ -119,14 +117,16 @@ internal fun CalculatorKeyboard( onDeleteClick: () -> Unit, onClearClick: () -> Unit, onEqualClick: () -> Unit, - onAngleClick: (Boolean) -> Unit, radianMode: Boolean, + onRadianModeClick: (Boolean) -> Unit, + additionalButtons: Boolean, + onAdditionalButtonsClick: (Boolean) -> Unit, + inverseMode: Boolean, + onInverseModeClick: (Boolean) -> Unit, showAcButton: Boolean, middleZero: Boolean, fractional: String, ) { - var showInvButtons: Boolean by remember { mutableStateOf(false) } - if (LocalWindowSize.current.heightSizeClass < WindowHeightSizeClass.Medium) { LandscapeKeyboard( modifier = modifier, @@ -135,10 +135,10 @@ internal fun CalculatorKeyboard( onDeleteClick = onDeleteClick, onClearClick = onClearClick, onEqualClick = onEqualClick, - onInvClick = { showInvButtons = !showInvButtons }, - onAngleClick = onAngleClick, - showInvButtons = showInvButtons, radianMode = radianMode, + onRadianModeClick = onRadianModeClick, + inverseMode = inverseMode, + onInverseModeClick = onInverseModeClick, showAcButton = showAcButton, middleZero = middleZero, fractional = fractional, @@ -151,10 +151,12 @@ internal fun CalculatorKeyboard( onDeleteClick = onDeleteClick, onClearClick = onClearClick, onEqualClick = onEqualClick, - onInvClick = { showInvButtons = !showInvButtons }, - onAngleClick = onAngleClick, - showInvButtons = showInvButtons, radianMode = radianMode, + onRadianModeClick = onRadianModeClick, + additionalButtons = additionalButtons, + onAdditionalButtonsClick = onAdditionalButtonsClick, + inverseMode = inverseMode, + onInverseModeClick = onInverseModeClick, showAcButton = showAcButton, middleZero = middleZero, fractional = fractional, @@ -170,10 +172,12 @@ private fun PortraitKeyboard( onDeleteClick: () -> Unit, onClearClick: () -> Unit, onEqualClick: () -> Unit, - onInvClick: () -> Unit, - onAngleClick: (Boolean) -> Unit, - showInvButtons: Boolean, radianMode: Boolean, + onRadianModeClick: (Boolean) -> Unit, + additionalButtons: Boolean, + onAdditionalButtonsClick: (Boolean) -> Unit, + inverseMode: Boolean, + onInverseModeClick: (Boolean) -> Unit, showAcButton: Boolean, middleZero: Boolean, fractional: String, @@ -184,9 +188,8 @@ private fun PortraitKeyboard( val fractionalIcon = remember(fractional) { if (fractional == Token.PERIOD) IconPack.Dot else IconPack.Comma } val fractionalIconDescription = remember(fractional) { if (fractional == Token.PERIOD) R.string.keyboard_dot else R.string.comma } - var showAdditional: Boolean by remember { mutableStateOf(false) } val expandRotation: Float by animateFloatAsState( - targetValue = if (showAdditional) 180f else 0f, + targetValue = if (additionalButtons) 180f else 0f, animationSpec = tween(easing = FastOutSlowInEasing), label = "Rotate on expand" ) @@ -205,7 +208,7 @@ private fun PortraitKeyboard( horizontalArrangement = Arrangement.Start ) { Crossfade( - targetState = showInvButtons, + targetState = inverseMode, label = "Inverse switch", modifier = Modifier .fillMaxWidth() @@ -214,7 +217,7 @@ private fun PortraitKeyboard( if (inverse) { AdditionalPortrait( modifier = Modifier.fillMaxWidth(), - showAdditional = showAdditional, + additionalButtons = additionalButtons, buttonHeight = additionalButtonHeight, content1 = { buttonModifier -> KeyboardButtonAdditional(buttonModifier, IconPack.Modulo, stringResource(R.string.keyboard_modulo), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Operator.modulo) } @@ -223,12 +226,12 @@ private fun PortraitKeyboard( KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, stringResource(R.string.keyboard_factorial), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Operator.factorial) } }, content2 = { buttonModifier -> - KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), KeyboardButtonContentHeightTallAdditional) { onAngleClick(!radianMode) } + KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), KeyboardButtonContentHeightTallAdditional) { onRadianModeClick(!radianMode) } KeyboardButtonAdditional(buttonModifier, IconPack.ArSin, stringResource(R.string.keyboard_arsin), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Func.arsinBracket) } KeyboardButtonAdditional(buttonModifier, IconPack.ArCos, stringResource(R.string.keyboard_arcos), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Func.arcosBracket) } KeyboardButtonAdditional(buttonModifier, IconPack.AcTan, stringResource(R.string.keyboard_actan), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Func.actanBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), KeyboardButtonContentHeightTallAdditional) { onInvClick() } + KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), KeyboardButtonContentHeightTallAdditional) { onInverseModeClick(!inverseMode) } KeyboardButtonAdditional(buttonModifier, IconPack.Euler, stringResource(R.string.keyboard_euler), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Const.e) } KeyboardButtonAdditional(buttonModifier, IconPack.Ex, stringResource(R.string.keyboard_exp), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Func.expBracket) } KeyboardButtonAdditional(buttonModifier, IconPack.Power10, stringResource(R.string.keyboard_power_10), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Digit._1 + Token.Digit._0 + Token.Operator.power) } @@ -237,7 +240,7 @@ private fun PortraitKeyboard( } else { AdditionalPortrait( modifier = Modifier.fillMaxWidth(), - showAdditional = showAdditional, + additionalButtons = additionalButtons, buttonHeight = additionalButtonHeight, content1 = { buttonModifier -> KeyboardButtonAdditional(buttonModifier, IconPack.Root, stringResource(R.string.keyboard_root), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Operator.sqrt) } @@ -246,12 +249,12 @@ private fun PortraitKeyboard( KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, stringResource(R.string.keyboard_factorial), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Operator.factorial) } }, content2 = { buttonModifier -> - KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), KeyboardButtonContentHeightTallAdditional) { onAngleClick(!radianMode) } + KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), KeyboardButtonContentHeightTallAdditional) { onRadianModeClick(!radianMode) } KeyboardButtonAdditional(buttonModifier, IconPack.Sin, stringResource(R.string.keyboard_sin), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Func.sinBracket) } KeyboardButtonAdditional(buttonModifier, IconPack.Cos, stringResource(R.string.keyboard_cos), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Func.cosBracket) } KeyboardButtonAdditional(buttonModifier, IconPack.Tan, stringResource(R.string.keyboard_tan), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Func.tanBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), KeyboardButtonContentHeightTallAdditional) { onInvClick() } + KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), KeyboardButtonContentHeightTallAdditional) { onInverseModeClick(!inverseMode) } KeyboardButtonAdditional(buttonModifier, IconPack.Euler, stringResource(R.string.keyboard_exp), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Const.e) } KeyboardButtonAdditional(buttonModifier, IconPack.Ln, stringResource(R.string.keyboard_ln), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Func.lnBracket) } KeyboardButtonAdditional(buttonModifier, IconPack.Log, stringResource(R.string.keyboard_log), KeyboardButtonContentHeightTallAdditional) { onAddTokenClick(Token.Func.logBracket) } @@ -265,7 +268,7 @@ private fun PortraitKeyboard( contentAlignment = Alignment.Center ) { IconButton( - onClick = { showAdditional = !showAdditional }, + onClick = { onAdditionalButtonsClick(!additionalButtons) }, colors = IconButtonDefaults.iconButtonColors(containerColor = MaterialTheme.colorScheme.inverseOnSurface) ) { Icon(Icons.Default.ExpandMore, null, Modifier.rotate(expandRotation)) @@ -333,7 +336,7 @@ private fun PortraitKeyboard( * * Height: 3 buttons * - * @param showAdditional When `true` reveals [content2] with animation. + * @param additionalButtons When `true` reveals [content2] with animation. * @param buttonHeight Button height in [Dp]. * @param content1 First row of buttons. * @param content2 Second and third rows of buttons. @@ -341,13 +344,13 @@ private fun PortraitKeyboard( @Composable private fun AdditionalPortrait( modifier: Modifier, - showAdditional: Boolean, + additionalButtons: Boolean, buttonHeight: Dp, content1: @Composable (buttonModifier: Modifier) -> Unit, content2: @Composable (buttonModifier: Modifier) -> Unit ) { AnimatedContent( - targetState = showAdditional, + targetState = additionalButtons, modifier = modifier, label = "Additional buttons reveal", transitionSpec = { @@ -402,10 +405,10 @@ private fun LandscapeKeyboard( onDeleteClick: () -> Unit, onClearClick: () -> Unit, onEqualClick: () -> Unit, - onInvClick: () -> Unit, - onAngleClick: (Boolean) -> Unit, - showInvButtons: Boolean, radianMode: Boolean, + onRadianModeClick: (Boolean) -> Unit, + inverseMode: Boolean, + onInverseModeClick: (Boolean) -> Unit, showAcButton: Boolean, middleZero: Boolean, fractional: String, @@ -417,7 +420,7 @@ private fun LandscapeKeyboard( val fractionalIconDescription = remember(fractional) { if (fractional == Token.PERIOD) R.string.keyboard_dot else R.string.comma } Crossfade( - targetState = showInvButtons, + targetState = inverseMode, label = "Inverse switch", modifier = modifier ) { inverse -> @@ -431,7 +434,7 @@ private fun LandscapeKeyboard( .fillMaxWidth(width) .fillMaxHeight(height) - KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), KeyboardButtonContentHeightShortAdditional) { onAngleClick(!radianMode) } + KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), KeyboardButtonContentHeightShortAdditional) { onRadianModeClick(!radianMode) } KeyboardButtonAdditional(buttonModifier, IconPack.Modulo, stringResource(R.string.keyboard_modulo), KeyboardButtonContentHeightShortAdditional) { onAddTokenClick(Token.Operator.modulo) } KeyboardButtonAdditional(buttonModifier, IconPack.Pi, stringResource(R.string.keyboard_pi), KeyboardButtonContentHeightShortAdditional) { onAddTokenClick(Token.Const.pi) } KeyboardButtonLight(buttonModifier, IconPack.Key7, Token.Digit._7, KeyboardButtonContentHeightShort) { onAddTokenClick(Token.Digit._7) } @@ -445,7 +448,7 @@ private fun LandscapeKeyboard( KeyboardButtonFilled(buttonModifier, IconPack.RightBracket, stringResource(R.string.keyboard_right_bracket), KeyboardButtonContentHeightShort) { onAddTokenClick(Token.Operator.rightBracket) } } - KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), KeyboardButtonContentHeightShortAdditional) { onInvClick() } + KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), KeyboardButtonContentHeightShortAdditional) { onInverseModeClick(!inverseMode) } KeyboardButtonAdditional(buttonModifier, IconPack.Power, stringResource(R.string.keyboard_power), KeyboardButtonContentHeightShortAdditional) { onAddTokenClick(Token.Operator.power) } KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, stringResource(R.string.keyboard_factorial), KeyboardButtonContentHeightShortAdditional) { onAddTokenClick(Token.Operator.factorial) } KeyboardButtonLight(buttonModifier, IconPack.Key4, Token.Digit._4, KeyboardButtonContentHeightShort) { onAddTokenClick(Token.Digit._4) } @@ -487,7 +490,7 @@ private fun LandscapeKeyboard( .fillMaxWidth(width) .fillMaxHeight(height) - KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), KeyboardButtonContentHeightShortAdditional) { onAngleClick(!radianMode) } + KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), KeyboardButtonContentHeightShortAdditional) { onRadianModeClick(!radianMode) } KeyboardButtonAdditional(buttonModifier, IconPack.Root, stringResource(R.string.keyboard_root), KeyboardButtonContentHeightShortAdditional) { onAddTokenClick(Token.Operator.sqrt) } KeyboardButtonAdditional(buttonModifier, IconPack.Pi, stringResource(R.string.keyboard_pi), KeyboardButtonContentHeightShortAdditional) { onAddTokenClick(Token.Const.pi) } KeyboardButtonLight(buttonModifier, IconPack.Key7, Token.Digit._7, KeyboardButtonContentHeightShort) { onAddTokenClick(Token.Digit._7) } @@ -501,7 +504,7 @@ private fun LandscapeKeyboard( KeyboardButtonFilled(buttonModifier, IconPack.RightBracket, stringResource(R.string.keyboard_right_bracket), KeyboardButtonContentHeightShort) { onAddTokenClick(Token.Operator.rightBracket) } } - KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), KeyboardButtonContentHeightShortAdditional) { onInvClick() } + KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), KeyboardButtonContentHeightShortAdditional) { onInverseModeClick(!inverseMode) } KeyboardButtonAdditional(buttonModifier, IconPack.Power, stringResource(R.string.keyboard_power), KeyboardButtonContentHeightShortAdditional) { onAddTokenClick(Token.Operator.power) } KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, stringResource(R.string.keyboard_factorial), KeyboardButtonContentHeightShortAdditional) { onAddTokenClick(Token.Operator.factorial) } KeyboardButtonLight(buttonModifier, IconPack.Key4, Token.Digit._4, KeyboardButtonContentHeightShort) { onAddTokenClick(Token.Digit._4) } @@ -547,10 +550,12 @@ private fun PreviewPortraitKeyboard() { onDeleteClick = {}, onClearClick = {}, onEqualClick = {}, - onInvClick = {}, - onAngleClick = {}, - showInvButtons = false, radianMode = true, + onRadianModeClick = {}, + additionalButtons = false, + onAdditionalButtonsClick = {}, + inverseMode = false, + onInverseModeClick = {}, showAcButton = true, middleZero = false, fractional = Token.PERIOD, @@ -567,10 +572,10 @@ private fun PreviewLandscapeKeyboard() { onDeleteClick = {}, onClearClick = {}, onEqualClick = {}, - onInvClick = {}, - onAngleClick = {}, - showInvButtons = false, radianMode = true, + onRadianModeClick = {}, + inverseMode = false, + onInverseModeClick = {}, showAcButton = true, middleZero = false, fractional = Token.PERIOD, 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 0a684734..cee574b9 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 @@ -87,6 +87,8 @@ private fun PreviewCalculatorSettingsScreenStandard() { formatterSymbols = FormatterSymbols(Token.SPACE, Token.PERIOD), middleZero = false, acButton = false, + additionalButtons = false, + inverseMode = false, partialHistoryView = false, precision = 3, outputFormat = OutputFormat.PLAIN