package com.google.recaptcha.sample import android.content.Context import android.os.Bundle import android.webkit.WebSettings import android.webkit.WebView import android.webkit.WebViewClient const val JS_OBJECT_NAME: String = "RecaptchaJavascriptChannel" class RecaptchaWebView(private val webView: WebView, private val arguments: Bundle) { companion object { const val SITE_KEY = "SITE_KEY" const val BASE_URL = "BASE_URL" const val LANG = "LANG" } init { configWebView(webView) webView.webViewClient = WebViewClient() } private fun configWebView(view: WebView) { WebView.setWebContentsDebuggingEnabled(true) val webSettings = view.getSettings() webSettings.javaScriptEnabled = true webSettings.useWideViewPort = true webSettings.setSupportZoom(false) webSettings.displayZoomControls = false webSettings.cacheMode = WebSettings.LOAD_NO_CACHE } fun start(listener: RecaptchaListener, context: Context) { webView.addJavascriptInterface(RecaptchaJavascriptChannel(listener), JS_OBJECT_NAME) val siteKey = arguments.getString(SITE_KEY) val baseUrl = arguments.getString(BASE_URL) val lang = arguments.getString(LANG) val htmlTemplate = context.assets.open("rce.html").bufferedReader().use { it.readText() } val html = htmlTemplate .replace("__SITE_KEY__", siteKey ?: "NO_SITEKEY") .replace("__LANG__", "&hl=$lang" ?: "") .replace("__JS_OBJECT_NAME__", JS_OBJECT_NAME) webView.loadDataWithBaseURL(baseUrl, html, "text/html", "UTF-8", null) } }