added trailer animation

This commit is contained in:
LagradOst 2022-06-17 01:58:55 +02:00
parent 5f542ec81a
commit f64b2f7f1b
6 changed files with 102 additions and 29 deletions

View file

@ -31,6 +31,7 @@ import com.google.android.exoplayer2.upstream.cache.SimpleCache
import com.google.android.exoplayer2.util.MimeTypes import com.google.android.exoplayer2.util.MimeTypes
import com.google.android.exoplayer2.video.VideoSize import com.google.android.exoplayer2.video.VideoSize
import com.lagradost.cloudstream3.APIHolder.getApiFromName import com.lagradost.cloudstream3.APIHolder.getApiFromName
import com.lagradost.cloudstream3.ErrorLoadingException
import com.lagradost.cloudstream3.USER_AGENT import com.lagradost.cloudstream3.USER_AGENT
import com.lagradost.cloudstream3.app import com.lagradost.cloudstream3.app
import com.lagradost.cloudstream3.mvvm.logError import com.lagradost.cloudstream3.mvvm.logError
@ -923,6 +924,8 @@ class CS3IPlayer : IPlayer {
yt?.let { ytf -> yt?.let { ytf ->
ytVideos[ytLink] = ytf ytVideos[ytLink] = ytf
loadYtFile(context, ytf) loadYtFile(context, ytf)
} ?: run {
playerError?.invoke(ErrorLoadingException("No Link"))
} }
} }
} }

View file

@ -229,6 +229,15 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
} }
} }
val playerSourceMove = if (isShowing) 0f else -50.toPx.toFloat()
player_open_source?.let {
ObjectAnimator.ofFloat(it, "translationY", playerSourceMove).apply {
duration = 200
start()
}
}
if (!isLocked) { if (!isLocked) {
player_ffwd_holder?.alpha = 1f player_ffwd_holder?.alpha = 1f
player_rew_holder?.alpha = 1f player_rew_holder?.alpha = 1f
@ -251,6 +260,7 @@ open class FullScreenPlayer : AbstractPlayerFragment() {
} }
bottom_player_bar?.startAnimation(fadeAnimation) bottom_player_bar?.startAnimation(fadeAnimation)
player_open_source?.startAnimation(fadeAnimation)
player_top_holder?.startAnimation(fadeAnimation) player_top_holder?.startAnimation(fadeAnimation)
} }

View file

@ -50,6 +50,7 @@ import com.lagradost.cloudstream3.ui.download.DOWNLOAD_ACTION_DOWNLOAD
import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO import com.lagradost.cloudstream3.ui.download.DOWNLOAD_NAVIGATE_TO
import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick import com.lagradost.cloudstream3.ui.download.DownloadButtonSetup.handleDownloadClick
import com.lagradost.cloudstream3.ui.download.EasyDownloadButton import com.lagradost.cloudstream3.ui.download.EasyDownloadButton
import com.lagradost.cloudstream3.ui.player.CSPlayerEvent
import com.lagradost.cloudstream3.ui.player.GeneratorPlayer import com.lagradost.cloudstream3.ui.player.GeneratorPlayer
import com.lagradost.cloudstream3.ui.player.RepoLinkGenerator import com.lagradost.cloudstream3.ui.player.RepoLinkGenerator
import com.lagradost.cloudstream3.ui.player.SubtitleData import com.lagradost.cloudstream3.ui.player.SubtitleData
@ -88,8 +89,10 @@ import com.lagradost.cloudstream3.utils.VideoDownloadManager.getFileName
import com.lagradost.cloudstream3.utils.VideoDownloadManager.sanitizeFilename import com.lagradost.cloudstream3.utils.VideoDownloadManager.sanitizeFilename
import kotlinx.android.synthetic.main.fragment_result.* import kotlinx.android.synthetic.main.fragment_result.*
import kotlinx.android.synthetic.main.fragment_result_swipe.* import kotlinx.android.synthetic.main.fragment_result_swipe.*
import kotlinx.android.synthetic.main.fragment_trailer.*
import kotlinx.android.synthetic.main.result_recommendations.* import kotlinx.android.synthetic.main.result_recommendations.*
import kotlinx.android.synthetic.main.result_sync.* import kotlinx.android.synthetic.main.result_sync.*
import kotlinx.android.synthetic.main.trailer_custom_layout.*
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
@ -608,16 +611,16 @@ class ResultFragment : ResultTrailerPlayer() {
} }
override fun playerError(exception: Exception) { override fun playerError(exception: Exception) {
if (player.getIsPlaying()) // because we dont want random toasts in player if (player.getIsPlaying()) { // because we dont want random toasts in player
super.playerError(exception) super.playerError(exception)
} else {
nextMirror()
}
} }
private fun loadTrailer(index: Int? = null) { private fun loadTrailer(index: Int? = null) {
val isSuccess =
currentTrailers.getOrNull(index ?: currentTrailerIndex)?.let { trailer -> currentTrailers.getOrNull(index ?: currentTrailerIndex)?.let { trailer ->
//if(trailer.contains("youtube.com")) { // wont load in exo
// nextMirror()
// return
//}
context?.let { ctx -> context?.let { ctx ->
player.onPause() player.onPause()
player.loadPlayer( player.loadPlayer(
@ -636,8 +639,14 @@ class ResultFragment : ResultTrailerPlayer() {
subtitle = null, subtitle = null,
autoPlay = false autoPlay = false
) )
true
} ?: run {
false
} }
} ?: run {
false
} }
result_trailer_loading?.isVisible = isSuccess
} }
private fun setTrailers(trailers: List<String>?) { private fun setTrailers(trailers: List<String>?) {
@ -758,6 +767,12 @@ class ResultFragment : ResultTrailerPlayer() {
result_overlapping_panels?.setStartPanelLockState(OverlappingPanelsLayout.LockState.CLOSE) result_overlapping_panels?.setStartPanelLockState(OverlappingPanelsLayout.LockState.CLOSE)
result_overlapping_panels?.setEndPanelLockState(OverlappingPanelsLayout.LockState.CLOSE) result_overlapping_panels?.setEndPanelLockState(OverlappingPanelsLayout.LockState.CLOSE)
player_open_source?.setOnClickListener {
currentTrailers.getOrNull(currentTrailerIndex)?.let {
context?.openBrowser(it)
}
}
updateUIListener = ::updateUI updateUIListener = ::updateUI
val restart = arguments?.getBoolean(RESTART_BUNDLE) ?: false val restart = arguments?.getBoolean(RESTART_BUNDLE) ?: false
@ -828,6 +843,12 @@ class ResultFragment : ResultTrailerPlayer() {
} else if (dy < -5) { } else if (dy < -5) {
result_bookmark_fab?.extend() result_bookmark_fab?.extend()
} }
if (!isFullScreenPlayer && player.getIsPlaying()) {
if (scrollY > (player_background?.height ?: scrollY)) {
player.handleEvent(CSPlayerEvent.Pause)
}
}
//result_poster_blur_holder?.translationY = -scrollY.toFloat() //result_poster_blur_holder?.translationY = -scrollY.toFloat()
}) })

