Fix calls on Huawei devices: skip addWebMessageListener on Chromium < 119 (#6640)
* Fix calls on Huawei: skip addWebMessageListener on Chromium < 119 * Fix lint issues, log webview version --------- Co-authored-by: manfrommedan <manfrommedan@users.noreply.github.com> Co-authored-by: Jorge Martín <jorgem@element.io>
This commit is contained in:
parent
610b42c546
commit
d6e1afd8b3
1 changed files with 21 additions and 14 deletions
|
|
@ -140,26 +140,33 @@ class WebViewWidgetMessageInterceptor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a WebMessageListener, which will receive messages from the WebView and reply to them
|
// Always register JavascriptInterface as the baseline message channel.
|
||||||
val webMessageListener = WebViewCompat.WebMessageListener { _, message, _, _, _ ->
|
// This works on all WebView implementations including Huawei.
|
||||||
onMessageReceived(message.data)
|
webView.addJavascriptInterface(object {
|
||||||
}
|
@JavascriptInterface
|
||||||
|
fun postMessage(json: String?) {
|
||||||
|
onMessageReceived(json)
|
||||||
|
}
|
||||||
|
}, LISTENER_NAME)
|
||||||
|
|
||||||
// Use WebMessageListener if supported, otherwise use JavascriptInterface
|
// Additionally register WebMessageListener on WebViews that reliably support it.
|
||||||
if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_MESSAGE_LISTENER)) {
|
// Huawei WebView (Chromium < 119) reports WEB_MESSAGE_LISTENER as supported
|
||||||
|
// but silently drops messages, so we only trust it on Chromium 119+.
|
||||||
|
// See: https://github.com/element-hq/element-x-android/issues/6632
|
||||||
|
val webViewVersionName = WebViewCompat.getCurrentWebViewPackage(webView.context)?.versionName.orEmpty()
|
||||||
|
Timber.d("Using WebView version: $webViewVersionName")
|
||||||
|
val webViewVersionCode = webViewVersionName.split(".").firstOrNull()?.toIntOrNull() ?: 0
|
||||||
|
|
||||||
|
if (webViewVersionCode >= 119 &&
|
||||||
|
WebViewFeature.isFeatureSupported(WebViewFeature.WEB_MESSAGE_LISTENER)) {
|
||||||
WebViewCompat.addWebMessageListener(
|
WebViewCompat.addWebMessageListener(
|
||||||
webView,
|
webView,
|
||||||
LISTENER_NAME,
|
LISTENER_NAME,
|
||||||
setOf("*"),
|
setOf("*"),
|
||||||
webMessageListener
|
WebViewCompat.WebMessageListener { _, message, _, _, _ ->
|
||||||
)
|
onMessageReceived(message.data)
|
||||||
} else {
|
|
||||||
webView.addJavascriptInterface(object {
|
|
||||||
@JavascriptInterface
|
|
||||||
fun postMessage(json: String?) {
|
|
||||||
onMessageReceived(json)
|
|
||||||
}
|
}
|
||||||
}, LISTENER_NAME)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue