summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-26 11:55:25 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-05-26 11:55:25 -0300
commit0c2e7880bea066ff24b85a113a95c6da9a4fbf38 (patch)
treee8b98322b3c976f02fcb37815e24e1b02154b078 /android/src/main
parentf76c2ae1b9722a4f9f1157b610324a366448093a (diff)
parentbac32db084e2572fbf529d0061759a4b062b79e6 (diff)
downloadmullvadvpn-0c2e7880bea066ff24b85a113a95c6da9a4fbf38.tar.xz
mullvadvpn-0c2e7880bea066ff24b85a113a95c6da9a4fbf38.zip
Merge branch 'use-job-tracker-in-fragments'
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt29
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt12
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt37
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt16
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt11
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt9
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt22
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SelectLocationFragment.kt31
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt9
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt5
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt31
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt7
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt5
14 files changed, 74 insertions, 154 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt
index 01615b7d7a..b13863f108 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt
@@ -6,10 +6,6 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import java.text.DateFormat
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.ui.widget.CopyableInformationView
import net.mullvad.mullvadvpn.ui.widget.InformationView
@@ -19,8 +15,6 @@ class AccountFragment : ServiceDependentFragment(OnNoService.GoBack) {
private lateinit var accountExpiryView: InformationView
private lateinit var accountNumberView: CopyableInformationView
- private var updateViewJob: Job? = null
-
override fun onSafelyCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -42,10 +36,8 @@ class AccountFragment : ServiceDependentFragment(OnNoService.GoBack) {
override fun onSafelyResume() {
accountCache.onAccountDataChange = { accountNumber, accountExpiry ->
- updateViewJob = updateView(accountNumber, accountExpiry)
-
- if (accountExpiry == null) {
- accountCache.fetchAccountExpiry()
+ jobTracker.newUiJob("updateView") {
+ updateView(accountNumber, accountExpiry)
}
}
}
@@ -54,10 +46,15 @@ class AccountFragment : ServiceDependentFragment(OnNoService.GoBack) {
accountCache.onAccountDataChange = null
}
- private fun updateView(accountNumber: String?, accountExpiry: DateTime?) =
- GlobalScope.launch(Dispatchers.Main) {
+ private fun updateView(accountNumber: String?, accountExpiry: DateTime?) {
accountNumberView.information = accountNumber
- accountExpiryView.information = accountExpiry?.let { expiry -> formatExpiry(expiry) }
+
+ if (accountExpiry != null) {
+ accountExpiryView.information = formatExpiry(accountExpiry)
+ } else {
+ accountExpiryView.information = null
+ accountCache.fetchAccountExpiry()
+ }
}
private fun formatExpiry(expiry: DateTime): String {
@@ -73,8 +70,10 @@ class AccountFragment : ServiceDependentFragment(OnNoService.GoBack) {
goToLoginScreen()
}
- private fun clearAccountNumber() = GlobalScope.launch(Dispatchers.Default) {
- daemon.setAccount(null)
+ private fun clearAccountNumber() {
+ jobTracker.newBackgroundJob("clearAccountNumber") {
+ daemon.setAccount(null)
+ }
}
private fun clearBackStack() {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt
index e070f5443c..1a43098547 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt
@@ -6,10 +6,6 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.model.Settings
@@ -20,8 +16,6 @@ class AdvancedFragment : ServiceDependentFragment(OnNoService.GoBack) {
private lateinit var wireguardMtuInput: CellInput
private lateinit var wireguardKeysMenu: View
- private var updateUiJob: Job? = null
-
override fun onSafelyCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -37,7 +31,7 @@ class AdvancedFragment : ServiceDependentFragment(OnNoService.GoBack) {
CellInput(view.findViewById(R.id.wireguard_mtu_input), MIN_MTU_VALUE, MAX_MTU_VALUE)
wireguardMtuInput.onSubmit = { mtu ->
- GlobalScope.launch(Dispatchers.Default) {
+ jobTracker.newBackgroundJob("updateMtu") {
daemon.setWireguardMtu(mtu)
}
}
@@ -60,8 +54,7 @@ class AdvancedFragment : ServiceDependentFragment(OnNoService.GoBack) {
}
private fun updateUi(settings: Settings) {
- updateUiJob?.cancel()
- updateUiJob = GlobalScope.launch(Dispatchers.Main) {
+ jobTracker.newUiJob("updateUi") {
if (!wireguardMtuInput.hasFocus) {
wireguardMtuInput.value = settings.tunnelOptions.wireguard.mtu
}
@@ -70,7 +63,6 @@ class AdvancedFragment : ServiceDependentFragment(OnNoService.GoBack) {
override fun onSafelyDestroyView() {
settingsListener.unsubscribe(this)
- updateUiJob?.cancel()
}
private fun openSubFragment(fragment: Fragment) {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt
index 3adf175dc3..6b8fe59409 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectFragment.kt
@@ -5,22 +5,14 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
-import net.mullvad.mullvadvpn.model.KeygenEvent
import net.mullvad.mullvadvpn.model.TunnelState
-import net.mullvad.mullvadvpn.util.JobTracker
import org.joda.time.DateTime
val KEY_IS_TUNNEL_INFO_EXPANDED = "is_tunnel_info_expanded"
class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
- private val jobTracker = JobTracker()
-
private lateinit var actionButton: ConnectActionButton
private lateinit var switchLocationButton: SwitchLocationButton
private lateinit var headerBar: HeaderBar
@@ -28,10 +20,6 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
private lateinit var status: ConnectionStatus
private lateinit var locationInfo: LocationInfo
- private lateinit var updateKeyStatusJob: Job
- private var updateLocationInfoJob: Job? = null
- private var updateTunnelStateJob: Job? = null
-
private var isTunnelInfoExpanded = false
override fun onCreate(savedInstanceState: Bundle?) {
@@ -71,8 +59,6 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
switchLocationButton = SwitchLocationButton(view, resources)
switchLocationButton.onClick = { openSwitchLocationScreen() }
- updateKeyStatusJob = updateKeyStatus(keyStatusListener.keyStatus)
-
return view
}
@@ -82,13 +68,13 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
notificationBanner.onResume()
keyStatusListener.onKeyStatusChange.subscribe(this) { keyStatus ->
- updateKeyStatusJob.cancel()
- updateKeyStatusJob = updateKeyStatus(keyStatus)
+ jobTracker.newUiJob("updateKeyStatus") {
+ notificationBanner.keyState = keyStatus
+ }
}
locationInfoCache.onNewLocation = { location ->
- updateLocationInfoJob?.cancel()
- updateLocationInfoJob = GlobalScope.launch(Dispatchers.Main) {
+ jobTracker.newUiJob("updateLocationInfo") {
locationInfo.location = location
}
}
@@ -99,8 +85,9 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
}
connectionProxy.onUiStateChange.subscribe(this) { uiState ->
- updateTunnelStateJob?.cancel()
- updateTunnelStateJob = updateTunnelState(uiState, connectionProxy.state)
+ jobTracker.newUiJob("updateTunnelState") {
+ updateTunnelState(uiState, connectionProxy.state)
+ }
}
accountCache.onAccountDataChange = { _, expiry ->
@@ -120,15 +107,12 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
keyStatusListener.onKeyStatusChange.unsubscribe(this)
connectionProxy.onUiStateChange.unsubscribe(this)
- updateLocationInfoJob?.cancel()
- updateTunnelStateJob?.cancel()
notificationBanner.onPause()
isTunnelInfoExpanded = locationInfo.isTunnelInfoExpanded
}
override fun onSafelyDestroyView() {
- jobTracker.cancelAllJobs()
switchLocationButton.onDestroy()
}
@@ -137,8 +121,7 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
state.putBoolean(KEY_IS_TUNNEL_INFO_EXPANDED, isTunnelInfoExpanded)
}
- private fun updateTunnelState(uiState: TunnelState, realState: TunnelState) =
- GlobalScope.launch(Dispatchers.Main) {
+ private fun updateTunnelState(uiState: TunnelState, realState: TunnelState) {
notificationBanner.tunnelState = realState
locationInfo.state = realState
headerBar.setState(realState)
@@ -148,10 +131,6 @@ class ConnectFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
switchLocationButton.state = uiState
}
- private fun updateKeyStatus(keyStatus: KeygenEvent?) = GlobalScope.launch(Dispatchers.Main) {
- notificationBanner.keyState = keyStatus
- }
-
private fun openSwitchLocationScreen() {
fragmentManager?.beginTransaction()?.apply {
setCustomAnimations(
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt
index d4c73795c5..99c1c4561e 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LaunchFragment.kt
@@ -5,17 +5,11 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.coroutines.CompletableDeferred
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
class LaunchFragment : ServiceAwareFragment() {
private val hasAccountToken = CompletableDeferred<Boolean>()
- private lateinit var advanceToNextScreenJob: Job
-
override fun onNewServiceConnection(serviceConnection: ServiceConnection) {
hasAccountToken.complete(serviceConnection.settingsListener.settings.accountToken != null)
}
@@ -36,15 +30,19 @@ class LaunchFragment : ServiceAwareFragment() {
override fun onResume() {
super.onResume()
- advanceToNextScreenJob = advanceToNextScreen()
+
+ jobTracker.newUiJob("advanceToNextScreen") {
+ advanceToNextScreen()
+ }
}
override fun onPause() {
- advanceToNextScreenJob.cancel()
+ jobTracker.cancelJob("advanceToNextScreen")
+
super.onPause()
}
- private fun advanceToNextScreen() = GlobalScope.launch(Dispatchers.Main) {
+ private suspend fun advanceToNextScreen() {
if (hasAccountToken.await()) {
advanceToConnectScreen()
} else {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
index d59393f2a1..fdec6efd12 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
@@ -7,15 +7,11 @@ import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import kotlinx.coroutines.CompletableDeferred
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.model.GetAccountDataResult
import net.mullvad.mullvadvpn.service.AccountCache
import net.mullvad.mullvadvpn.ui.widget.Button
-import net.mullvad.mullvadvpn.util.JobTracker
import org.joda.time.DateTime
class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
@@ -32,7 +28,6 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
private lateinit var loginFailStatus: View
private lateinit var accountInput: AccountInput
- private val jobTracker = JobTracker()
private val loggedIn = CompletableDeferred<LoginResult>()
override fun onSafelyCreateView(
@@ -77,10 +72,6 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
jobTracker.cancelJob("advanceToNextScreen")
}
- override fun onSafelyDestroyView() {
- jobTracker.cancelAllJobs()
- }
-
private suspend fun createAccount() {
title.setText(R.string.logging_in_title)
subtitle.setText(R.string.creating_new_account)
@@ -123,7 +114,7 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
}
}
- private fun performLogin(accountToken: String) = GlobalScope.launch(Dispatchers.Main) {
+ private fun performLogin(accountToken: String) {
jobTracker.newUiJob("login") {
val loginResult = jobTracker.runOnBackground {
val accountDataResult = daemon.getAccountData(accountToken)
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 a89d4e45c5..8c584b7404 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/OutOfTimeFragment.kt
@@ -9,13 +9,10 @@ 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
import org.joda.time.DateTime
class OutOfTimeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
- private val jobTracker = JobTracker()
-
private lateinit var headerBar: HeaderBar
private lateinit var buyCreditButton: UrlButton
@@ -87,7 +84,6 @@ class OutOfTimeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen)
}
override fun onSafelyDestroyView() {
- jobTracker.cancelAllJobs()
connectionProxy.onStateChange.unsubscribe(this)
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt
index 10b281c7f3..787ddf4d9e 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt
@@ -4,10 +4,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.model.Settings
@@ -15,8 +11,6 @@ class PreferencesFragment : ServiceDependentFragment(OnNoService.GoBack) {
private lateinit var allowLanToggle: CellSwitch
private lateinit var autoConnectToggle: CellSwitch
- private var updateUiJob: Job? = null
-
override fun onSafelyCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -58,8 +52,7 @@ class PreferencesFragment : ServiceDependentFragment(OnNoService.GoBack) {
}
private fun updateUi(settings: Settings) {
- updateUiJob?.cancel()
- updateUiJob = GlobalScope.launch(Dispatchers.Main) {
+ jobTracker.newUiJob("updateUi") {
allowLanToggle.state = boolToSwitchState(settings.allowLan)
autoConnectToggle.state = boolToSwitchState(settings.autoConnect)
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt
index caccbaa2fc..b106e2925b 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt
@@ -13,14 +13,13 @@ import android.widget.EditText
import android.widget.TextView
import android.widget.ViewSwitcher
import kotlinx.coroutines.CompletableDeferred
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.dataproxy.MullvadProblemReport
+import net.mullvad.mullvadvpn.util.JobTracker
class ProblemReportFragment : Fragment() {
+ private val jobTracker = JobTracker()
+
private lateinit var problemReport: MullvadProblemReport
private lateinit var bodyContainer: ViewSwitcher
@@ -40,8 +39,6 @@ class ProblemReportFragment : Fragment() {
private lateinit var editMessageButton: Button
private lateinit var tryAgainButton: Button
- private var sendReportJob: Job? = null
-
override fun onAttach(context: Context) {
super.onAttach(context)
@@ -80,8 +77,9 @@ class ProblemReportFragment : Fragment() {
tryAgainButton = view.findViewById<Button>(R.id.try_again_button)
sendButton.setOnClickListener {
- sendReportJob?.cancel()
- sendReportJob = sendReport(true)
+ jobTracker.newUiJob("sendReport") {
+ sendReport(true)
+ }
}
editMessageButton.setOnClickListener {
@@ -89,7 +87,9 @@ class ProblemReportFragment : Fragment() {
}
tryAgainButton.setOnClickListener {
- sendReportJob = sendReport(false)
+ jobTracker.newUiJob("sendReport") {
+ sendReport(false)
+ }
}
userEmailInput.setText(problemReport.userEmail)
@@ -102,8 +102,6 @@ class ProblemReportFragment : Fragment() {
}
override fun onDestroyView() {
- sendReportJob?.cancel()
-
problemReport.userEmail = userEmailInput.text.toString()
problemReport.userMessage = userMessageInput.text.toString()
problemReport.deleteReportFile()
@@ -111,7 +109,7 @@ class ProblemReportFragment : Fragment() {
super.onDestroyView()
}
- private fun sendReport(shouldConfirmNoEmail: Boolean) = GlobalScope.launch(Dispatchers.Main) {
+ private suspend fun sendReport(shouldConfirmNoEmail: Boolean) {
val userEmail = userEmailInput.text.trim().toString()
problemReport.userEmail = userEmail
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SelectLocationFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SelectLocationFragment.kt
index 8b5f8e8c0a..5b95c9d296 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SelectLocationFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SelectLocationFragment.kt
@@ -9,10 +9,6 @@ import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.ViewSwitcher
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.model.Constraint
import net.mullvad.mullvadvpn.model.KeygenEvent
@@ -28,16 +24,19 @@ class SelectLocationFragment : ServiceDependentFragment(OnNoService.GoToLaunchSc
private lateinit var relayListAdapter: RelayListAdapter
private lateinit var relayListContainer: ViewSwitcher
- private var updateRelayListJob: Job? = null
-
override fun onAttach(context: Context) {
super.onAttach(context)
relayListAdapter = RelayListAdapter(context.resources).apply {
onSelect = { relayItem ->
- updateLocationConstraint(relayItem)
- maybeConnect()
- close()
+ jobTracker.newBackgroundJob("selectRelay") {
+ updateLocationConstraint(relayItem)
+ maybeConnect()
+
+ jobTracker.newUiJob("close") {
+ close()
+ }
+ }
}
}
}
@@ -61,7 +60,9 @@ class SelectLocationFragment : ServiceDependentFragment(OnNoService.GoToLaunchSc
override fun onSafelyResume() {
relayListListener.onRelayListChange = { relayList, selectedItem ->
- updateRelayListJob = updateRelayList(relayList, selectedItem)
+ jobTracker.newUiJob("updateRelayList") {
+ updateRelayList(relayList, selectedItem)
+ }
}
}
@@ -69,10 +70,6 @@ class SelectLocationFragment : ServiceDependentFragment(OnNoService.GoToLaunchSc
relayListListener.onRelayListChange = null
}
- override fun onSafelyDestroyView() {
- updateRelayListJob?.cancel()
- }
-
fun close() {
activity?.onBackPressed()
}
@@ -86,16 +83,14 @@ class SelectLocationFragment : ServiceDependentFragment(OnNoService.GoToLaunchSc
}
}
- private fun updateLocationConstraint(relayItem: RelayItem?) =
- GlobalScope.launch(Dispatchers.Default) {
+ private fun updateLocationConstraint(relayItem: RelayItem?) {
val constraint: Constraint<LocationConstraint> =
relayItem?.run { Constraint.Only(location) } ?: Constraint.Any()
daemon.updateRelaySettings(RelaySettingsUpdate.Normal(RelayConstraintsUpdate(constraint)))
}
- private fun updateRelayList(relayList: RelayList, selectedItem: RelayItem?) =
- GlobalScope.launch(Dispatchers.Main) {
+ private fun updateRelayList(relayList: RelayList, selectedItem: RelayItem?) {
relayListAdapter.onRelayListChange(relayList, selectedItem)
if (relayList.countries.isEmpty()) {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt
index b3e48acd06..648215527c 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt
@@ -2,8 +2,11 @@ package net.mullvad.mullvadvpn.ui
import android.content.Context
import android.support.v4.app.Fragment
+import net.mullvad.mullvadvpn.util.JobTracker
abstract class ServiceAwareFragment : Fragment() {
+ val jobTracker = JobTracker()
+
lateinit var parentActivity: MainActivity
private set
@@ -20,6 +23,12 @@ abstract class ServiceAwareFragment : Fragment() {
}
}
+ override fun onDestroyView() {
+ jobTracker.cancelAllJobs()
+
+ super.onDestroyView()
+ }
+
override fun onDetach() {
parentActivity.serviceNotifier.unsubscribe(this)
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 2004ef8bf8..59466e3cd2 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceDependentFragment.kt
@@ -4,9 +4,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache
import net.mullvad.mullvadvpn.dataproxy.KeyStatusListener
@@ -190,7 +187,7 @@ abstract class ServiceDependentFragment(val onNoService: OnNoService) : ServiceA
}
private fun leaveFragment() {
- GlobalScope.launch(Dispatchers.Main) {
+ jobTracker.newUiJob("leaveFragment") {
when (onNoService) {
OnNoService.GoBack -> parentActivity.onBackPressed()
OnNoService.GoToLaunchScreen -> parentActivity.returnToLaunchScreen()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
index 5aa649e0cc..db0cfa15ed 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SettingsFragment.kt
@@ -10,10 +10,6 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.ImageButton
import android.widget.TextView
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache
import net.mullvad.mullvadvpn.service.AccountCache
@@ -32,8 +28,6 @@ class SettingsFragment : ServiceAwareFragment() {
private var accountCache: AccountCache? = null
private var versionInfoCache: AppVersionInfoCache? = null
- private var updateAccountInfoJob: Job? = null
- private var updateVersionInfoJob: Job? = null
override fun onNewServiceConnection(serviceConnection: ServiceConnection) {
accountCache = serviceConnection.accountCache
@@ -113,26 +107,20 @@ class SettingsFragment : ServiceAwareFragment() {
super.onPause()
}
- override fun onDestroyView() {
- updateAccountInfoJob?.cancel()
- updateVersionInfoJob?.cancel()
- super.onDestroyView()
- }
-
private fun configureListeners() {
accountCache?.apply {
onAccountDataChange = { account, expiry ->
- updateAccountInfoJob?.cancel()
- updateAccountInfoJob = updateAccountInfo(account != null, expiry)
+ jobTracker.newUiJob("updateAccountInfo") {
+ updateAccountInfo(account != null, expiry)
+ }
}
fetchAccountExpiry()
}
- versionInfoCache?.apply {
- onUpdate = {
- updateVersionInfoJob?.cancel()
- updateVersionInfoJob = updateVersionInfo()
+ versionInfoCache?.onUpdate = {
+ jobTracker.newUiJob("updateVersionInfo") {
+ updateVersionInfo()
}
}
}
@@ -157,10 +145,7 @@ class SettingsFragment : ServiceAwareFragment() {
startActivity(intent)
}
- private fun updateAccountInfo(
- loggedIn: Boolean,
- expiry: DateTime?
- ) = GlobalScope.launch(Dispatchers.Main) {
+ private fun updateAccountInfo(loggedIn: Boolean, expiry: DateTime?) {
updateLoggedInStatus(loggedIn)
remainingTimeLabel.accountExpiry = expiry
}
@@ -177,7 +162,7 @@ class SettingsFragment : ServiceAwareFragment() {
advancedMenu.visibility = visibility
}
- private fun updateVersionInfo() = GlobalScope.launch(Dispatchers.Main) {
+ private fun updateVersionInfo() {
val isOutdated = versionInfoCache?.isOutdated ?: false
val isSupported = versionInfoCache?.isSupported ?: true
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt
index 43e47dfd9b..ff133c369d 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WelcomeFragment.kt
@@ -13,14 +13,11 @@ import kotlinx.coroutines.delay
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.ui.widget.Button
import net.mullvad.mullvadvpn.ui.widget.UrlButton
-import net.mullvad.mullvadvpn.util.JobTracker
import org.joda.time.DateTime
val POLL_INTERVAL: Long = 15 /* s */ * 1000 /* ms */
class WelcomeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
- private val jobTracker = JobTracker()
-
private lateinit var accountLabel: TextView
override fun onSafelyCreateView(
@@ -70,10 +67,6 @@ class WelcomeFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
jobTracker.cancelJob("pollAccountData")
}
- override fun onSafelyDestroyView() {
- jobTracker.cancelAllJobs()
- }
-
private fun updateAccountNumber(rawAccountNumber: String?) {
val accountText = rawAccountNumber?.let { account ->
addSpacesToAccountText(account)
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 933c5bc9a4..067600fcfd 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt
@@ -17,7 +17,6 @@ import net.mullvad.mullvadvpn.ui.widget.CopyableInformationView
import net.mullvad.mullvadvpn.ui.widget.InformationView
import net.mullvad.mullvadvpn.ui.widget.InformationView.WhenMissing
import net.mullvad.mullvadvpn.ui.widget.UrlButton
-import net.mullvad.mullvadvpn.util.JobTracker
import net.mullvad.mullvadvpn.util.TimeAgoFormatter
import org.joda.time.DateTime
import org.joda.time.DateTimeZone
@@ -32,8 +31,6 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
class Verifying() : ActionState()
}
- private val jobTracker = JobTracker()
-
private lateinit var timeAgoFormatter: TimeAgoFormatter
private var greenColor: Int = 0
@@ -176,8 +173,6 @@ class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScre
if (!(actionState is ActionState.Idle)) {
actionState = ActionState.Idle(false)
}
-
- jobTracker.cancelAllJobs()
}
private fun updateKeySpinners() {