diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunneloptions/TunnelOptionsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunneloptions/TunnelOptionsScreen.kt index 971153db..77d62c72 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunneloptions/TunnelOptionsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunneloptions/TunnelOptionsScreen.kt @@ -57,6 +57,11 @@ fun OptionsScreen(tunnelConfig: TunnelConfig, viewModel: TunnelOptionsViewModel LaunchedEffect(tunnelConfig.tunnelNetworks) { currentText = "" } + + val onPingToggle = { + viewModel.saveTunnelChanges(tunnelConfig.copy(isPingEnabled = !tunnelConfig.isPingEnabled)) + } + Scaffold( topBar = { TopNavBar(tunnelConfig.name) @@ -165,10 +170,10 @@ fun OptionsScreen(tunnelConfig: TunnelConfig, viewModel: TunnelOptionsViewModel trailing = { ScaledSwitch( checked = tunnelConfig.isPingEnabled, - onClick = { viewModel.onToggleRestartOnPing(tunnelConfig) }, + onClick = { onPingToggle() }, ) }, - onClick = { viewModel.onToggleRestartOnPing(tunnelConfig) }, + onClick = { onPingToggle() }, ), ) if (tunnelConfig.isPingEnabled) { @@ -188,8 +193,7 @@ fun OptionsScreen(tunnelConfig: TunnelConfig, viewModel: TunnelOptionsViewModel }, ) fun isSecondsError(seconds: String?): Boolean { - return seconds?.let { value -> if (value.isBlank()) false else value.toLong() >= Long.MAX_VALUE / 1000 } - ?: false + return seconds?.let { value -> if (value.isBlank()) false else value.toLong() >= Long.MAX_VALUE / 1000 } == true } SubmitConfigurationTextBox( tunnelConfig.pingInterval?.let { (it / 1000).toString() }, @@ -201,9 +205,7 @@ fun OptionsScreen(tunnelConfig: TunnelConfig, viewModel: TunnelOptionsViewModel ), isErrorValue = ::isSecondsError, onSubmit = { - viewModel.saveTunnelChanges( - tunnelConfig.copy(pingInterval = if (it.isBlank()) null else it.toLong() * 1000), - ) + viewModel.onPingIntervalChange(tunnelConfig, it) }, ) SubmitConfigurationTextBox( @@ -214,11 +216,7 @@ fun OptionsScreen(tunnelConfig: TunnelConfig, viewModel: TunnelOptionsViewModel keyboardType = KeyboardType.Number, ), isErrorValue = ::isSecondsError, - onSubmit = { - viewModel.saveTunnelChanges( - tunnelConfig.copy(pingCooldown = if (it.isBlank()) null else it.toLong() * 1000), - ) - }, + onSubmit = { viewModel.onPingCoolDownChange(tunnelConfig, it) }, ) }, ), diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunneloptions/TunnelOptionsViewModel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunneloptions/TunnelOptionsViewModel.kt index 0019fe21..0db17550 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunneloptions/TunnelOptionsViewModel.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunneloptions/TunnelOptionsViewModel.kt @@ -14,13 +14,6 @@ class TunnelOptionsViewModel constructor( private val appDataRepository: AppDataRepository, ) : ViewModel() { - fun onToggleRestartOnPing(tunnelConfig: TunnelConfig) = viewModelScope.launch { - appDataRepository.tunnels.save( - tunnelConfig.copy( - isPingEnabled = !tunnelConfig.isPingEnabled, - ), - ) - } fun onTogglePrimaryTunnel(tunnelConfig: TunnelConfig) = viewModelScope.launch { appDataRepository.tunnels.updatePrimaryTunnel( @@ -34,4 +27,16 @@ constructor( fun saveTunnelChanges(tunnelConfig: TunnelConfig) = viewModelScope.launch { appDataRepository.tunnels.save(tunnelConfig) } + + fun onPingIntervalChange(tunnelConfig: TunnelConfig, interval: String) = viewModelScope.launch { + val interval = if (interval.isBlank()) null else interval.toLong() * 1000 + saveTunnelChanges( + tunnelConfig.copy(pingInterval = interval), + ) + } + + fun onPingCoolDownChange(tunnelConfig: TunnelConfig, cooldown: String) = viewModelScope.launch { + val cooldown = if (cooldown.isBlank()) null else cooldown.toLong() * 1000 + saveTunnelChanges(tunnelConfig.copy(pingCooldown = cooldown)) + } }