diff options
Diffstat (limited to 'android/src/main')
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() { |
