summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt43
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
+ }
+ }
+ }
}