Do some styling.
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2023-01-20 08:58:51 +01:00
parent 8b4ce20c99
commit 57bb4deebe
6 changed files with 170 additions and 61 deletions

View File

@@ -3,24 +3,26 @@ package me.zobrist.tichucounter.ui.counter
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.material3.Surface
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalConfiguration
@Composable @Composable
fun Counter(viewModel: CounterViewModel) { fun Counter(viewModel: CounterViewModel) {
var orientation by remember { mutableStateOf(Configuration.ORIENTATION_PORTRAIT) } var orientation by remember { mutableStateOf(Configuration.ORIENTATION_PORTRAIT) }
orientation = LocalConfiguration.current.orientation orientation = LocalConfiguration.current.orientation
Surface {
if (orientation == Configuration.ORIENTATION_LANDSCAPE) { if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
Landscape(viewModel) Landscape(viewModel)
} else { } else {
Portrait(viewModel) Portrait(viewModel)
} }
} }
}
@Composable @Composable
fun Landscape(viewModel: CounterViewModel) { fun Landscape(viewModel: CounterViewModel) {
@@ -55,9 +57,8 @@ fun Landscape(viewModel: CounterViewModel) {
{ viewModel.digitClicked(it) }, { viewModel.digitClicked(it) },
{ viewModel.addSub100Clicked(it) }, { viewModel.addSub100Clicked(it) },
{ viewModel.deleteClicked() }, { viewModel.deleteClicked() },
{ viewModel.negateClicked() }, { viewModel.negateClicked() }
{ viewModel.submitClicked() } ) { viewModel.submitClicked() }
)
} }
} }
@@ -94,8 +95,7 @@ fun Portrait(viewModel: CounterViewModel) {
{ viewModel.digitClicked(it) }, { viewModel.digitClicked(it) },
{ viewModel.addSub100Clicked(it) }, { viewModel.addSub100Clicked(it) },
{ viewModel.deleteClicked() }, { viewModel.deleteClicked() },
{ viewModel.negateClicked() }, { viewModel.negateClicked() }
{ viewModel.submitClicked() } ) { viewModel.submitClicked() }
)
} }
} }

View File

@@ -1,8 +1,10 @@
package me.zobrist.tichucounter.ui.counter package me.zobrist.tichucounter.ui.counter
import android.content.res.Configuration
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Backspace import androidx.compose.material.icons.outlined.Backspace
import androidx.compose.material.icons.outlined.Check import androidx.compose.material.icons.outlined.Check
@@ -14,8 +16,12 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.platform.SoftwareKeyboardController
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import me.zobrist.tichucounter.R import me.zobrist.tichucounter.R
import me.zobrist.tichucounter.ui.AppTheme
@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class) @OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class)
@@ -37,33 +43,27 @@ fun KeyboardView(
Column { Column {
Row { Row {
TextField( Column(Modifier.weight(1f)) {
value = scoreA,
onValueChange = { }, CenteredTextField(
placeholder = { Text("0") }, scoreA,
singleLine = true, keyboardController,
readOnly = true, requestFocusA
modifier = Modifier ) {
.onFocusChanged { updateFocusStateA(it)
keyboardController?.hide() }
updateFocusStateA(it.isFocused)
}
Column(Modifier.weight(1f)) {
CenteredTextField(
scoreB,
keyboardController,
null
) {
updateFocusStateB(it)
} }
.focusRequester(requestFocusA)
.weight(1f),
)
TextField(
value = scoreB,
onValueChange = { },
placeholder = { Text("0") },
singleLine = true,
readOnly = true,
modifier = Modifier
.onFocusChanged {
keyboardController?.hide()
updateFocusStateB(it.isFocused)
} }
.weight(1f)
)
} }
Row { Row {
@@ -119,7 +119,13 @@ fun KeyboardView(
IconButton( IconButton(
onClick = { deleteClicked() }, onClick = { deleteClicked() },
modifier = Modifier.weight(1F) modifier = Modifier.weight(1F)
) { Icon(Icons.Outlined.Backspace, stringResource(R.string.submit)) } ) {
Icon(
Icons.Outlined.Backspace,
stringResource(R.string.back),
tint = MaterialTheme.colorScheme.primary
)
}
} }
Row { Row {
TextButton( TextButton(
@@ -135,7 +141,75 @@ fun KeyboardView(
onClick = { submitClicked() }, onClick = { submitClicked() },
modifier = Modifier.weight(1F), modifier = Modifier.weight(1F),
enabled = enableSubmit enabled = enableSubmit
) { Icon(Icons.Outlined.Check, stringResource(R.string.submit)) } ) {
Icon(
Icons.Outlined.Check,
stringResource(R.string.submit),
tint = MaterialTheme.colorScheme.primary
)
} }
} }
} }
}
@OptIn(ExperimentalComposeUiApi::class, ExperimentalMaterial3Api::class)
@Composable
fun CenteredTextField(
value: String,
keyboardController: SoftwareKeyboardController?,
focusRequester: FocusRequester?,
updateFocusState: (Boolean) -> Unit
) {
var modifier = Modifier
.onFocusChanged {
keyboardController?.hide()
updateFocusState(it.isFocused)
}
.fillMaxWidth()
if (focusRequester != null) {
modifier.focusRequester(focusRequester)
}
TextField(
value = value,
onValueChange = { },
placeholder = {
Text(
"0",
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth()
)
},
textStyle = LocalTextStyle.current.copy(textAlign = TextAlign.Center),
singleLine = true,
readOnly = true,
modifier = modifier
)
}
@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class)
@Preview(name = "Light Mode")
@Preview(name = "Dark Mode", uiMode = Configuration.UI_MODE_NIGHT_YES, showBackground = true)
@Composable
fun KeyboardViewPreview() {
AppTheme {
Surface {
KeyboardView(
"",
"350",
FocusRequester(),
false,
{},
{},
{},
{},
{},
{},
{})
}
}
}

