summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-04 16:40:50 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-04 16:40:50 -0300
commit2e3d52901f7304387c18ce28cecba06f5d8af5f0 (patch)
treea662573cc50bfa556533361e38853c5dd6851c4e /android/src
parent2587738b0fdccae15d0c850dba494a703f102c7f (diff)
parent4ed07834f6a90f2026e0e4b186d1bde4e87d3d71 (diff)
downloadmullvadvpn-2e3d52901f7304387c18ce28cecba06f5d8af5f0.tar.xz
mullvadvpn-2e3d52901f7304387c18ce28cecba06f5d8af5f0.zip
Merge branch 'fix-start-and-connect'
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt14
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt26
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt15
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt2
4 files changed, 25 insertions, 32 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt
index 6b4ad64a72..88d0baadd7 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt
@@ -12,7 +12,11 @@ import org.joda.time.format.DateTimeFormat
val EXPIRY_FORMAT = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss z")
-class AccountCache(val settingsListener: SettingsListener, val daemon: MullvadDaemon) {
+class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsListener) {
+ private val subscriptionId = settingsListener.accountNumberNotifier.subscribe { accountNumber ->
+ handleNewAccountNumber(accountNumber)
+ }
+
private var fetchJob: Job? = null
private var accountNumber: String? = null
private var accountExpiry: DateTime? = null
@@ -25,19 +29,13 @@ class AccountCache(val settingsListener: SettingsListener, val daemon: MullvadDa
}
}
- init {
- settingsListener.onAccountNumberChange = { accountNumber ->
- handleNewAccountNumber(accountNumber)
- }
- }
-
fun refetch() {
fetchJob?.cancel()
fetchJob = fetchAccountExpiry()
}
fun onDestroy() {
- settingsListener.onAccountNumberChange = null
+ settingsListener.accountNumberNotifier.unsubscribe(subscriptionId)
fetchJob?.cancel()
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
index b8cfe4a828..7e5318c892 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -90,12 +90,7 @@ class MullvadVpnService : TalpidVpnService() {
val action = intent?.action
if (action == VpnService.SERVICE_INTERFACE || action == KEY_CONNECT_ACTION) {
- if (loggedIn) {
- pendingAction = PendingAction.Connect
- } else {
- pendingAction = null
- openUi()
- }
+ pendingAction = PendingAction.Connect
} else if (action == KEY_DISCONNECT_ACTION) {
pendingAction = PendingAction.Disconnect
}
@@ -152,10 +147,6 @@ class MullvadVpnService : TalpidVpnService() {
prepareFiles()
val daemon = MullvadDaemon(this@MullvadVpnService).apply {
- onSettingsChange.subscribe { settings ->
- loggedIn = settings?.accountToken != null
- }
-
onDaemonStopped = {
instance = null
@@ -195,9 +186,21 @@ class MullvadVpnService : TalpidVpnService() {
}
private fun setUpInstance(daemon: MullvadDaemon, settings: Settings) {
+ val settingsListener = SettingsListener(daemon, settings).apply {
+ accountNumberNotifier.subscribe { accountNumber ->
+ loggedIn = accountNumber != null
+ }
+ }
+
val connectionProxy = ConnectionProxy(this@MullvadVpnService, daemon).apply {
when (pendingAction) {
- PendingAction.Connect -> connect()
+ PendingAction.Connect -> {
+ if (loggedIn) {
+ connect()
+ } else {
+ openUi()
+ }
+ }
PendingAction.Disconnect -> disconnect()
null -> {}
}
@@ -206,7 +209,6 @@ class MullvadVpnService : TalpidVpnService() {
}
val locationInfoCache = LocationInfoCache(daemon, connectionProxy, connectivityListener)
- val settingsListener = SettingsListener(daemon, settings)
instance = ServiceInstance(
daemon,
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt
index 2441e9f2cc..3ba8b058a7 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/SettingsListener.kt
@@ -17,13 +17,7 @@ class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings)
maybeSettings?.let { settings -> handleNewSettings(settings) }
}
- var onAccountNumberChange: ((String?) -> Unit)? = null
- set(value) {
- synchronized(this) {
- field = value
- value?.invoke(settings.accountToken)
- }
- }
+ val accountNumberNotifier = EventNotifier(initialSettings.accountToken)
var onRelaySettingsChange: ((RelaySettings?) -> Unit)? = null
set(value) {
@@ -34,10 +28,9 @@ class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings)
}
fun onDestroy() {
- if (listenerId != -1) {
- daemon.onSettingsChange.unsubscribe(listenerId)
- }
+ daemon.onSettingsChange.unsubscribe(listenerId)
+ accountNumberNotifier.unsubscribeAll()
settingsNotifier.unsubscribeAll()
}
@@ -52,7 +45,7 @@ class SettingsListener(val daemon: MullvadDaemon, val initialSettings: Settings)
private fun handleNewSettings(newSettings: Settings) {
synchronized(this) {
if (settings.accountToken != newSettings.accountToken) {
- onAccountNumberChange?.invoke(newSettings.accountToken)
+ accountNumberNotifier.notify(newSettings.accountToken)
}
if (settings.relaySettings != newSettings.relaySettings) {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt
index 5e7272ebcf..216b1b0607 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt
@@ -15,7 +15,7 @@ class ServiceConnection(private val service: ServiceInstance, val mainActivity:
val keyStatusListener = KeyStatusListener(daemon)
val appVersionInfoCache = AppVersionInfoCache(mainActivity, daemon, settingsListener)
- val accountCache = AccountCache(settingsListener, daemon)
+ val accountCache = AccountCache(daemon, settingsListener)
var relayListListener = RelayListListener(daemon, settingsListener)
init {