From 097ac241b8b1330815b7c72fb5f52348947493dc Mon Sep 17 00:00:00 2001 From: amirisback Date: Mon, 1 Sep 2025 16:44:04 +0700 Subject: [PATCH 1/2] update: libs and enhance --- .../java/com/frogobox/webview/ConfigApp.kt | 6 + .../com/frogobox/webview/common/ext/UrlExt.kt | 25 +++ .../frogobox/webview/common/ext/WebViewExt.kt | 105 +++++++++++ .../frogobox/webview/common/ext/WebviewExt.kt | 163 ------------------ .../frogobox/webview/ui/main/MainActivity.kt | 12 +- .../com/frogobox/webview/ui/util/Utils.kt | 75 ++++++++ build.gradle.kts | 1 - gradle/libs.versions.toml | 21 +-- 8 files changed, 221 insertions(+), 187 deletions(-) create mode 100644 app/src/main/java/com/frogobox/webview/common/ext/UrlExt.kt create mode 100644 app/src/main/java/com/frogobox/webview/common/ext/WebViewExt.kt delete mode 100644 app/src/main/java/com/frogobox/webview/common/ext/WebviewExt.kt create mode 100644 app/src/main/java/com/frogobox/webview/ui/util/Utils.kt diff --git a/app/src/main/java/com/frogobox/webview/ConfigApp.kt b/app/src/main/java/com/frogobox/webview/ConfigApp.kt index 8c0c4c9..e6f7cd5 100644 --- a/app/src/main/java/com/frogobox/webview/ConfigApp.kt +++ b/app/src/main/java/com/frogobox/webview/ConfigApp.kt @@ -1,5 +1,7 @@ package com.frogobox.webview +import com.frogobox.webview.ui.util.sampleHtmlText + /** * Created by Faisal Amir on 24/10/22 * ----------------------------------------- @@ -14,6 +16,10 @@ package com.frogobox.webview object ConfigApp { const val URL_LINK_WEBSITE = "https://github.com/amirisback" + const val URL_LINK_DATA = sampleHtmlText + + const val URL_WEB = URL_LINK_WEBSITE + object Flag { diff --git a/app/src/main/java/com/frogobox/webview/common/ext/UrlExt.kt b/app/src/main/java/com/frogobox/webview/common/ext/UrlExt.kt new file mode 100644 index 0000000..7301ff7 --- /dev/null +++ b/app/src/main/java/com/frogobox/webview/common/ext/UrlExt.kt @@ -0,0 +1,25 @@ +package com.frogobox.webview.common.ext + +import android.util.Patterns + +/** + * Created by faisalamircs on 01/09/2025 + * ----------------------------------------- + * Name : Muhammad Faisal Amir + * E-mail : faisalamircs@gmail.com + * Github : github.com/amirisback + * ----------------------------------------- + */ + + +fun String.validateUrl(): String { + return if (this.contains("http://") || this.contains("https://") || this.isValidUrl()) { + this + } else { + "https://$this" + } +} + +fun String.isValidUrl(): Boolean { + return Patterns.WEB_URL.matcher(this).matches() +} diff --git a/app/src/main/java/com/frogobox/webview/common/ext/WebViewExt.kt b/app/src/main/java/com/frogobox/webview/common/ext/WebViewExt.kt new file mode 100644 index 0000000..b59b544 --- /dev/null +++ b/app/src/main/java/com/frogobox/webview/common/ext/WebViewExt.kt @@ -0,0 +1,105 @@ +package com.frogobox.webview.common.ext + +import android.annotation.SuppressLint +import android.view.View +import android.webkit.CookieManager +import android.webkit.WebChromeClient +import android.webkit.WebResourceError +import android.webkit.WebResourceRequest +import android.webkit.WebSettings +import android.webkit.WebView +import android.webkit.WebViewClient +import com.frogobox.webview.common.callback.WebViewCallback + +/** + * Created by Faisal Amir on 24/10/22 + * ----------------------------------------- + * E-mail : faisalamircs@gmail.com + * Github : github.com/amirisback + * ----------------------------------------- + * Copyright (C) Frogobox ID / amirisback + * All rights reserved + */ + + +@SuppressLint("SetJavaScriptEnabled") +fun WebView.loadUrlExt( + url: String, + auth: HashMap? = null, + callback: WebViewCallback? = null, +) { + callback?.onShowProgress() + + if (url == "") { + callback?.onHideProgress() + callback?.onFailed() + } else { + + CookieManager.getInstance().setAcceptCookie(true) + CookieManager.getInstance().setAcceptThirdPartyCookies(this, true) + + apply { + + settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL + settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW + + settings.mediaPlaybackRequiresUserGesture = false + settings.loadsImagesAutomatically = true + settings.loadWithOverviewMode = true + + settings.useWideViewPort = true + settings.allowFileAccess = true + settings.allowContentAccess = true + + settings.javaScriptEnabled = true + settings.javaScriptCanOpenWindowsAutomatically = true + settings.domStorageEnabled = true + + settings.setSupportZoom(true) + settings.builtInZoomControls = true + settings.displayZoomControls = false + + scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY + + webChromeClient = WebChromeClient() + + webViewClient = object : WebViewClient() { + override fun onPageFinished(view: WebView?, url: String?) { + super.onPageFinished(view, url) + callback?.onHideProgress() + callback?.onFinish() + } + + override fun onReceivedError( + view: WebView?, + request: WebResourceRequest?, + error: WebResourceError?, + ) { + super.onReceivedError(view, request, error) + callback?.onHideProgress() + callback?.onFailed() + } + } + + } + + if (url.contains("") || url.contains("") || url.contains("")) { + loadDataWithBaseURL(null, url, "text/html", "utf-8", null) + } else { + val validUrl = url.validateUrl() + + if (!validUrl.isValidUrl()) { + callback?.onHideProgress() + callback?.onFailed() + } else { + auth?.let { + loadUrl(validUrl, it) + } ?: run { + loadUrl(validUrl) + } + } + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/frogobox/webview/common/ext/WebviewExt.kt b/app/src/main/java/com/frogobox/webview/common/ext/WebviewExt.kt deleted file mode 100644 index ef73611..0000000 --- a/app/src/main/java/com/frogobox/webview/common/ext/WebviewExt.kt +++ /dev/null @@ -1,163 +0,0 @@ -package com.frogobox.webview.common.ext - -import android.annotation.SuppressLint -import android.os.Build -import android.view.View -import android.webkit.* -import com.frogobox.webview.common.callback.WebViewCallback - -/** - * Created by Faisal Amir on 24/10/22 - * ----------------------------------------- - * E-mail : faisalamircs@gmail.com - * Github : github.com/amirisback - * ----------------------------------------- - * Copyright (C) Frogobox ID / amirisback - * All rights reserved - */ - -@SuppressLint("SetJavaScriptEnabled") -fun WebView.loadUrlExt(url: String, auth: HashMap, callback: WebViewCallback) { - callback.onShowProgress() - - if (!url.contains("http") || !url.contains("https")) { - callback.onHideProgress() - callback.onFailed() - } else { - - CookieManager.getInstance().setAcceptCookie(true) - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - CookieManager.getInstance().setAcceptThirdPartyCookies(this, true); - } - - apply { - - settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL - settings.mediaPlaybackRequiresUserGesture = false - settings.loadsImagesAutomatically = true - settings.loadWithOverviewMode = true - settings.javaScriptEnabled = true - settings.domStorageEnabled = true - settings.useWideViewPort = true - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW - } - - settings.setSupportZoom(true) - settings.builtInZoomControls = true - settings.displayZoomControls = false - - scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY - - webChromeClient = WebChromeClient() - - webViewClient = object : WebViewClient() { - override fun onPageFinished(view: WebView?, url: String?) { - super.onPageFinished(view, url) - callback.onHideProgress() - callback.onFinish() - } - - override fun onReceivedError( - view: WebView?, - request: WebResourceRequest?, - error: WebResourceError?, - ) { - super.onReceivedError(view, request, error) - callback.onHideProgress() - callback.onFailed() - } - } - - }.loadUrl(url, auth) - - } - -} - -@SuppressLint("SetJavaScriptEnabled") -fun WebView.loadUrlExt(url: String, callback: WebViewCallback) { - callback.onShowProgress() - - if (!url.contains("http") || !url.contains("https")) { - callback.onHideProgress() - callback.onFailed() - } else { - - CookieManager.getInstance().setAcceptCookie(true) - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - CookieManager.getInstance().setAcceptThirdPartyCookies(this, true) - } - - apply { - - settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL - settings.mediaPlaybackRequiresUserGesture = false - settings.loadsImagesAutomatically = true - settings.loadWithOverviewMode = true - settings.javaScriptEnabled = true - settings.domStorageEnabled = true - settings.useWideViewPort = true - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW - } - - settings.setSupportZoom(true) - settings.builtInZoomControls = true - settings.displayZoomControls = false - - scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY - - webChromeClient = WebChromeClient() - - webViewClient = object : WebViewClient() { - override fun onPageFinished(view: WebView?, url: String?) { - super.onPageFinished(view, url) - callback.onHideProgress() - callback.onFinish() - } - - override fun onReceivedError( - view: WebView?, - request: WebResourceRequest?, - error: WebResourceError?, - ) { - super.onReceivedError(view, request, error) - callback.onHideProgress() - callback.onFailed() - } - } - - }.loadUrl(url) - - } - -} - -@SuppressLint("SetJavaScriptEnabled") -fun WebView.loadUrlExt(url: String, auth: HashMap) { - - loadUrlExt(url, auth, object : WebViewCallback { - override fun onShowProgress() {} - override fun onHideProgress() {} - override fun onFinish() {} - override fun onFailed() {} - }) - -} - -@SuppressLint("SetJavaScriptEnabled") -fun WebView.loadUrlExt(url: String) { - - loadUrlExt(url, object : WebViewCallback { - override fun onShowProgress() {} - override fun onHideProgress() {} - override fun onFinish() {} - override fun onFailed() {} - }) - -} \ No newline at end of file diff --git a/app/src/main/java/com/frogobox/webview/ui/main/MainActivity.kt b/app/src/main/java/com/frogobox/webview/ui/main/MainActivity.kt index e1841a0..6abc883 100644 --- a/app/src/main/java/com/frogobox/webview/ui/main/MainActivity.kt +++ b/app/src/main/java/com/frogobox/webview/ui/main/MainActivity.kt @@ -7,7 +7,8 @@ import com.frogobox.sdk.ext.gone import com.frogobox.sdk.ext.startActivityExtOpenApp import com.frogobox.sdk.ext.visible import com.frogobox.webview.ConfigApp -import com.frogobox.webview.ConfigApp.URL_LINK_WEBSITE +import com.frogobox.webview.ConfigApp.URL_LINK_DATA +import com.frogobox.webview.ConfigApp.URL_WEB import com.frogobox.webview.common.callback.AdCallback import com.frogobox.webview.common.callback.WebViewCallback import com.frogobox.webview.common.core.BaseActivity @@ -32,7 +33,12 @@ class MainActivity : BaseActivity() { } override fun doOnBackPressedExt() { - showDialog() + if (binding.mainWebview.canGoBack()) { + binding.mainWebview.goBack() + } else { + showDialog() + } + } private fun setupFlagAd() { @@ -67,7 +73,7 @@ class MainActivity : BaseActivity() { private fun setupLoadWeb() { binding.apply { - mainWebview.loadUrlExt(URL_LINK_WEBSITE, object : WebViewCallback { + mainWebview.loadUrlExt(url = URL_WEB, callback = object : WebViewCallback { override fun onShowProgress() { containerProgressView.progressView.visible() diff --git a/app/src/main/java/com/frogobox/webview/ui/util/Utils.kt b/app/src/main/java/com/frogobox/webview/ui/util/Utils.kt new file mode 100644 index 0000000..0c9b141 --- /dev/null +++ b/app/src/main/java/com/frogobox/webview/ui/util/Utils.kt @@ -0,0 +1,75 @@ +package com.frogobox.webview.ui.util + +/** + * Created by faisalamircs on 01/09/2025 + * ----------------------------------------- + * Name : Muhammad Faisal Amir + * E-mail : faisalamircs@gmail.com + * Github : github.com/amirisback + * ----------------------------------------- + */ + + +const val sampleHtmlText = """ + + + + + Github Profile of amirisback + + + +
+ amirisback Avatar +
Github Profile of amirisback
+ View Github +
+ + +""" \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index fb1cab8..881affe 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application) apply false - alias(libs.plugins.android.library) apply false alias(libs.plugins.kotlin.android) apply false } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 82ff949..e44890f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,31 +1,12 @@ [versions] agp = "8.12.2" kotlin = "2.2.10" -coreKtx = "1.17.0" -junit = "4.13.2" -junitVersion = "1.3.0" -espressoCore = "3.7.0" -appcompat = "1.7.1" -material = "1.12.0" -activity = "1.10.1" -constraintlayout = "2.2.1" - -frogoAndroid = "2.3.1" +frogoAndroid = "2.3.2" [libraries] -androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } -junit = { group = "junit", name = "junit", version.ref = "junit" } -androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } -androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } -androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } -material = { group = "com.google.android.material", name = "material", version.ref = "material" } -androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } -androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } - frogo-android = { group = "com.github.frogobox", name = "frogo-sdk", version.ref = "frogoAndroid" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } -android-library = { id = "com.android.library", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } From 6877004514775c60af14cc39e60450e1dbc9e390 Mon Sep 17 00:00:00 2001 From: amirisback Date: Mon, 1 Sep 2025 16:51:27 +0700 Subject: [PATCH 2/2] Release v2.0.1 --- README.md | 5 +- .../java/com/frogobox/webview/ConfigApp.kt | 10 +++ .../frogobox/webview/ui/main/MainActivity.kt | 1 - buildSrc/src/main/kotlin/ProjectSetting.kt | 4 +- docs/sample_html/index.html | 61 +++++++++++++++++++ 5 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 docs/sample_html/index.html diff --git a/README.md b/README.md index db54682..2ce94b5 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,12 @@ ## Version Release - $version_release = 1.0.0 + $version_release = 2.0.1 What's New?? - * Base WebView Project * + * New Libs to Latest Version * + * Can Back Inside Website * ## How To Use / Implement This Project diff --git a/app/src/main/java/com/frogobox/webview/ConfigApp.kt b/app/src/main/java/com/frogobox/webview/ConfigApp.kt index e6f7cd5..33dd442 100644 --- a/app/src/main/java/com/frogobox/webview/ConfigApp.kt +++ b/app/src/main/java/com/frogobox/webview/ConfigApp.kt @@ -15,9 +15,19 @@ import com.frogobox.webview.ui.util.sampleHtmlText object ConfigApp { + /** + * Link for your Website + */ const val URL_LINK_WEBSITE = "https://github.com/amirisback" + + /** + * Inline your html text string + */ const val URL_LINK_DATA = sampleHtmlText + /** + * Set Your Server Domain + */ const val URL_WEB = URL_LINK_WEBSITE diff --git a/app/src/main/java/com/frogobox/webview/ui/main/MainActivity.kt b/app/src/main/java/com/frogobox/webview/ui/main/MainActivity.kt index 6abc883..bcbac4a 100644 --- a/app/src/main/java/com/frogobox/webview/ui/main/MainActivity.kt +++ b/app/src/main/java/com/frogobox/webview/ui/main/MainActivity.kt @@ -7,7 +7,6 @@ import com.frogobox.sdk.ext.gone import com.frogobox.sdk.ext.startActivityExtOpenApp import com.frogobox.sdk.ext.visible import com.frogobox.webview.ConfigApp -import com.frogobox.webview.ConfigApp.URL_LINK_DATA import com.frogobox.webview.ConfigApp.URL_WEB import com.frogobox.webview.common.callback.AdCallback import com.frogobox.webview.common.callback.WebViewCallback diff --git a/buildSrc/src/main/kotlin/ProjectSetting.kt b/buildSrc/src/main/kotlin/ProjectSetting.kt index 98050d2..ab6adb3 100644 --- a/buildSrc/src/main/kotlin/ProjectSetting.kt +++ b/buildSrc/src/main/kotlin/ProjectSetting.kt @@ -20,9 +20,9 @@ object ProjectSetting { // Sample : com.frogobox.webview const val PROJECT_APP_ID = "com.github.amirisback.web" // Change With Your Own - const val VERSION_MAJOR = 1 + const val VERSION_MAJOR = 2 const val VERSION_MINOR = 0 - const val VERSION_PATCH = 0 + const val VERSION_PATCH = 1 // Key Store const val PLAYSTORE_STORE_FILE = "keystore/frogoboxmedia.jks" diff --git a/docs/sample_html/index.html b/docs/sample_html/index.html new file mode 100644 index 0000000..013c175 --- /dev/null +++ b/docs/sample_html/index.html @@ -0,0 +1,61 @@ + + + + + Github Profile of amirisback + + + +
+ amirisback Avatar +
Github Profile of amirisback
+ View Github +
+ + \ No newline at end of file