summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-06-11 18:49:45 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-06-17 10:14:37 +0000
commita65f0a52464e9996a50d3147cb0267760baa5b5e (patch)
treefb89a53df0c435b89a6f789763d53550ee453491
parent9269cf8893536e99201187b80bcd7e354eaeffab (diff)
downloadmullvadvpn-a65f0a52464e9996a50d3147cb0267760baa5b5e.tar.xz
mullvadvpn-a65f0a52464e9996a50d3147cb0267760baa5b5e.zip
Create `AccountCache` helper class
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/AccountCache.kt55
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/RemainingTimeLabel.kt26
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)