From 6b5cc5db72f363668445413ead4f0f7bc210786c Mon Sep 17 00:00:00 2001 From: Sushant Sikka Date: Wed, 22 Oct 2025 20:02:59 +0530 Subject: [PATCH 1/5] WebView Dark Mode sample --- webviewdarkmode/app/build.gradle.kts | 60 +++++++++++++++++++ .../app/src/main/AndroidManifest.xml | 27 +++++++++ .../example/webviewdarkmode/MainActivity.kt | 37 ++++++++++++ .../app/src/main/res/layout/activity_main.xml | 13 ++++ webviewdarkmode/build.gradle.kts | 6 ++ webviewdarkmode/gradle/libs.versions.toml | 32 ++++++++++ 6 files changed, 175 insertions(+) create mode 100644 webviewdarkmode/app/build.gradle.kts create mode 100644 webviewdarkmode/app/src/main/AndroidManifest.xml create mode 100644 webviewdarkmode/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt create mode 100644 webviewdarkmode/app/src/main/res/layout/activity_main.xml create mode 100644 webviewdarkmode/build.gradle.kts create mode 100644 webviewdarkmode/gradle/libs.versions.toml diff --git a/webviewdarkmode/app/build.gradle.kts b/webviewdarkmode/app/build.gradle.kts new file mode 100644 index 00000000..7c2b9b2c --- /dev/null +++ b/webviewdarkmode/app/build.gradle.kts @@ -0,0 +1,60 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) +} + +android { + namespace = "com.example.webviewdarkmode" + compileSdk = 36 + + defaultConfig { + applicationId = "com.example.webviewdarkmode" + minSdk = 24 + targetSdk = 36 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = "11" + } + buildFeatures { + compose = true + } +} + +dependencies { + implementation("androidx.webkit:webkit:1.11.0") + implementation("androidx.appcompat:appcompat:1.7.0") + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.activity.compose) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.ui) + implementation(libs.androidx.ui.graphics) + implementation(libs.androidx.ui.tooling.preview) + implementation(libs.androidx.material3) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(libs.androidx.ui.test.junit4) + debugImplementation(libs.androidx.ui.tooling) + debugImplementation(libs.androidx.ui.test.manifest) +} \ No newline at end of file diff --git a/webviewdarkmode/app/src/main/AndroidManifest.xml b/webviewdarkmode/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..66d2821b --- /dev/null +++ b/webviewdarkmode/app/src/main/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/webviewdarkmode/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt b/webviewdarkmode/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt new file mode 100644 index 00000000..1e25ba1c --- /dev/null +++ b/webviewdarkmode/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt @@ -0,0 +1,37 @@ +package com.example.webviewdarkmode + +import android.annotation.SuppressLint +import android.os.Bundle +import android.webkit.WebView +import android.webkit.WebViewClient +import androidx.appcompat.app.AppCompatActivity +import androidx.webkit.WebSettingsCompat +import androidx.webkit.WebViewFeature + +class MainActivity : AppCompatActivity() { + @SuppressLint("SetJavaScriptEnabled") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + // Sets the user interface from a layout resource. + setContentView(R.layout.activity_main) + + // You still get your WebView instance the standard way. + // [START android_views_notifications_build_basic] + val webView: WebView = findViewById(R.id.my_webview) + + // This is necessary to keep navigation inside your WebView + webView.webViewClient = WebViewClient() + + // Enable JavaScript + webView.settings.javaScriptEnabled = true + + // To enable a modern feature, you pass that instance to a Jetpack Webkit helper. + if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { + WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON) + } + // [END android_views_notifications_build_basic] + + // Load a URL + webView.loadUrl("https://developer.android.com") + } +} \ No newline at end of file diff --git a/webviewdarkmode/app/src/main/res/layout/activity_main.xml b/webviewdarkmode/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..d7c312b6 --- /dev/null +++ b/webviewdarkmode/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/webviewdarkmode/build.gradle.kts b/webviewdarkmode/build.gradle.kts new file mode 100644 index 00000000..952b9306 --- /dev/null +++ b/webviewdarkmode/build.gradle.kts @@ -0,0 +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.kotlin.android) apply false + alias(libs.plugins.kotlin.compose) apply false +} \ No newline at end of file diff --git a/webviewdarkmode/gradle/libs.versions.toml b/webviewdarkmode/gradle/libs.versions.toml new file mode 100644 index 00000000..5d464bd3 --- /dev/null +++ b/webviewdarkmode/gradle/libs.versions.toml @@ -0,0 +1,32 @@ +[versions] +agp = "8.12.3" +kotlin = "2.0.21" +coreKtx = "1.17.0" +junit = "4.13.2" +junitVersion = "1.3.0" +espressoCore = "3.7.0" +lifecycleRuntimeKtx = "2.9.4" +activityCompose = "1.11.0" +composeBom = "2024.09.00" + +[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-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } +androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } +androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } +androidx-ui = { group = "androidx.compose.ui", name = "ui" } +androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } +androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } +androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } +androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } +androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } +androidx-material3 = { group = "androidx.compose.material3", name = "material3" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } + From 4eb7d0ad78abc7cb05c7b64f65137b026c03d05d Mon Sep 17 00:00:00 2001 From: Sushant Sikka Date: Thu, 23 Oct 2025 20:33:41 +0530 Subject: [PATCH 2/5] Removing non-essential files --- .../app/src/main/res/layout/activity_main.xml | 13 ------------- webviewdarkmode/build.gradle.kts | 6 ------ 2 files changed, 19 deletions(-) delete mode 100644 webviewdarkmode/app/src/main/res/layout/activity_main.xml delete mode 100644 webviewdarkmode/build.gradle.kts diff --git a/webviewdarkmode/app/src/main/res/layout/activity_main.xml b/webviewdarkmode/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index d7c312b6..00000000 --- a/webviewdarkmode/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/webviewdarkmode/build.gradle.kts b/webviewdarkmode/build.gradle.kts deleted file mode 100644 index 952b9306..00000000 --- a/webviewdarkmode/build.gradle.kts +++ /dev/null @@ -1,6 +0,0 @@ -// 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.kotlin.android) apply false - alias(libs.plugins.kotlin.compose) apply false -} \ No newline at end of file From 64e87a890897081259bcd81188017a4b75d8ce91 Mon Sep 17 00:00:00 2001 From: Sushant Sikka Date: Fri, 24 Oct 2025 22:30:22 +0530 Subject: [PATCH 3/5] Updating folder name and location --- {webviewdarkmode => misc/jetpackwebkit}/app/build.gradle.kts | 0 .../jetpackwebkit}/app/src/main/AndroidManifest.xml | 0 .../app/src/main/java/com/example/webviewdarkmode/MainActivity.kt | 0 {webviewdarkmode => misc/jetpackwebkit}/gradle/libs.versions.toml | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {webviewdarkmode => misc/jetpackwebkit}/app/build.gradle.kts (100%) rename {webviewdarkmode => misc/jetpackwebkit}/app/src/main/AndroidManifest.xml (100%) rename {webviewdarkmode => misc/jetpackwebkit}/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt (100%) rename {webviewdarkmode => misc/jetpackwebkit}/gradle/libs.versions.toml (100%) diff --git a/webviewdarkmode/app/build.gradle.kts b/misc/jetpackwebkit/app/build.gradle.kts similarity index 100% rename from webviewdarkmode/app/build.gradle.kts rename to misc/jetpackwebkit/app/build.gradle.kts diff --git a/webviewdarkmode/app/src/main/AndroidManifest.xml b/misc/jetpackwebkit/app/src/main/AndroidManifest.xml similarity index 100% rename from webviewdarkmode/app/src/main/AndroidManifest.xml rename to misc/jetpackwebkit/app/src/main/AndroidManifest.xml diff --git a/webviewdarkmode/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt b/misc/jetpackwebkit/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt similarity index 100% rename from webviewdarkmode/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt rename to misc/jetpackwebkit/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt diff --git a/webviewdarkmode/gradle/libs.versions.toml b/misc/jetpackwebkit/gradle/libs.versions.toml similarity index 100% rename from webviewdarkmode/gradle/libs.versions.toml rename to misc/jetpackwebkit/gradle/libs.versions.toml From 233c6b122e6ae1fc8a3faa3c3a8962567c3eaa43 Mon Sep 17 00:00:00 2001 From: Sushant Sikka Date: Fri, 24 Oct 2025 23:04:30 +0530 Subject: [PATCH 4/5] Updates to file locations --- .../com/example/snippets/jetpackwebkit/JetpackWebkitActivity.kt} | 0 .../java/com/example/snippets}/jetpackwebkit/app/build.gradle.kts | 0 .../com/example/snippets}/jetpackwebkit/gradle/libs.versions.toml | 0 .../main/res/layout/jetpack_webkit_layout.xml} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename misc/{jetpackwebkit/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt => src/main/java/com/example/snippets/jetpackwebkit/JetpackWebkitActivity.kt} (100%) rename misc/{ => src/main/java/com/example/snippets}/jetpackwebkit/app/build.gradle.kts (100%) rename misc/{ => src/main/java/com/example/snippets}/jetpackwebkit/gradle/libs.versions.toml (100%) rename misc/{jetpackwebkit/app/src/main/AndroidManifest.xml => src/main/res/layout/jetpack_webkit_layout.xml} (100%) diff --git a/misc/jetpackwebkit/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt b/misc/src/main/java/com/example/snippets/jetpackwebkit/JetpackWebkitActivity.kt similarity index 100% rename from misc/jetpackwebkit/app/src/main/java/com/example/webviewdarkmode/MainActivity.kt rename to misc/src/main/java/com/example/snippets/jetpackwebkit/JetpackWebkitActivity.kt diff --git a/misc/jetpackwebkit/app/build.gradle.kts b/misc/src/main/java/com/example/snippets/jetpackwebkit/app/build.gradle.kts similarity index 100% rename from misc/jetpackwebkit/app/build.gradle.kts rename to misc/src/main/java/com/example/snippets/jetpackwebkit/app/build.gradle.kts diff --git a/misc/jetpackwebkit/gradle/libs.versions.toml b/misc/src/main/java/com/example/snippets/jetpackwebkit/gradle/libs.versions.toml similarity index 100% rename from misc/jetpackwebkit/gradle/libs.versions.toml rename to misc/src/main/java/com/example/snippets/jetpackwebkit/gradle/libs.versions.toml diff --git a/misc/jetpackwebkit/app/src/main/AndroidManifest.xml b/misc/src/main/res/layout/jetpack_webkit_layout.xml similarity index 100% rename from misc/jetpackwebkit/app/src/main/AndroidManifest.xml rename to misc/src/main/res/layout/jetpack_webkit_layout.xml From 08cbc68b9e1d9ef7b342f284b5f8f55078496b2e Mon Sep 17 00:00:00 2001 From: Sushant Sikka Date: Fri, 31 Oct 2025 16:54:56 +0530 Subject: [PATCH 5/5] Updates per Cartland's feedback --- misc/build.gradle.kts | 3 +++ .../snippets/jetpackwebkit/JetpackWebkitActivity.kt | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/misc/build.gradle.kts b/misc/build.gradle.kts index 6a2dc60d..f062ff03 100644 --- a/misc/build.gradle.kts +++ b/misc/build.gradle.kts @@ -50,6 +50,9 @@ dependencies { val composeBom = platform(libs.androidx.compose.bom) implementation(composeBom) androidTestImplementation(composeBom) + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.2") + implementation("androidx.webkit:webkit:1.11.0") + implementation("androidx.appcompat:appcompat:1.7.0") implementation(libs.androidx.core.ktx) implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.runtime) diff --git a/misc/src/main/java/com/example/snippets/jetpackwebkit/JetpackWebkitActivity.kt b/misc/src/main/java/com/example/snippets/jetpackwebkit/JetpackWebkitActivity.kt index 1e25ba1c..c064f697 100644 --- a/misc/src/main/java/com/example/snippets/jetpackwebkit/JetpackWebkitActivity.kt +++ b/misc/src/main/java/com/example/snippets/jetpackwebkit/JetpackWebkitActivity.kt @@ -1,4 +1,4 @@ -package com.example.webviewdarkmode +package com.example.snippets.jetpackwebkit import android.annotation.SuppressLint import android.os.Bundle @@ -17,6 +17,11 @@ class MainActivity : AppCompatActivity() { // You still get your WebView instance the standard way. // [START android_views_notifications_build_basic] + + // import android.webkit.WebView + // import androidx.webkit.WebSettingsCompat + // import androidx.webkit.WebViewFeature + val webView: WebView = findViewById(R.id.my_webview) // This is necessary to keep navigation inside your WebView