diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-06-17 10:48:22 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-06-17 10:48:22 -0300 |
| commit | 4df5577ee29a0ba4943f0a9db9293aee663bbb7d (patch) | |
| tree | 3e29e9b1c20e1029504bbac997aa96478567d382 /android/src | |
| parent | 0a270c3471a12ecd908d10a265b36923f1e68743 (diff) | |
| parent | 9372edb30fd3a9ad7cfa8918288e3b753da10f3a (diff) | |
| download | mullvadvpn-4df5577ee29a0ba4943f0a9db9293aee663bbb7d.tar.xz mullvadvpn-4df5577ee29a0ba4943f0a9db9293aee663bbb7d.zip | |
Merge branch 'logout-on-android'
Diffstat (limited to 'android/src')
4 files changed, 60 insertions, 5 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountFragment.kt index 3dda9e2f8b..8d8702a38b 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/AccountFragment.kt @@ -10,6 +10,7 @@ import kotlinx.coroutines.Job import android.content.Context import android.os.Bundle import android.support.v4.app.Fragment +import android.support.v4.app.FragmentManager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -44,6 +45,8 @@ class AccountFragment : Fragment() { parentActivity.onBackPressed() } + view.findViewById<View>(R.id.logout).setOnClickListener { logout() } + accountExpiryContainer = view.findViewById<View>(R.id.account_expiry_container) accountNumberContainer = view.findViewById<View>(R.id.account_number_container) @@ -78,4 +81,37 @@ class AccountFragment : Fragment() { return formatter.format(expiryInstant) } + + private fun logout() { + clearAccountNumber() + clearBackStack() + goToLoginScreen() + } + + private fun clearAccountNumber() = GlobalScope.launch(Dispatchers.Default) { + val daemon = parentActivity.asyncDaemon.await() + + daemon.setAccount(null) + } + + private fun clearBackStack() { + fragmentManager?.apply { + val firstEntry = getBackStackEntryAt(0) + + popBackStack(firstEntry.id, FragmentManager.POP_BACK_STACK_INCLUSIVE) + } + } + + private fun goToLoginScreen() { + fragmentManager?.beginTransaction()?.apply { + setCustomAnimations( + R.anim.do_nothing, + R.anim.fragment_exit_to_bottom, + R.anim.do_nothing, + R.anim.do_nothing + ) + replace(R.id.main_fragment, LoginFragment()) + commit() + } + } } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt index dd5fd1a41c..80b000d643 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt @@ -1,12 +1,14 @@ package net.mullvad.mullvadvpn import kotlinx.coroutines.async +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job +import android.content.Context import android.os.Bundle import android.os.Handler import android.support.v4.app.Fragment @@ -16,6 +18,8 @@ import android.view.ViewGroup import android.widget.TextView class LoginFragment : Fragment() { + private lateinit var parentActivity: MainActivity + private lateinit var title: TextView private lateinit var subtitle: TextView private lateinit var loggingInStatus: View @@ -25,6 +29,12 @@ class LoginFragment : Fragment() { private var loginJob: Deferred<Boolean>? = null + override fun onAttach(context: Context) { + super.onAttach(context) + + parentActivity = context as MainActivity + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -38,7 +48,7 @@ class LoginFragment : Fragment() { loggedInStatus = view.findViewById(R.id.logged_in_status) loginFailStatus = view.findViewById(R.id.login_fail_status) - accountInput = AccountInput(view, context!!) + accountInput = AccountInput(view, parentActivity) accountInput.onLogin = { accountToken -> login(accountToken) } return view @@ -60,7 +70,6 @@ class LoginFragment : Fragment() { private fun performLogin(accountToken: String) = GlobalScope.launch(Dispatchers.Main) { loginJob?.cancel() loginJob = GlobalScope.async(Dispatchers.Default) { - val parentActivity = activity as MainActivity val daemon = parentActivity.asyncDaemon.await() val accountData = daemon.getAccountData(accountToken) @@ -79,7 +88,14 @@ class LoginFragment : Fragment() { } } - private fun loggedIn() { + private suspend fun loggedIn() { + showLoggedInMessage() + parentActivity.refetchSettings() + delay(1000) + openConnectScreen() + } + + private fun showLoggedInMessage() { title.setText(R.string.logged_in_title) subtitle.setText("") @@ -88,8 +104,6 @@ class LoginFragment : Fragment() { loggedInStatus.visibility = View.VISIBLE accountInput.state = LoginState.Success - - Handler().postDelayed(Runnable { openConnectScreen() }, 1000) } private fun openConnectScreen() { diff --git a/android/src/main/res/layout/account.xml b/android/src/main/res/layout/account.xml index 2e7bba0340..39924ef9d6 100644 --- a/android/src/main/res/layout/account.xml +++ b/android/src/main/res/layout/account.xml @@ -98,5 +98,9 @@ android:text="" /> </LinearLayout> + <Button android:id="@+id/logout" + android:text="@string/log_out" + style="@style/RedButton" + /> </LinearLayout> </LinearLayout> diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index a3a033e747..9b226aae07 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -20,6 +20,7 @@ <string name="account_number">Account number</string> <string name="paid_until">Paid until</string> + <string name="log_out">Log out</string> <string name="unsecured_connection">Unsecured connection</string> <string name="creating_secure_connection">Creating secure connection</string> |
