diff --git a/app/src/main/java/io/legado/app/App.kt b/app/src/main/java/io/legado/app/App.kt index 364f93f96..0d02e0669 100644 --- a/app/src/main/java/io/legado/app/App.kt +++ b/app/src/main/java/io/legado/app/App.kt @@ -39,6 +39,8 @@ import io.legado.app.help.LifecycleHelp import io.legado.app.help.RuleBigDataHelp import io.legado.app.help.book.BookHelp import io.legado.app.help.config.AppConfig +import io.legado.app.help.config.ReadBookConfig +import io.legado.app.help.config.ThemeConfig import io.legado.app.help.config.ThemeConfig.applyDayNight import io.legado.app.help.config.ThemeConfig.applyDayNightInit import io.legado.app.help.coroutine.Coroutine @@ -105,6 +107,8 @@ class App : Application() { RuleBigDataHelp.clearInvalid() BookHelp.clearInvalidCache() Backup.clearCache() + ReadBookConfig.clearBgAndCache() + ThemeConfig.clearBg() //初始化简繁转换引擎 when (AppConfig.chineseConverterType) { 1 -> { diff --git a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt index 4d76c781d..49effc231 100644 --- a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt @@ -162,6 +162,25 @@ object ReadBookConfig { return false } + fun clearBgAndCache() { + val bgs = hashSetOf() + configList.forEach { config -> + repeat(3) { + config.getBgPath(it)?.let { path -> + bgs.add(path) + } + } + } + appCtx.externalFiles.getFile("bg").listFiles()?.forEach { + if (!bgs.contains(it.absolutePath)) { + it.delete() + } + } + FileUtils.delete(appCtx.externalCache.getFile("readConfig")) + val configZipPath = FileUtils.getPath(appCtx.externalCache, "readConfig.zip") + FileUtils.delete(configZipPath) + } + private fun resetAll() { DefaultData.readConfigs.let { configList.clear() @@ -704,5 +723,29 @@ object ReadBookConfig { } return bgDrawable ?: ColorDrawable(appCtx.getCompatColor(R.color.background)) } + + fun getBgPath(bgIndex: Int): String? { + val bgType = when (bgIndex) { + 0 -> bgType + 1 -> bgTypeNight + 2 -> bgTypeEInk + else -> error("unknown bgIndex: $bgIndex") + } + if (bgType != 2) { + return null + } + val bgStr = when (bgIndex) { + 0 -> bgStr + 1 -> bgStrNight + 2 -> bgStrEInk + else -> error("unknown bgIndex: $bgIndex") + } + val path = if (bgStr.contains(File.separator)) { + bgStr + } else { + FileUtils.getPath(appCtx.externalFiles, "bg", bgStr) + } + return path + } } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/help/config/ThemeConfig.kt b/app/src/main/java/io/legado/app/help/config/ThemeConfig.kt index 5e86913d9..d8c9b1b37 100644 --- a/app/src/main/java/io/legado/app/help/config/ThemeConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/ThemeConfig.kt @@ -19,9 +19,11 @@ import io.legado.app.utils.BitmapUtils import io.legado.app.utils.ColorUtils import io.legado.app.utils.FileUtils import io.legado.app.utils.GSON +import io.legado.app.utils.externalFiles import io.legado.app.utils.fromJsonArray import io.legado.app.utils.fromJsonObject import io.legado.app.utils.getCompatColor +import io.legado.app.utils.getFile import io.legado.app.utils.getPrefInt import io.legado.app.utils.getPrefString import io.legado.app.utils.hexString @@ -292,6 +294,21 @@ object ThemeConfig { } } + fun clearBg() { + val bgImagePath = appCtx.getPrefString(PreferKey.bgImage) + appCtx.externalFiles.getFile(PreferKey.bgImage).listFiles()?.forEach { + if (it.absolutePath != bgImagePath) { + it.delete() + } + } + val bgImageNPath = appCtx.getPrefString(PreferKey.bgImageN) + appCtx.externalFiles.getFile(PreferKey.bgImageN).listFiles()?.forEach { + if (it.absolutePath != bgImageNPath) { + it.delete() + } + } + } + @Keep data class Config( var themeName: String, diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt index d8a6182e3..9ec3b6699 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt @@ -286,38 +286,10 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) { exportFiles.add(fontExportFile) } } - if (ReadBookConfig.durConfig.bgType == 2) { - val bgName = FileUtils.getName(ReadBookConfig.durConfig.bgStr) - val bgFile = File(ReadBookConfig.durConfig.bgStr) - if (bgFile.exists()) { - val bgExportFile = File(FileUtils.getPath(configDir, bgName)) - if (!bgExportFile.exists()) { - bgFile.copyTo(bgExportFile) - exportFiles.add(bgExportFile) - } - } - } - if (ReadBookConfig.durConfig.bgTypeNight == 2) { - val bgName = FileUtils.getName(ReadBookConfig.durConfig.bgStrNight) - val bgFile = File(ReadBookConfig.durConfig.bgStrNight) - if (bgFile.exists()) { - val bgExportFile = File(FileUtils.getPath(configDir, bgName)) - if (!bgExportFile.exists()) { - bgFile.copyTo(bgExportFile) - exportFiles.add(bgExportFile) - } - } - } - if (ReadBookConfig.durConfig.bgTypeEInk == 2) { - val bgName = FileUtils.getName(ReadBookConfig.durConfig.bgStrEInk) - val bgFile = File(ReadBookConfig.durConfig.bgStrEInk) - if (bgFile.exists()) { - val bgExportFile = File(FileUtils.getPath(configDir, bgName)) - if (!bgExportFile.exists()) { - bgFile.copyTo(bgExportFile) - exportFiles.add(bgExportFile) - } - } + repeat(3) { + val path = ReadBookConfig.durConfig.getBgPath(it) ?: return@repeat + val bgExportFile = copyBgImage(path, configDir) ?: return@repeat + exportFiles.add(bgExportFile) } val configZipPath = FileUtils.getPath(requireContext().externalCache, configFileName) if (ZipUtils.zipFiles(exportFiles, File(configZipPath))) { @@ -346,6 +318,19 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) { } } + private fun copyBgImage(path: String, configDir: File): File? { + val bgName = FileUtils.getName(path) + val bgFile = File(path) + if (bgFile.exists()) { + val bgExportFile = File(FileUtils.getPath(configDir, bgName)) + if (!bgExportFile.exists()) { + bgFile.copyTo(bgExportFile) + return bgExportFile + } + } + return null + } + @SuppressLint("InflateParams") private fun importNetConfigAlert() { alert("输入地址") {