summaryrefslogtreecommitdiffhomepage
path: root/android/lib/talpid
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2025-02-20 11:02:31 +0100
committerDavid Göransson <david.goransson@mullvad.net>2025-02-25 12:02:00 +0100
commitd270c0284510a3db952f2ce8cb7ead5a5d429ec5 (patch)
treeea2629cabc535895fdf5c76fe1566f6c611092a7 /android/lib/talpid
parent6e8b6594022c3b066c08cf70cb9dd2bac27b3c2f (diff)
downloadmullvadvpn-d270c0284510a3db952f2ce8cb7ead5a5d429ec5.tar.xz
mullvadvpn-d270c0284510a3db952f2ce8cb7ead5a5d429ec5.zip
Allow invalidating NetworkState cache
Diffstat (limited to 'android/lib/talpid')
-rw-r--r--android/lib/talpid/src/main/kotlin/net/mullvad/talpid/ConnectivityListener.kt15
1 files changed, 13 insertions, 2 deletions
diff --git a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/ConnectivityListener.kt b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/ConnectivityListener.kt
index fdee5039ad..2e35e99f0f 100644
--- a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/ConnectivityListener.kt
+++ b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/ConnectivityListener.kt
@@ -30,6 +30,7 @@ class ConnectivityListener(private val connectivityManager: ConnectivityManager)
get() = _isConnected.value
private lateinit var _currentNetworkState: StateFlow<NetworkState?>
+ private val resetNetworkState: Channel<Unit> = Channel()
// Used by JNI
val currentDefaultNetworkState: NetworkState?
@@ -44,8 +45,10 @@ class ConnectivityListener(private val connectivityManager: ConnectivityManager)
// the default network may fail if the network on Android 11
// https://issuetracker.google.com/issues/175055271?pli=1
_currentNetworkState =
- connectivityManager
- .defaultRawNetworkStateFlow()
+ merge(
+ connectivityManager.defaultRawNetworkStateFlow(),
+ resetNetworkState.receiveAsFlow().map { null },
+ )
.map { it?.toNetworkState() }
.onEach { notifyDefaultNetworkChange(it) }
.stateIn(scope, SharingStarted.Eagerly, null)
@@ -54,6 +57,14 @@ class ConnectivityListener(private val connectivityManager: ConnectivityManager)
hasInternetCapability()
.onEach { notifyConnectivityChange(it) }
.stateIn(scope, SharingStarted.Eagerly, false)
+
+ /**
+ * Invalidates the network state cache. E.g when the VPN is connected or disconnected, and we
+ * know the last known values not to be correct anymore.
+ */
+ fun invalidateNetworkStateCache() {
+ // TODO remove runBlocking
+ runBlocking { resetNetworkState.send(Unit) }
}
private fun LinkProperties.dnsServersWithoutFallback(): List<InetAddress> =