diff --git a/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt b/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt index d0cf6ef3a..47b68319d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt +++ b/app/src/main/java/org/koitharu/kotatsu/KotatsuApp.kt @@ -4,7 +4,8 @@ import android.app.Application import androidx.appcompat.app.AppCompatDelegate import androidx.room.Room import coil.Coil -import coil.ImageLoader +import coil.ComponentRegistry +import coil.ImageLoaderBuilder import coil.util.CoilUtils import com.chuckerteam.chucker.api.ChuckerCollector import com.chuckerteam.chucker.api.ChuckerInterceptor @@ -85,16 +86,19 @@ class KotatsuApp : Application() { } private fun initCoil() { - Coil.setDefaultImageLoader(ImageLoader(applicationContext) { - okHttpClient { - okHttp() - .cache(CoilUtils.createDefaultCache(applicationContext)) - .build() - } - componentRegistry { - add(CbzFetcher()) - } - }) + Coil.setImageLoader( + ImageLoaderBuilder(applicationContext) + .okHttpClient( + okHttp() + .cache(CoilUtils.createDefaultCache(applicationContext)) + .build() + ).componentRegistry( + ComponentRegistry.Builder() + .add(CbzFetcher()) + .build() + ) + .build() + ) } private fun initErrorHandler() { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseActivity.kt b/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseActivity.kt index 3644b7968..2bcc52739 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/common/BaseActivity.kt @@ -70,7 +70,6 @@ abstract class BaseActivity : MvpAppCompatActivity(), KoinComponent { } if (BuildConfig.DEBUG && keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { throw StackOverflowError("test") - return true } return super.onKeyDown(keyCode, event) } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/download/DownloadService.kt b/app/src/main/java/org/koitharu/kotatsu/ui/download/DownloadService.kt index 5c2285794..72096b33f 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/download/DownloadService.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/download/DownloadService.kt @@ -8,7 +8,7 @@ import android.webkit.MimeTypeMap import android.widget.Toast import androidx.core.content.ContextCompat import coil.Coil -import coil.api.get +import coil.request.GetRequestBuilder import kotlinx.coroutines.* import kotlinx.coroutines.sync.Mutex import okhttp3.OkHttpClient @@ -30,6 +30,7 @@ import org.koitharu.kotatsu.utils.ext.safe import org.koitharu.kotatsu.utils.ext.sub import java.io.File import java.util.concurrent.TimeUnit +import kotlin.collections.set import kotlin.math.absoluteValue class DownloadService : BaseService() { @@ -87,7 +88,9 @@ class DownloadService : BaseService() { try { val repo = MangaProviderFactory.create(manga.source) val cover = safe { - Coil.loader().get(manga.coverUrl) + Coil.execute(GetRequestBuilder(this@DownloadService) + .data(manga.coverUrl) + .build()).drawable } withContext(Dispatchers.Main) { notification.setLargeIcon(cover) diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesPresenter.kt index 3db757fbf..fd54af9fd 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/favourites/categories/FavouriteCategoriesPresenter.kt @@ -107,7 +107,7 @@ class FavouriteCategoriesPresenter : BasePresenter() { fun addToCategory(manga: Manga, categoryId: Long) { presenterScope.launch { try { - val categories = withContext(Dispatchers.IO) { + withContext(Dispatchers.IO) { repository.addToCategory(manga,categoryId) } } catch (e: Exception) { @@ -122,7 +122,7 @@ class FavouriteCategoriesPresenter : BasePresenter() { fun removeFromCategory(manga: Manga, categoryId: Long) { presenterScope.launch { try { - val categories = withContext(Dispatchers.IO) { + withContext(Dispatchers.IO) { repository.removeFromCategory(manga, categoryId) } } catch (e: Exception) { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt index 718b6a52a..4cba880c9 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/reader/thumbnails/PageThumbnailHolder.kt @@ -3,7 +3,7 @@ package org.koitharu.kotatsu.ui.reader.thumbnails import android.view.ViewGroup import androidx.core.net.toUri import coil.Coil -import coil.api.get +import coil.request.GetRequestBuilder import coil.size.PixelSize import coil.size.Size import kotlinx.android.synthetic.main.item_page_thumb.* @@ -38,9 +38,10 @@ class PageThumbnailHolder(parent: ViewGroup, private val scope: CoroutineScope) val pageUrl = MangaProviderFactory.create(data.source).getPageFullUrl(data) extra[pageUrl]?.toUri()?.toString() ?: pageUrl } - val drawable = Coil.get(url) { - size(thumbSize) - } + val drawable = Coil.execute(GetRequestBuilder(context) + .data(url) + .size(thumbSize) + .build()).drawable withContext(Dispatchers.Main) { imageView_thumb.setImageDrawable(drawable) } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/settings/sources/SourcesAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/settings/sources/SourcesAdapter.kt index 11cc7097f..a2bd052e8 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/settings/sources/SourcesAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/settings/sources/SourcesAdapter.kt @@ -47,11 +47,11 @@ class SourcesAdapter(private val onItemClickListener: OnRecyclerItemClickListene settings.hiddenSources = hiddenItems.map { x -> x.name }.toSet() } holder.imageView_config.setOnClickListener { v -> - onItemClickListener.onItemClick(holder.requireData(), holder.adapterPosition, v) + onItemClickListener.onItemClick(holder.requireData(), holder.bindingAdapterPosition, v) } holder.imageView_handle.setOnTouchListener { v, event -> if (event.actionMasked == MotionEvent.ACTION_DOWN) { - onItemClickListener.onItemLongClick(holder.requireData(), holder.adapterPosition, v) + onItemClickListener.onItemLongClick(holder.requireData(), holder.bindingAdapterPosition, v) } else { false } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/settings/sources/SourcesReorderCallback.kt b/app/src/main/java/org/koitharu/kotatsu/ui/settings/sources/SourcesReorderCallback.kt index 36c24b23e..e6b2b8cbb 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/settings/sources/SourcesReorderCallback.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/settings/sources/SourcesReorderCallback.kt @@ -11,8 +11,8 @@ class SourcesReorderCallback : ItemTouchHelper.SimpleCallback(ItemTouchHelper.DO target: RecyclerView.ViewHolder ): Boolean { val adapter = recyclerView.adapter as? SourcesAdapter ?: return false - val oldPos = viewHolder.adapterPosition - val newPos = target.adapterPosition + val oldPos = viewHolder.bindingAdapterPosition + val newPos = target.bindingAdapterPosition adapter.moveItem(oldPos, newPos) return true } diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/tracker/TrackWorker.kt b/app/src/main/java/org/koitharu/kotatsu/ui/tracker/TrackWorker.kt index 1b5017db8..f0c3e26c9 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/tracker/TrackWorker.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/tracker/TrackWorker.kt @@ -8,10 +8,9 @@ import android.os.Build import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat import androidx.core.content.ContextCompat -import androidx.core.graphics.drawable.toBitmap import androidx.work.* import coil.Coil -import coil.api.get +import coil.request.GetRequestBuilder import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.koin.core.KoinComponent @@ -24,6 +23,7 @@ import org.koitharu.kotatsu.domain.MangaProviderFactory import org.koitharu.kotatsu.domain.tracking.TrackingRepository import org.koitharu.kotatsu.ui.details.MangaDetailsActivity import org.koitharu.kotatsu.utils.ext.safe +import org.koitharu.kotatsu.utils.ext.toBitmapOrNull import org.koitharu.kotatsu.utils.ext.toUriOrNull import java.util.concurrent.TimeUnit @@ -136,9 +136,9 @@ class TrackWorker(context: Context, workerParams: WorkerParameters) : setContentText(summary) setContentText(manga.title) setNumber(newChapters.size) - setLargeIcon(safe { - Coil.loader().get(manga.coverUrl).toBitmap() - }) + setLargeIcon(Coil.execute(GetRequestBuilder(applicationContext) + .data(manga.coverUrl) + .build()).toBitmapOrNull()) setSmallIcon(R.drawable.ic_stat_book_plus) val style = NotificationCompat.InboxStyle(this) for (chapter in newChapters) { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/widget/recent/RecentListFactory.kt b/app/src/main/java/org/koitharu/kotatsu/ui/widget/recent/RecentListFactory.kt index 27d308ab2..cdac06dfa 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/widget/recent/RecentListFactory.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/widget/recent/RecentListFactory.kt @@ -4,19 +4,17 @@ import android.content.Context import android.content.Intent import android.widget.RemoteViews import android.widget.RemoteViewsService -import androidx.core.graphics.drawable.toBitmap import coil.Coil -import coil.api.get +import coil.request.GetRequestBuilder import kotlinx.coroutines.runBlocking -import okio.IOException import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.domain.history.HistoryRepository import org.koitharu.kotatsu.ui.details.MangaDetailsActivity +import org.koitharu.kotatsu.utils.ext.requireBitmap +import java.io.IOException -class RecentListFactory(context: Context, private val intent: Intent) : RemoteViewsService.RemoteViewsFactory { - - private val packageName = context.packageName +class RecentListFactory(private val context: Context) : RemoteViewsService.RemoteViewsFactory { private val dataSet = ArrayList() @@ -36,11 +34,13 @@ class RecentListFactory(context: Context, private val intent: Intent) : RemoteVi override fun hasStableIds() = true override fun getViewAt(position: Int): RemoteViews { - val views = RemoteViews(packageName, R.layout.item_recent) + val views = RemoteViews(context.packageName, R.layout.item_recent) val item = dataSet[position] try { val cover = runBlocking { - Coil.loader().get(item.coverUrl).toBitmap() + Coil.execute(GetRequestBuilder(context) + .data(item.coverUrl) + .build()).requireBitmap() } views.setImageViewBitmap(R.id.imageView_cover, cover) } catch (e: IOException) { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/widget/recent/RecentWidgetService.kt b/app/src/main/java/org/koitharu/kotatsu/ui/widget/recent/RecentWidgetService.kt index 1b1d9691b..77fde8ae3 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/widget/recent/RecentWidgetService.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/widget/recent/RecentWidgetService.kt @@ -6,6 +6,6 @@ import android.widget.RemoteViewsService class RecentWidgetService : RemoteViewsService() { override fun onGetViewFactory(intent: Intent): RemoteViewsFactory { - return RecentListFactory(this, intent) + return RecentListFactory(this) } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/widget/shelf/ShelfListFactory.kt b/app/src/main/java/org/koitharu/kotatsu/ui/widget/shelf/ShelfListFactory.kt index 4f8cc74e1..7e0aa5d04 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/widget/shelf/ShelfListFactory.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/widget/shelf/ShelfListFactory.kt @@ -4,19 +4,17 @@ import android.content.Context import android.content.Intent import android.widget.RemoteViews import android.widget.RemoteViewsService -import androidx.core.graphics.drawable.toBitmap import coil.Coil -import coil.api.get +import coil.request.GetRequestBuilder import kotlinx.coroutines.runBlocking -import okio.IOException import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.domain.favourites.FavouritesRepository import org.koitharu.kotatsu.ui.details.MangaDetailsActivity +import org.koitharu.kotatsu.utils.ext.requireBitmap +import java.io.IOException -class ShelfListFactory(context: Context, private val intent: Intent) : RemoteViewsService.RemoteViewsFactory { - - private val packageName = context.packageName +class ShelfListFactory(private val context: Context) : RemoteViewsService.RemoteViewsFactory { private val dataSet = ArrayList() @@ -36,12 +34,14 @@ class ShelfListFactory(context: Context, private val intent: Intent) : RemoteVie override fun hasStableIds() = true override fun getViewAt(position: Int): RemoteViews { - val views = RemoteViews(packageName, R.layout.item_shelf) + val views = RemoteViews(context.packageName, R.layout.item_shelf) val item = dataSet[position] views.setTextViewText(R.id.textView_title, item.title) try { val cover = runBlocking { - Coil.loader().get(item.coverUrl).toBitmap() + Coil.execute(GetRequestBuilder(context) + .data(item.coverUrl) + .build()).requireBitmap() } views.setImageViewBitmap(R.id.imageView_cover, cover) } catch (e: IOException) { @@ -57,6 +57,5 @@ class ShelfListFactory(context: Context, private val intent: Intent) : RemoteVie override fun getViewTypeCount() = 1 - override fun onDestroy() { - } + override fun onDestroy() = Unit } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/widget/shelf/ShelfWidgetService.kt b/app/src/main/java/org/koitharu/kotatsu/ui/widget/shelf/ShelfWidgetService.kt index 8882c7f6b..945c80d91 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/widget/shelf/ShelfWidgetService.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/widget/shelf/ShelfWidgetService.kt @@ -6,6 +6,6 @@ import android.widget.RemoteViewsService class ShelfWidgetService : RemoteViewsService() { override fun onGetViewFactory(intent: Intent): RemoteViewsFactory { - return ShelfListFactory(this, intent) + return ShelfListFactory(this) } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/AlphanumComparator.kt b/app/src/main/java/org/koitharu/kotatsu/utils/AlphanumComparator.kt index 12e276d63..cee0626c0 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/AlphanumComparator.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/AlphanumComparator.kt @@ -16,7 +16,7 @@ class AlphanumComparator : Comparator { val thatChunk = getChunk(s2, s2Length, thatMarker) thatMarker += thatChunk.length // If both chunks contain numeric characters, sort them numerically - var result = 0 + var result: Int if (thisChunk[0].isDigit() && thatChunk[0].isDigit()) { // Simple chunk comparison by length. val thisChunkLength = thisChunk.length result = thisChunkLength - thatChunk.length @@ -37,8 +37,8 @@ class AlphanumComparator : Comparator { return s1Length - s2Length } - private fun getChunk(s: String, slength: Int, marker: Int): String { - var marker = marker + private fun getChunk(s: String, slength: Int, cmarker: Int): String { + var marker = cmarker val chunk = StringBuilder() var c = s[marker] chunk.append(c) diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/MangaShortcut.kt b/app/src/main/java/org/koitharu/kotatsu/utils/MangaShortcut.kt index 46d71bc47..c333fcafc 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/MangaShortcut.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/MangaShortcut.kt @@ -9,17 +9,16 @@ import androidx.annotation.RequiresApi import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat -import androidx.core.graphics.drawable.toBitmap import coil.Coil -import coil.api.get +import coil.request.GetRequestBuilder import coil.size.PixelSize -import coil.size.Scale import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.domain.MangaDataRepository import org.koitharu.kotatsu.ui.details.MangaDetailsActivity +import org.koitharu.kotatsu.utils.ext.requireBitmap import org.koitharu.kotatsu.utils.ext.safe class MangaShortcut(private val manga: Manga) { @@ -67,10 +66,9 @@ class MangaShortcut(private val manga: Manga) { val icon = safe { val size = getIconSize(context) withContext(Dispatchers.IO) { - val bmp = Coil.loader().get(manga.coverUrl) { - size(size) - scale(Scale.FILL) - }.toBitmap() + val bmp = Coil.execute(GetRequestBuilder(context) + .data(manga.coverUrl) + .build()).requireBitmap() ThumbnailUtils.extractThumbnail(bmp, size.width, size.height, 0) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/CoilExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/CoilExt.kt new file mode 100644 index 000000000..ac5278d07 --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/CoilExt.kt @@ -0,0 +1,20 @@ +package org.koitharu.kotatsu.utils.ext + +import androidx.core.graphics.drawable.toBitmap +import coil.request.ErrorResult +import coil.request.RequestResult +import coil.request.SuccessResult + +fun RequestResult.requireBitmap() = when(this) { + is SuccessResult -> drawable.toBitmap() + is ErrorResult -> throw throwable +} + +fun RequestResult.toBitmapOrNull() = when(this) { + is SuccessResult -> try { + drawable.toBitmap() + } catch (_: Throwable) { + null + } + is ErrorResult -> null +} \ No newline at end of file