diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-08-25 12:06:51 +0200 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2023-09-07 09:05:53 +0200 |
| commit | 67d7cd4e52ef07d5bff65440081d61dceaf270b4 (patch) | |
| tree | 76328cc3e82367314810bdf2695d0ec1b9352e3e | |
| parent | 86c467fbe8cbad74b36a799e3a9922f330207d37 (diff) | |
| download | mullvadvpn-67d7cd4e52ef07d5bff65440081d61dceaf270b4.tar.xz mullvadvpn-67d7cd4e52ef07d5bff65440081d61dceaf270b4.zip | |
Move out of time behaviour to view model and compose screen
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 { |
