mirror of
https://github.com/jellyfin/jellyfin-android.git
synced 2026-10-31 19:21:58 +01:00
@@ -72,6 +72,7 @@ private fun WebView.getDefaultUserAgentString(): String {
|
||||
fun WebSettings.applyDefault() {
|
||||
javaScriptEnabled = true
|
||||
domStorageEnabled = true
|
||||
setSupportMultipleWindows(true)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
package org.jellyfin.mobile.webapp
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Message
|
||||
import android.util.Log
|
||||
import android.webkit.ConsoleMessage
|
||||
import android.webkit.ValueCallback
|
||||
import android.webkit.WebChromeClient
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebView
|
||||
import androidx.core.net.toUri
|
||||
import androidx.webkit.WebViewClientCompat
|
||||
import timber.log.Timber
|
||||
|
||||
class JellyfinWebChromeClient(
|
||||
@@ -32,6 +37,35 @@ class JellyfinWebChromeClient(
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onCreateWindow(view: WebView, isDialog: Boolean, isUserGesture: Boolean, resultMsg: Message): Boolean {
|
||||
val transport = resultMsg.obj as? WebView.WebViewTransport ?: return false
|
||||
|
||||
val windowWebView = WebView(view.context)
|
||||
windowWebView.webViewClient = object : WebViewClientCompat() {
|
||||
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
|
||||
return openExternalUrl(view.context, request.url.toString())
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Android")
|
||||
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
|
||||
return openExternalUrl(view.context, url)
|
||||
}
|
||||
}
|
||||
transport.webView = windowWebView
|
||||
resultMsg.sendToTarget()
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
private fun openExternalUrl(context: Context, url: String): Boolean {
|
||||
// Some web views can try to open empty popups, we cannot infer an URL from those easily so ignore them
|
||||
if (url == "about:blank") return false
|
||||
|
||||
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
|
||||
context.startActivity(intent)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onShowFileChooser(
|
||||
webView: WebView,
|
||||
filePathCallback: ValueCallback<Array<Uri>>,
|
||||
|
||||
Reference in New Issue
Block a user