diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/components/currentBackStackEntryAsNavbarState.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/components/currentBackStackEntryAsNavbarState.kt
index 3bda1494..3ac78bd4 100644
--- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/components/currentBackStackEntryAsNavbarState.kt
+++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/components/currentBackStackEntryAsNavbarState.kt
@@ -17,7 +17,6 @@ import androidx.navigation.toRoute
import com.zaneschepke.wireguardautotunnel.R
import com.zaneschepke.wireguardautotunnel.ui.common.button.ActionIconButton
import com.zaneschepke.wireguardautotunnel.ui.navigation.Route
-import com.zaneschepke.wireguardautotunnel.ui.navigation.Route.Config
import com.zaneschepke.wireguardautotunnel.ui.sideeffect.LocalSideEffect
import com.zaneschepke.wireguardautotunnel.ui.state.NavbarState
import com.zaneschepke.wireguardautotunnel.viewmodel.SharedAppViewModel
@@ -74,17 +73,12 @@ fun NavHostController.currentBackStackEntryAsNavbarState(
}
}
- val disableDelete by
- rememberSaveable(sharedState.selectedTunnels) {
- mutableStateOf(sharedState.selectedTunnels.any { it.isActive })
- }
-
val selectedCount by
rememberSaveable(sharedState.selectedTunnels) {
mutableIntStateOf(sharedState.selectedTunnels.size)
}
- return produceState(initialValue = NavbarState(), route, selectedCount, disableDelete) {
+ return produceState(initialValue = NavbarState(), route, selectedCount) {
value =
when (route) {
Route.AdvancedAutoTunnel ->
@@ -232,7 +226,7 @@ fun NavHostController.currentBackStackEntryAsNavbarState(
sharedViewModel.postSideEffect(LocalSideEffect.Modal.QR)
}
ActionIconButton(Icons.Rounded.Edit, R.string.edit_tunnel) {
- navigate(Config(route.id))
+ navigate(Route.Config(route.id))
}
}
},
@@ -271,16 +265,13 @@ fun NavHostController.currentBackStackEntryAsNavbarState(
sharedViewModel.copySelectedTunnel()
}
}
-
- if (!disableDelete) {
- ActionIconButton(
- Icons.Rounded.Delete,
- R.string.delete_tunnel,
- ) {
- sharedViewModel.postSideEffect(
- LocalSideEffect.Modal.DeleteTunnels
- )
- }
+ ActionIconButton(
+ Icons.Rounded.Delete,
+ R.string.delete_tunnel,
+ ) {
+ sharedViewModel.postSideEffect(
+ LocalSideEffect.Modal.DeleteTunnels
+ )
}
}
}
diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/SharedAppViewModel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/SharedAppViewModel.kt
index 01a712ff..ce2f2f70 100644
--- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/SharedAppViewModel.kt
+++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/viewmodel/SharedAppViewModel.kt
@@ -27,18 +27,19 @@ import com.zaneschepke.wireguardautotunnel.util.LocaleUtil
import com.zaneschepke.wireguardautotunnel.util.StringValue
import com.zaneschepke.wireguardautotunnel.util.extensions.saveTunnelsUniquely
import dagger.hilt.android.lifecycle.HiltViewModel
+import java.io.File
+import java.time.Instant
+import javax.inject.Inject
+import javax.inject.Provider
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.withContext
import org.orbitmvi.orbit.ContainerHost
import org.orbitmvi.orbit.viewmodel.container
import rikka.shizuku.Shizuku
import xyz.teamgravity.pin_lock_compose.PinManager
-import java.io.File
-import java.time.Instant
-import javax.inject.Inject
-import javax.inject.Provider
@HiltViewModel
class SharedAppViewModel
@@ -227,6 +228,13 @@ constructor(
}
fun deleteSelectedTunnels() = intent {
+ val activeTunIds = tunnelManager.activeTunnels.firstOrNull()?.map { it.key }
+ if (state.selectedTunnels.any { activeTunIds?.contains(it.id) == true })
+ return@intent postSideEffect(
+ GlobalSideEffect.Snackbar(
+ StringValue.StringResource(R.string.delete_active_message)
+ )
+ )
tunnelRepository.delete(state.selectedTunnels.toList())
clearSelectedTunnels()
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c9bed790..0f835af0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -82,7 +82,7 @@
The app is not detecting any location services enabled on your device. Depending on the device, this could cause the untrusted wifi feature to fail to read the wifi name. Would you like to continue anyways?
Auto-tunnel service
Delete tunnel
- Are you sure you would like to delete this tunnel?
+ Are you sure you would like to delete the selected tunnels?
Yes
All
No email app detected
@@ -432,4 +432,5 @@
Unfortunately, due to Google\'s policies, donation links are not allowed in
the Play Store version of this app. Please browse the project\'s webpages to find where to donate.
+ Cannot delete active tunnel.