refactor: use DiffUtilCallback across all ListAdapters (#7063)

This commit is contained in:
Thomas W. 2025-02-03 18:03:04 +01:00 committed by GitHub
parent 0025782986
commit 40771bc720
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 73 additions and 176 deletions

View File

@ -2,22 +2,13 @@ package com.github.libretube.ui.activities
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.databinding.VideoTagRowBinding
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.viewholders.VideoTagsViewHolder
class VideoTagsAdapter :
ListAdapter<String, VideoTagsViewHolder>(object : DiffUtil.ItemCallback<String>() {
override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
class VideoTagsAdapter : ListAdapter<String, VideoTagsViewHolder>(DiffUtilItemCallback()) {
override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
}) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VideoTagsViewHolder {
val binding = VideoTagRowBinding.inflate(LayoutInflater.from(parent.context))
return VideoTagsViewHolder(binding)

View File

@ -2,27 +2,15 @@ package com.github.libretube.ui.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.databinding.AddChannelToGroupRowBinding
import com.github.libretube.db.obj.SubscriptionGroup
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.viewholders.AddChannelToGroupViewHolder
class AddChannelToGroupAdapter(
private val channelId: String
) : ListAdapter<SubscriptionGroup, AddChannelToGroupViewHolder>(object: DiffUtil.ItemCallback<SubscriptionGroup>() {
override fun areItemsTheSame(oldItem: SubscriptionGroup, newItem: SubscriptionGroup): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(
oldItem: SubscriptionGroup,
newItem: SubscriptionGroup
): Boolean {
return oldItem == newItem
}
}) {
) : ListAdapter<SubscriptionGroup, AddChannelToGroupViewHolder>(DiffUtilItemCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AddChannelToGroupViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding = AddChannelToGroupRowBinding.inflate(layoutInflater, parent, false)

View File

@ -15,7 +15,6 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import com.github.libretube.R
import com.github.libretube.api.obj.Comment
import com.github.libretube.constants.IntentData
@ -25,6 +24,7 @@ import com.github.libretube.helpers.ClipboardHelper
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.ThemeHelper
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.fragments.CommentsRepliesFragment
import com.github.libretube.ui.viewholders.CommentsViewHolder
import com.github.libretube.util.HtmlParser
@ -37,7 +37,10 @@ class CommentPagingAdapter(
private val isRepliesAdapter: Boolean = false,
private val handleLink: ((url: String) -> Unit)?,
private val dismiss: () -> Unit
) : PagingDataAdapter<Comment, CommentsViewHolder>(CommentCallback) {
) : PagingDataAdapter<Comment, CommentsViewHolder>(DiffUtilItemCallback(
areItemsTheSame = { oldItem, newItem -> oldItem.commentId == newItem.commentId},
areContentsTheSame = { _, _ -> true },
)) {
private var clickEventConsumedByLinkHandler = false
private fun navigateToReplies(comment: Comment) {
@ -140,11 +143,3 @@ class CommentPagingAdapter(
return CommentsViewHolder(binding)
}
}
private object CommentCallback : DiffUtil.ItemCallback<Comment>() {
override fun areItemsTheSame(oldItem: Comment, newItem: Comment): Boolean {
return oldItem.commentId == newItem.commentId
}
override fun areContentsTheSame(oldItem: Comment, newItem: Comment) = true
}

View File

@ -9,7 +9,6 @@ import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.R
import com.github.libretube.constants.IntentData
@ -21,6 +20,7 @@ import com.github.libretube.helpers.BackgroundHelper
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.activities.OfflinePlayerActivity
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setWatchProgressLength
import com.github.libretube.ui.fragments.DownloadTab
@ -39,20 +39,7 @@ class DownloadsAdapter(
private val context: Context,
private val downloadTab: DownloadTab,
private val toggleDownload: (DownloadWithItems) -> Boolean
) : ListAdapter<DownloadWithItems, DownloadsViewHolder>(object :
DiffUtil.ItemCallback<DownloadWithItems>() {
override fun areItemsTheSame(oldItem: DownloadWithItems, newItem: DownloadWithItems): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(
oldItem: DownloadWithItems,
newItem: DownloadWithItems
): Boolean {
return oldItem == newItem
}
}) {
) : ListAdapter<DownloadWithItems, DownloadsViewHolder>(DiffUtilItemCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DownloadsViewHolder {
val binding = VideoRowBinding.inflate(
LayoutInflater.from(parent.context),

View File

@ -3,26 +3,17 @@ package com.github.libretube.ui.adapters
import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.R
import com.github.libretube.api.obj.PipedInstance
import com.github.libretube.databinding.InstanceRowBinding
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.viewholders.InstancesViewHolder
class InstancesAdapter(
initialSelectionApiIndex: Int?,
private val onSelectInstance: (index: Int) -> Unit
) : ListAdapter<PipedInstance, InstancesViewHolder>(object: DiffUtil.ItemCallback<PipedInstance>() {
override fun areItemsTheSame(oldItem: PipedInstance, newItem: PipedInstance): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: PipedInstance, newItem: PipedInstance): Boolean {
return oldItem == newItem
}
}) {
) : ListAdapter<PipedInstance, InstancesViewHolder>(DiffUtilItemCallback()) {
private var selectedInstanceIndex = initialSelectionApiIndex?.takeIf { it >= 0 }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): InstancesViewHolder {

View File

@ -3,7 +3,6 @@ package com.github.libretube.ui.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.api.obj.Subscription
import com.github.libretube.constants.IntentData
@ -11,21 +10,13 @@ import com.github.libretube.databinding.LegacySubscriptionChannelBinding
import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet
import com.github.libretube.ui.viewholders.LegacySubscriptionViewHolder
class LegacySubscriptionAdapter : ListAdapter<Subscription, LegacySubscriptionViewHolder>(object :
DiffUtil.ItemCallback<Subscription>() {
override fun areItemsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
return oldItem == newItem
}
}) {
class LegacySubscriptionAdapter :
ListAdapter<Subscription, LegacySubscriptionViewHolder>(DiffUtilItemCallback()) {
override fun onCreateViewHolder(
parent: ViewGroup,

View File

@ -5,7 +5,6 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.R
import com.github.libretube.constants.IntentData
@ -16,6 +15,7 @@ import com.github.libretube.db.obj.PlaylistBookmark
import com.github.libretube.enums.PlaylistType
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
import com.github.libretube.ui.viewholders.PlaylistBookmarkViewHolder
@ -25,16 +25,11 @@ import kotlinx.coroutines.launch
class PlaylistBookmarkAdapter(
private val bookmarkMode: BookmarkMode = BookmarkMode.FRAGMENT
) : ListAdapter<PlaylistBookmark, PlaylistBookmarkViewHolder>(object: DiffUtil.ItemCallback<PlaylistBookmark>() {
override fun areItemsTheSame(oldItem: PlaylistBookmark, newItem: PlaylistBookmark): Boolean {
return oldItem.playlistId == newItem.playlistId
}
override fun areContentsTheSame(oldItem: PlaylistBookmark, newItem: PlaylistBookmark): Boolean {
return oldItem == newItem
}
}) {
) : ListAdapter<PlaylistBookmark, PlaylistBookmarkViewHolder>(
DiffUtilItemCallback(
areItemsTheSame = { oldItem, newItem -> oldItem.playlistId == newItem.playlistId }
)
) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PlaylistBookmarkViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
return when (bookmarkMode) {

View File

@ -3,7 +3,6 @@ package com.github.libretube.ui.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.R
import com.github.libretube.api.obj.Playlists
@ -12,6 +11,7 @@ import com.github.libretube.databinding.PlaylistsRowBinding
import com.github.libretube.enums.PlaylistType
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet.Companion.PLAYLIST_OPTIONS_REQUEST_KEY
@ -19,16 +19,9 @@ import com.github.libretube.ui.viewholders.PlaylistsViewHolder
class PlaylistsAdapter(
private val playlistType: PlaylistType
) : ListAdapter<Playlists, PlaylistsViewHolder>(object : DiffUtil.ItemCallback<Playlists>() {
override fun areItemsTheSame(oldItem: Playlists, newItem: Playlists): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Playlists, newItem: Playlists): Boolean {
return oldItem == newItem
}
}) {
) : ListAdapter<Playlists, PlaylistsViewHolder>(
DiffUtilItemCallback(areItemsTheSame = { oldItem, newItem -> oldItem.id == newItem.id })
) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PlaylistsViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)

View File

@ -18,7 +18,7 @@ import com.github.libretube.extensions.formatShort
import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.adapters.callbacks.SearchCallback
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setFormattedDuration
import com.github.libretube.ui.extensions.setWatchProgressLength
@ -31,7 +31,12 @@ import com.github.libretube.util.TextUtils
import kotlinx.serialization.encodeToString
// TODO: Replace with SearchResultsAdapter when migrating the channel fragment to use Paging as well
class SearchChannelAdapter : ListAdapter<ContentItem, SearchViewHolder>(SearchCallback) {
class SearchChannelAdapter : ListAdapter<ContentItem, SearchViewHolder>(
DiffUtilItemCallback(
areItemsTheSame = { oldItem, newItem -> oldItem.url == newItem.url },
areContentsTheSame = { _, _ -> true },
)
) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)

View File

@ -3,11 +3,11 @@ package com.github.libretube.ui.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.databinding.SuggestionRowBinding
import com.github.libretube.db.DatabaseHolder.Database
import com.github.libretube.db.obj.SearchHistoryItem
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.viewholders.SuggestionsViewHolder
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
@ -15,16 +15,8 @@ import kotlinx.coroutines.runBlocking
class SearchHistoryAdapter(
private val onRootClickListener: (String) -> Unit,
private val onArrowClickListener: (String) -> Unit,
) : ListAdapter<String, SuggestionsViewHolder>(object: DiffUtil.ItemCallback<String>() {
override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
) : ListAdapter<String, SuggestionsViewHolder>(DiffUtilItemCallback()) {
override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
}) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuggestionsViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding = SuggestionRowBinding.inflate(layoutInflater, parent, false)

View File

@ -19,7 +19,7 @@ import com.github.libretube.extensions.formatShort
import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.adapters.callbacks.SearchCallback
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setFormattedDuration
import com.github.libretube.ui.extensions.setWatchProgressLength
@ -37,7 +37,12 @@ import kotlinx.serialization.encodeToString
class SearchResultsAdapter(
private val timeStamp: Long = 0
) : PagingDataAdapter<ContentItem, SearchViewHolder>(SearchCallback) {
) : PagingDataAdapter<ContentItem, SearchViewHolder>(
DiffUtilItemCallback(
areItemsTheSame = { oldItem, newItem -> oldItem.url == newItem.url },
areContentsTheSame = { _, _ -> true },
)
) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)

View File

@ -2,24 +2,15 @@ package com.github.libretube.ui.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.databinding.SuggestionRowBinding
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.viewholders.SuggestionsViewHolder
class SearchSuggestionsAdapter(
private val onRootClickListener: (String) -> Unit,
private val onArrowClickListener: (String) -> Unit,
) : ListAdapter<String, SuggestionsViewHolder>(object: DiffUtil.ItemCallback<String>() {
override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
}) {
) : ListAdapter<String, SuggestionsViewHolder>(DiffUtilItemCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuggestionsViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)

View File

@ -3,7 +3,6 @@ package com.github.libretube.ui.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.api.obj.Subscription
import com.github.libretube.constants.IntentData
@ -11,22 +10,14 @@ import com.github.libretube.databinding.ChannelSubscriptionRowBinding
import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setupSubscriptionButton
import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet
import com.github.libretube.ui.viewholders.SubscriptionChannelViewHolder
class SubscriptionChannelAdapter : ListAdapter<Subscription, SubscriptionChannelViewHolder>(object :
DiffUtil.ItemCallback<Subscription>() {
override fun areItemsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
return oldItem == newItem
}
}) {
class SubscriptionChannelAdapter :
ListAdapter<Subscription, SubscriptionChannelViewHolder>(DiffUtilItemCallback()) {
private var visibleCount = 20
override fun getItemCount() = minOf(visibleCount, currentList.size)

View File

@ -2,7 +2,6 @@ package com.github.libretube.ui.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.api.obj.Subscription
import com.github.libretube.databinding.SubscriptionGroupChannelRowBinding
@ -10,21 +9,14 @@ import com.github.libretube.db.obj.SubscriptionGroup
import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.viewholders.SubscriptionGroupChannelRowViewHolder
class SubscriptionGroupChannelsAdapter(
private val group: SubscriptionGroup,
private val onGroupChanged: (SubscriptionGroup) -> Unit
) : ListAdapter<Subscription, SubscriptionGroupChannelRowViewHolder>(object: DiffUtil.ItemCallback<Subscription>() {
override fun areItemsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
return oldItem == newItem
}
) : ListAdapter<Subscription, SubscriptionGroupChannelRowViewHolder>(DiffUtilItemCallback()) {
override fun areContentsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
return oldItem == newItem
}
}) {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int

View File

@ -8,7 +8,6 @@ import androidx.core.os.bundleOf
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView.LayoutManager
@ -25,6 +24,7 @@ import com.github.libretube.extensions.toID
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setFormattedDuration
import com.github.libretube.ui.extensions.setWatchProgressLength
@ -38,16 +38,8 @@ import kotlinx.coroutines.withContext
class VideosAdapter(
private val forceMode: LayoutMode = LayoutMode.RESPECT_PREF
) : ListAdapter<StreamItem, VideosViewHolder>(object: DiffUtil.ItemCallback<StreamItem>() {
override fun areItemsTheSame(oldItem: StreamItem, newItem: StreamItem): Boolean {
return oldItem == newItem
}
) : ListAdapter<StreamItem, VideosViewHolder>(DiffUtilItemCallback()) {
override fun areContentsTheSame(oldItem: StreamItem, newItem: StreamItem): Boolean {
return oldItem == newItem
}
}) {
override fun getItemViewType(position: Int): Int {
return if (currentList[position].type == CAUGHT_UP_STREAM_TYPE) CAUGHT_UP_TYPE else NORMAL_TYPE
}

View File

@ -5,7 +5,6 @@ import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.github.libretube.constants.IntentData
import com.github.libretube.databinding.VideoRowBinding
@ -13,6 +12,7 @@ import com.github.libretube.db.DatabaseHolder
import com.github.libretube.db.obj.WatchHistoryItem
import com.github.libretube.helpers.ImageHelper
import com.github.libretube.helpers.NavigationHelper
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.setFormattedDuration
import com.github.libretube.ui.extensions.setWatchProgressLength
@ -25,17 +25,8 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
class WatchHistoryAdapter : ListAdapter<WatchHistoryItem, WatchHistoryViewHolder>(object :
DiffUtil.ItemCallback<WatchHistoryItem>() {
override fun areItemsTheSame(oldItem: WatchHistoryItem, newItem: WatchHistoryItem): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: WatchHistoryItem, newItem: WatchHistoryItem): Boolean {
return oldItem == newItem
}
}) {
class WatchHistoryAdapter :
ListAdapter<WatchHistoryItem, WatchHistoryViewHolder>(DiffUtilItemCallback()) {
fun removeFromWatchHistory(position: Int) {
val history = getItem(position)

View File

@ -0,0 +1,19 @@
package com.github.libretube.ui.adapters.callbacks
import androidx.recyclerview.widget.DiffUtil
@Suppress("FunctionName")
fun <T> DiffUtilItemCallback(
areItemsTheSame: (T, T) -> Boolean = ::equals,
areContentsTheSame: (T, T) -> Boolean = ::equals,
) = object : DiffUtil.ItemCallback<T>() {
override fun areItemsTheSame(oldItem: T & Any, newItem: T & Any): Boolean {
return areItemsTheSame(oldItem, newItem)
}
override fun areContentsTheSame(oldItem: T & Any, newItem: T & Any) =
areContentsTheSame(oldItem, newItem)
}
private fun <T> equals(first: T, second: T) = first == second

View File

@ -1,12 +0,0 @@
package com.github.libretube.ui.adapters.callbacks
import androidx.recyclerview.widget.DiffUtil
import com.github.libretube.api.obj.ContentItem
object SearchCallback : DiffUtil.ItemCallback<ContentItem>() {
override fun areItemsTheSame(oldItem: ContentItem, newItem: ContentItem): Boolean {
return oldItem.url == newItem.url
}
override fun areContentsTheSame(oldItem: ContentItem, newItem: ContentItem) = true
}