diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-02-28 22:21:21 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-03-18 13:31:35 +0000 |
| commit | afe04ac497a3fe2e6d826c5ff18c7759961ab1b9 (patch) | |
| tree | cc85d9e8175bc866f02bb362805099a00686f66f /android | |
| parent | eaef22396d9d4200d80ab89be68d381816abeefe (diff) | |
| download | mullvadvpn-afe04ac497a3fe2e6d826c5ff18c7759961ab1b9.tar.xz mullvadvpn-afe04ac497a3fe2e6d826c5ff18c7759961ab1b9.zip | |
Allow listening for `TunnelState` persistence
Diffstat (limited to 'android')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/Persistence.kt | 16 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/TunnelStateListener.kt | 36 |
2 files changed, 52 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/Persistence.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/Persistence.kt index c3d3be36c0..f1366abc66 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/Persistence.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/Persistence.kt @@ -1,6 +1,7 @@ package net.mullvad.mullvadvpn.service.tunnelstate import android.content.Context +import android.content.SharedPreferences.OnSharedPreferenceChangeListener import java.net.InetSocketAddress import net.mullvad.mullvadvpn.model.TunnelState import net.mullvad.talpid.net.Endpoint @@ -26,6 +27,21 @@ internal class Persistence(context: Context) { persistState(value) } + var listener: OnSharedPreferenceChangeListener? = null + set(value) { + if (value != field) { + if (field != null) { + sharedPreferences.unregisterOnSharedPreferenceChangeListener(field) + } + + if (value != null) { + sharedPreferences.registerOnSharedPreferenceChangeListener(value) + } + + field = value + } + } + private fun loadState(): TunnelState { val description = sharedPreferences.getString(KEY_TUNNEL_STATE, TunnelState.DISCONNECTED)!! diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/TunnelStateListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/TunnelStateListener.kt new file mode 100644 index 0000000000..7f7832d3e4 --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/TunnelStateListener.kt @@ -0,0 +1,36 @@ +package net.mullvad.mullvadvpn.service.tunnelstate + +import android.content.Context +import android.content.SharedPreferences +import android.content.SharedPreferences.OnSharedPreferenceChangeListener +import net.mullvad.mullvadvpn.model.TunnelState + +class TunnelStateListener(context: Context) { + private val persistence = Persistence(context) + + private val listener = object : OnSharedPreferenceChangeListener { + override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) { + state = persistence.state + } + } + + var state = persistence.state + private set(value) { + if (field != value) { + field = value + onStateChange?.invoke(value) + } + } + + var onStateChange: ((TunnelState) -> Unit)? = null + set(value) { + field = value + + if (value == null) { + persistence.listener = null + } else { + persistence.listener = listener + state = persistence.state + } + } +} |
