redirect on click url in WebView

This commit is contained in:
sousnein 2021-06-09 20:12:05 +03:00
parent 9af88e8700
commit 81d9bf1b73
3 changed files with 13 additions and 22 deletions

View File

@ -11,7 +11,6 @@ import android.webkit.ConsoleMessage
import android.webkit.WebView
import androidx.core.content.withStyledAttributes
import androidx.core.widget.TextViewCompat
import ru.touchin.extensions.openBrowser
import ru.touchin.extensions.setOnRippleClickListener
import ru.touchin.roboswag.views.widget.Switcher
import ru.touchin.roboswag.webview.R
@ -43,7 +42,7 @@ open class BaseWebView @JvmOverloads constructor(
}
var isRedirectEnable = false
var onRedirectInsideWebView: ((String) -> Unit)? = null
var openBrowserOnRedirectInsideWebView: Boolean = true
init {
binding.pullToRefresh.isEnabled = isPullToRefreshEnable
@ -107,9 +106,7 @@ open class BaseWebView @JvmOverloads constructor(
onCookieLoaded?.invoke(cookies)
}
override fun onInsideWebViewRedirect(url: String?) {
onRedirectInsideWebView
}
override fun openBrowserOnInsideWebViewRedirect(url: String?):Boolean = openBrowserOnRedirectInsideWebView
fun setBaseWebViewClient(isSSlPinningEnable: Boolean = false) {
binding.webView.webViewClient = BaseWebViewClient(this, isSSlPinningEnable)

View File

@ -1,17 +1,10 @@
package ru.touchin.roboswag.webview.web_view
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.net.http.SslError
import android.os.Handler
import android.os.Looper
import android.webkit.CookieManager
import android.webkit.SslErrorHandler
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.webkit.WebViewClient
import android.webkit.*
import androidx.core.os.postDelayed
import ru.touchin.extensions.openBrowser
@ -58,8 +51,11 @@ open class BaseWebViewClient(private val callback: WebViewCallback, private val
}
override fun shouldOverrideUrlLoading(view: WebView, url: String?): Boolean {
callback.onInsideWebViewRedirect(url)
return !callback.onOverrideUrlLoading(url) && view.originalUrl != null
if (callback.openBrowserOnInsideWebViewRedirect(url)) {
url?.let { view.context.openBrowser(it) }
}
return !callback.onOverrideUrlLoading(url) && view.originalUrl != null && callback.openBrowserOnInsideWebViewRedirect(url)
}
override fun onReceivedSslError(view: WebView, handler: SslErrorHandler, error: SslError) {
@ -86,10 +82,10 @@ open class BaseWebViewClient(private val callback: WebViewCallback, private val
private fun String?.processCookies(): Map<String, String> {
val cookiesMap = mutableMapOf<String, String>()
this?.split(";")
?.forEach { cookie ->
val splittedCookie = cookie.trim().split("=")
cookiesMap[splittedCookie.first()] = splittedCookie.last()
}
?.forEach { cookie ->
val splittedCookie = cookie.trim().split("=")
cookiesMap[splittedCookie.first()] = splittedCookie.last()
}
return cookiesMap
}

View File

@ -1,7 +1,5 @@
package ru.touchin.roboswag.webview.web_view
import androidx.annotation.StringRes
interface WebViewCallback {
fun onStateChanged(newState: WebViewLoadingState)
@ -10,6 +8,6 @@ interface WebViewCallback {
fun onPageCookiesLoaded(cookies: Map<String, String>?)
fun onInsideWebViewRedirect(url:String?)
fun openBrowserOnInsideWebViewRedirect(url: String?): Boolean
}