diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index defba52a92..2b3834184d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -15,8 +15,8 @@ import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.fetchAllImageUrlsFromPageList import eu.kanade.tachiyomi.util.lang.RetryWithDelay -import eu.kanade.tachiyomi.util.lang.launchNow -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchNow +import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.lang.plusAssign import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.saveTo @@ -230,42 +230,43 @@ class Downloader( * @param chapters the list of chapters to download. * @param autoStart whether to start the downloader after enqueing the chapters. */ - fun queueChapters(manga: Manga, chapters: List, autoStart: Boolean) = launchUI { - val source = sourceManager.get(manga.source) as? HttpSource ?: return@launchUI - val wasEmpty = queue.isEmpty() - // Called in background thread, the operation can be slow with SAF. - val chaptersWithoutDir = async { - chapters + fun queueChapters(manga: Manga, chapters: List, autoStart: Boolean) = + launchUI { + val source = sourceManager.get(manga.source) as? HttpSource ?: return@launchUI + val wasEmpty = queue.isEmpty() + // Called in background thread, the operation can be slow with SAF. + val chaptersWithoutDir = async { + chapters // Filter out those already downloaded. .filter { provider.findChapterDir(it, manga, source) == null } // Add chapters to queue from the start. .sortedByDescending { it.source_order } - } + } - // Runs in main thread (synchronization needed). - val chaptersToQueue = chaptersWithoutDir.await() + // Runs in main thread (synchronization needed). + val chaptersToQueue = chaptersWithoutDir.await() // Filter out those already enqueued. .filter { chapter -> queue.none { it.chapter.id == chapter.id } } // Create a download for each one. .map { Download(source, manga, it) } - if (chaptersToQueue.isNotEmpty()) { - queue.addAll(chaptersToQueue) + if (chaptersToQueue.isNotEmpty()) { + queue.addAll(chaptersToQueue) - // Initialize queue size. - notifier.initialQueueSize = queue.size + // Initialize queue size. + notifier.initialQueueSize = queue.size - if (isRunning) { - // Send the list of downloads to the downloader. - downloadsRelay.call(chaptersToQueue) - } + if (isRunning) { + // Send the list of downloads to the downloader. + downloadsRelay.call(chaptersToQueue) + } - // Start downloader if needed - if (autoStart && wasEmpty) { - DownloadService.start(this@Downloader.context) + // Start downloader if needed + if (autoStart && wasEmpty) { + DownloadService.start(this@Downloader.context) + } } } - } /** * Returns the observable which downloads a chapter. diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt index f87ba23f7c..6d6f671fb7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -12,7 +12,7 @@ import eu.kanade.tachiyomi.extension.util.ExtensionInstallReceiver import eu.kanade.tachiyomi.extension.util.ExtensionInstaller import eu.kanade.tachiyomi.extension.util.ExtensionLoader import eu.kanade.tachiyomi.source.SourceManager -import eu.kanade.tachiyomi.util.lang.launchNow +import eu.kanade.tachiyomi.util.system.launchNow import kotlinx.coroutines.async import rx.Observable import rx.android.schedulers.AndroidSchedulers @@ -252,16 +252,13 @@ class ExtensionManager( val ctx = context launchNow { - nowTrustedExtensions - .map { extension -> - async { ExtensionLoader.loadExtensionFromPkgName(ctx, extension.pkgName) } - } - .map { it.await() } - .forEach { result -> - if (result is LoadResult.Success) { - registerNewExtension(result.extension) - } + nowTrustedExtensions.map { extension -> + async { ExtensionLoader.loadExtensionFromPkgName(ctx, extension.pkgName) } + }.map { it.await() }.forEach { result -> + if (result is LoadResult.Success) { + registerNewExtension(result.extension) } + } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver.kt index 9f8083c42c..bcabce0f42 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallReceiver.kt @@ -6,7 +6,7 @@ import android.content.Intent import android.content.IntentFilter import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.LoadResult -import eu.kanade.tachiyomi.util.lang.launchNow +import eu.kanade.tachiyomi.util.system.launchNow import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -61,7 +61,8 @@ internal class ExtensionInstallReceiver(private val listener: Listener) : when (result) { is LoadResult.Success -> listener.onExtensionUpdated(result.extension) // Not needed as a package can't be upgraded if the signature is different - is LoadResult.Untrusted -> {} + is LoadResult.Untrusted -> { + } } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt index 88ffaff9b1..f942bf2506 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt @@ -18,7 +18,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateService import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.ui.category.CategoryAdapter -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets import eu.kanade.tachiyomi.util.view.inflate import eu.kanade.tachiyomi.util.view.snack diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 073fa00b9b..db2e01047d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -4,10 +4,8 @@ import android.animation.ObjectAnimator import android.app.SearchManager import android.content.Intent import android.content.res.Configuration -import android.content.res.Resources import android.graphics.Color import android.graphics.Rect -import android.graphics.Typeface import android.os.Build import android.os.Bundle import android.view.MotionEvent @@ -17,11 +15,6 @@ import android.webkit.WebView import android.widget.FrameLayout import android.widget.LinearLayout import android.widget.TextView -import androidx.appcompat.app.AppCompatDelegate -import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM -import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO -import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES -import androidx.appcompat.app.AppCompatDelegate.setDefaultNightMode import androidx.appcompat.graphics.drawable.DrawerArrowDrawable import androidx.biometric.BiometricManager import androidx.core.graphics.ColorUtils @@ -53,7 +46,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.ui.recent_updates.RecentChaptersController import eu.kanade.tachiyomi.ui.recently_read.RecentlyReadController import eu.kanade.tachiyomi.ui.setting.SettingsMainController -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.view.gone diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationController.kt index 4026f01975..dc9438f1cb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationController.kt @@ -1,11 +1,8 @@ package eu.kanade.tachiyomi.ui.migration -import android.app.Dialog -import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.afollestad.materialdialogs.MaterialDialog import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.R @@ -13,15 +10,13 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault -import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.NucleusController -import eu.kanade.tachiyomi.ui.base.controller.popControllerWithTag import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction import eu.kanade.tachiyomi.ui.migration.manga.design.PreMigrationController import eu.kanade.tachiyomi.ui.migration.manga.process.MigrationListController import eu.kanade.tachiyomi.util.view.RecyclerWindowInsetsListener import eu.kanade.tachiyomi.util.await -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.ui.migration.manga.process.MigrationProcedureConfig import kotlinx.android.synthetic.main.migration_controller.* import kotlinx.coroutines.Dispatchers @@ -128,17 +123,20 @@ class MigrationController : NucleusController(), launchUI { val manga = Injekt.get().getFavoriteMangas().asRxSingle().await( - Schedulers.io()) - val sourceMangas = manga.asSequence().filter { it.source == item.source.id }.map { it.id!! }.toList() + Schedulers.io() + ) + val sourceMangas = + manga.asSequence().filter { it.source == item.source.id }.map { it.id!! }.toList() withContext(Dispatchers.Main) { router.pushController( if (Injekt.get().skipPreMigration().getOrDefault()) { MigrationListController.create( - MigrationProcedureConfig( sourceMangas, null) + MigrationProcedureConfig(sourceMangas, null) ) - } - else { PreMigrationController.create(sourceMangas) } - .withFadeTransaction()) + } else { + PreMigrationController.create(sourceMangas) + }.withFadeTransaction() + ) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt index e12bc4474d..7f0f05c7de 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt @@ -29,7 +29,7 @@ import eu.kanade.tachiyomi.ui.migration.MigrationMangaDialog import eu.kanade.tachiyomi.ui.migration.SearchController import eu.kanade.tachiyomi.util.view.RecyclerWindowInsetsListener import eu.kanade.tachiyomi.util.await -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource import eu.kanade.tachiyomi.util.system.toast import kotlinx.android.synthetic.main.chapters_controller.* @@ -274,8 +274,9 @@ class MigrationListController(bundle: Bundle? = null) : BaseController(bundle), val res = resources if (res != null) { activity?.toast( - res.getQuantityString(R.plurals.manga_migrated, - manaulMigrations, manaulMigrations) + res.getQuantityString( + R.plurals.manga_migrated, manaulMigrations, manaulMigrations + ) ) } router.popCurrentController() @@ -319,8 +320,7 @@ class MigrationListController(bundle: Bundle? = null) : BaseController(bundle), ) try { syncChaptersWithSource(db, chapters, localManga, source) - } - catch (e: Exception) { + } catch (e: Exception) { return@async null } localManga @@ -343,8 +343,7 @@ class MigrationListController(bundle: Bundle? = null) : BaseController(bundle), migratingManga.manga.migrationStatus = MigrationStatus.MANGA_FOUND migratingManga.manga.searchResult.set(result.id) adapter?.notifyDataSetChanged() - } - else { + } else { migratingManga.manga.migrationStatus = MigrationStatus.MANGA_NOT_FOUND activity?.toast(R.string.error_fetching_migration, Toast.LENGTH_LONG) adapter?.notifyDataSetChanged() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt index 2657091af6..230c29caec 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt @@ -9,10 +9,9 @@ import eu.kanade.tachiyomi.data.database.models.MangaCategory import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.ui.migration.MigrationFlags -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchUI import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel -import kotlinx.coroutines.isActive import kotlinx.coroutines.withContext import uy.kohesive.injekt.injectLazy @@ -75,8 +74,9 @@ class MigrationProcessAdapter( launchUI { val manga = getItem(position)?.manga ?: return@launchUI db.inTransaction { - val toMangaObj = db.getManga(manga.searchResult.get() ?: return@launchUI).executeAsBlocking() - ?: return@launchUI + val toMangaObj = + db.getManga(manga.searchResult.get() ?: return@launchUI).executeAsBlocking() + ?: return@launchUI migrateMangaInternal( manga.manga() ?: return@launchUI, toMangaObj, !copy ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt index 6df3481d72..835f34a560 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt @@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaController import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.view.gone import eu.kanade.tachiyomi.util.view.invisible -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.view.setVectorCompat import eu.kanade.tachiyomi.util.view.visible import kotlinx.android.synthetic.main.migration_manga_card.view.* @@ -49,10 +49,14 @@ class MigrationProcessHolder( val manga = item.manga.manga() val source = item.manga.mangaSource() - migration_menu.setVectorCompat(R.drawable.ic_more_vert_black_24dp, view.context - .getResourceColor(R.attr.icon_color)) - skip_manga.setVectorCompat(R.drawable.ic_close_white_24dp, view.context.getResourceColor(R - .attr.icon_color)) + migration_menu.setVectorCompat( + R.drawable.ic_more_vert_black_24dp, view.context.getResourceColor(R.attr.icon_color) + ) + skip_manga.setVectorCompat( + R.drawable.ic_close_white_24dp, view.context.getResourceColor( + R.attr.icon_color + ) + ) migration_menu.invisible() skip_manga.visible() migration_manga_card_to.resetManga() @@ -62,8 +66,7 @@ class MigrationProcessHolder( migration_manga_card_from.setOnClickListener { adapter.controller.router.pushController( MangaController( - manga, - true + manga, true ).withFadeTransaction() ) } @@ -87,8 +90,7 @@ class MigrationProcessHolder( sourceManager.get(it) } withContext(Dispatchers.Main) { - if (item.manga.mangaId != this@MigrationProcessHolder.item?.manga?.mangaId || - item.manga.migrationStatus == MigrationStatus.RUNNUNG) { + if (item.manga.mangaId != this@MigrationProcessHolder.item?.manga?.mangaId || item.manga.migrationStatus == MigrationStatus.RUNNUNG) { return@withContext } if (searchResult != null && resultSource != null) { @@ -102,8 +104,8 @@ class MigrationProcessHolder( } } else { migration_manga_card_to.loading_group.gone() - migration_manga_card_to.title.text = view.context.applicationContext - .getString(R.string.no_alternatives_found) + migration_manga_card_to.title.text = + view.context.applicationContext.getString(R.string.no_alternatives_found) } migration_menu.visible() skip_manga.gone() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index 595882aa33..43e749fef4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -45,7 +45,7 @@ import eu.kanade.tachiyomi.ui.reader.viewer.pager.L2RPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.pager.VerticalPagerViewer import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.lang.plusAssign import eu.kanade.tachiyomi.util.storage.getUriCompat import eu.kanade.tachiyomi.util.system.GLUtil diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt index dfcb7112d6..52a20b8c92 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt @@ -35,7 +35,7 @@ import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.ui.reader.model.ReaderPage import eu.kanade.tachiyomi.ui.reader.viewer.ReaderProgressBar import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig.ZoomType -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.ImageUtil import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.view.gone diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index 513ae2f20c..d476f18a0c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.setting import android.app.Dialog import android.os.Bundle import androidx.preference.PreferenceScreen -import android.view.View import android.widget.Toast import com.afollestad.materialdialogs.MaterialDialog import com.bluelinelabs.conductor.RouterTransaction @@ -14,12 +13,11 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.library.LibraryUpdateService import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Target -import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.network.NetworkHelper import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.library.LibraryController -import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.launchUI import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -105,8 +103,13 @@ class SettingsAdvancedController : SettingsController() { } launchUI { val activity = activity ?: return@launchUI - val cleanupString = if (foldersCleared == 0) activity.getString(R.string.no_cleanup_done) - else resources!!.getQuantityString(R.plurals.cleanup_done, foldersCleared, foldersCleared) + val cleanupString = + if (foldersCleared == 0) activity.getString(R.string.no_cleanup_done) + else resources!!.getQuantityString( + R.plurals.cleanup_done, + foldersCleared, + foldersCleared + ) activity.toast(cleanupString, Toast.LENGTH_LONG) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/lang/CoroutinesExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/CoroutinesExtensions.kt similarity index 93% rename from app/src/main/java/eu/kanade/tachiyomi/util/lang/CoroutinesExtensions.kt rename to app/src/main/java/eu/kanade/tachiyomi/util/system/CoroutinesExtensions.kt index f2f68b5bc9..2753390544 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/lang/CoroutinesExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/CoroutinesExtensions.kt @@ -1,4 +1,4 @@ -package eu.kanade.tachiyomi.util.lang +package eu.kanade.tachiyomi.util.system import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineStart