Compose WebView Part 9 | Removes or Stop Ad in web

A WebView that can block basic ads. Very Easy to setup for Android Projects. No 3rd party plugin is required. Android web view code is basically stop the ads and remove the html from it and render it again.

Removes or Stop Ad in web view with Jetpack Compose in Android Studio | Kotlin | Jetpack Compose | Android Tutorials

Let us try Compose webview adblock example

  • You need to add adblockserverlist.txt in raw folder
  • You simply override the shouldInterceptRequest(WebView view, String url) method of your WebViewClient.
  • Now we are going to check ads host name into our website, if it has ads means simply return empty value

package com.blogspot.boltuix

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.ViewGroup
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.viewinterop.AndroidView
import java.io.BufferedReader
import java.io.ByteArrayInputStream
import java.io.IOException
import java.io.InputStreamReader

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 context  = LocalContext.current

    //.................................................
    // Compose WebView Part 9 | Removes or Stop Ad in web
    val adServers = StringBuilder()
    var line: String? = ""
    val inputStream = context.resources.openRawResource(R.raw.adblockserverlist)
    val br = BufferedReader(InputStreamReader(inputStream))
    try {
        while (br.readLine().also { line = it } != null) {
            adServers.append(line)
            adServers.append("\n")
        }
    } catch (e: IOException) {
        e.printStackTrace()
    }


    // 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()

                // enable JS
                settings.javaScriptEnabled = true

                webViewClient = object : WebViewClient() {

                    override fun shouldInterceptRequest(view: WebView, request: WebResourceRequest): WebResourceResponse? {
                        val empty = ByteArrayInputStream("".toByteArray())
                        val kk5 = adServers.toString()
                        if (kk5.contains(":::::" + request.url.host))
                            return WebResourceResponse("text/plain", "utf-8", empty)
                        return super.shouldInterceptRequest(view, request)
                    }
                }

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

..

GET source code on Github:

..

Comments