diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-05-07 14:43:33 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-05-08 13:09:51 +0000 |
| commit | c0c4f4e91bcda78c541c10216299099f750f45d2 (patch) | |
| tree | 60f07ccbcce4c7f7808eb4ce6b1ce7a0bcc1c0d5 /android/src/main | |
| parent | 4226406ec8f15c5dde88642fd9ebf69eab5a5f3b (diff) | |
| download | mullvadvpn-c0c4f4e91bcda78c541c10216299099f750f45d2.tar.xz mullvadvpn-c0c4f4e91bcda78c541c10216299099f750f45d2.zip | |
Use `JobTracker` in `AccountCache`
Diffstat (limited to 'android/src/main')
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) } } |
