summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt52
1 files changed, 25 insertions, 27 deletions
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 7b92118335..39be6f4065 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
@@ -8,15 +8,13 @@ import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import kotlinx.coroutines.CompletableDeferred
-import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.Job
-import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.model.GetAccountDataResult
+import net.mullvad.mullvadvpn.util.JobTracker
class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
private lateinit var title: TextView
@@ -26,12 +24,9 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
private lateinit var loginFailStatus: View
private lateinit var accountInput: AccountInput
+ private val jobTracker = JobTracker()
private val loggedIn = CompletableDeferred<Unit>()
- private var loginJob: Deferred<Boolean>? = null
- private var advanceToNextScreenJob: Job? = null
- private var fetchHistoryJob: Job? = null
-
override fun onSafelyCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -58,16 +53,20 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
}
override fun onSafelyResume() {
- advanceToNextScreenJob = GlobalScope.launch(Dispatchers.Main) {
+ jobTracker.newUiJob("advanceToNextScreen") {
loggedIn.join()
openConnectScreen()
}
+
fetchHistory()
}
override fun onSafelyPause() {
- advanceToNextScreenJob?.cancel()
- fetchHistoryJob?.cancel()
+ jobTracker.cancelJob("advanceToNextScreen")
+ }
+
+ override fun onSafelyDestroyView() {
+ jobTracker.cancelAllJobs()
}
private fun createAccount() {
@@ -91,33 +90,32 @@ class LoginFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
}
private fun fetchHistory() {
- fetchHistoryJob?.cancel()
- fetchHistoryJob = GlobalScope.launch(Dispatchers.Main) {
- val history = GlobalScope.async(Dispatchers.Default) {
+ jobTracker.newUiJob("fetchHistory") {
+ accountInput.accountHistory = jobTracker.runOnBackground() {
daemon.getAccountHistory()
}
- accountInput.accountHistory = history.await()
}
}
private fun performLogin(accountToken: String) = GlobalScope.launch(Dispatchers.Main) {
- loginJob?.cancel()
- loginJob = GlobalScope.async(Dispatchers.Default) {
- val accountDataResult = daemon.getAccountData(accountToken)
+ jobTracker.newUiJob("login") {
+ val loginSucceeded = jobTracker.runOnBackground {
+ val accountDataResult = daemon.getAccountData(accountToken)
- when (accountDataResult) {
- is GetAccountDataResult.Ok, is GetAccountDataResult.RpcError -> {
- daemon.setAccount(accountToken)
- true
+ when (accountDataResult) {
+ is GetAccountDataResult.Ok, is GetAccountDataResult.RpcError -> {
+ daemon.setAccount(accountToken)
+ true
+ }
+ else -> false
}
- else -> false
}
- }
- if (loginJob?.await() ?: false) {
- loggedIn()
- } else {
- loginFailure()
+ if (loginSucceeded) {
+ loggedIn()
+ } else {
+ loginFailure()
+ }
}
}