Show the comment and reply count in the comments sheet

This commit is contained in:
Bnyro 2023-06-27 21:57:35 +02:00
parent fb1ff597be
commit 119019825f
4 changed files with 23 additions and 20 deletions

View File

@ -6,5 +6,6 @@ import kotlinx.serialization.Serializable
data class CommentsPage( data class CommentsPage(
var comments: List<Comment> = emptyList(), var comments: List<Comment> = emptyList(),
val disabled: Boolean = false, val disabled: Boolean = false,
val nextpage: String? = null val nextpage: String? = null,
val commentCount: Long = 0
) )

View File

@ -10,6 +10,7 @@ import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.databinding.FragmentCommentsBinding import com.github.libretube.databinding.FragmentCommentsBinding
import com.github.libretube.extensions.formatShort
import com.github.libretube.ui.adapters.CommentsAdapter import com.github.libretube.ui.adapters.CommentsAdapter
import com.github.libretube.ui.models.CommentsViewModel import com.github.libretube.ui.models.CommentsViewModel
import com.github.libretube.ui.sheets.CommentsSheet import com.github.libretube.ui.sheets.CommentsSheet
@ -57,6 +58,10 @@ class CommentsMainFragment : Fragment() {
viewModel.fetchNextComments() viewModel.fetchNextComments()
} }
} }
(parentFragment as CommentsSheet).updateFragmentInfo(
false,
getString(R.string.comments)
)
commentsAdapter = CommentsAdapter( commentsAdapter = CommentsAdapter(
this, this,
@ -77,12 +82,16 @@ class CommentsMainFragment : Fragment() {
// listen for new comments to be loaded // listen for new comments to be loaded
viewModel.commentsPage.observe(viewLifecycleOwner) { viewModel.commentsPage.observe(viewLifecycleOwner) {
it ?: return@observe if (it == null) return@observe
binding.progress.visibility = View.GONE binding.progress.visibility = View.GONE
if (it.disabled) { if (it.disabled) {
binding.errorTV.visibility = View.VISIBLE binding.errorTV.visibility = View.VISIBLE
return@observe return@observe
} }
(parentFragment as CommentsSheet).updateFragmentInfo(
false,
"${getString(R.string.comments)} (${it.commentCount.formatShort()})"
)
if (it.comments.isEmpty()) { if (it.comments.isEmpty()) {
binding.errorTV.text = getString(R.string.no_comments_available) binding.errorTV.text = getString(R.string.no_comments_available)
binding.errorTV.visibility = View.VISIBLE binding.errorTV.visibility = View.VISIBLE

View File

@ -10,16 +10,19 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.obj.Comment import com.github.libretube.api.obj.Comment
import com.github.libretube.api.obj.CommentsPage import com.github.libretube.api.obj.CommentsPage
import com.github.libretube.constants.IntentData import com.github.libretube.constants.IntentData
import com.github.libretube.databinding.FragmentCommentsBinding import com.github.libretube.databinding.FragmentCommentsBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.formatShort
import com.github.libretube.extensions.parcelable import com.github.libretube.extensions.parcelable
import com.github.libretube.ui.adapters.CommentsAdapter import com.github.libretube.ui.adapters.CommentsAdapter
import com.github.libretube.ui.extensions.filterNonEmptyComments import com.github.libretube.ui.extensions.filterNonEmptyComments
import com.github.libretube.ui.models.CommentsViewModel import com.github.libretube.ui.models.CommentsViewModel
import com.github.libretube.ui.sheets.CommentsSheet
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@ -58,6 +61,10 @@ class CommentsRepliesFragment : Fragment() {
) { ) {
viewModel.commentsSheetDismiss?.invoke() viewModel.commentsSheetDismiss?.invoke()
} }
(parentFragment as CommentsSheet).updateFragmentInfo(
true,
"${getString(R.string.replies)} (${comment.replyCount.formatShort()})"
)
binding.commentsRV.updatePadding(top = 0) binding.commentsRV.updatePadding(top = 0)
binding.commentsRV.layoutManager = LinearLayoutManager(context) binding.commentsRV.layoutManager = LinearLayoutManager(context)

View File

@ -9,11 +9,11 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewTreeObserver import android.view.ViewTreeObserver
import android.view.WindowManager import android.view.WindowManager
import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.databinding.CommentsSheetBinding import com.github.libretube.databinding.CommentsSheetBinding
import com.github.libretube.ui.fragments.CommentsMainFragment import com.github.libretube.ui.fragments.CommentsMainFragment
import com.github.libretube.ui.fragments.CommentsRepliesFragment
import com.github.libretube.ui.models.CommentsViewModel import com.github.libretube.ui.models.CommentsViewModel
class CommentsSheet : ExpandedBottomSheet() { class CommentsSheet : ExpandedBottomSheet() {
@ -58,11 +58,8 @@ class CommentsSheet : ExpandedBottomSheet() {
} }
childFragmentManager.apply { childFragmentManager.apply {
addOnBackStackChangedListener(this@CommentsSheet::onFragmentChanged)
beginTransaction() beginTransaction()
.replace(R.id.commentFragContainer, CommentsMainFragment()) .replace(R.id.commentFragContainer, CommentsMainFragment())
.runOnCommit(this@CommentsSheet::onFragmentChanged)
.commit() .commit()
} }
@ -76,20 +73,9 @@ class CommentsSheet : ExpandedBottomSheet() {
} }
} }
private fun onFragmentChanged() { fun updateFragmentInfo(showBackButton: Boolean, title: String) {
childFragmentManager.findFragmentById(R.id.commentFragContainer)?.let { binding.btnBack.isVisible = showBackButton
when (it) { binding.commentsTitle.text = title
is CommentsRepliesFragment -> {
binding.btnBack.visibility = View.VISIBLE
binding.commentsTitle.text = getString(R.string.replies)
}
else -> {
binding.btnBack.visibility = View.GONE
binding.commentsTitle.text = getString(R.string.comments)
}
}
}
} }
override fun onDismiss(dialog: DialogInterface) { override fun onDismiss(dialog: DialogInterface) {