AquaStream/app/src/main/java/com/lagradost/cloudstream3/ui/settings/extensions/PluginAdapter.kt

103 lines
3.3 KiB
Kotlin
Raw Normal View History

2022-08-06 23:43:39 +00:00
package com.lagradost.cloudstream3.ui.settings.extensions
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
2022-08-07 21:11:13 +00:00
import androidx.recyclerview.widget.DiffUtil
2022-08-06 23:43:39 +00:00
import androidx.recyclerview.widget.RecyclerView
2022-08-08 18:52:03 +00:00
import com.lagradost.cloudstream3.PROVIDER_STATUS_DOWN
2022-08-06 23:43:39 +00:00
import com.lagradost.cloudstream3.R
import kotlinx.android.synthetic.main.repository_item.view.*
2022-08-07 21:11:13 +00:00
data class PluginViewData(
val plugin: Plugin,
val isDownloaded: Boolean,
)
2022-08-06 23:43:39 +00:00
class PluginAdapter(
2022-08-07 21:11:13 +00:00
val iconClickCallback: (Plugin) -> Unit
2022-08-06 23:43:39 +00:00
) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
2022-08-07 21:11:13 +00:00
private val plugins: MutableList<PluginViewData> = mutableListOf()
2022-08-06 23:43:39 +00:00
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return PluginViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.repository_item, parent, false)
)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is PluginViewHolder -> {
2022-08-07 21:11:13 +00:00
holder.bind(plugins[position])
2022-08-06 23:43:39 +00:00
}
}
}
override fun getItemCount(): Int {
return plugins.size
}
2022-08-07 21:11:13 +00:00
fun updateList(newList: List<PluginViewData>) {
val diffResult = DiffUtil.calculateDiff(
PluginDiffCallback(this.plugins, newList)
)
plugins.clear()
plugins.addAll(newList)
diffResult.dispatchUpdatesTo(this)
}
/*
2022-08-06 23:43:39 +00:00
private var storedPlugins: Array<PluginData> = reloadStoredPlugins()
2022-08-07 21:11:13 +00:00
private fun reloadStoredPlugins(): Array<PluginData> {
2022-08-06 23:43:39 +00:00
return PluginManager.getPluginsOnline().also { storedPlugins = it }
2022-08-07 21:11:13 +00:00
}*/
2022-08-06 23:43:39 +00:00
inner class PluginViewHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
fun bind(
2022-08-07 21:11:13 +00:00
data: PluginViewData,
2022-08-06 23:43:39 +00:00
) {
2022-08-07 21:11:13 +00:00
val metadata = data.plugin.second
2022-08-08 18:52:03 +00:00
val alpha = if (metadata.status == PROVIDER_STATUS_DOWN) 0.6f else 1f
itemView.main_text?.alpha = alpha
itemView.sub_text?.alpha = alpha
2022-08-06 23:43:39 +00:00
2022-08-07 21:11:13 +00:00
val drawableInt = if (data.isDownloaded)
2022-08-06 23:43:39 +00:00
R.drawable.ic_baseline_delete_outline_24
else R.drawable.netflix_download
2022-08-09 15:19:26 +00:00
itemView.nsfw_marker?.isVisible = metadata.adult == true
itemView.action_button?.setImageResource(drawableInt)
2022-08-06 23:43:39 +00:00
itemView.action_button?.setOnClickListener {
2022-08-07 21:11:13 +00:00
iconClickCallback.invoke(data.plugin)
2022-08-06 23:43:39 +00:00
}
2022-08-07 21:11:13 +00:00
itemView.main_text?.text = metadata.name
itemView.sub_text?.text = metadata.description
2022-08-06 23:43:39 +00:00
}
}
2022-08-07 21:11:13 +00:00
}
class PluginDiffCallback(
private val oldList: List<PluginViewData>,
private val newList: List<PluginViewData>
) :
DiffUtil.Callback() {
override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int) =
oldList[oldItemPosition].plugin.second.internalName == newList[newItemPosition].plugin.second.internalName && oldList[oldItemPosition].plugin.first == newList[newItemPosition].plugin.first
override fun getOldListSize() = oldList.size
override fun getNewListSize() = newList.size
override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int) =
oldList[oldItemPosition] == newList[newItemPosition]
2022-08-06 23:43:39 +00:00
}