DrawYourPath/DrawYourPath

View on GitHub
app/src/main/java/com/epfl/drawyourpath/challenge/trophy/TrophyViewAdapter.kt

Summary

Maintainability
A
1 hr
Test Coverage
A
100%
package com.epfl.drawyourpath.challenge.trophy

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.epfl.drawyourpath.R
import com.epfl.drawyourpath.utils.Utils

/**
 * used in a recycler view to display the list of [Trophy]
 */
class TrophyViewAdapter : RecyclerView.Adapter<TrophyViewAdapter.ViewHolder>() {

    private var trophies: List<Trophy> = listOf()

    /**
     * Custom view holder using a custom layout for tournaments
     */
    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val name: TextView
        val description: TextView
        val date: TextView
        val rank: TextView
        val image: ImageView
        val context: Context

        init {
            // Define click listener for the ViewHolder's View
            name = view.findViewById(R.id.trophy_name_display_text)
            description = view.findViewById(R.id.trophy_description_display_text)
            date = view.findViewById(R.id.trophy_date_display_text)
            rank = view.findViewById(R.id.trophy_rank_display_text)
            image = view.findViewById(R.id.trophy_image)
            context = view.context
        }
    }

    // Create new views (invoked by the layout manager)
    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
        // Create a new view, which defines the UI of the list item
        val view = LayoutInflater.from(viewGroup.context)
            .inflate(R.layout.display_list_trophy, viewGroup, false)

        return ViewHolder(view)
    }

    // Replace the contents of a view (invoked by the layout manager)
    override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
        viewHolder.name.text = trophies[position].tournamentName
        viewHolder.description.text = trophies[position].tournamentDescription
        viewHolder.date.text = viewHolder.context.getString(R.string.acquired).format(Utils.getDateAsString(trophies[position].date))
        viewHolder.rank.text = trophies[position].ranking.toString().let { "#$it" }
        viewHolder.image.setImageResource(trophies[position].drawable)
    }

    // Return the size of the dataset (invoked by the layout manager)
    override fun getItemCount() = trophies.count()

    fun update(trophies: List<Trophy>) {
        this.trophies = trophies
        notifyItemRangeChanged(0, trophies.size)
    }
}