11package io.github.kdroidfilter.webview.demo
22
3- import androidx.compose.foundation.layout.Arrangement
4- import androidx.compose.foundation.layout.Column
5- import androidx.compose.foundation.layout.ColumnScope
6- import androidx.compose.foundation.layout.ExperimentalLayoutApi
7- import androidx.compose.foundation.layout.FlowRow
8- import androidx.compose.foundation.layout.Row
9- import androidx.compose.foundation.layout.Spacer
10- import androidx.compose.foundation.layout.fillMaxSize
11- import androidx.compose.foundation.layout.fillMaxWidth
12- import androidx.compose.foundation.layout.height
13- import androidx.compose.foundation.layout.heightIn
14- import androidx.compose.foundation.layout.padding
15- import androidx.compose.foundation.layout.width
16- import androidx.compose.foundation.rememberScrollState
3+ import androidx.compose.foundation.layout.*
174import androidx.compose.foundation.lazy.LazyColumn
185import androidx.compose.foundation.lazy.items
6+ import androidx.compose.foundation.rememberScrollState
197import androidx.compose.foundation.verticalScroll
208import androidx.compose.material3.Button
219import androidx.compose.material3.Card
@@ -31,12 +19,17 @@ import androidx.compose.material3.Switch
3119import androidx.compose.material3.Text
3220import androidx.compose.material3.TextButton
3321import androidx.compose.runtime.Composable
22+ import androidx.compose.runtime.getValue
23+ import androidx.compose.runtime.mutableStateOf
24+ import androidx.compose.runtime.remember
3425import androidx.compose.runtime.rememberCoroutineScope
26+ import androidx.compose.runtime.setValue
3527import androidx.compose.ui.Alignment
3628import androidx.compose.ui.Modifier
3729import androidx.compose.ui.unit.dp
3830import composewebview.demo_shared.generated.resources.Res
3931import io.github.kdroidfilter.webview.cookie.Cookie
32+ import io.github.kdroidfilter.webview.setting.ProxyConfig
4033import io.github.kdroidfilter.webview.util.KLogSeverity
4134import io.github.kdroidfilter.webview.web.WebViewNavigator
4235import io.github.kdroidfilter.webview.web.WebViewState
@@ -87,6 +80,9 @@ internal fun DemoToolsPanel(
8780 onSetLogSeverity : (KLogSeverity ) -> Unit ,
8881) {
8982 val scope = rememberCoroutineScope()
83+ val desktopWebSettings = webViewState.webSettings.desktopWebSettings
84+ var proxyType by remember { mutableStateOf(" None" ) }
85+ var proxyText by remember { mutableStateOf(desktopWebSettings.proxyConfig?.toString() ? : " " ) }
9086 Surface (modifier = modifier, color = MaterialTheme .colorScheme.surface) {
9187 Column (
9288 modifier = Modifier .fillMaxSize().verticalScroll(rememberScrollState()).padding(12 .dp),
@@ -375,6 +371,29 @@ internal fun DemoToolsPanel(
375371 singleLine = true ,
376372 label = { Text (" Custom User-Agent" ) },
377373 )
374+ Spacer (Modifier .height(8 .dp))
375+ OutlinedTextField (
376+ value = proxyText,
377+ onValueChange = { proxyText = it },
378+ singleLine = true ,
379+ label = { Text (" Proxy (desktop only)" ) },
380+ )
381+ FlowRow (horizontalArrangement = Arrangement .spacedBy(8 .dp), verticalArrangement = Arrangement .spacedBy(8 .dp)) {
382+ listOf (" None" , " HTTP" , " SOCKS5" ).forEach { type ->
383+ FilterChip (
384+ selected = proxyType == type,
385+ onClick = { proxyType = type },
386+ label = { Text (type) },
387+ )
388+ }
389+ }
390+ Button (
391+ onClick = {
392+ desktopWebSettings.proxyConfig = proxyText.ifBlank { null }?.parseProxyConfig(proxyType)
393+ }
394+ ){
395+ Text (" Set proxy" )
396+ }
378397 }
379398
380399 SectionCard (title = " Logs" ) {
@@ -454,3 +473,14 @@ private fun inlineHtml(): String =
454473 </body>
455474 </html>
456475 """ .trimIndent()
476+
477+ private fun String.parseProxyConfig (proxyType : String ): ProxyConfig ? {
478+ val host = substringBefore(" :" ).ifBlank { null } ? : return null
479+ val port = substringAfter(" :" ).toIntOrNull() ? : return null
480+ return when (proxyType) {
481+ " None" -> null
482+ " HTTP" -> ProxyConfig .Http (host, port)
483+ " SOCKS5" -> ProxyConfig .Socks5 (host, port)
484+ else -> error(" Invalid proxy type: $proxyType " )
485+ }
486+ }
0 commit comments