阅读界面配置导出

pull/357/head
gedoor 5 years ago
parent ce7b68852d
commit d4db3109f5
  1. 63
      app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt
  2. 10
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceViewModel.kt
  3. 16
      app/src/main/java/io/legado/app/utils/ContextExtensions.kt

@ -27,14 +27,16 @@ import io.legado.app.lib.theme.bottomBackground
import io.legado.app.lib.theme.getPrimaryTextColor
import io.legado.app.lib.theme.getSecondaryTextColor
import io.legado.app.ui.book.read.ReadBookActivityHelp
import io.legado.app.ui.filechooser.FileChooserDialog
import io.legado.app.ui.filechooser.FilePicker
import io.legado.app.utils.*
import kotlinx.android.synthetic.main.dialog_read_bg_text.*
import kotlinx.android.synthetic.main.item_bg_image.view.*
import org.jetbrains.anko.sdk27.listeners.onCheckedChange
import org.jetbrains.anko.sdk27.listeners.onClick
import java.io.File
class BgTextConfigDialog : BaseDialogFragment() {
class BgTextConfigDialog : BaseDialogFragment(), FileChooserDialog.CallBack {
companion object {
const val TEXT_COLOR = 121
@ -192,8 +194,57 @@ class BgTextConfigDialog : BaseDialogFragment() {
}
}
@Suppress("BlockingMethodInNonBlockingContext")
private fun exportConfig(uri: Uri) {
execute {
val configDirPath = FileUtils.getPath(requireContext().eCacheDir, "readConfig")
FileUtils.deleteFile(configDirPath)
val configDir = FileUtils.createFolderIfNotExist(configDirPath)
val configExportPath = FileUtils.getPath(configDir, "readConfig.json")
FileUtils.deleteFile(configExportPath)
val configExportFile = FileUtils.createFileIfNotExist(configExportPath)
configExportFile.writeText(GSON.toJson(ReadBookConfig.durConfig))
val fontPath = ReadBookConfig.textFont
if (fontPath.isNotEmpty()) {
val fontName = FileUtils.getName(fontPath)
val fontBytes = Uri.parse(fontPath).readBytes(requireContext())
fontBytes?.let {
val fontExportFile = FileUtils.createFileIfNotExist(configDir, fontName)
fontExportFile.writeBytes(it)
}
}
if (ReadBookConfig.durConfig.bgType() == 2) {
val bgName = FileUtils.getName(ReadBookConfig.durConfig.bgStr())
val bgFile = File(ReadBookConfig.durConfig.bgStr())
if (bgFile.exists()) {
val bgExportFile = FileUtils.createFileIfNotExist(configDir, bgName)
bgFile.copyTo(bgExportFile)
}
}
val configZipPath = FileUtils.getPath(requireContext().eCacheDir, "readConfig.zip")
if (ZipUtils.zipFile(configDirPath, configZipPath)) {
uri.writeBytes(requireContext(), File(configZipPath).readBytes())
}
}.onSuccess {
toast("导出成功")
}.onError {
toast("导出失败:${it.localizedMessage}")
}
}
private fun importConfig(uri: Uri) {
if (uri.toString().isContentPath()) {
} else {
}
}
override fun onFilePicked(requestCode: Int, currentPath: String) {
when (requestCode) {
requestCodeImport -> importConfig(Uri.parse(currentPath))
requestCodeExport -> exportConfig(Uri.parse(currentPath))
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@ -204,6 +255,16 @@ class BgTextConfigDialog : BaseDialogFragment() {
setBgFromUri(uri)
}
}
requestCodeImport -> if (resultCode == RESULT_OK) {
data?.data?.let { uri ->
importConfig(uri)
}
}
requestCodeExport -> if (resultCode == RESULT_OK) {
data?.data?.let { uri ->
exportConfig(uri)
}
}
}
}

@ -11,7 +11,7 @@ import io.legado.app.utils.FileUtils
import io.legado.app.utils.GSON
import io.legado.app.utils.splitNotBlank
import io.legado.app.utils.writeText
import org.jetbrains.anko.toast
import org.jetbrains.anko.longToast
import java.io.File
class BookSourceViewModel(application: Application) : BaseViewModel(application) {
@ -144,9 +144,9 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application)
FileUtils.createFileIfNotExist(file, "exportBookSource.json")
.writeText(json)
}.onSuccess {
context.toast("成功导出至\n${file.absolutePath}")
context.longToast("成功导出至\n${file.absolutePath}")
}.onError {
context.toast("导出失败\n${it.localizedMessage}")
context.longToast("导出失败\n${it.localizedMessage}")
}
}
@ -157,9 +157,9 @@ class BookSourceViewModel(application: Application) : BaseViewModel(application)
doc.createFile("", "exportBookSource.json")
?.writeText(context, json)
}.onSuccess {
context.toast("成功导出至\n${doc.uri.path}")
context.longToast("成功导出至\n${doc.uri.path}")
}.onError {
context.toast("导出失败\n${it.localizedMessage}")
context.longToast("导出失败\n${it.localizedMessage}")
}
}

@ -1,4 +1,5 @@
@file:Suppress("unused")
package io.legado.app.utils
import android.annotation.SuppressLint
@ -20,7 +21,6 @@ import androidx.core.content.edit
import cn.bingoogolapple.qrcode.zxing.QRCodeEncoder
import com.google.zxing.EncodeHintType
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
import io.legado.app.App
import io.legado.app.BuildConfig
import io.legado.app.R
import org.jetbrains.anko.defaultSharedPreferences
@ -83,24 +83,25 @@ val Context.sysScreenOffTime: Int
get() {
var screenOffTime = 0
try {
screenOffTime = Settings.System.getInt(contentResolver, Settings.System.SCREEN_OFF_TIMEOUT)
screenOffTime =
Settings.System.getInt(contentResolver, Settings.System.SCREEN_OFF_TIMEOUT)
} catch (e: Exception) {
e.printStackTrace()
}
return screenOffTime
}
}
val Context.statusBarHeight: Int
get() {
val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
return resources.getDimensionPixelSize(resourceId)
}
}
val Context.navigationBarHeight: Int
get() {
val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android")
return resources.getDimensionPixelSize(resourceId)
}
}
@SuppressLint("SetWorldReadable")
fun Context.shareWithQr(title: String, text: String) {
@ -162,7 +163,10 @@ val Context.sysBattery: Int
}
val Context.externalFilesDir: File
get() = App.INSTANCE.getExternalFilesDir(null) ?: App.INSTANCE.filesDir
get() = this.getExternalFilesDir(null) ?: this.filesDir
val Context.eCacheDir: File
get() = this.externalCacheDir ?: this.cacheDir
fun Context.openUrl(url: String) {
openUrl(Uri.parse(url))

Loading…
Cancel
Save