Files
TachiyomiSY/app/src/main/java/exh/ui/metadata/MetadataViewAdapter.kt
T
Jobobby04 b93298c411 Add MangaDex only implementation of Mangadex Follows list
Add login dialog that pops up whenever you are not logged in when trying to browse MangaDex
Remove attempts at porting over chapter read history from older galleries to new ones
Disable latest for ExHentai, it was browse without buttons anyway
2020-09-11 23:12:13 -04:00

72 lines
2.5 KiB
Kotlin

package exh.ui.metadata
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import eu.kanade.tachiyomi.databinding.MetadataViewItemBinding
import eu.kanade.tachiyomi.util.system.copyToClipboard
import exh.util.floor
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
class MetadataViewAdapter(private var data: List<Pair<String, String>>) :
RecyclerView.Adapter<MetadataViewAdapter.ViewHolder>() {
private lateinit var binding: MetadataViewItemBinding
private val scope = CoroutineScope(Job() + Dispatchers.Main)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MetadataViewAdapter.ViewHolder {
binding = MetadataViewItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding.root)
}
fun update(data: List<Pair<String, String>>) {
this.data = data
notifyDataSetChanged()
}
// binds the data to the TextView in each cell
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(position)
}
// total number of cells
override fun getItemCount(): Int = data.size * 2
// stores and recycles views as they are scrolled off screen
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
private var dataPosition: Int? = null
fun bind(position: Int) {
if (data.isEmpty() || !binding.infoText.text.isNullOrBlank()) return
dataPosition = (position / 2F).floor()
binding.infoText.text = if (position % 2 == 0) data[dataPosition!!].first else data[dataPosition!!].second
binding.infoText.clicks()
.onEach {
itemView.context.copyToClipboard(data[dataPosition!!].second, data[dataPosition!!].second)
}
.launchIn(scope)
}
override fun equals(other: Any?): Boolean {
return dataPosition.hashCode() == other.hashCode()
}
override fun hashCode(): Int {
return dataPosition.hashCode()
}
}
override fun equals(other: Any?): Boolean {
return super.equals(other)
}
override fun hashCode(): Int {
return super.hashCode()
}
}