11package com.dergoogler.mmrl.webui.client
22
3+ import android.util.Log
4+ import android.webkit.ConsoleMessage
35import android.webkit.JsPromptResult
46import android.webkit.JsResult
7+ import android.webkit.PermissionRequest
58import android.webkit.WebChromeClient
69import android.webkit.WebView
710import com.dergoogler.mmrl.ui.component.dialog.ConfirmData
@@ -10,9 +13,6 @@ import com.dergoogler.mmrl.ui.component.dialog.confirm
1013import com.dergoogler.mmrl.ui.component.dialog.prompt
1114import com.dergoogler.mmrl.webui.R
1215import com.dergoogler.mmrl.webui.util.WebUIOptions
13- import kotlin.contracts.ExperimentalContracts
14- import kotlin.contracts.InvocationKind
15- import kotlin.contracts.contract
1616
1717open class WXChromeClient (
1818 private val options : WebUIOptions ,
@@ -21,26 +21,12 @@ open class WXChromeClient(
2121 const val TAG = " WXChromeClient"
2222 }
2323
24- @OptIn(ExperimentalContracts ::class )
25- private inline fun options (
26- result : JsResult ,
27- options : WebUIOptions ,
28- block : WebUIOptions .() -> Unit ,
29- ): Boolean {
30- contract {
31- callsInPlace(block, InvocationKind .AT_MOST_ONCE )
32- }
33-
34- block(options)
35- return true
36- }
37-
3824 override fun onJsAlert (
3925 view : WebView ? ,
4026 url : String ,
4127 message : String ,
4228 result : JsResult ,
43- ): Boolean = options(result, options) {
29+ ): Boolean = options {
4430 context.confirm(
4531 confirmData = ConfirmData (
4632 title = context.getString(R .string.says, modId.id),
@@ -50,14 +36,16 @@ open class WXChromeClient(
5036 ),
5137 colorScheme = colorScheme
5238 )
39+
40+ true
5341 }
5442
5543 override fun onJsConfirm (
5644 view : WebView ,
5745 url : String ,
5846 message : String ,
5947 result : JsResult ,
60- ): Boolean = options(result, options) {
48+ ): Boolean = options {
6149 context.confirm(
6250 confirmData = ConfirmData (
6351 title = context.getString(R .string.says, modId.id),
@@ -67,6 +55,8 @@ open class WXChromeClient(
6755 ),
6856 colorScheme = colorScheme
6957 )
58+
59+ true
7060 }
7161
7262 override fun onJsPrompt (
@@ -75,7 +65,7 @@ open class WXChromeClient(
7565 message : String? ,
7666 defaultValue : String? ,
7767 result : JsPromptResult ,
78- ): Boolean = options(result, options) {
68+ ): Boolean = options {
7969 context.prompt(
8070 promptData = PromptData (
8171 title = message ? : context.getString(R .string.says, modId.id),
@@ -85,6 +75,49 @@ open class WXChromeClient(
8575 ),
8676 colorScheme = colorScheme
8777 )
78+
79+ true
80+ }
81+
82+ override fun onPermissionRequest (request : PermissionRequest ) = options {
83+ val perms = config.permissions
84+ val filteredPermissions = perms.mapNotNull {
85+ if (Regex (" ^android\\ .webkit\\ .resource\\ .([A-Z_]+)$" ).matches(it)) {
86+ return @mapNotNull it
87+ } else null
88+ }.toTypedArray()
89+
90+ if (filteredPermissions.isEmpty()) return @options
91+
92+ val p = filteredPermissions.joinToString(" " ) { " \n - $it " }
93+
94+ context.confirm(
95+ confirmData = ConfirmData (
96+ title = context.getString(R .string.says, modId.id),
97+ description = " Requesting permissions: $p " ,
98+ onConfirm = { request.grant(filteredPermissions) },
99+ onClose = { request.deny() }
100+ ),
101+ colorScheme = colorScheme
102+ )
103+ }
104+
105+ override fun onConsoleMessage (consoleMessage : ConsoleMessage ): Boolean {
106+ val message = """
107+ ${consoleMessage.message()}
108+ Source: ${consoleMessage.sourceId()}
109+ Line: ${consoleMessage.lineNumber()}
110+ Level: ${consoleMessage.messageLevel()}
111+ """ .trimIndent()
112+
113+ when (consoleMessage.messageLevel()) {
114+ ConsoleMessage .MessageLevel .TIP -> Log .i(TAG , message)
115+ ConsoleMessage .MessageLevel .LOG -> Log .d(TAG , message)
116+ ConsoleMessage .MessageLevel .WARNING -> Log .w(TAG , message)
117+ ConsoleMessage .MessageLevel .ERROR -> Log .e(TAG , message)
118+ else -> Log .v(TAG , message)
119+ }
120+ return true
88121 }
89122}
90123
0 commit comments