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 + } } }