From 211570680ceecc49a079fadf3ee94fd52719ca30 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Sun, 12 Feb 2023 16:40:40 +0400 Subject: [PATCH] Refactored buttons --- .../unitto/core/ui/common/KeyboardButton.kt | 52 +----------- .../feature/converter/components/Keyboard.kt | 80 ++++++++++--------- .../feature/epoch/component/EpochKeyboard.kt | 27 ++++--- 3 files changed, 56 insertions(+), 103 deletions(-) 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 18599db6..555bc491 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 @@ -26,7 +26,6 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.collectIsPressedAsState import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.TextButton @@ -42,56 +41,6 @@ import androidx.compose.ui.unit.dp import com.sadellie.unitto.core.ui.theme.NumbersTextStyleTitleLarge import com.sadellie.unitto.core.ui.theme.NumbersTextStyleTitleSmall -/** - * Button for keyboard - * - * @param modifier Modifier that is applied to a [Button] component. - * @param digit Symbol to show on button. - * @param allowVibration When true will vibrate on button press. - * @param isPrimary If true will use `inverseOnSurface` color, else `secondaryContainer`. Primary - * buttons are digits. - * @param onLongClick Action to perform when holding this button. - * @param onClick Action to perform when clicking this button. - */ -@Composable -fun KeyboardButton( - modifier: Modifier = Modifier, - digit: String, - allowVibration: Boolean, - isPrimary: Boolean = true, - onLongClick: (() -> Unit)? = null, - onClick: (String) -> Unit = {} -) { - val view = LocalView.current - val interactionSource = remember { MutableInteractionSource() } - val isPressed by interactionSource.collectIsPressedAsState() - val cornerRadius: Int by animateIntAsState( - targetValue = if (isPressed) 30 else 50, - animationSpec = tween(easing = FastOutSlowInEasing), - ) - - UnittoButton( - onClick = { onClick(digit) }, - onLongClick = onLongClick, - modifier = modifier, - shape = RoundedCornerShape(cornerRadius), - containerColor = if (isPrimary) MaterialTheme.colorScheme.inverseOnSurface else MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onSecondaryContainer, - contentPadding = PaddingValues(0.dp), - interactionSource = interactionSource, - ) { - Text( - text = digit, - style = NumbersTextStyleTitleLarge, - color = if (isPrimary) MaterialTheme.colorScheme.onSurfaceVariant else MaterialTheme.colorScheme.onSecondaryContainer - ) - } - - LaunchedEffect(key1 = isPressed) { - if (isPressed and allowVibration) view.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP) - } -} - @Composable fun BasicKeyboardButton( modifier: Modifier, @@ -119,6 +68,7 @@ fun BasicKeyboardButton( shape = RoundedCornerShape(cornerRadius), containerColor = containerColor, contentColor = contentColor, + contentPadding = PaddingValues(0.dp), interactionSource = interactionSource ) { Text( diff --git a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/Keyboard.kt b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/Keyboard.kt index 8faf909c..5635a878 100644 --- a/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/Keyboard.kt +++ b/feature/converter/src/main/java/com/sadellie/unitto/feature/converter/components/Keyboard.kt @@ -56,7 +56,8 @@ import com.sadellie.unitto.core.base.KEY_PLUS import com.sadellie.unitto.core.base.KEY_RIGHT_BRACKET import com.sadellie.unitto.core.base.KEY_SQRT import com.sadellie.unitto.core.ui.Formatter -import com.sadellie.unitto.core.ui.common.KeyboardButton +import com.sadellie.unitto.core.ui.common.KeyboardButtonFilled +import com.sadellie.unitto.core.ui.common.KeyboardButtonLight import com.sadellie.unitto.feature.converter.ConverterMode /** @@ -102,34 +103,34 @@ private fun DefaultKeyboard( // Column modifier val cModifier = Modifier.weight(1f) Row(cModifier) { - KeyboardButton(bModifier, KEY_LEFT_BRACKET, isPrimary = false, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_RIGHT_BRACKET, isPrimary = false, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_EXPONENT, isPrimary = false, allowVibration = allowVibration, onClick = { addDigit(KEY_EXPONENT) }) - KeyboardButton(bModifier, KEY_SQRT, isPrimary = false, allowVibration = allowVibration, onClick = { addDigit(KEY_SQRT) }) + KeyboardButtonFilled(bModifier, KEY_LEFT_BRACKET, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_RIGHT_BRACKET, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_EXPONENT, allowVibration = allowVibration, onClick = { addDigit(KEY_EXPONENT) }) + KeyboardButtonFilled(bModifier, KEY_SQRT, allowVibration = allowVibration, onClick = { addDigit(KEY_SQRT) }) } Row(cModifier) { - KeyboardButton(bModifier, KEY_7, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_8, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_9, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_DIVIDE_DISPLAY, isPrimary = false, allowVibration = allowVibration) { addDigit(KEY_DIVIDE) } + KeyboardButtonLight(bModifier, KEY_7, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_8, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_9, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_DIVIDE_DISPLAY, allowVibration = allowVibration, onClick = { addDigit(KEY_DIVIDE) }) } Row(cModifier) { - KeyboardButton(bModifier, KEY_4, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_5, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_6, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_MULTIPLY_DISPLAY, isPrimary = false, allowVibration = allowVibration, ) { addDigit(KEY_MULTIPLY) } + KeyboardButtonLight(bModifier, KEY_4, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_5, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_6, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_MULTIPLY_DISPLAY, allowVibration = allowVibration, onClick = { addDigit(KEY_MULTIPLY) }) } Row(cModifier) { - KeyboardButton(bModifier, KEY_1, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_2, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_3, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_MINUS_DISPLAY, isPrimary = false, allowVibration = allowVibration) { addDigit(KEY_MINUS) } + KeyboardButtonLight(bModifier, KEY_1, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_2, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_3, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_MINUS_DISPLAY, allowVibration = allowVibration, onClick = { addDigit(KEY_MINUS) }) } Row(cModifier) { - KeyboardButton(bModifier, KEY_0, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, Formatter.fractional, allowVibration = allowVibration, ) { addDigit(KEY_DOT) } - KeyboardButton(bModifier, KEY_CLEAR, allowVibration = allowVibration, onLongClick = clearInput) { deleteDigit() } - KeyboardButton(bModifier, KEY_PLUS, isPrimary = false, allowVibration = allowVibration, ) { addDigit(KEY_PLUS) } + KeyboardButtonLight(bModifier, KEY_0, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, Formatter.fractional, allowVibration = allowVibration, onClick = { addDigit(KEY_DOT) }) + KeyboardButtonLight(bModifier, KEY_CLEAR, allowVibration = allowVibration, onClick = { deleteDigit() }, onLongClick = clearInput) + KeyboardButtonFilled(bModifier, KEY_PLUS, allowVibration = allowVibration, onClick = { addDigit(KEY_PLUS) }) } } } @@ -150,41 +151,42 @@ private fun BaseKeyboard( // Column modifier val cModifier = Modifier.weight(1f) Row(cModifier) { - KeyboardButton(bModifier, KEY_BASE_A, isPrimary = false, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_BASE_B, isPrimary = false, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_BASE_C, isPrimary = false, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_BASE_A, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_BASE_B, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_BASE_C, allowVibration = allowVibration, onClick = addDigit) } Row(cModifier) { - KeyboardButton(bModifier, KEY_BASE_D, isPrimary = false, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_BASE_E, isPrimary = false, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_BASE_F, isPrimary = false, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_BASE_D,allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_BASE_E,allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonFilled(bModifier, KEY_BASE_F,allowVibration = allowVibration, onClick = addDigit) } Row(cModifier) { - KeyboardButton(bModifier, KEY_7, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_8, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_9, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_7, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_8, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_9, allowVibration = allowVibration, onClick = addDigit) } Row(cModifier) { - KeyboardButton(bModifier, KEY_4, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_5, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_6, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_4, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_5, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_6, allowVibration = allowVibration, onClick = addDigit) } Row(cModifier) { - KeyboardButton(bModifier, KEY_1, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_2, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton(bModifier, KEY_3, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_1, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_2, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight(bModifier, KEY_3, allowVibration = allowVibration, onClick = addDigit) } Row(cModifier) { - KeyboardButton(bModifier, KEY_0, allowVibration = allowVibration, onClick = addDigit) - KeyboardButton( + KeyboardButtonLight(bModifier, KEY_0, allowVibration = allowVibration, onClick = addDigit) + KeyboardButtonLight( Modifier .fillMaxSize() .weight(2f) .padding(4.dp), KEY_CLEAR, allowVibration = allowVibration, + onClick = { deleteDigit() }, onLongClick = clearInput - ) { deleteDigit() } + ) } } } diff --git a/feature/epoch/src/main/java/com/sadellie/unitto/feature/epoch/component/EpochKeyboard.kt b/feature/epoch/src/main/java/com/sadellie/unitto/feature/epoch/component/EpochKeyboard.kt index 47730f7f..3a5fc70b 100644 --- a/feature/epoch/src/main/java/com/sadellie/unitto/feature/epoch/component/EpochKeyboard.kt +++ b/feature/epoch/src/main/java/com/sadellie/unitto/feature/epoch/component/EpochKeyboard.kt @@ -36,7 +36,7 @@ import com.sadellie.unitto.core.base.KEY_7 import com.sadellie.unitto.core.base.KEY_8 import com.sadellie.unitto.core.base.KEY_9 import com.sadellie.unitto.core.base.KEY_CLEAR -import com.sadellie.unitto.core.ui.common.KeyboardButton +import com.sadellie.unitto.core.ui.common.KeyboardButtonLight @Composable internal fun EpochKeyboard( @@ -60,28 +60,29 @@ internal fun EpochKeyboard( .weight(2f) .padding(4.dp) Row(cModifier) { - KeyboardButton(bModifier, KEY_7, allowVibration = false, onClick = addSymbol) - KeyboardButton(bModifier, KEY_8, allowVibration = false, onClick = addSymbol) - KeyboardButton(bModifier, KEY_9, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight(bModifier, KEY_7, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight(bModifier, KEY_8, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight(bModifier, KEY_9, allowVibration = false, onClick = addSymbol) } Row(cModifier) { - KeyboardButton(bModifier, KEY_4, allowVibration = false, onClick = addSymbol) - KeyboardButton(bModifier, KEY_5, allowVibration = false, onClick = addSymbol) - KeyboardButton(bModifier, KEY_6, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight(bModifier, KEY_4, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight(bModifier, KEY_5, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight(bModifier, KEY_6, allowVibration = false, onClick = addSymbol) } Row(cModifier) { - KeyboardButton(bModifier, KEY_1, allowVibration = false, onClick = addSymbol) - KeyboardButton(bModifier, KEY_2, allowVibration = false, onClick = addSymbol) - KeyboardButton(bModifier, KEY_3, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight(bModifier, KEY_1, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight(bModifier, KEY_2, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight(bModifier, KEY_3, allowVibration = false, onClick = addSymbol) } Row(cModifier) { - KeyboardButton(bModifier, KEY_0, allowVibration = false, onClick = addSymbol) - KeyboardButton( + KeyboardButtonLight(bModifier, KEY_0, allowVibration = false, onClick = addSymbol) + KeyboardButtonLight( dModifier, KEY_CLEAR, allowVibration = false, + onClick = { deleteSymbol() }, onLongClick = clearSymbols - ) { deleteSymbol() } + ) } } } \ No newline at end of file