From fda809bc8a5980c3c34d907d8ab3e25f594f3698 Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Sat, 16 Mar 2024 22:44:45 -0500 Subject: [PATCH] fix: more strategic refresh in comments --- app/src/main/java/ani/dantotsu/Functions.kt | 57 ++++++++++--------- .../dantotsu/media/comments/CommentItem.kt | 13 +++-- .../media/comments/CommentsFragment.kt | 21 ++++--- 3 files changed, 52 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/Functions.kt b/app/src/main/java/ani/dantotsu/Functions.kt index 5bd4e731..65858cb5 100644 --- a/app/src/main/java/ani/dantotsu/Functions.kt +++ b/app/src/main/java/ani/dantotsu/Functions.kt @@ -43,6 +43,7 @@ import androidx.core.content.FileProvider import androidx.core.math.MathUtils.clamp import androidx.core.view.* import androidx.fragment.app.DialogFragment +import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.lifecycle.MutableLiveData import androidx.recyclerview.widget.RecyclerView @@ -1145,7 +1146,8 @@ fun blurImage(imageView: ImageView, banner: String?){ * Builds the markwon instance with all the plugins * @return the markwon instance */ -fun buildMarkwon(activity: Context, userInputContent: Boolean = true): Markwon { +fun buildMarkwon(activity: Context, userInputContent: Boolean = true, fragment: Fragment? = null): Markwon { + val glideContext = fragment?.let { Glide.with(it) } ?: Glide.with(activity) val markwon = Markwon.builder(activity) .usePlugin(object : AbstractMarkwonPlugin() { override fun configureConfiguration(builder: MarkwonConfiguration.Builder) { @@ -1168,38 +1170,41 @@ fun buildMarkwon(activity: Context, userInputContent: Boolean = true): Markwon { }) .usePlugin(GlideImagesPlugin.create(object : GlideImagesPlugin.GlideStore { - private val requestManager: RequestManager = - Glide.with(activity).apply { - addDefaultRequestListener(object : RequestListener { - override fun onResourceReady( - resource: Any, - model: Any, - target: Target, - dataSource: DataSource, - isFirstResource: Boolean - ): Boolean { - if (resource is GifDrawable) { - resource.start() - } - return false + private val requestManager: RequestManager = glideContext.apply { + addDefaultRequestListener(object : RequestListener { + override fun onResourceReady( + resource: Any, + model: Any, + target: Target, + dataSource: DataSource, + isFirstResource: Boolean + ): Boolean { + if (resource is GifDrawable) { + resource.start() } + Logger.log("Image loaded successfully: $model") + return false + } - override fun onLoadFailed( - e: GlideException?, - model: Any?, - target: Target, - isFirstResource: Boolean - ): Boolean { - return false - } - }) - } - + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target, + isFirstResource: Boolean + ): Boolean { + Logger.log("Image failed to load: $model") + Logger.log(e as Exception) + return false + } + }) + } override fun load(drawable: AsyncDrawable): RequestBuilder { + Logger.log("Loading image: ${drawable.destination}") return requestManager.load(drawable.destination) } override fun cancel(target: Target<*>) { + Logger.log("Cancelling image load") requestManager.clear(target) } })) diff --git a/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt b/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt index b800d009..d158fcd9 100644 --- a/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt +++ b/app/src/main/java/ani/dantotsu/media/comments/CommentItem.kt @@ -30,7 +30,6 @@ import java.text.SimpleDateFormat import java.util.Date import java.util.TimeZone import kotlin.math.abs -import kotlin.math.pow import kotlin.math.sqrt class CommentItem(val comment: Comment, @@ -40,7 +39,7 @@ class CommentItem(val comment: Comment, private val backgroundColor: Int, val commentDepth: Int ) : BindableItem() { - var binding: ItemCommentsBinding? = null + lateinit var binding: ItemCommentsBinding val adapter = GroupieAdapter() private var subCommentIds: MutableList = mutableListOf() val repliesSection = Section() @@ -56,7 +55,7 @@ class CommentItem(val comment: Comment, @SuppressLint("SetTextI18n") override fun bind(viewBinding: ItemCommentsBinding, position: Int) { binding = viewBinding - setAnimation(binding!!.root.context, binding!!.root) + setAnimation(binding.root.context, binding.root) viewBinding.commentRepliesList.layoutManager = LinearLayoutManager(commentsFragment.activity) viewBinding.commentRepliesList.adapter = adapter val isUserComment = CommentsAPI.userId == comment.userId @@ -222,17 +221,21 @@ class CommentItem(val comment: Comment, return R.layout.item_comments } + fun containsGif(): Boolean { + return comment.content.contains(".gif") + } + override fun initializeViewBinding(view: View): ItemCommentsBinding { return ItemCommentsBinding.bind(view) } fun replying(isReplying: Boolean) { - binding?.commentReply?.text = if (isReplying) commentsFragment.activity.getString(R.string.cancel) else "Reply" + binding.commentReply.text = if (isReplying) commentsFragment.activity.getString(R.string.cancel) else "Reply" this.isReplying = isReplying } fun editing(isEditing: Boolean) { - binding?.commentEdit?.text = if (isEditing) commentsFragment.activity.getString(R.string.cancel) else commentsFragment.activity.getString(R.string.edit) + binding.commentEdit.text = if (isEditing) commentsFragment.activity.getString(R.string.cancel) else commentsFragment.activity.getString(R.string.edit) this.isEditing = isEditing } diff --git a/app/src/main/java/ani/dantotsu/media/comments/CommentsFragment.kt b/app/src/main/java/ani/dantotsu/media/comments/CommentsFragment.kt index bc72bfc6..c3583183 100644 --- a/app/src/main/java/ani/dantotsu/media/comments/CommentsFragment.kt +++ b/app/src/main/java/ani/dantotsu/media/comments/CommentsFragment.kt @@ -33,6 +33,7 @@ import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.snackString import ani.dantotsu.toast +import com.bumptech.glide.Glide import com.xwray.groupie.GroupieAdapter import com.xwray.groupie.Section import io.noties.markwon.editor.MarkwonEditor @@ -82,7 +83,7 @@ class CommentsFragment : Fragment() { this.mediaId = mediaId backgroundColor = (binding.root.background as? ColorDrawable)?.color ?: 0 - val markwon = buildMarkwon(activity) + val markwon = buildMarkwon(activity, fragment = this@CommentsFragment) activity.binding.commentUserAvatar.loadImage(Anilist.avatar) val markwonEditor = MarkwonEditor.create(markwon) @@ -228,7 +229,7 @@ class CommentsFragment : Fragment() { section.add( CommentItem( comment, - buildMarkwon(activity), + buildMarkwon(activity, fragment = this@CommentsFragment), section, this@CommentsFragment, backgroundColor, @@ -353,7 +354,11 @@ class CommentsFragment : Fragment() { override fun onResume() { super.onResume() tag = null - adapter.notifyDataSetChanged() + section.groups.forEach { + if (it is CommentItem && it.containsGif()) { + it.notifyChanged() + } + } } enum class InteractionState { @@ -381,7 +386,7 @@ class CommentsFragment : Fragment() { section.add( CommentItem( it, - buildMarkwon(activity), + buildMarkwon(activity, fragment = this@CommentsFragment), section, this@CommentsFragment, backgroundColor, @@ -411,7 +416,7 @@ class CommentsFragment : Fragment() { section.add( CommentItem( comment, - buildMarkwon(activity), + buildMarkwon(activity, fragment = this@CommentsFragment), section, this@CommentsFragment, backgroundColor, @@ -534,7 +539,7 @@ class CommentsFragment : Fragment() { if (depth >= comment.MAX_DEPTH) comment.registerSubComment(it.commentId) val newCommentItem = CommentItem( it, - buildMarkwon(activity), + buildMarkwon(activity, fragment = this@CommentsFragment), section, this@CommentsFragment, backgroundColor, @@ -659,7 +664,7 @@ class CommentsFragment : Fragment() { if (commentWithInteraction!!.commentDepth + 1 > commentWithInteraction!!.MAX_DEPTH) 0 else section.itemCount, CommentItem( it, - buildMarkwon(activity), + buildMarkwon(activity, fragment = this@CommentsFragment), section, this@CommentsFragment, backgroundColor, @@ -671,7 +676,7 @@ class CommentsFragment : Fragment() { 0, CommentItem( it, - buildMarkwon(activity), + buildMarkwon(activity, fragment = this@CommentsFragment), section, this@CommentsFragment, backgroundColor,