kotovalexarian
/
android
Archived
1
0
Fork 0
This repository has been archived on 2023-08-15. You can view files and clone it, but cannot push or open issues or pull requests.
android/app/src/main/java/com/causa_arcana/CustomWebViewClient.kt

59 lines
2.0 KiB
Kotlin

package com.causa_arcana
import android.content.Context
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebView
import android.webkit.WebViewClient
class CustomWebViewClient(private val context: Context) : WebViewClient() {
companion object {
private const val HOST = "causa-arcana.com"
private const val SCHEME = "https"
private const val NO_PORT = -1
private const val PORT = 443
}
override fun shouldInterceptRequest(
view: WebView?,
request: WebResourceRequest,
): WebResourceResponse? {
if (!relatedHost(request)) return super.shouldInterceptRequest(view, request)
if (!validComponents(request)) return teapotResponse()
return when (request.url.path) {
"/assets/images/blog/decentralized-vs-distributed-wrong.png" ->
assetResponse("image/png",
"decentralized-vs-distributed-wrong.png")
"/assets/images/blog/network-topologies.png" ->
assetResponse("image/png", "network-topologies.png")
else -> teapotResponse()
}
}
private fun relatedHost(request: WebResourceRequest): Boolean {
return request.url.host?.lowercase() == HOST
}
private fun validComponents(request: WebResourceRequest): Boolean {
return request.url.scheme?.lowercase() == SCHEME &&
request.url.userInfo == null &&
(request.url.port == NO_PORT || request.url.port == PORT) &&
request.url.query == null &&
request.url.fragment == null
}
private fun teapotResponse(): WebResourceResponse {
return WebResourceResponse(
"text/plain", "utf-8", 418, "I'm a teapot",
null, null,
)
}
private fun assetResponse(mimeType: String, assetFileName: String):
WebResourceResponse {
return WebResourceResponse(mimeType, "utf-8", context.assets.open(assetFileName))
}
}