Merge branch 'gedoor:master' into master

pull/1155/head
bushixuanqi 4 years ago committed by GitHub
commit 2eeba49b3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      README.md
  2. 54
      app/src/main/AndroidManifest.xml
  3. 17
      app/src/main/assets/updateLog.md
  4. 1
      app/src/main/java/io/legado/app/help/JsExtensions.kt
  5. 59
      app/src/main/java/io/legado/app/help/ReadBookConfig.kt
  6. 2
      app/src/main/java/io/legado/app/help/ThemeConfig.kt
  7. 15
      app/src/main/java/io/legado/app/ui/association/ImportBookSourceActivity.kt
  8. 14
      app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleActivity.kt
  9. 15
      app/src/main/java/io/legado/app/ui/association/ImportRssSourceActivity.kt
  10. 48
      app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt
  11. 107
      app/src/main/java/io/legado/app/ui/association/OnLineImportViewModel.kt
  12. 59
      app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt
  13. 49
      app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt

@ -21,7 +21,10 @@
<a href="https://play.google.com/store/apps/details?id=io.legado.play.release"><img width="200px" alt="Google Play" src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png"/></a> or <a href="https://www.coolapk.com/apk/io.legado.app.release"><img width="100px" height="100px" alt="CoolApk" src="https://github.com/Celeter/build/raw/master/.github/scripts/coolapk.png"/></a> or [Releases](https://github.com/gedoor/legado/releases/latest)
## 阅读API
阅读3.0 提供了2种方式的API:`Web方式`和`Content Provider方式`。您可以在[这里](api.md)根据需要自行调用。
* 阅读3.0 提供了2种方式的API:`Web方式`和`Content Provider方式`。您可以在[这里](api.md)根据需要自行调用。
* 可通过url唤起阅读进行一键导入,url格式: legado://import/{path}?src={url}
* path类型: bookSource,rssSource,replaceRule,textTocRule,httpTTS,theme,readConfig
* path类型解释: 书源,订阅源,替换规则,本地txt小说目录规则,在线朗读引擎,主题,阅读排版
## 感谢
```

@ -319,16 +319,6 @@
<data android:mimeType="text/plain" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="import"
android:scheme="legado" />
</intent-filter>
</activity>
<!-- 一键导入 -->
<activity
@ -341,59 +331,25 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="import"
android:scheme="legado" />
<data android:scheme="legado" />
<data android:scheme="yuedu" />
</intent-filter>
</activity>
<!-- 导入书源 -->
<activity
android:name=".ui.association.ImportBookSourceActivity"
android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
android:theme="@style/AppTheme.Transparent">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="booksource"
android:scheme="yuedu" />
</intent-filter>
</activity>
android:theme="@style/AppTheme.Transparent" />
<!-- 导入订阅源 -->
<activity
android:name=".ui.association.ImportRssSourceActivity"
android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
android:theme="@style/AppTheme.Transparent">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="rsssource"
android:scheme="yuedu" />
</intent-filter>
</activity>
android:theme="@style/AppTheme.Transparent" />
<!-- 导入替换规则 -->
<activity
android:name=".ui.association.ImportReplaceRuleActivity"
android:configChanges="locale|keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout"
android:theme="@style/AppTheme.Transparent">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="replace"
android:scheme="yuedu" />
</intent-filter>
</activity>
android:theme="@style/AppTheme.Transparent" />
<!-- 打开文件 -->
<activity
android:name=".ui.association.FileAssociationActivity"

@ -8,13 +8,16 @@
* 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则出现问题。先关闭替换净化并刷新,再观察是否正常。如果正常说明净化规则存在误杀,如果关闭后仍然出现相关问题,请点击源链接查看原文与正文是否相同,如果不同,再进行反馈。
* 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
**2021/07/21**
* 非关键规则添加try防止报错中断解析
* 添加获取封面的api
* 获取正文api使用替换规则
* 添加一个ronet版本,网络访问使用Chromium内核
* web书架增加【最近一次更新书籍信息的时间】
* 采用Flow替换LiveData,优化资源使用
**2021/07/22**
1. 非关键规则添加try防止报错中断解析
2. 添加获取封面的api
3. 获取正文api使用替换规则
4. 添加一个ronet版本,网络访问使用Chromium内核
5. web书架增加【最近一次更新书籍信息的时间】
6. 采用Flow替换LiveData,优化资源使用
7. 统一网络一键导入路径legado://import/{path}?src={url}
* path: bookSource,rssSource,replaceRule,textTocRule,httpTTS,theme,readConfig
* 添加了txt小说规则,在线朗读引擎,主题,排版 的一键导入支持,老url依然可用
**2021/07/16**
1. js扩展函数添加删除本地文件方法

@ -346,7 +346,6 @@ interface JsExtensions {
}
val bos = ByteArrayOutputStream()
val zis = ZipInputStream(ByteArrayInputStream(bytes))
var entry: ZipEntry? = zis.nextEntry
while (entry != null) {
if (entry.name.equals(path)) {

@ -10,6 +10,8 @@ import io.legado.app.constant.PreferKey
import io.legado.app.help.coroutine.Coroutine
import io.legado.app.ui.book.read.page.provider.ChapterProvider
import io.legado.app.utils.*
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.withContext
import splitties.init.appCtx
import java.io.File
@ -355,6 +357,63 @@ object ReadBookConfig {
return exportConfig
}
suspend fun import(byteArray: ByteArray): Config {
return withContext(IO) {
val configZipPath = FileUtils.getPath(appCtx.externalCache, configFileName)
FileUtils.deleteFile(configZipPath)
val zipFile = FileUtils.createFileIfNotExist(configZipPath)
zipFile.writeBytes(byteArray)
val configDirPath = FileUtils.getPath(appCtx.externalCache, "readConfig")
FileUtils.deleteFile(configDirPath)
@Suppress("BlockingMethodInNonBlockingContext")
ZipUtils.unzipFile(zipFile, FileUtils.createFolderIfNotExist(configDirPath))
val configDir = FileUtils.createFolderIfNotExist(configDirPath)
val configFile = FileUtils.getFile(configDir, "readConfig.json")
val config: Config = GSON.fromJsonObject(configFile.readText())!!
if (config.textFont.isNotEmpty()) {
val fontName = FileUtils.getName(config.textFont)
val fontPath =
FileUtils.getPath(appCtx.externalFiles, "font", fontName)
if (!FileUtils.exist(fontPath)) {
FileUtils.getFile(configDir, fontName).copyTo(File(fontPath))
}
config.textFont = fontPath
}
if (config.bgType == 2) {
val bgName = FileUtils.getName(config.bgStr)
val bgPath = FileUtils.getPath(appCtx.externalFiles, "bg", bgName)
if (!FileUtils.exist(bgPath)) {
val bgFile = FileUtils.getFile(configDir, bgName)
if (bgFile.exists()) {
bgFile.copyTo(File(bgPath))
}
}
}
if (config.bgTypeNight == 2) {
val bgName = FileUtils.getName(config.bgStrNight)
val bgPath = FileUtils.getPath(appCtx.externalFiles, "bg", bgName)
if (!FileUtils.exist(bgPath)) {
val bgFile = FileUtils.getFile(configDir, bgName)
if (bgFile.exists()) {
bgFile.copyTo(File(bgPath))
}
}
}
if (config.bgTypeEInk == 2) {
val bgName = FileUtils.getName(config.bgStrEInk)
@Suppress("BlockingMethodInNonBlockingContext") val bgPath =
FileUtils.getPath(appCtx.externalFiles, "bg", bgName)
if (!FileUtils.exist(bgPath)) {
val bgFile = FileUtils.getFile(configDir, bgName)
if (bgFile.exists()) {
bgFile.copyTo(File(bgPath))
}
}
}
return@withContext config
}
}
@Keep
class Config(
var name: String = "",

@ -76,7 +76,7 @@ object ThemeConfig {
return false
}
private fun addConfig(newConfig: Config) {
fun addConfig(newConfig: Config) {
configList.forEachIndexed { index, config ->
if (newConfig.themeName == config.themeName) {
configList[index] = newConfig

@ -8,8 +8,6 @@ import io.legado.app.constant.Theme
import io.legado.app.databinding.ActivityTranslucenceBinding
import io.legado.app.help.IntentDataHelp
import io.legado.app.lib.dialogs.alert
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding
@ -49,18 +47,7 @@ class ImportBookSourceActivity :
viewModel.importSource(it)
return
}
intent.data?.let {
when (it.path) {
"/importonline" -> it.getQueryParameter("src")?.let { url ->
viewModel.importSource(url)
}
else -> {
binding.rotateLoading.hide()
toastOnUi(R.string.wrong_format)
finish()
}
}
} ?: finish()
finish()
}
private fun errorDialog(msg: String) {

@ -7,7 +7,6 @@ import io.legado.app.constant.Theme
import io.legado.app.databinding.ActivityTranslucenceBinding
import io.legado.app.help.IntentDataHelp
import io.legado.app.lib.dialogs.alert
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding
class ImportReplaceRuleActivity :
@ -46,18 +45,7 @@ class ImportReplaceRuleActivity :
viewModel.import(it)
return
}
intent.data?.let {
when (it.path) {
"/importonline" -> it.getQueryParameter("src")?.let { url ->
viewModel.import(url)
}
else -> {
binding.rotateLoading.hide()
toastOnUi("格式不对")
finish()
}
}
} ?: finish()
finish()
}
private fun errorDialog(msg: String) {

@ -8,8 +8,6 @@ import io.legado.app.constant.Theme
import io.legado.app.databinding.ActivityTranslucenceBinding
import io.legado.app.help.IntentDataHelp
import io.legado.app.lib.dialogs.alert
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding
class ImportRssSourceActivity :
@ -48,18 +46,7 @@ class ImportRssSourceActivity :
viewModel.importSource(it)
return
}
intent.data?.let {
when (it.path) {
"/importonline" -> it.getQueryParameter("src")?.let { url ->
viewModel.importSource(url)
}
else -> {
binding.rotateLoading.hide()
toastOnUi(R.string.wrong_format)
finish()
}
}
} ?: finish()
finish()
}
private fun errorDialog(msg: String) {

@ -3,15 +3,22 @@ package io.legado.app.ui.association
import android.os.Bundle
import androidx.activity.viewModels
import io.legado.app.R
import io.legado.app.base.BaseActivity
import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.Theme
import io.legado.app.databinding.ActivityTranslucenceBinding
import io.legado.app.lib.dialogs.alert
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding
class OnLineImportActivity : BaseActivity<ActivityTranslucenceBinding>(theme = Theme.Transparent) {
/**
* 网络一键导入
* 格式: legado://import/{path}?src={url}
*/
class OnLineImportActivity :
VMBaseActivity<ActivityTranslucenceBinding, OnLineImportViewModel>(theme = Theme.Transparent) {
override val binding by viewBinding(ActivityTranslucenceBinding::inflate)
override val viewModel by viewModels<OnLineImportViewModel>()
override fun onActivityCreated(savedInstanceState: Bundle?) {
intent.data?.let {
@ -21,10 +28,21 @@ class OnLineImportActivity : BaseActivity<ActivityTranslucenceBinding>(theme = T
return
}
when (it.path) {
"bookSource" -> importBookSource(url)
"rssSource" -> importRssSource(url)
"replaceRule" -> importReplaceRule(url)
else -> {
"/bookSource" -> importBookSource(url)
"/rssSource" -> importRssSource(url)
"/replaceRule" -> importReplaceRule(url)
"/textTocRule" -> viewModel.importTextTocRule(url, this::finallyDialog)
"/httpTTS" -> viewModel.importHttpTTS(url, this::finallyDialog)
"/theme" -> viewModel.importTheme(url, this::finallyDialog)
"/readConfig" -> viewModel.importReadConfig(url, this::finallyDialog)
"/importonline" -> when (it.host) {
"booksource" -> importBookSource(url)
"rsssource" -> importRssSource(url)
"replace" -> importReplaceRule(url)
else -> {
toastOnUi("url error")
finish()
}
}
}
}
@ -35,14 +53,14 @@ class OnLineImportActivity : BaseActivity<ActivityTranslucenceBinding>(theme = T
binding.rotateLoading.show()
viewModel.errorLiveData.observe(this, {
binding.rotateLoading.hide()
errorDialog(it)
finallyDialog(getString(R.string.error), it)
})
viewModel.successLiveData.observe(this, {
binding.rotateLoading.hide()
if (it > 0) {
ImportBookSourceDialog().show(supportFragmentManager, "bookSource")
} else {
errorDialog(getString(R.string.wrong_format))
finallyDialog(getString(R.string.error), getString(R.string.wrong_format))
}
})
viewModel.importSource(url)
@ -53,14 +71,14 @@ class OnLineImportActivity : BaseActivity<ActivityTranslucenceBinding>(theme = T
binding.rotateLoading.show()
viewModel.errorLiveData.observe(this, {
binding.rotateLoading.hide()
errorDialog(it)
finallyDialog(getString(R.string.error), it)
})
viewModel.successLiveData.observe(this, {
binding.rotateLoading.hide()
if (it > 0) {
ImportRssSourceDialog().show(supportFragmentManager, "rssSource")
} else {
errorDialog(getString(R.string.wrong_format))
finallyDialog(getString(R.string.error), getString(R.string.wrong_format))
}
})
viewModel.importSource(url)
@ -71,22 +89,22 @@ class OnLineImportActivity : BaseActivity<ActivityTranslucenceBinding>(theme = T
binding.rotateLoading.show()
viewModel.errorLiveData.observe(this, {
binding.rotateLoading.hide()
errorDialog(it)
finallyDialog(getString(R.string.error), it)
})
viewModel.successLiveData.observe(this, {
binding.rotateLoading.hide()
if (it > 0) {
ImportReplaceRuleDialog().show(supportFragmentManager, "replaceRule")
} else {
errorDialog(getString(R.string.wrong_format))
finallyDialog(getString(R.string.error), getString(R.string.wrong_format))
}
})
viewModel.import(url)
}
private fun errorDialog(msg: String) {
alert(getString(R.string.error), msg) {
okButton { }
private fun finallyDialog(title: String, msg: String) {
alert(title, msg) {
okButton()
onDismiss {
finish()
}

@ -1,6 +1,111 @@
package io.legado.app.ui.association
import io.legado.app.App
import io.legado.app.R
import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb
import io.legado.app.data.entities.HttpTTS
import io.legado.app.data.entities.TxtTocRule
import io.legado.app.help.ReadBookConfig
import io.legado.app.help.ThemeConfig
import io.legado.app.help.http.newCall
import io.legado.app.help.http.okHttpClient
import io.legado.app.help.http.text
import io.legado.app.utils.GSON
import io.legado.app.utils.fromJsonArray
import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.isJsonArray
class OnLineImportViewModel(app: App) : BaseViewModel(app)
class OnLineImportViewModel(app: App) : BaseViewModel(app) {
fun importTextTocRule(url: String, finally: (title: String, msg: String) -> Unit) {
execute {
okHttpClient.newCall {
url(url)
}.text("utf-8").let { json ->
if (json.isJsonArray()) {
GSON.fromJsonArray<TxtTocRule>(json)?.let {
appDb.txtTocRuleDao.insert(*it.toTypedArray())
} ?: throw Exception("格式不对")
} else {
GSON.fromJsonObject<TxtTocRule>(json)?.let {
appDb.txtTocRuleDao.insert(it)
} ?: throw Exception("格式不对")
}
}
}.onSuccess {
finally.invoke(context.getString(R.string.success), "导入Txt规则成功")
}.onError {
finally.invoke(context.getString(R.string.error), it.localizedMessage ?: "未知错误")
}
}
fun importHttpTTS(url: String, finally: (title: String, msg: String) -> Unit) {
execute {
okHttpClient.newCall {
url(url)
}.text("utf-8").let { json ->
if (json.isJsonArray()) {
GSON.fromJsonArray<HttpTTS>(json)?.let {
appDb.httpTTSDao.insert(*it.toTypedArray())
return@execute it.size
} ?: throw Exception("格式不对")
} else {
GSON.fromJsonObject<HttpTTS>(json)?.let {
appDb.httpTTSDao.insert(it)
return@execute 1
} ?: throw Exception("格式不对")
}
}
}.onSuccess {
finally.invoke(context.getString(R.string.success), "导入${it}朗读引擎")
}.onError {
finally.invoke(context.getString(R.string.error), it.localizedMessage ?: "未知错误")
}
}
fun importTheme(url: String, finally: (title: String, msg: String) -> Unit) {
execute {
okHttpClient.newCall {
url(url)
}.text("utf-8").let { json ->
if (json.isJsonArray()) {
GSON.fromJsonArray<ThemeConfig.Config>(json)?.forEach {
ThemeConfig.addConfig(it)
} ?: throw Exception("格式不对")
} else {
GSON.fromJsonObject<ThemeConfig.Config>(json)?.let {
ThemeConfig.addConfig(it)
} ?: throw Exception("格式不对")
}
}
}.onSuccess {
finally.invoke(context.getString(R.string.success), "导入主题成功")
}.onError {
finally.invoke(context.getString(R.string.error), it.localizedMessage ?: "未知错误")
}
}
fun importReadConfig(url: String, finally: (title: String, msg: String) -> Unit) {
execute {
@Suppress("BlockingMethodInNonBlockingContext")
val bytes = okHttpClient.newCall {
url(url)
}.bytes()
val config = ReadBookConfig.import(bytes)
ReadBookConfig.configList.forEachIndexed { index, c ->
if (c.name == config.name) {
ReadBookConfig.configList[index] = config
return@execute config.name
}
ReadBookConfig.configList.add(config)
return@execute config.name
}
}.onSuccess {
finally.invoke(context.getString(R.string.success), "导入排版成功")
}.onError {
finally.invoke(context.getString(R.string.error), it.localizedMessage ?: "未知错误")
}
}
}

@ -308,6 +308,7 @@ class BgTextConfigDialog : BaseDialogFragment() {
private fun importNetConfig(url: String) {
execute {
@Suppress("BlockingMethodInNonBlockingContext")
okHttpClient.newCall {
url(url)
}.bytes().let {
@ -318,9 +319,9 @@ class BgTextConfigDialog : BaseDialogFragment() {
}
}
@Suppress("BlockingMethodInNonBlockingContext")
private fun importConfig(uri: Uri) {
execute {
@Suppress("BlockingMethodInNonBlockingContext")
importConfig(uri.readBytes(requireContext())!!)
}.onError {
it.printStackTrace()
@ -328,61 +329,13 @@ class BgTextConfigDialog : BaseDialogFragment() {
}
}
@Suppress("BlockingMethodInNonBlockingContext")
@Suppress("BlockingMethodInNonBlockingContext", "BlockingMethodInNonBlockingContext")
private fun importConfig(byteArray: ByteArray) {
execute {
val configZipPath = FileUtils.getPath(requireContext().externalCache, configFileName)
FileUtils.deleteFile(configZipPath)
val zipFile = FileUtils.createFileIfNotExist(configZipPath)
zipFile.writeBytes(byteArray)
val configDirPath = FileUtils.getPath(requireContext().externalCache, "readConfig")
FileUtils.deleteFile(configDirPath)
ZipUtils.unzipFile(zipFile, FileUtils.createFolderIfNotExist(configDirPath))
val configDir = FileUtils.createFolderIfNotExist(configDirPath)
val configFile = FileUtils.getFile(configDir, "readConfig.json")
val config: ReadBookConfig.Config = GSON.fromJsonObject(configFile.readText())!!
if (config.textFont.isNotEmpty()) {
val fontName = FileUtils.getName(config.textFont)
val fontPath =
FileUtils.getPath(requireContext().externalFiles, "font", fontName)
if (!FileUtils.exist(fontPath)) {
FileUtils.getFile(configDir, fontName).copyTo(File(fontPath))
}
config.textFont = fontPath
}
if (config.bgType == 2) {
val bgName = FileUtils.getName(config.bgStr)
val bgPath = FileUtils.getPath(requireContext().externalFiles, "bg", bgName)
if (!FileUtils.exist(bgPath)) {
val bgFile = FileUtils.getFile(configDir, bgName)
if (bgFile.exists()) {
bgFile.copyTo(File(bgPath))
}
}
}
if (config.bgTypeNight == 2) {
val bgName = FileUtils.getName(config.bgStrNight)
val bgPath = FileUtils.getPath(requireContext().externalFiles, "bg", bgName)
if (!FileUtils.exist(bgPath)) {
val bgFile = FileUtils.getFile(configDir, bgName)
if (bgFile.exists()) {
bgFile.copyTo(File(bgPath))
}
}
}
if (config.bgTypeEInk == 2) {
val bgName = FileUtils.getName(config.bgStrEInk)
val bgPath = FileUtils.getPath(requireContext().externalFiles, "bg", bgName)
if (!FileUtils.exist(bgPath)) {
val bgFile = FileUtils.getFile(configDir, bgName)
if (bgFile.exists()) {
bgFile.copyTo(File(bgPath))
}
}
}
ReadBookConfig.durConfig = config
postEvent(EventBus.UP_CONFIG, true)
ReadBookConfig.import(byteArray)
}.onSuccess {
ReadBookConfig.durConfig = it
postEvent(EventBus.UP_CONFIG, true)
toastOnUi("导入成功")
}.onError {
it.printStackTrace()

@ -2,7 +2,6 @@ package io.legado.app.ui.rss.read
import android.annotation.SuppressLint
import android.app.DownloadManager
import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.res.Configuration
import android.net.Uri
@ -23,9 +22,7 @@ import io.legado.app.help.AppConfig
import io.legado.app.lib.theme.DrawableUtils
import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.service.help.Download
import io.legado.app.ui.association.ImportBookSourceActivity
import io.legado.app.ui.association.ImportReplaceRuleActivity
import io.legado.app.ui.association.ImportRssSourceActivity
import io.legado.app.ui.association.OnLineImportActivity
import io.legado.app.ui.document.FilePicker
import io.legado.app.ui.document.FilePickerParam
import io.legado.app.utils.*
@ -332,41 +329,23 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
}
private fun shouldOverrideUrlLoading(url: Uri): Boolean {
if (url.scheme == "http" || url.scheme == "https") {
return false
} else if (url.scheme == "yuedu") {
when (url.host) {
"booksource" -> {
val intent = Intent(
this@ReadRssActivity,
ImportBookSourceActivity::class.java
)
intent.data = url
startActivity(intent)
}
"rsssource" -> {
val intent = Intent(
this@ReadRssActivity,
ImportRssSourceActivity::class.java
)
intent.data = url
startActivity(intent)
when (url.scheme) {
"http", "https" -> {
return false
}
"legado", "yuedu" -> {
startActivity<OnLineImportActivity> {
data = url
}
"replace" -> {
val intent = Intent(
this@ReadRssActivity,
ImportReplaceRuleActivity::class.java
)
intent.data = url
startActivity(intent)
return true
}
else -> {
binding.root.longSnackbar("跳转其它应用", "确认") {
openUrl(url)
}
return true
}
return true
}
binding.root.longSnackbar("跳转其它应用", "确认") {
openUrl(url)
}
return true
}
}

Loading…
Cancel
Save