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.