diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/BaseAdapter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/BaseAdapter.kt index fb48151a..bca2e0b5 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/BaseAdapter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/BaseAdapter.kt @@ -26,7 +26,8 @@ import timber.log.Timber * It should be kept generic enough that it can be used a Base for all lists in the app. */ @Suppress("unused", "UNUSED_PARAMETER") -class BaseAdapter : MultiTypeAdapter(), FastScrollRecyclerView.SectionedAdapter { +class BaseAdapter(allowDuplicateEntries: Boolean = false) : + MultiTypeAdapter(), FastScrollRecyclerView.SectionedAdapter { // Update the BoundedTreeSet if selection type is changed internal var selectionType: SelectionType = SelectionType.MULTIPLE @@ -41,7 +42,7 @@ class BaseAdapter : MultiTypeAdapter(), FastScrollRecyclerView private val diffCallback = GenericDiffCallback() init { - setHasStableIds(true) + setHasStableIds(!allowDuplicateEntries) } override fun getItemId(position: Int): Long { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt index bca305aa..91bcb09d 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/adapters/TrackViewBinder.kt @@ -43,14 +43,7 @@ class TrackViewBinder( override fun onBindViewHolder(holder: TrackViewHolder, item: Identifiable) { val diffAdapter = adapter as BaseAdapter<*> - val track: Track = when (item) { - is Track -> { - item - } - else -> { - return - } - } + val track = (item as? Track) ?: return // Remove observer before binding holder.observableChecked.removeObservers(lifecycleOwner) @@ -59,7 +52,7 @@ class TrackViewBinder( song = track, checkable = checkable, draggable = draggable, - diffAdapter.isSelected(item.longId) + diffAdapter.isSelected(track.longId) ) holder.itemView.setOnLongClickListener { @@ -110,7 +103,7 @@ class TrackViewBinder( diffAdapter.selectionRevision.observe( lifecycleOwner ) { - val newStatus = diffAdapter.isSelected(item.longId) + val newStatus = diffAdapter.isSelected(track.longId) if (newStatus != holder.check.isChecked) holder.check.isChecked = newStatus } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt index a1c3ee81..adcffd95 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/PlayerFragment.kt @@ -176,7 +176,7 @@ class PlayerFragment : private val binding get() = _binding!! private val viewAdapter: BaseAdapter by lazy { - BaseAdapter() + BaseAdapter(allowDuplicateEntries = true) } override fun onCreate(savedInstanceState: Bundle?) {