From 23edd2559d66dd730af6ebc6b02de9fea77517a2 Mon Sep 17 00:00:00 2001 From: Sawyer Blatz Date: Tue, 16 Apr 2019 08:00:28 -0700 Subject: [PATCH] For #933: Adds caching of sign in state (#1647) --- .../org/mozilla/fenix/settings/SettingsFragment.kt | 13 +++++++++---- .../main/java/org/mozilla/fenix/utils/Settings.kt | 9 +++++++++ app/src/main/res/values/preference_keys.xml | 1 + 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt index a4a9aa815..d549d8329 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -59,6 +59,7 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) job = Job() + updateSignInVisibility() } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { @@ -161,9 +162,6 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse // Observe account changes to keep the UI up-to-date. accountManager.register(this, owner = this) - // TODO an authenticated state will mark 'preferenceSignIn' as invisible; currently that behaviour is non-ideal: - // a "sign in" UI will be displayed at first, and then quickly animate away. - // Ideally we don't want it to be displayed at all. updateAuthState(accountManager.authenticatedAccount()) accountManager.accountProfile()?.let { updateAccountProfile(it) } } @@ -293,6 +291,7 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse override fun onLoggedOut() { updateAuthState() + updateSignInVisibility() } override fun onProfileUpdated(profile: Profile) { @@ -301,6 +300,12 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse // --- Account UI helpers --- private fun updateAuthState(account: OAuthAccount? = null) { + // Cache the user's auth state to improve performance of sign in visibility + org.mozilla.fenix.utils.Settings.getInstance(context!!).setHasCachedAccount(account != null) + } + + private fun updateSignInVisibility() { + val hasCachedAccount = org.mozilla.fenix.utils.Settings.getInstance(context!!).hasCachedAccount val preferenceSignIn = findPreference(context!!.getPreferenceKey(pref_key_sign_in)) val preferenceFirefoxAccount = @@ -308,7 +313,7 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse val accountPreferenceCategory = findPreference(context!!.getPreferenceKey(pref_key_account_category)) - if (account != null) { + if (hasCachedAccount) { preferenceSignIn?.isVisible = false preferenceSignIn?.onPreferenceClickListener = null preferenceFirefoxAccount?.isVisible = true diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 63c2134ce..3e275e762 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -100,6 +100,9 @@ class Settings private constructor(context: Context) { else -> appContext.getString(R.string.preference_light_theme) } + val hasCachedAccount: Boolean + get() = preferences.getBoolean(appContext.getPreferenceKey(R.string.pref_key_cached_account), false) + private val autoBounceQuickActionSheetCount: Int get() = (preferences.getInt(appContext.getPreferenceKey(R.string.pref_key_bounce_quick_action), 0)) @@ -172,6 +175,12 @@ class Settings private constructor(context: Context) { ) } + fun setHasCachedAccount(isCached: Boolean) { + preferences.edit() + .putBoolean(appContext.getPreferenceKey(R.string.pref_key_cached_account), isCached) + .apply() + } + private val SitePermissionsRules.Action.id: Int get() { return when (this) { diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 48894fadb..a38ad6fb6 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -33,6 +33,7 @@ pref_key_sync_now pref_key_sync_history pref_key_sign_out + pref_key_cached_account pref_key_show_search_suggestions