add callback action on url click inside webView
This commit is contained in:
parent
81d9bf1b73
commit
b86611d33c
|
|
@ -42,7 +42,11 @@ open class BaseWebView @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
var isRedirectEnable = false
|
var isRedirectEnable = false
|
||||||
var openBrowserOnRedirectInsideWebView: Boolean = true
|
|
||||||
|
/**
|
||||||
|
* If you need to do some action on url click inside WebView, just assign this parameter.
|
||||||
|
**/
|
||||||
|
var openBrowserOnRedirectInsideWebView: ((String?, WebView) -> Unit)? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
binding.pullToRefresh.isEnabled = isPullToRefreshEnable
|
binding.pullToRefresh.isEnabled = isPullToRefreshEnable
|
||||||
|
|
@ -106,7 +110,7 @@ open class BaseWebView @JvmOverloads constructor(
|
||||||
onCookieLoaded?.invoke(cookies)
|
onCookieLoaded?.invoke(cookies)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun openBrowserOnInsideWebViewRedirect(url: String?):Boolean = openBrowserOnRedirectInsideWebView
|
override fun actionOnRedirectInsideWebView(webView: WebView, url: String?): Unit? = openBrowserOnRedirectInsideWebView?.invoke(url, webView)
|
||||||
|
|
||||||
fun setBaseWebViewClient(isSSlPinningEnable: Boolean = false) {
|
fun setBaseWebViewClient(isSSlPinningEnable: Boolean = false) {
|
||||||
binding.webView.webViewClient = BaseWebViewClient(this, isSSlPinningEnable)
|
binding.webView.webViewClient = BaseWebViewClient(this, isSSlPinningEnable)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.webkit.*
|
import android.webkit.*
|
||||||
import androidx.core.os.postDelayed
|
import androidx.core.os.postDelayed
|
||||||
import ru.touchin.extensions.openBrowser
|
|
||||||
|
|
||||||
open class BaseWebViewClient(private val callback: WebViewCallback, private val isSslPinningEnable: Boolean) : WebViewClient() {
|
open class BaseWebViewClient(private val callback: WebViewCallback, private val isSslPinningEnable: Boolean) : WebViewClient() {
|
||||||
|
|
||||||
|
|
@ -51,11 +50,10 @@ open class BaseWebViewClient(private val callback: WebViewCallback, private val
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun shouldOverrideUrlLoading(view: WebView, url: String?): Boolean {
|
override fun shouldOverrideUrlLoading(view: WebView, url: String?): Boolean {
|
||||||
if (callback.openBrowserOnInsideWebViewRedirect(url)) {
|
|
||||||
url?.let { view.context.openBrowser(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
return !callback.onOverrideUrlLoading(url) && view.originalUrl != null && callback.openBrowserOnInsideWebViewRedirect(url)
|
return !callback.onOverrideUrlLoading(url)
|
||||||
|
&& view.originalUrl != null
|
||||||
|
&& callback.actionOnRedirectInsideWebView(webView = view, url = url) != null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onReceivedSslError(view: WebView, handler: SslErrorHandler, error: SslError) {
|
override fun onReceivedSslError(view: WebView, handler: SslErrorHandler, error: SslError) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package ru.touchin.roboswag.webview.web_view
|
package ru.touchin.roboswag.webview.web_view
|
||||||
|
|
||||||
|
import android.webkit.WebView
|
||||||
|
|
||||||
interface WebViewCallback {
|
interface WebViewCallback {
|
||||||
|
|
||||||
fun onStateChanged(newState: WebViewLoadingState)
|
fun onStateChanged(newState: WebViewLoadingState)
|
||||||
|
|
@ -8,6 +10,6 @@ interface WebViewCallback {
|
||||||
|
|
||||||
fun onPageCookiesLoaded(cookies: Map<String, String>?)
|
fun onPageCookiesLoaded(cookies: Map<String, String>?)
|
||||||
|
|
||||||
fun openBrowserOnInsideWebViewRedirect(url: String?): Boolean
|
fun actionOnRedirectInsideWebView(webView: WebView, url: String?): Unit?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue