From e63733286c349a4fdf751f1f35998fbf1552c7f8 Mon Sep 17 00:00:00 2001 From: Zane Schepke Date: Mon, 31 Mar 2025 17:52:14 -0400 Subject: [PATCH] refactor: advanced screen --- .../wireguardautotunnel/MainActivity.kt | 4 +- .../ui/common/DropdownSelector.kt | 60 ++++++++++ .../button}/ForwardButton.kt | 2 +- .../ui/screens/main/TunnelOptionsScreen.kt | 2 +- .../ui/screens/settings/AdvancedScreen.kt | 111 ------------------ .../ui/screens/settings/AppearanceScreen.kt | 2 +- .../ui/screens/settings/KillSwitchScreen.kt | 2 +- .../settings/LocationDisclosureScreen.kt | 2 +- .../ui/screens/settings/SettingsScreen.kt | 2 +- .../settings/autotunnel/AutoTunnelScreen.kt | 2 +- .../autotunnel/advanced/AdvancedScreen.kt | 49 ++++++++ .../components/DebounceDelaySelector.kt | 48 ++++++++ .../components/ContactSupportOptions.kt | 2 +- .../components/GeneralSupportOptions.kt | 2 +- .../viewmodel/AppViewModel.kt | 13 +- .../viewmodel/event/AppEvent.kt | 1 + app/src/main/res/values/strings.xml | 1 + 17 files changed, 178 insertions(+), 127 deletions(-) create mode 100644 app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/DropdownSelector.kt rename app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/{screens/settings/components => common/button}/ForwardButton.kt (90%) delete mode 100644 app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/AdvancedScreen.kt create mode 100644 app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/advanced/AdvancedScreen.kt create mode 100644 app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/advanced/components/DebounceDelaySelector.kt diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/MainActivity.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/MainActivity.kt index 1b88cfd9..03fc791a 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/MainActivity.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/MainActivity.kt @@ -58,7 +58,7 @@ import com.zaneschepke.wireguardautotunnel.ui.screens.main.PinLockScreen import com.zaneschepke.wireguardautotunnel.ui.screens.main.ScannerScreen import com.zaneschepke.wireguardautotunnel.ui.screens.main.splittunnel.SplitTunnelScreen import com.zaneschepke.wireguardautotunnel.ui.screens.main.TunnelAutoTunnelScreen -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.AdvancedScreen +import com.zaneschepke.wireguardautotunnel.ui.screens.settings.autotunnel.advanced.AdvancedScreen import com.zaneschepke.wireguardautotunnel.ui.screens.settings.AppearanceScreen import com.zaneschepke.wireguardautotunnel.ui.screens.settings.DisplayScreen import com.zaneschepke.wireguardautotunnel.ui.screens.settings.KillSwitchScreen @@ -211,7 +211,7 @@ class MainActivity : AppCompatActivity() { SupportScreen(appUiState) } composable { - AdvancedScreen(appUiState.appSettings, viewModel) + AdvancedScreen(appUiState) } composable { LogsScreen() diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/DropdownSelector.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/DropdownSelector.kt new file mode 100644 index 00000000..84796636 --- /dev/null +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/DropdownSelector.kt @@ -0,0 +1,60 @@ +package com.zaneschepke.wireguardautotunnel.ui.common + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.rememberScrollState +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowDropDown +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.zaneschepke.wireguardautotunnel.R +import com.zaneschepke.wireguardautotunnel.util.extensions.scaledHeight + +@Composable +fun DropdownSelector( + currentValue: T, + options: List, + onValueSelected: (T) -> Unit, + modifier: Modifier = Modifier, + label: @Composable (() -> Unit)? = null, + isExpanded: Boolean = false, + onDismiss: () -> Unit = {}, +) { + Row( + horizontalArrangement = Arrangement.spacedBy(5.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + if (label != null) label() + Text( + text = currentValue.toString(), + style = MaterialTheme.typography.bodyMedium, + ) + Icon(Icons.Default.ArrowDropDown, contentDescription = stringResource(R.string.dropdown)) + } + DropdownMenu( + modifier = modifier.height(250.dp.scaledHeight()), + scrollState = rememberScrollState(), + containerColor = MaterialTheme.colorScheme.surface, + expanded = isExpanded, + onDismissRequest = onDismiss, + ) { + options.forEach { option -> + DropdownMenuItem( + text = { Text(text = option.toString()) }, + onClick = { + onValueSelected(option) + onDismiss() // Close dropdown after selection + }, + ) + } + } +} diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/components/ForwardButton.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/ForwardButton.kt similarity index 90% rename from app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/components/ForwardButton.kt rename to app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/ForwardButton.kt index f217a9e2..0dbb8771 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/components/ForwardButton.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/button/ForwardButton.kt @@ -1,4 +1,4 @@ -package com.zaneschepke.wireguardautotunnel.ui.screens.settings.components +package com.zaneschepke.wireguardautotunnel.ui.common.button import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.size diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/TunnelOptionsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/TunnelOptionsScreen.kt index dafa2bf5..fb3438c0 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/TunnelOptionsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/main/TunnelOptionsScreen.kt @@ -41,7 +41,7 @@ import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelec import com.zaneschepke.wireguardautotunnel.ui.common.config.SubmitConfigurationTextBox import com.zaneschepke.wireguardautotunnel.ui.common.navigation.LocalNavController import com.zaneschepke.wireguardautotunnel.ui.common.navigation.TopNavBar -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.ForwardButton +import com.zaneschepke.wireguardautotunnel.ui.common.button.ForwardButton import com.zaneschepke.wireguardautotunnel.ui.state.AppUiState import com.zaneschepke.wireguardautotunnel.util.Constants import com.zaneschepke.wireguardautotunnel.util.extensions.isValidIpv4orIpv6Address diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/AdvancedScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/AdvancedScreen.kt deleted file mode 100644 index 4cf7ff44..00000000 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/AdvancedScreen.kt +++ /dev/null @@ -1,111 +0,0 @@ -package com.zaneschepke.wireguardautotunnel.ui.screens.settings - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowDropDown -import androidx.compose.material.icons.outlined.PauseCircle -import androidx.compose.material3.DropdownMenu -import androidx.compose.material3.DropdownMenuItem -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import com.zaneschepke.wireguardautotunnel.R -import com.zaneschepke.wireguardautotunnel.domain.entity.AppSettings -import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SelectionItem -import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelectionGroupButton -import com.zaneschepke.wireguardautotunnel.ui.common.navigation.TopNavBar -import com.zaneschepke.wireguardautotunnel.util.extensions.scaledHeight -import com.zaneschepke.wireguardautotunnel.util.extensions.scaledWidth -import com.zaneschepke.wireguardautotunnel.viewmodel.AppViewModel - -@Composable -fun AdvancedScreen(appSettings: AppSettings, appViewModel: AppViewModel) { - var isDropDownExpanded by remember { - mutableStateOf(false) - } - - Scaffold( - topBar = { - TopNavBar(stringResource(R.string.advanced_settings)) - }, - ) { padding -> - Column( - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.spacedBy(24.dp.scaledHeight(), Alignment.Top), - modifier = - Modifier - .fillMaxSize() - .padding(padding) - .verticalScroll(rememberScrollState()) - .padding(top = 24.dp.scaledHeight()) - .padding(horizontal = 24.dp.scaledWidth()), - ) { - SurfaceSelectionGroupButton( - listOf( - SelectionItem( - Icons.Outlined.PauseCircle, - title = { - Text( - stringResource(R.string.debounce_delay), - style = MaterialTheme.typography.bodyMedium.copy(MaterialTheme.colorScheme.onSurface), - ) - }, - onClick = { - isDropDownExpanded = true - }, - trailing = { - Row( - horizontalArrangement = Arrangement.spacedBy(5.dp, Alignment.CenterHorizontally), - verticalAlignment = Alignment.CenterVertically, - ) { - Text(text = appSettings.debounceDelaySeconds.toString(), style = MaterialTheme.typography.bodyMedium) - val icon = Icons.Default.ArrowDropDown - Icon(icon, icon.name) - } - DropdownMenu( - modifier = Modifier.height(250.dp.scaledHeight()), - scrollState = rememberScrollState(), - containerColor = MaterialTheme.colorScheme.surface, - expanded = isDropDownExpanded, - onDismissRequest = { - isDropDownExpanded = false - }, - ) { - (0..10).forEachIndexed { index, num -> - DropdownMenuItem( - text = { - Text(text = num.toString()) - }, - onClick = { - isDropDownExpanded = false - appViewModel.saveAppSettings( - appSettings.copy(debounceDelaySeconds = num), - ) - }, - ) - } - } - }, - ), - ), - ) - } - } -} diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/AppearanceScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/AppearanceScreen.kt index 22a6311a..64a4eed5 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/AppearanceScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/AppearanceScreen.kt @@ -23,7 +23,7 @@ import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SelectionIte import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelectionGroupButton import com.zaneschepke.wireguardautotunnel.ui.common.navigation.LocalNavController import com.zaneschepke.wireguardautotunnel.ui.common.navigation.TopNavBar -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.ForwardButton +import com.zaneschepke.wireguardautotunnel.ui.common.button.ForwardButton import com.zaneschepke.wireguardautotunnel.util.extensions.launchNotificationSettings import com.zaneschepke.wireguardautotunnel.util.extensions.scaledHeight import com.zaneschepke.wireguardautotunnel.util.extensions.scaledWidth diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/KillSwitchScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/KillSwitchScreen.kt index 4b34f22f..18b239ed 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/KillSwitchScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/KillSwitchScreen.kt @@ -26,7 +26,7 @@ import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelec import com.zaneschepke.wireguardautotunnel.ui.common.navigation.TopNavBar import com.zaneschepke.wireguardautotunnel.ui.common.permission.vpn.withVpnPermission import com.zaneschepke.wireguardautotunnel.ui.common.snackbar.SnackbarController -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.ForwardButton +import com.zaneschepke.wireguardautotunnel.ui.common.button.ForwardButton import com.zaneschepke.wireguardautotunnel.util.StringValue import com.zaneschepke.wireguardautotunnel.util.extensions.isRunningOnTv import com.zaneschepke.wireguardautotunnel.util.extensions.launchVpnSettings diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/LocationDisclosureScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/LocationDisclosureScreen.kt index a893f4e1..512caef6 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/LocationDisclosureScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/LocationDisclosureScreen.kt @@ -27,7 +27,7 @@ import com.zaneschepke.wireguardautotunnel.ui.Route import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SelectionItem import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelectionGroupButton import com.zaneschepke.wireguardautotunnel.ui.common.navigation.LocalNavController -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.ForwardButton +import com.zaneschepke.wireguardautotunnel.ui.common.button.ForwardButton import com.zaneschepke.wireguardautotunnel.util.extensions.goFromRoot import com.zaneschepke.wireguardautotunnel.util.extensions.launchAppSettings import com.zaneschepke.wireguardautotunnel.util.extensions.scaledHeight diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt index 2cde7960..d895fff9 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt @@ -53,7 +53,7 @@ import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelec import com.zaneschepke.wireguardautotunnel.ui.common.navigation.LocalNavController import com.zaneschepke.wireguardautotunnel.ui.common.prompt.AuthorizationPrompt import com.zaneschepke.wireguardautotunnel.ui.common.snackbar.SnackbarController -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.ForwardButton +import com.zaneschepke.wireguardautotunnel.ui.common.button.ForwardButton import com.zaneschepke.wireguardautotunnel.util.extensions.isRunningOnTv import com.zaneschepke.wireguardautotunnel.util.extensions.scaledHeight import com.zaneschepke.wireguardautotunnel.util.extensions.scaledWidth diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/AutoTunnelScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/AutoTunnelScreen.kt index d45198e5..d69c67b7 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/AutoTunnelScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/AutoTunnelScreen.kt @@ -53,7 +53,7 @@ import com.zaneschepke.wireguardautotunnel.ui.common.navigation.TopNavBar import com.zaneschepke.wireguardautotunnel.ui.screens.settings.autotunnel.components.TrustedNetworkTextBox import com.zaneschepke.wireguardautotunnel.ui.screens.settings.autotunnel.components.WildcardsLabel import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.BackgroundLocationDialog -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.ForwardButton +import com.zaneschepke.wireguardautotunnel.ui.common.button.ForwardButton import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.LearnMoreLinkLabel import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.LocationServicesDialog import com.zaneschepke.wireguardautotunnel.ui.theme.iconSize diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/advanced/AdvancedScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/advanced/AdvancedScreen.kt new file mode 100644 index 00000000..cc9319bb --- /dev/null +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/advanced/AdvancedScreen.kt @@ -0,0 +1,49 @@ +package com.zaneschepke.wireguardautotunnel.ui.screens.settings.autotunnel.advanced + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import com.zaneschepke.wireguardautotunnel.R +import com.zaneschepke.wireguardautotunnel.ui.common.navigation.TopNavBar +import com.zaneschepke.wireguardautotunnel.ui.screens.settings.autotunnel.advanced.components.DebounceDelaySelector +import com.zaneschepke.wireguardautotunnel.ui.state.AppUiState +import com.zaneschepke.wireguardautotunnel.util.extensions.scaledHeight +import com.zaneschepke.wireguardautotunnel.util.extensions.scaledWidth +import com.zaneschepke.wireguardautotunnel.viewmodel.AppViewModel + +@Composable +fun AdvancedScreen(appUiState: AppUiState) { + val appViewModel: AppViewModel = hiltViewModel() + + Scaffold( + topBar = { + TopNavBar(stringResource(R.string.advanced_settings)) + }, + ) { padding -> + Column( + horizontalAlignment = Alignment.Start, + verticalArrangement = Arrangement.spacedBy(24.dp.scaledHeight(), Alignment.Top), + modifier = Modifier + .fillMaxSize() + .padding(padding) + .verticalScroll(rememberScrollState()) + .padding(top = 24.dp.scaledHeight()) + .padding(horizontal = 24.dp.scaledWidth()), + ) { + DebounceDelaySelector( + currentDelay = appUiState.appSettings.debounceDelaySeconds, + onEvent = appViewModel::handleEvent, + ) + } + } +} diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/advanced/components/DebounceDelaySelector.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/advanced/components/DebounceDelaySelector.kt new file mode 100644 index 00000000..8f663018 --- /dev/null +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/autotunnel/advanced/components/DebounceDelaySelector.kt @@ -0,0 +1,48 @@ +package com.zaneschepke.wireguardautotunnel.ui.screens.settings.autotunnel.advanced.components + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.PauseCircle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.res.stringResource +import com.zaneschepke.wireguardautotunnel.R +import com.zaneschepke.wireguardautotunnel.ui.common.DropdownSelector +import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SelectionItem +import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelectionGroupButton +import com.zaneschepke.wireguardautotunnel.viewmodel.event.AppEvent + +@Composable +fun DebounceDelaySelector(currentDelay: Int, onEvent: (AppEvent) -> Unit) { + var isDropDownExpanded by remember { mutableStateOf(false) } + + SurfaceSelectionGroupButton( + listOf( + SelectionItem( + leadingIcon = Icons.Outlined.PauseCircle, + title = { + Text( + stringResource(R.string.debounce_delay), + style = MaterialTheme.typography.bodyMedium.copy( + color = MaterialTheme.colorScheme.onSurface, + ), + ) + }, + onClick = { isDropDownExpanded = true }, + trailing = { + DropdownSelector( + currentValue = currentDelay, + options = (0..10).toList(), + onValueSelected = { num -> onEvent(AppEvent.SetDebounceDelay(num)) }, + isExpanded = isDropDownExpanded, + onDismiss = { isDropDownExpanded = false }, + ) + }, + ), + ), + ) +} diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/components/ContactSupportOptions.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/components/ContactSupportOptions.kt index 62aec7f8..2192c3ee 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/components/ContactSupportOptions.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/components/ContactSupportOptions.kt @@ -12,7 +12,7 @@ import com.zaneschepke.wireguardautotunnel.R import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SelectionItem import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SelectionItemLabel import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelectionGroupButton -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.ForwardButton +import com.zaneschepke.wireguardautotunnel.ui.common.button.ForwardButton import com.zaneschepke.wireguardautotunnel.util.Constants import com.zaneschepke.wireguardautotunnel.util.extensions.launchSupportEmail import com.zaneschepke.wireguardautotunnel.util.extensions.openWebUrl diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/components/GeneralSupportOptions.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/components/GeneralSupportOptions.kt index 2f6da08b..1e425fcd 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/components/GeneralSupportOptions.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/components/GeneralSupportOptions.kt @@ -12,7 +12,7 @@ import com.zaneschepke.wireguardautotunnel.ui.common.button.ScaledSwitch import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SelectionItem import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SelectionItemLabel import com.zaneschepke.wireguardautotunnel.ui.common.button.surface.SurfaceSelectionGroupButton -import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.ForwardButton +import com.zaneschepke.wireguardautotunnel.ui.common.button.ForwardButton import com.zaneschepke.wireguardautotunnel.ui.state.AppUiState import com.zaneschepke.wireguardautotunnel.util.extensions.openWebUrl diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/AppViewModel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/AppViewModel.kt index 726bb66e..5ad4660a 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/AppViewModel.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/AppViewModel.kt @@ -89,11 +89,14 @@ constructor( } fun handleEvent(event: AppEvent) = viewModelScope.launch { - when (event) { - AppEvent.ToggleLocalLogging -> { - val enabled = uiState.value.generalState.isLocalLogsEnabled - appDataRepository.appState.setLocalLogsEnabled(!enabled) - if (!enabled) logReader.start() else logReader.stop() + with(uiState.value) { + when (event) { + AppEvent.ToggleLocalLogging -> { + val enabled = generalState.isLocalLogsEnabled + appDataRepository.appState.setLocalLogsEnabled(!enabled) + if (!enabled) logReader.start() else logReader.stop() + } + is AppEvent.SetDebounceDelay -> saveAppSettings(appSettings.copy(debounceDelaySeconds = event.delay)) } } } diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/event/AppEvent.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/event/AppEvent.kt index b933eb8a..c7e218b5 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/event/AppEvent.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/event/AppEvent.kt @@ -2,4 +2,5 @@ package com.zaneschepke.wireguardautotunnel.viewmodel.event sealed class AppEvent { data object ToggleLocalLogging : AppEvent() + data class SetDebounceDelay(val delay: Int) : AppEvent() } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0b99a66d..eb1aca05 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -225,4 +225,5 @@ Join Telegram community Join Matrix community https://matrix.to/#/#wg-tunnel-space:matrix.org + Dropdown