summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-08 22:12:00 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-12 17:32:45 +0000
commit410671b838e861c98334da1350696be0409b66b4 (patch)
tree9c9895a2505346cfa367c426c4e83fe7115ea461 /android
parentcecbee01d0184b14c940f46b1fefbe8b59485073 (diff)
downloadmullvadvpn-410671b838e861c98334da1350696be0409b66b4.tar.xz
mullvadvpn-410671b838e861c98334da1350696be0409b66b4.zip
Open Out Of Time screen from the Login screen
Diffstat (limited to 'android')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt6
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt32
2 files changed, 28 insertions, 10 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt
index c11bf2d770..07fa7911fc 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/AccountCache.kt
@@ -5,9 +5,11 @@ 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) {
+ companion object {
+ public val EXPIRY_FORMAT = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss z")
+ }
+
private val jobTracker = JobTracker()
private val subscriptionId = settingsListener.accountNumberNotifier.subscribe { accountNumber ->
handleNewAccountNumber(accountNumber)
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
index 959431b85a..d59393f2a1 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
@@ -13,12 +13,15 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.model.GetAccountDataResult
+import net.mullvad.mullvadvpn.service.AccountCache
import net.mullvad.mullvadvpn.ui.widget.Button
import net.mullvad.mullvadvpn.util.JobTracker
+import org.joda.time.DateTime
class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
enum class LoginResult {
- ExistingAccount,
+ ExistingAccountWithTime,
+ ExistingAccountOutOfTime,
NewAccount;
}
@@ -61,7 +64,8 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
override fun onSafelyResume() {
jobTracker.newUiJob("advanceToNextScreen") {
when (loggedIn.await()) {
- LoginResult.ExistingAccount -> openNextScreen(ConnectFragment())
+ LoginResult.ExistingAccountWithTime -> openNextScreen(ConnectFragment())
+ LoginResult.ExistingAccountOutOfTime -> openNextScreen(OutOfTimeFragment())
LoginResult.NewAccount -> openNextScreen(WelcomeFragment())
}
}
@@ -121,20 +125,32 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
private fun performLogin(accountToken: String) = GlobalScope.launch(Dispatchers.Main) {
jobTracker.newUiJob("login") {
- val loginSucceeded = jobTracker.runOnBackground {
+ val loginResult = jobTracker.runOnBackground {
val accountDataResult = daemon.getAccountData(accountToken)
when (accountDataResult) {
- is GetAccountDataResult.Ok, is GetAccountDataResult.RpcError -> {
+ is GetAccountDataResult.Ok -> {
daemon.setAccount(accountToken)
- true
+
+ val expiryString = accountDataResult.accountData.expiry
+ val expiry = DateTime.parse(expiryString, AccountCache.EXPIRY_FORMAT)
+
+ if (expiry.isAfterNow()) {
+ LoginResult.ExistingAccountWithTime
+ } else {
+ LoginResult.ExistingAccountOutOfTime
+ }
+ }
+ is GetAccountDataResult.RpcError -> {
+ daemon.setAccount(accountToken)
+ LoginResult.ExistingAccountWithTime
}
- else -> false
+ else -> null
}
}
- if (loginSucceeded) {
- loggedIn("", LoginResult.ExistingAccount)
+ if (loginResult != null) {
+ loggedIn("", loginResult)
} else {
loginFailure(R.string.login_fail_description)
}