PolyBooks/sdp_polyBooks

View on GitHub
app/src/main/java/com/github/polybooks/adapter/database/SalesAdapter.kt

Summary

Maintainability
A
1 hr
Test Coverage
A
92%
package com.github.polybooks.adapter.database

import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.github.polybooks.R
import com.github.polybooks.activities.SaleInformationActivity
import com.github.polybooks.core.Sale
import com.github.polybooks.utils.StringsManip

/**
 * Adapter for listing Sale via RecyclerView
 * @property salesList List of sales
 */
class SalesAdapter(var salesList: List<Sale>): RecyclerView.Adapter<SalesAdapter.SalesViewHolder>() {
    class SalesViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
        val viewTitle: TextView = itemView.findViewById(R.id.text_view_title)
        val viewEdition: TextView = itemView.findViewById(R.id.text_view_edition)
        val viewBy: TextView = itemView.findViewById(R.id.text_view_by)
        val viewAuthor: TextView = itemView.findViewById(R.id.text_view_author)
        val viewCondition: TextView = itemView.findViewById(R.id.text_view_condition)
        val viewPrice: TextView = itemView.findViewById(R.id.text_view_price)
    }

    private fun onClickCardView(view: View, sale: Sale) {
        val intent = Intent(view.context, SaleInformationActivity::class.java).apply {
            putExtra(SaleInformationActivity.EXTRA_SALE_INFORMATION, sale)
        }
        view.context.startActivity(intent)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SalesViewHolder {
        val v: View = LayoutInflater.from(parent.context).inflate(R.layout.sale_item, parent, false)
        return SalesViewHolder(v)
    }

    override fun onBindViewHolder(holder: SalesViewHolder, position: Int) {
        val sale: Sale = salesList[position]

        holder.viewTitle.text = sale.book.title

        if (sale.book.edition != null) holder.viewEdition.text = sale.book.edition
        else holder.viewEdition.visibility = View.GONE

        if (sale.book.authors?.isEmpty() != false) {
            holder.viewBy.visibility = View.GONE
            holder.viewAuthor.visibility = View.GONE
        } else {
            holder.viewAuthor.text = StringsManip.listAuthorsToString(sale.book.authors)
        }

        holder.viewCondition.text = sale.condition.name
        holder.viewPrice.text = String.format("%.2f", sale.price)

        holder.itemView.setOnClickListener { v -> onClickCardView(v, sale) }
    }

    override fun getItemCount(): Int {
        return salesList.size
    }
}