diff --git a/app/src/main/java/com/dessalines/thumbkey/db/AppDb.kt b/app/src/main/java/com/dessalines/thumbkey/db/AppDb.kt index a8f7b772..0b7d5948 100644 --- a/app/src/main/java/com/dessalines/thumbkey/db/AppDb.kt +++ b/app/src/main/java/com/dessalines/thumbkey/db/AppDb.kt @@ -27,8 +27,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.util.concurrent.Executors -const val DEFAULT_KEY_HEIGHT = 64 -const val DEFAULT_KEY_WIDTH = 64 +const val DEFAULT_KEY_SIZE = 64 const val DEFAULT_ANIMATION_SPEED = 250 const val DEFAULT_ANIMATION_HELPER_SPEED = 250 const val DEFAULT_POSITION = 0 @@ -58,13 +57,13 @@ const val DEFAULT_KEY_RADIUS = 0 data class AppSettings( @PrimaryKey(autoGenerate = true) val id: Int, @ColumnInfo( - name = "key_height", - defaultValue = DEFAULT_KEY_HEIGHT.toString(), + name = "key_size", + defaultValue = DEFAULT_KEY_SIZE.toString(), ) - val keyHeight: Int, + val keySize: Int, @ColumnInfo( name = "key_width", - defaultValue = DEFAULT_KEY_WIDTH.toString(), + defaultValue = "0", ) val keyWidth: Int, @ColumnInfo( @@ -220,9 +219,9 @@ data class LayoutsUpdate( data class LookAndFeelUpdate( val id: Int, @ColumnInfo( - name = "key_height", + name = "key_size", ) - val keyHeight: Int, + val keySize: Int, @ColumnInfo( name = "key_width", ) @@ -504,8 +503,17 @@ val MIGRATION_12_13 = } } +val MIGRATION_13_14 = + object : Migration(13, 14) { + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL( + "alter table AppSettings add column key_width INTEGER NOT NULL default 0", + ) + } + } + @Database( - version = 13, + version = 14, entities = [AppSettings::class], exportSchema = true, ) @@ -540,6 +548,7 @@ abstract class AppDB : RoomDatabase() { MIGRATION_10_11, MIGRATION_11_12, MIGRATION_12_13, + MIGRATION_13_14, ) // Necessary because it can't insert data on creation .addCallback( diff --git a/app/src/main/java/com/dessalines/thumbkey/ui/components/keyboard/KeyboardScreen.kt b/app/src/main/java/com/dessalines/thumbkey/ui/components/keyboard/KeyboardScreen.kt index 93e36a0b..34c56843 100644 --- a/app/src/main/java/com/dessalines/thumbkey/ui/components/keyboard/KeyboardScreen.kt +++ b/app/src/main/java/com/dessalines/thumbkey/ui/components/keyboard/KeyboardScreen.kt @@ -39,10 +39,9 @@ import com.dessalines.thumbkey.db.DEFAULT_HIDE_LETTERS import com.dessalines.thumbkey.db.DEFAULT_HIDE_SYMBOLS import com.dessalines.thumbkey.db.DEFAULT_KEYBOARD_LAYOUT import com.dessalines.thumbkey.db.DEFAULT_KEY_BORDER_WIDTH -import com.dessalines.thumbkey.db.DEFAULT_KEY_HEIGHT import com.dessalines.thumbkey.db.DEFAULT_KEY_PADDING import com.dessalines.thumbkey.db.DEFAULT_KEY_RADIUS -import com.dessalines.thumbkey.db.DEFAULT_KEY_WIDTH +import com.dessalines.thumbkey.db.DEFAULT_KEY_SIZE import com.dessalines.thumbkey.db.DEFAULT_MIN_SWIPE_LENGTH import com.dessalines.thumbkey.db.DEFAULT_POSITION import com.dessalines.thumbkey.db.DEFAULT_PUSHUP_SIZE @@ -131,8 +130,8 @@ fun KeyboardScreen( val backdropColor = MaterialTheme.colorScheme.background val backdropPadding = 6.dp val keyPadding = settings?.keyPadding ?: DEFAULT_KEY_PADDING - val legendHeight = settings?.keyHeight ?: DEFAULT_KEY_HEIGHT - val legendWidth = settings?.keyWidth ?: DEFAULT_KEY_WIDTH + val legendHeight = settings?.keySize ?: DEFAULT_KEY_SIZE + val legendWidth = (if ((settings?.keyWidth ?: 0) > 0) settings?.keyWidth else legendHeight) ?: legendHeight val keyRadius = settings?.keyRadius ?: DEFAULT_KEY_RADIUS val keyBorderWidthFloat = keyBorderWidth / 10.0f diff --git a/app/src/main/java/com/dessalines/thumbkey/ui/components/settings/SettingsActivity.kt b/app/src/main/java/com/dessalines/thumbkey/ui/components/settings/SettingsActivity.kt index a6dd93be..bb305b8f 100644 --- a/app/src/main/java/com/dessalines/thumbkey/ui/components/settings/SettingsActivity.kt +++ b/app/src/main/java/com/dessalines/thumbkey/ui/components/settings/SettingsActivity.kt @@ -49,10 +49,9 @@ import com.dessalines.thumbkey.db.DEFAULT_HIDE_SYMBOLS import com.dessalines.thumbkey.db.DEFAULT_KEYBOARD_LAYOUT import com.dessalines.thumbkey.db.DEFAULT_KEY_BORDERS import com.dessalines.thumbkey.db.DEFAULT_KEY_BORDER_WIDTH -import com.dessalines.thumbkey.db.DEFAULT_KEY_HEIGHT import com.dessalines.thumbkey.db.DEFAULT_KEY_PADDING import com.dessalines.thumbkey.db.DEFAULT_KEY_RADIUS -import com.dessalines.thumbkey.db.DEFAULT_KEY_WIDTH +import com.dessalines.thumbkey.db.DEFAULT_KEY_SIZE import com.dessalines.thumbkey.db.DEFAULT_MIN_SWIPE_LENGTH import com.dessalines.thumbkey.db.DEFAULT_POSITION import com.dessalines.thumbkey.db.DEFAULT_PUSHUP_SIZE @@ -278,8 +277,8 @@ private fun resetAppSettingsToDefault( hideLetters = DEFAULT_HIDE_LETTERS, hideSymbols = DEFAULT_HIDE_SYMBOLS, keyBorders = DEFAULT_KEY_BORDERS, - keyHeight = DEFAULT_KEY_HEIGHT, - keyWidth = DEFAULT_KEY_WIDTH, + keySize = DEFAULT_KEY_SIZE, + keyWidth = 0, spacebarMultiTaps = DEFAULT_SPACEBAR_MULTITAPS, theme = DEFAULT_THEME, themeColor = DEFAULT_THEME_COLOR, diff --git a/app/src/main/java/com/dessalines/thumbkey/ui/components/settings/lookandfeel/LookAndFeelActivity.kt b/app/src/main/java/com/dessalines/thumbkey/ui/components/settings/lookandfeel/LookAndFeelActivity.kt index ea10a4bf..bdc7f227 100755 --- a/app/src/main/java/com/dessalines/thumbkey/ui/components/settings/lookandfeel/LookAndFeelActivity.kt +++ b/app/src/main/java/com/dessalines/thumbkey/ui/components/settings/lookandfeel/LookAndFeelActivity.kt @@ -11,6 +11,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Animation import androidx.compose.material.icons.outlined.BorderOuter import androidx.compose.material.icons.outlined.Colorize +import androidx.compose.material.icons.outlined.Crop75 import androidx.compose.material.icons.outlined.FormatSize import androidx.compose.material.icons.outlined.HideImage import androidx.compose.material.icons.outlined.LinearScale @@ -52,10 +53,9 @@ import com.dessalines.thumbkey.db.DEFAULT_HIDE_LETTERS import com.dessalines.thumbkey.db.DEFAULT_HIDE_SYMBOLS import com.dessalines.thumbkey.db.DEFAULT_KEY_BORDERS import com.dessalines.thumbkey.db.DEFAULT_KEY_BORDER_WIDTH -import com.dessalines.thumbkey.db.DEFAULT_KEY_HEIGHT import com.dessalines.thumbkey.db.DEFAULT_KEY_PADDING import com.dessalines.thumbkey.db.DEFAULT_KEY_RADIUS -import com.dessalines.thumbkey.db.DEFAULT_KEY_WIDTH +import com.dessalines.thumbkey.db.DEFAULT_KEY_SIZE import com.dessalines.thumbkey.db.DEFAULT_POSITION import com.dessalines.thumbkey.db.DEFAULT_PUSHUP_SIZE import com.dessalines.thumbkey.db.DEFAULT_SOUND_ON_TAP @@ -83,13 +83,17 @@ fun LookAndFeelActivity( val settings by appSettingsViewModel.appSettings.observeAsState() - val keyHeightState = + val keySizeState = rememberFloatSettingState( - (settings?.keyHeight ?: DEFAULT_KEY_HEIGHT).toFloat(), + (settings?.keySize ?: DEFAULT_KEY_SIZE).toFloat(), ) val keyWidthState = rememberFloatSettingState( - (settings?.keyWidth ?: DEFAULT_KEY_WIDTH).toFloat(), + ((if ((settings?.keyWidth ?: 0) > 0) settings?.keyWidth else keySizeState.value) ?: keySizeState.value).toFloat(), + ) + val nonSquareKeysState = + rememberBooleanSettingState( + keySizeState.value != keyWidthState.value, ) val pushupSizeState = rememberFloatSettingState( @@ -182,7 +186,8 @@ fun LookAndFeelActivity( themeState.value = i updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -218,7 +223,8 @@ fun LookAndFeelActivity( themeColorState.value = i updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -254,7 +260,8 @@ fun LookAndFeelActivity( positionState.value = i updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -288,7 +295,8 @@ fun LookAndFeelActivity( onCheckedChange = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -322,7 +330,8 @@ fun LookAndFeelActivity( onCheckedChange = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -356,7 +365,8 @@ fun LookAndFeelActivity( onCheckedChange = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -376,10 +386,14 @@ fun LookAndFeelActivity( ) }, ) - val keyHeightStr = stringResource(R.string.key_height, keyHeightState.value.toInt().toString()) + val keyHeightStr = + stringResource( + if (nonSquareKeysState.value) R.string.key_height else R.string.key_size, + keySizeState.value.toInt().toString(), + ) SettingsSlider( valueRange = 10f..200f, - state = keyHeightState, + state = keySizeState, icon = { Icon( imageVector = Icons.Outlined.FormatSize, @@ -392,7 +406,8 @@ fun LookAndFeelActivity( onValueChangeFinished = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -412,23 +427,22 @@ fun LookAndFeelActivity( ) }, ) - val keyWidthStr = stringResource(R.string.key_width, keyWidthState.value.toInt().toString()) - SettingsSlider( - valueRange = 10f..200f, - state = keyWidthState, + SettingsCheckbox( + state = nonSquareKeysState, icon = { Icon( - imageVector = Icons.Outlined.FormatSize, + imageVector = Icons.Outlined.Crop75, contentDescription = null, ) }, title = { - Text(keyWidthStr) + Text(stringResource(R.string.key_non_square)) }, - onValueChangeFinished = { + onCheckedChange = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -448,6 +462,45 @@ fun LookAndFeelActivity( ) }, ) + if (nonSquareKeysState.value) { + val keyWidthStr = stringResource(R.string.key_width, keyWidthState.value.toInt().toString()) + SettingsSlider( + valueRange = 10f..200f, + state = keyWidthState, + icon = { + Icon( + imageVector = Icons.Outlined.Crop75, + contentDescription = null, + ) + }, + title = { + Text(keyWidthStr) + }, + onValueChangeFinished = { + updateLookAndFeel( + appSettingsViewModel, + keySizeState, + nonSquareKeysState, + keyWidthState, + pushupSizeState, + animationSpeedState, + animationHelperSpeedState, + positionState, + keyBordersState, + vibrateOnTapState, + soundOnTapState, + hideLettersState, + hideSymbolsState, + themeState, + themeColorState, + backdropEnabledState, + keyPaddingState, + keyBorderWidthState, + keyRadiusState, + ) + }, + ) + } val keyPaddingStr = stringResource(R.string.key_padding, keyPaddingState.value.toInt().toString()) SettingsSlider( valueRange = 0f..10f, @@ -464,7 +517,8 @@ fun LookAndFeelActivity( onValueChangeFinished = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -500,7 +554,8 @@ fun LookAndFeelActivity( onValueChangeFinished = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -536,7 +591,8 @@ fun LookAndFeelActivity( onValueChangeFinished = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -572,7 +628,8 @@ fun LookAndFeelActivity( onValueChangeFinished = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -608,7 +665,8 @@ fun LookAndFeelActivity( onValueChangeFinished = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -650,7 +708,8 @@ fun LookAndFeelActivity( onValueChangeFinished = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -688,7 +747,8 @@ fun LookAndFeelActivity( onCheckedChange = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -722,7 +782,8 @@ fun LookAndFeelActivity( onCheckedChange = { updateLookAndFeel( appSettingsViewModel, - keyHeightState, + keySizeState, + nonSquareKeysState, keyWidthState, pushupSizeState, animationSpeedState, @@ -751,7 +812,8 @@ fun LookAndFeelActivity( private fun updateLookAndFeel( appSettingsViewModel: AppSettingsViewModel, - keyHeightState: SettingValueState, + keySizeState: SettingValueState, + nonSquareKeysState: SettingValueState, keyWidthState: SettingValueState, pushupSizeState: SettingValueState, animationSpeedState: SettingValueState, @@ -772,8 +834,8 @@ private fun updateLookAndFeel( appSettingsViewModel.updateLookAndFeel( LookAndFeelUpdate( id = 1, - keyHeight = keyHeightState.value.toInt(), - keyWidth = keyWidthState.value.toInt(), + keySize = keySizeState.value.toInt(), + keyWidth = if (nonSquareKeysState.value) keyWidthState.value.toInt() else 0, pushupSize = pushupSizeState.value.toInt(), animationSpeed = animationSpeedState.value.toInt(), animationHelperSpeed = animationHelperSpeedState.value.toInt(), diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6bc9ea6d..4dd30c4c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -78,4 +78,7 @@ Espacement des touches : %1$s Bordure des touches : %1$s Arrondi des touches : %1$s + Touches non carrées + Largeur des touches : %1$s + Hauteur des touches : %1$s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 10f2dffa..370892c9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,6 +42,8 @@ Requires touch feedback to be enabled in system settings Play sound on tap Auto-Capitalize + Key Size: %1$s + Use Non-Square Keys Key Height: %1$s Key Width: %1$s Bottom Offset: %1$s