diff --git a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt
index a07ae2c2..c57b6c0f 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/MainActivity.kt
@@ -539,6 +539,10 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
val isTrueTv = isTrueTvSettings()
navView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv
navRailView.menu.findItem(R.id.navigation_library)?.isVisible = !isTrueTv
+
+ // Hide downloads on TV
+ navView.menu.findItem(R.id.navigation_downloads)?.isVisible = !isTrueTv
+ navRailView.menu.findItem(R.id.navigation_downloads)?.isVisible = !isTrueTv
}
}
@@ -1112,16 +1116,17 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
newLocalBinding.root.viewTreeObserver.addOnGlobalFocusChangeListener { _, newFocus ->
// println("refocus $oldFocus -> $newFocus")
try {
- val r = Rect(0,0,0,0)
+ val r = Rect(0, 0, 0, 0)
newFocus.getDrawingRect(r)
val x = r.centerX()
val y = r.centerY()
val dx = 0 //screenWidth / 2
val dy = screenHeight / 2
- val r2 = Rect(x-dx,y-dy,x+dx,y+dy)
+ val r2 = Rect(x - dx, y - dy, x + dx, y + dy)
newFocus.requestRectangleOnScreen(r2, false)
- // TvFocus.current =TvFocus.current.copy(y=y.toFloat())
- } catch (_ : Throwable) { }
+ // TvFocus.current =TvFocus.current.copy(y=y.toFloat())
+ } catch (_: Throwable) {
+ }
TvFocus.updateFocusView(newFocus)
/*var focus = newFocus
diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt
similarity index 79%
rename from app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt
rename to app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt
index 28ced48c..1a9549e1 100644
--- a/app/src/main/java/com/lagradost/cloudstream3/ui/AutofitRecyclerView.kt
+++ b/app/src/main/java/com/lagradost/cloudstream3/ui/CustomRecyclerViews.kt
@@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.ui
import android.content.Context
import android.util.AttributeSet
import android.view.View
+import androidx.core.view.children
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kotlin.math.abs
@@ -70,8 +71,8 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) :
val orientation = this.orientation
// fixes arabic by inverting left and right layout focus
- val correctDirection = if(this.isLayoutRTL) {
- when(direction) {
+ val correctDirection = if (this.isLayoutRTL) {
+ when (direction) {
View.FOCUS_RIGHT -> View.FOCUS_LEFT
View.FOCUS_LEFT -> View.FOCUS_RIGHT
else -> direction
@@ -83,12 +84,15 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) :
View.FOCUS_DOWN -> {
return spanCount
}
+
View.FOCUS_UP -> {
return -spanCount
}
+
View.FOCUS_RIGHT -> {
return 1
}
+
View.FOCUS_LEFT -> {
return -1
}
@@ -98,12 +102,15 @@ class GrdLayoutManager(val context: Context, _spanCount: Int) :
View.FOCUS_DOWN -> {
return 1
}
+
View.FOCUS_UP -> {
return -1
}
+
View.FOCUS_RIGHT -> {
return spanCount
}
+
View.FOCUS_LEFT -> {
return -spanCount
}
@@ -155,4 +162,32 @@ class AutofitRecyclerView @JvmOverloads constructor(context: Context, attrs: Att
layoutManager = manager
}
+}
+
+/**
+ * Recyclerview wherein the max item width or height is set by the biggest view to prevent inconsistent view sizes.
+ */
+class MaxRecyclerView(ctx: Context, attrs: AttributeSet) : RecyclerView(ctx, attrs) {
+ private var biggestObserved: Int = 0
+ private val orientation = LayoutManager.getProperties(context, attrs, 0, 0).orientation
+ private val isHorizontal = orientation == HORIZONTAL
+ private fun View.updateMaxSize() {
+ if (isHorizontal) {
+ this.minimumHeight = biggestObserved
+ } else {
+ this.minimumWidth = biggestObserved
+ }
+ }
+
+ override fun onChildAttachedToWindow(child: View) {
+ child.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED)
+ val observed = if (isHorizontal) child.measuredHeight else child.measuredWidth
+ if (observed > biggestObserved) {
+ biggestObserved = observed
+ children.forEach { it.updateMaxSize() }
+ } else {
+ child.updateMaxSize()
+ }
+ super.onChildAttachedToWindow(child)
+ }
}
\ No newline at end of file
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 be3de52b..c40d995b 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
@@ -177,7 +177,7 @@ class ResultFragmentTv : Fragment() {
isVisible = true
}
- this.animate().alpha(if (turnVisible) 1.0f else 0.0f).apply {
+ this.animate().alpha(if (turnVisible) 0.97f else 0.0f).apply {
duration = 200
interpolator = DecelerateInterpolator()
setListener(object : Animator.AnimatorListener {
@@ -294,9 +294,9 @@ class ResultFragmentTv : Fragment() {
toggleEpisodes(true)
binding?.apply {
val views = listOf(
+ resultDubSelection,
resultSeasonSelection,
resultRangeSelection,
- resultDubSelection,
resultEpisodes,
resultPlayTrailer,
)
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 b398b54e..6acf476a 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
@@ -518,7 +518,8 @@ class ResultViewModel2 : ViewModel() {
val episodeNumber = episodes[currentIndex].episode
if (episodeNumber < currentMin) {
currentMin = episodeNumber
- } else if (episodeNumber > currentMax) {
+ }
+ if (episodeNumber > currentMax) {
currentMax = episodeNumber
}
++currentIndex
diff --git a/app/src/main/res/drawable/episodes_shadow.xml b/app/src/main/res/drawable/episodes_shadow.xml
index b4cdd382..a77cbf25 100644
--- a/app/src/main/res/drawable/episodes_shadow.xml
+++ b/app/src/main/res/drawable/episodes_shadow.xml
@@ -1,6 +1,8 @@
+ android:centerColor="?attr/primaryBlackBackground"
+ android:centerX="0.2"
+ android:endColor="?attr/primaryBlackBackground"
+ android:startColor="@color/transparent" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_result_tv.xml b/app/src/main/res/layout/fragment_result_tv.xml
index 4d236d78..a143fbda 100644
--- a/app/src/main/res/layout/fragment_result_tv.xml
+++ b/app/src/main/res/layout/fragment_result_tv.xml
@@ -535,129 +535,150 @@ https://developer.android.com/design/ui/tv/samples/jet-fit
-
-
-
-
-
-
-
-
-
-
-
-
-
+ tools:visibility="visible">
-
+
- style="@style/Widget.AppCompat.ProgressBar"
- android:layout_gravity="center"
- android:layout_width="50dp"
- android:layout_height="50dp" />-->
+
+
-
-
-
-
+ android:focusableInTouchMode="false"
+ android:importantForAccessibility="no"
+ android:src="@drawable/episodes_shadow"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="@+id/shadow_space_2"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-