mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-28 07:50:31 +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.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.databinding.VideoTagRowBinding
|
import com.github.libretube.databinding.VideoTagRowBinding
|
||||||
|
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
|
||||||
import com.github.libretube.ui.viewholders.VideoTagsViewHolder
|
import com.github.libretube.ui.viewholders.VideoTagsViewHolder
|
||||||
|
|
||||||
class VideoTagsAdapter :
|
class VideoTagsAdapter : ListAdapter<String, VideoTagsViewHolder>(DiffUtilItemCallback()) {
|
||||||
ListAdapter<String, VideoTagsViewHolder>(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
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VideoTagsViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VideoTagsViewHolder {
|
||||||
val binding = VideoTagRowBinding.inflate(LayoutInflater.from(parent.context))
|
val binding = VideoTagRowBinding.inflate(LayoutInflater.from(parent.context))
|
||||||
return VideoTagsViewHolder(binding)
|
return VideoTagsViewHolder(binding)
|
||||||
|
@ -2,27 +2,15 @@ package com.github.libretube.ui.adapters
|
|||||||
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.databinding.AddChannelToGroupRowBinding
|
import com.github.libretube.databinding.AddChannelToGroupRowBinding
|
||||||
import com.github.libretube.db.obj.SubscriptionGroup
|
import com.github.libretube.db.obj.SubscriptionGroup
|
||||||
|
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
|
||||||
import com.github.libretube.ui.viewholders.AddChannelToGroupViewHolder
|
import com.github.libretube.ui.viewholders.AddChannelToGroupViewHolder
|
||||||
|
|
||||||
class AddChannelToGroupAdapter(
|
class AddChannelToGroupAdapter(
|
||||||
private val channelId: String
|
private val channelId: String
|
||||||
) : ListAdapter<SubscriptionGroup, AddChannelToGroupViewHolder>(object: DiffUtil.ItemCallback<SubscriptionGroup>() {
|
) : ListAdapter<SubscriptionGroup, AddChannelToGroupViewHolder>(DiffUtilItemCallback()) {
|
||||||
override fun areItemsTheSame(oldItem: SubscriptionGroup, newItem: SubscriptionGroup): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(
|
|
||||||
oldItem: SubscriptionGroup,
|
|
||||||
newItem: SubscriptionGroup
|
|
||||||
): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AddChannelToGroupViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AddChannelToGroupViewHolder {
|
||||||
val layoutInflater = LayoutInflater.from(parent.context)
|
val layoutInflater = LayoutInflater.from(parent.context)
|
||||||
val binding = AddChannelToGroupRowBinding.inflate(layoutInflater, parent, false)
|
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.commit
|
||||||
import androidx.fragment.app.replace
|
import androidx.fragment.app.replace
|
||||||
import androidx.paging.PagingDataAdapter
|
import androidx.paging.PagingDataAdapter
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.api.obj.Comment
|
import com.github.libretube.api.obj.Comment
|
||||||
import com.github.libretube.constants.IntentData
|
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.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
import com.github.libretube.helpers.NavigationHelper
|
||||||
import com.github.libretube.helpers.ThemeHelper
|
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.fragments.CommentsRepliesFragment
|
||||||
import com.github.libretube.ui.viewholders.CommentsViewHolder
|
import com.github.libretube.ui.viewholders.CommentsViewHolder
|
||||||
import com.github.libretube.util.HtmlParser
|
import com.github.libretube.util.HtmlParser
|
||||||
@ -37,7 +37,10 @@ class CommentPagingAdapter(
|
|||||||
private val isRepliesAdapter: Boolean = false,
|
private val isRepliesAdapter: Boolean = false,
|
||||||
private val handleLink: ((url: String) -> Unit)?,
|
private val handleLink: ((url: String) -> Unit)?,
|
||||||
private val dismiss: () -> 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 var clickEventConsumedByLinkHandler = false
|
||||||
|
|
||||||
private fun navigateToReplies(comment: Comment) {
|
private fun navigateToReplies(comment: Comment) {
|
||||||
@ -140,11 +143,3 @@ class CommentPagingAdapter(
|
|||||||
return CommentsViewHolder(binding)
|
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.os.bundleOf
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.constants.IntentData
|
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.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
import com.github.libretube.helpers.NavigationHelper
|
||||||
import com.github.libretube.ui.activities.OfflinePlayerActivity
|
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.base.BaseActivity
|
||||||
import com.github.libretube.ui.extensions.setWatchProgressLength
|
import com.github.libretube.ui.extensions.setWatchProgressLength
|
||||||
import com.github.libretube.ui.fragments.DownloadTab
|
import com.github.libretube.ui.fragments.DownloadTab
|
||||||
@ -39,20 +39,7 @@ class DownloadsAdapter(
|
|||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val downloadTab: DownloadTab,
|
private val downloadTab: DownloadTab,
|
||||||
private val toggleDownload: (DownloadWithItems) -> Boolean
|
private val toggleDownload: (DownloadWithItems) -> Boolean
|
||||||
) : ListAdapter<DownloadWithItems, DownloadsViewHolder>(object :
|
) : ListAdapter<DownloadWithItems, DownloadsViewHolder>(DiffUtilItemCallback()) {
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DownloadsViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DownloadsViewHolder {
|
||||||
val binding = VideoRowBinding.inflate(
|
val binding = VideoRowBinding.inflate(
|
||||||
LayoutInflater.from(parent.context),
|
LayoutInflater.from(parent.context),
|
||||||
|
@ -3,26 +3,17 @@ package com.github.libretube.ui.adapters
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.api.obj.PipedInstance
|
import com.github.libretube.api.obj.PipedInstance
|
||||||
import com.github.libretube.databinding.InstanceRowBinding
|
import com.github.libretube.databinding.InstanceRowBinding
|
||||||
|
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
|
||||||
import com.github.libretube.ui.viewholders.InstancesViewHolder
|
import com.github.libretube.ui.viewholders.InstancesViewHolder
|
||||||
|
|
||||||
class InstancesAdapter(
|
class InstancesAdapter(
|
||||||
initialSelectionApiIndex: Int?,
|
initialSelectionApiIndex: Int?,
|
||||||
private val onSelectInstance: (index: Int) -> Unit
|
private val onSelectInstance: (index: Int) -> Unit
|
||||||
) : ListAdapter<PipedInstance, InstancesViewHolder>(object: DiffUtil.ItemCallback<PipedInstance>() {
|
) : ListAdapter<PipedInstance, InstancesViewHolder>(DiffUtilItemCallback()) {
|
||||||
override fun areItemsTheSame(oldItem: PipedInstance, newItem: PipedInstance): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: PipedInstance, newItem: PipedInstance): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
private var selectedInstanceIndex = initialSelectionApiIndex?.takeIf { it >= 0 }
|
private var selectedInstanceIndex = initialSelectionApiIndex?.takeIf { it >= 0 }
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): InstancesViewHolder {
|
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.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.api.obj.Subscription
|
import com.github.libretube.api.obj.Subscription
|
||||||
import com.github.libretube.constants.IntentData
|
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.extensions.toID
|
||||||
import com.github.libretube.helpers.ImageHelper
|
import com.github.libretube.helpers.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
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.base.BaseActivity
|
||||||
import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet
|
import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet
|
||||||
import com.github.libretube.ui.viewholders.LegacySubscriptionViewHolder
|
import com.github.libretube.ui.viewholders.LegacySubscriptionViewHolder
|
||||||
|
|
||||||
class LegacySubscriptionAdapter : ListAdapter<Subscription, LegacySubscriptionViewHolder>(object :
|
class LegacySubscriptionAdapter :
|
||||||
DiffUtil.ItemCallback<Subscription>() {
|
ListAdapter<Subscription, LegacySubscriptionViewHolder>(DiffUtilItemCallback()) {
|
||||||
override fun areItemsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(
|
override fun onCreateViewHolder(
|
||||||
parent: ViewGroup,
|
parent: ViewGroup,
|
||||||
|
@ -5,7 +5,6 @@ import android.view.LayoutInflater
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.constants.IntentData
|
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.enums.PlaylistType
|
||||||
import com.github.libretube.helpers.ImageHelper
|
import com.github.libretube.helpers.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
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.base.BaseActivity
|
||||||
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
|
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
|
||||||
import com.github.libretube.ui.viewholders.PlaylistBookmarkViewHolder
|
import com.github.libretube.ui.viewholders.PlaylistBookmarkViewHolder
|
||||||
@ -25,16 +25,11 @@ import kotlinx.coroutines.launch
|
|||||||
|
|
||||||
class PlaylistBookmarkAdapter(
|
class PlaylistBookmarkAdapter(
|
||||||
private val bookmarkMode: BookmarkMode = BookmarkMode.FRAGMENT
|
private val bookmarkMode: BookmarkMode = BookmarkMode.FRAGMENT
|
||||||
) : ListAdapter<PlaylistBookmark, PlaylistBookmarkViewHolder>(object: DiffUtil.ItemCallback<PlaylistBookmark>() {
|
) : ListAdapter<PlaylistBookmark, PlaylistBookmarkViewHolder>(
|
||||||
override fun areItemsTheSame(oldItem: PlaylistBookmark, newItem: PlaylistBookmark): Boolean {
|
DiffUtilItemCallback(
|
||||||
return oldItem.playlistId == newItem.playlistId
|
areItemsTheSame = { oldItem, newItem -> oldItem.playlistId == newItem.playlistId }
|
||||||
}
|
)
|
||||||
|
) {
|
||||||
override fun areContentsTheSame(oldItem: PlaylistBookmark, newItem: PlaylistBookmark): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PlaylistBookmarkViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PlaylistBookmarkViewHolder {
|
||||||
val layoutInflater = LayoutInflater.from(parent.context)
|
val layoutInflater = LayoutInflater.from(parent.context)
|
||||||
return when (bookmarkMode) {
|
return when (bookmarkMode) {
|
||||||
|
@ -3,7 +3,6 @@ package com.github.libretube.ui.adapters
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.api.obj.Playlists
|
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.enums.PlaylistType
|
||||||
import com.github.libretube.helpers.ImageHelper
|
import com.github.libretube.helpers.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
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.base.BaseActivity
|
||||||
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
|
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
|
||||||
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet.Companion.PLAYLIST_OPTIONS_REQUEST_KEY
|
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(
|
class PlaylistsAdapter(
|
||||||
private val playlistType: PlaylistType
|
private val playlistType: PlaylistType
|
||||||
) : ListAdapter<Playlists, PlaylistsViewHolder>(object : DiffUtil.ItemCallback<Playlists>() {
|
) : ListAdapter<Playlists, PlaylistsViewHolder>(
|
||||||
override fun areItemsTheSame(oldItem: Playlists, newItem: Playlists): Boolean {
|
DiffUtilItemCallback(areItemsTheSame = { oldItem, newItem -> oldItem.id == newItem.id })
|
||||||
return oldItem.id == newItem.id
|
) {
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: Playlists, newItem: Playlists): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PlaylistsViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PlaylistsViewHolder {
|
||||||
val layoutInflater = LayoutInflater.from(parent.context)
|
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.extensions.toID
|
||||||
import com.github.libretube.helpers.ImageHelper
|
import com.github.libretube.helpers.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
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.base.BaseActivity
|
||||||
import com.github.libretube.ui.extensions.setFormattedDuration
|
import com.github.libretube.ui.extensions.setFormattedDuration
|
||||||
import com.github.libretube.ui.extensions.setWatchProgressLength
|
import com.github.libretube.ui.extensions.setWatchProgressLength
|
||||||
@ -31,7 +31,12 @@ import com.github.libretube.util.TextUtils
|
|||||||
import kotlinx.serialization.encodeToString
|
import kotlinx.serialization.encodeToString
|
||||||
|
|
||||||
// TODO: Replace with SearchResultsAdapter when migrating the channel fragment to use Paging as well
|
// 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 {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchViewHolder {
|
||||||
val layoutInflater = LayoutInflater.from(parent.context)
|
val layoutInflater = LayoutInflater.from(parent.context)
|
||||||
|
|
||||||
|
@ -3,11 +3,11 @@ package com.github.libretube.ui.adapters
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.databinding.SuggestionRowBinding
|
import com.github.libretube.databinding.SuggestionRowBinding
|
||||||
import com.github.libretube.db.DatabaseHolder.Database
|
import com.github.libretube.db.DatabaseHolder.Database
|
||||||
import com.github.libretube.db.obj.SearchHistoryItem
|
import com.github.libretube.db.obj.SearchHistoryItem
|
||||||
|
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
|
||||||
import com.github.libretube.ui.viewholders.SuggestionsViewHolder
|
import com.github.libretube.ui.viewholders.SuggestionsViewHolder
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
@ -15,16 +15,8 @@ import kotlinx.coroutines.runBlocking
|
|||||||
class SearchHistoryAdapter(
|
class SearchHistoryAdapter(
|
||||||
private val onRootClickListener: (String) -> Unit,
|
private val onRootClickListener: (String) -> Unit,
|
||||||
private val onArrowClickListener: (String) -> Unit,
|
private val onArrowClickListener: (String) -> Unit,
|
||||||
) : ListAdapter<String, SuggestionsViewHolder>(object: DiffUtil.ItemCallback<String>() {
|
) : ListAdapter<String, SuggestionsViewHolder>(DiffUtilItemCallback()) {
|
||||||
override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuggestionsViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuggestionsViewHolder {
|
||||||
val layoutInflater = LayoutInflater.from(parent.context)
|
val layoutInflater = LayoutInflater.from(parent.context)
|
||||||
val binding = SuggestionRowBinding.inflate(layoutInflater, parent, false)
|
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.extensions.toID
|
||||||
import com.github.libretube.helpers.ImageHelper
|
import com.github.libretube.helpers.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
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.base.BaseActivity
|
||||||
import com.github.libretube.ui.extensions.setFormattedDuration
|
import com.github.libretube.ui.extensions.setFormattedDuration
|
||||||
import com.github.libretube.ui.extensions.setWatchProgressLength
|
import com.github.libretube.ui.extensions.setWatchProgressLength
|
||||||
@ -37,7 +37,12 @@ import kotlinx.serialization.encodeToString
|
|||||||
|
|
||||||
class SearchResultsAdapter(
|
class SearchResultsAdapter(
|
||||||
private val timeStamp: Long = 0
|
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 {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchViewHolder {
|
||||||
val layoutInflater = LayoutInflater.from(parent.context)
|
val layoutInflater = LayoutInflater.from(parent.context)
|
||||||
|
|
||||||
|
@ -2,24 +2,15 @@ package com.github.libretube.ui.adapters
|
|||||||
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.databinding.SuggestionRowBinding
|
import com.github.libretube.databinding.SuggestionRowBinding
|
||||||
|
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
|
||||||
import com.github.libretube.ui.viewholders.SuggestionsViewHolder
|
import com.github.libretube.ui.viewholders.SuggestionsViewHolder
|
||||||
|
|
||||||
class SearchSuggestionsAdapter(
|
class SearchSuggestionsAdapter(
|
||||||
private val onRootClickListener: (String) -> Unit,
|
private val onRootClickListener: (String) -> Unit,
|
||||||
private val onArrowClickListener: (String) -> Unit,
|
private val onArrowClickListener: (String) -> Unit,
|
||||||
) : ListAdapter<String, SuggestionsViewHolder>(object: DiffUtil.ItemCallback<String>() {
|
) : ListAdapter<String, SuggestionsViewHolder>(DiffUtilItemCallback()) {
|
||||||
override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuggestionsViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuggestionsViewHolder {
|
||||||
val layoutInflater = LayoutInflater.from(parent.context)
|
val layoutInflater = LayoutInflater.from(parent.context)
|
||||||
|
@ -3,7 +3,6 @@ package com.github.libretube.ui.adapters
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.api.obj.Subscription
|
import com.github.libretube.api.obj.Subscription
|
||||||
import com.github.libretube.constants.IntentData
|
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.extensions.toID
|
||||||
import com.github.libretube.helpers.ImageHelper
|
import com.github.libretube.helpers.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
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.base.BaseActivity
|
||||||
import com.github.libretube.ui.extensions.setupSubscriptionButton
|
import com.github.libretube.ui.extensions.setupSubscriptionButton
|
||||||
import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet
|
import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet
|
||||||
import com.github.libretube.ui.viewholders.SubscriptionChannelViewHolder
|
import com.github.libretube.ui.viewholders.SubscriptionChannelViewHolder
|
||||||
|
|
||||||
class SubscriptionChannelAdapter : ListAdapter<Subscription, SubscriptionChannelViewHolder>(object :
|
class SubscriptionChannelAdapter :
|
||||||
DiffUtil.ItemCallback<Subscription>() {
|
ListAdapter<Subscription, SubscriptionChannelViewHolder>(DiffUtilItemCallback()) {
|
||||||
override fun areItemsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
private var visibleCount = 20
|
private var visibleCount = 20
|
||||||
|
|
||||||
override fun getItemCount() = minOf(visibleCount, currentList.size)
|
override fun getItemCount() = minOf(visibleCount, currentList.size)
|
||||||
|
@ -2,7 +2,6 @@ package com.github.libretube.ui.adapters
|
|||||||
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.api.obj.Subscription
|
import com.github.libretube.api.obj.Subscription
|
||||||
import com.github.libretube.databinding.SubscriptionGroupChannelRowBinding
|
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.extensions.toID
|
||||||
import com.github.libretube.helpers.ImageHelper
|
import com.github.libretube.helpers.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
import com.github.libretube.helpers.NavigationHelper
|
||||||
|
import com.github.libretube.ui.adapters.callbacks.DiffUtilItemCallback
|
||||||
import com.github.libretube.ui.viewholders.SubscriptionGroupChannelRowViewHolder
|
import com.github.libretube.ui.viewholders.SubscriptionGroupChannelRowViewHolder
|
||||||
|
|
||||||
class SubscriptionGroupChannelsAdapter(
|
class SubscriptionGroupChannelsAdapter(
|
||||||
private val group: SubscriptionGroup,
|
private val group: SubscriptionGroup,
|
||||||
private val onGroupChanged: (SubscriptionGroup) -> Unit
|
private val onGroupChanged: (SubscriptionGroup) -> Unit
|
||||||
) : ListAdapter<Subscription, SubscriptionGroupChannelRowViewHolder>(object: DiffUtil.ItemCallback<Subscription>() {
|
) : ListAdapter<Subscription, SubscriptionGroupChannelRowViewHolder>(DiffUtilItemCallback()) {
|
||||||
override fun areItemsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: Subscription, newItem: Subscription): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
override fun onCreateViewHolder(
|
override fun onCreateViewHolder(
|
||||||
parent: ViewGroup,
|
parent: ViewGroup,
|
||||||
viewType: Int
|
viewType: Int
|
||||||
|
@ -8,7 +8,6 @@ import androidx.core.os.bundleOf
|
|||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import androidx.recyclerview.widget.RecyclerView.LayoutManager
|
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.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
import com.github.libretube.helpers.NavigationHelper
|
||||||
import com.github.libretube.helpers.PreferenceHelper
|
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.base.BaseActivity
|
||||||
import com.github.libretube.ui.extensions.setFormattedDuration
|
import com.github.libretube.ui.extensions.setFormattedDuration
|
||||||
import com.github.libretube.ui.extensions.setWatchProgressLength
|
import com.github.libretube.ui.extensions.setWatchProgressLength
|
||||||
@ -38,16 +38,8 @@ import kotlinx.coroutines.withContext
|
|||||||
|
|
||||||
class VideosAdapter(
|
class VideosAdapter(
|
||||||
private val forceMode: LayoutMode = LayoutMode.RESPECT_PREF
|
private val forceMode: LayoutMode = LayoutMode.RESPECT_PREF
|
||||||
) : ListAdapter<StreamItem, VideosViewHolder>(object: DiffUtil.ItemCallback<StreamItem>() {
|
) : ListAdapter<StreamItem, VideosViewHolder>(DiffUtilItemCallback()) {
|
||||||
override fun areItemsTheSame(oldItem: StreamItem, newItem: StreamItem): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: StreamItem, newItem: StreamItem): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
override fun getItemViewType(position: Int): Int {
|
override fun getItemViewType(position: Int): Int {
|
||||||
return if (currentList[position].type == CAUGHT_UP_STREAM_TYPE) CAUGHT_UP_TYPE else NORMAL_TYPE
|
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.os.bundleOf
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.DiffUtil
|
|
||||||
import androidx.recyclerview.widget.ListAdapter
|
import androidx.recyclerview.widget.ListAdapter
|
||||||
import com.github.libretube.constants.IntentData
|
import com.github.libretube.constants.IntentData
|
||||||
import com.github.libretube.databinding.VideoRowBinding
|
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.db.obj.WatchHistoryItem
|
||||||
import com.github.libretube.helpers.ImageHelper
|
import com.github.libretube.helpers.ImageHelper
|
||||||
import com.github.libretube.helpers.NavigationHelper
|
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.base.BaseActivity
|
||||||
import com.github.libretube.ui.extensions.setFormattedDuration
|
import com.github.libretube.ui.extensions.setFormattedDuration
|
||||||
import com.github.libretube.ui.extensions.setWatchProgressLength
|
import com.github.libretube.ui.extensions.setWatchProgressLength
|
||||||
@ -25,17 +25,8 @@ import kotlinx.coroutines.launch
|
|||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
class WatchHistoryAdapter : ListAdapter<WatchHistoryItem, WatchHistoryViewHolder>(object :
|
class WatchHistoryAdapter :
|
||||||
DiffUtil.ItemCallback<WatchHistoryItem>() {
|
ListAdapter<WatchHistoryItem, WatchHistoryViewHolder>(DiffUtilItemCallback()) {
|
||||||
override fun areItemsTheSame(oldItem: WatchHistoryItem, newItem: WatchHistoryItem): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun areContentsTheSame(oldItem: WatchHistoryItem, newItem: WatchHistoryItem): Boolean {
|
|
||||||
return oldItem == newItem
|
|
||||||
}
|
|
||||||
|
|
||||||
}) {
|
|
||||||
|
|
||||||
fun removeFromWatchHistory(position: Int) {
|
fun removeFromWatchHistory(position: Int) {
|
||||||
val history = getItem(position)
|
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