diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6bc50dc0..ee49f540 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -198,7 +198,10 @@
-
+
+
+
+
{
+ Timber.i("Restoring state on package upgrade")
tunnelManager.handleRestore()
logReader.deleteAndClearLogs()
appStateRepository.setShouldShowDonationSnackbar(true)
diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/service/autotunnel/AutoTunnelService.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/service/autotunnel/AutoTunnelService.kt
index f649e9d4..5bf2b6c3 100644
--- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/service/autotunnel/AutoTunnelService.kt
+++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/service/autotunnel/AutoTunnelService.kt
@@ -234,7 +234,7 @@ class AutoTunnelService : LifecycleService() {
return combine(
settingsRepository.flow.map { it.appMode }.distinctUntilChanged(),
autoTunnelRepository.get().flow,
- tunnelsRepository.flow.map { tunnels ->
+ tunnelsRepository.userTunnelsFlow.map { tunnels ->
// isActive is ignored for equality checks so user can manually toggle off
// tunnel with auto-tunnel
tunnels.map { it.copy(isActive = false) }
diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/TunnelManager.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/TunnelManager.kt
index 5995a473..ae418049 100644
--- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/TunnelManager.kt
+++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/core/tunnel/TunnelManager.kt
@@ -322,11 +322,11 @@ constructor(
withContext(ioDispatcher) {
val settings = settingsRepository.getGeneralSettings()
val autoTunnelSettings = autoTunnelSettingsRepository.getAutoTunnelSettings()
- val tunnels = tunnelsRepository.getAll()
+ val tunnels = tunnelsRepository.userTunnelsFlow.firstOrNull()
if (autoTunnelSettings.isAutoTunnelEnabled)
return@withContext restoreAutoTunnel(autoTunnelSettings)
if (settings.appMode == AppMode.LOCK_DOWN) handleLockDownModeInit()
- if (tunnels.any { it.isActive }) {
+ if (tunnels?.any { it.isActive } == true) {
if (settings.appMode == AppMode.VPN && !serviceManager.hasVpnPermission())
return@withContext localErrorEvents.emit(null to NotAuthorized())
when (settings.appMode) {
@@ -350,7 +350,7 @@ constructor(
withContext(ioDispatcher) {
val settings = settingsRepository.getGeneralSettings()
val autoTunnelSettings = autoTunnelSettingsRepository.getAutoTunnelSettings()
- val defaultTunnel = tunnelsRepository.getStartTunnel()
+ val defaultTunnel = tunnelsRepository.getDefaultTunnel()
if (autoTunnelSettings.startOnBoot)
return@withContext restoreAutoTunnel(autoTunnelSettings)
if (settings.isRestoreOnBootEnabled) {
diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/dao/TunnelConfigDao.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/dao/TunnelConfigDao.kt
index 2eb6f6e5..d0847540 100644
--- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/dao/TunnelConfigDao.kt
+++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/dao/TunnelConfigDao.kt
@@ -50,23 +50,27 @@ interface TunnelConfigDao {
@Query(
"""
- SELECT * FROM tunnel_config
- ORDER BY
- CASE WHEN is_primary_tunnel = 1 THEN 0 ELSE 1 END,
- position ASC
- LIMIT 1"""
+ SELECT * FROM tunnel_config
+ WHERE name != '${TunnelConfig.GLOBAL_CONFIG_NAME}'
+ ORDER BY
+ CASE WHEN is_primary_tunnel = 1 THEN 0 ELSE 1 END,
+ position ASC
+ LIMIT 1
+ """
)
suspend fun getDefaultTunnel(): TunnelConfig?
@Query(
"""
- SELECT * FROM tunnel_config
- ORDER BY
- CASE WHEN is_Active = 1 THEN 0
- WHEN is_primary_tunnel = 1 THEN 1
- ELSE 2 END,
- position ASC
- LIMIT 1"""
+ SELECT * FROM tunnel_config
+ WHERE name != '${TunnelConfig.GLOBAL_CONFIG_NAME}'
+ ORDER BY
+ CASE WHEN is_Active = 1 THEN 0
+ WHEN is_primary_tunnel = 1 THEN 1
+ ELSE 2 END,
+ position ASC
+ LIMIT 1
+ """
)
suspend fun getStartTunnel(): TunnelConfig?
diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/repository/DataStoreAppStateRepository.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/repository/DataStoreAppStateRepository.kt
index 487dfba6..26b5091f 100644
--- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/repository/DataStoreAppStateRepository.kt
+++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/repository/DataStoreAppStateRepository.kt
@@ -55,6 +55,8 @@ class DataStoreAppStateRepository(
pref[DataStoreManager.locationDisclosureShown] ?: false,
isBatteryOptimizationDisableShown =
pref[DataStoreManager.batteryDisableShown] ?: false,
+ shouldShowDonationSnackbar =
+ pref[DataStoreManager.shouldShowDonationSnackbar] ?: false,
)
} catch (e: IllegalArgumentException) {
Timber.e(e)
diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/GettingStartedLabel.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/GettingStartedLabel.kt
index ad7e3ed6..73041857 100644
--- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/GettingStartedLabel.kt
+++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/GettingStartedLabel.kt
@@ -17,11 +17,11 @@ import androidx.compose.ui.unit.dp
import com.zaneschepke.wireguardautotunnel.R
@Composable
-fun GettingStartedLabel(onClick: (url: String) -> Unit) {
+fun GettingStartedLabel(onClick: (url: String) -> Unit, modifier: Modifier = Modifier) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
- modifier = Modifier.padding(top = 100.dp).fillMaxSize(),
+ modifier = modifier.padding(top = 100.dp).fillMaxSize(),
) {
val url = stringResource(id = R.string.docs_url)
val gettingStarted = buildAnnotatedString {
diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/TunnelList.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/TunnelList.kt
index bd156d8b..c7b1a0da 100644
--- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/TunnelList.kt
+++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/components/TunnelList.kt
@@ -59,7 +59,12 @@ fun TunnelList(
flingBehavior = ScrollableDefaults.flingBehavior(),
) {
if (sharedState.tunnels.isEmpty()) {
- item { GettingStartedLabel(onClick = { context.openWebUrl(it) }) }
+ item {
+ GettingStartedLabel(
+ onClick = { context.openWebUrl(it) },
+ modifier = Modifier.animateItem(),
+ )
+ }
}
items(sharedState.tunnels, key = { it.id }) { tunnel ->
val tunnelState =
@@ -81,6 +86,7 @@ fun TunnelList(
}
SurfaceRow(
+ modifier = Modifier.animateItem(),
leading = {
Icon(
Icons.Rounded.Circle,
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5a5ed6c3..69aa0111 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -434,7 +434,7 @@
Info
Already donated
Disables future donation prompts
- Thanks for using WG Tunnel! If you can, please consider
+ Thanks for using WG Tunnel! If you are able, please consider
supporting the project
to keep it free and improving.
diff --git a/networkmonitor/src/main/java/com/zaneschepke/networkmonitor/AndroidNetworkMonitor.kt b/networkmonitor/src/main/java/com/zaneschepke/networkmonitor/AndroidNetworkMonitor.kt
index 3a97ef1f..a1126549 100644
--- a/networkmonitor/src/main/java/com/zaneschepke/networkmonitor/AndroidNetworkMonitor.kt
+++ b/networkmonitor/src/main/java/com/zaneschepke/networkmonitor/AndroidNetworkMonitor.kt
@@ -415,7 +415,8 @@ class AndroidNetworkMonitor(
if (vpnActive) underlyingCaps ?: defaultCaps else defaultCaps
// ensure validated internet connectivity
- // there is a known issue where Android will still report cellular connectivity if the
+ // there is a known issue where Android will still report cellular connectivity if
+ // the
// interface is not disabled and there is no connectivity (denoted by the '!')
val isValidated =
capsForValidation.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)