summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-28 22:21:21 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-03-18 13:31:35 +0000
commitafe04ac497a3fe2e6d826c5ff18c7759961ab1b9 (patch)
treecc85d9e8175bc866f02bb362805099a00686f66f /android
parenteaef22396d9d4200d80ab89be68d381816abeefe (diff)
downloadmullvadvpn-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.kt16
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/tunnelstate/TunnelStateListener.kt36
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
+ }
+ }
+}