mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -50,15 +50,17 @@ object AppConst {
|
||||
const val notificationIdDownload = -1122395
|
||||
const val notificationIdCheckSource = -1122395
|
||||
|
||||
const val imagePathKey = "imagePath"
|
||||
|
||||
val menuViewNames = arrayOf(
|
||||
"com.android.internal.view.menu.ListMenuItemView",
|
||||
"androidx.appcompat.view.menu.ListMenuItemView"
|
||||
)
|
||||
|
||||
@SuppressLint("PrivateResource")
|
||||
val sysElevation =
|
||||
appCtx.resources.getDimension(com.google.android.material.R.dimen.design_appbar_elevation)
|
||||
.toInt()
|
||||
val sysElevation = appCtx.resources
|
||||
.getDimension(com.google.android.material.R.dimen.design_appbar_elevation)
|
||||
.toInt()
|
||||
|
||||
val androidId: String by lazy {
|
||||
Settings.System.getString(appCtx.contentResolver, Settings.Secure.ANDROID_ID) ?: "null"
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.*
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
@@ -14,10 +15,7 @@ import androidx.core.view.size
|
||||
import com.jaredrummler.android.colorpicker.ColorPickerDialogListener
|
||||
import io.legado.app.BuildConfig
|
||||
import io.legado.app.R
|
||||
import io.legado.app.constant.BookType
|
||||
import io.legado.app.constant.EventBus
|
||||
import io.legado.app.constant.PreferKey
|
||||
import io.legado.app.constant.Status
|
||||
import io.legado.app.constant.*
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.entities.Book
|
||||
import io.legado.app.data.entities.BookChapter
|
||||
@@ -58,6 +56,7 @@ import io.legado.app.ui.book.source.edit.BookSourceEditActivity
|
||||
import io.legado.app.ui.book.toc.TocActivityResult
|
||||
import io.legado.app.ui.browser.WebViewActivity
|
||||
import io.legado.app.ui.dict.DictDialog
|
||||
import io.legado.app.ui.document.HandleFileContract
|
||||
import io.legado.app.ui.login.SourceLoginActivity
|
||||
import io.legado.app.ui.replace.ReplaceRuleActivity
|
||||
import io.legado.app.ui.replace.edit.ReplaceEditActivity
|
||||
@@ -129,6 +128,12 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
}
|
||||
}
|
||||
}
|
||||
private val selectImageDir = registerForActivityResult(HandleFileContract()) {
|
||||
it.uri?.let { uri ->
|
||||
ACache.get().put(AppConst.imagePathKey, uri.toString())
|
||||
viewModel.saveImage(it.value, uri)
|
||||
}
|
||||
}
|
||||
private var menu: Menu? = null
|
||||
private var autoPageJob: Job? = null
|
||||
private var backupJob: Job? = null
|
||||
@@ -1001,13 +1006,26 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
popupAction.setItems(
|
||||
listOf(
|
||||
SelectItem(getString(R.string.show), "show"),
|
||||
SelectItem(getString(R.string.refresh), "refresh")
|
||||
SelectItem(getString(R.string.refresh), "refresh"),
|
||||
SelectItem(getString(R.string.action_save), "save"),
|
||||
SelectItem(getString(R.string.select_folder), "selectFolder")
|
||||
)
|
||||
)
|
||||
popupAction.onActionClick = {
|
||||
when (it) {
|
||||
"show" -> showDialogFragment(PhotoDialog(src))
|
||||
"refresh" -> viewModel.refreshImage(src)
|
||||
"save" -> {
|
||||
val path = ACache.get().getAsString(AppConst.imagePathKey)
|
||||
if (path.isNullOrEmpty()) {
|
||||
selectImageDir.launch {
|
||||
value = src
|
||||
}
|
||||
} else {
|
||||
viewModel.saveImage(src, Uri.parse(path))
|
||||
}
|
||||
}
|
||||
"selectFolder" -> selectImageDir.launch()
|
||||
}
|
||||
popupAction.dismiss()
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package io.legado.app.ui.book.read
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import io.legado.app.R
|
||||
@@ -425,6 +426,10 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
}
|
||||
}
|
||||
|
||||
fun saveImage(src: String?, uri: Uri) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换规则变化
|
||||
*/
|
||||
|
||||
@@ -223,6 +223,7 @@ class HandleFileActivity :
|
||||
}
|
||||
}
|
||||
} else {
|
||||
data.putExtra("value", intent.getStringExtra("value"))
|
||||
setResult(RESULT_OK, data)
|
||||
finish()
|
||||
}
|
||||
|
||||
@@ -32,15 +32,16 @@ class HandleFileContract :
|
||||
intent.putExtra("fileKey", IntentData.put(fileData.second))
|
||||
intent.putExtra("contentType", fileData.third)
|
||||
}
|
||||
intent.putExtra("value", it.value)
|
||||
}
|
||||
return intent
|
||||
}
|
||||
|
||||
override fun parseResult(resultCode: Int, intent: Intent?): Result {
|
||||
if (resultCode == RESULT_OK) {
|
||||
return Result(intent?.data, requestCode)
|
||||
return Result(intent?.data, requestCode, intent?.getStringExtra("value"))
|
||||
}
|
||||
return Result(null, requestCode)
|
||||
return Result(null, requestCode, intent?.getStringExtra("value"))
|
||||
}
|
||||
|
||||
companion object {
|
||||
@@ -57,12 +58,14 @@ class HandleFileContract :
|
||||
var allowExtensions: Array<String> = arrayOf(),
|
||||
var otherActions: ArrayList<SelectItem<Int>>? = null,
|
||||
var fileData: Triple<String, Any, String>? = null,
|
||||
var requestCode: Int = 0
|
||||
var requestCode: Int = 0,
|
||||
var value: String? = null
|
||||
)
|
||||
|
||||
data class Result(
|
||||
val uri: Uri?,
|
||||
val requestCode: Int
|
||||
val requestCode: Int,
|
||||
val value: String?
|
||||
)
|
||||
|
||||
}
|
||||
@@ -14,9 +14,11 @@ import androidx.webkit.WebViewFeature
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.VMBaseActivity
|
||||
import io.legado.app.constant.AppConst
|
||||
import io.legado.app.constant.AppConst.imagePathKey
|
||||
import io.legado.app.databinding.ActivityRssReadBinding
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.lib.dialogs.SelectItem
|
||||
import io.legado.app.lib.dialogs.selector
|
||||
import io.legado.app.lib.theme.accentColor
|
||||
import io.legado.app.lib.theme.primaryTextColor
|
||||
import io.legado.app.model.Download
|
||||
@@ -38,15 +40,13 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
|
||||
|
||||
override val binding by viewBinding(ActivityRssReadBinding::inflate)
|
||||
override val viewModel by viewModels<ReadRssViewModel>()
|
||||
private val imagePathKey = "imagePath"
|
||||
private var starMenuItem: MenuItem? = null
|
||||
private var ttsMenuItem: MenuItem? = null
|
||||
private var customWebViewCallback: WebChromeClient.CustomViewCallback? = null
|
||||
private var webPic: String? = null
|
||||
private val saveImage = registerForActivityResult(HandleFileContract()) {
|
||||
private val selectImageDir = registerForActivityResult(HandleFileContract()) {
|
||||
it.uri?.let { uri ->
|
||||
ACache.get().put(imagePathKey, uri.toString())
|
||||
viewModel.saveImage(webPic, uri)
|
||||
viewModel.saveImage(it.value, uri)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,8 +135,18 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
|
||||
if (hitTestResult.type == WebView.HitTestResult.IMAGE_TYPE ||
|
||||
hitTestResult.type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE
|
||||
) {
|
||||
hitTestResult.extra?.let {
|
||||
saveImage(it)
|
||||
hitTestResult.extra?.let { webPic ->
|
||||
selector(
|
||||
arrayListOf(
|
||||
SelectItem(getString(R.string.action_save), "save"),
|
||||
SelectItem(getString(R.string.select_folder), "selectFolder")
|
||||
)
|
||||
) { _, charSequence, i ->
|
||||
when (charSequence.value) {
|
||||
"save" -> saveImage(webPic)
|
||||
"selectFolder" -> selectSaveFolder(null)
|
||||
}
|
||||
}
|
||||
return@setOnLongClickListener true
|
||||
}
|
||||
}
|
||||
@@ -153,23 +163,23 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
|
||||
}
|
||||
|
||||
private fun saveImage(webPic: String) {
|
||||
this.webPic = webPic
|
||||
val path = ACache.get().getAsString(imagePathKey)
|
||||
if (path.isNullOrEmpty()) {
|
||||
selectSaveFolder()
|
||||
selectSaveFolder(webPic)
|
||||
} else {
|
||||
viewModel.saveImage(webPic, Uri.parse(path))
|
||||
}
|
||||
}
|
||||
|
||||
private fun selectSaveFolder() {
|
||||
private fun selectSaveFolder(webPic: String?) {
|
||||
val default = arrayListOf<SelectItem<Int>>()
|
||||
val path = ACache.get().getAsString(imagePathKey)
|
||||
if (!path.isNullOrEmpty()) {
|
||||
default.add(SelectItem(path, -1))
|
||||
}
|
||||
saveImage.launch {
|
||||
selectImageDir.launch {
|
||||
otherActions = default
|
||||
value = webPic
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user