Skip to content

Commit ab858ab

Browse files
committed
feat: config screen peer action to exclude private ips
closes #402
1 parent 4196a54 commit ab858ab

File tree

11 files changed

+277
-155
lines changed

11 files changed

+277
-155
lines changed

app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,9 @@ fun SettingsScreen(viewModel: SettingsViewModel = hiltViewModel(), appViewModel:
115115
val onAutoTunnelClick = {
116116
if (!uiState.generalState.isLocationDisclosureShown) {
117117
navController.navigate(Route.LocationDisclosure)
118-
} else navController.navigate(Route.AutoTunnel)
118+
} else {
119+
navController.navigate(Route.AutoTunnel)
120+
}
119121
}
120122
SurfaceSelectionGroupButton(
121123
listOf(

app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/AutoTunnelScreen.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.ExperimentalLayoutApi
88
import androidx.compose.foundation.layout.Row
99
import androidx.compose.foundation.layout.fillMaxSize
1010
import androidx.compose.foundation.layout.fillMaxWidth
11+
import androidx.compose.foundation.layout.imePadding
1112
import androidx.compose.foundation.layout.padding
1213
import androidx.compose.foundation.layout.size
1314
import androidx.compose.foundation.rememberScrollState
@@ -21,7 +22,6 @@ import androidx.compose.material.icons.outlined.Security
2122
import androidx.compose.material.icons.outlined.Settings
2223
import androidx.compose.material.icons.outlined.SettingsEthernet
2324
import androidx.compose.material.icons.outlined.SignalCellular4Bar
24-
import androidx.compose.material.icons.outlined.VpnKeyOff
2525
import androidx.compose.material.icons.outlined.Wifi
2626
import androidx.compose.material3.Icon
2727
import androidx.compose.material3.MaterialTheme
@@ -135,6 +135,7 @@ fun AutoTunnelScreen(uiState: AppUiState, viewModel: AutoTunnelViewModel = hiltV
135135
.fillMaxSize()
136136
.padding(padding)
137137
.verticalScroll(rememberScrollState())
138+
.imePadding()
138139
.padding(top = 24.dp.scaledHeight())
139140
.padding(horizontal = 24.dp.scaledWidth()),
140141
) {
@@ -376,7 +377,7 @@ fun AutoTunnelScreen(uiState: AppUiState, viewModel: AutoTunnelViewModel = hiltV
376377
ForwardButton { navController.navigate(Route.AutoTunnelAdvanced) }
377378
},
378379
),
379-
)
380+
),
380381
)
381382
}
382383
}

app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/advanced/AdvancedScreen.kt

+15-12
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,16 @@ import com.zaneschepke.wireguardautotunnel.util.extensions.scaledWidth
3939

