From 0e0a545ee1fcec82e462a452c1d8a8dc06f93cbe Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Sun, 21 Jan 2024 21:22:28 +0300 Subject: [PATCH] Add content description for keyboard buttons closes #166 --- core/base/src/main/res/values/strings.xml | 112 ++++++- .../unitto/core/ui/common/KeyboardButton.kt | 13 +- .../calculator/RPNCalculatorKeyboard.kt | 106 +++---- .../components/CalculatorKeyboard.kt | 284 +++++++++--------- .../converter/components/ConverterKeyboard.kt | 90 +++--- .../settings/formatting/FormattingScreen.kt | 10 +- 6 files changed, 375 insertions(+), 240 deletions(-) diff --git a/core/base/src/main/res/values/strings.xml b/core/base/src/main/res/values/strings.xml index 64875757..896241e4 100644 --- a/core/base/src/main/res/values/strings.xml +++ b/core/base/src/main/res/values/strings.xml @@ -1,4 +1,22 @@ + + @@ -34,6 +52,7 @@ Clear input Clear Click to try again + Comma Add or remove unit from favorites Convert from Make sure there are no typos, try different filters or check for disabled unit groups. @@ -73,6 +92,98 @@ Error Hello! + + Arctangent + + + Arccosine + + + Arcsine + + + Brackets + + + Cosine + + + Degree + + + Divide + + + Dot + + + Equal + + + + + Euler\'s number + + + + Exponential function + + + Factorial + + + + Inverse + + + Left bracket + + + Natural logarithm + + + Logarithm + + + Minus + + + Modulo + + + Multiply + + + Percent + + + Pi + + + Plus + + + + Power + + + Power of 10 + + + Radian + + + Right bracket + + + Square root + + + Sine + + + Tangent + Label Loading… @@ -130,7 +241,6 @@ Alternatively you can use "Export" --> Color scheme Color theme Pick a theming mode - Comma Unit groups, sorting, formatting Currency rates are updated daily. There\'s no real-time market monitoring in the app Wrong currency rates? diff --git a/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/KeyboardButton.kt b/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/KeyboardButton.kt index 5e55fda0..8567114c 100644 --- a/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/KeyboardButton.kt +++ b/core/ui/src/main/java/com/sadellie/unitto/core/ui/common/KeyboardButton.kt @@ -1,6 +1,6 @@ /* * Unitto is a unit converter for Android - * Copyright (c) 2022-2023 Elshan Agaev + * Copyright (c) 2022-2024 Elshan Agaev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -46,6 +46,7 @@ fun BasicKeyboardButton( onLongClick: (() -> Unit)?, containerColor: Color, icon: ImageVector, + contentDescription: String?, iconColor: Color, allowVibration: Boolean, ) { @@ -74,7 +75,7 @@ fun BasicKeyboardButton( ) { Icon( imageVector = icon, - contentDescription = null, + contentDescription = contentDescription, modifier = Modifier .aspectRatio(1f) // All icons are square (24x24) .fillMaxWidth() @@ -91,6 +92,7 @@ fun BasicKeyboardButton( fun KeyboardButtonLight( modifier: Modifier, icon: ImageVector, + contentDescription: String?, allowVibration: Boolean, contentHeight: Float, onLongClick: (() -> Unit)? = null, @@ -103,6 +105,7 @@ fun KeyboardButtonLight( onLongClick = onLongClick, containerColor = MaterialTheme.colorScheme.inverseOnSurface, icon = icon, + contentDescription = contentDescription, iconColor = MaterialTheme.colorScheme.onSurfaceVariant, allowVibration = allowVibration, ) @@ -112,6 +115,7 @@ fun KeyboardButtonLight( fun KeyboardButtonFilled( modifier: Modifier, icon: ImageVector, + contentDescription: String?, allowVibration: Boolean, contentHeight: Float, onLongClick: (() -> Unit)? = null, @@ -124,6 +128,7 @@ fun KeyboardButtonFilled( onLongClick = onLongClick, containerColor = MaterialTheme.colorScheme.primaryContainer, icon = icon, + contentDescription = contentDescription, iconColor = MaterialTheme.colorScheme.onPrimaryContainer, allowVibration = allowVibration, ) @@ -133,6 +138,7 @@ fun KeyboardButtonFilled( fun KeyboardButtonAdditional( modifier: Modifier, icon: ImageVector, + contentDescription: String?, allowVibration: Boolean, contentHeight: Float, onLongClick: (() -> Unit)? = null, @@ -145,6 +151,7 @@ fun KeyboardButtonAdditional( onLongClick = onLongClick, containerColor = Color.Transparent, icon = icon, + contentDescription = contentDescription, iconColor = MaterialTheme.colorScheme.onSurfaceVariant, allowVibration = allowVibration, ) @@ -154,6 +161,7 @@ fun KeyboardButtonAdditional( fun KeyboardButtonTertiary( modifier: Modifier, icon: ImageVector, + contentDescription: String?, allowVibration: Boolean, contentHeight: Float, onLongClick: (() -> Unit)? = null, @@ -166,6 +174,7 @@ fun KeyboardButtonTertiary( onLongClick = onLongClick, containerColor = MaterialTheme.colorScheme.tertiaryContainer, icon = icon, + contentDescription = contentDescription, iconColor = MaterialTheme.colorScheme.onTertiaryContainer, allowVibration = allowVibration, ) diff --git a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/RPNCalculatorKeyboard.kt b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/RPNCalculatorKeyboard.kt index bbb9d2f9..f2d9b153 100644 --- a/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/RPNCalculatorKeyboard.kt +++ b/feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/RPNCalculatorKeyboard.kt @@ -1,6 +1,6 @@ /* * Unitto is a unit converter for Android - * Copyright (c) 2023 Elshan Agaev + * Copyright (c) 2023-2024 Elshan Agaev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -119,10 +119,10 @@ private fun RPNCalculatorKeyboardPortrait( .fillMaxWidth(width) .fillMaxHeight(height) - KeyboardButtonAdditional(aModifier, IconPack.Swap, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.Swap) } - KeyboardButtonAdditional(aModifier, IconPack.Up, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.RotateUp) } - KeyboardButtonAdditional(aModifier, IconPack.Down, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.RotateDown) } - KeyboardButtonAdditional(aModifier, IconPack.Pop, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.Pop) } + KeyboardButtonAdditional(aModifier, IconPack.Swap, null, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.Swap) } + KeyboardButtonAdditional(aModifier, IconPack.Up, null, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.RotateUp) } + KeyboardButtonAdditional(aModifier, IconPack.Down, null, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.RotateDown) } + KeyboardButtonAdditional(aModifier, IconPack.Pop, null, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.Pop) } } KeypadFlow( @@ -134,35 +134,35 @@ private fun RPNCalculatorKeyboardPortrait( .fillMaxWidth(width) .fillMaxHeight(height) - KeyboardButtonTertiary(bModifier, IconPack.Clear, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Clear) } - KeyboardButtonFilled(bModifier, IconPack.Unary, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Negate) } - KeyboardButtonFilled(bModifier, IconPack.Percent, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Percent) } - KeyboardButtonFilled(bModifier, IconPack.Divide, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Divide) } + KeyboardButtonTertiary(bModifier, IconPack.Clear, null, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Clear) } + KeyboardButtonFilled(bModifier, IconPack.Unary, null, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Negate) } + KeyboardButtonFilled(bModifier, IconPack.Percent, null, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Percent) } + KeyboardButtonFilled(bModifier, IconPack.Divide, null, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Divide) } - KeyboardButtonLight(bModifier, IconPack.Key7, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._7)) } - KeyboardButtonLight(bModifier, IconPack.Key8, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._8)) } - KeyboardButtonLight(bModifier, IconPack.Key9, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._9)) } - KeyboardButtonFilled(bModifier, IconPack.Multiply, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Multiply) } + KeyboardButtonLight(bModifier, IconPack.Key7, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._7)) } + KeyboardButtonLight(bModifier, IconPack.Key8, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._8)) } + KeyboardButtonLight(bModifier, IconPack.Key9, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._9)) } + KeyboardButtonFilled(bModifier, IconPack.Multiply, null, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Multiply) } - KeyboardButtonLight(bModifier, IconPack.Key4, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._4)) } - KeyboardButtonLight(bModifier, IconPack.Key5, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._5)) } - KeyboardButtonLight(bModifier, IconPack.Key6, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._6)) } - KeyboardButtonFilled(bModifier, IconPack.Minus, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Minus) } + KeyboardButtonLight(bModifier, IconPack.Key4, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._4)) } + KeyboardButtonLight(bModifier, IconPack.Key5, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._5)) } + KeyboardButtonLight(bModifier, IconPack.Key6, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._6)) } + KeyboardButtonFilled(bModifier, IconPack.Minus, null, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Minus) } - KeyboardButtonLight(bModifier, IconPack.Key1, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._1)) } - KeyboardButtonLight(bModifier, IconPack.Key2, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._2)) } - KeyboardButtonLight(bModifier, IconPack.Key3, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._3)) } - KeyboardButtonFilled(bModifier, IconPack.Plus, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Plus) } + KeyboardButtonLight(bModifier, IconPack.Key1, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._1)) } + KeyboardButtonLight(bModifier, IconPack.Key2, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._2)) } + KeyboardButtonLight(bModifier, IconPack.Key3, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._3)) } + KeyboardButtonFilled(bModifier, IconPack.Plus, null, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Plus) } if (middleZero) { - KeyboardButtonLight(bModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Dot) } - KeyboardButtonLight(bModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._0)) } + KeyboardButtonLight(bModifier, fractionalIcon, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Dot) } + KeyboardButtonLight(bModifier, IconPack.Key0, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._0)) } } else { - KeyboardButtonLight(bModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._0)) } - KeyboardButtonLight(bModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Dot) } + KeyboardButtonLight(bModifier, IconPack.Key0, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._0)) } + KeyboardButtonLight(bModifier, fractionalIcon, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Dot) } } - KeyboardButtonLight(bModifier, IconPack.Backspace, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Delete) } - KeyboardButtonFilled(bModifier, IconPack.Enter, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Enter) } + KeyboardButtonLight(bModifier, IconPack.Backspace, null, allowVibration, KeyboardButtonContentHeightTall) { onInputEditClick(RPNInputEdit.Delete) } + KeyboardButtonFilled(bModifier, IconPack.Enter, null, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Enter) } } } } @@ -185,38 +185,38 @@ private fun RPNCalculatorKeyboardLandscape( .fillMaxHeight(height) .fillMaxWidth(width) - KeyboardButtonAdditional(bModifier, IconPack.Swap, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.Swap) } - KeyboardButtonLight(bModifier, IconPack.Key7, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._7)) } - KeyboardButtonLight(bModifier, IconPack.Key8, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._8)) } - KeyboardButtonLight(bModifier, IconPack.Key9, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._9)) } - KeyboardButtonTertiary(bModifier, IconPack.Clear, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Clear) } - KeyboardButtonFilled(bModifier, IconPack.Unary, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Negate) } + KeyboardButtonAdditional(bModifier, IconPack.Swap, null, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.Swap) } + KeyboardButtonLight(bModifier, IconPack.Key7, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._7)) } + KeyboardButtonLight(bModifier, IconPack.Key8, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._8)) } + KeyboardButtonLight(bModifier, IconPack.Key9, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._9)) } + KeyboardButtonTertiary(bModifier, IconPack.Clear, null, allowVibration, KeyboardButtonContentHeightTall) { onCalculationClick(RPNCalculation.Clear) } + KeyboardButtonFilled(bModifier, IconPack.Unary, null, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Negate) } - KeyboardButtonAdditional(bModifier, IconPack.Up, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.RotateUp) } - KeyboardButtonLight(bModifier, IconPack.Key4, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._4)) } - KeyboardButtonLight(bModifier, IconPack.Key5, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._5)) } - KeyboardButtonLight(bModifier, IconPack.Key6, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._6)) } - KeyboardButtonFilled(bModifier, IconPack.Multiply, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Multiply) } - KeyboardButtonFilled(bModifier, IconPack.Divide, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Divide) } + KeyboardButtonAdditional(bModifier, IconPack.Up, null, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.RotateUp) } + KeyboardButtonLight(bModifier, IconPack.Key4, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._4)) } + KeyboardButtonLight(bModifier, IconPack.Key5, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._5)) } + KeyboardButtonLight(bModifier, IconPack.Key6, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._6)) } + KeyboardButtonFilled(bModifier, IconPack.Multiply, null, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Multiply) } + KeyboardButtonFilled(bModifier, IconPack.Divide, null, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Divide) } - KeyboardButtonAdditional(bModifier, IconPack.Down, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.RotateDown) } - KeyboardButtonLight(bModifier, IconPack.Key1, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._1)) } - KeyboardButtonLight(bModifier, IconPack.Key2, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._2)) } - KeyboardButtonLight(bModifier, IconPack.Key3, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._3)) } - KeyboardButtonFilled(bModifier, IconPack.Plus, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Plus) } - KeyboardButtonFilled(bModifier, IconPack.Minus, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Minus) } + KeyboardButtonAdditional(bModifier, IconPack.Down, null, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.RotateDown) } + KeyboardButtonLight(bModifier, IconPack.Key1, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._1)) } + KeyboardButtonLight(bModifier, IconPack.Key2, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._2)) } + KeyboardButtonLight(bModifier, IconPack.Key3, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._3)) } + KeyboardButtonFilled(bModifier, IconPack.Plus, null, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Plus) } + KeyboardButtonFilled(bModifier, IconPack.Minus, null, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Minus) } - KeyboardButtonAdditional(bModifier, IconPack.Pop, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.Pop) } + KeyboardButtonAdditional(bModifier, IconPack.Pop, null, allowVibration, KeyboardButtonContentHeightTallAdditional) { onCalculationClick(RPNCalculation.Pop) } if (middleZero) { - KeyboardButtonLight(bModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Dot) } - KeyboardButtonLight(bModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._0)) } + KeyboardButtonLight(bModifier, fractionalIcon, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Dot) } + KeyboardButtonLight(bModifier, IconPack.Key0, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._0)) } } else { - KeyboardButtonLight(bModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._0)) } - KeyboardButtonLight(bModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Dot) } + KeyboardButtonLight(bModifier, IconPack.Key0, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Digit(Token.Digit._0)) } + KeyboardButtonLight(bModifier, fractionalIcon, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Dot) } } - KeyboardButtonLight(bModifier, IconPack.Backspace, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Delete) } - KeyboardButtonFilled(bModifier, IconPack.Percent, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Percent) } - KeyboardButtonFilled(bModifier, IconPack.Enter, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Enter) } + KeyboardButtonLight(bModifier, IconPack.Backspace, null, allowVibration, KeyboardButtonContentHeightShort) { onInputEditClick(RPNInputEdit.Delete) } + KeyboardButtonFilled(bModifier, IconPack.Percent, null, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Percent) } + KeyboardButtonFilled(bModifier, IconPack.Enter, null, allowVibration, KeyboardButtonContentHeightShort) { onCalculationClick(RPNCalculation.Enter) } } } 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 54d38545..9b8e22e0 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 @@ -1,6 +1,6 @@ /* * Unitto is a unit converter for Android - * Copyright (c) 2023 Elshan Agaev + * Copyright (c) 2023-2024 Elshan Agaev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -50,9 +50,10 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.rotate -import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp +import com.sadellie.unitto.core.base.R import com.sadellie.unitto.core.base.Token import com.sadellie.unitto.core.ui.LocalWindowSize import com.sadellie.unitto.core.ui.WindowHeightSizeClass @@ -109,6 +110,7 @@ import com.sadellie.unitto.core.ui.common.icons.iconpack.RightBracket import com.sadellie.unitto.core.ui.common.icons.iconpack.Root import com.sadellie.unitto.core.ui.common.icons.iconpack.Sin import com.sadellie.unitto.core.ui.common.icons.iconpack.Tan +import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols @Composable internal fun CalculatorKeyboard( @@ -125,15 +127,13 @@ internal fun CalculatorKeyboard( toggleAngleMode: () -> Unit, equal: () -> Unit ) { - val fractionalIcon = remember(fractional) { if (fractional == Token.Digit.dot) IconPack.Dot else IconPack.Comma } - val angleIcon = remember(radianMode) { if (radianMode) IconPack.Rad else IconPack.Deg } var invMode: Boolean by remember { mutableStateOf(false) } if (LocalWindowSize.current.heightSizeClass < WindowHeightSizeClass.Medium) { LandscapeKeyboard( modifier = modifier, - angleIcon = angleIcon, - fractionalIcon = fractionalIcon, + radianMode = radianMode, + fractional = fractional, allowVibration = allowVibration, middleZero = middleZero, addSymbol = addSymbol, @@ -149,8 +149,8 @@ internal fun CalculatorKeyboard( } else { PortraitKeyboard( modifier = modifier, - angleIcon = angleIcon, - fractionalIcon = fractionalIcon, + radianMode = radianMode, + fractional = fractional, allowVibration = allowVibration, middleZero = middleZero, addSymbol = addSymbol, @@ -169,8 +169,8 @@ internal fun CalculatorKeyboard( @Composable private fun PortraitKeyboard( modifier: Modifier, - angleIcon: ImageVector, - fractionalIcon: ImageVector, + radianMode: Boolean, + fractional: String, allowVibration: Boolean, middleZero: Boolean, addSymbol: (String) -> Unit, @@ -183,6 +183,12 @@ private fun PortraitKeyboard( invMode: Boolean, toggleInvMode: () -> Unit, ) { + val angleIcon = remember(radianMode) { if (radianMode) IconPack.Rad else IconPack.Deg } + val angleIconDescription = remember(radianMode) { if (radianMode) R.string.keyboard_radian else R.string.keyboard_degree } + + val fractionalIcon = remember(fractional) { if (fractional == Token.Digit.dot) IconPack.Dot else IconPack.Comma } + val fractionalIconDescription = remember(fractional) { if (fractional == Token.Digit.dot) 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, @@ -216,21 +222,21 @@ private fun PortraitKeyboard( showAdditional = showAdditional, buttonHeight = additionalButtonHeight, content1 = { buttonModifier -> - KeyboardButtonAdditional(buttonModifier, IconPack.Modulo, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.modulo) } - KeyboardButtonAdditional(buttonModifier, IconPack.Pi, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Const.pi) } - KeyboardButtonAdditional(buttonModifier, IconPack.Power, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.power) } - KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.factorial) } + KeyboardButtonAdditional(buttonModifier, IconPack.Modulo, stringResource(R.string.keyboard_modulo), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.modulo) } + KeyboardButtonAdditional(buttonModifier, IconPack.Pi, stringResource(R.string.keyboard_pi), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Const.pi) } + KeyboardButtonAdditional(buttonModifier, IconPack.Power, stringResource(R.string.keyboard_power), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.power) } + KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, stringResource(R.string.keyboard_factorial), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.factorial) } }, content2 = { buttonModifier -> - KeyboardButtonAdditional(buttonModifier, angleIcon, allowVibration, KeyboardButtonContentHeightTallAdditional) { toggleAngleMode() } - KeyboardButtonAdditional(buttonModifier, IconPack.ArSin, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.arsinBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.ArCos, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.arcosBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.AcTan, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.actanBracket) } + KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), allowVibration, KeyboardButtonContentHeightTallAdditional) { toggleAngleMode() } + KeyboardButtonAdditional(buttonModifier, IconPack.ArSin, stringResource(R.string.keyboard_arsin), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.arsinBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.ArCos, stringResource(R.string.keyboard_arcos), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.arcosBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.AcTan, stringResource(R.string.keyboard_actan), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.actanBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Inv, allowVibration, KeyboardButtonContentHeightTallAdditional) { toggleInvMode() } - KeyboardButtonAdditional(buttonModifier, IconPack.Exponent, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Const.e) } - KeyboardButtonAdditional(buttonModifier, IconPack.Ex, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.expBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Power10, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Digit._1 + Token.Digit._0 + Token.Operator.power) } + KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), allowVibration, KeyboardButtonContentHeightTallAdditional) { toggleInvMode() } + KeyboardButtonAdditional(buttonModifier, IconPack.Exponent, stringResource(R.string.keyboard_euler), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Const.e) } + KeyboardButtonAdditional(buttonModifier, IconPack.Ex, stringResource(R.string.keyboard_exp), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.expBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Power10, stringResource(R.string.keyboard_power_10), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Digit._1 + Token.Digit._0 + Token.Operator.power) } } ) } else { @@ -239,21 +245,21 @@ private fun PortraitKeyboard( showAdditional = showAdditional, buttonHeight = additionalButtonHeight, content1 = { buttonModifier -> - KeyboardButtonAdditional(buttonModifier, IconPack.Root, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.sqrt) } - KeyboardButtonAdditional(buttonModifier, IconPack.Pi, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Const.pi) } - KeyboardButtonAdditional(buttonModifier, IconPack.Power, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.power) } - KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.factorial) } + KeyboardButtonAdditional(buttonModifier, IconPack.Root, stringResource(R.string.keyboard_root), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.sqrt) } + KeyboardButtonAdditional(buttonModifier, IconPack.Pi, stringResource(R.string.keyboard_pi), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Const.pi) } + KeyboardButtonAdditional(buttonModifier, IconPack.Power, stringResource(R.string.keyboard_power), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.power) } + KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, stringResource(R.string.keyboard_factorial), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Operator.factorial) } }, content2 = { buttonModifier -> - KeyboardButtonAdditional(buttonModifier, angleIcon, allowVibration, KeyboardButtonContentHeightTallAdditional) { toggleAngleMode() } - KeyboardButtonAdditional(buttonModifier, IconPack.Sin, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.sinBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Cos, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.cosBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Tan, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.tanBracket) } + KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), allowVibration, KeyboardButtonContentHeightTallAdditional) { toggleAngleMode() } + KeyboardButtonAdditional(buttonModifier, IconPack.Sin, stringResource(R.string.keyboard_sin), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.sinBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Cos, stringResource(R.string.keyboard_cos), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.cosBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Tan, stringResource(R.string.keyboard_tan), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.tanBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Inv, allowVibration, KeyboardButtonContentHeightTallAdditional) { toggleInvMode() } - KeyboardButtonAdditional(buttonModifier, IconPack.Exponent, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Const.e) } - KeyboardButtonAdditional(buttonModifier, IconPack.Ln, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.lnBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Log, allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.logBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), allowVibration, KeyboardButtonContentHeightTallAdditional) { toggleInvMode() } + KeyboardButtonAdditional(buttonModifier, IconPack.Exponent, stringResource(R.string.keyboard_exp), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Const.e) } + KeyboardButtonAdditional(buttonModifier, IconPack.Ln, stringResource(R.string.keyboard_ln), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.lnBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Log, stringResource(R.string.keyboard_log), allowVibration, KeyboardButtonContentHeightTallAdditional) { addSymbol(Token.Func.logBracket) } } ) } @@ -286,39 +292,39 @@ private fun PortraitKeyboard( .fillMaxHeight(height) if (acButton) { - KeyboardButtonTertiary(mainButtonModifier, IconPack.Clear, allowVibration, KeyboardButtonContentHeightTall) { clearSymbols() } - KeyboardButtonFilled(mainButtonModifier, IconPack.Brackets, allowVibration, KeyboardButtonContentHeightTall) { addBracket() } + KeyboardButtonTertiary(mainButtonModifier, IconPack.Clear, stringResource(R.string.clear_label), allowVibration, KeyboardButtonContentHeightTall) { clearSymbols() } + KeyboardButtonFilled(mainButtonModifier, IconPack.Brackets, stringResource(R.string.keyboard_brackets), allowVibration, KeyboardButtonContentHeightTall) { addBracket() } } else { - KeyboardButtonFilled(mainButtonModifier, IconPack.LeftBracket, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.leftBracket) } - KeyboardButtonFilled(mainButtonModifier, IconPack.RightBracket, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.rightBracket) } + KeyboardButtonFilled(mainButtonModifier, IconPack.LeftBracket, stringResource(R.string.keyboard_left_bracket), allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.leftBracket) } + KeyboardButtonFilled(mainButtonModifier, IconPack.RightBracket, stringResource(R.string.keyboard_right_bracket), allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.rightBracket) } } - KeyboardButtonFilled(mainButtonModifier, IconPack.Percent, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.percent) } - KeyboardButtonFilled(mainButtonModifier, IconPack.Divide, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.divide) } + KeyboardButtonFilled(mainButtonModifier, IconPack.Percent, stringResource(R.string.keyboard_percent), allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.percent) } + KeyboardButtonFilled(mainButtonModifier, IconPack.Divide, stringResource(R.string.keyboard_divide), allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.divide) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key7, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._7) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key8, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._8) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key9, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._9) } - KeyboardButtonFilled(mainButtonModifier, IconPack.Multiply, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.multiply) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key7, Token.Digit._7, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._7) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key8, Token.Digit._8, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._8) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key9, Token.Digit._9, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._9) } + KeyboardButtonFilled(mainButtonModifier, IconPack.Multiply, stringResource(R.string.keyboard_multiply), allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.multiply) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key4, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._4) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key5, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._5) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key6, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._6) } - KeyboardButtonFilled(mainButtonModifier, IconPack.Minus, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.minus) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key4, Token.Digit._4, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._4) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key5, Token.Digit._5, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._5) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key6, Token.Digit._6, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._6) } + KeyboardButtonFilled(mainButtonModifier, IconPack.Minus, stringResource(R.string.keyboard_minus), allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.minus) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key1, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._1) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key2, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._2) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key3, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._3) } - KeyboardButtonFilled(mainButtonModifier, IconPack.Plus, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.plus) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key1, Token.Digit._1, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._1) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key2, Token.Digit._2, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._2) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key3, Token.Digit._3, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._3) } + KeyboardButtonFilled(mainButtonModifier, IconPack.Plus, stringResource(R.string.keyboard_plus), allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Operator.plus) } if (middleZero) { - KeyboardButtonLight(mainButtonModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit.dot) } - KeyboardButtonLight(mainButtonModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._0) } + KeyboardButtonLight(mainButtonModifier, fractionalIcon, stringResource(fractionalIconDescription), allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit.dot) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key0, Token.Digit._0, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._0) } } else { - KeyboardButtonLight(mainButtonModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._0) } - KeyboardButtonLight(mainButtonModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit.dot) } + KeyboardButtonLight(mainButtonModifier, IconPack.Key0, Token.Digit._0, allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit._0) } + KeyboardButtonLight(mainButtonModifier, fractionalIcon, stringResource(fractionalIconDescription), allowVibration, KeyboardButtonContentHeightTall) { addSymbol(Token.Digit.dot) } } - KeyboardButtonLight(mainButtonModifier, IconPack.Backspace, allowVibration, KeyboardButtonContentHeightTall, clearSymbols) { deleteSymbol() } - KeyboardButtonFilled(mainButtonModifier, IconPack.Equal, allowVibration, KeyboardButtonContentHeightTall) { equal() } + KeyboardButtonLight(mainButtonModifier, IconPack.Backspace, stringResource(R.string.delete_label), allowVibration, KeyboardButtonContentHeightTall, clearSymbols) { deleteSymbol() } + KeyboardButtonFilled(mainButtonModifier, IconPack.Equal, stringResource(R.string.keyboard_equal), allowVibration, KeyboardButtonContentHeightTall) { equal() } } Spacer(modifier = Modifier.height(spacerHeight)) @@ -396,8 +402,8 @@ private fun AdditionalPortrait( @Composable private fun LandscapeKeyboard( modifier: Modifier, - angleIcon: ImageVector, - fractionalIcon: ImageVector, + radianMode: Boolean, + fractional: String, allowVibration: Boolean, middleZero: Boolean, addSymbol: (String) -> Unit, @@ -410,6 +416,12 @@ private fun LandscapeKeyboard( invMode: Boolean, toggleInvMode: () -> Unit, ) { + val angleIcon = remember(radianMode) { if (radianMode) IconPack.Rad else IconPack.Deg } + val angleIconDescription = remember(radianMode) { if (radianMode) R.string.keyboard_radian else R.string.keyboard_degree } + + val fractionalIcon = remember(fractional) { if (fractional == Token.Digit.dot) IconPack.Dot else IconPack.Comma } + val fractionalIconDescription = remember(fractional) { if (fractional == Token.Digit.dot) R.string.keyboard_dot else R.string.comma } + Crossfade( targetState = invMode, label = "Inverse switch", @@ -425,51 +437,51 @@ private fun LandscapeKeyboard( .fillMaxWidth(width) .fillMaxHeight(height) - KeyboardButtonAdditional(buttonModifier, angleIcon, allowVibration, KeyboardButtonContentHeightShortAdditional) { toggleAngleMode() } - KeyboardButtonAdditional(buttonModifier, IconPack.Modulo, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.modulo) } - KeyboardButtonAdditional(buttonModifier, IconPack.Pi, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Const.pi) } - KeyboardButtonLight(buttonModifier, IconPack.Key7, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._7) } - KeyboardButtonLight(buttonModifier, IconPack.Key8, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._8) } - KeyboardButtonLight(buttonModifier, IconPack.Key9, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._9) } + KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), allowVibration, KeyboardButtonContentHeightShortAdditional) { toggleAngleMode() } + KeyboardButtonAdditional(buttonModifier, IconPack.Modulo, stringResource(R.string.keyboard_modulo), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.modulo) } + KeyboardButtonAdditional(buttonModifier, IconPack.Pi, stringResource(R.string.keyboard_pi), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Const.pi) } + KeyboardButtonLight(buttonModifier, IconPack.Key7, Token.Digit._7, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._7) } + KeyboardButtonLight(buttonModifier, IconPack.Key8, Token.Digit._8, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._8) } + KeyboardButtonLight(buttonModifier, IconPack.Key9, Token.Digit._9, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._9) } if (acButton) { - KeyboardButtonTertiary(buttonModifier, IconPack.Clear, allowVibration, KeyboardButtonContentHeightShort) { clearSymbols() } - KeyboardButtonFilled(buttonModifier, IconPack.Brackets, allowVibration, KeyboardButtonContentHeightShort) { addBracket() } + KeyboardButtonTertiary(buttonModifier, IconPack.Clear, stringResource(R.string.clear_label), allowVibration, KeyboardButtonContentHeightShort) { clearSymbols() } + KeyboardButtonFilled(buttonModifier, IconPack.Brackets, stringResource(R.string.keyboard_brackets), allowVibration, KeyboardButtonContentHeightShort) { addBracket() } } else { - KeyboardButtonFilled(buttonModifier, IconPack.LeftBracket, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.leftBracket) } - KeyboardButtonFilled(buttonModifier, IconPack.RightBracket, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.rightBracket) } + KeyboardButtonFilled(buttonModifier, IconPack.LeftBracket, stringResource(R.string.keyboard_left_bracket), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.leftBracket) } + KeyboardButtonFilled(buttonModifier, IconPack.RightBracket, stringResource(R.string.keyboard_right_bracket), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.rightBracket) } } - KeyboardButtonAdditional(buttonModifier, IconPack.Inv, allowVibration, KeyboardButtonContentHeightShortAdditional) { toggleInvMode() } - KeyboardButtonAdditional(buttonModifier, IconPack.Power, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.power) } - KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.factorial) } - KeyboardButtonLight(buttonModifier, IconPack.Key4, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._4) } - KeyboardButtonLight(buttonModifier, IconPack.Key5, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._5) } - KeyboardButtonLight(buttonModifier, IconPack.Key6, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._6) } - KeyboardButtonFilled(buttonModifier, IconPack.Multiply, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.multiply) } - KeyboardButtonFilled(buttonModifier, IconPack.Divide, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.divide) } + KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), allowVibration, KeyboardButtonContentHeightShortAdditional) { toggleInvMode() } + KeyboardButtonAdditional(buttonModifier, IconPack.Power, stringResource(R.string.keyboard_power), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.power) } + KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, stringResource(R.string.keyboard_factorial), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.factorial) } + KeyboardButtonLight(buttonModifier, IconPack.Key4, Token.Digit._4, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._4) } + KeyboardButtonLight(buttonModifier, IconPack.Key5, Token.Digit._5, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._5) } + KeyboardButtonLight(buttonModifier, IconPack.Key6, Token.Digit._6, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._6) } + KeyboardButtonFilled(buttonModifier, IconPack.Multiply, stringResource(R.string.keyboard_multiply), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.multiply) } + KeyboardButtonFilled(buttonModifier, IconPack.Divide, stringResource(R.string.keyboard_divide), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.divide) } - KeyboardButtonAdditional(buttonModifier, IconPack.ArSin, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.arsinBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.ArCos, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.arcosBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.AcTan, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.actanBracket) } - KeyboardButtonLight(buttonModifier, IconPack.Key1, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._1) } - KeyboardButtonLight(buttonModifier, IconPack.Key2, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._2) } - KeyboardButtonLight(buttonModifier, IconPack.Key3, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._3) } - KeyboardButtonFilled(buttonModifier, IconPack.Minus, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.minus) } - KeyboardButtonFilled(buttonModifier, IconPack.Percent, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.percent) } + KeyboardButtonAdditional(buttonModifier, IconPack.ArSin, stringResource(R.string.keyboard_arsin), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.arsinBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.ArCos, stringResource(R.string.keyboard_arcos), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.arcosBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.AcTan, stringResource(R.string.keyboard_actan), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.actanBracket) } + KeyboardButtonLight(buttonModifier, IconPack.Key1, Token.Digit._1, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._1) } + KeyboardButtonLight(buttonModifier, IconPack.Key2, Token.Digit._2, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._2) } + KeyboardButtonLight(buttonModifier, IconPack.Key3, Token.Digit._3, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._3) } + KeyboardButtonFilled(buttonModifier, IconPack.Minus, stringResource(R.string.keyboard_minus), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.minus) } + KeyboardButtonFilled(buttonModifier, IconPack.Percent, stringResource(R.string.keyboard_percent), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.percent) } - KeyboardButtonAdditional(buttonModifier, IconPack.Exponent, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Const.e) } - KeyboardButtonAdditional(buttonModifier, IconPack.Ex, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.expBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Power10, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Digit._1 + Token.Digit._0 + Token.Operator.power) } + KeyboardButtonAdditional(buttonModifier, IconPack.Exponent, stringResource(R.string.keyboard_euler), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Const.e) } + KeyboardButtonAdditional(buttonModifier, IconPack.Ex, stringResource(R.string.keyboard_exp), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.expBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Power10, stringResource(R.string.keyboard_power_10), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Digit._1 + Token.Digit._0 + Token.Operator.power) } if (middleZero) { - KeyboardButtonLight(buttonModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit.dot) } - KeyboardButtonLight(buttonModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._0) } + KeyboardButtonLight(buttonModifier, fractionalIcon, stringResource(fractionalIconDescription), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit.dot) } + KeyboardButtonLight(buttonModifier, IconPack.Key0, Token.Digit._0, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._0) } } else { - KeyboardButtonLight(buttonModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._0) } - KeyboardButtonLight(buttonModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit.dot) } + KeyboardButtonLight(buttonModifier, IconPack.Key0, Token.Digit._0, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._0) } + KeyboardButtonLight(buttonModifier, fractionalIcon, stringResource(fractionalIconDescription), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit.dot) } } - KeyboardButtonLight(buttonModifier, IconPack.Backspace, allowVibration, KeyboardButtonContentHeightShort, clearSymbols) { deleteSymbol() } - KeyboardButtonFilled(buttonModifier, IconPack.Plus, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.plus) } - KeyboardButtonFilled(buttonModifier, IconPack.Equal, allowVibration, KeyboardButtonContentHeightShort) { equal() } + KeyboardButtonLight(buttonModifier, IconPack.Backspace, stringResource(R.string.delete_label), allowVibration, KeyboardButtonContentHeightShort, clearSymbols) { deleteSymbol() } + KeyboardButtonFilled(buttonModifier, IconPack.Plus, stringResource(R.string.keyboard_plus), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.plus) } + KeyboardButtonFilled(buttonModifier, IconPack.Equal, stringResource(R.string.keyboard_equal), allowVibration, KeyboardButtonContentHeightShort) { equal() } } } else { KeypadFlow( @@ -481,51 +493,51 @@ private fun LandscapeKeyboard( .fillMaxWidth(width) .fillMaxHeight(height) - KeyboardButtonAdditional(buttonModifier, angleIcon, allowVibration, KeyboardButtonContentHeightShortAdditional) { toggleAngleMode() } - KeyboardButtonAdditional(buttonModifier, IconPack.Root, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.sqrt) } - KeyboardButtonAdditional(buttonModifier, IconPack.Pi, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Const.pi) } - KeyboardButtonLight(buttonModifier, IconPack.Key7, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._7) } - KeyboardButtonLight(buttonModifier, IconPack.Key8, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._8) } - KeyboardButtonLight(buttonModifier, IconPack.Key9, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._9) } + KeyboardButtonAdditional(buttonModifier, angleIcon, stringResource(angleIconDescription), allowVibration, KeyboardButtonContentHeightShortAdditional) { toggleAngleMode() } + KeyboardButtonAdditional(buttonModifier, IconPack.Root, stringResource(R.string.keyboard_root), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.sqrt) } + KeyboardButtonAdditional(buttonModifier, IconPack.Pi, stringResource(R.string.keyboard_pi), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Const.pi) } + KeyboardButtonLight(buttonModifier, IconPack.Key7, Token.Digit._7, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._7) } + KeyboardButtonLight(buttonModifier, IconPack.Key8, Token.Digit._8, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._8) } + KeyboardButtonLight(buttonModifier, IconPack.Key9, Token.Digit._9, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._9) } if (acButton) { - KeyboardButtonTertiary(buttonModifier, IconPack.Clear, allowVibration, KeyboardButtonContentHeightShort) { clearSymbols() } - KeyboardButtonFilled(buttonModifier, IconPack.Brackets, allowVibration, KeyboardButtonContentHeightShort) { addBracket() } + KeyboardButtonTertiary(buttonModifier, IconPack.Clear, stringResource(R.string.clear_label), allowVibration, KeyboardButtonContentHeightShort) { clearSymbols() } + KeyboardButtonFilled(buttonModifier, IconPack.Brackets, stringResource(R.string.keyboard_brackets), allowVibration, KeyboardButtonContentHeightShort) { addBracket() } } else { - KeyboardButtonFilled(buttonModifier, IconPack.LeftBracket, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.leftBracket) } - KeyboardButtonFilled(buttonModifier, IconPack.RightBracket, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.rightBracket) } + KeyboardButtonFilled(buttonModifier, IconPack.LeftBracket, stringResource(R.string.keyboard_left_bracket), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.leftBracket) } + KeyboardButtonFilled(buttonModifier, IconPack.RightBracket, stringResource(R.string.keyboard_right_bracket), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.rightBracket) } } - KeyboardButtonAdditional(buttonModifier, IconPack.Inv, allowVibration, KeyboardButtonContentHeightShortAdditional) { toggleInvMode() } - KeyboardButtonAdditional(buttonModifier, IconPack.Power, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.power) } - KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.factorial) } - KeyboardButtonLight(buttonModifier, IconPack.Key4, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._4) } - KeyboardButtonLight(buttonModifier, IconPack.Key5, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._5) } - KeyboardButtonLight(buttonModifier, IconPack.Key6, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._6) } - KeyboardButtonFilled(buttonModifier, IconPack.Multiply, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.multiply) } - KeyboardButtonFilled(buttonModifier, IconPack.Divide, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.divide) } + KeyboardButtonAdditional(buttonModifier, IconPack.Inv, stringResource(R.string.keyboard_inverse), allowVibration, KeyboardButtonContentHeightShortAdditional) { toggleInvMode() } + KeyboardButtonAdditional(buttonModifier, IconPack.Power, stringResource(R.string.keyboard_power), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.power) } + KeyboardButtonAdditional(buttonModifier, IconPack.Factorial, stringResource(R.string.keyboard_factorial), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Operator.factorial) } + KeyboardButtonLight(buttonModifier, IconPack.Key4, Token.Digit._4, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._4) } + KeyboardButtonLight(buttonModifier, IconPack.Key5, Token.Digit._5, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._5) } + KeyboardButtonLight(buttonModifier, IconPack.Key6, Token.Digit._6, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._6) } + KeyboardButtonFilled(buttonModifier, IconPack.Multiply, stringResource(R.string.keyboard_multiply), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.multiply) } + KeyboardButtonFilled(buttonModifier, IconPack.Divide, stringResource(R.string.keyboard_divide), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.divide) } - KeyboardButtonAdditional(buttonModifier, IconPack.Sin, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.sinBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Cos, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.cosBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Tan, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.tanBracket) } - KeyboardButtonLight(buttonModifier, IconPack.Key1, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._1) } - KeyboardButtonLight(buttonModifier, IconPack.Key2, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._2) } - KeyboardButtonLight(buttonModifier, IconPack.Key3, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._3) } - KeyboardButtonFilled(buttonModifier, IconPack.Minus, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.minus) } - KeyboardButtonFilled(buttonModifier, IconPack.Percent, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.percent) } + KeyboardButtonAdditional(buttonModifier, IconPack.Sin, stringResource(R.string.keyboard_sin), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.sinBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Cos, stringResource(R.string.keyboard_cos), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.cosBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Tan, stringResource(R.string.keyboard_tan), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.tanBracket) } + KeyboardButtonLight(buttonModifier, IconPack.Key1, Token.Digit._1, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._1) } + KeyboardButtonLight(buttonModifier, IconPack.Key2, Token.Digit._2, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._2) } + KeyboardButtonLight(buttonModifier, IconPack.Key3, Token.Digit._3, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._3) } + KeyboardButtonFilled(buttonModifier, IconPack.Minus, stringResource(R.string.keyboard_minus), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.minus) } + KeyboardButtonFilled(buttonModifier, IconPack.Percent, stringResource(R.string.keyboard_percent), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.percent) } - KeyboardButtonAdditional(buttonModifier, IconPack.Exponent, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Const.e) } - KeyboardButtonAdditional(buttonModifier, IconPack.Ln, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.lnBracket) } - KeyboardButtonAdditional(buttonModifier, IconPack.Log, allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.logBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Exponent, stringResource(R.string.keyboard_euler), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Const.e) } + KeyboardButtonAdditional(buttonModifier, IconPack.Ln, stringResource(R.string.keyboard_ln), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.lnBracket) } + KeyboardButtonAdditional(buttonModifier, IconPack.Log, stringResource(R.string.keyboard_log), allowVibration, KeyboardButtonContentHeightShortAdditional) { addSymbol(Token.Func.logBracket) } if (middleZero) { - KeyboardButtonLight(buttonModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit.dot) } - KeyboardButtonLight(buttonModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._0) } + KeyboardButtonLight(buttonModifier, fractionalIcon, stringResource(fractionalIconDescription), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit.dot) } + KeyboardButtonLight(buttonModifier, IconPack.Key0, Token.Digit._0, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._0) } } else { - KeyboardButtonLight(buttonModifier, IconPack.Key0, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._0) } - KeyboardButtonLight(buttonModifier, fractionalIcon, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit.dot) } + KeyboardButtonLight(buttonModifier, IconPack.Key0, Token.Digit._0, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit._0) } + KeyboardButtonLight(buttonModifier, fractionalIcon, stringResource(fractionalIconDescription), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Digit.dot) } } - KeyboardButtonLight(buttonModifier, IconPack.Backspace, allowVibration, KeyboardButtonContentHeightShort, clearSymbols) { deleteSymbol() } - KeyboardButtonFilled(buttonModifier, IconPack.Plus, allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.plus) } - KeyboardButtonFilled(buttonModifier, IconPack.Equal, allowVibration, KeyboardButtonContentHeightShort) { equal() } + KeyboardButtonLight(buttonModifier, IconPack.Backspace, stringResource(R.string.delete_label), allowVibration, KeyboardButtonContentHeightShort, clearSymbols) { deleteSymbol() } + KeyboardButtonFilled(buttonModifier, IconPack.Plus, stringResource(R.string.keyboard_plus), allowVibration, KeyboardButtonContentHeightShort) { addSymbol(Token.Operator.plus) } + KeyboardButtonFilled(buttonModifier, IconPack.Equal, stringResource(R.string.keyboard_equal), allowVibration, KeyboardButtonContentHeightShort) { equal() } } } } @@ -536,8 +548,8 @@ private fun LandscapeKeyboard( private fun PreviewPortraitKeyboard() { PortraitKeyboard( modifier = Modifier.fillMaxHeight(), - angleIcon = IconPack.Rad, - fractionalIcon = IconPack.Dot, + radianMode = true, + fractional = FormatterSymbols.Comma.fractional, addSymbol = {}, clearSymbols = {}, deleteSymbol = {}, @@ -557,8 +569,8 @@ private fun PreviewPortraitKeyboard() { private fun PreviewLandscapeKeyboard() { LandscapeKeyboard( modifier = Modifier.fillMaxHeight(), - angleIcon = IconPack.Rad, - fractionalIcon = IconPack.Dot, + radianMode = true, + fractional = FormatterSymbols.Comma.fractional, addSymbol = {}, clearSymbols = {}, deleteSymbol = {}, diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/ConverterKeyboard.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/ConverterKeyboard.kt index f41cc775..e61a68e7 100644 --- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/ConverterKeyboard.kt +++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/ConverterKeyboard.kt @@ -1,6 +1,6 @@ /* * Unitto is a unit converter for Android - * Copyright (c) 2022-2023 Elshan Agaev + * Copyright (c) 2022-2024 Elshan Agaev * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,7 +24,9 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import com.sadellie.unitto.core.base.R import com.sadellie.unitto.core.base.Token import com.sadellie.unitto.core.ui.LocalWindowSize import com.sadellie.unitto.core.ui.WindowHeightSizeClass @@ -78,7 +80,8 @@ internal fun DefaultKeyboard( acButton: Boolean, addBracket: () -> Unit, ) { - val fractionalIcon = remember { if (fractional == Token.Digit.dot) IconPack.Dot else IconPack.Comma } + val fractionalIcon = remember(fractional) { if (fractional == Token.Digit.dot) IconPack.Dot else IconPack.Comma } + val fractionalIconDescription = remember(fractional) { if (fractional == Token.Digit.dot) R.string.keyboard_dot else R.string.comma } val contentHeight: Float = if (LocalWindowSize.current.heightSizeClass < WindowHeightSizeClass.Medium) KeyboardButtonContentHeightShort else KeyboardButtonContentHeightTall KeypadFlow( @@ -89,39 +92,39 @@ internal fun DefaultKeyboard( val bModifier = Modifier.fillMaxWidth(width).fillMaxHeight(height) if (acButton) { - KeyboardButtonTertiary(bModifier, IconPack.Clear, allowVibration, contentHeight) { clearInput() } - KeyboardButtonFilled(bModifier, IconPack.Brackets, allowVibration, contentHeight) { addBracket() } + KeyboardButtonTertiary(bModifier, IconPack.Clear, stringResource(R.string.delete_label), allowVibration, contentHeight) { clearInput() } + KeyboardButtonFilled(bModifier, IconPack.Brackets, stringResource(R.string.keyboard_brackets), allowVibration, contentHeight) { addBracket() } } else { - KeyboardButtonFilled(bModifier, IconPack.LeftBracket, allowVibration, contentHeight) { addDigit(Token.Operator.leftBracket) } - KeyboardButtonFilled(bModifier, IconPack.RightBracket, allowVibration, contentHeight) { addDigit(Token.Operator.rightBracket) } + KeyboardButtonFilled(bModifier, IconPack.LeftBracket, stringResource(R.string.keyboard_left_bracket), allowVibration, contentHeight) { addDigit(Token.Operator.leftBracket) } + KeyboardButtonFilled(bModifier, IconPack.RightBracket, stringResource(R.string.keyboard_right_bracket), allowVibration, contentHeight) { addDigit(Token.Operator.rightBracket) } } - KeyboardButtonFilled(bModifier, IconPack.Power, allowVibration, contentHeight) { addDigit(Token.Operator.power) } - KeyboardButtonFilled(bModifier, IconPack.Root, allowVibration, contentHeight) { addDigit(Token.Operator.sqrt) } + KeyboardButtonFilled(bModifier, IconPack.Power, stringResource(R.string.keyboard_power), allowVibration, contentHeight) { addDigit(Token.Operator.power) } + KeyboardButtonFilled(bModifier, IconPack.Root, stringResource(R.string.keyboard_root), allowVibration, contentHeight) { addDigit(Token.Operator.sqrt) } - KeyboardButtonLight(bModifier, IconPack.Key7, allowVibration, contentHeight) { addDigit(Token.Digit._7) } - KeyboardButtonLight(bModifier, IconPack.Key8, allowVibration, contentHeight) { addDigit(Token.Digit._8) } - KeyboardButtonLight(bModifier, IconPack.Key9, allowVibration, contentHeight) { addDigit(Token.Digit._9) } - KeyboardButtonFilled(bModifier, IconPack.Divide, allowVibration, contentHeight) { addDigit(Token.Operator.divide) } + KeyboardButtonLight(bModifier, IconPack.Key7, Token.Digit._7, allowVibration, contentHeight) { addDigit(Token.Digit._7) } + KeyboardButtonLight(bModifier, IconPack.Key8, Token.Digit._8, allowVibration, contentHeight) { addDigit(Token.Digit._8) } + KeyboardButtonLight(bModifier, IconPack.Key9, Token.Digit._9, allowVibration, contentHeight) { addDigit(Token.Digit._9) } + KeyboardButtonFilled(bModifier, IconPack.Divide, stringResource(R.string.keyboard_divide), allowVibration, contentHeight) { addDigit(Token.Operator.divide) } - KeyboardButtonLight(bModifier, IconPack.Key4, allowVibration, contentHeight) { addDigit(Token.Digit._4) } - KeyboardButtonLight(bModifier, IconPack.Key5, allowVibration, contentHeight) { addDigit(Token.Digit._5) } - KeyboardButtonLight(bModifier, IconPack.Key6, allowVibration, contentHeight) { addDigit(Token.Digit._6) } - KeyboardButtonFilled(bModifier, IconPack.Multiply, allowVibration, contentHeight) { addDigit(Token.Operator.multiply) } + KeyboardButtonLight(bModifier, IconPack.Key4, Token.Digit._4, allowVibration, contentHeight) { addDigit(Token.Digit._4) } + KeyboardButtonLight(bModifier, IconPack.Key5, Token.Digit._5, allowVibration, contentHeight) { addDigit(Token.Digit._5) } + KeyboardButtonLight(bModifier, IconPack.Key6, Token.Digit._6, allowVibration, contentHeight) { addDigit(Token.Digit._6) } + KeyboardButtonFilled(bModifier, IconPack.Multiply, stringResource(R.string.keyboard_multiply), allowVibration, contentHeight) { addDigit(Token.Operator.multiply) } - KeyboardButtonLight(bModifier, IconPack.Key1, allowVibration, contentHeight) { addDigit(Token.Digit._1) } - KeyboardButtonLight(bModifier, IconPack.Key2, allowVibration, contentHeight) { addDigit(Token.Digit._2) } - KeyboardButtonLight(bModifier, IconPack.Key3, allowVibration, contentHeight) { addDigit(Token.Digit._3) } - KeyboardButtonFilled(bModifier, IconPack.Minus, allowVibration, contentHeight) { addDigit(Token.Operator.minus) } + KeyboardButtonLight(bModifier, IconPack.Key1, Token.Digit._1, allowVibration, contentHeight) { addDigit(Token.Digit._1) } + KeyboardButtonLight(bModifier, IconPack.Key2, Token.Digit._2, allowVibration, contentHeight) { addDigit(Token.Digit._2) } + KeyboardButtonLight(bModifier, IconPack.Key3, Token.Digit._3, allowVibration, contentHeight) { addDigit(Token.Digit._3) } + KeyboardButtonFilled(bModifier, IconPack.Minus, stringResource(R.string.keyboard_minus), allowVibration, contentHeight) { addDigit(Token.Operator.minus) } if (middleZero) { - KeyboardButtonLight(bModifier, fractionalIcon, allowVibration, contentHeight) { addDigit(Token.Digit.dot) } - KeyboardButtonLight(bModifier, IconPack.Key0, allowVibration, contentHeight) { addDigit(Token.Digit._0) } + KeyboardButtonLight(bModifier, fractionalIcon, stringResource(fractionalIconDescription), allowVibration, contentHeight) { addDigit(Token.Digit.dot) } + KeyboardButtonLight(bModifier, IconPack.Key0, Token.Digit._0, allowVibration, contentHeight) { addDigit(Token.Digit._0) } } else { - KeyboardButtonLight(bModifier, IconPack.Key0, allowVibration, contentHeight) { addDigit(Token.Digit._0) } - KeyboardButtonLight(bModifier, fractionalIcon, allowVibration, contentHeight) { addDigit(Token.Digit.dot) } + KeyboardButtonLight(bModifier, IconPack.Key0, Token.Digit._0, allowVibration, contentHeight) { addDigit(Token.Digit._0) } + KeyboardButtonLight(bModifier, fractionalIcon, stringResource(fractionalIconDescription), allowVibration, contentHeight) { addDigit(Token.Digit.dot) } } - KeyboardButtonLight(bModifier, IconPack.Backspace, allowVibration, contentHeight, onLongClick = clearInput) { deleteDigit() } - KeyboardButtonFilled(bModifier, IconPack.Plus, allowVibration, contentHeight) { addDigit(Token.Operator.plus) } + KeyboardButtonLight(bModifier, IconPack.Backspace, stringResource(R.string.delete_label), allowVibration, contentHeight, onLongClick = clearInput) { deleteDigit() } + KeyboardButtonFilled(bModifier, IconPack.Plus, stringResource(R.string.keyboard_plus), allowVibration, contentHeight) { addDigit(Token.Operator.plus) } } } @@ -141,30 +144,31 @@ internal fun NumberBaseKeyboard( columns = 3 ) { width, height -> val bModifier = Modifier.fillMaxWidth(width).fillMaxHeight(height) + val wideButtonModifier = Modifier.fillMaxHeight(height).fillMaxWidth(width * 2) - KeyboardButtonFilled(bModifier, IconPack.KeyA, allowVibration, contentHeight) { addDigit(Token.Letter._A) } - KeyboardButtonFilled(bModifier, IconPack.KeyB, allowVibration, contentHeight) { addDigit(Token.Letter._B) } - KeyboardButtonFilled(bModifier, IconPack.KeyC, allowVibration, contentHeight) { addDigit(Token.Letter._C) } + KeyboardButtonFilled(bModifier, IconPack.KeyA, Token.Letter._A, allowVibration, contentHeight) { addDigit(Token.Letter._A) } + KeyboardButtonFilled(bModifier, IconPack.KeyB, Token.Letter._B, allowVibration, contentHeight) { addDigit(Token.Letter._B) } + KeyboardButtonFilled(bModifier, IconPack.KeyC, Token.Letter._C, allowVibration, contentHeight) { addDigit(Token.Letter._C) } - KeyboardButtonFilled(bModifier, IconPack.KeyD, allowVibration, contentHeight) { addDigit(Token.Letter._D) } - KeyboardButtonFilled(bModifier, IconPack.KeyE, allowVibration, contentHeight) { addDigit(Token.Letter._E) } - KeyboardButtonFilled(bModifier, IconPack.KeyF, allowVibration, contentHeight) { addDigit(Token.Letter._F) } + KeyboardButtonFilled(bModifier, IconPack.KeyD, Token.Letter._D, allowVibration, contentHeight) { addDigit(Token.Letter._D) } + KeyboardButtonFilled(bModifier, IconPack.KeyE, Token.Letter._E, allowVibration, contentHeight) { addDigit(Token.Letter._E) } + KeyboardButtonFilled(bModifier, IconPack.KeyF, Token.Letter._F, allowVibration, contentHeight) { addDigit(Token.Letter._F) } - KeyboardButtonLight(bModifier, IconPack.Key7, allowVibration, contentHeight) { addDigit(Token.Digit._7) } - KeyboardButtonLight(bModifier, IconPack.Key8, allowVibration, contentHeight) { addDigit(Token.Digit._8) } - KeyboardButtonLight(bModifier, IconPack.Key9, allowVibration, contentHeight) { addDigit(Token.Digit._9) } + KeyboardButtonLight(bModifier, IconPack.Key7, Token.Digit._7, allowVibration, contentHeight) { addDigit(Token.Digit._7) } + KeyboardButtonLight(bModifier, IconPack.Key8, Token.Digit._8, allowVibration, contentHeight) { addDigit(Token.Digit._8) } + KeyboardButtonLight(bModifier, IconPack.Key9, Token.Digit._9, allowVibration, contentHeight) { addDigit(Token.Digit._9) } - KeyboardButtonLight(bModifier, IconPack.Key4, allowVibration, contentHeight) { addDigit(Token.Digit._4) } - KeyboardButtonLight(bModifier, IconPack.Key5, allowVibration, contentHeight) { addDigit(Token.Digit._5) } - KeyboardButtonLight(bModifier, IconPack.Key6, allowVibration, contentHeight) { addDigit(Token.Digit._6) } + KeyboardButtonLight(bModifier, IconPack.Key4, Token.Digit._4, allowVibration, contentHeight) { addDigit(Token.Digit._4) } + KeyboardButtonLight(bModifier, IconPack.Key5, Token.Digit._5, allowVibration, contentHeight) { addDigit(Token.Digit._5) } + KeyboardButtonLight(bModifier, IconPack.Key6, Token.Digit._6, allowVibration, contentHeight) { addDigit(Token.Digit._6) } - KeyboardButtonLight(bModifier, IconPack.Key1, allowVibration, contentHeight) { addDigit(Token.Digit._1) } - KeyboardButtonLight(bModifier, IconPack.Key2, allowVibration, contentHeight) { addDigit(Token.Digit._2) } - KeyboardButtonLight(bModifier, IconPack.Key3, allowVibration, contentHeight) { addDigit(Token.Digit._3) } + KeyboardButtonLight(bModifier, IconPack.Key1, Token.Digit._1, allowVibration, contentHeight) { addDigit(Token.Digit._1) } + KeyboardButtonLight(bModifier, IconPack.Key2, Token.Digit._2, allowVibration, contentHeight) { addDigit(Token.Digit._2) } + KeyboardButtonLight(bModifier, IconPack.Key3, Token.Digit._3, allowVibration, contentHeight) { addDigit(Token.Digit._3) } // TODO Should be a separate o use custom widthFillFactors and heightFillFactors - KeyboardButtonLight(bModifier, IconPack.Key0, allowVibration, contentHeight) { addDigit(Token.Digit._0) } - KeyboardButtonLight(Modifier.fillMaxHeight(height).fillMaxWidth(width * 2), IconPack.Backspace, allowVibration, contentHeight, clearInput) { deleteDigit() } + KeyboardButtonLight(bModifier, IconPack.Key0, Token.Digit._0, allowVibration, contentHeight) { addDigit(Token.Digit._0) } + KeyboardButtonLight(wideButtonModifier, IconPack.Backspace, stringResource(R.string.delete_label), allowVibration, contentHeight, clearInput) { deleteDigit() } } } diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/formatting/FormattingScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/formatting/FormattingScreen.kt index 37872760..2cbe517e 100644 --- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/formatting/FormattingScreen.kt +++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/formatting/FormattingScreen.kt @@ -52,13 +52,13 @@ import com.sadellie.unitto.core.base.MAX_PRECISION import com.sadellie.unitto.core.base.OutputFormat import com.sadellie.unitto.core.base.R import com.sadellie.unitto.core.base.Separator -import com.sadellie.unitto.core.ui.common.NavigateUpButton -import com.sadellie.unitto.core.ui.common.PagedIsland -import com.sadellie.unitto.core.ui.common.SegmentedButton -import com.sadellie.unitto.core.ui.common.SegmentedButtonsRow import com.sadellie.unitto.core.ui.common.EmptyScreen import com.sadellie.unitto.core.ui.common.ListItem +import com.sadellie.unitto.core.ui.common.NavigateUpButton +import com.sadellie.unitto.core.ui.common.PagedIsland import com.sadellie.unitto.core.ui.common.ScaffoldWithLargeTopBar +import com.sadellie.unitto.core.ui.common.SegmentedButton +import com.sadellie.unitto.core.ui.common.SegmentedButtonsRow import com.sadellie.unitto.core.ui.common.Slider import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols import com.sadellie.unitto.core.ui.common.textfield.formatExpression @@ -209,7 +209,7 @@ fun FormattingScreen( selected = Separator.PERIOD == uiState.separator ) SegmentedButton( - label = stringResource(R.string.settings_comma), + label = stringResource(R.string.comma), onClick = { onSeparatorChange(Separator.COMMA) }, selected = Separator.COMMA == uiState.separator )