From 1af4f2fbb75ba894c5b6651d5493119f300f4fc6 Mon Sep 17 00:00:00 2001 From: amjiao Date: Mon, 14 Apr 2025 18:16:13 -0400 Subject: [PATCH 1/9] Empty state + UI fixes --- .../score/components/EmptyState.kt | 57 +++++++++++++++++++ .../cornellappdev/score/screen/HomeScreen.kt | 51 +++++++++++------ .../score/screen/PastGamesScreen.kt | 27 ++++++--- app/src/main/res/drawable/ic_speaker_gray.xml | 38 +++++++++++++ 4 files changed, 149 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/com/cornellappdev/score/components/EmptyState.kt create mode 100644 app/src/main/res/drawable/ic_speaker_gray.xml diff --git a/app/src/main/java/com/cornellappdev/score/components/EmptyState.kt b/app/src/main/java/com/cornellappdev/score/components/EmptyState.kt new file mode 100644 index 0000000..0c874a5 --- /dev/null +++ b/app/src/main/java/com/cornellappdev/score/components/EmptyState.kt @@ -0,0 +1,57 @@ +package com.cornellappdev.score.components + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.cornellappdev.score.R +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.heading2 + +@Composable +fun EmptyState( + modifier: Modifier = Modifier +) { + Column( + modifier = modifier + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally + ) { + Image( + painter = painterResource(R.drawable.ic_speaker_gray), + contentDescription = "score speaker icon" + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = "No games yet.", + style = heading2.copy(color = GrayPrimary) + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = "Check back here later!", + style = bodyNormal.copy(color = GrayMedium) + ) + } + } +} + +@Preview +@Composable +private fun EmptyStatePreview() = ScorePreview { + EmptyState() +} \ No newline at end of file diff --git a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt index 599e798..cff379c 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt @@ -3,6 +3,7 @@ package com.cornellappdev.score.screen import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -20,6 +21,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import com.cornellappdev.score.components.EmptyState import com.cornellappdev.score.components.ErrorState import com.cornellappdev.score.components.GameCard import com.cornellappdev.score.components.GamesCarousel @@ -78,9 +80,14 @@ private fun HomeContent( onSportSelected: (SportSelection) -> Unit, navigateToGameDetails: (Boolean) -> Unit = {} ) { - LazyColumn(contentPadding = PaddingValues(top = 24.dp, start = 24.dp, end = 24.dp)) { - item { - GamesCarousel(uiState.upcomingGames, GamesCarouselVariant.UPCOMING) + LazyColumn( + //modifier = Modifier.fillMaxSize(), + contentPadding = PaddingValues(top = 24.dp, start = 24.dp, end = 24.dp) + ) { + if (!uiState.filteredGames.isEmpty()) { + item { + GamesCarousel(uiState.upcomingGames, GamesCarouselVariant.UPCOMING) + } } stickyHeader { Column(modifier = Modifier.background(White)) { @@ -104,20 +111,30 @@ private fun HomeContent( item { Spacer(modifier = Modifier.height(24.dp)) } - items(uiState.filteredGames) { - val game = it - GameCard( - teamLogo = game.teamLogo, - team = game.team, - date = game.dateString, - isLive = game.isLive, - genderIcon = painterResource(game.genderIcon), - sportIcon = painterResource(game.sportIcon), - location = game.location, - topCornerRound = true, - onClick = navigateToGameDetails - ) - Spacer(modifier = Modifier.height(16.dp)) + if (!uiState.filteredGames.isEmpty()) { + items(uiState.filteredGames) { + val game = it + GameCard( + teamLogo = game.teamLogo, + team = game.team, + date = game.dateString, + isLive = game.isLive, + genderIcon = painterResource(game.genderIcon), + sportIcon = painterResource(game.sportIcon), + location = game.location, + topCornerRound = true, + onClick = navigateToGameDetails + ) + Spacer(modifier = Modifier.height(16.dp)) + } + } + } + if (uiState.filteredGames.isEmpty()) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + EmptyState() } } } diff --git a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt index 8d36258..286e7de 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt @@ -3,9 +3,11 @@ package com.cornellappdev.score.screen import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.lazy.LazyColumn @@ -18,6 +20,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import com.cornellappdev.score.components.EmptyState import com.cornellappdev.score.components.ErrorState import com.cornellappdev.score.components.GamesCarousel import com.cornellappdev.score.components.LoadingScreen @@ -102,13 +105,23 @@ private fun PastGamesContent( item { Spacer(modifier = Modifier.height(24.dp)) } - items(uiState.filteredGames) { - val game = it - PastGameCard( - data = game, - onClick = navigateToGameDetails - ) - Spacer(modifier = Modifier.height(16.dp)) + if (!uiState.filteredGames.isEmpty()) { + items(uiState.filteredGames) { + val game = it + PastGameCard( + data = game, + onClick = navigateToGameDetails + ) + Spacer(modifier = Modifier.height(16.dp)) + } + } + } + if (uiState.filteredGames.isEmpty()) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + EmptyState() } } } diff --git a/app/src/main/res/drawable/ic_speaker_gray.xml b/app/src/main/res/drawable/ic_speaker_gray.xml new file mode 100644 index 0000000..e04a616 --- /dev/null +++ b/app/src/main/res/drawable/ic_speaker_gray.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + From ab841ef265714085f6fbae1a3b63b8df897419d0 Mon Sep 17 00:00:00 2001 From: Zachary Seidner <58796478+zachseidner1@users.noreply.github.com> Date: Mon, 14 Apr 2025 17:45:25 -0400 Subject: [PATCH 2/9] Address UI issues (#51) * Add missing border * Bump material version in preparation for pull to refresh * Fix border on home and past, fix carousel # Conflicts: # app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt # app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt --- app/build.gradle.kts | 2 +- .../score/components/GamesCarousel.kt | 20 ++---- .../cornellappdev/score/screen/HomeScreen.kt | 65 ++++++++++++------- .../score/screen/PastGamesScreen.kt | 32 +++++++-- gradle/libs.versions.toml | 4 +- 5 files changed, 78 insertions(+), 45 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5642ff1..0dfecfb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -69,7 +69,7 @@ dependencies { implementation("androidx.activity:activity-compose") implementation("androidx.lifecycle:lifecycle-viewmodel-compose") implementation("androidx.navigation:navigation-compose:2.8.2") - implementation("androidx.compose.material3:material3:1.0.0") + implementation(libs.material3) implementation("com.google.dagger:hilt-android:2.51.1") kapt("com.google.dagger:hilt-android-compiler:2.51.1") implementation("androidx.hilt:hilt-navigation-compose:1.0.0") diff --git a/app/src/main/java/com/cornellappdev/score/components/GamesCarousel.kt b/app/src/main/java/com/cornellappdev/score/components/GamesCarousel.kt index 9490152..84f957d 100644 --- a/app/src/main/java/com/cornellappdev/score/components/GamesCarousel.kt +++ b/app/src/main/java/com/cornellappdev/score/components/GamesCarousel.kt @@ -4,13 +4,13 @@ import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState -import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -21,13 +21,9 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.cornellappdev.score.R import com.cornellappdev.score.model.GameCardData -import com.cornellappdev.score.model.GamesCarouselVariant import com.cornellappdev.score.theme.CornellRed import com.cornellappdev.score.theme.CrimsonPrimary import com.cornellappdev.score.theme.GrayLight -import com.cornellappdev.score.theme.GrayPrimary -import com.cornellappdev.score.theme.Style.heading1 -import com.cornellappdev.score.theme.White import com.cornellappdev.score.util.gameList @Composable @@ -59,7 +55,6 @@ fun DotIndicator( @Composable fun GamesCarousel( games: List, - variant: GamesCarouselVariant, modifier: Modifier = Modifier ) { val pagerState = rememberPagerState(pageCount = { games.size }) @@ -68,16 +63,11 @@ fun GamesCarousel( .fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(16.dp, Alignment.Top), ) { - Text( - text = if (variant == GamesCarouselVariant.UPCOMING) "Upcoming" else "Latest", - style = heading1, - color = GrayPrimary, - modifier = Modifier.fillMaxWidth() - ) - HorizontalPager( state = pagerState, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), + contentPadding = PaddingValues(horizontal = 24.dp), + pageSpacing = 24.dp ) { page -> val game = games[page] FeaturedGameCard( @@ -110,5 +100,5 @@ fun GamesCarousel( @Composable @Preview private fun GamesCarouselPreview() = ScorePreview { - GamesCarousel(gameList, GamesCarouselVariant.UPCOMING) + GamesCarousel(gameList) } \ No newline at end of file diff --git a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt index cff379c..e3b91b5 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt @@ -10,8 +10,10 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -29,9 +31,11 @@ import com.cornellappdev.score.components.LoadingScreen import com.cornellappdev.score.components.ScorePreview import com.cornellappdev.score.components.SportSelectorHeader import com.cornellappdev.score.model.ApiResponse -import com.cornellappdev.score.model.GamesCarouselVariant import com.cornellappdev.score.model.GenderDivision import com.cornellappdev.score.model.SportSelection +import com.cornellappdev.score.theme.GrayPrimary +import com.cornellappdev.score.theme.GrayStroke +import com.cornellappdev.score.theme.Style.heading1 import com.cornellappdev.score.theme.Style.title import com.cornellappdev.score.theme.White import com.cornellappdev.score.util.gameList @@ -80,17 +84,27 @@ private fun HomeContent( onSportSelected: (SportSelection) -> Unit, navigateToGameDetails: (Boolean) -> Unit = {} ) { - LazyColumn( - //modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues(top = 24.dp, start = 24.dp, end = 24.dp) - ) { - if (!uiState.filteredGames.isEmpty()) { - item { - GamesCarousel(uiState.upcomingGames, GamesCarouselVariant.UPCOMING) - } + LazyColumn(contentPadding = PaddingValues(top = 24.dp)) { + item { + Text( + text = "Latest", + style = heading1, + color = GrayPrimary, + modifier = Modifier + .fillMaxWidth() + .padding(start = 24.dp) + ) + } + item { + Spacer(Modifier.height(16.dp)) + } + item { + GamesCarousel(uiState.upcomingGames) } stickyHeader { - Column(modifier = Modifier.background(White)) { + Column(modifier = Modifier + .background(White) + .padding(horizontal = 24.dp)) { Spacer(Modifier.height(24.dp)) Text( text = "Game Schedule", @@ -109,23 +123,28 @@ private fun HomeContent( } } item { - Spacer(modifier = Modifier.height(24.dp)) + HorizontalDivider( + modifier = Modifier.padding(top = 16.dp, bottom = 24.dp), + color = GrayStroke, + ) } if (!uiState.filteredGames.isEmpty()) { items(uiState.filteredGames) { val game = it - GameCard( - teamLogo = game.teamLogo, - team = game.team, - date = game.dateString, - isLive = game.isLive, - genderIcon = painterResource(game.genderIcon), - sportIcon = painterResource(game.sportIcon), - location = game.location, - topCornerRound = true, - onClick = navigateToGameDetails - ) - Spacer(modifier = Modifier.height(16.dp)) + Column(modifier = Modifier.padding(horizontal = 24.dp)) { + GameCard( + teamLogo = game.teamLogo, + team = game.team, + date = game.dateString, + isLive = game.isLive, + genderIcon = painterResource(game.genderIcon), + sportIcon = painterResource(game.sportIcon), + location = game.location, + topCornerRound = true, + onClick = navigateToGameDetails + ) + Spacer(modifier = Modifier.height(16.dp)) + } } } } diff --git a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt index 286e7de..dd77c20 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt @@ -10,8 +10,10 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -28,9 +30,11 @@ import com.cornellappdev.score.components.PastGameCard import com.cornellappdev.score.components.ScorePreview import com.cornellappdev.score.components.SportSelectorHeader import com.cornellappdev.score.model.ApiResponse -import com.cornellappdev.score.model.GamesCarouselVariant import com.cornellappdev.score.model.GenderDivision import com.cornellappdev.score.model.SportSelection +import com.cornellappdev.score.theme.GrayPrimary +import com.cornellappdev.score.theme.GrayStroke +import com.cornellappdev.score.theme.Style.heading1 import com.cornellappdev.score.theme.Style.title import com.cornellappdev.score.theme.White import com.cornellappdev.score.util.gameList @@ -79,12 +83,27 @@ private fun PastGamesContent( onSportSelected: (SportSelection) -> Unit, navigateToGameDetails: (Boolean) -> Unit = {} ) { - LazyColumn(contentPadding = PaddingValues(top = 24.dp, start = 24.dp, end = 24.dp)) { + LazyColumn(contentPadding = PaddingValues(top = 24.dp)) { item { - GamesCarousel(uiState.pastGames, GamesCarouselVariant.PAST) + Text( + text = "Upcoming", + style = heading1, + color = GrayPrimary, + modifier = Modifier + .fillMaxWidth() + .padding(start = 24.dp) + ) + } + item { + Spacer(Modifier.height(16.dp)) + } + item { + GamesCarousel(uiState.pastGames) } stickyHeader { - Column(modifier = Modifier.background(White)) { + Column(modifier = Modifier + .background(White) + .padding(horizontal = 24.dp)) { Spacer(Modifier.height(24.dp)) Text( text = "All Scores", @@ -103,7 +122,10 @@ private fun PastGamesContent( } } item { - Spacer(modifier = Modifier.height(24.dp)) + HorizontalDivider( + modifier = Modifier.padding(top = 16.dp, bottom = 24.dp), + color = GrayStroke, + ) } if (!uiState.filteredGames.isEmpty()) { items(uiState.filteredGames) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cfdf911..f72f8bd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,12 +7,13 @@ junit = "4.13.2" junitVersion = "1.1.5" espressoCore = "3.5.1" appcompat = "1.6.1" -material = "1.10.0" +material = "1.12.0" activity = "1.8.0" constraintlayout = "2.1.4" runtimeAndroid = "1.7.2" apollo = "4.1.1" media3CommonKtx = "1.5.1" +material3 = "1.3.1" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -22,6 +23,7 @@ androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "j androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } +material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3" } androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } androidx-runtime-android = { group = "androidx.compose.runtime", name = "runtime-android", version.ref = "runtimeAndroid" } From 122f0217248bf88c953496e9195504d394e93ed4 Mon Sep 17 00:00:00 2001 From: Amy Wang <74884877+amjiao@users.noreply.github.com> Date: Mon, 14 Apr 2025 18:27:14 -0400 Subject: [PATCH 3/9] Address sport filter (issue #40) (#47) * Fix sport filter * Small readability fix --- .../com/cornellappdev/score/model/Sport.kt | 61 ++++++++++++++----- .../score/viewmodel/HomeViewModel.kt | 5 +- .../score/viewmodel/PastGamesViewModel.kt | 5 +- 3 files changed, 52 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/model/Sport.kt b/app/src/main/java/com/cornellappdev/score/model/Sport.kt index da7ff84..54d682c 100644 --- a/app/src/main/java/com/cornellappdev/score/model/Sport.kt +++ b/app/src/main/java/com/cornellappdev/score/model/Sport.kt @@ -5,135 +5,159 @@ import com.cornellappdev.score.R enum class Sport( val displayName: String, + val gender: GenderDivision, @DrawableRes val emptyIcon: Int, @DrawableRes val filledIcon: Int ) { BASEBALL( displayName = "Baseball", + gender = GenderDivision.MALE, emptyIcon = R.drawable.ic_baseball, - filledIcon = R.drawable.ic_baseball_filled, + filledIcon = R.drawable.ic_baseball_filled ), BASKETBALL( displayName = "Basketball", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_basketball, filledIcon = R.drawable.ic_basketball_filled ), CROSS_COUNTRY( displayName = "Cross Country", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_cross_country, filledIcon = R.drawable.ic_cross_country_filled ), - - // TODO: Fill in rest EQUESTRIAN( displayName = "Equestrian", + gender = GenderDivision.FEMALE, emptyIcon = R.drawable.ic_equestrian, filledIcon = R.drawable.ic_equestrian_filled ), FENCING( displayName = "Fencing", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_fencing, filledIcon = R.drawable.ic_fencing_filled ), FIELD_HOCKEY( displayName = "Field Hockey", + gender = GenderDivision.FEMALE, emptyIcon = R.drawable.ic_field_hockey, filledIcon = R.drawable.ic_field_hockey_filled ), GYMNASTICS( displayName = "Gymnastics", + gender = GenderDivision.FEMALE, emptyIcon = R.drawable.ic_gymnastics, filledIcon = R.drawable.ic_gymnastics_filled ), FOOTBALL( displayName = "Football", + gender = GenderDivision.MALE, emptyIcon = R.drawable.ic_football, filledIcon = R.drawable.ic_football_filled ), GOLF( displayName = "Golf", + gender = GenderDivision.MALE, emptyIcon = R.drawable.ic_golf, filledIcon = R.drawable.ic_golf_filled ), ICE_HOCKEY( displayName = "Ice Hockey", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_ice_hockey, filledIcon = R.drawable.ic_ice_hockey_filled ), - LACROSSE( - displayName = "Lacrosse", - emptyIcon = R.drawable.ic_squash, - filledIcon = R.drawable.ic_squash_filled - ), //TODO: awaiting polo icon from design // POLO( // displayName = "Polo", +// gender = GenderDivision.ALL, // emptyIcon = R.drawable.ic_polo, // filledIcon = R.drawable.ic_polo_filled // ), -// ROWING( //Probably not a thing -// displayName = "Rowing", -// emptyIcon = R.drawable.ic_rowing, -// filledIcon = R.drawable.ic_rowing_filled -// ), + ROWING( + displayName = "Rowing", + gender = GenderDivision.FEMALE, + emptyIcon = R.drawable.ic_rowing_lightweight, + filledIcon = R.drawable.ic_rowing_lightweight_filled + ), + LACROSSE( + displayName = "Lacrosse", + gender = GenderDivision.ALL, + emptyIcon = R.drawable.ic_squash, + filledIcon = R.drawable.ic_squash_filled + ), ROWING_HEAVYWEIGHT( displayName = "Heavyweight Rowing", + gender = GenderDivision.MALE, emptyIcon = R.drawable.ic_rowing_heavyweight, filledIcon = R.drawable.ic_rowing_heavyweight_filled ), ROWING_LIGHTWEIGHT( displayName = "Lightweight Rowing", + gender = GenderDivision.MALE, emptyIcon = R.drawable.ic_rowing_lightweight, filledIcon = R.drawable.ic_rowing_lightweight_filled ), SAILING( displayName = "Sailing", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_sailing, filledIcon = R.drawable.ic_sailing_filled ), SOCCER( displayName = "Soccer", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_soccer, filledIcon = R.drawable.ic_soccer_filled ), SOFTBALL( displayName = "Softball", + gender = GenderDivision.FEMALE, emptyIcon = R.drawable.ic_softball, filledIcon = R.drawable.ic_softball_filled ), SPRINT_FOOTBALL( displayName = "Sprint Football", + gender = GenderDivision.MALE, emptyIcon = R.drawable.ic_sprint_football, filledIcon = R.drawable.ic_sprint_football_filled ), SQUASH( displayName = "Squash", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_squash, filledIcon = R.drawable.ic_squash_filled ), SWIM_DIVE( displayName = "Swim Dive", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_swim_dive, filledIcon = R.drawable.ic_swim_dive_filled ), TENNIS( displayName = "Tennis", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_tennis, filledIcon = R.drawable.ic_tennis_filled ), TRACK_FIELD( displayName = "Track and Field", + gender = GenderDivision.ALL, emptyIcon = R.drawable.ic_track_field, filledIcon = R.drawable.ic_track_field_filled ), VOLLEYBALL( displayName = "Volleyball", + gender = GenderDivision.FEMALE, emptyIcon = R.drawable.ic_volleyball, filledIcon = R.drawable.ic_volleyball_filled ), WRESTLING( displayName = "Wrestling", + gender = GenderDivision.MALE, emptyIcon = R.drawable.ic_wrestling, filledIcon = R.drawable.ic_wrestling_filled ); @@ -143,8 +167,15 @@ enum class Sport( return entries.find { it.displayName.equals(name, ignoreCase = true) } } - fun getSportSelectionList(): List { - return listOf(SportSelection.All) + Sport.entries.map { SportSelection.SportSelect(it) } + fun getSportSelectionList(selectedGender: GenderDivision?): List { + val filteredSports = when (selectedGender) { + GenderDivision.MALE -> Sport.entries.filter { it.gender == GenderDivision.MALE || it.gender == GenderDivision.ALL } + GenderDivision.FEMALE -> Sport.entries.filter { it.gender == GenderDivision.FEMALE || it.gender == GenderDivision.ALL } + GenderDivision.ALL, + null -> Sport.entries + } + + return listOf(SportSelection.All) + filteredSports.map { SportSelection.SportSelect(it) } } } } diff --git a/app/src/main/java/com/cornellappdev/score/viewmodel/HomeViewModel.kt b/app/src/main/java/com/cornellappdev/score/viewmodel/HomeViewModel.kt index f4f6778..8ac4cf7 100644 --- a/app/src/main/java/com/cornellappdev/score/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/com/cornellappdev/score/viewmodel/HomeViewModel.kt @@ -39,7 +39,7 @@ class HomeViewModel @Inject constructor( HomeUiState( selectedGender = GenderDivision.ALL, sportSelect = SportSelection.All, - selectionList = Sport.getSportSelectionList(), + selectionList = Sport.getSportSelectionList(GenderDivision.ALL), loadedState = ApiResponse.Loading ) ) { @@ -71,7 +71,8 @@ class HomeViewModel @Inject constructor( fun onGenderSelected(gender: GenderDivision) { applyMutation { copy( - selectedGender = gender + selectedGender = gender, + selectionList = Sport.getSportSelectionList(gender) ) } } diff --git a/app/src/main/java/com/cornellappdev/score/viewmodel/PastGamesViewModel.kt b/app/src/main/java/com/cornellappdev/score/viewmodel/PastGamesViewModel.kt index 43a2888..15f657d 100644 --- a/app/src/main/java/com/cornellappdev/score/viewmodel/PastGamesViewModel.kt +++ b/app/src/main/java/com/cornellappdev/score/viewmodel/PastGamesViewModel.kt @@ -39,7 +39,7 @@ class PastGamesViewModel @Inject constructor( PastGamesUiState( selectedGender = GenderDivision.ALL, sportSelect = SportSelection.All, - selectionList = Sport.getSportSelectionList(), + selectionList = Sport.getSportSelectionList(GenderDivision.ALL), loadedState = ApiResponse.Loading ) ) { @@ -70,7 +70,8 @@ class PastGamesViewModel @Inject constructor( fun onGenderSelected(gender: GenderDivision) { applyMutation { copy( - selectedGender = gender + selectedGender = gender, + selectionList = Sport.getSportSelectionList(gender) ) } } From 115db4d5d3046b436b45c4e4b77d38bd65d8b21e Mon Sep 17 00:00:00 2001 From: amjiao Date: Mon, 14 Apr 2025 18:16:13 -0400 Subject: [PATCH 4/9] Empty state + UI fixes --- .../cornellappdev/score/screen/HomeScreen.kt | 16 +++++++----- .../score/screen/PastGamesScreen.kt | 26 ++++++++++++------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt index e3b91b5..ff20263 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt @@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -42,6 +41,7 @@ import com.cornellappdev.score.util.gameList import com.cornellappdev.score.util.sportSelectionList import com.cornellappdev.score.viewmodel.HomeUiState import com.cornellappdev.score.viewmodel.HomeViewModel +import androidx.compose.material3.HorizontalDivider @Composable fun HomeScreen( @@ -98,13 +98,17 @@ private fun HomeContent( item { Spacer(Modifier.height(16.dp)) } - item { - GamesCarousel(uiState.upcomingGames) + if (!uiState.filteredGames.isEmpty()) { + item { + GamesCarousel(uiState.upcomingGames) + } } stickyHeader { - Column(modifier = Modifier - .background(White) - .padding(horizontal = 24.dp)) { + Column( + modifier = Modifier + .background(White) + .padding(horizontal = 24.dp) + ) { Spacer(Modifier.height(24.dp)) Text( text = "Game Schedule", diff --git a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt index dd77c20..90d41a5 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt @@ -97,13 +97,17 @@ private fun PastGamesContent( item { Spacer(Modifier.height(16.dp)) } - item { - GamesCarousel(uiState.pastGames) + if (!uiState.filteredGames.isEmpty()) { + item { + GamesCarousel(uiState.pastGames) + } } stickyHeader { - Column(modifier = Modifier - .background(White) - .padding(horizontal = 24.dp)) { + Column( + modifier = Modifier + .background(White) + .padding(horizontal = 24.dp) + ) { Spacer(Modifier.height(24.dp)) Text( text = "All Scores", @@ -130,11 +134,13 @@ private fun PastGamesContent( if (!uiState.filteredGames.isEmpty()) { items(uiState.filteredGames) { val game = it - PastGameCard( - data = game, - onClick = navigateToGameDetails - ) - Spacer(modifier = Modifier.height(16.dp)) + Column(modifier = Modifier.padding(horizontal = 24.dp)) { + PastGameCard( + data = game, + onClick = navigateToGameDetails + ) + Spacer(modifier = Modifier.height(16.dp)) + } } } } From a7a6b9f3529eeee769ff8292541e8c7bd291d562 Mon Sep 17 00:00:00 2001 From: amjiao Date: Mon, 14 Apr 2025 20:37:26 -0400 Subject: [PATCH 5/9] Fix merging --- .../cornellappdev/score/screen/HomeScreen.kt | 20 ++++++++++--------- .../score/screen/PastGamesScreen.kt | 20 ++++++++++--------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt index ff20263..995639e 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt @@ -85,15 +85,17 @@ private fun HomeContent( navigateToGameDetails: (Boolean) -> Unit = {} ) { LazyColumn(contentPadding = PaddingValues(top = 24.dp)) { - item { - Text( - text = "Latest", - style = heading1, - color = GrayPrimary, - modifier = Modifier - .fillMaxWidth() - .padding(start = 24.dp) - ) + if (!uiState.filteredGames.isEmpty()) { + item { + Text( + text = "Upcoming", + style = heading1, + color = GrayPrimary, + modifier = Modifier + .fillMaxWidth() + .padding(start = 24.dp) + ) + } } item { Spacer(Modifier.height(16.dp)) diff --git a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt index 90d41a5..0259239 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt @@ -84,15 +84,17 @@ private fun PastGamesContent( navigateToGameDetails: (Boolean) -> Unit = {} ) { LazyColumn(contentPadding = PaddingValues(top = 24.dp)) { - item { - Text( - text = "Upcoming", - style = heading1, - color = GrayPrimary, - modifier = Modifier - .fillMaxWidth() - .padding(start = 24.dp) - ) + if (!uiState.filteredGames.isEmpty()) { + item { + Text( + text = "Latest", + style = heading1, + color = GrayPrimary, + modifier = Modifier + .fillMaxWidth() + .padding(start = 24.dp) + ) + } } item { Spacer(Modifier.height(16.dp)) From ef67bf66c1c966d474274c49be9081422d52a518 Mon Sep 17 00:00:00 2001 From: amjiao Date: Mon, 14 Apr 2025 20:52:26 -0400 Subject: [PATCH 6/9] small fix --- app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt index ba09b08..e4fa7d4 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt @@ -42,7 +42,6 @@ import com.cornellappdev.score.util.gameList import com.cornellappdev.score.util.sportSelectionList import com.cornellappdev.score.viewmodel.HomeUiState import com.cornellappdev.score.viewmodel.HomeViewModel -import androidx.compose.material3.HorizontalDivider @Composable fun HomeScreen( From a2de9fca34494ef0f02cdd813e3f107c87189db4 Mon Sep 17 00:00:00 2001 From: amjiao Date: Sat, 19 Apr 2025 16:28:05 -0400 Subject: [PATCH 7/9] PR Fixes --- .../score/components/EmptyState.kt | 35 ++++++++----------- .../cornellappdev/score/screen/HomeScreen.kt | 33 +++++++++++++---- .../score/screen/PastGamesScreen.kt | 13 +++---- 3 files changed, 49 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/components/EmptyState.kt b/app/src/main/java/com/cornellappdev/score/components/EmptyState.kt index 0c874a5..550efcd 100644 --- a/app/src/main/java/com/cornellappdev/score/components/EmptyState.kt +++ b/app/src/main/java/com/cornellappdev/score/components/EmptyState.kt @@ -24,29 +24,24 @@ fun EmptyState( modifier: Modifier = Modifier ) { Column( - modifier = modifier - .fillMaxWidth(), + modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally - ) { - Image( - painter = painterResource(R.drawable.ic_speaker_gray), - contentDescription = "score speaker icon" - ) - Spacer(modifier = Modifier.height(16.dp)) - Text( - text = "No games yet.", - style = heading2.copy(color = GrayPrimary) - ) - Spacer(modifier = Modifier.height(8.dp)) - Text( - text = "Check back here later!", - style = bodyNormal.copy(color = GrayMedium) - ) - } + Image( + painter = painterResource(R.drawable.ic_speaker_gray), + contentDescription = "score speaker icon" + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = "No games yet.", + style = heading2.copy(color = GrayPrimary) + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = "Check back here later!", + style = bodyNormal.copy(color = GrayMedium) + ) } } diff --git a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt index e4fa7d4..ea20da5 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt @@ -85,7 +85,7 @@ private fun HomeContent( navigateToGameDetails: (Boolean) -> Unit = {} ) { LazyColumn(contentPadding = PaddingValues(top = 24.dp)) { - if (!uiState.filteredGames.isEmpty()) { + if (uiState.filteredGames.isNotEmpty()) { item { Text( text = "Upcoming", @@ -96,11 +96,11 @@ private fun HomeContent( .padding(start = 24.dp) ) } + item { + Spacer(Modifier.height(16.dp)) + } } - item { - Spacer(Modifier.height(16.dp)) - } - if (!uiState.filteredGames.isEmpty()) { + if (uiState.filteredGames.isNotEmpty()) { item { GamesCarousel(uiState.upcomingGames) } @@ -134,7 +134,7 @@ private fun HomeContent( color = GrayStroke, ) } - if (!uiState.filteredGames.isEmpty()) { + if (uiState.filteredGames.isNotEmpty()) { items(uiState.filteredGames) { val game = it Column(modifier = Modifier.padding(horizontal = 24.dp)) { @@ -185,3 +185,24 @@ private fun HomeScreenPreview() = ScorePreview { } } +@Preview +@Composable +private fun HomeScreenEmptyStatePreview() = ScorePreview{ + Column( + modifier = Modifier + .fillMaxSize() + .background(color = Color.White) + ) { + HomeContent( + HomeUiState( + selectedGender = GenderDivision.ALL, + sportSelect = SportSelection.All, + selectionList = sportSelectionList, + loadedState = ApiResponse.Success(emptyList()) + ), + onGenderSelected = {}, + onSportSelected = {} + ) + } +} + diff --git a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt index 0259239..9156d3f 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt @@ -84,7 +84,7 @@ private fun PastGamesContent( navigateToGameDetails: (Boolean) -> Unit = {} ) { LazyColumn(contentPadding = PaddingValues(top = 24.dp)) { - if (!uiState.filteredGames.isEmpty()) { + if (uiState.filteredGames.isNotEmpty()) { item { Text( text = "Latest", @@ -95,11 +95,12 @@ private fun PastGamesContent( .padding(start = 24.dp) ) } + item { + Spacer(Modifier.height(16.dp)) + } } - item { - Spacer(Modifier.height(16.dp)) - } - if (!uiState.filteredGames.isEmpty()) { + + if (uiState.filteredGames.isNotEmpty()) { item { GamesCarousel(uiState.pastGames) } @@ -133,7 +134,7 @@ private fun PastGamesContent( color = GrayStroke, ) } - if (!uiState.filteredGames.isEmpty()) { + if (uiState.filteredGames.isNotEmpty()) { items(uiState.filteredGames) { val game = it Column(modifier = Modifier.padding(horizontal = 24.dp)) { From 27e37b05681deb8bd476e767afdbac51106a38f9 Mon Sep 17 00:00:00 2001 From: amjiao Date: Sat, 19 Apr 2025 16:54:29 -0400 Subject: [PATCH 8/9] Small fixes --- .../cornellappdev/score/screen/HomeScreen.kt | 99 +++++++++---------- .../score/screen/PastGamesScreen.kt | 42 +++++--- 2 files changed, 77 insertions(+), 64 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt index 12ed8ce..fcca632 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt @@ -121,61 +121,60 @@ private fun HomeLazyColumn( item { GamesCarousel(uiState.upcomingGames, navigateToGameDetails) } - stickyHeader { - Column( + } + stickyHeader { + Column( + modifier = Modifier + .background(White) + .padding(horizontal = 24.dp) + ) { + Spacer(Modifier.height(24.dp)) + Text( + text = "Game Schedule", + style = title, modifier = Modifier - .background(White) - .padding(horizontal = 24.dp) - ) { - Spacer(Modifier.height(24.dp)) - Text( - text = "Game Schedule", - style = title, - modifier = Modifier - .fillMaxWidth() - ) - Spacer(modifier = Modifier.height(8.dp)) - SportSelectorHeader( - sports = uiState.selectionList, - selectedGender = uiState.selectedGender, - selectedSport = uiState.sportSelect, - onGenderSelected = onGenderSelected, - onSportSelected = onSportSelected, - ) - } - Box(modifier = Modifier.background(White)) { - HorizontalDivider( - modifier = Modifier.padding(top = 16.dp), - color = GrayStroke, - ) - } + .fillMaxWidth() + ) + Spacer(modifier = Modifier.height(8.dp)) + SportSelectorHeader( + sports = uiState.selectionList, + selectedGender = uiState.selectedGender, + selectedSport = uiState.sportSelect, + onGenderSelected = onGenderSelected, + onSportSelected = onSportSelected, + ) + } + Box(modifier = Modifier.background(White)) { + HorizontalDivider( + modifier = Modifier.padding(top = 16.dp), + color = GrayStroke, + ) } } - if (uiState.filteredGames.isNotEmpty()) { - - item { - Spacer(modifier = Modifier.height(24.dp)) - } - items(uiState.filteredGames) { - val game = it - Column(modifier = Modifier.padding(horizontal = 24.dp)) { - GameCard( - teamLogo = game.teamLogo, - team = game.team, - date = game.dateString, - isLive = game.isLive, - genderIcon = painterResource(game.genderIcon), - sportIcon = painterResource(game.sportIcon), - location = game.location, - topCornerRound = true, - onClick = { navigateToGameDetails(game.id) } - ) - Spacer(modifier = Modifier.height(16.dp)) - } + if (uiState.filteredGames.isNotEmpty()) { + item { + Spacer(modifier = Modifier.height(24.dp)) + } + items(uiState.filteredGames) { + val game = it + Column(modifier = Modifier.padding(horizontal = 24.dp)) { + GameCard( + teamLogo = game.teamLogo, + team = game.team, + date = game.dateString, + isLive = game.isLive, + genderIcon = painterResource(game.genderIcon), + sportIcon = painterResource(game.sportIcon), + location = game.location, + topCornerRound = true, + onClick = { navigateToGameDetails(game.id) } + ) + Spacer(modifier = Modifier.height(16.dp)) } } } + } if (uiState.filteredGames.isEmpty()) { Box( modifier = Modifier.fillMaxSize(), @@ -184,8 +183,8 @@ private fun HomeLazyColumn( EmptyState() } } - } + @Preview @Composable private fun HomeScreenPreview() = ScorePreview { @@ -210,7 +209,7 @@ private fun HomeScreenPreview() = ScorePreview { @Preview @Composable -private fun HomeScreenEmptyStatePreview() = ScorePreview{ +private fun HomeScreenEmptyStatePreview() = ScorePreview { Column( modifier = Modifier .fillMaxSize() diff --git a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt index e2f562d..0012117 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt @@ -8,7 +8,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -24,7 +23,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.cornellappdev.score.components.EmptyState -import com.cornellappdev.score.components.EmptyState import com.cornellappdev.score.components.ErrorState import com.cornellappdev.score.components.GamesCarousel import com.cornellappdev.score.components.LoadingScreen @@ -120,8 +118,9 @@ private fun PastGamesLazyColumn( if (uiState.filteredGames.isNotEmpty()) { item { - GamesCarousel(uiState.pastGames, navigateToGameDetails) + GamesCarousel(uiState.pastGames, navigateToGameDetails) } + } stickyHeader { Column( modifier = Modifier @@ -154,19 +153,18 @@ private fun PastGamesLazyColumn( item { Spacer(modifier = Modifier.height(24.dp)) } - if (uiState.filteredGames.isNotEmpty()) { - items(uiState.filteredGames) { - val game = it - Column(modifier = Modifier.padding(horizontal = 24.dp)) { - PastGameCard( - data = game, - onClick = { navigateToGameDetails(game.id) } - ) - Spacer(modifier = Modifier.height(16.dp)) - } + if (uiState.filteredGames.isNotEmpty()) { + items(uiState.filteredGames) { + val game = it + Column(modifier = Modifier.padding(horizontal = 24.dp)) { + PastGameCard( + data = game, + onClick = { navigateToGameDetails(game.id) } + ) + Spacer(modifier = Modifier.height(16.dp)) } } - } + } } if (uiState.filteredGames.isEmpty()) { Box( @@ -192,4 +190,20 @@ private fun PastGamesPreview() = ScorePreview { onSportSelected = {}, onRefresh = {}, ) +} + +@Composable +@Preview +private fun PastGamesEmptyStatePreview() = ScorePreview { + PastGamesContent( + uiState = PastGamesUiState( + selectedGender = GenderDivision.ALL, + sportSelect = SportSelection.All, + selectionList = sportSelectionList, + loadedState = ApiResponse.Success(emptyList()) + ), + onGenderSelected = {}, + onSportSelected = {}, + onRefresh = {}, + ) } \ No newline at end of file From ea55476c2a62bc4fbaff1f6c4ee31c62468abdcb Mon Sep 17 00:00:00 2001 From: amjiao Date: Mon, 21 Apr 2025 19:25:54 -0400 Subject: [PATCH 9/9] PR fixes --- .../cornellappdev/score/screen/HomeScreen.kt | 45 +++++++++---------- .../score/screen/PastGamesScreen.kt | 17 +++---- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt index fcca632..ade877f 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/HomeScreen.kt @@ -173,14 +173,15 @@ private fun HomeLazyColumn( Spacer(modifier = Modifier.height(16.dp)) } } - } - } - if (uiState.filteredGames.isEmpty()) { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - EmptyState() + } else { + item { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + EmptyState() + } + } } } } @@ -210,22 +211,16 @@ private fun HomeScreenPreview() = ScorePreview { @Preview @Composable private fun HomeScreenEmptyStatePreview() = ScorePreview { - Column( - modifier = Modifier - .fillMaxSize() - .background(color = Color.White) - ) { - HomeContent( - HomeUiState( - selectedGender = GenderDivision.ALL, - sportSelect = SportSelection.All, - selectionList = sportSelectionList, - loadedState = ApiResponse.Success(emptyList()) - ), - onGenderSelected = {}, - onSportSelected = {}, - onRefresh = {} - ) - } + HomeContent( + HomeUiState( + selectedGender = GenderDivision.ALL, + sportSelect = SportSelection.All, + selectionList = sportSelectionList, + loadedState = ApiResponse.Success(emptyList()) + ), + onGenderSelected = {}, + onSportSelected = {}, + onRefresh = {} + ) } diff --git a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt index 0012117..b831741 100644 --- a/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt +++ b/app/src/main/java/com/cornellappdev/score/screen/PastGamesScreen.kt @@ -164,14 +164,15 @@ private fun PastGamesLazyColumn( Spacer(modifier = Modifier.height(16.dp)) } } - } - } - if (uiState.filteredGames.isEmpty()) { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - EmptyState() + } else{ + item{ + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + EmptyState() + } + } } } }