summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt (renamed from android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt)63
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt3
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt2
8 files changed, 38 insertions, 43 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ea74de674b..d0402955d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -51,6 +51,7 @@ Line wrap the file at 100 chars. Th
- Fix crash when requesting to connect from notification or quick-settings tile.
- Fix version update notifications not appearing.
- Fix UI losing any settings updates that happen after leaving the app and then coming back.
+- Fix account expiration date disappearing in some circumstances.
## [2020.4-beta4] - 2020-05-06
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt
index 88d0baadd7..c11bf2d770 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt
@@ -1,23 +1,18 @@
-package net.mullvad.mullvadvpn.dataproxy
+package net.mullvad.mullvadvpn.service
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.model.GetAccountDataResult
-import net.mullvad.mullvadvpn.service.MullvadDaemon
-import net.mullvad.mullvadvpn.service.SettingsListener
+import net.mullvad.mullvadvpn.util.JobTracker
import org.joda.time.DateTime
import org.joda.time.format.DateTimeFormat
val EXPIRY_FORMAT = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss z")
class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsListener) {
+ private val jobTracker = JobTracker()
private val subscriptionId = settingsListener.accountNumberNotifier.subscribe { accountNumber ->
handleNewAccountNumber(accountNumber)
}
- private var fetchJob: Job? = null
private var accountNumber: String? = null
private var accountExpiry: DateTime? = null
@@ -29,15 +24,33 @@ class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsList
}
}
- fun refetch() {
- fetchJob?.cancel()
- fetchJob = fetchAccountExpiry()
+ fun fetchAccountExpiry() {
+ accountNumber?.let { accountNumberUsedForFetch ->
+ jobTracker.newBackgroundJob("fetch") {
+ val accountData = accountNumberUsedForFetch?.let { account ->
+ val result = daemon.getAccountData(account)
+
+ when (result) {
+ is GetAccountDataResult.Ok -> result.accountData
+ else -> null
+ }
+ }
+
+ synchronized(this@AccountCache) {
+ if (this@AccountCache.accountNumber === accountNumberUsedForFetch) {
+ accountData?.expiry?.let { expiry ->
+ accountExpiry = DateTime.parse(expiry, EXPIRY_FORMAT)
+ notifyChange()
+ }
+ }
+ }
+ }
+ }
}
fun onDestroy() {
settingsListener.accountNumberNotifier.unsubscribe(subscriptionId)
-
- fetchJob?.cancel()
+ jobTracker.cancelAllJobs()
}
private fun handleNewAccountNumber(newAccountNumber: String?) {
@@ -46,29 +59,7 @@ class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsList
accountExpiry = null
notifyChange()
- refetch()
- }
- }
-
- private fun fetchAccountExpiry() = GlobalScope.launch(Dispatchers.Default) {
- val accountNumber = this@AccountCache.accountNumber
- val accountData = accountNumber?.let { account ->
- val result = daemon.getAccountData(account)
-
- when (result) {
- is GetAccountDataResult.Ok -> result.accountData
- else -> null
- }
- }
-
- synchronized(this@AccountCache) {
- if (this@AccountCache.accountNumber === accountNumber) {
- accountExpiry = accountData?.expiry?.let { expiry ->
- DateTime.parse(expiry, EXPIRY_FORMAT)
- }
-
- notifyChange()
- }
+ fetchAccountExpiry()
}
}
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 cf66311494..ae44ed7e8f 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -189,6 +189,8 @@ class MullvadVpnService : TalpidVpnService() {
}
}
+ val accountCache = AccountCache(daemon, settingsListener)
+
val connectionProxy = ConnectionProxy(this@MullvadVpnService, daemon).apply {
when (pendingAction) {
PendingAction.Connect -> {
@@ -209,6 +211,7 @@ class MullvadVpnService : TalpidVpnService() {
instance = ServiceInstance(
daemon,
+ accountCache,
connectionProxy,
connectivityListener,
locationInfoCache,
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt
index 09f30ffa9f..ceb7be792c 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/ServiceInstance.kt
@@ -4,12 +4,14 @@ import net.mullvad.talpid.ConnectivityListener
data class ServiceInstance(
val daemon: MullvadDaemon,
+ val accountCache: AccountCache,
val connectionProxy: ConnectionProxy,
val connectivityListener: ConnectivityListener,
val locationInfoCache: LocationInfoCache,
val settingsListener: SettingsListener
) {
fun onDestroy() {
+ accountCache.onDestroy()
connectionProxy.onDestroy()
locationInfoCache.onDestroy()
settingsListener.onDestroy()
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 df6398c887..1da6895fd9 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceConnection.kt
@@ -1,6 +1,5 @@
package net.mullvad.mullvadvpn.ui
-import net.mullvad.mullvadvpn.dataproxy.AccountCache
import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache
import net.mullvad.mullvadvpn.dataproxy.KeyStatusListener
import net.mullvad.mullvadvpn.dataproxy.RelayListListener
@@ -8,6 +7,7 @@ import net.mullvad.mullvadvpn.service.ServiceInstance
class ServiceConnection(private val service: ServiceInstance, val mainActivity: MainActivity) {
val daemon = service.daemon
+ val accountCache = service.accountCache
val connectionProxy = service.connectionProxy
val connectivityListener = service.connectivityListener
val locationInfoCache = service.locationInfoCache
@@ -15,7 +15,6 @@ class ServiceConnection(private val service: ServiceInstance, val mainActivity:
val keyStatusListener = KeyStatusListener(daemon)
val appVersionInfoCache = AppVersionInfoCache(mainActivity, daemon, settingsListener)
- val accountCache = AccountCache(daemon, settingsListener)
var relayListListener = RelayListListener(daemon, settingsListener)
init {
@@ -24,7 +23,6 @@ class ServiceConnection(private val service: ServiceInstance, val mainActivity:
}
fun onDestroy() {
- accountCache.onDestroy()
appVersionInfoCache.onDestroy()
keyStatusListener.onDestroy()
relayListListener.onDestroy()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
index 5408d7e825..2004ef8bf8 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
@@ -8,10 +8,10 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
-import net.mullvad.mullvadvpn.dataproxy.AccountCache
import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache
import net.mullvad.mullvadvpn.dataproxy.KeyStatusListener
import net.mullvad.mullvadvpn.dataproxy.RelayListListener
+import net.mullvad.mullvadvpn.service.AccountCache
import net.mullvad.mullvadvpn.service.ConnectionProxy
import net.mullvad.mullvadvpn.service.LocationInfoCache
import net.mullvad.mullvadvpn.service.MullvadDaemon
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
index 55f8b24c89..d3687af700 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
@@ -15,8 +15,8 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
-import net.mullvad.mullvadvpn.dataproxy.AccountCache
import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache
+import net.mullvad.mullvadvpn.service.AccountCache
import org.joda.time.DateTime
class SettingsFragment : ServiceAwareFragment() {
@@ -121,7 +121,7 @@ class SettingsFragment : ServiceAwareFragment() {
private fun configureListeners() {
accountCache?.apply {
- refetch()
+ fetchAccountExpiry()
onAccountDataChange = { account, expiry ->
updateAccountInfoJob?.cancel()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt
index fd2a0c9c96..a30b8b1dea 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt
@@ -52,7 +52,7 @@ class WelcomeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
jobTracker.newBackgroundJob("pollAccountData") {
while (true) {
- accountCache.refetch()
+ accountCache.fetchAccountExpiry()
delay(POLL_INTERVAL)
}
}