summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-07 14:43:33 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-08 13:09:51 +0000
commitc0c4f4e91bcda78c541c10216299099f750f45d2 (patch)
tree60f07ccbcce4c7f7808eb4ce6b1ce7a0bcc1c0d5
parent4226406ec8f15c5dde88642fd9ebf69eab5a5f3b (diff)
downloadmullvadvpn-c0c4f4e91bcda78c541c10216299099f750f45d2.tar.xz
mullvadvpn-c0c4f4e91bcda78c541c10216299099f750f45d2.zip
Use `JobTracker` in `AccountCache`
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt59
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt2
3 files changed, 28 insertions, 35 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 88d0baadd7..7064b3c4b0 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/AccountCache.kt
@@ -1,23 +1,20 @@
package net.mullvad.mullvadvpn.dataproxy
-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 +26,33 @@ class AccountCache(val daemon: MullvadDaemon, val settingsListener: SettingsList
}
}
- fun refetch() {
- fetchJob?.cancel()
- fetchJob = fetchAccountExpiry()
+ fun fetchAccountExpiry() {
+ jobTracker.newBackgroundJob("fetch") {
+ 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()
+ }
+ }
+ }
}
fun onDestroy() {
settingsListener.accountNumberNotifier.unsubscribe(subscriptionId)
-
- fetchJob?.cancel()
+ jobTracker.cancelAllJobs()
}
private fun handleNewAccountNumber(newAccountNumber: String?) {
@@ -46,29 +61,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/ui/SettingsFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
index 55f8b24c89..d98ddb2f82 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
@@ -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)
}
}