diff --git a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebView.kt b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebView.kt index 16be3d0..2f24bc2 100644 --- a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebView.kt +++ b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebView.kt @@ -42,7 +42,11 @@ open class BaseWebView @JvmOverloads constructor( } 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 { binding.pullToRefresh.isEnabled = isPullToRefreshEnable @@ -106,7 +110,7 @@ open class BaseWebView @JvmOverloads constructor( 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) { binding.webView.webViewClient = BaseWebViewClient(this, isSSlPinningEnable) diff --git a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebViewClient.kt b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebViewClient.kt index a91ce44..bd38cb0 100644 --- a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebViewClient.kt +++ b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/BaseWebViewClient.kt @@ -6,7 +6,6 @@ import android.os.Handler import android.os.Looper import android.webkit.* import androidx.core.os.postDelayed -import ru.touchin.extensions.openBrowser 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 { - 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) { diff --git a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewCallback.kt b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewCallback.kt index 7c7ad6e..a1d86ad 100644 --- a/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewCallback.kt +++ b/webview/src/main/java/ru/touchin/roboswag/webview/web_view/WebViewCallback.kt @@ -1,5 +1,7 @@ package ru.touchin.roboswag.webview.web_view +import android.webkit.WebView + interface WebViewCallback { fun onStateChanged(newState: WebViewLoadingState) @@ -8,6 +10,6 @@ interface WebViewCallback { fun onPageCookiesLoaded(cookies: Map?) - fun openBrowserOnInsideWebViewRedirect(url: String?): Boolean + fun actionOnRedirectInsideWebView(webView: WebView, url: String?): Unit? }