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

View File

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

View File

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