package com.contentsquare.rn.webview import android.graphics.Bitmap import android.net.http.SslError import android.os.Build import android.os.Message import android.view.KeyEvent import android.webkit.ClientCertRequest import android.webkit.HttpAuthHandler import android.webkit.RenderProcessGoneDetail import android.webkit.SafeBrowsingResponse import android.webkit.SslErrorHandler import android.webkit.WebResourceError import android.webkit.WebResourceRequest import android.webkit.WebResourceResponse import android.webkit.WebView import android.webkit.WebViewClient import androidx.annotation.RequiresApi open class BridgeWebViewClient(private var rnWebViewClient: WebViewClient) : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { super.shouldOverrideUrlLoading(view, url) return rnWebViewClient.shouldOverrideUrlLoading(view, url) } @RequiresApi(Build.VERSION_CODES.N) override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { super.shouldOverrideUrlLoading(view, request) return rnWebViewClient.shouldOverrideUrlLoading(view, request) } override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { super.onPageStarted(view, url, favicon) rnWebViewClient.onPageStarted(view, url, favicon) } override fun onPageFinished(view: WebView?, url: String?) { super.onPageFinished(view, url) rnWebViewClient.onPageFinished(view, url) } override fun onLoadResource(view: WebView?, url: String?) { super.onLoadResource(view, url) rnWebViewClient.onLoadResource(view, url) } @RequiresApi(Build.VERSION_CODES.M) override fun onPageCommitVisible(view: WebView?, url: String?) { super.onPageCommitVisible(view, url) rnWebViewClient.onPageCommitVisible(view, url) } override fun shouldInterceptRequest(view: WebView?, url: String?): WebResourceResponse? { super.shouldInterceptRequest(view, url) return rnWebViewClient.shouldInterceptRequest(view, url) } @RequiresApi(Build.VERSION_CODES.LOLLIPOP) override fun shouldInterceptRequest( view: WebView?, request: WebResourceRequest? ): WebResourceResponse? { super.shouldInterceptRequest(view, request) return rnWebViewClient.shouldInterceptRequest(view, request) } override fun onTooManyRedirects(view: WebView?, cancelMsg: Message?, continueMsg: Message?) { super.onTooManyRedirects(view, cancelMsg, continueMsg) rnWebViewClient.onTooManyRedirects(view, cancelMsg, continueMsg) } override fun onReceivedError( view: WebView?, errorCode: Int, description: String?, failingUrl: String? ) { super.onReceivedError(view, errorCode, description, failingUrl) rnWebViewClient.onReceivedError(view, errorCode, description, failingUrl) } @RequiresApi(Build.VERSION_CODES.M) override fun onReceivedError( view: WebView?, request: WebResourceRequest?, error: WebResourceError? ) { super.onReceivedError(view, request, error) rnWebViewClient.onReceivedError(view, request, error) } @RequiresApi(Build.VERSION_CODES.M) override fun onReceivedHttpError( view: WebView?, request: WebResourceRequest?, errorResponse: WebResourceResponse? ) { super.onReceivedHttpError(view, request, errorResponse) rnWebViewClient.onReceivedHttpError(view, request, errorResponse) } override fun onFormResubmission(view: WebView?, dontResend: Message?, resend: Message?) { super.onFormResubmission(view, dontResend, resend) rnWebViewClient.onFormResubmission(view, dontResend, resend) } override fun doUpdateVisitedHistory(view: WebView?, url: String?, isReload: Boolean) { super.doUpdateVisitedHistory(view, url, isReload) rnWebViewClient.doUpdateVisitedHistory(view, url, isReload) } override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) { rnWebViewClient.onReceivedSslError(view, handler, error) } @RequiresApi(Build.VERSION_CODES.LOLLIPOP) override fun onReceivedClientCertRequest(view: WebView?, request: ClientCertRequest?) { rnWebViewClient.onReceivedClientCertRequest(view, request) } override fun onReceivedHttpAuthRequest( view: WebView?, handler: HttpAuthHandler?, host: String?, realm: String? ) { rnWebViewClient.onReceivedHttpAuthRequest(view, handler, host, realm) } override fun shouldOverrideKeyEvent(view: WebView?, event: KeyEvent?): Boolean { super.shouldOverrideKeyEvent(view, event) return rnWebViewClient.shouldOverrideKeyEvent(view, event) } override fun onUnhandledKeyEvent(view: WebView?, event: KeyEvent?) { super.onUnhandledKeyEvent(view, event) rnWebViewClient.onUnhandledKeyEvent(view, event) } override fun onScaleChanged(view: WebView?, oldScale: Float, newScale: Float) { super.onScaleChanged(view, oldScale, newScale) rnWebViewClient.onScaleChanged(view, oldScale, newScale) } override fun onReceivedLoginRequest( view: WebView?, realm: String?, account: String?, args: String? ) { super.onReceivedLoginRequest(view, realm, account, args) rnWebViewClient.onReceivedLoginRequest(view, realm, account, args) } @RequiresApi(Build.VERSION_CODES.O) override fun onRenderProcessGone(view: WebView?, detail: RenderProcessGoneDetail?): Boolean { super.onRenderProcessGone(view, detail) return rnWebViewClient.onRenderProcessGone(view, detail) } @RequiresApi(Build.VERSION_CODES.O_MR1) override fun onSafeBrowsingHit( view: WebView?, request: WebResourceRequest?, threatType: Int, callback: SafeBrowsingResponse? ) { super.onSafeBrowsingHit(view, request, threatType, callback) rnWebViewClient.onSafeBrowsingHit(view, request, threatType, callback) } }