diff --git a/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/feature/moviedetail/MovieDetailScreen.kt b/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/feature/moviedetail/MovieDetailScreen.kt index 148293f34..98b1a7f70 100644 --- a/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/feature/moviedetail/MovieDetailScreen.kt +++ b/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/feature/moviedetail/MovieDetailScreen.kt @@ -36,6 +36,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import coil.compose.AsyncImage @@ -80,6 +81,7 @@ fun MovieDetailScreen( onFavoriteToggled = { newValue -> movieDetailViewModel.toggleFavorite(newValue) }, + isUserSignedIn = ui.isUserSignedIn ) // Main Actors list ActorsList( @@ -101,7 +103,8 @@ fun MovieDetailScreen( onReviewSubmitted = { rating, text -> movieDetailViewModel.addRating(rating, text) }, - movie?.reviews + movie?.reviews, + isUserSignedIn = ui.isUserSignedIn ) } @@ -115,7 +118,8 @@ fun MovieInformation( modifier: Modifier = Modifier, movie: GetMovieByIdQuery.Data.Movie?, isMovieFavorite: Boolean, - onFavoriteToggled: (newValue: Boolean) -> Unit + onFavoriteToggled: (newValue: Boolean) -> Unit, + isUserSignedIn: Boolean ) { if (movie == null) { ErrorCard(stringResource(R.string.error_movie_not_found)) @@ -176,14 +180,25 @@ fun MovieInformation( } } Spacer(modifier = Modifier.height(8.dp)) - ToggleButton( - iconEnabled = Icons.Filled.Favorite, - iconDisabled = Icons.Outlined.FavoriteBorder, - textEnabled = stringResource(R.string.button_remove_favorite), - textDisabled = stringResource(R.string.button_favorite), - isEnabled = isMovieFavorite, - onToggle = onFavoriteToggled - ) + if (isUserSignedIn) { + ToggleButton( + iconEnabled = Icons.Filled.Favorite, + iconDisabled = Icons.Outlined.FavoriteBorder, + textEnabled = stringResource(R.string.button_remove_favorite), + textDisabled = stringResource(R.string.button_favorite), + isEnabled = isMovieFavorite, + onToggle = onFavoriteToggled + ) + } else { + Text( + text = stringResource(R.string.sign_in_to_favorite), + textAlign = TextAlign.Center, + color = MaterialTheme.colorScheme.tertiary, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(8.dp) + .fillMaxWidth() + ) + } } } } diff --git a/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/feature/moviedetail/UserReviews.kt b/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/feature/moviedetail/UserReviews.kt index ddc85607a..45a37c633 100644 --- a/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/feature/moviedetail/UserReviews.kt +++ b/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/feature/moviedetail/UserReviews.kt @@ -29,55 +29,66 @@ import com.google.firebase.example.dataconnect.ui.components.ReviewCard @Composable fun UserReviews( onReviewSubmitted: (rating: Float, text: String) -> Unit, - reviews: List? = emptyList() + reviews: List? = emptyList(), + isUserSignedIn: Boolean ) { var reviewText by remember { mutableStateOf("") } Text( - text = "User Reviews", + text = stringResource(R.string.title_user_reviews), style = MaterialTheme.typography.headlineMedium, - modifier = Modifier.padding(horizontal = 16.dp) + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp) ) - Spacer(modifier = Modifier.height(8.dp)) - Column( - modifier = Modifier - .fillMaxSize() - .padding(16.dp), - horizontalAlignment = Alignment.CenterHorizontally - ) { - var rating by remember { mutableFloatStateOf(5f) } - Text("Rating: ${rating}") - Slider( - value = rating, - onValueChange = { rating = Math.round(it).toFloat() }, - steps = 10, - valueRange = 1f..10f - ) - TextField( - value = reviewText, - onValueChange = { if (it.length <= 280) reviewText = it }, - label = { Text(stringResource(R.string.hint_write_review)) }, - supportingText = { - Text( - "${reviewText.length} / 280", - modifier = Modifier.fillMaxWidth(), - textAlign = TextAlign.End - ) - }, - modifier = Modifier.fillMaxWidth() - ) + if (isUserSignedIn) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + var rating by remember { mutableFloatStateOf(5f) } + Text(stringResource(R.string.movie_rating_indicator, rating)) + Slider( + value = rating, + onValueChange = { rating = Math.round(it).toFloat() }, + steps = 10, + valueRange = 1f..10f + ) + TextField( + value = reviewText, + onValueChange = { if (it.length <= 280) reviewText = it }, + label = { Text(stringResource(R.string.hint_write_review)) }, + supportingText = { + Text( + "${reviewText.length} / 280", + modifier = Modifier.fillMaxWidth(), + textAlign = TextAlign.End + ) + }, + modifier = Modifier.fillMaxWidth() + ) - Spacer(modifier = Modifier.height(16.dp)) + Spacer(modifier = Modifier.height(16.dp)) - Button( - onClick = { - if (!reviewText.isNullOrEmpty()) { - onReviewSubmitted(rating, reviewText) - reviewText = "" + Button( + onClick = { + if (!reviewText.isNullOrEmpty()) { + onReviewSubmitted(rating, reviewText) + reviewText = "" + } } + ) { + Text(stringResource(R.string.button_submit_review)) } - ) { - Text(stringResource(R.string.button_submit_review)) } + } else { + Text( + text = stringResource(R.string.sign_in_to_review), + textAlign = TextAlign.Center, + color = MaterialTheme.colorScheme.tertiary, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(8.dp) + .fillMaxWidth() + ) } Column { // TODO(thatfiredev): Handle cases where the list is too long to display diff --git a/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/ui/components/MoviesList.kt b/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/ui/components/MoviesList.kt index 0be44d7ab..fc584ba5e 100644 --- a/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/ui/components/MoviesList.kt +++ b/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/ui/components/MoviesList.kt @@ -14,10 +14,12 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import coil.compose.AsyncImage +import com.google.firebase.example.dataconnect.R /** * Used to represent a movie in a list UI @@ -94,7 +96,7 @@ fun MovieTile( ) movie.rating?.let { Text( - text = "Rating: $it", + text = stringResource(R.string.movie_rating_indicator, it), modifier = Modifier.padding(bottom = 8.dp, start = 8.dp, end = 8.dp), style = MaterialTheme.typography.bodySmall ) diff --git a/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/ui/components/ReviewCard.kt b/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/ui/components/ReviewCard.kt index 15676631d..f11b2b0a5 100644 --- a/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/ui/components/ReviewCard.kt +++ b/dataconnect/app/src/main/java/com/google/firebase/example/dataconnect/ui/components/ReviewCard.kt @@ -14,12 +14,14 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.text import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.google.firebase.dataconnect.LocalDate import com.google.firebase.dataconnect.toJavaLocalDate +import com.google.firebase.example.dataconnect.R import java.text.SimpleDateFormat import java.time.format.DateTimeFormatter import java.util.Locale @@ -77,11 +79,7 @@ fun ReviewCard( ) Spacer(modifier = Modifier.width(8.dp)) Text( - text = "Rating: ", - style = MaterialTheme.typography.titleMedium - ) - Text( - text = "$rating", + text = stringResource(R.string.movie_rating_indicator, rating), style = MaterialTheme.typography.titleMedium ) } diff --git a/dataconnect/app/src/main/res/values/strings.xml b/dataconnect/app/src/main/res/values/strings.xml index 09c3b778a..f6eb14ade 100644 --- a/dataconnect/app/src/main/res/values/strings.xml +++ b/dataconnect/app/src/main/res/values/strings.xml @@ -28,7 +28,10 @@ Supporting Actors User Reviews Write your review + Create an account or sign-in to write a review + Create an account or sign-in to add this movie to your favorites list Submit Review + Rating: %.1f Couldn\'t find actor in the database