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 ded64c51..0cc986ca 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 @@ -18,13 +18,15 @@ package com.sadellie.unitto.feature.converter.components -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import com.sadellie.unitto.core.base.Token import com.sadellie.unitto.core.ui.common.ColumnWithConstraints import com.sadellie.unitto.core.ui.common.KeyboardButtonFilled @@ -57,6 +59,7 @@ import com.sadellie.unitto.core.ui.common.key.unittoicons.Multiply import com.sadellie.unitto.core.ui.common.key.unittoicons.Plus import com.sadellie.unitto.core.ui.common.key.unittoicons.RightBracket import com.sadellie.unitto.core.ui.common.key.unittoicons.SquareRoot +import com.sadellie.unitto.core.ui.common.textfield.FormatterSymbols @Composable internal fun DefaultKeyboard( @@ -68,40 +71,44 @@ internal fun DefaultKeyboard( fractional: String, middleZero: Boolean, ) { - val fractionalIcon = remember { if (fractional == Token.Digit.dot) UnittoIcons.Dot else UnittoIcons.Comma } ColumnWithConstraints(modifier) { + val fractionalIcon = remember { if (fractional == Token.Digit.dot) UnittoIcons.Dot else UnittoIcons.Comma } + val mainButtonHorizontalPadding by remember { + derivedStateOf { (it.maxWidth * 0.01f) } + } + // Button modifier val bModifier = Modifier .fillMaxSize() .weight(1f) + .padding(mainButtonHorizontalPadding) // Column modifier - val cModifier = Modifier.weight(1f).padding(vertical = it.maxHeight * 0.01f) - val horizontalArrangement = Arrangement.spacedBy(it.maxWidth * 0.03f) - Row(cModifier, horizontalArrangement) { + val cModifier = Modifier.weight(1f) + Row(cModifier) { KeyboardButtonFilled(bModifier, UnittoIcons.LeftBracket, allowVibration) { addDigit(Token.Operator.leftBracket) } KeyboardButtonFilled(bModifier, UnittoIcons.RightBracket, allowVibration) { addDigit(Token.Operator.rightBracket) } KeyboardButtonFilled(bModifier, UnittoIcons.Exponent, allowVibration) { addDigit(Token.Operator.power) } KeyboardButtonFilled(bModifier, UnittoIcons.SquareRoot, allowVibration) { addDigit(Token.Operator.sqrt) } } - Row(cModifier, horizontalArrangement) { + Row(cModifier) { KeyboardButtonLight(bModifier, UnittoIcons.Key7, allowVibration) { addDigit(Token.Digit._7) } KeyboardButtonLight(bModifier, UnittoIcons.Key8, allowVibration) { addDigit(Token.Digit._8) } KeyboardButtonLight(bModifier, UnittoIcons.Key9, allowVibration) { addDigit(Token.Digit._9) } KeyboardButtonFilled(bModifier, UnittoIcons.Divide, allowVibration) { addDigit(Token.Operator.divide) } } - Row(cModifier, horizontalArrangement) { + Row(cModifier) { KeyboardButtonLight(bModifier, UnittoIcons.Key4, allowVibration) { addDigit(Token.Digit._4) } KeyboardButtonLight(bModifier, UnittoIcons.Key5, allowVibration) { addDigit(Token.Digit._5) } KeyboardButtonLight(bModifier, UnittoIcons.Key6, allowVibration) { addDigit(Token.Digit._6) } KeyboardButtonFilled(bModifier, UnittoIcons.Multiply, allowVibration) { addDigit(Token.Operator.multiply) } } - Row(cModifier, horizontalArrangement) { + Row(cModifier) { KeyboardButtonLight(bModifier, UnittoIcons.Key1, allowVibration) { addDigit(Token.Digit._1) } KeyboardButtonLight(bModifier, UnittoIcons.Key2, allowVibration) { addDigit(Token.Digit._2) } KeyboardButtonLight(bModifier, UnittoIcons.Key3, allowVibration) { addDigit(Token.Digit._3) } KeyboardButtonFilled(bModifier, UnittoIcons.Minus, allowVibration) { addDigit(Token.Operator.minus) } } - Row(cModifier, horizontalArrangement) { + Row(cModifier) { if (middleZero) { KeyboardButtonLight(bModifier, fractionalIcon, allowVibration) { addDigit(Token.Digit.dot) } KeyboardButtonLight(bModifier, UnittoIcons.Key0, allowVibration) { addDigit(Token.Digit._0) } @@ -124,42 +131,75 @@ internal fun NumberBaseKeyboard( allowVibration: Boolean ) { ColumnWithConstraints(modifier) { + val mainButtonHorizontalPadding by remember { + derivedStateOf { (it.maxWidth * 0.01f) } + } + // Button modifier val bModifier = Modifier .fillMaxSize() .weight(1f) + .padding(mainButtonHorizontalPadding) // Column modifier - val cModifier = Modifier.weight(1f).padding(vertical = it.maxHeight * 0.01f) - val horizontalArrangement = Arrangement.spacedBy(it.maxWidth * 0.03f) - Row(cModifier, horizontalArrangement) { + val cModifier = Modifier.weight(1f) + Row(cModifier) { KeyboardButtonFilled(bModifier, UnittoIcons.KeyA, allowVibration) { addDigit(Token.Letter._A) } KeyboardButtonFilled(bModifier, UnittoIcons.KeyB, allowVibration) { addDigit(Token.Letter._B) } KeyboardButtonFilled(bModifier, UnittoIcons.KeyC, allowVibration) { addDigit(Token.Letter._C) } } - Row(cModifier, horizontalArrangement) { + Row(cModifier) { KeyboardButtonFilled(bModifier, UnittoIcons.KeyD, allowVibration) { addDigit(Token.Letter._D) } KeyboardButtonFilled(bModifier, UnittoIcons.KeyE, allowVibration) { addDigit(Token.Letter._E) } KeyboardButtonFilled(bModifier, UnittoIcons.KeyF, allowVibration) { addDigit(Token.Letter._F) } } - Row(cModifier, horizontalArrangement) { + Row(cModifier) { KeyboardButtonLight(bModifier, UnittoIcons.Key7, allowVibration) { addDigit(Token.Digit._7) } KeyboardButtonLight(bModifier, UnittoIcons.Key8, allowVibration) { addDigit(Token.Digit._8) } KeyboardButtonLight(bModifier, UnittoIcons.Key9, allowVibration) { addDigit(Token.Digit._9) } } - Row(cModifier, horizontalArrangement) { + Row(cModifier) { KeyboardButtonLight(bModifier, UnittoIcons.Key4, allowVibration) { addDigit(Token.Digit._4) } KeyboardButtonLight(bModifier, UnittoIcons.Key5, allowVibration) { addDigit(Token.Digit._5) } KeyboardButtonLight(bModifier, UnittoIcons.Key6, allowVibration) { addDigit(Token.Digit._6) } } - Row(cModifier, horizontalArrangement) { + Row(cModifier) { KeyboardButtonLight(bModifier, UnittoIcons.Key1, allowVibration) { addDigit(Token.Digit._1) } KeyboardButtonLight(bModifier, UnittoIcons.Key2, allowVibration) { addDigit(Token.Digit._2) } KeyboardButtonLight(bModifier, UnittoIcons.Key3, allowVibration) { addDigit(Token.Digit._3) } } - Row(cModifier, horizontalArrangement) { + Row(cModifier) { KeyboardButtonLight(bModifier, UnittoIcons.Key0, allowVibration) { addDigit(Token.Digit._0) } KeyboardButtonLight( - Modifier.fillMaxSize().weight(2f).padding(it.maxWidth * 0.015f, it.maxHeight * 0.008f), UnittoIcons.Backspace, allowVibration, onLongClick = clearInput) { deleteDigit() } + Modifier + .fillMaxSize() + .weight(2f) + .padding(mainButtonHorizontalPadding), UnittoIcons.Backspace, allowVibration, onLongClick = clearInput) { deleteDigit() } } } } + +@Preview +@Composable +private fun PreviewConverterKeyboard() { + DefaultKeyboard( + modifier = Modifier, + addDigit = {}, + clearInput = {}, + deleteDigit = {}, + allowVibration = false, + fractional = FormatterSymbols.Spaces.fractional, + middleZero = false + ) +} + +@Preview +@Composable +private fun PreviewConverterKeyboardNumberBase() { + NumberBaseKeyboard( + modifier = Modifier, + addDigit = {}, + clearInput = {}, + deleteDigit = {}, + allowVibration = false, + ) +}