diff --git a/app/src/main/java/io/legado/app/base/BaseActivity.kt b/app/src/main/java/io/legado/app/base/BaseActivity.kt index 2517cc616..048036892 100644 --- a/app/src/main/java/io/legado/app/base/BaseActivity.kt +++ b/app/src/main/java/io/legado/app/base/BaseActivity.kt @@ -52,8 +52,8 @@ abstract class BaseActivity( } ?: super.onCreateOptionsMenu(menu) } - override fun onMenuOpened(featureId: Int, menu: Menu?): Boolean { - menu?.applyOpenTint(this) + override fun onMenuOpened(featureId: Int, menu: Menu): Boolean { + menu.applyOpenTint(this) return super.onMenuOpened(featureId, menu) } diff --git a/app/src/main/java/io/legado/app/help/BookHelp.kt b/app/src/main/java/io/legado/app/help/BookHelp.kt index fa020e466..bce22a823 100644 --- a/app/src/main/java/io/legado/app/help/BookHelp.kt +++ b/app/src/main/java/io/legado/app/help/BookHelp.kt @@ -41,8 +41,8 @@ object BookHelp { } fun clearCache() { - FileHelp.deleteFile(getBookCachePath()) - FileHelp.getFolder(getBookCachePath()) + FileUtils.deleteFile(getBookCachePath()) + FileUtils.getFolder(getBookCachePath()) } @Synchronized @@ -57,20 +57,20 @@ object BookHelp { ) } } else { - FileHelp.getFolder(getBookFolder(book)).listFiles()?.forEach { + FileUtils.getFolder(getBookFolder(book)).listFiles()?.forEach { if (it.name.startsWith(String.format("%05d", bookChapter.index))) { it.delete() return@forEach } } val filePath = getChapterPath(book, bookChapter) - val file = FileHelp.getFile(filePath) + val file = FileUtils.getFile(filePath) file.writeText(content) } } fun getChapterCount(book: Book): Int { - return FileHelp.getFolder(getBookFolder(book)).list()?.size ?: 0 + return FileUtils.getFolder(getBookFolder(book)).list()?.size ?: 0 } fun hasContent(book: Book, bookChapter: BookChapter): Boolean { diff --git a/app/src/main/java/io/legado/app/help/FileHelp.kt b/app/src/main/java/io/legado/app/help/FileHelp.kt deleted file mode 100644 index 5a7678563..000000000 --- a/app/src/main/java/io/legado/app/help/FileHelp.kt +++ /dev/null @@ -1,58 +0,0 @@ -package io.legado.app.help - -import io.legado.app.App -import java.io.File -import java.io.IOException - -object FileHelp { - - - //获取文件夹 - fun getFolder(filePath: String): File { - val file = File(filePath) - //如果文件夹不存在,就创建它 - if (!file.exists()) { - file.mkdirs() - } - return file - } - - //获取文件 - @Synchronized - fun getFile(filePath: String): File { - val file = File(filePath) - try { - if (!file.exists()) { - //创建父类文件夹 - getFolder(file.parent) - //创建文件 - file.createNewFile() - } - } catch (e: IOException) { - e.printStackTrace() - } - return file - } - - fun getCachePath(): String { - return App.INSTANCE.externalCacheDir?.absolutePath - ?: App.INSTANCE.cacheDir.absolutePath - } - - //递归删除文件夹下的数据 - @Synchronized - fun deleteFile(filePath: String) { - val file = File(filePath) - if (!file.exists()) return - - if (file.isDirectory) { - val files = file.listFiles() - files?.forEach { subFile -> - val path = subFile.path - deleteFile(path) - } - } - //删除文件 - file.delete() - } -} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/help/storage/Backup.kt b/app/src/main/java/io/legado/app/help/storage/Backup.kt index 90bf3b9e2..8a635bafc 100644 --- a/app/src/main/java/io/legado/app/help/storage/Backup.kt +++ b/app/src/main/java/io/legado/app/help/storage/Backup.kt @@ -4,7 +4,6 @@ import android.content.Context import android.net.Uri import androidx.documentfile.provider.DocumentFile import io.legado.app.App -import io.legado.app.help.FileHelp import io.legado.app.help.ReadBookConfig import io.legado.app.utils.DocumentUtils import io.legado.app.utils.FileUtils @@ -48,37 +47,40 @@ object Backup { App.db.bookDao().allBooks.let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileHelp.getFile(backupPath + File.separator + "bookshelf.json").writeText(json) + FileUtils.getFile(backupPath + File.separator + "bookshelf.json") + .writeText(json) } } App.db.bookGroupDao().all().let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileHelp.getFile(backupPath + File.separator + "bookGroup.json").writeText(json) + FileUtils.getFile(backupPath + File.separator + "bookGroup.json") + .writeText(json) } } App.db.bookSourceDao().all.let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileHelp.getFile(backupPath + File.separator + "bookSource.json") + FileUtils.getFile(backupPath + File.separator + "bookSource.json") .writeText(json) } } App.db.rssSourceDao().all.let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileHelp.getFile(backupPath + File.separator + "rssSource.json").writeText(json) + FileUtils.getFile(backupPath + File.separator + "rssSource.json") + .writeText(json) } } App.db.replaceRuleDao().all.let { if (it.isNotEmpty()) { val json = GSON.toJson(it) - FileHelp.getFile(backupPath + File.separator + "replaceRule.json") + FileUtils.getFile(backupPath + File.separator + "replaceRule.json") .writeText(json) } } GSON.toJson(ReadBookConfig.configList)?.let { - FileHelp.getFile(backupPath + File.separator + ReadBookConfig.readConfigFileName) + FileUtils.getFile(backupPath + File.separator + ReadBookConfig.readConfigFileName) .writeText(it) } Preferences.getSharedPreferences(App.INSTANCE, backupPath, "config")?.let { sp -> @@ -111,7 +113,7 @@ object Backup { doc?.let { DocumentUtils.writeText( context, - FileHelp.getFile(backupPath + File.separator + fileName).readText(), + FileUtils.getFile(backupPath + File.separator + fileName).readText(), doc.uri ) } @@ -122,8 +124,8 @@ object Backup { private fun copyBackup() { try { for (fileName in backupFileNames) { - FileHelp.getFile(backupPath + File.separator + "bookshelf.json") - .copyTo(FileHelp.getFile(legadoPath + File.separator + "bookshelf.json"), true) + FileUtils.getFile(backupPath + File.separator + "bookshelf.json") + .copyTo(FileUtils.getFile(legadoPath + File.separator + "bookshelf.json"), true) } } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/java/io/legado/app/help/storage/Restore.kt b/app/src/main/java/io/legado/app/help/storage/Restore.kt index 15c14051c..6741e6830 100644 --- a/app/src/main/java/io/legado/app/help/storage/Restore.kt +++ b/app/src/main/java/io/legado/app/help/storage/Restore.kt @@ -11,7 +11,6 @@ import com.jayway.jsonpath.ParseContext import io.legado.app.App import io.legado.app.constant.AppConst import io.legado.app.data.entities.* -import io.legado.app.help.FileHelp import io.legado.app.help.ReadBookConfig import io.legado.app.utils.* import kotlinx.coroutines.Dispatchers.IO @@ -38,7 +37,7 @@ object Restore { for (fileName in Backup.backupFileNames) { if (doc.name == fileName) { DocumentUtils.readText(context, doc.uri)?.let { - FileHelp.getFile(Backup.backupPath + File.separator + fileName) + FileUtils.getFile(Backup.backupPath + File.separator + fileName) .writeText(it) } } @@ -51,7 +50,7 @@ object Restore { suspend fun restore(path: String) { withContext(IO) { try { - val file = FileHelp.getFile(path + File.separator + "bookshelf.json") + val file = FileUtils.getFile(path + File.separator + "bookshelf.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.bookDao().insert(*it.toTypedArray()) @@ -60,7 +59,7 @@ object Restore { e.printStackTrace() } try { - val file = FileHelp.getFile(path + File.separator + "bookGroup.json") + val file = FileUtils.getFile(path + File.separator + "bookGroup.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.bookGroupDao().insert(*it.toTypedArray()) @@ -69,7 +68,7 @@ object Restore { e.printStackTrace() } try { - val file = FileHelp.getFile(path + File.separator + "bookSource.json") + val file = FileUtils.getFile(path + File.separator + "bookSource.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.bookSourceDao().insert(*it.toTypedArray()) @@ -78,7 +77,7 @@ object Restore { e.printStackTrace() } try { - val file = FileHelp.getFile(path + File.separator + "rssSource.json") + val file = FileUtils.getFile(path + File.separator + "rssSource.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.rssSourceDao().insert(*it.toTypedArray()) @@ -87,7 +86,7 @@ object Restore { e.printStackTrace() } try { - val file = FileHelp.getFile(path + File.separator + "replaceRule.json") + val file = FileUtils.getFile(path + File.separator + "replaceRule.json") val json = file.readText() GSON.fromJsonArray(json)?.let { App.db.replaceRuleDao().insert(*it.toTypedArray()) @@ -97,7 +96,7 @@ object Restore { } try { val file = - FileHelp.getFile(path + File.separator + ReadBookConfig.readConfigFileName) + FileUtils.getFile(path + File.separator + ReadBookConfig.readConfigFileName) val configFile = File(App.INSTANCE.filesDir.absolutePath + File.separator + ReadBookConfig.readConfigFileName) if (file.exists()) { @@ -126,7 +125,7 @@ object Restore { GlobalScope.launch(IO) { try {// 导入书架 val shelfFile = - FileHelp.getFile(Backup.defaultPath + File.separator + "myBookShelf.json") + FileUtils.getFile(Backup.defaultPath + File.separator + "myBookShelf.json") val json = shelfFile.readText() val importCount = importOldBookshelf(json) withContext(Main) { @@ -140,7 +139,7 @@ object Restore { try {// Book source val sourceFile = - FileHelp.getFile(Backup.defaultPath + File.separator + "myBookSource.json") + FileUtils.getFile(Backup.defaultPath + File.separator + "myBookSource.json") val json = sourceFile.readText() val importCount = importOldSource(json) withContext(Main) { @@ -154,7 +153,7 @@ object Restore { try {// Replace rules val ruleFile = - FileHelp.getFile(Backup.defaultPath + File.separator + "myBookReplaceRule.json") + FileUtils.getFile(Backup.defaultPath + File.separator + "myBookReplaceRule.json") val json = ruleFile.readText() val importCount = importOldReplaceRule(json) withContext(Main) { diff --git a/app/src/main/java/io/legado/app/help/storage/WebDavHelp.kt b/app/src/main/java/io/legado/app/help/storage/WebDavHelp.kt index 7d905299d..fb2e09a15 100644 --- a/app/src/main/java/io/legado/app/help/storage/WebDavHelp.kt +++ b/app/src/main/java/io/legado/app/help/storage/WebDavHelp.kt @@ -2,10 +2,10 @@ package io.legado.app.help.storage import android.content.Context import io.legado.app.App -import io.legado.app.help.FileHelp import io.legado.app.help.coroutine.Coroutine import io.legado.app.lib.webdav.WebDav import io.legado.app.lib.webdav.http.HttpAuth +import io.legado.app.utils.FileUtils import io.legado.app.utils.ZipUtils import io.legado.app.utils.getPrefString import kotlinx.coroutines.Dispatchers.IO @@ -17,9 +17,9 @@ import java.util.* import kotlin.math.min object WebDavHelp { - private val zipFilePath = FileHelp.getCachePath() + "/backup" + ".zip" + private val zipFilePath = FileUtils.getCachePath() + "/backup" + ".zip" private val unzipFilesPath by lazy { - FileHelp.getCachePath() + FileUtils.getCachePath() } private fun getWebDavUrl(): String? { @@ -86,7 +86,7 @@ object WebDavHelp { for (i in 0 until paths.size) { paths[i] = path + File.separator + paths[i] } - FileHelp.deleteFile(zipFilePath) + FileUtils.deleteFile(zipFilePath) if (ZipUtils.zipFiles(paths, zipFilePath)) { WebDav(getWebDavUrl() + "legado").makeAsDir() val putUrl = getWebDavUrl() + "legado/backup" + diff --git a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt index c2467c1eb..b12fef048 100644 --- a/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/HttpReadAloudService.kt @@ -4,14 +4,10 @@ import android.app.PendingIntent import android.media.MediaPlayer import io.legado.app.constant.Bus import io.legado.app.data.api.IHttpPostApi -import io.legado.app.help.FileHelp import io.legado.app.help.IntentHelp import io.legado.app.help.http.HttpHelper import io.legado.app.service.help.ReadBook -import io.legado.app.utils.LogUtils -import io.legado.app.utils.getPrefInt -import io.legado.app.utils.getPrefString -import io.legado.app.utils.postEvent +import io.legado.app.utils.* import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Job import kotlinx.coroutines.isActive @@ -65,7 +61,7 @@ class HttpReadAloudService : BaseReadAloudService(), private fun downloadAudio() { job = launch(IO) { - FileHelp.deleteFile(ttsFolder) + FileUtils.deleteFile(ttsFolder) for (index in 0 until contentList.size) { if (isActive) { val bytes = HttpHelper.getByteRetrofit("http://tts.baidu.com") @@ -104,7 +100,7 @@ class HttpReadAloudService : BaseReadAloudService(), } private fun getSpeakFile(index: Int = nowSpeak): File { - return FileHelp.getFile("${ttsFolder}${File.separator}${index}.mp3") + return FileUtils.getFile("${ttsFolder}${File.separator}${index}.mp3") } private fun getAudioBody(content: String): Map { 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 2b4a7dc4f..460e234c0 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 @@ -21,7 +21,6 @@ import io.legado.app.R import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter import io.legado.app.constant.Bus -import io.legado.app.help.FileHelp import io.legado.app.help.ImageLoader import io.legado.app.help.ReadBookConfig import io.legado.app.help.permission.Permissions @@ -174,7 +173,7 @@ class BgTextConfigDialog : DialogFragment() { var file = requireContext().getExternalFilesDir(null) ?: requireContext().filesDir file = - FileHelp.getFile(file.absolutePath + File.separator + "bg" + File.separator + doc.name) + FileUtils.getFile(file.absolutePath + File.separator + "bg" + File.separator + doc.name) DocumentUtils.readBytes(requireContext(), uri)?.let { file.writeBytes(it) ReadBookConfig.getConfig().setBg(2, file.absolutePath) diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt index 6ae3bd977..5c75187bd 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt @@ -7,7 +7,6 @@ import io.legado.app.App import io.legado.app.base.BaseViewModel import io.legado.app.data.api.IHttpGetApi import io.legado.app.data.entities.BookSource -import io.legado.app.help.FileHelp import io.legado.app.help.http.HttpHelper import io.legado.app.help.storage.Backup import io.legado.app.help.storage.OldRule @@ -92,7 +91,7 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application) }.let { val json = GSON.toJson(it) val file = - FileHelp.getFile(Backup.exportPath + File.separator + "exportBookSource.json") + FileUtils.getFile(Backup.exportPath + File.separator + "exportBookSource.json") file.writeText(json) } }.onSuccess { diff --git a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt index ba6bc2a61..60be30fae 100644 --- a/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/replacerule/ReplaceRuleViewModel.kt @@ -6,9 +6,9 @@ import io.legado.app.App import io.legado.app.R import io.legado.app.base.BaseViewModel import io.legado.app.data.entities.ReplaceRule -import io.legado.app.help.FileHelp import io.legado.app.help.storage.Backup import io.legado.app.help.storage.Restore +import io.legado.app.utils.FileUtils import io.legado.app.utils.GSON import io.legado.app.utils.splitNotBlank import org.jetbrains.anko.toast @@ -80,7 +80,7 @@ class ReplaceRuleViewModel(application: Application) : BaseViewModel(application }.let { val json = GSON.toJson(it) val file = - FileHelp.getFile(Backup.exportPath + File.separator + "exportReplaceRule.json") + FileUtils.getFile(Backup.exportPath + File.separator + "exportReplaceRule.json") file.writeText(json) } }.onSuccess { diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt index c47bb8c9d..22c8f62f4 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceViewModel.kt @@ -4,10 +4,10 @@ import android.app.Application import android.text.TextUtils import com.jayway.jsonpath.JsonPath import io.legado.app.App +import io.legado.app.R import io.legado.app.base.BaseViewModel import io.legado.app.data.api.IHttpGetApi import io.legado.app.data.entities.RssSource -import io.legado.app.help.FileHelp import io.legado.app.help.http.HttpHelper import io.legado.app.help.storage.Backup import io.legado.app.help.storage.Restore.jsonPath @@ -65,7 +65,7 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application) App.db.rssSourceDao().getRssSources(*ids.toTypedArray()).let { val json = GSON.toJson(it) val file = - FileHelp.getFile(Backup.exportPath + File.separator + "exportRssSource.json") + FileUtils.getFile(Backup.exportPath + File.separator + "exportRssSource.json") file.writeText(json) } }.onSuccess { @@ -123,6 +123,8 @@ class RssSourceViewModel(application: Application) : BaseViewModel(application) App.db.rssSourceDao().insert(*it.toTypedArray()) } } + }.onSuccess { + finally.invoke(context.getString(R.string.success)) } } diff --git a/app/src/main/java/io/legado/app/ui/widget/font/FontSelectDialog.kt b/app/src/main/java/io/legado/app/ui/widget/font/FontSelectDialog.kt index 420bc9233..5e57e79fc 100644 --- a/app/src/main/java/io/legado/app/ui/widget/font/FontSelectDialog.kt +++ b/app/src/main/java/io/legado/app/ui/widget/font/FontSelectDialog.kt @@ -5,7 +5,6 @@ import android.app.Activity.RESULT_OK import android.content.Intent import android.net.Uri import android.os.Bundle -import android.os.Environment import android.util.DisplayMetrics import android.view.LayoutInflater import android.view.MenuItem @@ -18,13 +17,9 @@ import androidx.recyclerview.widget.LinearLayoutManager import io.legado.app.App import io.legado.app.R import io.legado.app.constant.PreferKey -import io.legado.app.help.FileHelp import io.legado.app.help.permission.Permissions import io.legado.app.help.permission.PermissionsCompat -import io.legado.app.utils.DocumentUtils -import io.legado.app.utils.getPrefString -import io.legado.app.utils.putPrefString -import io.legado.app.utils.toast +import io.legado.app.utils.* import kotlinx.android.synthetic.main.dialog_font_select.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers.IO @@ -127,11 +122,11 @@ class FontSelectDialog : DialogFragment(), @SuppressLint("DefaultLocale") private fun getFontFiles(uri: Uri) { launch(IO) { - FileHelp.deleteFile(fontCacheFolder) + FileUtils.deleteFile(fontCacheFolder) DocumentFile.fromTreeUri(App.INSTANCE, uri)?.listFiles()?.forEach { file -> if (file.name?.toLowerCase()?.matches(".*\\.[ot]tf".toRegex()) == true) { DocumentUtils.readBytes(App.INSTANCE, file.uri)?.let { - FileHelp.getFile(fontCacheFolder + file.name).writeBytes(it) + FileUtils.getFile(fontCacheFolder + file.name).writeBytes(it) } } } @@ -154,7 +149,7 @@ class FontSelectDialog : DialogFragment(), private fun getFontFilesOld() { try { val file = - File(Environment.getExternalStorageDirectory().absolutePath + File.separator + "Fonts") + File(FileUtils.getSdCardPath() + File.separator + "Fonts") file.listFiles { pathName -> pathName.name.toLowerCase().matches(".*\\.[ot]tf".toRegex()) }?.let { @@ -167,7 +162,7 @@ class FontSelectDialog : DialogFragment(), override fun onClick(file: File) { launch(IO) { - file.copyTo(FileHelp.getFile(fontFolder + file.name), true).absolutePath.let { path -> + file.copyTo(FileUtils.getFile(fontFolder + file.name), true).absolutePath.let { path -> val cb = (parentFragment as? CallBack) ?: (activity as? CallBack) cb?.let { if (it.curFontPath != path) { diff --git a/app/src/main/java/io/legado/app/utils/ACache.kt b/app/src/main/java/io/legado/app/utils/ACache.kt index b173dc612..03a330d6a 100644 --- a/app/src/main/java/io/legado/app/utils/ACache.kt +++ b/app/src/main/java/io/legado/app/utils/ACache.kt @@ -597,6 +597,7 @@ class ACache private constructor(cacheDir: File, max_size: Long, max_count: Int) val w = drawable.intrinsicWidth val h = drawable.intrinsicHeight // 取 drawable 的颜色格式 + @Suppress("DEPRECATION") val config = if (drawable.opacity != PixelFormat.OPAQUE) Bitmap.Config.ARGB_8888 else diff --git a/app/src/main/java/io/legado/app/utils/FileUtils.kt b/app/src/main/java/io/legado/app/utils/FileUtils.kt index 23cdcabab..9ebd26ea0 100644 --- a/app/src/main/java/io/legado/app/utils/FileUtils.kt +++ b/app/src/main/java/io/legado/app/utils/FileUtils.kt @@ -4,86 +4,76 @@ import android.content.ContentUris import android.content.Context import android.net.Uri import android.os.Environment -import android.os.storage.StorageManager import android.provider.DocumentsContract import android.provider.MediaStore -import android.util.Log -import androidx.core.content.ContextCompat +import io.legado.app.App import java.io.File import java.io.IOException -import java.lang.reflect.Array -import java.util.* object FileUtils { - fun getFileByPath(filePath: String): File? { - return if (filePath.isBlank()) null else File(filePath) + fun getCachePath(): String { + return App.INSTANCE.externalCacheDir?.absolutePath + ?: App.INSTANCE.cacheDir.absolutePath } - fun getSdCardPath(): String { - var sdCardDirectory = Environment.getExternalStorageDirectory().absolutePath - try { - sdCardDirectory = File(sdCardDirectory).canonicalPath - } catch (ioe: IOException) { - ioe.printStackTrace() + //获取文件夹 + fun getFolder(filePath: String): File { + val file = File(filePath) + //如果文件夹不存在,就创建它 + if (!file.exists()) { + file.mkdirs() } - - return sdCardDirectory + return file } - fun getStorageData(pContext: Context): ArrayList? { - - val storageManager = pContext.getSystemService(Context.STORAGE_SERVICE) as StorageManager - + //获取文件 + @Synchronized + fun getFile(filePath: String): File { + val file = File(filePath) try { - val getVolumeList = storageManager.javaClass.getMethod("getVolumeList") - - val storageVolumeClazz = Class.forName("android.os.storage.StorageVolume") - val getPath = storageVolumeClazz.getMethod("getPath") - - val invokeVolumeList = getVolumeList.invoke(storageManager) ?: return null - val length = Array.getLength(invokeVolumeList) - - val list = ArrayList() - for (i in 0 until length) { - val storageVolume = Array.get(invokeVolumeList, i)//得到StorageVolume对象 - val path = getPath.invoke(storageVolume) as String - - list.add(path) + if (!file.exists()) { + //创建父类文件夹 + file.parent?.let { + getFolder(it) + } + //创建文件 + file.createNewFile() } - return list - } catch (e: Exception) { + } catch (e: IOException) { e.printStackTrace() } - - return null + return file } - - fun getExtSdCardPaths(con: Context): ArrayList { - val paths = ArrayList() - val files = ContextCompat.getExternalFilesDirs(con, "external") - val firstFile = files[0] - for (file in files) { - if (file != null && file != firstFile) { - val index = file.absolutePath.lastIndexOf("/Android/data") - if (index < 0) { - Log.w("", "Unexpected external file dir: " + file.absolutePath) - } else { - var path = file.absolutePath.substring(0, index) - try { - path = File(path).canonicalPath - } catch (e: IOException) { - // Keep non-canonical path. - } - - paths.add(path) - } + //递归删除文件夹下的数据 + @Synchronized + fun deleteFile(filePath: String) { + val file = File(filePath) + if (!file.exists()) return + + if (file.isDirectory) { + val files = file.listFiles() + files?.forEach { subFile -> + val path = subFile.path + deleteFile(path) } } - return paths + //删除文件 + file.delete() + } + + fun getSdCardPath(): String { + @Suppress("DEPRECATION") + var sdCardDirectory = Environment.getExternalStorageDirectory().absolutePath + try { + sdCardDirectory = File(sdCardDirectory).canonicalPath + } catch (ioe: IOException) { + ioe.printStackTrace() + } + return sdCardDirectory } fun getPath(context: Context, uri: Uri): String? { diff --git a/app/src/main/java/io/legado/app/utils/LogUtils.kt b/app/src/main/java/io/legado/app/utils/LogUtils.kt index 1662974a7..b6712ad4d 100644 --- a/app/src/main/java/io/legado/app/utils/LogUtils.kt +++ b/app/src/main/java/io/legado/app/utils/LogUtils.kt @@ -2,7 +2,6 @@ package io.legado.app.utils import android.annotation.SuppressLint import io.legado.app.App -import io.legado.app.help.FileHelp import java.io.File import java.text.SimpleDateFormat import java.util.* @@ -30,8 +29,8 @@ object LogUtils { } private val fileHandler by lazy { - val logFolder = FileHelp.getCachePath() + File.separator + "logs" - FileHelp.getFolder(logFolder) + val logFolder = FileUtils.getCachePath() + File.separator + "logs" + FileUtils.getFolder(logFolder) FileHandler( logFolder + File.separator + "app.log", 10240, diff --git a/app/src/main/java/io/legado/app/utils/StringUtils.kt b/app/src/main/java/io/legado/app/utils/StringUtils.kt index 6d70b244b..95096c087 100644 --- a/app/src/main/java/io/legado/app/utils/StringUtils.kt +++ b/app/src/main/java/io/legado/app/utils/StringUtils.kt @@ -250,7 +250,7 @@ object StringUtils { val m = p.matcher(data) val buf = StringBuffer(data.length) while (m.find()) { - val ch = Integer.parseInt(m.group(1), 16).toChar().toString() + val ch = Integer.parseInt(m.group(1)!!, 16).toChar().toString() m.appendReplacement(buf, Matcher.quoteReplacement(ch)) } m.appendTail(buf)