diff --git a/CHANGELOG.md b/CHANGELOG.md index 4de168aeca..d5062e8dd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,5 +7,9 @@ ## Other --> +## Changes +- Remove download location redirection from `Settings > Downloads` +- Moved cache related stuff from `Settings > Advanced` to `Settings > Data and storage` + ## Other - Migrate `RawQueries#librayQuery` to use SQLDelight (`GetLibraryManga`) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsAdvancedController.kt index 38a6adadd7..6748659a4d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsAdvancedController.kt @@ -14,14 +14,11 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toUri import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceScreen -import com.google.firebase.crashlytics.ktx.crashlytics import com.hippo.unifile.UniFile import dev.yokai.domain.base.BasePreferences.ExtensionInstaller import dev.yokai.domain.extension.interactor.TrustExtension import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.data.cache.ChapterCache -import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadProvider @@ -66,7 +63,6 @@ import eu.kanade.tachiyomi.util.system.localeContext import eu.kanade.tachiyomi.util.system.materialAlertDialog import eu.kanade.tachiyomi.util.system.setDefaultSettings import eu.kanade.tachiyomi.util.system.toast -import eu.kanade.tachiyomi.util.system.withUIContext import eu.kanade.tachiyomi.util.view.openInBrowser import eu.kanade.tachiyomi.util.view.withFadeTransaction import kotlinx.coroutines.CoroutineStart @@ -87,12 +83,8 @@ class SettingsAdvancedController : SettingsLegacyController() { private val network: NetworkHelper by injectLazy() - private val chapterCache: ChapterCache by injectLazy() - private val db: DatabaseHelper by injectLazy() - private val coverCache: CoverCache by injectLazy() - private val downloadManager: DownloadManager by injectLazy() private val trustExtension: TrustExtension by injectLazy() @@ -190,13 +182,6 @@ class SettingsAdvancedController : SettingsLegacyController() { preferenceCategory { titleRes = R.string.data_management - preference { - key = CLEAR_CACHE_KEY - titleRes = R.string.clear_chapter_cache - summary = context.getString(R.string.used_, chapterCache.readableSize) - - onClick { clearChapterCache() } - } preference { titleRes = R.string.force_download_cache_refresh @@ -204,36 +189,6 @@ class SettingsAdvancedController : SettingsLegacyController() { onClick { downloadManager.refreshCache() } } - preference { - key = "clean_cached_covers" - titleRes = R.string.clean_up_cached_covers - summary = context.getString( - R.string.delete_old_covers_in_library_used_, - coverCache.getChapterCacheSize(), - ) - - onClick { - context.toast(R.string.starting_cleanup) - (activity as? AppCompatActivity)?.lifecycleScope?.launchIO { - coverCache.deleteOldCovers() - } - } - } - preference { - key = "clear_cached_not_library" - titleRes = R.string.clear_cached_covers_non_library - summary = context.getString( - R.string.delete_all_covers__not_in_library_used_, - coverCache.getOnlineCoverCacheSize(), - ) - - onClick { - context.toast(R.string.starting_cleanup) - (activity as? AppCompatActivity)?.lifecycleScope?.launchIO { - coverCache.deleteAllCachedCovers() - } - } - } preference { key = "clean_downloaded_chapters" titleRes = R.string.clean_up_downloaded_chapters @@ -487,36 +442,6 @@ class SettingsAdvancedController : SettingsLegacyController() { } } - private fun clearChapterCache() { - if (activity == null) return - viewScope.launchIO { - val files = chapterCache.cacheDir.listFiles() ?: return@launchIO - var deletedFiles = 0 - try { - files.forEach { file -> - if (chapterCache.removeFileFromCache(file.name)) { - deletedFiles++ - } - } - withUIContext { - activity?.toast( - resources?.getQuantityString( - R.plurals.cache_cleared, - deletedFiles, - deletedFiles, - ), - ) - findPreference(CLEAR_CACHE_KEY)?.summary = - resources?.getString(R.string.used_, chapterCache.readableSize) - } - } catch (_: Exception) { - withUIContext { - activity?.toast(R.string.cache_delete_error) - } - } - } - } - private fun clearWebViewData() { if (activity == null) return try { @@ -536,8 +461,6 @@ class SettingsAdvancedController : SettingsLegacyController() { } private companion object { - const val CLEAR_CACHE_KEY = "pref_clear_cache_key" - private var job: Job? = null } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsDataController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsDataController.kt index 95b6ebf405..9b7b12bae0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsDataController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsDataController.kt @@ -9,7 +9,9 @@ import android.view.MenuInflater import android.view.MenuItem import android.widget.Toast import androidx.appcompat.app.AlertDialog +import androidx.appcompat.app.AppCompatActivity import androidx.core.net.toUri +import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceScreen import com.hippo.unifile.UniFile import dev.yokai.domain.storage.StorageManager @@ -20,6 +22,8 @@ import eu.kanade.tachiyomi.data.backup.BackupCreatorJob import eu.kanade.tachiyomi.data.backup.BackupFileValidator import eu.kanade.tachiyomi.data.backup.BackupRestoreJob import eu.kanade.tachiyomi.data.backup.models.Backup +import eu.kanade.tachiyomi.data.cache.ChapterCache +import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.setting.SettingsLegacyController import eu.kanade.tachiyomi.ui.setting.bindTo @@ -33,9 +37,11 @@ import eu.kanade.tachiyomi.ui.setting.summaryRes import eu.kanade.tachiyomi.ui.setting.titleRes import eu.kanade.tachiyomi.util.system.DeviceUtil import eu.kanade.tachiyomi.util.system.disableItems +import eu.kanade.tachiyomi.util.system.launchIO import eu.kanade.tachiyomi.util.system.materialAlertDialog import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.toast +import eu.kanade.tachiyomi.util.system.withUIContext import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import uy.kohesive.injekt.injectLazy @@ -49,10 +55,14 @@ class SettingsDataController : SettingsLegacyController() { internal val storagePreferences: StoragePreferences by injectLazy() internal val storageManager: StorageManager by injectLazy() + private val coverCache: CoverCache by injectLazy() + private val chapterCache: ChapterCache by injectLazy() + override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply { titleRes = R.string.data_and_storage preference { + key = "pref_storage_location" bindTo(storagePreferences.baseStorageDirectory()) titleRes = R.string.storage_location @@ -150,6 +160,50 @@ class SettingsDataController : SettingsLegacyController() { } infoPreference(R.string.backup_info) + + preferenceCategory { + titleRes = R.string.storage_usage + + preference { + key = CLEAR_CACHE_KEY + titleRes = R.string.clear_chapter_cache + summary = context.getString(R.string.used_, chapterCache.readableSize) + + onClick { clearChapterCache() } + } + + preference { + key = "clear_cached_not_library" + titleRes = R.string.clear_cached_covers_non_library + summary = context.getString( + R.string.delete_all_covers__not_in_library_used_, + coverCache.getOnlineCoverCacheSize(), + ) + + onClick { + context.toast(R.string.starting_cleanup) + (activity as? AppCompatActivity)?.lifecycleScope?.launchIO { + coverCache.deleteAllCachedCovers() + } + } + } + + preference { + key = "clean_cached_covers" + titleRes = R.string.clean_up_cached_covers + summary = context.getString( + R.string.delete_old_covers_in_library_used_, + coverCache.getChapterCacheSize(), + ) + + onClick { + context.toast(R.string.starting_cleanup) + (activity as? AppCompatActivity)?.lifecycleScope?.launchIO { + coverCache.deleteOldCovers() + } + } + } + } } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { @@ -331,8 +385,40 @@ class SettingsDataController : SettingsLegacyController() { .show() } } + + private fun clearChapterCache() { + if (activity == null) return + viewScope.launchIO { + val files = chapterCache.cacheDir.listFiles() ?: return@launchIO + var deletedFiles = 0 + try { + files.forEach { file -> + if (chapterCache.removeFileFromCache(file.name)) { + deletedFiles++ + } + } + withUIContext { + activity?.toast( + resources?.getQuantityString( + R.plurals.cache_cleared, + deletedFiles, + deletedFiles, + ), + ) + findPreference(CLEAR_CACHE_KEY)?.summary = + resources?.getString(R.string.used_, chapterCache.readableSize) + } + } catch (_: Exception) { + withUIContext { + activity?.toast(R.string.cache_delete_error) + } + } + } + } } +private const val CLEAR_CACHE_KEY = "pref_clear_cache_key" + private const val CODE_DATA_DIR = 104 private const val CODE_BACKUP_CREATE = 504 private const val CODE_BACKUP_RESTORE = 505 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsDownloadController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsDownloadController.kt index 3d3d971602..5c82542fc6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsDownloadController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/controllers/SettingsDownloadController.kt @@ -14,8 +14,6 @@ import eu.kanade.tachiyomi.ui.setting.defaultValue import eu.kanade.tachiyomi.ui.setting.infoPreference import eu.kanade.tachiyomi.ui.setting.intListPreference import eu.kanade.tachiyomi.ui.setting.multiSelectListPreferenceMat -import eu.kanade.tachiyomi.ui.setting.onClick -import eu.kanade.tachiyomi.ui.setting.preference import eu.kanade.tachiyomi.ui.setting.preferenceCategory import eu.kanade.tachiyomi.ui.setting.summaryRes import eu.kanade.tachiyomi.ui.setting.switchPreference @@ -34,12 +32,6 @@ class SettingsDownloadController : SettingsLegacyController() { override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply { titleRes = R.string.downloads - preference { - titleRes = R.string.download_location - onClick { navigateTo(SettingsDataController()) } - - summary = "Moved to Data and Storage!" - } switchPreference { key = Keys.downloadOnlyOverWifi titleRes = R.string.only_download_over_wifi diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cd7a401437..c34fcb1783 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -799,6 +799,7 @@ Data and storage Storage location + Storage usage Backup