player support for small screen + player fixes

This commit is contained in:
LagradOst 2021-09-04 00:46:29 +02:00
parent dea167a851
commit b859508522
8 changed files with 489 additions and 401 deletions

View file

@ -200,6 +200,8 @@ class TrailersToProvider : MainAPI() {
override fun load(url: String): LoadResponse { override fun load(url: String): LoadResponse {
val response = khttp.get(url) val response = khttp.get(url)
val document = Jsoup.parse(response.text) val document = Jsoup.parse(response.text)
var title = document?.selectFirst("h2.breadcrumbs-custom-title > a")?.text() ?: throw ErrorLoadingException("Service might be unavailable")
val metaInfo = document.select("div.post-info-meta > ul.post-info-meta-list > li") val metaInfo = document.select("div.post-info-meta > ul.post-info-meta-list > li")
val year = metaInfo?.get(0)?.selectFirst("> span.small-text")?.text()?.takeLast(4)?.toIntOrNull() val year = metaInfo?.get(0)?.selectFirst("> span.small-text")?.text()?.takeLast(4)?.toIntOrNull()
val rating = parseRating(metaInfo?.get(1)?.selectFirst("> span.small-text")?.text()?.replace("/ 10", "")) val rating = parseRating(metaInfo?.get(1)?.selectFirst("> span.small-text")?.text()?.replace("/ 10", ""))
@ -208,7 +210,6 @@ class TrailersToProvider : MainAPI() {
val trailer = metaInfo?.get(4)?.selectFirst("> a")?.attr("href") val trailer = metaInfo?.get(4)?.selectFirst("> a")?.attr("href")
val poster = document.selectFirst("div.slider-image > a > img").attr("src") val poster = document.selectFirst("div.slider-image > a > img").attr("src")
val descriptHeader = document.selectFirst("article.post-info") val descriptHeader = document.selectFirst("article.post-info")
var title = document.selectFirst("h2.breadcrumbs-custom-title > a").text()
title = title.substring(0, title.length - 6) // REMOVE YEAR title = title.substring(0, title.length - 6) // REMOVE YEAR
val descript = descriptHeader.select("> div > p").text() val descript = descriptHeader.select("> div > p").text()

View file

@ -11,6 +11,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
@ -106,7 +107,7 @@ class HomeFragment : Fragment() {
var currentMainList: ArrayList<SearchResponse> = ArrayList() var currentMainList: ArrayList<SearchResponse> = ArrayList()
private fun toggleMainVisibility(visible: Boolean) { private fun toggleMainVisibility(visible: Boolean) {
home_main_holder.visibility = if (visible) View.VISIBLE else View.GONE home_main_holder.isVisible = visible
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@ -314,7 +315,7 @@ class HomeFragment : Fragment() {
} }
observe(homeViewModel.bookmarks) { bookmarks -> observe(homeViewModel.bookmarks) { bookmarks ->
home_bookmarked_holder.visibility = if (bookmarks.isNotEmpty()) View.VISIBLE else View.GONE home_bookmarked_holder.isVisible = bookmarks.isNotEmpty()
(home_bookmarked_child_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList = bookmarks (home_bookmarked_child_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList = bookmarks
home_bookmarked_child_recyclerview?.adapter?.notifyDataSetChanged() home_bookmarked_child_recyclerview?.adapter?.notifyDataSetChanged()
@ -329,11 +330,11 @@ class HomeFragment : Fragment() {
} }
observe(homeViewModel.resumeWatching) { resumeWatching -> observe(homeViewModel.resumeWatching) { resumeWatching ->
home_watch_holder.visibility = if (resumeWatching.isNotEmpty()) View.VISIBLE else View.GONE home_watch_holder?.isVisible = resumeWatching.isNotEmpty()
(home_watch_child_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList = resumeWatching (home_watch_child_recyclerview?.adapter as HomeChildItemAdapter?)?.cardList = resumeWatching
home_watch_child_recyclerview?.adapter?.notifyDataSetChanged() home_watch_child_recyclerview?.adapter?.notifyDataSetChanged()
home_watch_child_more_info.setOnClickListener { home_watch_child_more_info?.setOnClickListener {
activity?.loadHomepageList( activity?.loadHomepageList(
HomePageList( HomePageList(
home_watch_parent_item_title?.text?.toString() ?: getString(R.string.continue_watching), home_watch_parent_item_title?.text?.toString() ?: getString(R.string.continue_watching),

View file

@ -21,6 +21,7 @@ import android.view.MotionEvent
import android.view.View import android.view.View
import android.view.View.* import android.view.View.*
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.animation.AccelerateInterpolator import android.view.animation.AccelerateInterpolator
import android.view.animation.AlphaAnimation import android.view.animation.AlphaAnimation
import android.view.animation.Animation import android.view.animation.Animation
@ -30,6 +31,7 @@ import android.widget.Toast.LENGTH_SHORT
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.view.isVisible
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
@ -304,11 +306,11 @@ class PlayerFragment : Fragment() {
if (event.rawX >= ctx.width / 2) { if (event.rawX >= ctx.width / 2) {
clicksRight++ clicksRight++
if (!ctx.isLocked && ctx.doubleTapEnabled) onDoubleClickRight(clicksRight) if (!ctx.isLocked && ctx.doubleTapEnabled) onDoubleClickRight(clicksRight)
if (!ctx.isShowing) onSingleClick() //if (!ctx.isShowing) onSingleClick()
} else { } else {
clicksLeft++ clicksLeft++
if (!ctx.isLocked && ctx.doubleTapEnabled) onDoubleClickLeft(clicksLeft) if (!ctx.isLocked && ctx.doubleTapEnabled) onDoubleClickLeft(clicksLeft)
if (!ctx.isShowing) onSingleClick() //if (!ctx.isShowing) onSingleClick()
} }
} else if (clicksLeft == 0 && clicksRight == 0 && fingerLeftScreen) { } else if (clicksLeft == 0 && clicksRight == 0 && fingerLeftScreen) {
// onSingleClick() // onSingleClick()
@ -325,8 +327,8 @@ class PlayerFragment : Fragment() {
onSingleClick() onSingleClick()
} }
} }
//ctx.isShowing &&
if (ctx.isShowing && !ctx.isLocked && ctx.doubleTapEnabled) { if (!ctx.isLocked && ctx.doubleTapEnabled) {
uiScope.launch { uiScope.launch {
delay(doubleClickQualificationSpanInMillis + 1) delay(doubleClickQualificationSpanInMillis + 1)
check() check()
@ -346,7 +348,7 @@ class PlayerFragment : Fragment() {
private fun onClickChange() { private fun onClickChange() {
isShowing = !isShowing isShowing = !isShowing
click_overlay?.visibility = if (isShowing) GONE else VISIBLE click_overlay?.isVisible = !isShowing
val titleMove = if (isShowing) 0f else -50.toPx.toFloat() val titleMove = if (isShowing) 0f else -50.toPx.toFloat()
ObjectAnimator.ofFloat(video_title, "translationY", titleMove).apply { ObjectAnimator.ofFloat(video_title, "translationY", titleMove).apply {
@ -382,10 +384,24 @@ class PlayerFragment : Fragment() {
} }
if (!isLocked) { if (!isLocked) {
player_ffwd_holder?.alpha = 1f
player_rew_holder?.alpha = 1f
player_pause_holder?.alpha = 1f
shadow_overlay?.startAnimation(fadeAnimation) shadow_overlay?.startAnimation(fadeAnimation)
player_ffwd_holder?.startAnimation(fadeAnimation)
player_rew_holder?.startAnimation(fadeAnimation)
player_pause_holder?.startAnimation(fadeAnimation)
} else {
//player_ffwd_holder?.alpha = 0f
//player_ffwd_holder?.alpha = 0f
//player_pause_holder?.alpha = 0f
} }
video_holder?.startAnimation(fadeAnimation)
player_torrent_info?.visibility = if (isTorrent && isShowing) VISIBLE else GONE bottom_player_bar.startAnimation(fadeAnimation)
player_top_holder.startAnimation(fadeAnimation)
// video_holder?.startAnimation(fadeAnimation)
player_torrent_info?.isVisible = (isTorrent && isShowing)
// player_torrent_info?.startAnimation(fadeAnimation) // player_torrent_info?.startAnimation(fadeAnimation)
//video_lock_holder?.startAnimation(fadeAnimation) //video_lock_holder?.startAnimation(fadeAnimation)
} }
@ -614,10 +630,6 @@ class PlayerFragment : Fragment() {
} }
} }
private fun View.setVis(visible: Boolean) {
this.visibility = if (visible) VISIBLE else GONE
}
fun changeSkip(position: Long? = null) { fun changeSkip(position: Long? = null) {
val data = localData val data = localData
@ -639,17 +651,17 @@ class PlayerFragment : Fragment() {
val isAnime = val isAnime =
data.isAnimeBased()//(data is AnimeLoadResponse && (data.type == TvType.Anime || data.type == TvType.ONA)) data.isAnimeBased()//(data is AnimeLoadResponse && (data.type == TvType.Anime || data.type == TvType.ONA))
skip_op?.setVis(isAnime && !nextEp) skip_op?.isVisible = (isAnime && !nextEp)
skip_episode?.setVis((!isAnime || nextEp) && hasNext) skip_episode?.isVisible = ((!isAnime || nextEp) && hasNext)
} else { } else {
val isAnime = data.isAnimeBased() val isAnime = data.isAnimeBased()
if (isAnime) { if (isAnime) {
skip_op?.setVis(true) skip_op?.isVisible = true
skip_episode?.setVis(false) skip_episode?.isVisible = false
} else { } else {
skip_episode?.setVis(data.isEpisodeBased()) skip_episode?.isVisible = data.isEpisodeBased()
skip_op?.setVis(false) skip_op?.isVisible = false
} }
} }
} }
@ -690,7 +702,7 @@ class PlayerFragment : Fragment() {
val alphaAnimation = AlphaAnimation(0f, 1f) val alphaAnimation = AlphaAnimation(0f, 1f)
alphaAnimation.duration = 100 alphaAnimation.duration = 100
alphaAnimation.fillAfter = true alphaAnimation.fillAfter = true
video_go_back_holder?.visibility = VISIBLE video_go_back_holder_holder?.visibility = VISIBLE
overlay_loading_skip_button?.visibility = VISIBLE overlay_loading_skip_button?.visibility = VISIBLE
loading_overlay?.startAnimation(alphaAnimation) loading_overlay?.startAnimation(alphaAnimation)
@ -798,6 +810,12 @@ class PlayerFragment : Fragment() {
resize_player.isClickable = isClick resize_player.isClickable = isClick
exo_progress.isEnabled = isClick exo_progress.isEnabled = isClick
player_media_route_button.isEnabled = isClick player_media_route_button.isEnabled = isClick
if (isClick) {
player_pause_holder.alpha = 1f
player_rew_holder.alpha = 1f
player_ffwd_holder.alpha = 1f
}
//video_go_back_holder2.isEnabled = isClick //video_go_back_holder2.isEnabled = isClick
// Clickable doesn't seem to work on com.google.android.exoplayer2.ui.DefaultTimeBar // Clickable doesn't seem to work on com.google.android.exoplayer2.ui.DefaultTimeBar
@ -973,6 +991,15 @@ class PlayerFragment : Fragment() {
navigationBarHeight = requireContext().getNavigationBarHeight() navigationBarHeight = requireContext().getNavigationBarHeight()
statusBarHeight = requireContext().getStatusBarHeight() statusBarHeight = requireContext().getStatusBarHeight()
/*player_pause_holder?.setOnClickListener {
if (this::exoPlayer.isInitialized) {
if (exoPlayer.isPlaying)
exoPlayer.pause()
else
exoPlayer.play()
}
}*/
if (activity?.isCastApiAvailable() == true && !isDownloadedFile) { if (activity?.isCastApiAvailable() == true && !isDownloadedFile) {
CastButtonFactory.setUpMediaRouteButton(activity, player_media_route_button) CastButtonFactory.setUpMediaRouteButton(activity, player_media_route_button)
val castContext = CastContext.getSharedInstance(requireContext()) val castContext = CastContext.getSharedInstance(requireContext())
@ -980,9 +1007,8 @@ class PlayerFragment : Fragment() {
if (castContext.castState != CastState.NO_DEVICES_AVAILABLE) player_media_route_button.visibility = VISIBLE if (castContext.castState != CastState.NO_DEVICES_AVAILABLE) player_media_route_button.visibility = VISIBLE
castContext.addCastStateListener { state -> castContext.addCastStateListener { state ->
if (player_media_route_button != null) { if (player_media_route_button != null) {
if (state == CastState.NO_DEVICES_AVAILABLE) player_media_route_button.visibility = GONE else { player_media_route_button.isVisible = state != CastState.NO_DEVICES_AVAILABLE
if (player_media_route_button.visibility == GONE) player_media_route_button.visibility = VISIBLE
}
if (state == CastState.CONNECTED) { if (state == CastState.CONNECTED) {
if (!this::exoPlayer.isInitialized) return@addCastStateListener if (!this::exoPlayer.isInitialized) return@addCastStateListener
val links = sortUrls(getUrls() ?: return@addCastStateListener) val links = sortUrls(getUrls() ?: return@addCastStateListener)
@ -1071,9 +1097,7 @@ class PlayerFragment : Fragment() {
GONE else VISIBLE GONE else VISIBLE
else VISIBLE else VISIBLE
player_media_route_button.isVisible = !isDownloadedFile
player_media_route_button.visibility =
if (isDownloadedFile) GONE else VISIBLE
if (savedInstanceState != null) { if (savedInstanceState != null) {
currentWindow = savedInstanceState.getInt(STATE_RESUME_WINDOW) currentWindow = savedInstanceState.getInt(STATE_RESUME_WINDOW)
playbackPosition = savedInstanceState.getLong(STATE_RESUME_POSITION) playbackPosition = savedInstanceState.getLong(STATE_RESUME_POSITION)
@ -1155,6 +1179,8 @@ class PlayerFragment : Fragment() {
exo_rew_text.text = getString(R.string.rew_text_regular_format).format(fastForwardTime) exo_rew_text.text = getString(R.string.rew_text_regular_format).format(fastForwardTime)
exo_ffwd_text.text = getString(R.string.ffw_text_regular_format).format(fastForwardTime) exo_ffwd_text.text = getString(R.string.ffw_text_regular_format).format(fastForwardTime)
fun rewind() { fun rewind() {
player_rew_holder.alpha = 1f
val rotateLeft = AnimationUtils.loadAnimation(context, R.anim.rotate_left) val rotateLeft = AnimationUtils.loadAnimation(context, R.anim.rotate_left)
exo_rew.startAnimation(rotateLeft) exo_rew.startAnimation(rotateLeft)
@ -1167,6 +1193,7 @@ class PlayerFragment : Fragment() {
override fun onAnimationEnd(animation: Animation?) { override fun onAnimationEnd(animation: Animation?) {
exo_rew_text.post { exo_rew_text.post {
exo_rew_text.text = getString(R.string.rew_text_regular_format).format(fastForwardTime) exo_rew_text.text = getString(R.string.rew_text_regular_format).format(fastForwardTime)
player_rew_holder.alpha = if (isShowing) 1f else 0f
} }
} }
}) })
@ -1180,6 +1207,7 @@ class PlayerFragment : Fragment() {
} }
fun fastForward() { fun fastForward() {
player_ffwd_holder.alpha = 1f
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)
@ -1192,6 +1220,7 @@ class PlayerFragment : Fragment() {
override fun onAnimationEnd(animation: Animation?) { override fun onAnimationEnd(animation: Animation?) {
exo_ffwd_text.post { exo_ffwd_text.post {
exo_ffwd_text.text = getString(R.string.ffw_text_regular_format).format(fastForwardTime) exo_ffwd_text.text = getString(R.string.ffw_text_regular_format).format(fastForwardTime)
player_ffwd_holder.alpha = if (isShowing) 1f else 0f
} }
} }
}) })
@ -1224,7 +1253,10 @@ class PlayerFragment : Fragment() {
fadeAnimation.fillAfter = true fadeAnimation.fillAfter = true
// MENUS // MENUS
centerMenu.startAnimation(fadeAnimation) //centerMenu.startAnimation(fadeAnimation)
player_pause_holder.startAnimation(fadeAnimation)
player_ffwd_holder.startAnimation(fadeAnimation)
player_rew_holder.startAnimation(fadeAnimation)
player_media_route_button.startAnimation(fadeAnimation) player_media_route_button.startAnimation(fadeAnimation)
//video_bar.startAnimation(fadeAnimation) //video_bar.startAnimation(fadeAnimation)
@ -1245,13 +1277,13 @@ class PlayerFragment : Fragment() {
override fun onDoubleClickRight(clicks: Int) { override fun onDoubleClickRight(clicks: Int) {
if (!isLocked) { if (!isLocked) {
fastForward() fastForward()
} } else onSingleClick()
} }
override fun onDoubleClickLeft(clicks: Int) { override fun onDoubleClickLeft(clicks: Int) {
if (!isLocked) { if (!isLocked) {
rewind() rewind()
} } else onSingleClick()
} }
override fun onSingleClick() { override fun onSingleClick() {
@ -1282,7 +1314,7 @@ class PlayerFragment : Fragment() {
activity?.popCurrentPage() activity?.popCurrentPage()
} }
playback_speed_btt.visibility = if (playBackSpeedEnabled) VISIBLE else GONE playback_speed_btt.isVisible = playBackSpeedEnabled
playback_speed_btt.setOnClickListener { playback_speed_btt.setOnClickListener {
val speedsText = listOf("0.5x", "0.75x", "1x", "1.25x", "1.5x", "1.75x", "2x") val speedsText = listOf("0.5x", "0.75x", "1x", "1.25x", "1.5x", "1.75x", "2x")
val speedsNumbers = listOf(0.5f, 0.75f, 1f, 1.25f, 1.5f, 1.75f, 2f) val speedsNumbers = listOf(0.5f, 0.75f, 1f, 1.25f, 1.5f, 1.75f, 2f)
@ -1565,6 +1597,7 @@ class PlayerFragment : Fragment() {
} }
override fun onDestroy() { override fun onDestroy() {
loading_overlay?.isVisible = false
savePos() savePos()
SubtitlesFragment.applyStyleEvent -= ::onSubStyleChanged SubtitlesFragment.applyStyleEvent -= ::onSubStyleChanged
@ -1665,8 +1698,8 @@ class PlayerFragment : Fragment() {
} }
// player_torrent_info?.visibility = if(isTorrent) VISIBLE else GONE // player_torrent_info?.visibility = if(isTorrent) VISIBLE else GONE
// //
isShowing = false isShowing = true
player_torrent_info?.visibility = GONE player_torrent_info?.isVisible = false
//player_torrent_info?.alpha = 0f //player_torrent_info?.alpha = 0f
println("LOADED: ${uri} or ${currentUrl}") println("LOADED: ${uri} or ${currentUrl}")
isCurrentlyPlaying = true isCurrentlyPlaying = true
@ -1810,7 +1843,7 @@ class PlayerFragment : Fragment() {
override fun onAnimationRepeat(animation: Animation?) {} override fun onAnimationRepeat(animation: Animation?) {}
override fun onAnimationEnd(animation: Animation?) { override fun onAnimationEnd(animation: Animation?) {
loading_overlay.post { video_go_back_holder.visibility = GONE; } loading_overlay.post { video_go_back_holder_holder.visibility = GONE; }
} }
}) })
overlay_loading_skip_button.visibility = GONE overlay_loading_skip_button.visibility = GONE
@ -1850,6 +1883,8 @@ class PlayerFragment : Fragment() {
} }
} }
player_view.performClick()
//TODO FIX //TODO FIX
video_title?.text = hName + video_title?.text = hName +
if (isEpisodeBased) if (isEpisodeBased)

View file

@ -224,6 +224,15 @@ class ResultViewModel : ViewModel() {
} }
} }
private fun filterName(name : String?) : String? {
if(name == null) return null
Regex("[eE]pisode [0-9]*(.*)").find(name)?.groupValues?.get(1)?.let {
if(it.isEmpty())
return null
}
return name
}
fun load(context: Context, url: String, apiName: String) = viewModelScope.launch { fun load(context: Context, url: String, apiName: String) = viewModelScope.launch {
_resultResponse.postValue(Resource.Loading(url)) _resultResponse.postValue(Resource.Loading(url))
@ -269,7 +278,7 @@ class ResultViewModel : ViewModel() {
for ((index, i) in dataList.withIndex()) { for ((index, i) in dataList.withIndex()) {
episodes.add( episodes.add(
context.buildResultEpisode( context.buildResultEpisode(
i.name, filterName(i.name),
i.posterUrl, i.posterUrl,
index + 1, //TODO MAKE ABLE TO NOT HAVE SOME EPISODE index + 1, //TODO MAKE ABLE TO NOT HAVE SOME EPISODE
null, // TODO FIX SEASON null, // TODO FIX SEASON
@ -291,7 +300,7 @@ class ResultViewModel : ViewModel() {
for ((index, i) in d.episodes.withIndex()) { for ((index, i) in d.episodes.withIndex()) {
episodes.add( episodes.add(
context.buildResultEpisode( context.buildResultEpisode(
i.name, filterName(i.name),
i.posterUrl, i.posterUrl,
i.episode ?: (index + 1), i.episode ?: (index + 1),
i.season, i.season,

View file

@ -118,6 +118,7 @@ object DataStoreHelper {
fun Context.setViewPos(id: Int?, pos: Long, dur: Long) { fun Context.setViewPos(id: Int?, pos: Long, dur: Long) {
if (id == null) return if (id == null) return
if(dur < 10_000) return // too short
setKey("$currentAccount/$VIDEO_POS_DUR", id.toString(), PosDur(pos, dur)) setKey("$currentAccount/$VIDEO_POS_DUR", id.toString(), PosDur(pos, dur))
} }

View file

@ -5,6 +5,7 @@ import android.content.Context
import android.view.View import android.view.View
import android.widget.* import android.widget.*
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.isVisible
import androidx.core.view.marginLeft import androidx.core.view.marginLeft
import androidx.core.view.marginRight import androidx.core.view.marginRight
import androidx.core.view.marginTop import androidx.core.view.marginTop
@ -31,7 +32,7 @@ object SingleSelectionHelper {
val cancelButton = dialog.findViewById<TextView>(R.id.cancel_btt)!! val cancelButton = dialog.findViewById<TextView>(R.id.cancel_btt)!!
val applyHolder = dialog.findViewById<LinearLayout>(R.id.apply_btt_holder)!! val applyHolder = dialog.findViewById<LinearLayout>(R.id.apply_btt_holder)!!
applyHolder.visibility = if (realShowApply) View.VISIBLE else View.GONE applyHolder.isVisible = realShowApply
if (!realShowApply) { if (!realShowApply) {
val params = listView.layoutParams as LinearLayout.LayoutParams val params = listView.layoutParams as LinearLayout.LayoutParams
params.setMargins(listView.marginLeft, listView.marginTop, listView.marginRight, 0) params.setMargins(listView.marginLeft, listView.marginTop, listView.marginRight, 0)

View file

@ -3,7 +3,8 @@
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" xmlns:tools="http://schemas.android.com/tools" android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal" android:orientation="horizontal"
android:keepScreenOn="true" android:keepScreenOn="true"
app:backgroundTint="@android:color/black" app:backgroundTint="@android:color/black"
@ -71,6 +72,7 @@
</ProgressBar> </ProgressBar>
<FrameLayout <FrameLayout
android:id="@+id/video_go_back_holder_holder"
android:layout_margin="5dp" android:layout_margin="5dp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"

View file

@ -109,118 +109,128 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:id="@+id/video_holder" android:id="@+id/video_holder"
> >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:gravity="center"
android:layout_marginTop="15dp"
android:textStyle="bold"
android:textColor="@color/white"
android:id="@+id/video_title"
tools:text="Hello world"
>
</TextView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
android:gravity="center"
android:layout_marginTop="0dp"
android:textColor="@color/white"
android:id="@+id/video_title_rez"
tools:text="1920x1080"
app:layout_constraintTop_toBottomOf="@+id/video_title">
</TextView>
<!--
<LinearLayout
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:gravity="end"
android:layout_margin="5dp"
android:paddingEnd="60dp"
android:paddingStart="60dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/topMenuRight"
>
<androidx.cardview.widget.CardView
android:id="@+id/next_episode_btt"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="150dp"
android:layout_height="40dp"
android:layout_margin="15dp"
card_view:cardCornerRadius="2dp"
android:foreground="@drawable/outline_card"
card_view:cardBackgroundColor="@color/black_overlay"
card_view:cardElevation="0dp"
>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/next_episode"
android:gravity="start|center"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:layout_gravity="center"
android:textColor="@android:color/white"
>
</TextView>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/exo_controls_next"
android:layout_gravity="right|center"
android:paddingEnd="10dp"
android:paddingStart="10dp"
tools:ignore="RtlHardcoded">
</ImageView>
</androidx.cardview.widget.CardView>
</LinearLayout>-->
<androidx.mediarouter.app.MediaRouteButton
android:layout_margin="5dp"
android:layout_gravity="center_vertical|end"
android:id="@+id/player_media_route_button"
android:layout_width="70dp"
android:layout_height="70dp"
android:mediaRouteTypes="user"
android:visibility="visible"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<FrameLayout <FrameLayout
android:id="@+id/video_go_back_holder2" android:id="@+id/player_top_holder"
android:layout_margin="5dp" android:layout_width="match_parent"
app:layout_constraintStart_toStartOf="parent" android:layout_height="match_parent">
app:layout_constraintTop_toTopOf="parent" <TextView
android:layout_width="wrap_content" android:layout_marginStart="80dp"
android:layout_height="wrap_content" android:layout_marginEnd="80dp"
> android:layout_width="match_parent"
<ImageView android:layout_height="wrap_content"
android:layout_width="30dp" app:layout_constraintTop_toTopOf="parent"
android:layout_height="30dp" app:layout_constraintLeft_toLeftOf="parent"
android:layout_gravity="center" android:gravity="center"
android:src="@drawable/ic_baseline_arrow_back_24" android:layout_marginTop="35dp"
app:tint="@android:color/white" android:textStyle="bold"
android:textColor="@color/white"
android:id="@+id/video_title"
tools:text="Hello world"
> >
</ImageView> </TextView>
<ImageView <TextView
android:id="@+id/video_go_back" android:layout_marginStart="80dp"
android:layout_marginEnd="80dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
android:gravity="center"
android:layout_marginTop="20dp"
android:textColor="@color/white"
android:id="@+id/video_title_rez"
tools:text="1920x1080"
app:layout_constraintTop_toBottomOf="@+id/video_title">
</TextView>
<!--
<LinearLayout
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:gravity="end"
android:layout_margin="5dp"
android:paddingEnd="60dp"
android:paddingStart="60dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/topMenuRight"
>
<androidx.cardview.widget.CardView
android:id="@+id/next_episode_btt"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="150dp"
android:layout_height="40dp"
android:layout_margin="15dp"
card_view:cardCornerRadius="2dp"
android:foreground="@drawable/outline_card"
card_view:cardBackgroundColor="@color/black_overlay"
card_view:cardElevation="0dp"
>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/next_episode"
android:gravity="start|center"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:layout_gravity="center"
android:textColor="@android:color/white"
>
</TextView>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/exo_controls_next"
android:layout_gravity="right|center"
android:paddingEnd="10dp"
android:paddingStart="10dp"
tools:ignore="RtlHardcoded">
</ImageView>
</androidx.cardview.widget.CardView>
</LinearLayout>-->
<androidx.mediarouter.app.MediaRouteButton
android:layout_margin="5dp"
android:layout_gravity="end"
android:id="@+id/player_media_route_button"
android:layout_width="70dp" android:layout_width="70dp"
android:layout_height="70dp" android:layout_height="70dp"
android:layout_gravity="center" android:mediaRouteTypes="user"
android:focusable="true" android:visibility="visible"
android:clickable="true" app:layout_constraintRight_toRightOf="parent"
android:background="@drawable/video_tap_button_always_white"> app:layout_constraintTop_toTopOf="parent"
</ImageView> />
<FrameLayout
android:id="@+id/video_go_back_holder2"
android:layout_margin="5dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center"
android:src="@drawable/ic_baseline_arrow_back_24"
app:tint="@android:color/white"
>
</ImageView>
<ImageView
android:id="@+id/video_go_back"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_gravity="center"
android:focusable="true"
android:clickable="true"
android:background="@drawable/video_tap_button_always_white">
</ImageView>
</FrameLayout>
</FrameLayout> </FrameLayout>
<LinearLayout
<androidx.constraintlayout.widget.ConstraintLayout
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
@ -233,9 +243,15 @@
android:id="@+id/centerMenu" android:id="@+id/centerMenu"
> >
<FrameLayout android:layout_width="wrap_content" <FrameLayout
android:layout_gravity="center_vertical" app:layout_constraintLeft_toLeftOf="parent"
android:layout_height="wrap_content" tools:ignore="RtlSymmetry"> app:layout_constraintRight_toRightOf="@id/player_pause_holder"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:id="@+id/player_rew_holder"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical|start"
android:layout_height="wrap_content">
<TextView <TextView
android:id="@+id/exo_rew_text" android:id="@+id/exo_rew_text"
android:textColor="@color/white" android:textColor="@color/white"
@ -260,38 +276,55 @@
android:src="@drawable/netflix_skip_back" android:src="@drawable/netflix_skip_back"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:tintMode="src_in" android:tintMode="src_in"
/> />
</FrameLayout> </FrameLayout>
<!-- style="@style/ExoMediaButton.Play" <!-- style="@style/ExoMediaButton.Play"
android:background="?android:selectableItemBackgroundBorderless" android:background="?android:selectableItemBackgroundBorderless"
--> -->
<ImageButton <FrameLayout
android:id="@id/exo_play" app:layout_constraintLeft_toLeftOf="@id/player_rew_holder"
android:scaleType="fitCenter" app:layout_constraintRight_toRightOf="@id/player_ffwd_holder"
android:layout_height="100dp" app:layout_constraintTop_toTopOf="parent"
android:layout_width="100dp" app:layout_constraintBottom_toBottomOf="parent"
android:layout_gravity="center" android:layout_gravity="center"
android:background="@drawable/video_tap_button_always_white" android:id="@+id/player_pause_holder"
android:foreground="@drawable/video_play"
android:clickable="true"
android:focusable="true"/>
<ImageButton
android:id="@id/exo_pause"
android:scaleType="fitCenter"
android:layout_height="100dp"
android:layout_width="100dp" android:layout_width="100dp"
android:layout_gravity="center" android:layout_height="100dp">
android:background="@drawable/video_tap_button_always_white" <ImageButton
android:foreground="@drawable/video_pause" android:id="@id/exo_play"
android:clickable="true" android:scaleType="fitCenter"
android:focusable="true"/> android:layout_height="70dp"
android:layout_width="70dp"
android:background="@drawable/video_tap_button"
android:layout_gravity="center"
android:src="@drawable/netflix_play"
android:clickable="true"
android:focusable="true"
/>
<ImageButton
android:id="@id/exo_pause"
android:scaleType="fitCenter"
android:layout_height="70dp"
android:layout_width="70dp"
android:background="@drawable/video_tap_button"
android:layout_gravity="center"
android:src="@drawable/netflix_pause"
android:clickable="true"
android:focusable="true"
/>
</FrameLayout>
<FrameLayout
<FrameLayout android:layout_width="wrap_content" app:layout_constraintLeft_toLeftOf="@id/player_pause_holder"
android:layout_gravity="center_vertical" app:layout_constraintRight_toRightOf="parent"
android:layout_height="wrap_content"> app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:id="@+id/player_ffwd_holder"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_height="wrap_content">
<TextView <TextView
tools:text="10" tools:text="10"
android:id="@+id/exo_ffwd_text" android:id="@+id/exo_ffwd_text"
@ -315,7 +348,7 @@
android:tintMode="src_in" android:tintMode="src_in"
/> />
</FrameLayout> </FrameLayout>
</LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout <LinearLayout
@ -374,8 +407,6 @@
android:orientation="horizontal" android:orientation="horizontal"
android:id="@+id/video_bar" android:id="@+id/video_bar"
> >
<TextView <TextView
tools:text="15:30" tools:text="15:30"
android:layout_marginStart="20dp" android:layout_marginStart="20dp"
@ -423,64 +454,18 @@
/> />
</LinearLayout> </LinearLayout>
<LinearLayout <HorizontalScrollView
android:layout_width="match_parent" android:layout_gravity="center"
android:layout_height="60dp" android:layout_width="wrap_content"
android:orientation="horizontal" android:layout_height="wrap_content">
android:gravity="center" <LinearLayout
android:paddingTop="10dp" android:layout_width="match_parent"
android:paddingBottom="10dp" android:layout_height="60dp"
> android:orientation="horizontal"
<androidx.cardview.widget.CardView android:gravity="center"
xmlns:card_view="http://schemas.android.com/apk/res-auto" android:paddingTop="10dp"
android:layout_width="wrap_content" android:paddingBottom="10dp"
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"
tools:visibility="gone"
> >
<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="@string/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>
<LinearLayout android:id="@+id/lock_holder" android:orientation="horizontal"
android:layout_width="wrap_content" android:layout_height="match_parent">
<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"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -492,8 +477,8 @@
card_view:cardCornerRadius="@dimen/card_corner_radius" card_view:cardCornerRadius="@dimen/card_corner_radius"
card_view:cardBackgroundColor="@color/transparent" card_view:cardBackgroundColor="@color/transparent"
android:foreground="?attr/selectableItemBackgroundBorderless" android:foreground="?attr/selectableItemBackgroundBorderless"
android:id="@+id/lock_player"
card_view:cardElevation="0dp" card_view:cardElevation="0dp"
android:id="@+id/resize_player"
tools:visibility="gone" tools:visibility="gone"
> >
<LinearLayout <LinearLayout
@ -504,9 +489,10 @@
android:paddingEnd="10dp" android:paddingEnd="10dp"
> >
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="30dp"
android:layout_height="match_parent" android:layout_height="30dp"
android:src="@drawable/ic_baseline_aspect_ratio_24" android:id="@+id/video_locked_img"
android:src="@drawable/video_locked"
app:tint="@android:color/white" app:tint="@android:color/white"
android:layout_gravity="center"> android:layout_gravity="center">
@ -514,221 +500,276 @@
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="@string/resize" android:text="@string/lock"
android:gravity="center" android:gravity="center"
android:paddingStart="10dp" android:paddingStart="10dp"
android:paddingEnd="10dp" android:paddingEnd="10dp"
android:textSize="10sp" android:textSize="10sp"
android:textStyle="bold" android:textStyle="bold"
android:layout_gravity="center" android:layout_gravity="center"
android:id="@+id/video_locked_text"
android:textColor="@android:color/white" android:textColor="@android:color/white"
> >
</TextView> </TextView>
</LinearLayout> </LinearLayout>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView <LinearLayout
android:id="@+id/lock_holder"
android:orientation="horizontal"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent">
android:layout_marginTop="5dp" <androidx.cardview.widget.CardView
android:layout_marginBottom="5dp" xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
app:cardCornerRadius="@dimen/card_corner_radius"
app:cardBackgroundColor="@color/transparent"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:id="@+id/playback_speed_btt"
app:cardElevation="0dp"
>
<LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="horizontal" android:layout_marginTop="5dp"
android:paddingStart="10dp" android:layout_marginBottom="5dp"
android:paddingEnd="10dp" android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
card_view:cardCornerRadius="@dimen/card_corner_radius"
card_view:cardBackgroundColor="@color/transparent"
android:foreground="?attr/selectableItemBackgroundBorderless"
card_view:cardElevation="0dp"
android:id="@+id/resize_player"
tools:visibility="gone"
> >
<ImageView <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:src="@drawable/ic_baseline_speed_24" android:orientation="horizontal"
app:tint="@android:color/white" android:paddingStart="10dp"
android:paddingEnd="10dp"
> >
<ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_baseline_aspect_ratio_24"
app:tint="@android:color/white"
android:layout_gravity="center">
</ImageView> </ImageView>
<TextView <TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/resize"
android:gravity="center"
android:paddingStart="10dp"
android:paddingEnd="10dp"
android:textSize="10sp"
android:textStyle="bold"
android:layout_gravity="center"
android:textColor="@android:color/white"
>
</TextView>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
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"
app:cardCornerRadius="@dimen/card_corner_radius"
app:cardBackgroundColor="@color/transparent"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:id="@+id/playback_speed_btt"
app:cardElevation="0dp"
>
<LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="Speed" android:orientation="horizontal"
android:gravity="center"
android:paddingStart="10dp" android:paddingStart="10dp"
android:paddingEnd="10dp" android:paddingEnd="10dp"
android:id="@+id/player_speed_text"
android:layout_gravity="center"
android:textSize="10sp"
android:textStyle="bold"
android:textColor="@android:color/white"
> >
</TextView> <ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_baseline_speed_24"
app:tint="@android:color/white"
>
</LinearLayout> </ImageView>
</androidx.cardview.widget.CardView> <TextView
<androidx.cardview.widget.CardView android:layout_width="wrap_content"
xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent"
android:layout_width="wrap_content" android:text="Speed"
android:layout_height="match_parent" android:gravity="center"
android:layout_marginTop="5dp" android:paddingStart="10dp"
android:layout_marginBottom="5dp" android:paddingEnd="10dp"
android:layout_marginStart="20dp" android:id="@+id/player_speed_text"
android:layout_marginEnd="20dp" android:layout_gravity="center"
card_view:cardCornerRadius="@dimen/card_corner_radius"
card_view:cardBackgroundColor="@color/transparent"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:id="@+id/sources_btt"
card_view:cardElevation="0dp"
> android:textSize="10sp"
<LinearLayout android:textStyle="bold"
android:textColor="@android:color/white"
>
</TextView>
</LinearLayout>
</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:orientation="horizontal" android:layout_marginTop="5dp"
android:paddingStart="10dp" android:layout_marginBottom="5dp"
android:paddingEnd="10dp" 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/sources_btt"
card_view:cardElevation="0dp"
> >
<ImageView <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:src="@drawable/ic_baseline_playlist_play_24" android:orientation="horizontal"
app:tint="@android:color/white"
android:layout_gravity="center">
</ImageView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/source"
android:gravity="center"
android:paddingStart="10dp" android:paddingStart="10dp"
android:textSize="10sp"
android:textStyle="bold"
android:paddingEnd="10dp" android:paddingEnd="10dp"
android:layout_gravity="center"
android:textColor="@android:color/white"
> >
</TextView> <ImageView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_baseline_playlist_play_24"
app:tint="@android:color/white"
android:layout_gravity="center">
</LinearLayout> </ImageView>
</androidx.cardview.widget.CardView> <TextView
<androidx.cardview.widget.CardView android:layout_width="match_parent"
xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent"
android:layout_width="wrap_content" android:text="@string/source"
android:layout_height="match_parent" android:gravity="center"
android:layout_marginTop="5dp" android:paddingStart="10dp"
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"
card_view:cardElevation="0dp"
android:id="@+id/skip_op" android:textSize="10sp"
> android:textStyle="bold"
<LinearLayout android:paddingEnd="10dp"
android:layout_gravity="center"
android:textColor="@android:color/white"
>
</TextView>
</LinearLayout>
</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:orientation="horizontal" android:layout_marginTop="5dp"
android:paddingStart="10dp" android:layout_marginBottom="5dp"
android:paddingEnd="10dp" android:layout_marginStart="20dp"
> android:layout_marginEnd="20dp"
<ImageView card_view:cardCornerRadius="@dimen/card_corner_radius"
android:layout_width="24dp" card_view:cardBackgroundColor="@color/transparent"
android:layout_height="match_parent" android:foreground="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/exo_controls_fastforward" card_view:cardElevation="0dp"
app:tint="@android:color/white"
android:layout_gravity="center">
</ImageView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/skip_op"
android:gravity="start|center"
android:paddingStart="10dp"
android:textSize="10sp" android:id="@+id/skip_op"
android:textStyle="bold" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingStart="10dp"
android:paddingEnd="10dp" android:paddingEnd="10dp"
android:layout_gravity="center"
android:textColor="@android:color/white"
> >
</TextView> <ImageView
</LinearLayout> android:layout_width="24dp"
</androidx.cardview.widget.CardView> android:layout_height="match_parent"
<androidx.cardview.widget.CardView android:src="@drawable/exo_controls_fastforward"
xmlns:card_view="http://schemas.android.com/apk/res-auto" app:tint="@android:color/white"
android:layout_width="wrap_content" android:layout_gravity="center">
android:layout_height="match_parent" </ImageView>
android:layout_marginTop="5dp" <TextView
android:layout_marginBottom="5dp" android:layout_width="match_parent"
android:layout_marginStart="20dp" android:layout_height="match_parent"
android:layout_marginEnd="20dp" android:text="@string/skip_op"
card_view:cardCornerRadius="@dimen/card_corner_radius" android:gravity="start|center"
card_view:cardBackgroundColor="@color/transparent" android:paddingStart="10dp"
android:foreground="?attr/selectableItemBackgroundBorderless"
card_view:cardElevation="0dp" android:textSize="10sp"
android:id="@+id/skip_episode" android:textStyle="bold"
> android:paddingEnd="10dp"
<LinearLayout android:layout_gravity="center"
android:textColor="@android:color/white"
>
</TextView>
</LinearLayout>
</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:orientation="horizontal" android:layout_marginTop="5dp"
android:paddingStart="10dp" android:layout_marginBottom="5dp"
android:paddingEnd="10dp" android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
card_view:cardCornerRadius="@dimen/card_corner_radius"
card_view:cardBackgroundColor="@color/transparent"
android:foreground="?attr/selectableItemBackgroundBorderless"
card_view:cardElevation="0dp"
android:id="@+id/skip_episode"
> >
<ImageView <LinearLayout
android:layout_width="24dp" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:src="@drawable/ic_baseline_skip_next_24" android:orientation="horizontal"
app:tint="@android:color/white"
android:layout_gravity="center">
</ImageView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/next_episode"
android:gravity="start|center"
android:paddingStart="10dp" android:paddingStart="10dp"
android:textSize="10sp"
android:textStyle="bold"
android:paddingEnd="10dp" android:paddingEnd="10dp"
android:layout_gravity="center"
android:textColor="@android:color/white"
> >
</TextView> <ImageView
</LinearLayout> android:layout_width="24dp"
</androidx.cardview.widget.CardView> android:layout_height="match_parent"
android:src="@drawable/ic_baseline_skip_next_24"
app:tint="@android:color/white"
android:layout_gravity="center">
</ImageView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/next_episode"
android:gravity="start|center"
android:paddingStart="10dp"
android:textSize="10sp"
android:textStyle="bold"
android:paddingEnd="10dp"
android:layout_gravity="center"
android:textColor="@android:color/white"
>
</TextView>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</LinearLayout> </LinearLayout>
</HorizontalScrollView>
</LinearLayout>
</LinearLayout> </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<View android:layout_width="match_parent" <View
android:layout_height="match_parent"
android:id="@+id/brightness_overlay" android:layout_width="match_parent"
android:background="@android:color/black" android:layout_height="match_parent"
android:alpha="0" android:id="@+id/brightness_overlay"
android:background="@android:color/black"
android:alpha="0"
/> />
<View android:layout_width="match_parent" <View
android:layout_height="match_parent" android:layout_width="match_parent"
android:id="@+id/click_overlay" android:layout_height="match_parent"
android:visibility="gone" android:id="@+id/click_overlay"
android:clickable="true" android:visibility="gone"
android:focusable="true" android:clickable="true"
android:focusable="true"
/> />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -772,10 +813,7 @@
android:layout_gravity="end|center_vertical" android:layout_gravity="end|center_vertical"
android:progress="100" android:progress="100"
android:progressDrawable="@drawable/progress_drawable_vertical" android:progressDrawable="@drawable/progress_drawable_vertical"
> />
</ProgressBar>
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"