diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-06-11 18:49:45 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-06-17 10:14:37 +0000 |
| commit | a65f0a52464e9996a50d3147cb0267760baa5b5e (patch) | |
| tree | fb89a53df0c435b89a6f789763d53550ee453491 /android/src/main | |
| parent | 9269cf8893536e99201187b80bcd7e354eaeffab (diff) | |
| download | mullvadvpn-a65f0a52464e9996a50d3147cb0267760baa5b5e.tar.xz mullvadvpn-a65f0a52464e9996a50d3147cb0267760baa5b5e.zip | |
Create `AccountCache` helper class
Diffstat (limited to 'android/src/main')
3 files changed, 61 insertions, 24 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountCache.kt new file mode 100644 index 0000000000..af0e02da7a --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountCache.kt @@ -0,0 +1,55 @@ +package net.mullvad.mullvadvpn + +import kotlinx.coroutines.async +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope + +import org.joda.time.format.DateTimeFormat +import org.joda.time.DateTime + +import net.mullvad.mullvadvpn.model.Settings + +val EXPIRY_FORMAT = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss z") + +class AccountCache(val parentActivity: MainActivity) { + private var daemon = parentActivity.asyncDaemon + + var settings = parentActivity.asyncSettings + set(value) { + field = value + accountNumber = fetchAccountNumber() + accountExpiry = fetchAccountExpiry() + } + + var accountNumber = fetchAccountNumber() + private set + var accountExpiry = fetchAccountExpiry() + private set + + fun onDestroy() { + accountExpiry.cancel() + accountNumber.cancel() + } + + private fun fetchAccountNumber() = GlobalScope.async(Dispatchers.Default) { + settings.await().accountToken + } + + private fun fetchAccountExpiry() = GlobalScope.async(Dispatchers.Default) { + val accountNumber = accountNumber.await() + + if (accountNumber != null) { + val accountData = daemon.await().getAccountData(accountNumber) + val accountExpiry = accountData?.expiry + + if (accountExpiry != null) { + DateTime.parse(accountExpiry, EXPIRY_FORMAT) + } else { + null + } + } else { + null + } + } +} diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt index fb2a5d6d77..82db57c12e 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt @@ -36,6 +36,8 @@ class MainActivity : FragmentActivity() { val settings get() = runBlocking { asyncSettings.await() } + val accountCache = AccountCache(this) + var selectedRelayItem: RelayItem? = null private val restoreSelectedRelayListItemJob = restoreSelectedRelayListItem() @@ -81,6 +83,8 @@ class MainActivity : FragmentActivity() { } override fun onDestroy() { + accountCache.onDestroy() + restoreSelectedRelayListItemJob.cancel() waitForDaemonJob?.cancel() asyncSettings.cancel() diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt index 50fcaa8b0f..21c1cf3563 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt @@ -13,11 +13,8 @@ import org.joda.time.PeriodType import android.view.View import android.widget.TextView -val EXPIRY_FORMAT = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss z") - class RemainingTimeLabel(val parentActivity: MainActivity, val view: View) { - private val daemon = parentActivity.asyncDaemon - private val settings = parentActivity.asyncSettings + private val accountCache = parentActivity.accountCache private val expiredColor = parentActivity.getColor(R.color.red) private val normalColor = parentActivity.getColor(R.color.white60) @@ -26,33 +23,14 @@ class RemainingTimeLabel(val parentActivity: MainActivity, val view: View) { private val label = view.findViewById<TextView>(R.id.remaining_time) - private var accountExpiry = loadAccountExpiry() private var updateJob = updateLabel() fun onDestroy() { updateJob.cancel() - accountExpiry.cancel() - } - - private fun loadAccountExpiry() = GlobalScope.async(Dispatchers.Default) { - val accountToken = settings.await().accountToken - - if (accountToken != null) { - val accountData = daemon.await().getAccountData(accountToken) - val accountExpiry = accountData?.expiry - - if (accountExpiry != null) { - DateTime.parse(accountExpiry, EXPIRY_FORMAT) - } else { - null - } - } else { - null - } } private fun updateLabel() = GlobalScope.launch(Dispatchers.Main) { - val expiry = accountExpiry.await() + val expiry = accountCache.accountExpiry.await() if (expiry != null) { val remainingTime = Duration(DateTime.now(), expiry) |
