From a5c5c284253fab6f93cc9c9a15893f974c3b17a8 Mon Sep 17 00:00:00 2001 From: "844143714@qq,com" <844143714@qq,com> Date: Thu, 30 Apr 2026 02:04:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=89=8D=E7=AB=AF=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E5=A4=B1=E6=95=88=EF=BC=9A=E5=AE=8C=E5=96=84=20Prompt?= =?UTF-8?q?Delegate=20=E5=A4=84=E7=90=86=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=97=A5=E5=BF=97=E9=98=B2=E6=8A=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/print_demo.html | 8 +++ .../java/com/stand/standapp/MainActivity.kt | 68 ++++++++++++++++++- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/app/src/main/assets/print_demo.html b/app/src/main/assets/print_demo.html index 39016e4..22439f3 100644 --- a/app/src/main/assets/print_demo.html +++ b/app/src/main/assets/print_demo.html @@ -418,9 +418,17 @@ } } + var lastUploadTime = 0; // 上传日志 function callUploadLogs() { + var now = Date.now(); + if (now - lastUploadTime < 30000) { + alert("请勿频繁上传,请半分钟后再试"); + return; + } if (window.android && window.android.uploadLogs) { + lastUploadTime = now; + alert("开始上传日志..."); window.android.uploadLogs(); } else { alert("上传日志接口不可用"); diff --git a/app/src/main/java/com/stand/standapp/MainActivity.kt b/app/src/main/java/com/stand/standapp/MainActivity.kt index 3de114e..90ba1bc 100644 --- a/app/src/main/java/com/stand/standapp/MainActivity.kt +++ b/app/src/main/java/com/stand/standapp/MainActivity.kt @@ -231,17 +231,81 @@ class MainActivity : AppCompatActivity() { val result = handleBridgeCall(payload, prompt.defaultValue ?: "") return GeckoResult.fromValue(prompt.confirm(result)) } + // 默认处理(显示对话框) - return null + val res = GeckoResult() + runOnUiThread { + val input = android.widget.EditText(this@MainActivity) + input.setText(prompt.defaultValue) + androidx.appcompat.app.AlertDialog.Builder(this@MainActivity) + .setTitle(prompt.title ?: "") + .setMessage(prompt.message) + .setView(input) + .setPositiveButton("确定") { _, _ -> res.complete(prompt.confirm(input.text.toString())) } + .setNegativeButton("取消") { _, _ -> res.complete(prompt.dismiss()) } + .setOnCancelListener { res.complete(prompt.dismiss()) } + .show() + } + return res } override fun onAlertPrompt( session: GeckoSession, prompt: GeckoSession.PromptDelegate.AlertPrompt ): GeckoResult? { - Timber.tag("WebConsole").d("Alert: ${prompt.message}") + val res = GeckoResult() + runOnUiThread { + androidx.appcompat.app.AlertDialog.Builder(this@MainActivity) + .setMessage(prompt.message) + .setPositiveButton("确定") { _, _ -> res.complete(prompt.confirm()) } + .setOnCancelListener { res.complete(prompt.dismiss()) } + .show() + } + return res + } + + override fun onAuthPrompt( + session: GeckoSession, + prompt: GeckoSession.PromptDelegate.AuthPrompt + ): GeckoResult? { return null } + + override fun onChoicePrompt( + session: GeckoSession, + prompt: GeckoSession.PromptDelegate.ChoicePrompt + ): GeckoResult? { + val res = GeckoResult() + runOnUiThread { + val choices = prompt.choices.map { it.label }.toTypedArray() + androidx.appcompat.app.AlertDialog.Builder(this@MainActivity) + .setTitle(prompt.title) + .setSingleChoiceItems(choices, -1) { dialog, which -> + dialog.dismiss() + res.complete(prompt.confirm(prompt.choices[which])) + } + .setOnCancelListener { res.complete(prompt.dismiss()) } + .show() + } + return res + } + + override fun onButtonPrompt( + session: GeckoSession, + prompt: GeckoSession.PromptDelegate.ButtonPrompt + ): GeckoResult? { + val res = GeckoResult() + runOnUiThread { + androidx.appcompat.app.AlertDialog.Builder(this@MainActivity) + .setTitle(prompt.title ?: "提示") + .setMessage(prompt.message) + .setPositiveButton("确定") { _, _ -> res.complete(prompt.confirm(GeckoSession.PromptDelegate.ButtonPrompt.Type.POSITIVE)) } + .setNegativeButton("取消") { _, _ -> res.complete(prompt.dismiss()) } + .setOnCancelListener { res.complete(prompt.dismiss()) } + .show() + } + return res + } } }