View file

@ -53,6 +53,7 @@ open class ResultTrailerPlayer : com.lagradost.cloudstream3.ui.player.FullScreen
screenHeight screenHeight
} }
result_trailer_loading?.isVisible = false
player_background?.apply { player_background?.apply {
isVisible = true isVisible = true
layoutParams = layoutParams =

View file

@ -138,6 +138,34 @@
android:background="?attr/primaryBlackBackground" android:background="?attr/primaryBlackBackground"
android:orientation="vertical"> android:orientation="vertical">
<com.facebook.shimmer.ShimmerFrameLayout
android:visibility="gone"
android:id="@+id/result_trailer_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
app:shimmer_auto_start="true"
app:shimmer_base_alpha="0.2"
app:shimmer_duration="@integer/loading_time"
app:shimmer_highlight_alpha="0.3"
tools:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/result_padding"
android:orientation="vertical">
<androidx.cardview.widget.CardView
android:background="@color/grayShimmer"
app:cardCornerRadius="@dimen/loading_radius"
android:layout_width="match_parent"
android:layout_height="150dp"
android:foreground="@drawable/outline_drawable" />
</LinearLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
<FrameLayout <FrameLayout
android:id="@+id/result_smallscreen_holder" android:id="@+id/result_smallscreen_holder"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -58,7 +58,6 @@
android:background="@color/black_overlay" /> android:background="@color/black_overlay" />
</FrameLayout> </FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/player_video_holder" android:id="@+id/player_video_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -273,6 +272,17 @@
android:layout_width="0dp" /> android:layout_width="0dp" />
</LinearLayout> </LinearLayout>
<ImageView
android:background="?android:attr/selectableItemBackgroundBorderless"
android:id="@+id/player_open_source"
app:tint="@color/white"
android:src="@drawable/ic_baseline_public_24"
android:layout_margin="20dp"
android:layout_width="24dp"
android:layout_height="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout <LinearLayout
android:id="@+id/bottom_player_bar" android:id="@+id/bottom_player_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -343,9 +353,9 @@
app:tint="@color/white" app:tint="@color/white"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:src="@drawable/baseline_fullscreen_24" android:src="@drawable/baseline_fullscreen_24"
android:layout_marginEnd="10dp" android:layout_marginEnd="20dp"
android:layout_width="24dp" android:layout_width="30dp"
android:layout_height="24dp" /> android:layout_height="30dp" />
</LinearLayout> </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>