mirror of
https://github.com/rebelonion/Dantotsu.git
synced 2026-01-21 02:03:58 +00:00
125 lines
4.5 KiB
Kotlin
125 lines
4.5 KiB
Kotlin
package ani.dantotsu.media
|
|
|
|
|
|
import android.view.View
|
|
import ani.dantotsu.R
|
|
import ani.dantotsu.connections.anilist.Anilist
|
|
import ani.dantotsu.connections.anilist.api.Query
|
|
import ani.dantotsu.databinding.ItemReviewsBinding
|
|
import ani.dantotsu.loadImage
|
|
import ani.dantotsu.profile.activity.ActivityItemBuilder
|
|
import ani.dantotsu.toast
|
|
import com.xwray.groupie.viewbinding.BindableItem
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.SupervisorJob
|
|
import kotlinx.coroutines.launch
|
|
import kotlinx.coroutines.withContext
|
|
|
|
class ReviewAdapter(
|
|
private var review: Query.Review,
|
|
val clickCallback: (Int) -> Unit
|
|
) : BindableItem<ItemReviewsBinding>() {
|
|
private lateinit var binding: ItemReviewsBinding
|
|
|
|
override fun bind(viewBinding: ItemReviewsBinding, position: Int) {
|
|
binding = viewBinding
|
|
binding.reviewUserName.text = review.user?.name
|
|
binding.reviewUserAvatar.loadImage(review.user?.avatar?.medium)
|
|
binding.reviewText.text = review.summary
|
|
binding.reviewPostTime.text = ActivityItemBuilder.getDateTime(review.createdAt)
|
|
val text = "[${review.score/ 10.0f}]"
|
|
binding.reviewTag.text = text
|
|
binding.root.setOnClickListener { clickCallback(review.id) }
|
|
userVote(review.userRating)
|
|
enableVote()
|
|
binding.reviewTotalVotes.text = review.rating.toString()
|
|
}
|
|
|
|
override fun getLayout(): Int {
|
|
return R.layout.item_reviews
|
|
}
|
|
|
|
override fun initializeViewBinding(view: View): ItemReviewsBinding {
|
|
return ItemReviewsBinding.bind(view)
|
|
}
|
|
private fun userVote(type: String) {
|
|
when (type) {
|
|
"NO_VOTE" -> {
|
|
binding.reviewUpVote.setImageResource(R.drawable.ic_round_upvote_inactive_24)
|
|
binding.reviewDownVote.setImageResource(R.drawable.ic_round_upvote_inactive_24)
|
|
binding.reviewUpVote.alpha = 0.6f
|
|
binding.reviewDownVote.alpha = 0.6f
|
|
}
|
|
|
|
"UP_VOTE" -> {
|
|
binding.reviewUpVote.setImageResource(R.drawable.ic_round_upvote_active_24)
|
|
binding.reviewDownVote.setImageResource(R.drawable.ic_round_upvote_inactive_24)
|
|
binding.reviewUpVote.alpha = 1f
|
|
binding.reviewDownVote.alpha = 0.6f
|
|
}
|
|
|
|
"DOWN_VOTE" -> {
|
|
binding.reviewUpVote.setImageResource(R.drawable.ic_round_upvote_inactive_24)
|
|
binding.reviewDownVote.setImageResource(R.drawable.ic_round_upvote_active_24)
|
|
binding.reviewDownVote.alpha = 1f
|
|
binding.reviewUpVote.alpha = 0.6f
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun rateReview(rating: String) {
|
|
disableVote()
|
|
val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
|
|
scope.launch {
|
|
val result = Anilist.mutation.rateReview(review.id, rating)
|
|
if (result != null) {
|
|
withContext(Dispatchers.Main) {
|
|
val res = result.data.rateReview
|
|
review.rating = res.rating
|
|
review.ratingAmount = res.ratingAmount
|
|
review.userRating = res.userRating
|
|
userVote(review.userRating)
|
|
binding.reviewTotalVotes.text = review.rating.toString()
|
|
userVote(review.userRating)
|
|
enableVote()
|
|
}
|
|
} else {
|
|
withContext(Dispatchers.Main) {
|
|
toast(
|
|
binding.root.context.getString(R.string.error_message, "response is null")
|
|
)
|
|
enableVote()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun disableVote() {
|
|
binding.reviewUpVote.setOnClickListener(null)
|
|
binding.reviewDownVote.setOnClickListener(null)
|
|
binding.reviewUpVote.isEnabled = false
|
|
binding.reviewDownVote.isEnabled = false
|
|
}
|
|
|
|
private fun enableVote() {
|
|
binding.reviewUpVote.setOnClickListener {
|
|
if (review.userRating == "UP_VOTE") {
|
|
rateReview("NO_VOTE")
|
|
} else {
|
|
rateReview("UP_VOTE")
|
|
}
|
|
disableVote()
|
|
}
|
|
binding.reviewDownVote.setOnClickListener {
|
|
if (review.userRating == "DOWN_VOTE") {
|
|
rateReview("NO_VOTE")
|
|
} else {
|
|
rateReview("DOWN_VOTE")
|
|
}
|
|
disableVote()
|
|
}
|
|
binding.reviewUpVote.isEnabled = true
|
|
binding.reviewDownVote.isEnabled = true
|
|
}
|
|
} |