diff --git a/app/build.gradle b/app/build.gradle index 7e489c944..c58662ce1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,8 +63,8 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2' implementation 'androidx.core:core-ktx:1.5.0-alpha05' implementation 'androidx.activity:activity-ktx:1.2.0-beta01' diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt index fbc8f50a6..057b846d1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt @@ -9,6 +9,7 @@ import androidx.core.net.toUri import androidx.core.text.parseAsHtml import androidx.core.view.isVisible import coil.ImageLoader +import coil.util.CoilUtils import com.google.android.material.chip.Chip import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -50,7 +51,7 @@ class DetailsFragment : BaseFragment(), View.OnClickList with(binding) { imageViewCover.newImageRequest(manga.largeCoverUrl ?: manga.coverUrl) .fallback(R.drawable.ic_placeholder) - .crossfade(true) + .placeholderMemoryCacheKey(CoilUtils.metadata(imageViewCover)?.memoryCacheKey) .lifecycle(viewLifecycleOwner) .enqueueWith(coil) textViewTitle.text = manga.title diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt index 1bf30cd03..feab4893c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListFragment.kt @@ -62,7 +62,7 @@ abstract class MangaListFragment : BaseFragment(), override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.drawer?.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) - listAdapter = MangaListAdapter(get(), this) + listAdapter = MangaListAdapter(get(), viewLifecycleOwner, this) paginationListener = PaginationScrollListener(4, this) with(binding.recyclerView) { setHasFixedSize(true) diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListSheet.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListSheet.kt index 4b1c4f324..f15768e69 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListSheet.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/MangaListSheet.kt @@ -47,7 +47,7 @@ abstract class MangaListSheet : BaseBottomSheet(), override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - adapter = MangaListAdapter(get(), this) + adapter = MangaListAdapter(get(), viewLifecycleOwner, this) initListMode(settings.listMode) binding.recyclerView.adapter = adapter binding.recyclerView.addOnScrollListener(PaginationScrollListener(4, this)) diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaGridItemAD.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaGridItemAD.kt index 29442d70b..e78f8f26e 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaGridItemAD.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaGridItemAD.kt @@ -1,7 +1,9 @@ package org.koitharu.kotatsu.list.ui.adapter +import androidx.lifecycle.LifecycleOwner import coil.ImageLoader import coil.request.Disposable +import coil.util.CoilUtils import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener @@ -13,6 +15,7 @@ import org.koitharu.kotatsu.utils.ext.newImageRequest fun mangaGridItemAD( coil: ImageLoader, + lifecycleOwner: LifecycleOwner, clickListener: OnListItemClickListener ) = adapterDelegateViewBinding( { inflater, parent -> ItemMangaGridBinding.inflate(inflater, parent, false) } @@ -34,11 +37,14 @@ fun mangaGridItemAD( .placeholder(R.drawable.ic_placeholder) .fallback(R.drawable.ic_placeholder) .error(R.drawable.ic_placeholder) + .allowRgb565(true) + .lifecycle(lifecycleOwner) .enqueueWith(coil) } onViewRecycled { imageRequest?.dispose() + CoilUtils.clear(binding.imageViewCover) binding.imageViewCover.setImageDrawable(null) } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListAdapter.kt index 73210315f..466bea18d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListAdapter.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.list.ui.adapter +import androidx.lifecycle.LifecycleOwner import androidx.recyclerview.widget.DiffUtil import coil.ImageLoader import com.hannesdorfmann.adapterdelegates4.AsyncListDifferDelegationAdapter @@ -14,16 +15,21 @@ import kotlin.jvm.internal.Intrinsics class MangaListAdapter( coil: ImageLoader, + lifecycleOwner: LifecycleOwner, clickListener: OnListItemClickListener ) : AsyncListDifferDelegationAdapter(DiffCallback()) { init { - delegatesManager.addDelegate(ITEM_TYPE_MANGA_LIST, mangaListItemAD(coil, clickListener)) + delegatesManager + .addDelegate( + ITEM_TYPE_MANGA_LIST, + mangaListItemAD(coil, lifecycleOwner, clickListener) + ) .addDelegate( ITEM_TYPE_MANGA_LIST_DETAILED, - mangaListDetailedItemAD(coil, clickListener) + mangaListDetailedItemAD(coil, lifecycleOwner, clickListener) ) - .addDelegate(ITEM_TYPE_MANGA_GRID, mangaGridItemAD(coil, clickListener)) + .addDelegate(ITEM_TYPE_MANGA_GRID, mangaGridItemAD(coil, lifecycleOwner, clickListener)) .addDelegate(ITEM_TYPE_PROGRESS, indeterminateProgressAD()) .addDelegate(ITEM_TYPE_DATE, relatedDateItemAD()) } diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListDetailedItemAD.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListDetailedItemAD.kt index 6f48278bd..1e3dd87db 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListDetailedItemAD.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListDetailedItemAD.kt @@ -1,7 +1,9 @@ package org.koitharu.kotatsu.list.ui.adapter +import androidx.lifecycle.LifecycleOwner import coil.ImageLoader import coil.request.Disposable +import coil.util.CoilUtils import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener @@ -14,6 +16,7 @@ import org.koitharu.kotatsu.utils.ext.textAndVisible fun mangaListDetailedItemAD( coil: ImageLoader, + lifecycleOwner: LifecycleOwner, clickListener: OnListItemClickListener ) = adapterDelegateViewBinding( { inflater, parent -> ItemMangaListDetailsBinding.inflate(inflater, parent, false) } @@ -36,6 +39,8 @@ fun mangaListDetailedItemAD( .placeholder(R.drawable.ic_placeholder) .fallback(R.drawable.ic_placeholder) .error(R.drawable.ic_placeholder) + .allowRgb565(true) + .lifecycle(lifecycleOwner) .enqueueWith(coil) binding.textViewRating.textAndVisible = item.rating binding.textViewTags.text = item.tags @@ -43,6 +48,7 @@ fun mangaListDetailedItemAD( onViewRecycled { imageRequest?.dispose() + CoilUtils.clear(binding.imageViewCover) binding.imageViewCover.setImageDrawable(null) } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListItemAD.kt b/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListItemAD.kt index e21dbb173..91f1e6dd8 100644 --- a/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListItemAD.kt +++ b/app/src/main/java/org/koitharu/kotatsu/list/ui/adapter/MangaListItemAD.kt @@ -1,7 +1,9 @@ package org.koitharu.kotatsu.list.ui.adapter +import androidx.lifecycle.LifecycleOwner import coil.ImageLoader import coil.request.Disposable +import coil.util.CoilUtils import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding import org.koitharu.kotatsu.R import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener @@ -14,6 +16,7 @@ import org.koitharu.kotatsu.utils.ext.textAndVisible fun mangaListItemAD( coil: ImageLoader, + lifecycleOwner: LifecycleOwner, clickListener: OnListItemClickListener ) = adapterDelegateViewBinding( { inflater, parent -> ItemMangaListBinding.inflate(inflater, parent, false) } @@ -36,11 +39,14 @@ fun mangaListItemAD( .placeholder(R.drawable.ic_placeholder) .fallback(R.drawable.ic_placeholder) .error(R.drawable.ic_placeholder) + .allowRgb565(true) + .lifecycle(lifecycleOwner) .enqueueWith(coil) } onViewRecycled { imageRequest?.dispose() + CoilUtils.clear(binding.imageViewCover) binding.imageViewCover.setImageDrawable(null) } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/thumbnails/adapter/PageThumbnailAD.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/thumbnails/adapter/PageThumbnailAD.kt index 71337d377..4f892c2e5 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/thumbnails/adapter/PageThumbnailAD.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/thumbnails/adapter/PageThumbnailAD.kt @@ -46,6 +46,7 @@ fun pageThumbnailAD( ImageRequest.Builder(context) .data(url) .size(thumbSize) + .allowRgb565(true) .build() ).drawable withContext(Dispatchers.Main) { diff --git a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt index ef05ce1e9..292377db4 100644 --- a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedFragment.kt @@ -14,6 +14,7 @@ import org.koitharu.kotatsu.base.ui.list.decor.SpacingItemDecoration import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.databinding.FragmentFeedBinding import org.koitharu.kotatsu.details.ui.DetailsActivity +import org.koitharu.kotatsu.tracker.ui.adapter.FeedAdapter import org.koitharu.kotatsu.tracker.work.TrackWorker import org.koitharu.kotatsu.utils.ext.getDisplayMessage import org.koitharu.kotatsu.utils.ext.hasItems @@ -39,7 +40,7 @@ class FeedFragment : BaseFragment(), PaginationScrollListen override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - feedAdapter = FeedAdapter(get(), this) + feedAdapter = FeedAdapter(get(), viewLifecycleOwner, this) with(binding.recyclerView) { adapter = feedAdapter addItemDecoration( diff --git a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/adapter/FeedAdapter.kt similarity index 84% rename from app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedAdapter.kt rename to app/src/main/java/org/koitharu/kotatsu/tracker/ui/adapter/FeedAdapter.kt index 4334e929b..4d533dfa1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/FeedAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/adapter/FeedAdapter.kt @@ -1,5 +1,6 @@ -package org.koitharu.kotatsu.tracker.ui +package org.koitharu.kotatsu.tracker.ui.adapter +import androidx.lifecycle.LifecycleOwner import androidx.recyclerview.widget.DiffUtil import coil.ImageLoader import com.hannesdorfmann.adapterdelegates4.AsyncListDifferDelegationAdapter @@ -7,17 +8,18 @@ import org.koitharu.kotatsu.base.ui.list.OnListItemClickListener import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.list.ui.adapter.indeterminateProgressAD import org.koitharu.kotatsu.list.ui.model.IndeterminateProgress -import org.koitharu.kotatsu.tracker.ui.adapter.feedItemAD import org.koitharu.kotatsu.tracker.ui.model.FeedItem import kotlin.jvm.internal.Intrinsics class FeedAdapter( coil: ImageLoader, + lifecycleOwner: LifecycleOwner, clickListener: OnListItemClickListener ) : AsyncListDifferDelegationAdapter(DiffCallback()) { init { - delegatesManager.addDelegate(ITEM_TYPE_FEED, feedItemAD(coil, clickListener)) + delegatesManager + .addDelegate(ITEM_TYPE_FEED, feedItemAD(coil, lifecycleOwner, clickListener)) .addDelegate(ITEM_TYPE_PROGRESS, indeterminateProgressAD()) } diff --git a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/adapter/FeedItemAD.kt b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/adapter/FeedItemAD.kt index afb9b6ce8..f85684f71 100644 --- a/app/src/main/java/org/koitharu/kotatsu/tracker/ui/adapter/FeedItemAD.kt +++ b/app/src/main/java/org/koitharu/kotatsu/tracker/ui/adapter/FeedItemAD.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.tracker.ui.adapter +import androidx.lifecycle.LifecycleOwner import coil.ImageLoader import coil.request.Disposable import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding @@ -13,6 +14,7 @@ import org.koitharu.kotatsu.utils.ext.newImageRequest fun feedItemAD( coil: ImageLoader, + lifecycleOwner: LifecycleOwner, clickListener: OnListItemClickListener ) = adapterDelegateViewBinding( { inflater, parent -> ItemTracklogBinding.inflate(inflater, parent, false) } @@ -30,6 +32,8 @@ fun feedItemAD( .placeholder(R.drawable.ic_placeholder) .fallback(R.drawable.ic_placeholder) .error(R.drawable.ic_placeholder) + .allowRgb565(true) + .lifecycle(lifecycleOwner) .enqueueWith(coil) binding.textViewTitle.text = item.title binding.textViewSubtitle.text = item.subtitle