From c86cf3a9d6f162ad50eb299d300004332eb1c9f9 Mon Sep 17 00:00:00 2001 From: amjiao Date: Mon, 14 Apr 2025 16:05:30 -0400 Subject: [PATCH 1/4] Fix ScoreBox UI --- .../score/components/ScoreBox.kt | 87 ++++++++++--------- 1 file changed, 48 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt b/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt index 3cab34a..b283136 100644 --- a/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt +++ b/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt @@ -1,5 +1,6 @@ package com.cornellappdev.score.components +import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -8,6 +9,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Divider +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -20,6 +22,7 @@ import androidx.compose.ui.unit.dp import com.cornellappdev.score.model.GameData import com.cornellappdev.score.model.TeamScore import com.cornellappdev.score.theme.CrimsonPrimary +import com.cornellappdev.score.theme.GrayMedium import com.cornellappdev.score.theme.GrayPrimary import com.cornellappdev.score.theme.Style.bodyNormal import com.cornellappdev.score.theme.Style.metricNormal @@ -35,54 +38,54 @@ fun BoxScore(gameData: GameData) { gameData.teamScores.second.scoresByPeriod.size, 4 ) - - Column( + Surface( modifier = Modifier - .fillMaxWidth() - .background(Color.White, shape = RoundedCornerShape(8.dp)) + .fillMaxWidth(), + shape = RoundedCornerShape(8.dp), + border = BorderStroke(width = 1.dp, color = CrimsonPrimary) ) { - Row( - modifier = Modifier - .fillMaxWidth() - .background(CrimsonPrimary) - .padding(vertical = 8.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = "", - modifier = Modifier.weight(1f), - color = Color.White, - textAlign = TextAlign.Center - ) - repeat(maxPeriods) { period -> + Column { + Row( + modifier = Modifier + .fillMaxWidth() + .background(color = CrimsonPrimary) + .padding(top = 6.dp, bottom = 4.dp), + verticalAlignment = Alignment.CenterVertically + ) { Text( - text = "${period + 1}", + text = "", modifier = Modifier.weight(1f), color = Color.White, + textAlign = TextAlign.Center + ) + repeat(maxPeriods) { period -> + Text( + text = "${period + 1}", + modifier = Modifier.weight(1f), + color = Color.White, + style = bodyNormal, + textAlign = TextAlign.Center + ) + } + Text( + text = "Total", + modifier = Modifier.weight(1f), style = bodyNormal, + color = Color.White, textAlign = TextAlign.Center ) } - Text( - text = "Total", - modifier = Modifier.weight(1f), - style = bodyNormal, - color = Color.White, - textAlign = TextAlign.Center + TeamScoreRow( + teamScore = gameData.teamScores.first, + totalTextColor = saturatedGreen, ) - } - - TeamScoreRow( - teamScore = gameData.teamScores.first, - totalTextColor = saturatedGreen, - ) - - Divider(color = CrimsonPrimary, thickness = 1.dp) + Divider(color = CrimsonPrimary, thickness = 1.dp) - TeamScoreRow( - teamScore = gameData.teamScores.second, - totalTextColor = Color.Black, - ) + TeamScoreRow( + teamScore = gameData.teamScores.second, + totalTextColor = GrayMedium + ) + } } } @@ -138,12 +141,18 @@ fun TeamScoreRow(teamScore: TeamScore, totalTextColor: Color) { @Preview @Composable -private fun PreviewBoxScore() = ScorePreview { +private fun PreviewBoxScore() { BoxScore(gameData = gameData) } @Preview @Composable -private fun PreviewBoxScoreEmpty() = ScorePreview { +private fun PreviewBoxScoreEmpty() { BoxScore(gameData = emptyGameData()) } + +@Preview +@Composable +private fun PreviewTeamScoreRow() = ScorePreview { + TeamScoreRow(gameData.teamScores.first, GrayMedium) +} \ No newline at end of file From e24a9e3fdaf060d7c20b35bf8a4befadd044ae25 Mon Sep 17 00:00:00 2001 From: zachseidner1 Date: Mon, 14 Apr 2025 16:50:51 -0400 Subject: [PATCH 2/4] add new preview --- .../com/cornellappdev/score/components/ScoreBox.kt | 11 ++++++++++- .../cornellappdev/score/util/TestingConstants.kt | 13 +++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt b/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt index b283136..632d81b 100644 --- a/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt +++ b/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt @@ -30,6 +30,7 @@ import com.cornellappdev.score.theme.Style.metricSemibold import com.cornellappdev.score.theme.saturatedGreen import com.cornellappdev.score.util.emptyGameData import com.cornellappdev.score.util.gameData +import com.cornellappdev.score.util.longGameData @Composable fun BoxScore(gameData: GameData) { @@ -139,6 +140,7 @@ fun TeamScoreRow(teamScore: TeamScore, totalTextColor: Color) { } } + @Preview @Composable private fun PreviewBoxScore() { @@ -147,10 +149,17 @@ private fun PreviewBoxScore() { @Preview @Composable -private fun PreviewBoxScoreEmpty() { +private fun PreviewBoxScoreForLongGame() { + BoxScore(longGameData) +} + +@Preview +@Composable +private fun PreviewBoxScoreEmpty() = ScorePreview { BoxScore(gameData = emptyGameData()) } + @Preview @Composable private fun PreviewTeamScoreRow() = ScorePreview { diff --git a/app/src/main/java/com/cornellappdev/score/util/TestingConstants.kt b/app/src/main/java/com/cornellappdev/score/util/TestingConstants.kt index 10fcbf7..1ee4459 100644 --- a/app/src/main/java/com/cornellappdev/score/util/TestingConstants.kt +++ b/app/src/main/java/com/cornellappdev/score/util/TestingConstants.kt @@ -65,6 +65,19 @@ val teamScore2 = TeamScore( totalScore = 23 ) +val longGameTeamScore1 = TeamScore( + team = team1, + scoresByPeriod = listOf(13, 14, 6, 14, 13, 2, 4, 6, 2, 2), + totalScore = 47 +) +val longGameTeamScore2 = TeamScore( + team = team1, + scoresByPeriod = listOf(7, 7, 9, 0, 7, 7, 9, 0, 7, 2), + totalScore = 47 +) + +val longGameData = GameData(teamScores = longGameTeamScore1 to longGameTeamScore2) + val gameData = GameData(teamScores = Pair(teamScore1, teamScore2)) val scoreEvents1 = listOf( From bf83f3beece0ed964420c100454a4a12e7c459fd Mon Sep 17 00:00:00 2001 From: zachseidner1 Date: Mon, 14 Apr 2025 16:54:39 -0400 Subject: [PATCH 3/4] more score preview --- .../main/java/com/cornellappdev/score/components/ScoreBox.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt b/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt index 632d81b..207901d 100644 --- a/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt +++ b/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt @@ -143,13 +143,13 @@ fun TeamScoreRow(teamScore: TeamScore, totalTextColor: Color) { @Preview @Composable -private fun PreviewBoxScore() { +private fun PreviewBoxScore() = ScorePreview { BoxScore(gameData = gameData) } @Preview @Composable -private fun PreviewBoxScoreForLongGame() { +private fun PreviewBoxScoreForLongGame() = ScorePreview { BoxScore(longGameData) } From 6e274323e9265f7f4d8fef155f4426b2f13304d6 Mon Sep 17 00:00:00 2001 From: amjiao Date: Mon, 21 Apr 2025 20:48:42 -0400 Subject: [PATCH 4/4] Font size change based on score length --- .../score/components/ScoreBox.kt | 109 ++++++++++-------- .../score/screen/GameDetailsScreen.kt | 10 +- .../score/util/TestingConstants.kt | 16 ++- 3 files changed, 79 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt b/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt index 4d8054d..cfd502d 100644 --- a/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt +++ b/app/src/main/java/com/cornellappdev/score/components/ScoreBox.kt @@ -2,19 +2,21 @@ package com.cornellappdev.score.components import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background +import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Divider -import androidx.compose.material3.Surface +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -26,12 +28,12 @@ import com.cornellappdev.score.theme.CrimsonPrimary import com.cornellappdev.score.theme.GrayMedium import com.cornellappdev.score.theme.GrayPrimary import com.cornellappdev.score.theme.Style.bodyNormal -import com.cornellappdev.score.theme.Style.metricNormal -import com.cornellappdev.score.theme.Style.metricSemibold +import com.cornellappdev.score.theme.Style.labelsNormal import com.cornellappdev.score.theme.saturatedGreen import com.cornellappdev.score.util.emptyGameData import com.cornellappdev.score.util.gameData import com.cornellappdev.score.util.longGameData +import com.cornellappdev.score.util.mediumGameData @Composable fun BoxScore(gameData: GameData) { @@ -40,71 +42,74 @@ fun BoxScore(gameData: GameData) { gameData.teamScores.second.scoresByPeriod.size, 4 ) - Surface( + val rowTextStyle = if (maxPeriods > 4) labelsNormal else bodyNormal + Column( modifier = Modifier - .fillMaxWidth(), - shape = RoundedCornerShape(8.dp), - border = BorderStroke(width = 1.dp, color = CrimsonPrimary) + .fillMaxWidth() + .clip(shape = RoundedCornerShape(8.dp)) + .background(color = Color.White, shape = RoundedCornerShape(8.dp)) + .border(BorderStroke(width = 1.dp, color = CrimsonPrimary)) ) { - Column { - Row( - modifier = Modifier - .fillMaxWidth() - .background(color = CrimsonPrimary) - .padding(top = 6.dp, bottom = 4.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = "", - modifier = Modifier.weight(1f), - color = Color.White, - textAlign = TextAlign.Center - ) - repeat(maxPeriods) { period -> - Text( - text = "${period + 1}", - modifier = Modifier.weight(1f), - color = Color.White, - style = bodyNormal, - textAlign = TextAlign.Center - ) - } + Row( + modifier = Modifier + .fillMaxWidth() + .background(color = CrimsonPrimary) + .padding(top = 6.dp, bottom = 4.dp, end = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = "", + modifier = Modifier.weight(1f), + color = Color.White, + textAlign = TextAlign.Center + ) + repeat(maxPeriods) { period -> Text( - text = "Total", + text = "${period + 1}", modifier = Modifier.weight(1f), - style = bodyNormal, color = Color.White, + style = rowTextStyle, textAlign = TextAlign.Center ) } - TeamScoreRow( - teamScore = gameData.teamScores.first, - totalTextColor = saturatedGreen, - ) - Divider(color = CrimsonPrimary, thickness = 1.dp) - - TeamScoreRow( - teamScore = gameData.teamScores.second, - totalTextColor = GrayMedium + Text( + text = "Total", + modifier = Modifier.weight(1f), + style = rowTextStyle, + color = Color.White, + textAlign = TextAlign.Center ) } + TeamScoreRow( + teamScore = gameData.teamScores.first, + totalTextColor = saturatedGreen, + rowTextStyle + ) + HorizontalDivider(thickness = 1.dp, color = CrimsonPrimary) + + TeamScoreRow( + teamScore = gameData.teamScores.second, + totalTextColor = GrayMedium, + rowTextStyle + ) + } } @Composable -fun TeamScoreRow(teamScore: TeamScore, totalTextColor: Color) { +fun TeamScoreRow(teamScore: TeamScore, totalTextColor: Color, rowTextStyle: TextStyle) { val showEmpty = teamScore.scoresByPeriod.isEmpty() Row( modifier = Modifier .fillMaxWidth() - .padding(vertical = 8.dp), + .padding(vertical = 8.dp, horizontal = 10.dp), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { Text( text = teamScore.team.name, - style = bodyNormal, + style = rowTextStyle, color = GrayPrimary, modifier = Modifier.weight(1f), textAlign = TextAlign.Center, @@ -116,7 +121,7 @@ fun TeamScoreRow(teamScore: TeamScore, totalTextColor: Color) { Text( text = if (showEmpty) "-" else score.toString(), modifier = Modifier.weight(1f), - style = metricNormal, + style = rowTextStyle, color = GrayPrimary, textAlign = TextAlign.Center ) @@ -126,7 +131,7 @@ fun TeamScoreRow(teamScore: TeamScore, totalTextColor: Color) { Text( text = "-", modifier = Modifier.weight(1f), - style = metricNormal, + style = rowTextStyle, color = GrayPrimary, textAlign = TextAlign.Center ) @@ -135,7 +140,7 @@ fun TeamScoreRow(teamScore: TeamScore, totalTextColor: Color) { Text( text = if (showEmpty) "-" else teamScore.totalScore.toString(), modifier = Modifier.weight(1f), - style = metricSemibold, + style = rowTextStyle, color = if (showEmpty) Color.Gray else totalTextColor, fontWeight = if (showEmpty) FontWeight.Normal else FontWeight.Bold, textAlign = TextAlign.Center @@ -156,6 +161,12 @@ private fun PreviewBoxScoreForLongGame() = ScorePreview { BoxScore(longGameData) } +@Preview +@Composable +private fun PreviewBoxScoreForMedGame() = ScorePreview { + BoxScore(mediumGameData) +} + @Preview @Composable private fun PreviewBoxScoreEmpty() = ScorePreview { @@ -166,5 +177,5 @@ private fun PreviewBoxScoreEmpty() = ScorePreview { @Preview @Composable private fun PreviewTeamScoreRow() = ScorePreview { - TeamScoreRow(gameData.teamScores.first, GrayMedium) + TeamScoreRow(gameData.teamScores.first, GrayMedium, bodyNormal) } \ No newline at end of file diff --git a/app/src/main/java/com/cornellappdev/score/screen/GameDetailsScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/GameDetailsScreen.kt index 6ef9f0c..1989136 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/GameDetailsScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/GameDetailsScreen.kt @@ -158,11 +158,11 @@ fun GameDetailsContent(gameCard: DetailsCardData) { // render the below if the game is in the future // TODO: MESSY, is it every the case when there is a boxscore but no scoring summary if (gameCard.isPastStartTime) { - if (gameCard.scoreBreakdown?.isNotEmpty() == true) { - Spacer(modifier = Modifier.height(24.dp)) - BoxScore(gameCard.gameData) - Spacer(modifier = Modifier.height(24.dp)) - } + //if (gameCard.scoreBreakdown?.isNotEmpty() == true) { + Spacer(modifier = Modifier.height(24.dp)) + BoxScore(gameCard.gameData) + Spacer(modifier = Modifier.height(24.dp)) + // } if (gameCard.boxScore.isNotEmpty()) { Text( "Scoring Summary", fontSize = 18.sp, diff --git a/app/src/main/java/com/cornellappdev/score/util/TestingConstants.kt b/app/src/main/java/com/cornellappdev/score/util/TestingConstants.kt index 9344c34..382ffc6 100644 --- a/app/src/main/java/com/cornellappdev/score/util/TestingConstants.kt +++ b/app/src/main/java/com/cornellappdev/score/util/TestingConstants.kt @@ -68,6 +68,17 @@ val teamScore2 = TeamScore( totalScore = 23 ) +val mediumGameTeamScore1 = TeamScore( + team = team1, + scoresByPeriod = listOf(13, 14, 6, 14, 13, 2), + totalScore = 62 +) +val mediumGameTeamScore2 = TeamScore( + team = team1, + scoresByPeriod = listOf(7, 7, 9, 0, 7, 7), + totalScore = 37 +) + val longGameTeamScore1 = TeamScore( team = team1, scoresByPeriod = listOf(13, 14, 6, 14, 13, 2, 4, 6, 2, 2), @@ -78,10 +89,11 @@ val longGameTeamScore2 = TeamScore( scoresByPeriod = listOf(7, 7, 9, 0, 7, 7, 9, 0, 7, 2), totalScore = 47 ) +val gameData = GameData(teamScores = Pair(teamScore1, teamScore2)) -val longGameData = GameData(teamScores = longGameTeamScore1 to longGameTeamScore2) +val mediumGameData = GameData(teamScores = mediumGameTeamScore1 to mediumGameTeamScore2) -val gameData = GameData(teamScores = Pair(teamScore1, teamScore2)) +val longGameData = GameData(teamScores = longGameTeamScore1 to longGameTeamScore2) val team3 = TeamGameSummary( name = "Cornell",