Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ fun InfoCard(
) {
Box(
modifier = modifier
.padding(horizontal = 16.dp)
.fillMaxWidth()
.background(
color = Theme.colors.background.card,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,12 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
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.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
Expand All @@ -48,6 +46,7 @@ import com.moscow.cineverse.designSystem.component.blur.OnBlurContent
import com.moscow.cineverse.designSystem.theme.Theme
import com.moscow.cineverse.image_viewer.component.SafeImageViewer
import com.moscow.cineverse.mapper.formatDate
import com.moscow.cineverse.mapper.formatRating
import com.moscow.cineverse.screen.details.common.InfoSection
import com.moscow.cineverse.utlis.ViewMode
import com.moscow.cinverse.presentation.R
Expand Down Expand Up @@ -195,9 +194,9 @@ private fun GridMovieCard(
interactionSource = remember { MutableInteractionSource() }
) {

onMovieClick(movie.id)
onMovieClick(movie.id)

},
},
isBlurEnabled = enableBlur,
placeholderContent = {
RemoteImagePlaceholder(
Expand Down Expand Up @@ -236,7 +235,7 @@ private fun GridMovieCard(
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "%.1f".format(movie.rating),
text = movie.rating.formatRating(LocalContext.current),
color = Theme.colors.shade.primary,
style = Theme.textStyle.label.medium.medium
)
Expand Down Expand Up @@ -276,7 +275,7 @@ private fun GridMovieCard(
indication = null,
interactionSource = remember { MutableInteractionSource() },
onClick = {
onMovieClick(movie.id)
onMovieClick(movie.id)
}
)
)
Expand All @@ -290,7 +289,8 @@ private fun GridMovieCard(
) {
with(sharedTransitionScope) {
DurationAndDateSection(
releaseDate = movie.releaseDate?.formatDate() ?: "",
releaseDate = movie.releaseDate?.formatDate(context = LocalContext.current)
?: "",
modifier = Modifier.sharedElement(
sharedContentState = rememberSharedContentState(key = detailsKey),
animatedVisibilityScope = this@AnimatedVisibility,
Expand Down Expand Up @@ -331,8 +331,8 @@ private fun GridMovieCard(
indication = null,
interactionSource = remember { MutableInteractionSource() }
) {
onMovieClick(movie.id)
},
onMovieClick(movie.id)
},
isBlurEnabled = enableBlur,
placeholderContent = {
RemoteImagePlaceholder(
Expand Down Expand Up @@ -365,7 +365,7 @@ private fun GridMovieCard(
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "%.1f".format(movie.rating),
text = movie.rating.formatRating(LocalContext.current),
color = Theme.colors.shade.primary,
style = Theme.textStyle.label.medium.medium
)
Expand Down Expand Up @@ -400,7 +400,7 @@ private fun GridMovieCard(
indication = null,
interactionSource = remember { MutableInteractionSource() },
onClick = {
onMovieClick(movie.id)
onMovieClick(movie.id)
}
)
)
Expand Down Expand Up @@ -504,7 +504,8 @@ private fun ListMovieCard(
)

DurationAndDateSection(
releaseDate = movie.releaseDate?.formatDate() ?: "",
releaseDate = movie.releaseDate?.formatDate(context = LocalContext.current)
?: "",
modifier = Modifier.sharedElement(
sharedContentState = rememberSharedContentState(key = detailsKey),
animatedVisibilityScope = animatedVisibilityScope,
Expand All @@ -530,7 +531,7 @@ private fun ListMovieCard(
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "%.1f".format(movie.rating),
text = movie.rating.formatRating(LocalContext.current),
color = Theme.colors.shade.primary,
style = Theme.textStyle.label.small.medium
)
Expand Down Expand Up @@ -612,7 +613,8 @@ private fun ListMovieCard(
)

DurationAndDateSection(
releaseDate = movie.releaseDate?.formatDate() ?: ""
releaseDate = movie.releaseDate?.formatDate(context = LocalContext.current)
?: ""
)
}
}
Expand All @@ -629,7 +631,7 @@ private fun ListMovieCard(
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "%.1f".format(movie.rating),
text = movie.rating.formatRating(LocalContext.current),
color = Theme.colors.shade.primary,
style = Theme.textStyle.label.small.medium
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package com.moscow.cineverse.mapper

import android.content.Context
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import com.moscow.cineverse.common_ui_state.DurationUiState
import com.moscow.cineverse.design_system.R
import kotlinx.datetime.LocalDate
import kotlinx.datetime.toJavaLocalDate
import java.time.format.DateTimeFormatter
import java.text.NumberFormat
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols
import java.util.Locale
import java.time.format.DateTimeFormatter
import java.time.format.DecimalStyle


@Composable
Expand All @@ -20,11 +24,84 @@ fun DurationUiState.formatDuration(): String {
}
}

fun LocalDate.formatDate(): String {
fun Float.formatRating(context: Context, decimalPlaces: Int = 1): String {
return try {
val appLocale = context.resources.configuration.locales[0]
val isArabicApp = appLocale.language == "ar"

val formatter = if (isArabicApp) {
val arabicLocale = Locale.Builder()
.setLanguage("ar")
.setRegion("SA")
.build()
val arabicDecimalStyle = DecimalStyle.of(arabicLocale)
(NumberFormat.getNumberInstance(arabicLocale) as DecimalFormat).apply {
minimumFractionDigits = decimalPlaces
maximumFractionDigits = decimalPlaces
decimalFormatSymbols = DecimalFormatSymbols(arabicLocale).apply {
decimalSeparator = arabicDecimalStyle.decimalSeparator
zeroDigit = arabicDecimalStyle.zeroDigit
}
}
} else {
NumberFormat.getNumberInstance(appLocale).apply {
minimumFractionDigits = decimalPlaces
maximumFractionDigits = decimalPlaces
}
}
formatter.format(this)
} catch (e: Exception) {
this.toString()
}
}

fun Int.formatInt(context: Context): String {
return try {
val formatter = DateTimeFormatter.ofPattern("yyyy, MMM dd", Locale.getDefault())
val dateString = this.toJavaLocalDate().format(formatter)
dateString
val appLocale = context.resources.configuration.locales[0]
val isArabicApp = appLocale.language == "ar"

val formatter = if (isArabicApp) {
val arabicLocale = Locale.Builder()
.setLanguage("ar")
.setRegion("SA")
.build()
(NumberFormat.getNumberInstance(arabicLocale) as DecimalFormat).apply {
minimumFractionDigits = 0
maximumFractionDigits = 0
decimalFormatSymbols = DecimalFormatSymbols(arabicLocale).apply {
zeroDigit = DecimalStyle.of(arabicLocale).zeroDigit
}
}
} else {
NumberFormat.getNumberInstance(appLocale).apply {
minimumFractionDigits = 0
maximumFractionDigits = 0
}
}
formatter.format(this)
} catch (e: Exception) {
this.toString()
}
}

fun LocalDate.formatDate(context: Context): String {
return try {
val appLocale = context.resources.configuration.locales[0]
val javaLocalDate = java.time.LocalDate.of(this.year, this.monthNumber, this.dayOfMonth)
val isArabicApp = appLocale.language == "ar"

val formatter = if (isArabicApp) {
val arabicLocale = Locale.Builder()
.setLanguage("ar")
.setRegion("SA")
.build()
val arabicDecimalStyle = DecimalStyle.of(arabicLocale)
DateTimeFormatter.ofPattern("yyyy, MMM dd", appLocale)
.withDecimalStyle(arabicDecimalStyle)
} else {
DateTimeFormatter.ofPattern("yyyy, MMM dd", appLocale)
}
javaLocalDate.format(formatter)
} catch (_: Exception) {
""
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.moscow.cineverse.designSystem.component.blur.OnBlurContent
Expand All @@ -50,7 +51,7 @@ fun ActorMainDetailsSection(
name = actor.name,
date = stringResource(
R.string.born_on,
actor.birthDate?.formatDate()?:""
actor.birthDate?.formatDate(context = LocalContext.current) ?: ""
),
location = actor.placeOfBirth,
scrollState = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,6 @@ private fun CollectionDetailsScreenContent(
LazyColumn(
modifier = Modifier.padding(
top = 16.dp,
start = 16.dp,
end = 16.dp
)
) {
if (uiState.showTip) {
Expand Down Expand Up @@ -171,7 +169,9 @@ private fun CollectionDetailsScreenContent(
},
showTitle = true,
showBackdrop = true,
enableBlur = uiState.enableBlur
enableBlur = uiState.enableBlur,
modifier = Modifier.padding(horizontal = 16.dp)

)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
Expand All @@ -19,6 +20,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.moscow.cineverse.designSystem.theme.Theme
import com.moscow.cineverse.design_system.R
import com.moscow.cineverse.mapper.formatRating

@Composable
fun InfoSection(
Expand Down Expand Up @@ -56,7 +58,7 @@ fun InfoSection(
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "%.1f".format(rating),
text = rating.formatRating(LocalContext.current),
color = Theme.colors.shade.primary,
style = Theme.textStyle.label.medium.medium,
fontSize = 12.sp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.moscow.cineverse.common_ui_state.DurationUiState
Expand Down Expand Up @@ -273,7 +274,7 @@ fun MediaHeader(
releaseDate?.let { date ->
InfoTextWithIcon(
R.drawable.due_tone_calendar,
date.formatDate(),
date.formatDate(context = LocalContext.current),
Theme.colors.shade.secondary
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.moscow.cineverse.common_ui_state.CastUiState
import com.moscow.cineverse.common_ui_state.DurationUiState
import com.moscow.cineverse.common_ui_state.MediaItemUiState
import com.moscow.cineverse.common_ui_state.ReviewUiState
import com.moscow.cineverse.screen.details.movie_details.MovieScreenState.MovieDetailsUiState
import kotlinx.datetime.LocalDate


Expand Down Expand Up @@ -39,4 +40,17 @@ data class MovieScreenState(
val duration: DurationUiState,
val description: String
)
}
}


fun MovieDetailsUiState.toMediaItem() =
MediaItemUiState(
id = this.id,
title = this.title,
posterPath = this.posterUrl,
rating = this.rating.toFloatOrNull() ?: 0.0f, // Convert string rating to float
genres = this.genres,
releaseDate = this.releaseDate,
backdropPath = this.posterUrl, // Using posterUrl as backdrop (you may want to add a separate backdropUrl field)
mediaType = MediaItemUiState.MediaType.Movie
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import coil3.compose.rememberAsyncImagePainter
import com.moscow.cineverse.common_ui_state.ReviewUiState
Expand Down Expand Up @@ -37,7 +38,7 @@ fun MovieReviewsSection(
review.username,
review.reviewContent,
review.rate,
review.date?.formatDate() ?: "",
review.date?.formatDate(context = LocalContext.current) ?: "",
if (review.userImageUrl.isEmpty()) null else rememberAsyncImagePainter(model = review.userImageUrl),
modifier = Modifier.padding(
start = 16.dp,
Expand Down
Loading
Loading