From c4a2d91fd40d7d4ffa871065bd1fb20d8064d33d Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sun, 8 Jan 2023 17:39:38 +0100 Subject: [PATCH] Improve the responsiveness of the timebar preview --- .../ui/extensions/SetupNotificationBell.kt | 1 - .../ui/fragments/PlaylistFragment.kt | 42 +++++++++--------- .../libretube/util/SeekbarPreviewListener.kt | 44 ++++++++++++------- 3 files changed, 49 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/extensions/SetupNotificationBell.kt b/app/src/main/java/com/github/libretube/ui/extensions/SetupNotificationBell.kt index eac39b7ab..335192635 100644 --- a/app/src/main/java/com/github/libretube/ui/extensions/SetupNotificationBell.kt +++ b/app/src/main/java/com/github/libretube/ui/extensions/SetupNotificationBell.kt @@ -1,6 +1,5 @@ package com.github.libretube.ui.extensions -import android.util.Log import com.github.libretube.R import com.github.libretube.util.PreferenceHelper import com.google.android.material.button.MaterialButton diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt index eb5ce2847..39e5aca75 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt @@ -185,29 +185,29 @@ class PlaylistFragment : BaseFragment() { // listen for playlist items to become deleted playlistAdapter!!.registerAdapterDataObserver(object : - RecyclerView.AdapterDataObserver() { - override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { - if (positionStart == 0) { - ImageHelper.loadImage( - playlistFeed.firstOrNull()?.thumbnail ?: "", - binding.thumbnail - ) - } - - val info = binding.playlistInfo.text.split(TextUtils.SEPARATOR) - binding.playlistInfo.text = ( - if (info.size == 2) { - info[0] + TextUtils.SEPARATOR - } else { - "" - } - ) + getString( - R.string.videoCount, - playlistAdapter!!.itemCount.toString() + RecyclerView.AdapterDataObserver() { + override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { + if (positionStart == 0) { + ImageHelper.loadImage( + playlistFeed.firstOrNull()?.thumbnail ?: "", + binding.thumbnail ) - super.onItemRangeRemoved(positionStart, itemCount) } - }) + + val info = binding.playlistInfo.text.split(TextUtils.SEPARATOR) + binding.playlistInfo.text = ( + if (info.size == 2) { + info[0] + TextUtils.SEPARATOR + } else { + "" + } + ) + getString( + R.string.videoCount, + playlistAdapter!!.itemCount.toString() + ) + super.onItemRangeRemoved(positionStart, itemCount) + } + }) binding.playlistRecView.adapter = playlistAdapter binding.playlistScrollview.viewTreeObserver diff --git a/app/src/main/java/com/github/libretube/util/SeekbarPreviewListener.kt b/app/src/main/java/com/github/libretube/util/SeekbarPreviewListener.kt index 99fd6befc..f7ca39572 100644 --- a/app/src/main/java/com/github/libretube/util/SeekbarPreviewListener.kt +++ b/app/src/main/java/com/github/libretube/util/SeekbarPreviewListener.kt @@ -17,29 +17,19 @@ class SeekbarPreviewListener( ) : TimeBar.OnScrubListener { private var moving = false - override fun onScrubStart(timeBar: TimeBar, position: Long) {} + override fun onScrubStart(timeBar: TimeBar, position: Long) { + moving = true + + processPreview(position) + } /** * Show a preview of the scrubber position */ override fun onScrubMove(timeBar: TimeBar, position: Long) { moving = true - val previewFrame = getPreviewFrame(position) ?: return - // update the offset of the preview image view - updatePreviewX(position) - - val request = ImageRequest.Builder(previewIv.context) - .data(previewFrame.previewUrl) - .target { - if (!moving) return@target - val frame = cutOutBitmap(it.toBitmap(), previewFrame) - previewIv.setImageBitmap(frame) - previewIv.visibility = View.VISIBLE - } - .build() - - ImageHelper.imageLoader.enqueue(request) + processPreview(position) } /** @@ -60,6 +50,28 @@ class SeekbarPreviewListener( .start() } + /** + * Make a request to get the image frame and update its position + */ + private fun processPreview(position: Long) { + val previewFrame = getPreviewFrame(position) ?: return + + // update the offset of the preview image view + updatePreviewX(position) + + val request = ImageRequest.Builder(previewIv.context) + .data(previewFrame.previewUrl) + .target { + if (!moving) return@target + val frame = cutOutBitmap(it.toBitmap(), previewFrame) + previewIv.setImageBitmap(frame) + previewIv.visibility = View.VISIBLE + } + .build() + + ImageHelper.imageLoader.enqueue(request) + } + /** * Get the preview frame according to the current position */