diff --git a/app/src/main/java/io/github/fate_grand_automata/ui/Stepper.kt b/app/src/main/java/io/github/fate_grand_automata/ui/Stepper.kt index 4785a3938..4496586c9 100644 --- a/app/src/main/java/io/github/fate_grand_automata/ui/Stepper.kt +++ b/app/src/main/java/io/github/fate_grand_automata/ui/Stepper.kt @@ -3,6 +3,7 @@ package io.github.fate_grand_automata.ui import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -14,6 +15,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import io.github.fate_grand_automata.ui.prefs.StatusWrapper @@ -61,6 +63,7 @@ fun Stepper( valueRange: IntRange, enabled: Boolean = true, delta: Int = 1, + textStyle: TextStyle = LocalTextStyle.current, valueRepresentation: (Int) -> String = { it.toString() } ) { var currentValue by remember(value) { mutableStateOf(value) } @@ -86,7 +89,8 @@ fun Stepper( valueRepresentation(currentValue), textAlign = TextAlign.Center, modifier = Modifier - .padding(horizontal = 5.dp) + .padding(horizontal = 5.dp), + style = textStyle ) } diff --git a/app/src/main/java/io/github/fate_grand_automata/ui/launcher/SkillUpgradeLauncher.kt b/app/src/main/java/io/github/fate_grand_automata/ui/launcher/SkillUpgradeLauncher.kt index a068f7a49..f4d576dab 100644 --- a/app/src/main/java/io/github/fate_grand_automata/ui/launcher/SkillUpgradeLauncher.kt +++ b/app/src/main/java/io/github/fate_grand_automata/ui/launcher/SkillUpgradeLauncher.kt @@ -1,17 +1,23 @@ package io.github.fate_grand_automata.ui.launcher +import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Check import androidx.compose.material3.Checkbox +import androidx.compose.material3.Divider +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Switch +import androidx.compose.material3.SwitchDefaults import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable @@ -22,8 +28,10 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.scale import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp import io.github.fate_grand_automata.R import io.github.fate_grand_automata.scripts.prefs.IPreferences @@ -102,107 +110,121 @@ fun skillUpgradeLauncher( shouldUpgrade3 = shouldUpdateAll == true && minSkill3 < 10 }) - Column( + LazyColumn( modifier = modifier .padding(horizontal = 16.dp) .padding(top = 5.dp) ) { - Text( - text = stringResource(id = R.string.skill_upgrade), - style = MaterialTheme.typography.headlineSmall - ) - - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - modifier = Modifier - .fillMaxWidth() - .clickable { shouldUpdateAll = !shouldUpdateAll } - ) { - Text( - stringResource(R.string.skill_enhancement_all_question), - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.secondary - ) - - Switch( - checked = shouldUpdateAll, - onCheckedChange = { shouldUpdateAll = it } - ) + stickyHeader { + Column( + modifier = Modifier + .fillMaxWidth() + .background( + color = MaterialTheme.colorScheme.background + ) + ) { + Text( + text = stringResource(id = R.string.skill_upgrade), + style = MaterialTheme.typography.headlineSmall + ) + Divider() + } } - - Box( - modifier = Modifier.align(Alignment.End) - ) { + item { Row( - horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier + .fillMaxWidth() + .clickable { shouldUpdateAll = !shouldUpdateAll } ) { - TextButton( - onClick = { targetAllSkillLevel = lowestMinSkill}, - enabled = shouldUpdateAll, - modifier = Modifier.alignByBaseline() - ) { - Text(text = stringResource(id = R.string.reset).uppercase()) - } + Text( + stringResource(R.string.skill_enhancement_all_question), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.secondary, + modifier = Modifier.weight(1f), + textAlign = TextAlign.Justify + ) + Switch( + checked = shouldUpdateAll, + onCheckedChange = { + shouldUpdateAll = it + }, + thumbContent = if (shouldUpdateAll){ + { + Icon( + imageVector = Icons.Filled.Check, + contentDescription = null, + modifier = Modifier.size(SwitchDefaults.IconSize), + ) + } + } else { null }, + modifier = Modifier.scale(0.75f) + ) + + + Stepper( - modifier = Modifier.alignByBaseline(), value = targetAllSkillLevel, onValueChange = { targetAllSkillLevel = it }, valueRange = lowestMinSkill..10, enabled = shouldUpdateAll, + textStyle = MaterialTheme.typography.bodyMedium, + valueRepresentation = { "Lv. $it" } ) } } - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.Center - ) { - SkillUpgradeItem( - name = stringResource(id = R.string.skill_1), - shouldUpgrade = shouldUpgrade1, - onShouldUpgradeChange = { - shouldUpgrade1 = it - }, - minimumUpgrade = minSkill1, - upgradeLevel = upgradeSkill1, - onUpgradeLevelChange = { upgradeSkill1 = it - minSkill1 }, - modifier = Modifier - .weight(1f) - .padding(horizontal = 4.dp), - ) + item { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center + ) { + SkillUpgradeItem( + name = stringResource(id = R.string.skill_1), + shouldUpgrade = shouldUpgrade1, + onShouldUpgradeChange = { + shouldUpgrade1 = it + }, + minimumUpgrade = minSkill1, + upgradeLevel = upgradeSkill1, + onUpgradeLevelChange = { upgradeSkill1 = it - minSkill1 }, + modifier = Modifier + .weight(1f) + .padding(horizontal = 2.dp), + ) - SkillUpgradeItem( - name = stringResource(id = R.string.skill_2), - shouldUpgrade = shouldUpgrade2, - onShouldUpgradeChange = { - shouldUpgrade2 = it - }, - minimumUpgrade = minSkill2, - upgradeLevel = upgradeSkill2, - onUpgradeLevelChange = { upgradeSkill2 = it - minSkill2 }, - modifier = Modifier - .weight(1f) - .padding(horizontal = 4.dp), - available = skill2Available - ) + SkillUpgradeItem( + name = stringResource(id = R.string.skill_2), + shouldUpgrade = shouldUpgrade2, + onShouldUpgradeChange = { + shouldUpgrade2 = it + }, + minimumUpgrade = minSkill2, + upgradeLevel = upgradeSkill2, + onUpgradeLevelChange = { upgradeSkill2 = it - minSkill2 }, + modifier = Modifier + .weight(1f) + .padding(horizontal = 2.dp), + available = skill2Available + ) - SkillUpgradeItem( - name = stringResource(id = R.string.skill_3), - shouldUpgrade = shouldUpgrade3, - onShouldUpgradeChange = { - shouldUpgrade3 = it - }, - minimumUpgrade = minSkill3, - upgradeLevel = upgradeSkill3, - onUpgradeLevelChange = { upgradeSkill3 = it - minSkill3 }, - modifier = Modifier - .weight(1f) - .padding(horizontal = 4.dp), - available = skill3Available - ) + SkillUpgradeItem( + name = stringResource(id = R.string.skill_3), + shouldUpgrade = shouldUpgrade3, + onShouldUpgradeChange = { + shouldUpgrade3 = it + }, + minimumUpgrade = minSkill3, + upgradeLevel = upgradeSkill3, + onUpgradeLevelChange = { upgradeSkill3 = it - minSkill3 }, + modifier = Modifier + .weight(1f) + .padding(horizontal = 2.dp), + available = skill3Available + ) + } } } @@ -232,7 +254,7 @@ fun SkillUpgradeItem( onUpgradeLevelChange: (Int) -> Unit, available: Boolean = true ) { - LazyColumn( + Column( modifier = modifier .fillMaxHeight() .clickable( @@ -246,65 +268,56 @@ fun SkillUpgradeItem( ) { if (available) { if (minimumUpgrade < 10) { - item { - Checkbox( - checked = shouldUpgrade, - onCheckedChange = { - onShouldUpgradeChange(!shouldUpgrade) - }, - ) - } - } - item { - Text( - text = when (minimumUpgrade < 10) { - true -> name.uppercase() - false -> name.uppercase() + "\n" + stringResource(id = R.string.skill_max).uppercase() + Checkbox( + checked = shouldUpgrade, + onCheckedChange = { + onShouldUpgradeChange(!shouldUpgrade) }, - textAlign = TextAlign.Center, - style = MaterialTheme.typography.bodyMedium, - color = when (shouldUpgrade) { - true -> MaterialTheme.colorScheme.onBackground - false -> MaterialTheme.colorScheme.onBackground.copy(alpha = 0.3f) - } ) } + Text( + text = when (minimumUpgrade < 10) { + true -> name.uppercase() + false -> name.uppercase() + "\n" + stringResource(id = R.string.skill_max).uppercase() + }, + textAlign = TextAlign.Center, + style = MaterialTheme.typography.bodyMedium, + color = when (shouldUpgrade) { + true -> MaterialTheme.colorScheme.onBackground + false -> MaterialTheme.colorScheme.onBackground.copy(alpha = 0.3f) + }, + textDecoration = TextDecoration.Underline + ) if (minimumUpgrade < 10) { - item { - Stepper( - value = (upgradeLevel + minimumUpgrade), - onValueChange = { onUpgradeLevelChange(it) }, - valueRange = minimumUpgrade..10, - enabled = shouldUpgrade - ) - } - item { - TextButton( - onClick = { onUpgradeLevelChange(minimumUpgrade) }, - enabled = shouldUpgrade && (upgradeLevel + minimumUpgrade) != minimumUpgrade, - ) { - Text(text = stringResource(id = R.string.reset).uppercase()) - } + Stepper( + value = (upgradeLevel + minimumUpgrade), + onValueChange = { onUpgradeLevelChange(it) }, + valueRange = minimumUpgrade..10, + enabled = shouldUpgrade, + textStyle = MaterialTheme.typography.bodySmall, + valueRepresentation = { "Lv. $it" } + ) + TextButton( + onClick = { onUpgradeLevelChange(minimumUpgrade) }, + enabled = shouldUpgrade && (upgradeLevel + minimumUpgrade) != minimumUpgrade, + ) { + Text(text = stringResource(id = R.string.reset).uppercase()) } } - } else { - item { - Text( - text = name.uppercase(), - textAlign = TextAlign.Center, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.3f) - ) - } - item { - Text( - text = stringResource(id = R.string.skill_not_available).uppercase(), - textAlign = TextAlign.Center, - style = MaterialTheme.typography.bodyMedium, - color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.3f) - ) - } + Text( + text = name.uppercase(), + textAlign = TextAlign.Center, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.3f), + textDecoration = TextDecoration.Underline + ) + Text( + text = stringResource(id = R.string.skill_not_available).uppercase(), + textAlign = TextAlign.Center, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.3f) + ) } } } \ No newline at end of file diff --git a/app/src/main/res/values/localized.xml b/app/src/main/res/values/localized.xml index 2798c5afb..8a7c8820e 100644 --- a/app/src/main/res/values/localized.xml +++ b/app/src/main/res/values/localized.xml @@ -476,7 +476,7 @@ After pressing on the button, switch the app filter from \"Not optimized\" to \" Redirected to Ascension. Redirected to Palingenesis. - Should upgrade all available skill? + Upgrade all available skill? Play Button Detection Place the play button on the bottom left of the screen for optimal configuration