tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit fbce16759594eced2c441974f59f56285cbcff38
parent 08736075c254aa0da21d192daaacc1a0218c5090
Author: Jamie Nicol <jnicol@mozilla.com>
Date:   Thu, 27 Nov 2025 10:19:31 +0000

Bug 2002581 - Avoid generating UUIDs for default preference values when not required. r=android-reviewers,tcampbell

Generating UUIDs can be expensive, so we should only generate the
default values for these preferences if they don't already have a
value set.

This is achieved by passing a lambda as the "default" parameter to
stringPreference().  Additionally this requires a fix to ensure the
lambda is only called once in StringPreference.getValue(), otherwise
the value that is returned will be different to the one that is
persisted.

Differential Revision: https://phabricator.services.mozilla.com/D274148

Diffstat:
Mmobile/android/android-components/components/support/ktx/src/main/java/mozilla/components/support/ktx/android/content/SharedPreferences.kt | 10++++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt | 4++--
2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/mobile/android/android-components/components/support/ktx/src/main/java/mozilla/components/support/ktx/android/content/SharedPreferences.kt b/mobile/android/android-components/components/support/ktx/src/main/java/mozilla/components/support/ktx/android/content/SharedPreferences.kt @@ -28,11 +28,12 @@ private class BooleanPreference( if (thisRef.preferences.contains(key)) { thisRef.preferences.getBoolean(key, default()) } else { + val value = default() if (persistDefaultIfNotExists) { - thisRef.preferences.edit { putBoolean(key, default()) } + thisRef.preferences.edit { putBoolean(key, value) } } - default() + value } override fun setValue(thisRef: PreferencesHolder, property: KProperty<*>, value: Boolean) = @@ -85,11 +86,12 @@ private class StringPreference( if (thisRef.preferences.contains(key)) { thisRef.preferences.getString(key, null) ?: default() } else { + val value = default() if (persistDefaultIfNotExists) { - thisRef.preferences.edit { putString(key, default()) } + thisRef.preferences.edit { putString(key, value) } } - default() + value } override fun setValue(thisRef: PreferencesHolder, property: KProperty<*>, value: String) = diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -418,7 +418,7 @@ class Settings( var contileContextId by stringPreference( appContext.getPreferenceKey(R.string.pref_key_contile_context_id), - default = TopSites.contextId.generateAndSet().toString(), + default = { TopSites.contextId.generateAndSet().toString() }, persistDefaultIfNotExists = true, ) @@ -2087,7 +2087,7 @@ class Settings( */ val pocketSponsoredStoriesProfileId by stringPreference( appContext.getPreferenceKey(R.string.pref_key_pocket_sponsored_stories_profile), - default = UUID.randomUUID().toString(), + default = { UUID.randomUUID().toString() }, persistDefaultIfNotExists = true, )