diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-09-30 15:34:39 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-09-30 15:34:39 -0300 |
| commit | a6b0ed8b31f0dbfe6d24c62884cd0afbb4ded153 (patch) | |
| tree | 6256a518bf50b7dd91a2ee42e376c16ae888aa7a /android/src | |
| parent | 327dcd712db22ef9551d3d22b6a2e0487fdd77fb (diff) | |
| parent | bbb9013d1cf65e15c2d671b9d00acaef0f363825 (diff) | |
| download | mullvadvpn-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.kt | 25 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/LoginFragment.kt | 21 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/SettingsFragment.kt | 44 | ||||
| -rw-r--r-- | android/src/main/res/layout/connect.xml | 11 | ||||
| -rw-r--r-- | android/src/main/res/layout/launch.xml | 9 | ||||
| -rw-r--r-- | android/src/main/res/layout/login.xml | 14 | ||||
| -rw-r--r-- | android/src/main/res/layout/settings.xml | 6 |
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" |
