Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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 @@ -231,6 +231,37 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
}


private fun scheduleMetadataVisibility() {
val metadataScrim =
playerBinding?.root?.findViewById<View>(R.id.player_metadata_scrim) ?: return

val isPaused = currentPlayerStatus == CSPlayerLoading.IsPaused

metadataScrim.animate().cancel()

if (isPaused) {
metadataScrim.postDelayed({
metadataScrim.apply {
isVisible = true
alpha = 0f
animate()
.alpha(1f)
.setDuration(300L)
.start()
}
}, 8000L)
} else {
metadataScrim.animate()
.alpha(0f)
.setDuration(200L)
.withEndAction {
metadataScrim.isVisible = false
}
.start()
}
}


fun setGpuExtraBrightness(extra: Float) {
gpuBrightnessFilter?.setBrightness(extra)
}
Expand Down Expand Up @@ -387,7 +418,6 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
start()
}
}

val playerBarMove = if (isShowing) 0f else 50.toPx.toFloat()
playerBinding?.bottomPlayerBar?.let {
ObjectAnimator.ofFloat(it, "translationY", playerBarMove).apply {
Expand Down Expand Up @@ -453,7 +483,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
override fun subtitlesChanged() {
val tracks = player.getVideoTracks()
val isBuiltinSubtitles = tracks.currentTextTracks.all { track ->
track.sampleMimeType == MimeTypes.APPLICATION_MEDIA3_CUES
track.sampleMimeType == MimeTypes.APPLICATION_MEDIA3_CUES
}
// Subtitle offset is not possible on built-in media3 tracks
playerBinding?.playerSubtitleOffsetBtt?.isGone =
Expand Down Expand Up @@ -563,6 +593,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
override fun onResume() {
enterFullscreen()
verifyVolume()
playerBinding?.root?.findViewById<View>(R.id.player_metadata_scrim)?.isVisible = false
activity?.attachBackPressedCallback("FullScreenPlayer") {
if (isShowingEpisodeOverlay) {
// isShowingEpisodeOverlay pauses, so this makes it easier to unpause
Expand Down Expand Up @@ -938,7 +969,6 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
// BOTTOM
playerLockHolder.startAnimation(fadeAnimation)
// player_go_back_holder?.startAnimation(fadeAnimation)

shadowOverlay.isVisible = true
shadowOverlay.startAnimation(fadeAnimation)
}
Expand Down Expand Up @@ -1009,6 +1039,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() {

override fun playerStatusChanged() {
super.playerStatusChanged()
scheduleMetadataVisibility()
delayHide()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1541,6 +1541,58 @@ class GeneratorPlayer : FullScreenPlayer() {
return
}
loadLink(links.first(), false)
showPlayerMetadata()
}

private fun showPlayerMetadata() {
val root = binding?.root ?: return
val overlay = root.findViewById<View>(R.id.player_metadata_scrim) ?: return

val titleView = overlay.findViewById<TextView>(R.id.player_movie_title)
val logoView = overlay.findViewById<ImageView>(R.id.player_movie_logo)
val metaView = overlay.findViewById<TextView>(R.id.player_movie_meta)
val descView = overlay.findViewById<TextView>(R.id.player_movie_overview)

val load = viewModel.getLoadResponse() ?: return
val episode = currentMeta as? ResultEpisode

val logoUrl = load.logoUrl

if (!logoUrl.isNullOrBlank()) {
logoView.isVisible = true
titleView.isVisible = false
CloudStreamApp.context?.getImageBitmapFromUrl(logoUrl)?.let {
logoView.setImageBitmap(it)
}
} else {
logoView.isVisible = false
titleView.isVisible = true
titleView.text = load.name
}

val meta = arrayOf(
load.tags?.takeIf { it.isNotEmpty() }?.joinToString(", "),
load.year?.toString(),
if (!load.type.isMovieType())
episode?.let { "S${it.season} • E${it.episode}" }
else null,
load.score?.let { "⭐ $it" }
).filterNotNull()
.joinToString(" • ")

metaView.text = meta
metaView.isVisible = meta.isNotBlank()


val description = load.plot

if (!description.isNullOrBlank()) {
descView.isVisible = true
descView.text = description
} else {
descView.isVisible = false

}
}

override fun nextEpisode() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#E6000000"
android:centerColor="#99000000"
android:endColor="#00000000"
android:angle="0" />
</shape>
69 changes: 69 additions & 0 deletions app/src/main/res/layout/player_custom_layout_tv.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,75 @@
tools:orientation="vertical">


<FrameLayout
android:id="@+id/player_metadata_scrim"
android:layout_width="640dp"
android:layout_height="match_parent"
android:background="@drawable/bg_player_metadata_scrim_netflix"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">

<LinearLayout
android:id="@+id/player_metadata_overlay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="64dp"
android:paddingEnd="32dp"
android:paddingBottom="32dp"
android:layout_gravity="center_vertical">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="84dp">

<ImageView
android:id="@+id/player_movie_logo"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitStart"
android:visibility="gone"
tools:visibility="visible" />

<TextView
android:id="@+id/player_movie_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="@android:color/white"
android:textSize="34sp"
android:textStyle="bold"
android:maxLines="2"
android:ellipsize="end"
tools:text="Zootopia 2" />
</FrameLayout>

<TextView
android:id="@+id/player_movie_meta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textColor="#D9FFFFFF"
android:textSize="15sp"
android:maxLines="2"
tools:text="Animation • Action • Adventure • 2025 • ⭐ 7.6" />

<TextView
android:id="@+id/player_movie_overview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:textColor="#E6FFFFFF"
android:textSize="14sp"
android:lineSpacingExtra="6dp"
android:maxLines="4"
tools:text="Brave rabbit cop Judy Hopps and her friend, the fox Nick Wilde, team up again to crack a new case." />

</LinearLayout>
</FrameLayout>

<FrameLayout
android:id="@+id/piphide"
android:layout_width="match_parent"
Expand Down