Skip to content

Commit 310aadf

Browse files
committed
Make proxy config mutable
Now, the proxy config can be changed after webview creation. The webview will be recreated in this case.
1 parent 0cdb300 commit 310aadf

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

webview-compose/src/commonMain/kotlin/io/github/kdroidfilter/webview/setting/PlatformWebSettings.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.github.kdroidfilter.webview.setting
22

3+
import androidx.compose.runtime.getValue
4+
import androidx.compose.runtime.mutableStateOf
5+
import androidx.compose.runtime.setValue
36
import androidx.compose.ui.graphics.Color
47

58
/**
@@ -13,9 +16,10 @@ sealed class PlatformWebSettings {
1316
) : PlatformWebSettings()
1417

1518
data class DesktopWebSettings(
16-
var transparent: Boolean = true,
17-
var proxyConfig: ProxyConfig? = null
18-
) : PlatformWebSettings()
19+
var transparent: Boolean = true
20+
) : PlatformWebSettings() {
21+
var proxyConfig: ProxyConfig? by mutableStateOf(null)
22+
}
1923

2024
data class IOSWebSettings(
2125
var opaque: Boolean = false,

webview-compose/src/jvmMain/kotlin/io/github/kdroidfilter/webview/web/WebViewDesktop.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ actual fun ActualWebView(
4646
val currentOnDispose by rememberUpdatedState(onDispose)
4747
val scope = rememberCoroutineScope()
4848

49-
val proxyConfig = remember { state.webSettings.desktopWebSettings.proxyConfig }
49+
val desiredProxyConfig = state.webSettings.desktopWebSettings.proxyConfig
50+
var effectiveProxyConfig by remember { mutableStateOf(desiredProxyConfig) }
51+
5052
val desiredUserAgent = state.webSettings.customUserAgentString?.trim()?.takeIf { it.isNotEmpty() }
5153
var effectiveUserAgent by remember { mutableStateOf(desiredUserAgent) }
5254

@@ -57,8 +59,15 @@ actual fun ActualWebView(
5759
effectiveUserAgent = desiredUserAgent
5860
}
5961

60-
key(effectiveUserAgent) {
61-
val nativeWebView = remember(state, factory) { factory(WebViewFactoryParam(state, userAgent = effectiveUserAgent, proxyConfig = proxyConfig)) }
62+
LaunchedEffect(desiredProxyConfig) {
63+
if (desiredProxyConfig == effectiveProxyConfig) return@LaunchedEffect
64+
// Wry applies proxy config at creation time, so recreate the webview after a small debounce.
65+
delay(400)
66+
effectiveProxyConfig = desiredProxyConfig
67+
}
68+
69+
key(effectiveUserAgent, effectiveProxyConfig) {
70+
val nativeWebView = remember(state, factory) { factory(WebViewFactoryParam(state, userAgent = effectiveUserAgent, proxyConfig = effectiveProxyConfig)) }
6271

6372
val desktopWebView =
6473
remember(nativeWebView, scope, webViewJsBridge) {

0 commit comments

Comments
 (0)