Save calculator keyboard state

closes #175
This commit is contained in:
Sad Ellie 2024-02-14 22:42:13 +03:00
parent b0a04f4797
commit 76685339d7
12 changed files with 124 additions and 50 deletions

View File

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

View File

@ -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

View File

@ -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<UnitGroup>.packToString(): String = this.joinToString(",")
private inline fun <T, R> T.letTryOrNull(block: (T) -> R): R? = try {

View File

@ -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,

View File

@ -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")

View File

@ -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
}
}
}

View File

@ -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")

View File

@ -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 = {},
)
}

View File

@ -35,6 +35,8 @@ internal sealed class CalculatorUIState {
val history: List<HistoryItem>,
val middleZero: Boolean,
val acButton: Boolean,
val additionalButtons: Boolean,
val inverseMode: Boolean,
val partialHistoryView: Boolean,
) : CalculatorUIState()
}

View File

@ -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()
}

View File

@ -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,

View File

@ -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