diff --git a/app/src/main/java/to/dev/dev_android/util/AndroidWebViewBridge.kt b/app/src/main/java/to/dev/dev_android/util/AndroidWebViewBridge.kt index a5f45c8..804c830 100644 --- a/app/src/main/java/to/dev/dev_android/util/AndroidWebViewBridge.kt +++ b/app/src/main/java/to/dev/dev_android/util/AndroidWebViewBridge.kt @@ -1,5 +1,8 @@ package to.dev.dev_android.util +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context import android.util.Log import android.webkit.JavascriptInterface @@ -7,7 +10,8 @@ import android.webkit.JavascriptInterface * This class currently is empty because more methods would be added to it * when new bridge functionalities are added. */ -class AndroidWebViewBridge { +class AndroidWebViewBridge(private val mContext: Context) { + /** * Every method that has to be accessed from web-view needs to be marked with * `@JavascriptInterface`. @@ -17,4 +21,11 @@ class AndroidWebViewBridge { fun logError(errorTag: String, errorMessage: String) { Log.e(errorTag, errorMessage) } + + @JavascriptInterface + fun copyToClipboard(text: String) { + val clipboard = mContext.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager + val clip = ClipData.newPlainText("clipboard", text) + clipboard?.primaryClip = clip + } } diff --git a/app/src/main/java/to/dev/dev_android/view/main/view/MainActivity.kt b/app/src/main/java/to/dev/dev_android/view/main/view/MainActivity.kt index 50743e8..2da57f5 100644 --- a/app/src/main/java/to/dev/dev_android/view/main/view/MainActivity.kt +++ b/app/src/main/java/to/dev/dev_android/view/main/view/MainActivity.kt @@ -4,9 +4,11 @@ import android.annotation.SuppressLint import android.app.Activity import android.content.Intent import android.net.Uri +import android.os.Build import android.os.Bundle import android.view.View import android.webkit.ValueCallback +import android.webkit.WebView import to.dev.dev_android.R import to.dev.dev_android.base.BuildConfig import to.dev.dev_android.base.activity.BaseActivity @@ -14,7 +16,7 @@ import to.dev.dev_android.databinding.ActivityMainBinding import to.dev.dev_android.util.AndroidWebViewBridge class MainActivity : BaseActivity(), CustomWebChromeClient.CustomListener { - private val webViewBridge: AndroidWebViewBridge = AndroidWebViewBridge() + private val webViewBridge: AndroidWebViewBridge = AndroidWebViewBridge(this) private var filePathCallback: ValueCallback>? = null @@ -48,9 +50,15 @@ class MainActivity : BaseActivity(), CustomWebChromeClient. @SuppressLint("SetJavaScriptEnabled") private fun setWebViewSettings() { + if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + WebView.setWebContentsDebuggingEnabled(true) + } + binding.webView.settings.javaScriptEnabled = true binding.webView.settings.domStorageEnabled = true - binding.webView.addJavascriptInterface(webViewBridge, "androidWebViewBridge") + binding.webView.settings.userAgentString = BuildConfig.userAgent + + binding.webView.addJavascriptInterface(webViewBridge, "AndroidBridge") binding.webView.webViewClient = CustomWebViewClient(this@MainActivity) { binding.splash.visibility = View.GONE } diff --git a/buildSrc/src/main/kotlin/Android.kt b/buildSrc/src/main/kotlin/Android.kt index 9c215da..102f5b4 100644 --- a/buildSrc/src/main/kotlin/Android.kt +++ b/buildSrc/src/main/kotlin/Android.kt @@ -40,6 +40,8 @@ fun Project.configureBuildConfig(android: BaseExtension) { android.buildTypes.all { resValue("string", "baseUrl", extra.string("chrome.baseUrl")) buildConfigString("baseUrl", extra.string("chrome.baseUrl")) + resValue("string", "userAgent", extra.string("chrome.userAgent")) + buildConfigString("userAgent", extra.string("chrome.userAgent")) } } diff --git a/gradle.properties b/gradle.properties index 8e04b77..9bc0acd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,8 @@ ## dev.to configurations chrome.baseUrl=https://dev.to/ +chrome.userAgent=DEV-Native-android + +# Android release configurations android.targetSdkVersion=28 android.compileSdkVersion=28 android.minSdkVersion=18