diff options
Diffstat (limited to 'android/src/main')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt index 2d6569d488..fd39203e46 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt @@ -5,15 +5,25 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import net.mullvad.mullvadvpn.R +import net.mullvad.mullvadvpn.model.TunnelState import net.mullvad.mullvadvpn.ui.widget.Button import net.mullvad.mullvadvpn.ui.widget.UrlButton import net.mullvad.mullvadvpn.util.JobTracker +import net.mullvad.talpid.tunnel.ActionAfterDisconnect class OutOfTimeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) { private val jobTracker = JobTracker() private lateinit var disconnectButton: Button + private var tunnelStateListener: Int? = null + + private var tunnelState: TunnelState = TunnelState.Disconnected() + set(value) { + field = value + updateDisconnectButton() + } + override fun onSafelyCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -41,11 +51,21 @@ class OutOfTimeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) } } + tunnelStateListener = connectionProxy.onStateChange.subscribe() { newState -> + jobTracker.newUiJob("updateTunnelState") { + tunnelState = newState + } + } + return view } override fun onSafelyDestroyView() { jobTracker.cancelAllJobs() + + tunnelStateListener?.let { id -> + connectionProxy.onStateChange.unsubscribe(id) + } } private fun showRedeemVoucherDialog() { @@ -55,4 +75,27 @@ class OutOfTimeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) RedeemVoucherDialogFragment().show(transaction, null) } + + private fun updateDisconnectButton() { + val state = tunnelState + + val showButton = when (state) { + is TunnelState.Disconnected -> false + is TunnelState.Connecting, is TunnelState.Connected -> true + is TunnelState.Disconnecting -> { + state.actionAfterDisconnect != ActionAfterDisconnect.Nothing + } + is TunnelState.Error -> state.errorState.isBlocking + } + + disconnectButton.apply { + if (showButton) { + setEnabled(true) + visibility = View.VISIBLE + } else { + setEnabled(false) + visibility = View.GONE + } + } + } } |
