fretfret

learn the notes on a guitar from the comfort of your android phone
Log | Files | Refs

commit 7af374b7989c019c649e738f8a9902e7f0402997
parent bf2fc444755ddfa4cbf54e9694ca2017e9ddf1dc
Author: massi <mdsiboldi@gmail.com>
Date:   Fri, 12 Jul 2024 01:33:56 -0700

miscellaneous cleanup

Diffstat:
Mapp/src/main/java/com/example/fretboardtrainer/MainActivity.kt | 103++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
1 file changed, 68 insertions(+), 35 deletions(-)

diff --git a/app/src/main/java/com/example/fretboardtrainer/MainActivity.kt b/app/src/main/java/com/example/fretboardtrainer/MainActivity.kt @@ -21,8 +21,10 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.Button @@ -42,7 +44,9 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.em import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.byteArrayPreferencesKey @@ -182,8 +186,6 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { } private fun pickNote(): Note { - // find all true values in settings - // randomly pick one of those val notes = mutableSetOf<Note>() for (stringIdx in uiState.value.stringSettings.indices) { if (uiState.value.stringSettings[stringIdx]) { @@ -267,9 +269,15 @@ fun Fretfret(viewModel: MainViewModel = viewModel()) { modifier = Modifier.displayCutoutPadding(), title = { if (uiState.showSettings) { - Text("Fretfret - Settings") + Row(verticalAlignment = Alignment.CenterVertically) { + Text("settings - ") + Text( + fontSize = 3.em, + text = "choose which strings and frets you'll be tested on" + ) + } } else { - Text("Fretfret") + Text("fretfret") } }, actions = { @@ -287,7 +295,8 @@ fun Fretfret(viewModel: MainViewModel = viewModel()) { .fillMaxSize() .padding(innerPadding) .padding(horizontal = 20.dp) - .displayCutoutPadding(), + .displayCutoutPadding() + .verticalScroll(state = rememberScrollState()), verticalArrangement = Arrangement.SpaceAround ) { Row { @@ -302,21 +311,10 @@ fun Fretfret(viewModel: MainViewModel = viewModel()) { note = uiState.note ) if (uiState.showSettings) { - Row(horizontalArrangement = Arrangement.SpaceBetween) { - repeat(Constants.FRETS.size) { n -> - Column( - modifier = Modifier - .weight(weightForFret(n)), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Checkbox(modifier = Modifier - .padding(end = 15.dp, start = 12.dp), - checked = uiState.fretSettings[n], - onCheckedChange = { viewModel.toggleFret(n) }) - Text(Constants.FRETS[n]) - } - } - } + FretSettings( + settings = uiState.fretSettings, + toggle = { n -> viewModel.toggleFret((n)) } + ) } } } @@ -325,7 +323,15 @@ fun Fretfret(viewModel: MainViewModel = viewModel()) { horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { - if (!uiState.showSettings) { + if (uiState.showSettings) { + Row {} + Button( + onClick = { viewModel.toggleSettings() }, + shape = RoundedCornerShape(5.dp) + ) { + Text("done") + } + } else { Row { if (uiState.lastNote != null) { Text("last answer: ") @@ -338,14 +344,6 @@ fun Fretfret(viewModel: MainViewModel = viewModel()) { ) { Text("next") } - } else { - Row {} - Button( - onClick = { viewModel.toggleSettings() }, - shape = RoundedCornerShape(5.dp) - ) { - Text("done") - } } } } @@ -353,15 +351,24 @@ fun Fretfret(viewModel: MainViewModel = viewModel()) { } } +@Preview @Composable -fun StringSettings(settings: List<Boolean>, toggle: (n: Int) -> Unit) { +fun StringSettings( + settings: List<Boolean> = List(Constants.STRINGS.size) { n -> n % 3 == 0 }, + toggle: (n: Int) -> Unit = {}, +) { Column { repeat(Constants.STRINGS.size) { n -> - Row(verticalAlignment = Alignment.CenterVertically) { - Text(Constants.STRINGS[n]) - Checkbox(modifier = Modifier.height( + Row( + modifier = Modifier.height( (Constants.FRETBOARD_HEIGHT / Constants.STRINGS.size).dp ), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.End + ) { + Text(modifier = Modifier.width(10.dp), text = Constants.STRINGS[n]) + Checkbox(modifier = Modifier + .padding(0.dp), checked = settings[n], onCheckedChange = { toggle(n) }) } @@ -369,6 +376,33 @@ fun StringSettings(settings: List<Boolean>, toggle: (n: Int) -> Unit) { } } +@Preview +@Composable +fun FretSettings( + settings: List<Boolean> = List(Constants.FRETS.size) { n -> n % 3 == 0 }, + toggle: (n: Int) -> Unit = {}, +) { + Row(horizontalArrangement = Arrangement.SpaceBetween) { + repeat(Constants.FRETS.size) { n -> + Column( + modifier = Modifier + .weight(weightForFret(n)), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Top + ) { + Checkbox(modifier = Modifier + .padding(end = 15.dp, start = 12.dp), + checked = settings[n], + onCheckedChange = { toggle(n) }) + Text( + modifier = Modifier.absoluteOffset(y = (-10).dp), + text = Constants.FRETS[n] + ) + } + } + } +} + @Composable fun Fretboard(modifier: Modifier = Modifier, note: Note?) { Surface( @@ -379,7 +413,6 @@ fun Fretboard(modifier: Modifier = Modifier, note: Note?) { ) { val lineColor = MaterialTheme.colorScheme.onSurfaceVariant val dotColor = MaterialTheme.colorScheme.outline - val openStringColor = dotColor Row( modifier = modifier .fillMaxWidth() @@ -399,7 +432,7 @@ fun Fretboard(modifier: Modifier = Modifier, note: Note?) { n, noteAt = if (note != null && n == note.fret) note.string else null, color = lineColor, - openStringColor = openStringColor + openStringColor = dotColor ) } Divider(