优化夜晚模式下对话框文字+添加MIME 类型参数,调用对应应用 (#4655)
* style(dialog): 优化确认对话框样式 - 修改工具栏 ID为 tool_bar - 为消息文本添加主文本颜色 - 设置工具栏标题文本颜色 * feat(app): 优化外部链接跳转逻辑并支持 MIME 类型- 重构 ConfirmationDialogActivity 中的跳转逻辑,支持处理 MIME 类型 - 在 JsExtensions 中的 openUrl 函数增加 mimeType 参数,允许传递 MIME 类型 --------- Co-authored-by: SunQAQ <sunqi87c6@gmail.com>
This commit is contained in:
@@ -963,11 +963,19 @@ interface JsExtensions : JsEncodeUtils {
|
||||
return AppConst.androidId
|
||||
}
|
||||
|
||||
fun openUrl(url: String) {
|
||||
// 新增 mimeType 参数,默认为 null(保持兼容性)
|
||||
fun openUrl(url: String, mimeType: String? = null) {
|
||||
try {
|
||||
val intent = Intent(appCtx, ConfirmationDialogActivity::class.java).apply {
|
||||
data = Uri.parse(url)
|
||||
putExtra("sourceTag", getSource()?.getTag() ?: "") // 添加来源标签参数
|
||||
// 同时设置 Data 和 Type(避免单独设置 data/type 导致冲突)
|
||||
if (mimeType != null) {
|
||||
setDataAndType(Uri.parse(url), mimeType)
|
||||
} else {
|
||||
data = Uri.parse(url)
|
||||
}
|
||||
putExtra("sourceTag", getSource()?.getTag() ?: "")
|
||||
// 可选:添加 MIME 类型到 Extra 供后续逻辑使用
|
||||
putExtra("mimeType", mimeType)
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
}
|
||||
appCtx.startActivity(intent)
|
||||
@@ -976,4 +984,5 @@ interface JsExtensions : JsEncodeUtils {
|
||||
appCtx.toastOnUi("启动跳转确认失败")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package io.legado.app.ui.javascript
|
||||
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
@@ -12,22 +11,21 @@ import io.legado.app.constant.AppLog
|
||||
import io.legado.app.ui.widget.text.AccentTextView
|
||||
import io.legado.app.utils.toastOnUi
|
||||
|
||||
|
||||
class ConfirmationDialogActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
// 必须先设置布局再获取控件
|
||||
setContentView(R.layout.confirmation_dialog)
|
||||
|
||||
// 正确顺序:先设置布局再获取视图
|
||||
val messageView = findViewById<TextView>(R.id.message)
|
||||
val toolbar = findViewById<Toolbar>(R.id.toolbar)
|
||||
val toolbar = findViewById<Toolbar>(R.id.tool_bar)
|
||||
val btnNegative = findViewById<AccentTextView>(R.id.btn_negative)
|
||||
val btnPositive = findViewById<AccentTextView>(R.id.btn_positive)
|
||||
|
||||
val url = intent?.dataString
|
||||
if (url.isNullOrBlank()) {
|
||||
// 获取原始 Intent 的数据和 MIME 类型
|
||||
val uri = intent?.data
|
||||
val mimeType = intent?.getStringExtra("mimeType")
|
||||
if (uri == null) {
|
||||
finish()
|
||||
return
|
||||
}
|
||||
@@ -36,16 +34,27 @@ class ConfirmationDialogActivity : AppCompatActivity() {
|
||||
val sourceTag = intent.getStringExtra("sourceTag").takeIf { !it.isNullOrBlank() } ?: "当前来源"
|
||||
messageView.text = "$sourceTag 正在请求跳转外部链接/应用,是否跳转?"
|
||||
|
||||
// 设置其他组件
|
||||
toolbar.setNavigationOnClickListener { finish() }
|
||||
btnNegative.setOnClickListener { finish() }
|
||||
btnPositive.setOnClickListener {
|
||||
try {
|
||||
startActivity(
|
||||
Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
// 创建目标 Intent 并设置类型
|
||||
val targetIntent = Intent(Intent.ACTION_VIEW).apply {
|
||||
// 同时设置 Data 和 Type
|
||||
if (!mimeType.isNullOrBlank()) {
|
||||
setDataAndType(uri, mimeType)
|
||||
} else {
|
||||
data = uri
|
||||
}
|
||||
)
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
}
|
||||
|
||||
// 验证是否有应用可以处理
|
||||
if (targetIntent.resolveActivity(packageManager) != null) {
|
||||
startActivity(targetIntent)
|
||||
} else {
|
||||
toastOnUi(R.string.can_not_open)
|
||||
}
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
toastOnUi(R.string.can_not_open)
|
||||
} catch (e: Exception) {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:id="@+id/tool_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="?attr/actionBarStyle"
|
||||
@@ -28,7 +28,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="16dp"
|
||||
android:textSize="16sp"
|
||||
android:textAppearance="?attr/textAppearanceBodyMedium"/>
|
||||
android:textAppearance="?attr/textAppearanceBodyMedium"
|
||||
android:textColor="@color/primaryText" />
|
||||
|
||||
<com.google.android.flexbox.FlexboxLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
|
||||
<style name="ToolbarTitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
|
||||
<item name="android:textSize">20sp</item>
|
||||
<item name="android:textColor">@color/primaryText</item>
|
||||
</style>
|
||||
|
||||
//*******************Widget Style**********************************//
|
||||
|
||||
Reference in New Issue
Block a user