summaryrefslogtreecommitdiffhomepage
path: root/android/app
diff options
context:
space:
mode:
Diffstat (limited to 'android/app')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt14
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt19
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt5
-rw-r--r--android/app/src/main/res/values/strings.xml1
5 files changed, 38 insertions, 10 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
index 1503052c93..424872bf43 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/LoginFragment.kt
@@ -138,6 +138,7 @@ class LoginFragment : BaseFragment(), NavigationBarPainter {
is LoginViewModel.LoginUiState.Success -> {
// MainActivity responsible for transition to connect/out-of-time view.
+ showLoggedIn()
}
is LoginViewModel.LoginUiState.AccountCreated -> {
@@ -215,6 +216,19 @@ class LoginFragment : BaseFragment(), NavigationBarPainter {
scrollToShow(loggingInStatus)
}
+ private fun showLoggedIn() {
+ title.setText(R.string.logged_in_title)
+ subtitle.setText(R.string.logged_in_description)
+
+ loggingInStatus.visibility = View.GONE
+ loginFailStatus.visibility = View.GONE
+ loggedInStatus.visibility = View.VISIBLE
+
+ accountLogin.state = LoginState.Success
+
+ scrollToShow(loggedInStatus)
+ }
+
private fun showCreatingAccount() {
title.setText(R.string.logging_in_title)
subtitle.setText(R.string.creating_new_account)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
index ec31a4c706..d3effa5a93 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
@@ -15,6 +15,7 @@ import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
+import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.launch
@@ -171,7 +172,10 @@ open class MainActivity : FragmentActivity() {
is DeviceState.LoggedOut -> openLoginView()
is DeviceState.Revoked -> openRevokedView()
is DeviceState.LoggedIn -> {
- openLoggedInView(newState.accountAndDevice.account_token)
+ openLoggedInView(
+ accountToken = newState.accountAndDevice.account_token,
+ shouldDelayLogin = currentState is DeviceState.LoggedOut
+ )
}
}
currentState = newState
@@ -194,12 +198,17 @@ open class MainActivity : FragmentActivity() {
}
}
- private fun openLoggedInView(accountToken: String) {
+ private suspend fun openLoggedInView(accountToken: String, shouldDelayLogin: Boolean) {
val isNewAccount = accountToken == accountRepository.cachedCreatedAccount.value
val fragment = when {
isNewAccount -> WelcomeFragment()
- else -> ConnectFragment()
+ else -> {
+ if (shouldDelayLogin) {
+ delay(LOGIN_DELAY_MILLIS)
+ }
+ ConnectFragment()
+ }
}
supportFragmentManager.beginTransaction().apply {
@@ -237,4 +246,8 @@ open class MainActivity : FragmentActivity() {
}
}
}
+
+ companion object {
+ private const val LOGIN_DELAY_MILLIS = 1000L
+ }
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt
index 1a496933a4..38b42ca351 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountInput.kt
@@ -131,10 +131,15 @@ class AccountInput : LinearLayout {
}
private fun successState() {
+ input.apply {
+ setTextColor(disabledTextColor)
+ setEnabled(false)
+ setFocusable(false)
+ visibility = View.VISIBLE
+ }
+
button.visibility = View.GONE
setButtonEnabled(false)
-
- input.visibility = View.GONE
}
private fun failureState() {
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt
index f3eca196f2..c204445168 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLogin.kt
@@ -5,7 +5,6 @@ import android.app.Activity
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
-import android.view.View
import android.view.View.OnLayoutChangeListener
import android.view.inputmethod.InputMethodManager
import android.widget.RelativeLayout
@@ -114,10 +113,6 @@ class AccountLogin : RelativeLayout {
input.loginState = newState
updateBorder()
-
- if (newState == LoginState.Success) {
- visibility = View.INVISIBLE
- }
}
var onLogin: ((String) -> Unit)?
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 29495c80e2..70cccd341e 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -18,6 +18,7 @@
<string name="logging_in_title">Logging in...</string>
<string name="logging_in_description">Checking account number</string>
<string name="logged_in_title">Logged in</string>
+ <string name="logged_in_description">Valid account number</string>
<string name="login_fail_title">Login failed</string>
<string name="login_fail_description">Invalid account number</string>
<string name="dont_have_an_account">Don\'t have an account number?</string>