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 full source code on Github:
https://github.com/BoltUIX/Compose-Web-View
Comments
Post a Comment