summaryrefslogtreecommitdiffhomepage
path: root/android/app
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2022-11-16 16:10:28 +0100
committerAlbin <albin@mullvad.net>2022-12-01 08:05:34 +0100
commitec41ff7423de7338e95923304d0e0cdc44fa816b (patch)
treedf7d8ef72656b4217245c3c23cc90edd2dec33e4 /android/app
parent1e7eabbc591ffe554b531c9655b032e5072d22a9 (diff)
downloadmullvadvpn-ec41ff7423de7338e95923304d0e0cdc44fa816b.tar.xz
mullvadvpn-ec41ff7423de7338e95923304d0e0cdc44fa816b.zip
Add transition on tunnel error caused by expiry
This commit adds an automatic transition to the out-of-time view if there's a tunnel state error caused by the account being expired.
Diffstat (limited to 'android/app')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt10
-rw-r--r--android/app/src/main/kotlin/net/mullvad/talpid/tunnel/ErrorStateCause.kt8
2 files changed, 17 insertions, 1 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt
index 79c0783fcd..ea048c4802 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt
@@ -44,6 +44,7 @@ import net.mullvad.mullvadvpn.util.JobTracker
import net.mullvad.mullvadvpn.util.appVersionCallbackFlow
import net.mullvad.mullvadvpn.util.callbackFlowFromNotifier
import net.mullvad.mullvadvpn.viewmodel.ConnectViewModel
+import net.mullvad.talpid.tunnel.ErrorStateCause
import org.joda.time.DateTime
import org.koin.android.ext.android.inject
import org.koin.androidx.viewmodel.ext.android.viewModel
@@ -235,6 +236,10 @@ class ConnectFragment : BaseFragment(), NavigationBarPainter {
actionButton.tunnelState = uiState
switchLocationButton.tunnelState = uiState
+
+ if (realState.isTunnelErrorStateDueToExpiredAccount()) {
+ openOutOfTimeScreen()
+ }
}
private fun openSwitchLocationScreen() {
@@ -275,4 +280,9 @@ class ConnectFragment : BaseFragment(), NavigationBarPainter {
openOutOfTimeScreen()
}
}
+
+ private fun TunnelState.isTunnelErrorStateDueToExpiredAccount(): Boolean {
+ return ((this as? TunnelState.Error)?.errorState?.cause as? ErrorStateCause.AuthFailed)
+ ?.isCausedByExpiredAccount() ?: false
+ }
}
diff --git a/android/app/src/main/kotlin/net/mullvad/talpid/tunnel/ErrorStateCause.kt b/android/app/src/main/kotlin/net/mullvad/talpid/tunnel/ErrorStateCause.kt
index f5b79bdfd5..b31f71f1fb 100644
--- a/android/app/src/main/kotlin/net/mullvad/talpid/tunnel/ErrorStateCause.kt
+++ b/android/app/src/main/kotlin/net/mullvad/talpid/tunnel/ErrorStateCause.kt
@@ -4,9 +4,15 @@ import android.os.Parcelable
import java.net.InetAddress
import kotlinx.parcelize.Parcelize
+private const val AUTH_FAILED_REASON_EXPIRED_ACCOUNT = "[EXPIRED_ACCOUNT]"
+
sealed class ErrorStateCause : Parcelable {
@Parcelize
- class AuthFailed(val reason: String?) : ErrorStateCause()
+ class AuthFailed(private val reason: String?) : ErrorStateCause() {
+ fun isCausedByExpiredAccount(): Boolean {
+ return reason == AUTH_FAILED_REASON_EXPIRED_ACCOUNT
+ }
+ }
@Parcelize
object Ipv6Unavailable : ErrorStateCause()