diff options
| author | David Göransson <david.goransson@mullvad.net> | 2025-02-20 11:02:31 +0100 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2025-02-25 12:02:00 +0100 |
| commit | d270c0284510a3db952f2ce8cb7ead5a5d429ec5 (patch) | |
| tree | ea2629cabc535895fdf5c76fe1566f6c611092a7 /android/lib/talpid/src/main | |
| parent | 6e8b6594022c3b066c08cf70cb9dd2bac27b3c2f (diff) | |
| download | mullvadvpn-d270c0284510a3db952f2ce8cb7ead5a5d429ec5.tar.xz mullvadvpn-d270c0284510a3db952f2ce8cb7ead5a5d429ec5.zip | |
Allow invalidating NetworkState cache
Diffstat (limited to 'android/lib/talpid/src/main')
| -rw-r--r-- | android/lib/talpid/src/main/kotlin/net/mullvad/talpid/ConnectivityListener.kt | 15 |
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> = |