View File

@@ -1,5 +1,6 @@
package me.zobrist.tichucounter.ui.counter package me.zobrist.tichucounter.ui.counter
import android.content.res.Configuration
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@@ -8,6 +9,7 @@ import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
@@ -17,6 +19,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import me.zobrist.tichucounter.data.Round import me.zobrist.tichucounter.data.Round
import me.zobrist.tichucounter.ui.AppTheme
@Composable @Composable
fun RoundListView(rounds: List<Round>, modifier: Modifier) { fun RoundListView(rounds: List<Round>, modifier: Modifier) {
@@ -62,15 +65,21 @@ private fun RoundListItem(round: Round, index: Int, lazyListState: LazyListState
} }
} }
@Preview(name = "Light Mode")
@Preview(name = "Dark Mode", uiMode = Configuration.UI_MODE_NIGHT_YES, showBackground = true)
@Composable @Composable
@Preview
fun RoundListViewPreview() { fun RoundListViewPreview() {
val rounds = listOf<Round>( val rounds = listOf(
Round(1, 10, 90), Round(1, 10, 90),
Round(1, 5, 95), Round(1, 5, 95),
Round(1, 100, 0), Round(1, 100, 0),
Round(1, 125, -25), Round(1, 125, -25),
Round(1, 50, 50) Round(1, 50, 50)
) )
AppTheme {
Surface {
RoundListView(rounds, Modifier) RoundListView(rounds, Modifier)
} }
}
}

View File

@@ -1,11 +1,14 @@
package me.zobrist.tichucounter.ui.counter package me.zobrist.tichucounter.ui.counter
import android.content.res.Configuration
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import me.zobrist.tichucounter.ui.AppTheme
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@@ -18,6 +21,7 @@ fun TeamNamesView(
Row() { Row() {
TextField( TextField(
value = nameA, value = nameA,
textStyle = LocalTextStyle.current.copy(textAlign = TextAlign.Center),
onValueChange = { updateA(it) }, onValueChange = { updateA(it) },
singleLine = true, singleLine = true,
modifier = Modifier.weight(1f) modifier = Modifier.weight(1f)
@@ -25,6 +29,7 @@ fun TeamNamesView(
TextField( TextField(
value = nameB, value = nameB,
textStyle = LocalTextStyle.current.copy(textAlign = TextAlign.Center),
onValueChange = { updateB(it) }, onValueChange = { updateB(it) },
singleLine = true, singleLine = true,
modifier = Modifier.weight(1f) modifier = Modifier.weight(1f)
@@ -32,8 +37,11 @@ fun TeamNamesView(
} }
} }
@Preview @Preview(name = "Light Mode")
@Preview(name = "Dark Mode", uiMode = Configuration.UI_MODE_NIGHT_YES, showBackground = true)
@Composable @Composable
private fun TeamNamesViewPreview() { private fun TeamNamesViewPreview() {
AppTheme {
TeamNamesView("TeamA", "TeamB", {}, {}) TeamNamesView("TeamA", "TeamB", {}, {})
} }
}

View File

@@ -1,32 +1,51 @@
package me.zobrist.tichucounter.ui.counter package me.zobrist.tichucounter.ui.counter
import android.content.res.Configuration
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.material3.ElevatedCard
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import me.zobrist.tichucounter.ui.AppTheme
@Composable @Composable
fun TeamScoresView(scoreA: Int, scoreB: Int) { fun TeamScoresView(scoreA: Int, scoreB: Int) {
ElevatedCard() {
Row() { Row() {
Text( Text(
style = MaterialTheme.typography.bodyLarge,
text = scoreA.toString(), text = scoreA.toString(),
modifier = Modifier.weight(1f), modifier = Modifier.weight(5f),
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
Spacer(modifier = Modifier.weight(1f))
Text( Text(
style = MaterialTheme.typography.bodyLarge,
text = scoreB.toString(), text = scoreB.toString(),
modifier = Modifier.weight(1f), modifier = Modifier.weight(5f),
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
} }
} }
}
@Preview @Preview(name = "Light Mode")
@Preview(name = "Dark Mode", uiMode = Configuration.UI_MODE_NIGHT_YES, showBackground = true)
@Composable @Composable
private fun TeamNamesView() { private fun TeamScoresViewPreview() {
AppTheme {
Surface {
TeamScoresView(10, 90) TeamScoresView(10, 90)
} }
}
}

View File

@@ -1,7 +1,6 @@
<resources> <resources>
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"></style>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.MaterialComponents.Dark.ActionBar" /> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.MaterialComponents.Dark.ActionBar" />