summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-09-30 15:34:39 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-09-30 15:34:39 -0300
commita6b0ed8b31f0dbfe6d24c62884cd0afbb4ded153 (patch)
tree6256a518bf50b7dd91a2ee42e376c16ae888aa7a /android/src
parent327dcd712db22ef9551d3d22b6a2e0487fdd77fb (diff)
parentbbb9013d1cf65e15c2d671b9d00acaef0f363825 (diff)
downloadmullvadvpn-a6b0ed8b31f0dbfe6d24c62884cd0afbb4ded153.tar.xz
mullvadvpn-a6b0ed8b31f0dbfe6d24c62884cd0afbb4ded153.zip
Merge branch 'logged-out-settings'
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/LaunchFragment.kt25
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt21
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt44
-rw-r--r--android/src/main/res/layout/connect.xml11
-rw-r--r--android/src/main/res/layout/launch.xml9
-rw-r--r--android/src/main/res/layout/login.xml14
-rw-r--r--android/src/main/res/layout/settings.xml6
7 files changed, 108 insertions, 22 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/LaunchFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/LaunchFragment.kt
index 7b2ebc4453..ccc20cbd07 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/LaunchFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/LaunchFragment.kt
@@ -17,27 +17,44 @@ import android.view.ViewGroup
class LaunchFragment : Fragment() {
private lateinit var accountTokenCheckJob: Deferred<Boolean>
private lateinit var advanceToNextScreenJob: Job
+ private lateinit var parentActivity: MainActivity
override fun onAttach(context: Context) {
super.onAttach(context)
+ parentActivity = context as MainActivity
accountTokenCheckJob = checkForAccountToken()
- advanceToNextScreenJob = advanceToNextScreen()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
- ) = inflater.inflate(R.layout.launch, container, false)
+ ): View {
+ val view = inflater.inflate(R.layout.launch, container, false)
+
+ view.findViewById<View>(R.id.settings).setOnClickListener {
+ parentActivity.openSettings()
+ }
+
+ return view
+ }
+
+ override fun onResume() {
+ super.onResume()
+ advanceToNextScreenJob = advanceToNextScreen()
+ }
+
+ override fun onPause() {
+ advanceToNextScreenJob.cancel()
+ super.onPause()
+ }
override fun onDestroy() {
accountTokenCheckJob.cancel()
- advanceToNextScreenJob.cancel()
super.onDestroy()
}
private fun checkForAccountToken() = GlobalScope.async(Dispatchers.Default) {
- val parentActivity = activity as MainActivity
val daemon = parentActivity.daemon.await()
val settings = daemon.getSettings()
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt
index a3871a1433..2714078268 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
+import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@@ -29,7 +30,10 @@ class LoginFragment : Fragment() {
private lateinit var loginFailStatus: View
private lateinit var accountInput: AccountInput
+ private val loggedIn = CompletableDeferred<Unit>()
+
private var loginJob: Deferred<Boolean>? = null
+ private var advanceToNextScreenJob: Job? = null
override fun onAttach(context: Context) {
super.onAttach(context)
@@ -44,6 +48,8 @@ class LoginFragment : Fragment() {
): View {
val view = inflater.inflate(R.layout.login, container, false)
+ view.findViewById<View>(R.id.settings).setOnClickListener { parentActivity.openSettings() }
+
title = view.findViewById(R.id.title)
subtitle = view.findViewById(R.id.subtitle)
loggingInStatus = view.findViewById(R.id.logging_in_status)
@@ -58,6 +64,19 @@ class LoginFragment : Fragment() {
return view
}
+ override fun onResume() {
+ super.onResume()
+ advanceToNextScreenJob = GlobalScope.launch(Dispatchers.Main) {
+ loggedIn.join()
+ openConnectScreen()
+ }
+ }
+
+ override fun onPause() {
+ advanceToNextScreenJob?.cancel()
+ super.onPause()
+ }
+
private fun createAccount() {
val uri = Uri.parse(parentActivity.getString(R.string.create_account_url))
val intent = Intent(Intent.ACTION_VIEW, uri)
@@ -102,7 +121,7 @@ class LoginFragment : Fragment() {
private suspend fun loggedIn() {
showLoggedInMessage()
delay(1000)
- openConnectScreen()
+ loggedIn.complete(Unit)
}
private fun showLoggedInMessage() {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt
index a9ebe5d40f..6a02efbe3c 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt
@@ -17,23 +17,30 @@ import android.widget.Button
import android.widget.ImageButton
import android.widget.TextView
+import net.mullvad.mullvadvpn.dataproxy.AccountCache
import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache
class SettingsFragment : Fragment() {
private lateinit var parentActivity: MainActivity
+
+ private lateinit var accountCache: AccountCache
private lateinit var versionInfoCache: AppVersionInfoCache
- private lateinit var remainingTimeLabel: RemainingTimeLabel
+ private lateinit var accountMenu: View
private lateinit var appVersionWarning: View
private lateinit var appVersionLabel: TextView
private lateinit var appVersionFooter: View
+ private lateinit var remainingTimeLabel: RemainingTimeLabel
+ private lateinit var wireguardKeysMenu: View
+ private var updateLoggedInStatusJob: Job? = null
private var updateVersionInfoJob: Job? = null
override fun onAttach(context: Context) {
super.onAttach(context)
parentActivity = context as MainActivity
+ accountCache = parentActivity.accountCache
versionInfoCache = parentActivity.appVersionInfoCache
}
@@ -52,12 +59,17 @@ class SettingsFragment : Fragment() {
parentActivity.quit()
}
- view.findViewById<View>(R.id.account).setOnClickListener {
- openSubFragment(AccountFragment())
+ accountMenu = view.findViewById<View>(R.id.account).apply {
+ setOnClickListener {
+ openSubFragment(AccountFragment())
+ }
}
- view.findViewById<View>(R.id.wireguard_keys).setOnClickListener {
- openSubFragment(WireguardKeyFragment())
+ wireguardKeysMenu = view.findViewById<View>(R.id.wireguard_keys).apply {
+ setOnClickListener {
+ openSubFragment(WireguardKeyFragment())
+ }
}
+
view.findViewById<View>(R.id.app_version).setOnClickListener {
openLink(R.string.download_url)
}
@@ -65,17 +77,24 @@ class SettingsFragment : Fragment() {
openSubFragment(ProblemReportFragment())
}
- remainingTimeLabel = RemainingTimeLabel(parentActivity, view)
appVersionWarning = view.findViewById(R.id.app_version_warning)
appVersionLabel = view.findViewById<TextView>(R.id.app_version_label)
appVersionFooter = view.findViewById(R.id.app_version_footer)
+ remainingTimeLabel = RemainingTimeLabel(parentActivity, view)
return view
}
override fun onResume() {
super.onResume()
+
remainingTimeLabel.onResume()
+
+ accountCache.onAccountDataChange = { account, _expiry ->
+ updateLoggedInStatusJob?.cancel()
+ updateLoggedInStatusJob = updateLoggedInStatus(account != null)
+ }
+
versionInfoCache.onUpdate = {
updateVersionInfoJob?.cancel()
updateVersionInfoJob = updateVersionInfo()
@@ -84,11 +103,13 @@ class SettingsFragment : Fragment() {
override fun onPause() {
versionInfoCache.onUpdate = null
+ accountCache.onAccountDataChange = null
remainingTimeLabel.onPause()
super.onPause()
}
override fun onDestroyView() {
+ updateLoggedInStatusJob?.cancel()
updateVersionInfoJob?.cancel()
super.onDestroyView()
}
@@ -113,6 +134,17 @@ class SettingsFragment : Fragment() {
startActivity(intent)
}
+ private fun updateLoggedInStatus(loggedIn: Boolean) = GlobalScope.launch(Dispatchers.Main) {
+ val visibility = if (loggedIn) {
+ View.VISIBLE
+ } else {
+ View.GONE
+ }
+
+ accountMenu.visibility = visibility
+ wireguardKeysMenu.visibility = visibility
+ }
+
private fun updateVersionInfo() = GlobalScope.launch(Dispatchers.Main) {
appVersionLabel.setText(versionInfoCache.version ?: "")
diff --git a/android/src/main/res/layout/connect.xml b/android/src/main/res/layout/connect.xml
index 8b0629db43..133a945259 100644
--- a/android/src/main/res/layout/connect.xml
+++ b/android/src/main/res/layout/connect.xml
@@ -19,33 +19,28 @@
android:layout_height="50dp"
android:layout_marginLeft="12dp"
android:layout_marginVertical="12dp"
- android:src="@drawable/logo_icon"
android:layout_weight="0"
+ android:src="@drawable/logo_icon"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_marginVertical="12dp"
+ android:layout_weight="1"
android:textColor="@color/white80"
android:textSize="24sp"
android:textStyle="bold"
android:text="@string/app_name"
android:textAllCaps="true"
- android:layout_weight="0"
- />
- <View
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1"
/>
<ImageButton android:id="@+id/settings"
android:layout_width="wrap_content"
android:layout_height="match_parent"
+ android:layout_weight="0"
android:paddingHorizontal="12dp"
android:background="?android:attr/selectableItemBackground"
android:src="@drawable/icon_settings"
- android:layout_weight="0"
/>
</LinearLayout>
diff --git a/android/src/main/res/layout/launch.xml b/android/src/main/res/layout/launch.xml
index d8cf918727..195147161f 100644
--- a/android/src/main/res/layout/launch.xml
+++ b/android/src/main/res/layout/launch.xml
@@ -3,6 +3,15 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
>
+ <ImageButton android:id="@+id/settings"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="top | right"
+ android:paddingHorizontal="12dp"
+ android:paddingVertical="25dp"
+ android:background="?android:attr/selectableItemBackground"
+ android:src="@drawable/icon_settings"
+ />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/android/src/main/res/layout/login.xml b/android/src/main/res/layout/login.xml
index ea9b8da524..ce35d56525 100644
--- a/android/src/main/res/layout/login.xml
+++ b/android/src/main/res/layout/login.xml
@@ -11,23 +11,35 @@
android:layout_weight="0"
android:orientation="horizontal"
android:gravity="center_vertical"
- android:padding="12dp"
>
<ImageView
android:layout_width="49dp"
android:layout_height="50dp"
+ android:layout_weight="0"
+ android:layout_marginLeft="12dp"
+ android:layout_marginVertical="12dp"
android:src="@drawable/logo_icon"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_weight="1"
android:layout_marginHorizontal="8dp"
+ android:layout_marginVertical="12dp"
android:textColor="@color/white60"
android:textSize="24sp"
android:textStyle="bold"
android:text="@string/app_name"
android:textAllCaps="true"
/>
+ <ImageButton android:id="@+id/settings"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_weight="0"
+ android:paddingHorizontal="12dp"
+ android:background="?android:attr/selectableItemBackground"
+ android:src="@drawable/icon_settings"
+ />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
diff --git a/android/src/main/res/layout/settings.xml b/android/src/main/res/layout/settings.xml
index 7b4161406a..37cf3cb9db 100644
--- a/android/src/main/res/layout/settings.xml
+++ b/android/src/main/res/layout/settings.xml
@@ -28,10 +28,12 @@
<LinearLayout android:id="@+id/account"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginBottom="24dp"
android:paddingHorizontal="16dp"
android:background="@drawable/cell_button_background"
android:clickable="true"
android:gravity="center"
+ android:visibility="gone"
>
<TextView
android:layout_width="wrap_content"
@@ -67,11 +69,12 @@
<LinearLayout android:id="@+id/wireguard_keys"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginBottom="24dp"
android:paddingHorizontal="16dp"
- android:layout_marginTop="24dp"
android:background="@drawable/cell_button_background"
android:clickable="true"
android:gravity="center"
+ android:visibility="gone"
>
<TextView
android:layout_width="wrap_content"
@@ -95,7 +98,6 @@
<LinearLayout android:id="@+id/app_version"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="24dp"
android:paddingHorizontal="16dp"
android:background="@drawable/cell_button_background"
android:clickable="true"