diff --git a/app/src/main/java/com/github/libretube/constants/IntentData.kt b/app/src/main/java/com/github/libretube/constants/IntentData.kt index 843d7c797..fd88c6f0c 100644 --- a/app/src/main/java/com/github/libretube/constants/IntentData.kt +++ b/app/src/main/java/com/github/libretube/constants/IntentData.kt @@ -18,5 +18,5 @@ object IntentData { const val downloading = "downloading" const val openAudioPlayer = "openAudioPlayer" const val fragmentToOpen = "fragmentToOpen" - const val replyPage = "replyPage" + const val comment = "comment" } diff --git a/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt index 72e9fa107..1b4d75f6b 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt @@ -5,11 +5,16 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.ViewGroup.MarginLayoutParams import android.widget.Toast +import androidx.appcompat.content.res.AppCompatResources import androidx.core.text.parseAsHtml +import androidx.core.view.updateLayoutParams +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R +import com.github.libretube.api.JsonHelper import com.github.libretube.api.obj.Comment import com.github.libretube.constants.IntentData import com.github.libretube.databinding.CommentsRowBinding @@ -20,6 +25,7 @@ import com.github.libretube.util.ClipboardHelper import com.github.libretube.util.ImageHelper import com.github.libretube.util.NavigationHelper import com.github.libretube.util.TextUtils +import com.github.libretube.util.ThemeHelper class CommentsAdapter( private val fragment: Fragment?, @@ -69,11 +75,30 @@ class CommentsAdapter( dismiss.invoke() } + if (isRepliesAdapter) { + repliesCount.visibility = View.GONE + repliesAvailable.visibility = View.GONE + + // highlight the comment that is being replied to + if (comment == comments.firstOrNull()) { + root.setBackgroundColor( + ThemeHelper.getThemeColor(root.context, R.attr.colorSurface) + ) + root.updatePadding(top = 20) + root.updateLayoutParams { bottomMargin = 20 } + } else { + root.background = AppCompatResources.getDrawable(root.context, R.drawable.rounded_ripple) + } + } + if (!isRepliesAdapter && comment.repliesPage != null) { val repliesFragment = CommentsRepliesFragment().apply { arguments = Bundle().apply { putString(IntentData.videoId, videoId) - putString(IntentData.replyPage, comment.repliesPage) + putString( + IntentData.comment, + JsonHelper.json.encodeToString(Comment.serializer(), comment) + ) } } root.setOnClickListener { diff --git a/app/src/main/java/com/github/libretube/ui/fragments/CommentsRepliesFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/CommentsRepliesFragment.kt index 33f61757b..7e29f24ba 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/CommentsRepliesFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/CommentsRepliesFragment.kt @@ -5,10 +5,13 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.recyclerview.widget.LinearLayoutManager +import com.github.libretube.api.JsonHelper 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 @@ -40,13 +43,17 @@ class CommentsRepliesFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val videoId = arguments?.getString(IntentData.videoId) ?: "" - val nextPage = arguments?.getString(IntentData.replyPage) ?: "" + val comment = JsonHelper.json.decodeFromString( + Comment.serializer(), + arguments?.getString(IntentData.comment)!! + ) - repliesAdapter = CommentsAdapter(null, videoId, mutableListOf(), true) { + repliesAdapter = CommentsAdapter(null, videoId, mutableListOf(comment), true) { viewModel.commentsSheetDismiss?.invoke() } - binding.commentsRV.layoutManager = LinearLayoutManager(view.context) + binding.commentsRV.updatePadding(top = 0) + binding.commentsRV.layoutManager = LinearLayoutManager(context) binding.commentsRV.adapter = repliesAdapter binding.commentsRV.viewTreeObserver @@ -61,7 +68,7 @@ class CommentsRepliesFragment : Fragment() { } } - loadInitialReplies(videoId, nextPage, repliesAdapter) + loadInitialReplies(videoId, comment.repliesPage ?: "", repliesAdapter) } private fun loadInitialReplies( @@ -69,17 +76,10 @@ class CommentsRepliesFragment : Fragment() { nextPage: String, repliesAdapter: CommentsAdapter ) { - when (repliesAdapter.itemCount) { - 0 -> { - binding.progress.visibility = View.VISIBLE - fetchReplies(videoId, nextPage) { - repliesAdapter.updateItems(it.comments) - binding.progress.visibility = View.GONE - } - } - else -> { - repliesAdapter.clear() - } + binding.progress.visibility = View.VISIBLE + fetchReplies(videoId, nextPage) { + repliesAdapter.updateItems(it.comments) + binding.progress.visibility = View.GONE } } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index b4ccf59cc..f9da8f9d8 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -525,9 +525,13 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { } private fun toggleDescription() { - var viewInfo = if (!streams.livestream) TextUtils.SEPARATOR + localizedDate( - streams.uploadDate - ) else "" + var viewInfo = if (!streams.livestream) { + TextUtils.SEPARATOR + localizedDate( + streams.uploadDate + ) + } else { + "" + } if (binding.descLinLayout.isVisible) { // hide the description and chapters binding.playerDescriptionArrow.animate().rotation(0F).setDuration(250).start() diff --git a/app/src/main/res/layout/comments_row.xml b/app/src/main/res/layout/comments_row.xml index abad110c8..1c619b9f7 100644 --- a/app/src/main/res/layout/comments_row.xml +++ b/app/src/main/res/layout/comments_row.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?selectableItemBackground"> + android:background="@drawable/rounded_ripple"> + app:tint="?android:attr/textColorSecondaryInverse" /> - - #BFBFBF - #3A3A3A - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index e23e7aa9c..4886b7498 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,8 +3,6 @@ #AA000000 #EEFFFFFF #0061A6 - #505050 - #CCCCCC #0058CB #FFFFFF