시리즈 상세 - 번역 데이터가 있으면 번역 데이터를 표시하도록 수정
This commit is contained in:
@@ -17,6 +17,7 @@ data class GetSeriesDetailResponse(
|
||||
@SerializedName("writer") val writer: String?,
|
||||
@SerializedName("studio") val studio: String?,
|
||||
@SerializedName("publishedDate") val publishedDate: String,
|
||||
@SerializedName("publishedDateUtc") val publishedDateUtc: String,
|
||||
@SerializedName("creator") val creator: GetSeriesDetailCreator,
|
||||
@SerializedName("rentalMinPrice") var rentalMinPrice: Int,
|
||||
@SerializedName("rentalMaxPrice") var rentalMaxPrice: Int,
|
||||
@@ -26,7 +27,9 @@ data class GetSeriesDetailResponse(
|
||||
@SerializedName("keywordList") var keywordList: List<String>,
|
||||
@SerializedName("publishedDaysOfWeek") var publishedDaysOfWeek: String,
|
||||
@SerializedName("contentList") val contentList: List<GetSeriesContentListItem>,
|
||||
@SerializedName("contentCount") val contentCount: Int
|
||||
@SerializedName("contentCount") val contentCount: Int,
|
||||
@SerializedName("translated") val translated: TranslatedSeries?,
|
||||
@SerializedName("translatedGenre") val translatedGenre: String?
|
||||
) : Parcelable {
|
||||
@Parcelize
|
||||
@Keep
|
||||
@@ -38,3 +41,11 @@ data class GetSeriesDetailResponse(
|
||||
@SerializedName("isNotify") var isNotify: Boolean
|
||||
) : Parcelable
|
||||
}
|
||||
|
||||
@Parcelize
|
||||
@Keep
|
||||
data class TranslatedSeries(
|
||||
@SerializedName("title") val title: String,
|
||||
@SerializedName("introduction") val introduction: String,
|
||||
@SerializedName("keywords") val keywords: List<String>
|
||||
) : Parcelable
|
||||
|
||||
@@ -118,10 +118,13 @@ class SeriesDetailActivity : BaseActivity<ActivitySeriesDetailBinding>(
|
||||
}
|
||||
|
||||
viewModel.seriesDetailLiveData.observe(this) {
|
||||
// GetSeriesDetailResponse에 추가한대로 번역 데이터가 있으면 번역데이터 표시
|
||||
// 없으면 지금과 동일하게 원본 데이터 표시
|
||||
setSeriesBg(it.coverImage)
|
||||
setSeriesInfo(it)
|
||||
setSeriesCreator(it.creator)
|
||||
setSeriesKeywordChipList(it.keywordList)
|
||||
// 번역 키워드가 있으면 번역 키워드 표시, 없으면 기존 키워드 표시
|
||||
setSeriesKeywordChipList(it.translated?.keywords ?: it.keywordList)
|
||||
|
||||
changeFragment("home")
|
||||
}
|
||||
@@ -160,8 +163,14 @@ class SeriesDetailActivity : BaseActivity<ActivitySeriesDetailBinding>(
|
||||
transformations(RoundedCornersTransformation(5f.dpToPx()))
|
||||
}
|
||||
|
||||
binding.tvTitle.text = seriesDetail.title
|
||||
binding.tvGenre.text = seriesDetail.genre
|
||||
// 번역 데이터 사용 우선, 없으면 원본 사용
|
||||
val displayTitle = seriesDetail.translated?.title?.takeIf { it.isNotBlank() }
|
||||
?: seriesDetail.title
|
||||
val displayGenre = seriesDetail.translatedGenre?.takeIf { it.isNotBlank() }
|
||||
?: seriesDetail.genre
|
||||
|
||||
binding.tvTitle.text = displayTitle
|
||||
binding.tvGenre.text = displayGenre
|
||||
val publishedDays = if (seriesDetail.publishedDaysOfWeek == getString(R.string.day_random)) {
|
||||
getString(R.string.day_random)
|
||||
} else {
|
||||
|
||||
@@ -13,6 +13,9 @@ import kr.co.vividnext.sodalive.base.BaseFragment
|
||||
import kr.co.vividnext.sodalive.common.Constants
|
||||
import kr.co.vividnext.sodalive.databinding.FragmentSeriesDetailIntroductionBinding
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import java.util.TimeZone
|
||||
|
||||
class SeriesDetailIntroductionFragment : BaseFragment<FragmentSeriesDetailIntroductionBinding>(
|
||||
FragmentSeriesDetailIntroductionBinding::inflate
|
||||
@@ -38,8 +41,15 @@ class SeriesDetailIntroductionFragment : BaseFragment<FragmentSeriesDetailIntrod
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
if (seriesDetailResponse != null) {
|
||||
setSeriesKeywordChipList(seriesDetailResponse!!.keywordList)
|
||||
setSeriesIntroduction(seriesDetailResponse!!.introduction)
|
||||
// 번역 데이터가 있으면 번역 데이터 우선 적용
|
||||
setSeriesKeywordChipList(
|
||||
seriesDetailResponse!!.translated?.keywords
|
||||
?: seriesDetailResponse!!.keywordList
|
||||
)
|
||||
setSeriesIntroduction(
|
||||
seriesDetailResponse!!.translated?.introduction
|
||||
?: seriesDetailResponse!!.introduction
|
||||
)
|
||||
setSeriesPrice()
|
||||
setSeriesInfo()
|
||||
}
|
||||
@@ -88,19 +98,24 @@ class SeriesDetailIntroductionFragment : BaseFragment<FragmentSeriesDetailIntrod
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
private fun setSeriesInfo() {
|
||||
binding.tvGenre.text = seriesDetailResponse!!.genre
|
||||
// 장르는 번역 데이터가 있으면 번역 장르 사용
|
||||
binding.tvGenre.text =
|
||||
seriesDetailResponse!!.translatedGenre ?: seriesDetailResponse!!.genre
|
||||
binding.tvIsAdult.text = if (seriesDetailResponse!!.isAdult) {
|
||||
getString(R.string.screen_series_detail_age_19)
|
||||
} else {
|
||||
getString(R.string.screen_series_detail_age_all)
|
||||
}
|
||||
|
||||
binding.tvPublishedDate.text = seriesDetailResponse!!.publishedDate
|
||||
val publishedDays = if (seriesDetailResponse!!.publishedDaysOfWeek == getString(R.string.day_random)) {
|
||||
getString(R.string.day_random)
|
||||
} else {
|
||||
seriesDetailResponse!!.publishedDaysOfWeek
|
||||
}
|
||||
// 공개일은 publishedDateUtc(UTC)를 단말 타임존으로 변환하여 표시
|
||||
binding.tvPublishedDate.text =
|
||||
formatPublishedDateUtc(seriesDetailResponse!!.publishedDateUtc)
|
||||
val publishedDays =
|
||||
if (seriesDetailResponse!!.publishedDaysOfWeek == getString(R.string.day_random)) {
|
||||
getString(R.string.day_random)
|
||||
} else {
|
||||
seriesDetailResponse!!.publishedDaysOfWeek
|
||||
}
|
||||
binding.tvPublishedDaysOfWeek.text = getString(
|
||||
R.string.screen_series_detail_published_days_format,
|
||||
publishedDays
|
||||
@@ -127,6 +142,26 @@ class SeriesDetailIntroductionFragment : BaseFragment<FragmentSeriesDetailIntrod
|
||||
}
|
||||
}
|
||||
|
||||
private fun formatPublishedDateUtc(utcString: String): String {
|
||||
return try {
|
||||
val utcFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault()).apply {
|
||||
timeZone = TimeZone.getTimeZone("UTC")
|
||||
}
|
||||
val date = utcFormat.parse(utcString)
|
||||
if (date != null) {
|
||||
val localFormat = SimpleDateFormat("yyyy.MM.dd", Locale.getDefault()).apply {
|
||||
timeZone = TimeZone.getDefault()
|
||||
}
|
||||
localFormat.format(date)
|
||||
} else {
|
||||
// 파싱 실패 시 서버에서 제공한 기존 publishedDate로 폴백
|
||||
seriesDetailResponse?.publishedDate ?: utcString
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
seriesDetailResponse?.publishedDate ?: utcString
|
||||
}
|
||||
}
|
||||
|
||||
private fun setSeriesIntroduction(introduction: String) {
|
||||
binding.tvIntroduce.text = introduction
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user