summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-08-25 12:06:51 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-09-07 09:05:53 +0200
commit67d7cd4e52ef07d5bff65440081d61dceaf270b4 (patch)
tree76328cc3e82367314810bdf2695d0ec1b9352e3e
parent86c467fbe8cbad74b36a799e3a9922f330207d37 (diff)
downloadmullvadvpn-67d7cd4e52ef07d5bff65440081d61dceaf270b4.tar.xz
mullvadvpn-67d7cd4e52ef07d5bff65440081d61dceaf270b4.zip
Move out of time behaviour to view model and compose screen
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt12
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/ConnectFragment.kt22
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModel.kt12
3 files changed, 26 insertions, 20 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt
index 0a50e339a6..ac9ea5cf1c 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/ConnectScreen.kt
@@ -74,13 +74,19 @@ fun ConnectScreen(
onSwitchLocationClick: () -> Unit = {},
onToggleTunnelInfo: () -> Unit = {},
onUpdateVersionClick: () -> Unit = {},
- onManageAccountClick: () -> Unit = {}
+ onManageAccountClick: () -> Unit = {},
+ onOpenOutOfTimeScreen: () -> Unit = {}
) {
val context = LocalContext.current
LaunchedEffect(key1 = Unit) {
viewActions.collect { viewAction ->
- if (viewAction is ConnectViewModel.ViewAction.OpenAccountManagementPageInBrowser) {
- context.openAccountPageInBrowser(viewAction.token)
+ when (viewAction) {
+ is ConnectViewModel.ViewAction.OpenAccountManagementPageInBrowser -> {
+ context.openAccountPageInBrowser(viewAction.token)
+ }
+ is ConnectViewModel.ViewAction.OpenOutOfTimeView -> {
+ onOpenOutOfTimeScreen()
+ }
}
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/ConnectFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/ConnectFragment.kt
index 7bd3c56edd..d83941e4de 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/ConnectFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/ConnectFragment.kt
@@ -24,7 +24,6 @@ import net.mullvad.mullvadvpn.ui.NavigationBarPainter
import net.mullvad.mullvadvpn.ui.paintNavigationBar
import net.mullvad.mullvadvpn.ui.widget.HeaderBar
import net.mullvad.mullvadvpn.viewmodel.ConnectViewModel
-import net.mullvad.talpid.tunnel.ErrorStateCause
import org.koin.androidx.viewmodel.ext.android.viewModel
class ConnectFragment : BaseFragment(), NavigationBarPainter {
@@ -66,7 +65,8 @@ class ConnectFragment : BaseFragment(), NavigationBarPainter {
onSwitchLocationClick = { openSwitchLocationScreen() },
onToggleTunnelInfo = connectViewModel::toggleTunnelInfoExpansion,
onUpdateVersionClick = { openDownloadUrl() },
- onManageAccountClick = connectViewModel::onManageAccountClick
+ onManageAccountClick = connectViewModel::onManageAccountClick,
+ onOpenOutOfTimeScreen = ::openOutOfTimeScreen
)
}
}
@@ -103,10 +103,6 @@ class ConnectFragment : BaseFragment(), NavigationBarPainter {
private fun updateTunnelState(realState: TunnelState) {
headerBar.tunnelState = realState
-
- if (realState.isTunnelErrorStateDueToExpiredAccount()) {
- openOutOfTimeScreen()
- }
}
private fun openSwitchLocationScreen() {
@@ -124,17 +120,9 @@ class ConnectFragment : BaseFragment(), NavigationBarPainter {
}
private fun openOutOfTimeScreen() {
- jobTracker.newUiJob("openOutOfTimeScreen") {
- parentFragmentManager.beginTransaction().apply {
- replace(R.id.main_fragment, OutOfTimeFragment())
- commitAllowingStateLoss()
- }
+ parentFragmentManager.beginTransaction().apply {
+ replace(R.id.main_fragment, OutOfTimeFragment())
+ commitAllowingStateLoss()
}
}
-
- 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/mullvadvpn/viewmodel/ConnectViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModel.kt
index 3df2ea3a07..e6256e2be6 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModel.kt
@@ -40,6 +40,7 @@ import net.mullvad.mullvadvpn.util.combine
import net.mullvad.mullvadvpn.util.toInAddress
import net.mullvad.mullvadvpn.util.toOutAddress
import net.mullvad.talpid.tunnel.ActionAfterDisconnect
+import net.mullvad.talpid.tunnel.ErrorStateCause
import org.joda.time.DateTime
@OptIn(FlowPreview::class)
@@ -83,6 +84,9 @@ class ConnectViewModel(
tunnelRealState,
accountExpiry,
isTunnelInfoExpanded ->
+ if (tunnelRealState.isTunnelErrorStateDueToExpiredAccount()) {
+ _viewActions.tryEmit(ViewAction.OpenOutOfTimeView)
+ }
ConnectUiState(
location =
when (tunnelRealState) {
@@ -178,6 +182,12 @@ class ConnectViewModel(
return this.date()?.isBefore(threeDaysFromNow) == true
}
+ private fun TunnelState.isTunnelErrorStateDueToExpiredAccount(): Boolean {
+ return ((this as? TunnelState.Error)?.errorState?.cause as? ErrorStateCause.AuthFailed)
+ ?.isCausedByExpiredAccount()
+ ?: false
+ }
+
fun toggleTunnelInfoExpansion() {
_isTunnelInfoExpanded.value = _isTunnelInfoExpanded.value.not()
}
@@ -210,6 +220,8 @@ class ConnectViewModel(
sealed interface ViewAction {
data class OpenAccountManagementPageInBrowser(val token: String) : ViewAction
+
+ data object OpenOutOfTimeView : ViewAction
}
companion object {