forked from recloudstream/cloudstream
player UI
This commit is contained in:
parent
5e5e4a4ca5
commit
3ef1c28fbb
4 changed files with 177 additions and 49 deletions
|
@ -2,11 +2,13 @@ package com.lagradost.cloudstream3.ui.player
|
||||||
|
|
||||||
import android.animation.Animator
|
import android.animation.Animator
|
||||||
import android.animation.AnimatorListenerAdapter
|
import android.animation.AnimatorListenerAdapter
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context.AUDIO_SERVICE
|
import android.content.Context.AUDIO_SERVICE
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.content.pm.ActivityInfo
|
import android.content.pm.ActivityInfo
|
||||||
import android.database.ContentObserver
|
import android.database.ContentObserver
|
||||||
|
import android.graphics.Color
|
||||||
import android.media.AudioManager
|
import android.media.AudioManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
@ -14,8 +16,7 @@ import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.View.GONE
|
import android.view.View.*
|
||||||
import android.view.View.VISIBLE
|
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.animation.AlphaAnimation
|
import android.view.animation.AlphaAnimation
|
||||||
import android.view.animation.Animation
|
import android.view.animation.Animation
|
||||||
|
@ -23,6 +24,7 @@ import android.view.animation.AnimationUtils
|
||||||
import android.widget.ProgressBar
|
import android.widget.ProgressBar
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import android.widget.Toast.LENGTH_LONG
|
import android.widget.Toast.LENGTH_LONG
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
|
@ -102,6 +104,8 @@ class PlayerFragment : Fragment() {
|
||||||
private var isLoading = true
|
private var isLoading = true
|
||||||
private lateinit var exoPlayer: SimpleExoPlayer
|
private lateinit var exoPlayer: SimpleExoPlayer
|
||||||
|
|
||||||
|
private var isLocked = false
|
||||||
|
|
||||||
private lateinit var settingsManager: SharedPreferences
|
private lateinit var settingsManager: SharedPreferences
|
||||||
|
|
||||||
private fun seekTime(time: Long) {
|
private fun seekTime(time: Long) {
|
||||||
|
@ -162,11 +166,47 @@ class PlayerFragment : Fragment() {
|
||||||
AspectRatioFrameLayout.RESIZE_MODE_ZOOM,
|
AspectRatioFrameLayout.RESIZE_MODE_ZOOM,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private fun updateLock() {
|
||||||
|
video_locked_img.setImageResource(if (isLocked) R.drawable.video_locked else R.drawable.video_unlocked)
|
||||||
|
val color = if (isLocked) ContextCompat.getColor(requireContext(), R.color.videoColorPrimary)
|
||||||
|
else Color.WHITE
|
||||||
|
|
||||||
|
video_locked_text.setTextColor(color)
|
||||||
|
video_locked_img.setColorFilter(color)
|
||||||
|
|
||||||
|
val isClick = !isLocked
|
||||||
|
println("UPDATED LOCK $isClick")
|
||||||
|
exo_play.isClickable = isClick
|
||||||
|
exo_pause.isClickable = isClick
|
||||||
|
exo_ffwd.isClickable = isClick
|
||||||
|
exo_rew.isClickable = isClick
|
||||||
|
exo_prev.isClickable = isClick
|
||||||
|
video_go_back.isClickable = isClick
|
||||||
|
exo_progress.isClickable = isClick
|
||||||
|
//next_episode_btt.isClickable = isClick
|
||||||
|
playback_speed_btt.isClickable = isClick
|
||||||
|
skip_op.isClickable = isClick
|
||||||
|
resize_player.isClickable = isClick
|
||||||
|
exo_progress.isEnabled = isClick
|
||||||
|
|
||||||
|
// Clickable doesn't seem to work on com.google.android.exoplayer2.ui.DefaultTimeBar
|
||||||
|
//exo_progress.visibility = if (isLocked) INVISIBLE else VISIBLE
|
||||||
|
|
||||||
|
val fadeTo = if (!isLocked) 1f else 0f
|
||||||
|
val fadeAnimation = AlphaAnimation(1f - fadeTo, fadeTo)
|
||||||
|
|
||||||
|
fadeAnimation.duration = 100
|
||||||
|
fadeAnimation.fillAfter = true
|
||||||
|
|
||||||
|
shadow_overlay.startAnimation(fadeAnimation)
|
||||||
|
}
|
||||||
|
|
||||||
private var resizeMode = 0
|
private var resizeMode = 0
|
||||||
private var playbackSpeed = 0f
|
private var playbackSpeed = 0f
|
||||||
private var allEpisodes: HashMap<Int, ArrayList<ExtractorLink>> = HashMap()
|
private var allEpisodes: HashMap<Int, ArrayList<ExtractorLink>> = HashMap()
|
||||||
private var episodes: ArrayList<ResultEpisode> = ArrayList()
|
private var episodes: ArrayList<ResultEpisode> = ArrayList()
|
||||||
|
|
||||||
|
@SuppressLint("SetTextI18n")
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
@ -238,7 +278,7 @@ class PlayerFragment : Fragment() {
|
||||||
exo_rew.startAnimation(rotateLeft)
|
exo_rew.startAnimation(rotateLeft)
|
||||||
|
|
||||||
val goLeft = AnimationUtils.loadAnimation(context, R.anim.go_left)
|
val goLeft = AnimationUtils.loadAnimation(context, R.anim.go_left)
|
||||||
goLeft.setAnimationListener(object : Animation.AnimationListener {
|
goLeft.setAnimationListener(object : Animation.AnimationListener {
|
||||||
override fun onAnimationStart(animation: Animation?) {
|
override fun onAnimationStart(animation: Animation?) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,7 +287,7 @@ class PlayerFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onAnimationEnd(animation: Animation?) {
|
override fun onAnimationEnd(animation: Animation?) {
|
||||||
exo_rew_text.text = "$fastForwardTime"
|
exo_rew_text.post { exo_rew_text.text = "$fastForwardTime" }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
exo_rew_text.startAnimation(goLeft)
|
exo_rew_text.startAnimation(goLeft)
|
||||||
|
@ -258,8 +298,47 @@ class PlayerFragment : Fragment() {
|
||||||
exo_ffwd.setOnClickListener {
|
exo_ffwd.setOnClickListener {
|
||||||
val rotateRight = AnimationUtils.loadAnimation(context, R.anim.rotate_right)
|
val rotateRight = AnimationUtils.loadAnimation(context, R.anim.rotate_right)
|
||||||
exo_ffwd.startAnimation(rotateRight)
|
exo_ffwd.startAnimation(rotateRight)
|
||||||
|
|
||||||
|
val goRight = AnimationUtils.loadAnimation(context, R.anim.go_right)
|
||||||
|
goRight.setAnimationListener(object : Animation.AnimationListener {
|
||||||
|
override fun onAnimationStart(animation: Animation?) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAnimationRepeat(animation: Animation?) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAnimationEnd(animation: Animation?) {
|
||||||
|
exo_ffwd_text.post { exo_ffwd_text.text = "$fastForwardTime" }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
exo_ffwd_text.startAnimation(goRight)
|
||||||
|
exo_ffwd_text.text = "+$fastForwardTime"
|
||||||
seekTime(fastForwardTime * 1000L)
|
seekTime(fastForwardTime * 1000L)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lock_player.setOnClickListener {
|
||||||
|
isLocked = !isLocked
|
||||||
|
val fadeTo = if (isLocked) 0f else 1f
|
||||||
|
|
||||||
|
val fadeAnimation = AlphaAnimation(1f - fadeTo, fadeTo)
|
||||||
|
fadeAnimation.duration = 100
|
||||||
|
// fadeAnimation.startOffset = 100
|
||||||
|
fadeAnimation.fillAfter = true
|
||||||
|
|
||||||
|
// MENUS
|
||||||
|
centerMenu.startAnimation(fadeAnimation)
|
||||||
|
//video_bar.startAnimation(fadeAnimation)
|
||||||
|
|
||||||
|
// BOTTOM
|
||||||
|
resize_player.startAnimation(fadeAnimation)
|
||||||
|
playback_speed_btt.startAnimation(fadeAnimation)
|
||||||
|
sources_btt.startAnimation(fadeAnimation)
|
||||||
|
skip_op.startAnimation(fadeAnimation)
|
||||||
|
|
||||||
|
updateLock()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCurrentUrl(): ExtractorLink {
|
fun getCurrentUrl(): ExtractorLink {
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
android:interpolator="@android:anim/decelerate_interpolator"
|
||||||
>
|
>
|
||||||
<translate
|
<translate
|
||||||
android:fromXDelta="0"
|
android:fromXDelta="0%"
|
||||||
android:toXDelta="-200"
|
android:toXDelta="-30%"
|
||||||
android:duration="200"
|
android:duration="200"
|
||||||
>
|
>
|
||||||
</translate>
|
</translate>
|
||||||
|
|
|
@ -3,8 +3,9 @@
|
||||||
android:interpolator="@android:anim/decelerate_interpolator"
|
android:interpolator="@android:anim/decelerate_interpolator"
|
||||||
>
|
>
|
||||||
<translate
|
<translate
|
||||||
android:fromXDelta="0"
|
android:fromXDelta="0%"
|
||||||
android:toXDelta="100"
|
android:toXDelta="30%"
|
||||||
|
android:duration="200"
|
||||||
>
|
>
|
||||||
</translate>
|
</translate>
|
||||||
</set>
|
</set>
|
|
@ -13,40 +13,40 @@
|
||||||
android:id="@+id/shadow_overlay"
|
android:id="@+id/shadow_overlay"
|
||||||
android:background="@color/black_overlay"
|
android:background="@color/black_overlay"
|
||||||
/>
|
/>
|
||||||
|
<!--
|
||||||
|
<LinearLayout android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="end"
|
||||||
|
android:id="@+id/video_lock_holder"
|
||||||
|
>
|
||||||
|
|
||||||
<LinearLayout android:layout_width="match_parent"
|
<FrameLayout
|
||||||
android:layout_height="wrap_content"
|
android:layout_margin="5dp"
|
||||||
android:gravity="end"
|
android:layout_width="match_parent"
|
||||||
android:id="@+id/video_lock_holder"
|
android:layout_height="wrap_content"
|
||||||
>
|
tools:ignore="UselessParent">
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:layout_margin="20dp"
|
||||||
|
android:id="@+id/video_locked_img"
|
||||||
|
android:layout_gravity="end|center_vertical"
|
||||||
|
android:src="@drawable/video_locked">
|
||||||
|
</ImageView>
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/video_lock"
|
||||||
|
android:layout_width="70dp"
|
||||||
|
android:layout_height="70dp"
|
||||||
|
android:layout_gravity="end|center_vertical"
|
||||||
|
android:focusable="true"
|
||||||
|
android:clickable="true"
|
||||||
|
android:background="@drawable/video_tap_button_always_white">
|
||||||
|
</ImageView>
|
||||||
|
|
||||||
<FrameLayout
|
</FrameLayout>
|
||||||
android:layout_margin="5dp"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
tools:ignore="UselessParent">
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="30dp"
|
|
||||||
android:layout_height="30dp"
|
|
||||||
android:layout_margin="20dp"
|
|
||||||
android:id="@+id/video_locked_img"
|
|
||||||
android:layout_gravity="end|center_vertical"
|
|
||||||
android:src="@drawable/video_locked">
|
|
||||||
</ImageView>
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/video_lock"
|
|
||||||
android:layout_width="70dp"
|
|
||||||
android:layout_height="70dp"
|
|
||||||
android:layout_gravity="end|center_vertical"
|
|
||||||
android:focusable="true"
|
|
||||||
android:clickable="true"
|
|
||||||
android:background="@drawable/video_tap_button_always_white">
|
|
||||||
</ImageView>
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
-->
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="200dp"
|
android:layout_height="200dp"
|
||||||
|
@ -116,6 +116,7 @@
|
||||||
tools:text="Hello world"
|
tools:text="Hello world"
|
||||||
>
|
>
|
||||||
</TextView>
|
</TextView>
|
||||||
|
<!--
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
@ -161,7 +162,7 @@
|
||||||
|
|
||||||
</ImageView>
|
</ImageView>
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
</LinearLayout>
|
</LinearLayout>-->
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_margin="5dp"
|
android:layout_margin="5dp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
@ -202,7 +203,6 @@
|
||||||
>
|
>
|
||||||
|
|
||||||
<FrameLayout android:layout_width="wrap_content"
|
<FrameLayout android:layout_width="wrap_content"
|
||||||
android:layout_marginEnd="140dp"
|
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_height="wrap_content" tools:ignore="RtlSymmetry">
|
android:layout_height="wrap_content" tools:ignore="RtlSymmetry">
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -212,13 +212,14 @@
|
||||||
android:textSize="19sp"
|
android:textSize="19sp"
|
||||||
|
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:textFontWeight="900"
|
android:textStyle="bold"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="200dp"
|
||||||
android:layout_height="40dp">
|
android:layout_height="40dp">
|
||||||
</TextView>
|
</TextView>
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
android:paddingLeft="100dp"
|
||||||
android:id="@id/exo_rew"
|
android:id="@id/exo_rew"
|
||||||
android:layout_height="70dp"
|
android:layout_height="70dp"
|
||||||
android:layout_width="70dp"
|
android:layout_width="70dp"
|
||||||
|
@ -258,7 +259,6 @@
|
||||||
|
|
||||||
|
|
||||||
<FrameLayout android:layout_width="wrap_content"
|
<FrameLayout android:layout_width="wrap_content"
|
||||||
android:layout_marginStart="140dp"
|
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -269,7 +269,7 @@
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:layout_width="40dp"
|
android:layout_width="200dp"
|
||||||
android:layout_height="40dp">
|
android:layout_height="40dp">
|
||||||
</TextView>
|
</TextView>
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
@ -341,6 +341,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
|
android:id="@+id/video_bar"
|
||||||
>
|
>
|
||||||
|
|
||||||
|
|
||||||
|
@ -397,6 +398,54 @@
|
||||||
android:paddingTop="10dp"
|
android:paddingTop="10dp"
|
||||||
android:paddingBottom="10dp"
|
android:paddingBottom="10dp"
|
||||||
>
|
>
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:layout_marginBottom="5dp"
|
||||||
|
android:layout_marginStart="20dp"
|
||||||
|
android:layout_marginEnd="20dp"
|
||||||
|
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
||||||
|
card_view:cardBackgroundColor="@color/transparent"
|
||||||
|
android:foreground="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:id="@+id/lock_player"
|
||||||
|
card_view:cardElevation="0dp"
|
||||||
|
|
||||||
|
>
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingStart="10dp"
|
||||||
|
android:paddingEnd="10dp"
|
||||||
|
>
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:id="@+id/video_locked_img"
|
||||||
|
android:src="@drawable/video_locked"
|
||||||
|
app:tint="@android:color/white"
|
||||||
|
android:layout_gravity="center">
|
||||||
|
|
||||||
|
</ImageView>
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:text="Lock"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingStart="10dp"
|
||||||
|
android:paddingEnd="10dp"
|
||||||
|
android:textSize="10sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:id="@+id/video_locked_text"
|
||||||
|
android:textColor="@android:color/white"
|
||||||
|
>
|
||||||
|
</TextView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||||
|
@ -446,18 +495,17 @@
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginTop="5dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_marginBottom="5dp"
|
android:layout_marginBottom="5dp"
|
||||||
android:layout_marginStart="20dp"
|
android:layout_marginStart="20dp"
|
||||||
android:layout_marginEnd="20dp"
|
android:layout_marginEnd="20dp"
|
||||||
card_view:cardCornerRadius="@dimen/card_corner_radius"
|
app:cardCornerRadius="@dimen/card_corner_radius"
|
||||||
card_view:cardBackgroundColor="@color/transparent"
|
app:cardBackgroundColor="@color/transparent"
|
||||||
android:foreground="?attr/selectableItemBackgroundBorderless"
|
android:foreground="?attr/selectableItemBackgroundBorderless"
|
||||||
android:id="@+id/playback_speed_btt"
|
android:id="@+id/playback_speed_btt"
|
||||||
card_view:cardElevation="0dp"
|
app:cardElevation="0dp"
|
||||||
|
|
||||||
>
|
>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
@ -476,7 +524,7 @@
|
||||||
|
|
||||||
</ImageView>
|
</ImageView>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:text="Speed"
|
android:text="Speed"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
|
Loading…
Reference in a new issue