summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-04-01 22:14:02 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-04-27 16:21:51 +0000
commit193744db3f49d6d85953132194c14cef5026043b (patch)
tree46da32f0c2b2a922a97b6d6970dc45658e1e14be /android/src
parent89cd9276e346f893d876a0c57bfd0b022d816e42 (diff)
downloadmullvadvpn-193744db3f49d6d85953132194c14cef5026043b.tar.xz
mullvadvpn-193744db3f49d6d85953132194c14cef5026043b.zip
Refactor how buttons are updated
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt50
1 files changed, 34 insertions, 16 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt
index 7b2893623e..4f67bd8e1d 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt
@@ -22,6 +22,7 @@ import net.mullvad.mullvadvpn.model.TunnelState
import net.mullvad.mullvadvpn.ui.widget.Button
import net.mullvad.mullvadvpn.ui.widget.CopyableInformationView
import net.mullvad.mullvadvpn.ui.widget.InformationView
+import net.mullvad.mullvadvpn.util.JobTracker
import net.mullvad.mullvadvpn.util.TimeAgoFormatter
import org.joda.time.DateTime
import org.joda.time.DateTimeZone
@@ -36,15 +37,31 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
Verifying;
}
+ private val uiJobTracker = JobTracker()
+
private lateinit var timeAgoFormatter: TimeAgoFormatter
private var currentJob: Job? = null
private var updateViewsJob: Job? = null
- private var actionState = ActionState.Idle
private var tunnelStateListener: Int? = null
private var tunnelState: TunnelState = TunnelState.Disconnected()
private lateinit var urlController: BlockingController
+ private var actionState = ActionState.Idle
+ set(value) {
+ if (field != value) {
+ field = value
+ updateButtons()
+ }
+ }
+ private var hasConnectivity = true
+ set(value) {
+ if (field != value) {
+ field = value
+ updateButtons()
+ }
+ }
+
private var resetReconnectionExpectedJob: Job? = null
private var reconnectionExpected = false
set(value) {
@@ -138,6 +155,10 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
} else if (tunnelState is TunnelState.Connected) {
reconnectionExpected = false
}
+
+ hasConnectivity = uiState is TunnelState.Connected ||
+ uiState is TunnelState.Disconnected ||
+ (uiState is TunnelState.Error && !uiState.errorState.isBlocking)
}
updateViewsJob?.cancel()
@@ -161,6 +182,7 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
resetReconnectionExpectedJob?.cancel()
actionState = ActionState.Idle
urlController.onPause()
+ uiJobTracker.cancelAllJobs()
}
private fun updateViewJob() = GlobalScope.launch(Dispatchers.Main) {
@@ -170,9 +192,6 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
private fun updateViews() {
clearErrorMessage()
- setGenerateButton()
- setVerifyButton()
-
when (val keyState = keyStatusListener.keyStatus) {
null -> {
publicKey.information = null
@@ -204,6 +223,17 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
drawNoConnectionState()
}
+ private fun updateButtons() {
+ uiJobTracker.newJob("updateButtons", GlobalScope.launch(Dispatchers.Main) {
+ val isIdle = actionState == ActionState.Idle
+ val hasKey = keyStatusListener.keyStatus is KeygenEvent.NewKey
+
+ generateKeyButton.setEnabled(isIdle && hasConnectivity)
+ verifyKeyButton.setEnabled(isIdle && hasConnectivity)
+ manageKeysButton.setEnabled(hasConnectivity && hasKey)
+ })
+ }
+
private fun setStatusMessage(message: Int, color: Int) {
statusMessage.setText(message)
statusMessage.setTextColor(resources.getColor(color))
@@ -226,8 +256,6 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
}
private fun setGenerateButton() {
- generateKeyButton.setEnabled(actionState == ActionState.Idle)
-
if (keyStatusListener.keyStatus is KeygenEvent.NewKey) {
generateKeyButton.setText(R.string.wireguard_replace_key)
} else {
@@ -235,12 +263,6 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
}
}
- private fun setVerifyButton() {
- val keyState = keyStatusListener.keyStatus
-
- verifyKeyButton.setEnabled(actionState == ActionState.Idle && keyState?.failure() == null)
- }
-
private fun drawNoConnectionState() {
manageKeysButton.setEnabled(true)
@@ -248,14 +270,10 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
is TunnelState.Connecting, is TunnelState.Disconnecting -> {
if (!reconnectionExpected) {
setStatusMessage(R.string.wireguard_key_connectivity, R.color.red)
- generateKeyButton.setEnabled(false)
}
}
is TunnelState.Error -> {
setStatusMessage(R.string.wireguard_key_blocked_state_message, R.color.red)
- generateKeyButton.setEnabled(false)
- verifyKeyButton.setEnabled(false)
- manageKeysButton.setEnabled(false)
}
}
}