howlongtobeat-android/app/src/main/java/be/kuleuven/howlongtobeat/HltbResultsAdapter.kt

58 lines
2.0 KiB
Kotlin

package be.kuleuven.howlongtobeat
import android.graphics.Bitmap
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.findFragment
import androidx.recyclerview.widget.RecyclerView
import be.kuleuven.howlongtobeat.hltb.HowLongToBeatResult
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class HltbResultsAdapter(private val items: List<HowLongToBeatResult>) : RecyclerView.Adapter<HltbResultsAdapter.HltbResultsViewHolder>() {
inner class HltbResultsViewHolder(currentItemView: View) : RecyclerView.ViewHolder(currentItemView)
private lateinit var parentFragment: HltbResultsFragment
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HltbResultsViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_hltbresult, parent, false)
parentFragment = parent.findFragment()
return HltbResultsViewHolder(view)
}
override fun onBindViewHolder(holder: HltbResultsViewHolder, position: Int) {
val itm = items[position]
holder.itemView.apply {
setOnClickListener {
parentFragment.addResultToGameLibrary(itm)
}
findViewById<TextView>(R.id.txtHltbItemResult).text = itm.toString()
val boxArtView = findViewById<ImageView>(R.id.imgHltbItemResult)
if(itm.hasBoxart()) {
MainScope().launch{
var art: Bitmap? = null
withContext(Dispatchers.IO) {
art = itm.boxartUrl().downloadAsImage()
}
withContext(Dispatchers.Main) {
boxArtView.setImageBitmap(art)
}
}
} else {
boxArtView.visibility = View.INVISIBLE
}
}
}
override fun getItemCount(): Int = items.size
}