4040
@Composable
4141
fun AdvancedScreen(appUiState: AppUiState, appViewModel: AppViewModel) {
42-
4342
var isDropDownExpanded by remember {
4443
mutableStateOf(false)
4544
}
4645

4746
var selected by remember { mutableIntStateOf(appUiState.settings.debounceDelaySeconds) }
4847

4948
LaunchedEffect(selected) {
50-
if(selected == appUiState.settings.debounceDelaySeconds) return@LaunchedEffect
49+
if (selected == appUiState.settings.debounceDelaySeconds) return@LaunchedEffect
5150
appViewModel.saveSettings(appUiState.settings.copy(debounceDelaySeconds = selected))
52-
if(appUiState.settings.isAutoTunnelEnabled) {
51+
if (appUiState.settings.isAutoTunnelEnabled) {
5352
appViewModel.bounceAutoTunnel()
5453
}
5554
}
@@ -86,32 +85,36 @@ fun AdvancedScreen(appUiState: AppUiState, appViewModel: AppViewModel) {
8685
trailing = {
8786
Row(
8887
horizontalArrangement = Arrangement.spacedBy(5.dp, Alignment.CenterHorizontally),
89-
verticalAlignment = Alignment.CenterVertically) {
88+
verticalAlignment = Alignment.CenterVertically,
89+
) {
9090
Text(text = selected.toString(), style = MaterialTheme.typography.bodyMedium)
9191
val icon = Icons.Default.ArrowDropDown
9292
Icon(icon, icon.name)
9393
}
9494
DropdownMenu(
95-
modifier = Modifier.height(140.dp.scaledHeight()),
95+
modifier = Modifier.height(250.dp.scaledHeight()),
9696
scrollState = rememberScrollState(),
9797
containerColor = MaterialTheme.colorScheme.surface,
9898
expanded = isDropDownExpanded,
9999
onDismissRequest = {
100100
isDropDownExpanded = false
101-
}) {
101+
},
102+
) {
102103
(0..10).forEachIndexed { index, num ->
103-
DropdownMenuItem(text = {
104-
Text(text = num.toString())
105-
},
104+
DropdownMenuItem(
105+
text = {
106+
Text(text = num.toString())
107+
},
106108
onClick = {
107109
isDropDownExpanded = false
108110
selected = num
109-
})
111+
},
112+
)
110113
}
111114
}
112115
},
113-
)
114-
)
116+
),
117+
),
115118
)
116119
}
117120
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.zaneschepke.wireguardautotunnel.ui.screens.settings.autotunnel.advanced
2+
3+
enum class InterfaceActions {
4+
TOGGLE_AMNEZIA_VALUES,
5+
SET_AMNEZIA_COMPATIBILITY,
6+
TOGGLE_SHOW_SCRIPTS,
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.zaneschepke.wireguardautotunnel.ui.screens.settings.autotunnel.advanced
2+
3+
enum class PeerActions {
4+
EXCLUDE_LAN,
5+
}

app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunneloptions/TunnelOptionsScreen.kt

+2-44
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.tunneloptions
33
import androidx.compose.foundation.layout.Arrangement
44
import androidx.compose.foundation.layout.Column
55
import androidx.compose.foundation.layout.fillMaxSize
6+
import androidx.compose.foundation.layout.imePadding
67
import androidx.compose.foundation.layout.padding
78
import androidx.compose.foundation.rememberScrollState
89
import androidx.compose.foundation.verticalScroll
910
import androidx.compose.material.icons.Icons
1011
import androidx.compose.material.icons.automirrored.outlined.CallSplit
11-
import androidx.compose.material.icons.outlined.Adjust
1212
import androidx.compose.material.icons.outlined.Bolt
1313
import androidx.compose.material.icons.outlined.Edit
1414
import androidx.compose.material.icons.outlined.Star
@@ -32,28 +32,17 @@ import com.zaneschepke.wireguardautotunnel.ui.Route
3232
import com.zaneschepke.wireguardautotunnel.ui.common.button.ScaledSwitch
3333
import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SelectionItem
3434
import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelectionGroupButton
35-
import com.zaneschepke.wireguardautotunnel.ui.common.label.GroupLabel
3635
import com.zaneschepke.wireguardautotunnel.ui.common.navigation.LocalNavController
3736
import com.zaneschepke.wireguardautotunnel.ui.common.navigation.TopNavBar
3837
import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.ForwardButton
39-
import com.zaneschepke.wireguardautotunnel.ui.screens.tunneloptions.config.model.InterfaceProxy
40-
import com.zaneschepke.wireguardautotunnel.util.extensions.isWgCompatibilityMode
41-
import com.zaneschepke.wireguardautotunnel.util.extensions.resetAmneziaProperties
4238
import com.zaneschepke.wireguardautotunnel.util.extensions.scaledHeight
4339
import com.zaneschepke.wireguardautotunnel.util.extensions.scaledWidth
44-
import com.zaneschepke.wireguardautotunnel.util.extensions.toAmneziaCompatibilityConfig
4540

4641
@Composable
4742
fun OptionsScreen(appViewModel: AppViewModel, appUiState: AppUiState, tunnelId: Int) {
4843
val navController = LocalNavController.current
4944
val config = appUiState.tunnels.first { it.id == tunnelId }
5045

51-
// TODO optimize
52-
53-
val amConfig = config.toAmConfig()
54-
55-
val isAmneziaCompatibilityEnabled = amConfig.`interface`.isWgCompatibilityMode()
56-
5746
var currentText by remember { mutableStateOf("") }
5847

5948
LaunchedEffect(config.tunnelNetworks) {
@@ -71,6 +60,7 @@ fun OptionsScreen(appViewModel: AppViewModel, appUiState: AppUiState, tunnelId:
7160
Modifier
7261
.fillMaxSize()
7362
.padding(it)
63+
.imePadding()
7464
.verticalScroll(rememberScrollState())
7565
.padding(top = 24.dp.scaledHeight())
7666
.padding(horizontal = 24.dp.scaledWidth()),
@@ -152,38 +142,6 @@ fun OptionsScreen(appViewModel: AppViewModel, appUiState: AppUiState, tunnelId:
152142
),
153143
),
154144
)
155-
val amneziaClick = {
156-
val proxy = InterfaceProxy.from(amConfig.`interface`)
157-
val `interface` = if (!isAmneziaCompatibilityEnabled) proxy.toAmneziaCompatibilityConfig() else proxy.resetAmneziaProperties()
158-
appViewModel.updateExistingTunnelConfig(config, `interface` = `interface`)
159-
}
160-
GroupLabel(stringResource(R.string.quick_actions))
161-
SurfaceSelectionGroupButton(
162-
listOf(
163-
SelectionItem(
164-
Icons.Outlined.Adjust,
165-
title = {
166-
Text(
167-
stringResource(R.string.enable_amnezia),
168-
style = MaterialTheme.typography.bodyMedium.copy(MaterialTheme.colorScheme.onSurface),
169-
)
170-
},
171-
description = {
172-
Text(
173-
stringResource(R.string.wg_compat_mode),
174-
style = MaterialTheme.typography.bodySmall.copy(MaterialTheme.colorScheme.outline),
175-
)
176-
},
177-
trailing = {
178-
ScaledSwitch(
179-
isAmneziaCompatibilityEnabled,
180-
onClick = { amneziaClick() },
181-
)
182-
},
183-
onClick = { amneziaClick() },
184-
),
185-
),
186-
)
187145
}
188146
}
189147
}

0 commit comments

Comments
 (0)