mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-27 23:40:33 +05:30
refactor: use DiffUtilCallback across all ListAdapters (#7063)
This commit is contained in:
parent
0025782986
commit
40771bc720
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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),
|
||||
|
@ -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 {
|
||||
|
@ -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,
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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
|
@ -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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user