app/src/main/java/com/github/ybecker/epforuml/basicEntities/answers/SavedAnswerAdapter.kt
package com.github.ybecker.epforuml.basicEntities.answers
import android.app.Activity
import android.graphics.PorterDuff
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.github.ybecker.epforuml.R
import com.github.ybecker.epforuml.database.Model
import com.github.ybecker.epforuml.features.latex.MathView
//import katex.hourglass.`in`.mathlib.MathView
import java.util.concurrent.CompletableFuture
import kotlin.coroutines.coroutineContext
import kotlin.random.Random
class SavedAnswerAdapter(private val question: Model.Question,
private val answerList : List<Model.Answer>,
private val userList : List<Model.User>,
private val anonymousUsernameMap : HashMap<String, String>,
private val mainActivity: Activity
)
: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
private const val HEADER_ITEM_TYPE = 0
private const val CLASSIC_ITEM_TYPE = 1
private const val HEADER_ITEM_COUNT = 1
private const val HEADER_ITEM_POSITION = 0
}
private val questionAnswers = answerList.filter{
it.questionId == question.questionId
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
HEADER_ITEM_TYPE -> {
HeaderViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.question_details_header_item, parent, false))
}
else -> {
AnswerViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.question_details_answer_item, parent, false))
}
}
}
override fun getItemCount(): Int {
return questionAnswers.size + HEADER_ITEM_COUNT
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is HeaderViewHolder -> {
holder.headerText.setDisplayText(question.questionText)
}
is AnswerViewHolder -> {
val currentAnswerItem = questionAnswers[position-1]
holder.answerText.setDisplayText(currentAnswerItem.answerText)
holder.username.text = currentAnswerItem.userId
val like = holder.itemView.findViewById<ImageButton>(R.id.likeButton)
like.setColorFilter(ContextCompat.getColor(holder.itemView.context,
R.color.light_gray
), PorterDuff.Mode.SRC_IN)
var answerUserUsername : String? = null
val list = userList.filter { it.userId == currentAnswerItem.userId }
if (list.isNotEmpty()) {
answerUserUsername = list[0].username
} else {
answerUserUsername = R.string.unknownUser.toString()
}
//if the question is not anonymous write the real username
if(!question.isAnonymous) {
holder.username.text = answerUserUsername
} else {
holder.username.text = "Anonymous user"
}
}
}
}
override fun getItemViewType(position: Int): Int {
if (position == HEADER_ITEM_POSITION) {
return HEADER_ITEM_TYPE
}
return CLASSIC_ITEM_TYPE
}
class HeaderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val headerText : MathView = itemView.findViewById(R.id.qdetails_question_content)
}
class AnswerViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
val username : TextView = itemView.findViewById(R.id.qdetails_answer_username)
val answerText : MathView = itemView.findViewById(R.id.qdetails_answer_text)
}
}