Skip to content

Commit 8546e34

Browse files
committed
refactor: make actor details screen stateless
1 parent 49a20a1 commit 8546e34

File tree

2 files changed

+33
-21
lines changed

2 files changed

+33
-21
lines changed

dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/feature/actordetail/ActorDetailScreen.kt

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -40,49 +40,60 @@ fun ActorDetailScreen(
4040
) {
4141
actorDetailViewModel.setActorId(actorId)
4242
val uiState by actorDetailViewModel.uiState.collectAsState()
43-
Scaffold { innerPadding ->
44-
when (uiState) {
45-
is ActorDetailUIState.Error -> {
46-
ErrorCard((uiState as ActorDetailUIState.Error).errorMessage)
47-
}
43+
ActorDetailScreen(
44+
uiState = uiState,
45+
onMovieClicked = {
46+
// TODO
47+
},
48+
onFavoriteToggled = {
49+
actorDetailViewModel.toggleFavorite(it)
50+
}
51+
)
52+
}
53+
54+
@Composable
55+
fun ActorDetailScreen(
56+
uiState: ActorDetailUIState,
57+
onMovieClicked: (actorId: String) -> Unit,
58+
onFavoriteToggled: (newValue: Boolean) -> Unit
59+
) {
60+
when (uiState) {
61+
is ActorDetailUIState.Error -> ErrorCard(uiState.errorMessage)
4862

49-
ActorDetailUIState.Loading -> LoadingScreen()
63+
ActorDetailUIState.Loading -> LoadingScreen()
5064

51-
is ActorDetailUIState.Success -> {
52-
val ui = uiState as ActorDetailUIState.Success
65+
is ActorDetailUIState.Success -> {
66+
val ui = uiState
67+
Scaffold { innerPadding ->
5368
val scrollState = rememberScrollState()
5469
Column(
55-
modifier = Modifier.verticalScroll(scrollState)
70+
modifier = Modifier
71+
.padding(innerPadding)
72+
.verticalScroll(scrollState)
5673
) {
5774
ActorInformation(
58-
modifier = Modifier.padding(innerPadding),
5975
actor = ui.actor,
6076
isActorFavorite = ui.isFavorite,
61-
onFavoriteToggled = {
62-
actorDetailViewModel.toggleFavorite(it)
63-
}
77+
onFavoriteToggled = onFavoriteToggled
6478
)
6579
MoviesList(
6680
listTitle = stringResource(R.string.title_main_roles),
6781
movies = ui.actor?.mainActors?.mapNotNull {
6882
Movie(it.id.toString(), it.imageUrl, it.title)
6983
},
70-
onMovieClicked = { movieId ->
71-
// TODO(thatfiredev): Support navigating to movie
72-
}
84+
onMovieClicked = onMovieClicked
7385
)
7486
Spacer(modifier = Modifier.height(8.dp))
7587
MoviesList(
7688
listTitle = stringResource(R.string.title_supporting_actors),
7789
movies = ui.actor?.supportingActors?.mapNotNull {
7890
Movie(it.id.toString(), it.imageUrl, it.title)
7991
},
80-
onMovieClicked = { movieId ->
81-
// TODO(thatfiredev): Support navigating to movie
82-
}
92+
onMovieClicked = onMovieClicked
8393
)
8494
}
8595
}
96+
8697
}
8798
}
8899
}
@@ -95,7 +106,7 @@ fun ActorInformation(
95106
onFavoriteToggled: (newValue: Boolean) -> Unit
96107
) {
97108
if (actor == null) {
98-
ErrorCard(stringResource(R.string.error_movie_not_found))
109+
ErrorCard(stringResource(R.string.error_actor_not_found))
99110
} else {
100111
Column(
101112
modifier = modifier

dataconnect/app/src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<string name="title_most_recent">Most Recent</string>
1818

1919
<!-- Movie Detail Screen -->
20-
<string name="error_movie_not_found">Couldnt find movie in the database</string>
20+
<string name="error_movie_not_found">Couldn\'t find movie in the database</string>
2121
<string name="description_not_available">Description not available</string>
2222
<string name="button_mark_watched">Mark as watched</string>
2323
<string name="button_unmark_watched">Watched</string>
@@ -30,6 +30,7 @@
3030
<string name="button_submit_review">Submit Review</string>
3131

3232
<!-- Actor Detail Screen -->
33+
<string name="error_actor_not_found">Couldn\'t find actor in the database</string>
3334
<string name="biography_not_available">Biography not available</string>
3435
<string name="title_main_roles">Main Roles</string>
3536
<string name="title_supporting_roles">Supporting Roles</string>

0 commit comments

Comments
 (0)