b93298c411
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
72 lines
2.5 KiB
Kotlin
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()
|
|
}
|
|
}
|