Be extra careful and handle null in getItemViewType and other minor cleanup

This commit is contained in:
Luna712 2024-06-20 16:58:26 -06:00 committed by GitHub
parent f3d775ee21
commit 6588f2c33e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 31 deletions

View file

@ -26,17 +26,17 @@ const val DOWNLOAD_ACTION_PAUSE_DOWNLOAD = 3
const val DOWNLOAD_ACTION_DOWNLOAD = 4
const val DOWNLOAD_ACTION_LONG_CLICK = 5
abstract class VisualDownloadCachedAbstract(
abstract class VisualDownloadCached(
open val currentBytes: Long,
open val totalBytes: Long,
open val data: VideoDownloadHelper.DownloadCachedAbstract
open val data: VideoDownloadHelper.DownloadCached
)
data class VisualDownloadChildCached(
override val currentBytes: Long,
override val totalBytes: Long,
override val data: VideoDownloadHelper.DownloadEpisodeCached,
): VisualDownloadCachedAbstract(currentBytes, totalBytes, data)
): VisualDownloadCached(currentBytes, totalBytes, data)
data class VisualDownloadHeaderCached(
override val currentBytes: Long,
@ -45,7 +45,7 @@ data class VisualDownloadHeaderCached(
val child: VideoDownloadHelper.DownloadEpisodeCached?,
val currentOngoingDownloads: Int,
val totalDownloads: Int,
): VisualDownloadCachedAbstract(currentBytes, totalBytes, data)
): VisualDownloadCached(currentBytes, totalBytes, data)
data class DownloadClickEvent(
val action: Int,
@ -58,9 +58,9 @@ data class DownloadHeaderClickEvent(
)
class DownloadAdapter(
var cardList: List<VisualDownloadCachedAbstract>,
var cardList: List<VisualDownloadCached>,
private val clickCallback: (DownloadHeaderClickEvent) -> Unit,
private val movieClickCallback: (DownloadClickEvent) -> Unit,
private val mediaClickCallback: (DownloadClickEvent) -> Unit,
) : RecyclerView.Adapter<DownloadAdapter.DownloadViewHolder>() {
companion object {
@ -71,20 +71,11 @@ class DownloadAdapter(
inner class DownloadViewHolder(
private val binding: ViewBinding,
private val clickCallback: (DownloadHeaderClickEvent) -> Unit,
private val movieClickCallback: (DownloadClickEvent) -> Unit,
private val mediaClickCallback: (DownloadClickEvent) -> Unit,
) : RecyclerView.ViewHolder(binding.root) {
/* private val poster: ImageView? = itemView.download_header_poster
private val title: TextView = itemView.download_header_title
private val extraInfo: TextView = itemView.download_header_info
private val holder: CardView = itemView.episode_holder
private val downloadBar: ContentLoadingProgressBar = itemView.download_header_progress_downloaded
private val downloadImage: ImageView = itemView.download_header_episode_download
private val normalImage: ImageView = itemView.download_header_goto_child */
@SuppressLint("SetTextI18n")
fun bind(card: VisualDownloadCachedAbstract?) {
fun bind(card: VisualDownloadCached?) {
when (binding) {
is DownloadHeaderEpisodeBinding -> binding.apply {
if (card == null || card !is VisualDownloadHeaderCached) return@apply
@ -106,11 +97,7 @@ class DownloadAdapter(
// downloadHeaderEpisodeDownload.visibility = View.VISIBLE
downloadHeaderGotoChild.visibility = View.GONE
downloadButton.setDefaultClickListener(
card.child,
downloadHeaderInfo,
movieClickCallback
)
downloadButton.setDefaultClickListener(card.child, downloadHeaderInfo, mediaClickCallback)
downloadButton.isVisible = true
/* setUpButton(
card.currentBytes,
@ -119,11 +106,11 @@ class DownloadAdapter(
downloadImage,
extraInfo,
card.child,
movieClickCallback
mediaClickCallback
) */
episodeHolder.setOnClickListener {
movieClickCallback.invoke(
mediaClickCallback.invoke(
DownloadClickEvent(
DOWNLOAD_ACTION_PLAY_FILE,
card.child
@ -174,7 +161,7 @@ class DownloadAdapter(
} else visibility = View.GONE
}
downloadButton.setDefaultClickListener(card.data, downloadChildEpisodeTextExtra, movieClickCallback)
downloadButton.setDefaultClickListener(card.data, downloadChildEpisodeTextExtra, mediaClickCallback)
downloadChildEpisodeText.apply {
text = context.getNameFull(d.name, d.episode, d.season)
@ -182,7 +169,7 @@ class DownloadAdapter(
}
downloadChildEpisodeHolder.setOnClickListener {
movieClickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, d))
mediaClickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, d))
}
}
}
@ -209,7 +196,7 @@ class DownloadAdapter(
else -> throw IllegalArgumentException("Invalid view type")
},
clickCallback,
movieClickCallback
mediaClickCallback
)
override fun onBindViewHolder(holder: DownloadViewHolder, position: Int) {
@ -221,7 +208,9 @@ class DownloadAdapter(
override fun getItemViewType(position: Int): Int {
if (viewType != 0) return viewType
val isChildView = cardList[position] !is VisualDownloadHeaderCached
val card = cardList.getOrNull(position) ?: return 0
val isChildView = card is VisualDownloadChildCached
return if (isChildView) VIEW_TYPE_CHILD else VIEW_TYPE_HEADER
}

View file

@ -3,7 +3,7 @@ package com.lagradost.cloudstream3.utils
import com.fasterxml.jackson.annotation.JsonProperty
import com.lagradost.cloudstream3.TvType
object VideoDownloadHelper {
abstract class DownloadCachedAbstract(
abstract class DownloadCached(
@JsonProperty("id") open val id: Int,
)
@ -17,7 +17,7 @@ object VideoDownloadHelper {
@JsonProperty("description") val description: String?,
@JsonProperty("cacheTime") val cacheTime: Long,
override val id: Int,
): DownloadCachedAbstract(id)
): DownloadCached(id)
data class DownloadHeaderCached(
@JsonProperty("apiName") val apiName: String,
@ -27,7 +27,7 @@ object VideoDownloadHelper {
@JsonProperty("poster") val poster: String?,
@JsonProperty("cacheTime") val cacheTime: Long,
override val id: Int,
): DownloadCachedAbstract(id)
): DownloadCached(id)
data class ResumeWatching(
@JsonProperty("parentId") val parentId: Int,