Skip to content

Commit 957ac22

Browse files
committed
feat:Support dark mode on Android
1 parent fc9002f commit 957ac22

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

webview/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ kotlin {
5151
dependencies {
5252
api("androidx.activity:activity-compose:1.7.2")
5353
api("androidx.webkit:webkit:1.8.0")
54+
implementation("androidx.webkit:webkit:1.9.0")
5455
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines")
5556
}
5657
}

webview/src/androidMain/kotlin/com/multiplatform/webview/web/AccompanistWebView.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.multiplatform.webview.web
22

33
import android.content.Context
4+
import android.content.res.Configuration
45
import android.graphics.Bitmap
56
import android.os.Build
67
import android.view.ViewGroup
@@ -18,6 +19,8 @@ import androidx.compose.runtime.rememberCoroutineScope
1819
import androidx.compose.ui.Modifier
1920
import androidx.compose.ui.graphics.toArgb
2021
import androidx.compose.ui.viewinterop.AndroidView
22+
import androidx.webkit.WebSettingsCompat
23+
import androidx.webkit.WebViewFeature
2124
import com.multiplatform.webview.jsbridge.WebViewJsBridge
2225
import com.multiplatform.webview.util.KLogger
2326

@@ -198,6 +201,19 @@ fun AccompanistWebView(
198201
domStorageEnabled = it.domStorageEnabled
199202
}
200203
}
204+
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
205+
val nightModeFlags = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
206+
if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
207+
WebSettingsCompat.setForceDark(this.settings, WebSettingsCompat.FORCE_DARK_ON)
208+
} else {
209+
WebSettingsCompat.setForceDark(this.settings, WebSettingsCompat.FORCE_DARK_OFF)
210+
}
211+
212+
WebSettingsCompat.setForceDarkStrategy(
213+
this.settings,
214+
WebSettingsCompat.DARK_STRATEGY_WEB_THEME_DARKENING_ONLY,
215+
)
216+
}
201217
}.also {
202218
val androidWebView = AndroidWebView(it, scope, webViewJsBridge)
203219
state.webView = androidWebView

0 commit comments

Comments
 (0)