From 042cf26c1cfa059be03b5fc266d2e55cdb49e86d Mon Sep 17 00:00:00 2001 From: faisalcodes Date: Mon, 30 Jan 2023 12:03:10 +0530 Subject: [PATCH 1/7] Added the original comment as first item in replies. --- .../github/libretube/constants/IntentData.kt | 2 +- .../libretube/ui/adapters/CommentsAdapter.kt | 21 +++++++++++++- .../ui/fragments/CommentsRepliesFragment.kt | 28 +++++++++---------- app/src/main/res/layout/comments_row.xml | 8 ++++++ app/src/main/res/values-night/colors.xml | 1 + app/src/main/res/values/colors.xml | 1 + 6 files changed, 45 insertions(+), 16 deletions(-) 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..b7b9a5bbf 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,8 +5,11 @@ 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.core.content.ContextCompat import androidx.core.text.parseAsHtml +import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R @@ -20,6 +23,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 kotlinx.serialization.json.Json class CommentsAdapter( private val fragment: Fragment?, @@ -69,11 +73,26 @@ class CommentsAdapter( dismiss.invoke() } + if (isRepliesAdapter) { + repliesCount.visibility = View.GONE + repliesAvailable.visibility = View.GONE + + if (position == 0) { + root.setBackgroundColor(ContextCompat.getColor(root.context, R.color.replies_original_comment_background)) + root.updateLayoutParams { bottomMargin = 40 } + divider.visibility = View.VISIBLE + } else { + root.background = null + root.updateLayoutParams { bottomMargin = 0 } + divider.visibility = View.GONE + } + } + if (!isRepliesAdapter && comment.repliesPage != null) { val repliesFragment = CommentsRepliesFragment().apply { arguments = Bundle().apply { putString(IntentData.videoId, videoId) - putString(IntentData.replyPage, comment.repliesPage) + putString(IntentData.comment, 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..5ad1046d3 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,12 @@ 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.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 @@ -19,6 +21,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import kotlinx.serialization.json.Json class CommentsRepliesFragment : Fragment() { private lateinit var binding: FragmentCommentsBinding @@ -40,12 +43,16 @@ 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 = 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.updatePadding(top = 0) binding.commentsRV.layoutManager = LinearLayoutManager(view.context) binding.commentsRV.adapter = repliesAdapter @@ -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/res/layout/comments_row.xml b/app/src/main/res/layout/comments_row.xml index abad110c8..9ef69d288 100644 --- a/app/src/main/res/layout/comments_row.xml +++ b/app/src/main/res/layout/comments_row.xml @@ -14,6 +14,7 @@ android:orientation="vertical" android:paddingStart="15dp" android:paddingEnd="15dp" + app:layout_constraintBottom_toTopOf="@id/divider" app:layout_constraintTop_toTopOf="parent"> + + diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index f4247d820..6f15bd6cd 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -2,4 +2,5 @@ #BFBFBF #3A3A3A + #222222 \ 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..4d70e9767 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,6 +5,7 @@ #0061A6 #505050 #CCCCCC + #E8E8E8 #0058CB #FFFFFF From bb784f5880634a6210795129afed5dcd84a343ad Mon Sep 17 00:00:00 2001 From: faisalcodes Date: Mon, 30 Jan 2023 12:16:35 +0530 Subject: [PATCH 2/7] ktlint --- .../java/com/github/libretube/ui/adapters/CommentsAdapter.kt | 5 ++++- .../github/libretube/ui/fragments/CommentsRepliesFragment.kt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) 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 b7b9a5bbf..a336415dd 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 @@ -92,7 +92,10 @@ class CommentsAdapter( val repliesFragment = CommentsRepliesFragment().apply { arguments = Bundle().apply { putString(IntentData.videoId, videoId) - putString(IntentData.comment, Json.encodeToString(Comment.serializer(), comment)) + putString( + IntentData.comment, + 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 5ad1046d3..1f58bfbd8 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 @@ -45,7 +45,7 @@ class CommentsRepliesFragment : Fragment() { val videoId = arguments?.getString(IntentData.videoId) ?: "" val comment = Json.decodeFromString( Comment.serializer(), - arguments?.getString(IntentData.comment) ?: """{}""", + arguments?.getString(IntentData.comment) ?: """{}""" ) repliesAdapter = CommentsAdapter(null, videoId, mutableListOf(comment), true) { From 843bdfd8e46886496095f3550c4c43a2a9ea332a Mon Sep 17 00:00:00 2001 From: faisalcodes Date: Mon, 30 Jan 2023 12:19:53 +0530 Subject: [PATCH 3/7] ktlint --- .../com/github/libretube/ui/adapters/CommentsAdapter.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 a336415dd..9c3d480b4 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 @@ -78,7 +78,12 @@ class CommentsAdapter( repliesAvailable.visibility = View.GONE if (position == 0) { - root.setBackgroundColor(ContextCompat.getColor(root.context, R.color.replies_original_comment_background)) + root.setBackgroundColor( + ContextCompat.getColor( + root.context, + R.color.replies_original_comment_background + ) + ) root.updateLayoutParams { bottomMargin = 40 } divider.visibility = View.VISIBLE } else { From 3265ce81f4e19c38eeaa2e5cbffee4092f2e0fa8 Mon Sep 17 00:00:00 2001 From: faisalcodes Date: Mon, 30 Jan 2023 19:17:01 +0530 Subject: [PATCH 4/7] - Removed hardcoded colors. - Used colorSurface for the original comment in replies. --- .../github/libretube/ui/adapters/CommentsAdapter.kt | 9 ++------- app/src/main/res/layout/comments_row.xml | 11 ++--------- app/src/main/res/layout/comments_sheet.xml | 2 +- app/src/main/res/values-night/colors.xml | 6 ------ app/src/main/res/values/colors.xml | 3 --- 5 files changed, 5 insertions(+), 26 deletions(-) delete mode 100644 app/src/main/res/values-night/colors.xml 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 9c3d480b4..df7d4e917 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 @@ -7,7 +7,6 @@ import android.view.View import android.view.ViewGroup import android.view.ViewGroup.MarginLayoutParams import android.widget.Toast -import androidx.core.content.ContextCompat import androidx.core.text.parseAsHtml import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment @@ -23,6 +22,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 import kotlinx.serialization.json.Json class CommentsAdapter( @@ -79,17 +79,12 @@ class CommentsAdapter( if (position == 0) { root.setBackgroundColor( - ContextCompat.getColor( - root.context, - R.color.replies_original_comment_background - ) + ThemeHelper.getThemeColor(root.context, R.attr.colorSurface) ) root.updateLayoutParams { bottomMargin = 40 } - divider.visibility = View.VISIBLE } else { root.background = null root.updateLayoutParams { bottomMargin = 0 } - divider.visibility = View.GONE } } diff --git a/app/src/main/res/layout/comments_row.xml b/app/src/main/res/layout/comments_row.xml index 9ef69d288..cf8ed1e2a 100644 --- a/app/src/main/res/layout/comments_row.xml +++ b/app/src/main/res/layout/comments_row.xml @@ -14,7 +14,7 @@ android:orientation="vertical" android:paddingStart="15dp" android:paddingEnd="15dp" - app:layout_constraintBottom_toTopOf="@id/divider" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent"> - - diff --git a/app/src/main/res/layout/comments_sheet.xml b/app/src/main/res/layout/comments_sheet.xml index ecf9a0357..197927b86 100644 --- a/app/src/main/res/layout/comments_sheet.xml +++ b/app/src/main/res/layout/comments_sheet.xml @@ -24,7 +24,7 @@ android:layout_height="20dp" android:paddingTop="8dp" android:paddingBottom="0dp" - app:tint="@color/drag_handle_color" /> + app:tint="?android:attr/textColorSecondaryInverse" /> - - #BFBFBF - #3A3A3A - #222222 - \ 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 4d70e9767..4886b7498 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,9 +3,6 @@ #AA000000 #EEFFFFFF #0061A6 - #505050 - #CCCCCC - #E8E8E8 #0058CB #FFFFFF From 758f55981161860cb1f9fb4ff93c63618bee2b1e Mon Sep 17 00:00:00 2001 From: Bnyro Date: Mon, 30 Jan 2023 16:39:05 +0100 Subject: [PATCH 5/7] Minor UI improvements and code cleanup --- .../github/libretube/ui/adapters/CommentsAdapter.kt | 12 ++++++------ .../ui/fragments/CommentsRepliesFragment.kt | 5 +++-- app/src/main/res/layout/comments_row.xml | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) 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 df7d4e917..0a31a9035 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 @@ -9,9 +9,11 @@ import android.view.ViewGroup.MarginLayoutParams import android.widget.Toast 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 @@ -23,7 +25,6 @@ import com.github.libretube.util.ImageHelper import com.github.libretube.util.NavigationHelper import com.github.libretube.util.TextUtils import com.github.libretube.util.ThemeHelper -import kotlinx.serialization.json.Json class CommentsAdapter( private val fragment: Fragment?, @@ -77,14 +78,13 @@ class CommentsAdapter( repliesCount.visibility = View.GONE repliesAvailable.visibility = View.GONE + // highlight the comment that is being replied to if (position == 0) { root.setBackgroundColor( ThemeHelper.getThemeColor(root.context, R.attr.colorSurface) ) - root.updateLayoutParams { bottomMargin = 40 } - } else { - root.background = null - root.updateLayoutParams { bottomMargin = 0 } + root.updatePadding(top = 20) + root.updateLayoutParams { bottomMargin = 20 } } } @@ -94,7 +94,7 @@ class CommentsAdapter( putString(IntentData.videoId, videoId) putString( IntentData.comment, - Json.encodeToString(Comment.serializer(), comment) + JsonHelper.json.encodeToString(Comment.serializer(), comment) ) } } 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 1f58bfbd8..dff733ac2 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 @@ -9,6 +9,7 @@ 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 @@ -43,7 +44,7 @@ class CommentsRepliesFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val videoId = arguments?.getString(IntentData.videoId) ?: "" - val comment = Json.decodeFromString( + val comment = JsonHelper.json.decodeFromString( Comment.serializer(), arguments?.getString(IntentData.comment) ?: """{}""" ) @@ -53,7 +54,7 @@ class CommentsRepliesFragment : Fragment() { } binding.commentsRV.updatePadding(top = 0) - binding.commentsRV.layoutManager = LinearLayoutManager(view.context) + binding.commentsRV.layoutManager = LinearLayoutManager(context) binding.commentsRV.adapter = repliesAdapter binding.commentsRV.viewTreeObserver diff --git a/app/src/main/res/layout/comments_row.xml b/app/src/main/res/layout/comments_row.xml index cf8ed1e2a..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"> Date: Mon, 30 Jan 2023 16:44:50 +0100 Subject: [PATCH 6/7] Fix that multiple comments are hightlighted sometimes --- .../github/libretube/ui/adapters/CommentsAdapter.kt | 5 ++++- .../libretube/ui/fragments/CommentsRepliesFragment.kt | 1 - .../github/libretube/ui/fragments/PlayerFragment.kt | 10 +++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) 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 0a31a9035..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 @@ -7,6 +7,7 @@ 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 @@ -79,12 +80,14 @@ class CommentsAdapter( repliesAvailable.visibility = View.GONE // highlight the comment that is being replied to - if (position == 0) { + 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) } } 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 dff733ac2..dc5331479 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 @@ -22,7 +22,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import kotlinx.serialization.json.Json class CommentsRepliesFragment : Fragment() { private lateinit var binding: FragmentCommentsBinding 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 452907764..d15c90372 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 @@ -524,9 +524,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() From c405ca08f0ada01991fcddae968b2637db7da0e3 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Mon, 30 Jan 2023 16:57:08 +0100 Subject: [PATCH 7/7] Remove unused expression --- .../github/libretube/ui/fragments/CommentsRepliesFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 dc5331479..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 @@ -45,7 +45,7 @@ class CommentsRepliesFragment : Fragment() { val videoId = arguments?.getString(IntentData.videoId) ?: "" val comment = JsonHelper.json.decodeFromString( Comment.serializer(), - arguments?.getString(IntentData.comment) ?: """{}""" + arguments?.getString(IntentData.comment)!! ) repliesAdapter = CommentsAdapter(null, videoId, mutableListOf(comment), true) {