summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-06-17 10:48:22 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-06-17 10:48:22 -0300
commit4df5577ee29a0ba4943f0a9db9293aee663bbb7d (patch)
tree3e29e9b1c20e1029504bbac997aa96478567d382 /android/src
parent0a270c3471a12ecd908d10a265b36923f1e68743 (diff)
parent9372edb30fd3a9ad7cfa8918288e3b753da10f3a (diff)
downloadmullvadvpn-4df5577ee29a0ba4943f0a9db9293aee663bbb7d.tar.xz
mullvadvpn-4df5577ee29a0ba4943f0a9db9293aee663bbb7d.zip
Merge branch 'logout-on-android'
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/AccountFragment.kt36
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt24
-rw-r--r--android/src/main/res/layout/account.xml4
-rw-r--r--android/src/main/res/values/strings.xml1
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>