Skip to content
Snippets Groups Projects
Commit c10bde9f authored by Geoffrey Métais's avatar Geoffrey Métais
Browse files

Clear handler when marqee is activated

(cherry picked from commit 61af2af2)
parent abc36b6d
No related branches found
No related tags found
No related merge requests found
......@@ -27,6 +27,7 @@ import android.annotation.TargetApi
import android.content.Context
import android.graphics.drawable.BitmapDrawable
import android.os.Build
import android.os.Handler
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
......@@ -61,6 +62,7 @@ import org.videolan.vlc.gui.view.FastScroller
import org.videolan.vlc.interfaces.IEventsHandler
import org.videolan.vlc.interfaces.IListEventsHandler
import org.videolan.vlc.interfaces.SwipeDragHelperAdapter
import org.videolan.vlc.util.Settings
import org.videolan.vlc.util.UPDATE_SELECTION
private const val SHOW_IN_LIST = -1
......@@ -82,6 +84,7 @@ class AudioBrowserAdapter @JvmOverloads constructor(
private var focusNext = -1
private var focusListener: FocusableRecyclerView.FocusListener? = null
private lateinit var inflater: LayoutInflater
private val handler by lazy(LazyThreadSafetyMode.NONE) { Handler() }
val isEmpty: Boolean
get() = currentList.isNullOrEmpty()
......@@ -112,7 +115,12 @@ class AudioBrowserAdapter @JvmOverloads constructor(
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
super.onAttachedToRecyclerView(recyclerView)
enableMarqueeEffect(recyclerView)
if (Settings.listTitleEllipsize == 4) enableMarqueeEffect(recyclerView, handler)
}
override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
handler.removeCallbacksAndMessages(null)
super.onDetachedFromRecyclerView(recyclerView)
}
override fun onBindViewHolder(holder: AbstractMediaItemViewHolder<ViewDataBinding>, position: Int) {
......@@ -210,7 +218,7 @@ class AudioBrowserAdapter @JvmOverloads constructor(
private var coverlayResource = 0
var onTouchListener: View.OnTouchListener
override fun titleView(): TextView = binding.title
override val titleView: TextView? = binding.title
init {
binding.holder = this
......@@ -261,7 +269,7 @@ class AudioBrowserAdapter @JvmOverloads constructor(
internal constructor(binding: AudioBrowserCardItemBinding) : AbstractMediaItemViewHolder<AudioBrowserCardItemBinding>(binding), View.OnFocusChangeListener {
private var coverlayResource = 0
override fun titleView(): TextView = binding.title
override val titleView = binding.title
init {
binding.holder = this
......@@ -303,29 +311,23 @@ class AudioBrowserAdapter @JvmOverloads constructor(
get() = reorder
fun onClick(v: View) {
val item = getItem(layoutPosition)
if (item != null)
eventsHandler.onClick(v, layoutPosition, item)
getItem(layoutPosition)?.let { eventsHandler.onClick(v, layoutPosition, it) }
}
fun onMoreClick(v: View) {
val item = getItem(layoutPosition)
if (item != null) eventsHandler.onCtxClick(v, layoutPosition, item)
getItem(layoutPosition)?.let { eventsHandler.onCtxClick(v, layoutPosition, it) }
}
fun onLongClick(view: View): Boolean {
val item = getItem(layoutPosition)
return item != null && eventsHandler.onLongClick(view, layoutPosition, item)
fun onLongClick(v: View): Boolean {
return getItem(layoutPosition)?.let { eventsHandler.onLongClick(v, layoutPosition, it) } == true
}
fun onImageClick(v: View) {
val item = getItem(layoutPosition)
if (item != null) eventsHandler.onImageClick(v, layoutPosition, item)
getItem(layoutPosition)?.let { eventsHandler.onImageClick(v, layoutPosition, it) }
}
fun onMainActionClick(v: View) {
val item = getItem(layoutPosition)
if (item != null) eventsHandler.onMainActionClick(v, layoutPosition, item)
getItem(layoutPosition)?.let { eventsHandler.onMainActionClick(v, layoutPosition, it) }
}
......
......@@ -26,6 +26,7 @@ import android.annotation.TargetApi
import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable
import android.os.Build
import android.os.Handler
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
......@@ -78,6 +79,7 @@ open class BaseBrowserAdapter() : DiffUtilAdapter<MediaLibraryItem, BaseBrowserA
var mediaCount = 0
private var networkRoot = false
private var specialIcons = false
private val handler by lazy(LazyThreadSafetyMode.NONE) { Handler() }
constructor(fragment: BaseBrowserFragment) : this() {
this.fragment = fragment
......@@ -111,7 +113,12 @@ open class BaseBrowserAdapter() : DiffUtilAdapter<MediaLibraryItem, BaseBrowserA
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
super.onAttachedToRecyclerView(recyclerView)
enableMarqueeEffect(recyclerView)
if (Settings.listTitleEllipsize == 0 || Settings.listTitleEllipsize == 4) enableMarqueeEffect(recyclerView, handler)
}
override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
handler.removeCallbacksAndMessages(null)
super.onDetachedFromRecyclerView(recyclerView)
}
override fun onBindViewHolder(holder: ViewHolder<ViewDataBinding>, position: Int) {
......@@ -152,7 +159,7 @@ open class BaseBrowserAdapter() : DiffUtilAdapter<MediaLibraryItem, BaseBrowserA
override fun onViewRecycled(holder: ViewHolder<ViewDataBinding>) {
super.onViewRecycled(holder)
holder.titleView()?.isSelected = false
holder.titleView?.isSelected = false
}
override fun getItemCount(): Int {
......@@ -179,7 +186,7 @@ open class BaseBrowserAdapter() : DiffUtilAdapter<MediaLibraryItem, BaseBrowserA
@TargetApi(Build.VERSION_CODES.M)
internal inner class MediaViewHolder(binding: BrowserItemBinding) : ViewHolder<BrowserItemBinding>(binding), View.OnFocusChangeListener, MarqueeViewHolder {
override fun titleView(): TextView = binding.title
override val titleView: TextView? = binding.title
init {
binding.holder = this
......@@ -235,7 +242,7 @@ open class BaseBrowserAdapter() : DiffUtilAdapter<MediaLibraryItem, BaseBrowserA
}
private inner class SeparatorViewHolder(binding: BrowserItemSeparatorBinding) : ViewHolder<BrowserItemSeparatorBinding>(binding) {
override fun titleView(): TextView? = null
override val titleView: TextView? = null
override fun getType(): Int {
return MediaLibraryItem.TYPE_DUMMY
......
......@@ -41,7 +41,6 @@ import android.renderscript.*
import android.text.Html
import android.text.TextUtils
import android.text.method.LinkMovementMethod
import android.util.Log
import android.view.*
import android.view.animation.Animation
import android.view.animation.AnimationSet
......@@ -442,6 +441,7 @@ object UiTools {
}
}
@TargetApi(Build.VERSION_CODES.N)
fun setOnDragListener(activity: Activity) {
val view = if (AndroidUtil.isNougatOrLater) activity.window.peekDecorView() else null
view?.setOnDragListener(View.OnDragListener { _, event ->
......@@ -609,8 +609,7 @@ fun setEllipsizeModeByPref(t: TextView, activated: Boolean) {
if (!activated) return
when (Settings.listTitleEllipsize) {
0 -> {
}
0 -> {}
1 -> t.ellipsize = TextUtils.TruncateAt.START
2 -> t.ellipsize = TextUtils.TruncateAt.END
3 -> t.ellipsize = TextUtils.TruncateAt.MIDDLE
......@@ -622,42 +621,32 @@ fun setEllipsizeModeByPref(t: TextView, activated: Boolean) {
}
interface MarqueeViewHolder {
fun titleView(): TextView?
val titleView: TextView?
}
fun enableMarqueeEffect(recyclerView: RecyclerView) {
fun enableMarqueeEffect(recyclerView: RecyclerView, handler: Handler) {
val layoutManager = recyclerView.layoutManager
if (layoutManager is LinearLayoutManager) {
//Initial animation for already visible items
Handler().post {
launchMarquee(recyclerView, layoutManager)
}
handler.post { launchMarquee(recyclerView, layoutManager, handler) }
//Animation when done scrolling
recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
val doScroll = newState == RecyclerView.SCROLL_STATE_IDLE
if (doScroll) {
launchMarquee(recyclerView, layoutManager)
}
handler.removeCallbacksAndMessages(null)
if (newState == RecyclerView.SCROLL_STATE_IDLE) launchMarquee(recyclerView, layoutManager, handler)
}
})
}
}
private fun launchMarquee(recyclerView: RecyclerView, layoutManager: LinearLayoutManager) {
Handler().postDelayed({
private fun launchMarquee(recyclerView: RecyclerView, layoutManager: LinearLayoutManager, handler: Handler) {
handler.postDelayed({
val firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition()
val lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition()
for (i in firstVisibleItemPosition..lastVisibleItemPosition) {
val holder = recyclerView.findViewHolderForLayoutPosition(i)
if (holder is MarqueeViewHolder) {
// holder.titleView().isSelected = false
if (BuildConfig.DEBUG) Log.d("UiTools", "Launching marquee for ${holder.titleView()?.text}")
holder.titleView()?.isSelected = true
}
(holder as? MarqueeViewHolder)?.titleView?.isSelected = true
}
}, 1500)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment