Compose WebView Part 5 | Should Override URL Loading

Should Override URL Loading :  Public Boolean shoulderoverrideurloading (WebView, string Url) is a method defined in the WebViewClient class. We can override the logic in WebView when the return value is true, and call the system browser or third-party browser when it is false. 

We are going to redirect Facebook to Instagram site in this web view example using override shoulderoverrideurloading method

WebView With Jetpack Compose in Android Studio | Kotlin | Jetpack Compose | Android Tutorials


 webViewClient = object : WebViewClient() {
                @Deprecated("Deprecated in Java")
                override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                    if (url.contains("facebook.com")) {
                         mutableStateTrigger.value = true
                         Toast.makeText(context, "Custom Action", Toast.LENGTH_SHORT).show()
                        return true
                    }
                    else{
                        view.loadUrl(url)
                    }
                    return false
                }
            }

..

Full source code:

package com.blogspot.boltuix

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.viewinterop.AndroidView

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            WebViewPage("https://www.boltuix.com/")
        }
    }
}

@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebViewPage(url: String){
    val mutableStateTrigger = remember { mutableStateOf(false) }

    // Adding a WebView inside AndroidView
    // with layout as full screen
    AndroidView(factory = {
        WebView(it).apply {
            layoutParams = ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
            )
            webViewClient = WebViewClient()

            // to play video on a web view
            settings.javaScriptEnabled = true

            webViewClient = object : WebViewClient() {
               
                @Deprecated("Deprecated in Java")
                override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
                    if (url.contains("facebook.com")) {
                        mutableStateTrigger.value = true
                        Toast.makeText(context, "Custom Action", Toast.LENGTH_SHORT).show()
                        return true
                    }
                    return false
                }
            }


            loadUrl(url)


        }
    }, update = {
        it.loadUrl(url)
    })


    if (mutableStateTrigger.value) {
        WebViewPage("https://www.instagram.com/boltuix/")
    }
}

..

GET source code on Github:

..

Comments