diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt index e6b82e47382..9060ae288d9 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeParentItemAdapterPreview.kt @@ -58,6 +58,7 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showOptionSelectSt import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarMargin import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarView import com.lagradost.cloudstream3.utils.UIHelper.populateChips +import com.lagradost.cloudstream3.utils.UiImage class HomeParentItemAdapterPreview( val fragment: LifecycleOwner, @@ -350,6 +351,42 @@ class HomeParentItemAdapterPreview( R.style.ChipFilledSemiTransparent ) + + val logoUrl = item.logoUrl?.takeIf { it.isNotBlank() } + + homeBackgroundPosterWatermarkBadgeHolder.isVisible = false + homeBackgroundPosterWatermarkBadgeHolder.alpha = 0f + homePreviewText.isVisible = false + + if (logoUrl != null) { + homeBackgroundPosterWatermarkBadgeHolder.loadImage( + imageData = UiImage.Image( + logoUrl, + headers = item.posterHeaders + ), + builder = { + listener( + onSuccess = { _, _ -> + // logo loaded → show logo only + homeBackgroundPosterWatermarkBadgeHolder.isVisible = true + homeBackgroundPosterWatermarkBadgeHolder.alpha = 1f + homePreviewText.isVisible = false + }, + onError = { _, _ -> + // logo failed → show title + homeBackgroundPosterWatermarkBadgeHolder.isVisible = false + homePreviewText.isVisible = true + } + ) + } + ) + } else { + // no logo → show title immediately + homeBackgroundPosterWatermarkBadgeHolder.isVisible = false + homePreviewText.isVisible = true + } + + homePreviewTags.isGone = item.tags.isNullOrEmpty() diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt index 9bec473b58b..9687cc29b8d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/home/HomeScrollAdapter.kt @@ -4,6 +4,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.view.isGone +import androidx.core.view.isVisible import com.lagradost.cloudstream3.LoadResponse import com.lagradost.cloudstream3.databinding.HomeScrollViewBinding import com.lagradost.cloudstream3.databinding.HomeScrollViewTvBinding @@ -15,6 +16,7 @@ import com.lagradost.cloudstream3.ui.settings.Globals.TV import com.lagradost.cloudstream3.ui.settings.Globals.isLandscape import com.lagradost.cloudstream3.ui.settings.Globals.isLayout import com.lagradost.cloudstream3.utils.ImageLoader.loadImage +import com.lagradost.cloudstream3.utils.UiImage class HomeScrollAdapter( val callback: ((View, Int, LoadResponse) -> Unit) @@ -66,6 +68,31 @@ class HomeScrollAdapter( maxLines = 2 } binding.homeScrollPreviewTitle.text = item.name + + binding.homePreviewLogo.isVisible = false + binding.homeScrollPreviewTitle.isVisible = false + + val logoUrl = item.logoUrl?.takeIf { it.isNotBlank() } + if (logoUrl != null) { + binding.homePreviewLogo.loadImage( + imageData = UiImage.Image(logoUrl,item.posterHeaders), + builder = { + listener( + onSuccess = { _, _ -> + // logo really loaded + binding.homePreviewLogo.isVisible = true + binding.homeScrollPreviewTitle.isVisible = false + }, + onError = { _, _ -> + // logo failed → show title + binding.homePreviewLogo.isVisible = false + binding.homeScrollPreviewTitle.isVisible = true + } + ) + } + ) + } + } is HomeScrollViewTvBinding -> { diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt index 3bac24dd74e..fc0a3bffa3d 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentPhone.kt @@ -86,6 +86,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.populateChips import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes import com.lagradost.cloudstream3.utils.UIHelper.setListViewHeightBasedOnItems import com.lagradost.cloudstream3.utils.UIHelper.setNavigationBarColorCompat +import com.lagradost.cloudstream3.utils.UiImage import com.lagradost.cloudstream3.utils.VideoDownloadHelper import com.lagradost.cloudstream3.utils.getImageFromDrawable import com.lagradost.cloudstream3.utils.setText @@ -161,6 +162,7 @@ open class ResultFragmentPhone : FullScreenPlayer() { } private fun loadTrailer(index: Int? = null) { + val isSuccess = currentTrailers.getOrNull(index ?: currentTrailerIndex)?.let { (extractedTrailerLink,_) -> context?.let { ctx -> @@ -189,6 +191,7 @@ open class ResultFragmentPhone : FullScreenPlayer() { // result_trailer_loading?.isVisible = isSuccess val turnVis = !isSuccess && !isFullScreenPlayer resultBinding?.apply { + resultTitle.isVisible = isSuccess resultSmallscreenHolder.isVisible = turnVis resultPosterBackgroundHolder.apply { val fadeIn: Animation = AlphaAnimation(alpha, if (turnVis) 1.0f else 0.0f).apply { @@ -800,6 +803,32 @@ open class ResultFragmentPhone : FullScreenPlayer() { } } + if (!d.logoUrl.isNullOrBlank()) { + backgroundPosterWatermarkBadge.isVisible = true + resultTitle.isVisible = false + + backgroundPosterWatermarkBadge.loadImage( + imageData = UiImage.Image(d.logoUrl,headers = d.posterHeaders), + builder = { + listener( + onSuccess = { _, _ -> + backgroundPosterWatermarkBadge.isVisible = true + resultTitle.isVisible = false + }, + onError = { _, _ -> + backgroundPosterWatermarkBadge.isVisible = false + resultTitle.isVisible = true + } + ) + } + ) + + } else { + backgroundPosterWatermarkBadge.isVisible = false + resultTitle.isVisible = true + } + + var isExpanded = false resultDescription.apply { setTextHtml(d.plotText) diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt index af2fe254dd0..cd0622d4d41 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragmentTv.kt @@ -60,12 +60,14 @@ import com.lagradost.cloudstream3.utils.UIHelper.hideKeyboard import com.lagradost.cloudstream3.utils.UIHelper.navigate import com.lagradost.cloudstream3.utils.UIHelper.populateChips import com.lagradost.cloudstream3.utils.UIHelper.setNavigationBarColorCompat +import com.lagradost.cloudstream3.utils.UiImage import com.lagradost.cloudstream3.utils.getImageFromDrawable import com.lagradost.cloudstream3.utils.setText import com.lagradost.cloudstream3.utils.setTextHtml +import com.lagradost.cloudstream3.utils.txt class ResultFragmentTv : BaseFragment( - BaseFragment.BindingCreator.Inflate(FragmentResultTvBinding::inflate) + BindingCreator.Inflate(FragmentResultTvBinding::inflate) ) { private lateinit var viewModel: ResultViewModel2 @@ -160,7 +162,7 @@ class ResultFragmentTv : BaseFragment( // very dirty selection resultRecommendationsFilterSelection.isVisible = apiNames.size > 1 resultRecommendationsFilterSelection.update(apiNames.map { - com.lagradost.cloudstream3.utils.txt( + txt( it ) to it }) @@ -605,10 +607,10 @@ class ResultFragmentTv : BaseFragment( } else R.string.favorite_removed val name = (viewModel.page.value as? Resource.Success)?.value?.title - ?: com.lagradost.cloudstream3.utils.txt(R.string.no_data) + ?: txt(R.string.no_data) .asStringNull(context) ?: "" CommonActivity.showToast( - com.lagradost.cloudstream3.utils.txt( + txt( message, name ), Toast.LENGTH_SHORT @@ -646,10 +648,10 @@ class ResultFragmentTv : BaseFragment( } else R.string.subscription_deleted val name = (viewModel.page.value as? Resource.Success)?.value?.title - ?: com.lagradost.cloudstream3.utils.txt(R.string.no_data) + ?: txt(R.string.no_data) .asStringNull(context) ?: "" CommonActivity.showToast( - com.lagradost.cloudstream3.utils.txt( + txt( message, name ), Toast.LENGTH_SHORT @@ -909,6 +911,35 @@ class ResultFragmentTv : BaseFragment( backgroundPoster.loadImage(d.posterBackgroundImage) { error { getImageFromDrawable(context ?: return@error null, error) } } + + if (!d.logoUrl.isNullOrBlank()) { + + backgroundPosterWatermarkBadgeHolder.isVisible = true + resultTitle.isVisible = false + + backgroundPosterWatermarkBadgeHolder.loadImage( + imageData = UiImage.Image(d.logoUrl,headers = d.posterHeaders), + builder = { + listener( + onSuccess = { _, _ -> + backgroundPosterWatermarkBadgeHolder.isVisible = true + resultTitle.isVisible = false + }, + onError = { _, _ -> + backgroundPosterWatermarkBadgeHolder.isVisible = false + resultTitle.isVisible = true + } + ) + } + ) + + } else { + backgroundPosterWatermarkBadgeHolder.isVisible = false + resultTitle.isVisible = true + } + + + comingSoon = d.comingSoon resultTvComingSoon.isVisible = d.comingSoon diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt index 27ae0eacc24..d0d9b8c9333 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel2.kt @@ -120,6 +120,7 @@ data class ResultData( val posterImage: String?, val posterBackgroundImage: String?, + val logoUrl: String?, val plotText: UiText, val apiName: UiText, val ratingText: UiText?, @@ -245,6 +246,7 @@ fun LoadResponse.toResultData(repo: APIRepository): ResultData { plot!! ), backgroundPosterUrl = backgroundPosterUrl, + logoUrl = logoUrl, title = name, typeText = txt( when (type) { @@ -1895,6 +1897,7 @@ class ResultViewModel2 : ViewModel() { // set posters, might fuck up due to headers idk posterUrl = posterUrl ?: res?.image backgroundPosterUrl = backgroundPosterUrl ?: res?.cover + logoUrl = logoUrl }, { if (meta == null) return@runAllAsync @@ -2695,6 +2698,7 @@ class ResultViewModel2 : ViewModel() { override var syncData: MutableMap = mutableMapOf(), override var posterHeaders: Map? = null, override var backgroundPosterUrl: String? = null, + override var logoUrl: String? = null, override var contentRating: String? = null, override var uniqueUrl: String = url, val id: Int?, diff --git a/app/src/main/res/layout/fragment_home_head_tv.xml b/app/src/main/res/layout/fragment_home_head_tv.xml index 11a8b815ffb..7c0da5795d5 100644 --- a/app/src/main/res/layout/fragment_home_head_tv.xml +++ b/app/src/main/res/layout/fragment_home_head_tv.xml @@ -67,6 +67,15 @@ android:orientation="vertical" android:padding="10dp"> + + + + + diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml index 3c27c74a16a..3dff8f0d535 100644 --- a/app/src/main/res/layout/fragment_result_tv.xml +++ b/app/src/main/res/layout/fragment_result_tv.xml @@ -26,6 +26,7 @@ https://developer.android.com/design/ui/tv/samples/jet-fit android:layout_height="275dp" android:visibility="visible"> + + + + + + + var posterHeaders: Map? var backgroundPosterUrl: String? + var logoUrl: String? var contentRating: String? var uniqueUrl: String @@ -2217,6 +2219,7 @@ constructor( override var syncData: MutableMap = mutableMapOf(), override var posterHeaders: Map? = null, override var backgroundPosterUrl: String? = null, + override var logoUrl: String? = null, override var contentRating: String? = null, override var uniqueUrl: String = url ) : LoadResponse @@ -2277,6 +2280,7 @@ constructor( override var nextAiring: NextAiring? = null, override var seasonNames: List? = null, override var backgroundPosterUrl: String? = null, + override var logoUrl: String? = null, override var contentRating: String? = null, override var uniqueUrl: String = url ) : LoadResponse, EpisodeResponse { @@ -2362,6 +2366,7 @@ constructor( override var syncData: MutableMap = mutableMapOf(), override var posterHeaders: Map? = null, override var backgroundPosterUrl: String? = null, + override var logoUrl: String? = null, override var contentRating: String? = null, override var uniqueUrl: String = url ) : LoadResponse @@ -2410,6 +2415,7 @@ constructor( override var syncData: MutableMap = mutableMapOf(), override var posterHeaders: Map? = null, override var backgroundPosterUrl: String? = null, + override var logoUrl: String? = null, override var contentRating: String? = null, override var uniqueUrl: String = url ) : LoadResponse @@ -2589,6 +2595,7 @@ constructor( override var nextAiring: NextAiring? = null, override var seasonNames: List? = null, override var backgroundPosterUrl: String? = null, + override var logoUrl: String? = null, override var contentRating: String? = null, override var uniqueUrl: String = url ) : LoadResponse, EpisodeResponse {