From cb5a9bdff86d5de484423a1038ee6684f1008d97 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 6 Nov 2019 09:21:28 -0300 Subject: [PATCH] [android] don't try to display settings before they are fully loaded --- .../briar/android/settings/SettingsFragment.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java index 3fdaee3ec..b03d91816 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java @@ -137,6 +137,7 @@ public class SettingsFragment extends PreferenceFragmentCompat // Fields that are accessed from background threads must be volatile private volatile Settings settings, btSettings, torSettings; + private volatile boolean settingsLoaded = false; @Inject volatile SettingsManager settingsManager; @@ -351,6 +352,7 @@ public class SettingsFragment extends PreferenceFragmentCompat settings = settingsManager.getSettings(SETTINGS_NAMESPACE); btSettings = settingsManager.getSettings(BT_NAMESPACE); torSettings = settingsManager.getSettings(TOR_NAMESPACE); + settingsLoaded = true; logDuration(LOG, "Loading settings", start); displaySettings(); } catch (DbException e) { @@ -361,6 +363,9 @@ public class SettingsFragment extends PreferenceFragmentCompat private void displaySettings() { listener.runOnUiThreadUnlessDestroyed(() -> { + // due to events, we might try to display before a load completed + if (!settingsLoaded) return; + boolean btEnabledSetting = btSettings.getBoolean(PREF_BT_ENABLE, false); enableBluetooth.setValue(Boolean.toString(btEnabledSetting));