diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index 535bb501f..67b730f6e 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -107,15 +107,15 @@ import com.google.android.exoplayer2.ui.StyledPlayerView import com.google.android.exoplayer2.upstream.DefaultDataSource import com.google.android.exoplayer2.util.MimeTypes import com.google.android.material.dialog.MaterialAlertDialogBuilder -import java.io.IOException -import java.util.* -import java.util.concurrent.Executors -import kotlin.math.abs import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.chromium.net.CronetEngine import retrofit2.HttpException +import java.io.IOException +import java.util.* +import java.util.concurrent.Executors +import kotlin.math.abs class PlayerFragment : BaseFragment(), OnlinePlayerOptions { @@ -478,7 +478,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { } private fun toggleDescription() { - var viewInfo = if (!isLive) TextUtils.SEPARATOR + streams.uploadDate else "" + var viewInfo = if (!isLive) TextUtils.SEPARATOR + localizedDate(streams.uploadDate) else "" if (binding.descLinLayout.isVisible) { // hide the description and chapters binding.playerDescriptionArrow.animate().rotation(0F).setDuration(250).start() @@ -791,6 +791,12 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { } } + private fun localizedDate(date: String?): String? { + return if (SDK_INT >= Build.VERSION_CODES.N) { + TextUtils.localizeDate(date, resources.configuration.locales[0]) + } else TextUtils.localizeDate(date) + } + private fun handleLiveVideo() { playerBinding.exoPosition.visibility = View.GONE playerBinding.liveDiff.visibility = View.VISIBLE @@ -814,7 +820,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { binding.apply { playerViewsInfo.text = context?.getString(R.string.views, streams.views.formatShort()) + - if (!isLive) TextUtils.SEPARATOR + streams.uploadDate else "" + if (!isLive) TextUtils.SEPARATOR + localizedDate(streams.uploadDate) else "" textLike.text = streams.likes.formatShort() textDislike.text = streams.dislikes.formatShort() @@ -1163,8 +1169,8 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { for (vid in videoStreams) { if (resolutions.any { - it.resolution == vid.quality.qualityToInt() - } || vid.url == null + it.resolution == vid.quality.qualityToInt() + } || vid.url == null ) { continue } diff --git a/app/src/main/java/com/github/libretube/util/TextUtils.kt b/app/src/main/java/com/github/libretube/util/TextUtils.kt index acf78f83a..e3b774b17 100644 --- a/app/src/main/java/com/github/libretube/util/TextUtils.kt +++ b/app/src/main/java/com/github/libretube/util/TextUtils.kt @@ -1,6 +1,10 @@ package com.github.libretube.util import java.net.URL +import java.time.LocalDate +import java.time.format.DateTimeFormatter +import java.time.format.FormatStyle +import java.util.* object TextUtils { /** @@ -29,4 +33,22 @@ object TextUtils { } return false } + + /** + * Localize the date from a time string + * @param date The date to parse + * @param locale The locale to use, otherwise uses system default + * return Localized date string + */ + fun localizeDate(date: String?, locale: Locale? = null): String? { + date ?: return null + + // relative time span + if (!date.contains("-")) return date + + val dateObj = LocalDate.parse(date) + + val formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(locale) + return dateObj.format(formatter) + } }