summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-01-13 16:18:47 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-01-14 12:56:15 +0000
commita08b0c117c4326912363c52bc7c920413052dca2 (patch)
tree9e14bf453d077f5e177e794161e9fc934482fca8 /android/src
parentb55f16ffa0c23688e41d48933627480519d87283 (diff)
downloadmullvadvpn-a08b0c117c4326912363c52bc7c920413052dca2.tar.xz
mullvadvpn-a08b0c117c4326912363c52bc7c920413052dca2.zip
Ignore service events if fragment is paused
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt82
1 files changed, 58 insertions, 24 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
index f983863e36..6e39393d0f 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
@@ -26,7 +26,10 @@ abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceA
enum class State {
Uninitialized,
Initialized,
- MissingConnection,
+ Active,
+ Paused,
+ LostConnection,
+ WaitingForReconnection,
}
private var state = State.Uninitialized
@@ -70,23 +73,26 @@ abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceA
settingsListener = serviceConnection.settingsListener
synchronized(this) {
- if (state == State.Uninitialized) {
- state = State.Initialized
+ when (state) {
+ State.Uninitialized -> state = State.Initialized
+ State.WaitingForReconnection -> state = State.Paused
}
}
}
override fun onNoServiceConnection() {
- GlobalScope.launch(Dispatchers.Main) {
- when (onNoService) {
- OnNoService.GoBack -> parentActivity.onBackPressed()
- OnNoService.GoToLaunchScreen -> parentActivity.returnToLaunchScreen()
- }
- }
-
synchronized(this) {
- if (state == State.Uninitialized) {
- state = State.MissingConnection
+ when (state) {
+ State.Uninitialized -> {
+ state = State.LostConnection
+ leaveFragment()
+ }
+ State.Active -> {
+ state = State.LostConnection
+ leaveFragment()
+ }
+ State.Paused -> state = State.WaitingForReconnection
+ else -> {}
}
}
}
@@ -97,10 +103,13 @@ abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceA
savedInstanceState: Bundle?
): View {
synchronized(this) {
- if (state == State.Initialized) {
- return onSafelyCreateView(inflater, container, savedInstanceState)
- } else {
- return inflater.inflate(R.layout.missing_service, container, false)
+ when (state) {
+ State.Initialized, State.Active, State.Paused -> {
+ return onSafelyCreateView(inflater, container, savedInstanceState)
+ }
+ State.Uninitialized, State.LostConnection, State.WaitingForReconnection -> {
+ return inflater.inflate(R.layout.missing_service, container, false)
+ }
}
}
}
@@ -109,24 +118,39 @@ abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceA
super.onResume()
synchronized(this) {
- if (state == State.Initialized) {
- onSafelyResume()
+ when (state) {
+ State.Initialized, State.Paused -> {
+ state = State.Active
+ onSafelyResume()
+ }
+ State.WaitingForReconnection -> {
+ state = State.LostConnection
+ leaveFragment()
+ }
+ else -> {}
}
}
}
override fun onSaveInstanceState(instanceState: Bundle) {
synchronized(this) {
- if (state == State.Initialized) {
- onSafelySaveInstanceState(instanceState)
+ when (state) {
+ State.Initialized, State.Paused, State.Active -> {
+ onSafelySaveInstanceState(instanceState)
+ }
+ else -> {}
}
}
}
override fun onPause() {
synchronized(this) {
- if (state == State.Initialized) {
- onSafelyPause()
+ when (state) {
+ State.Initialized, State.Active -> {
+ onSafelyPause()
+ state = State.Paused
+ }
+ else -> {}
}
}
@@ -135,8 +159,9 @@ abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceA
override fun onDestroyView() {
synchronized(this) {
- if (state == State.Initialized) {
- onSafelyDestroyView()
+ when (state) {
+ State.Initialized, State.Paused, State.Active -> onSafelyDestroyView()
+ else -> {}
}
}
@@ -160,4 +185,13 @@ abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceA
open fun onSafelyDestroyView() {
}
+
+ private fun leaveFragment() {
+ GlobalScope.launch(Dispatchers.Main) {
+ when (onNoService) {
+ OnNoService.GoBack -> parentActivity.onBackPressed()
+ OnNoService.GoToLaunchScreen -> parentActivity.returnToLaunchScreen()
+ }
+ }
+ }
}