Merge branch '1653-npe-settings-fragment' into 'master'

Don't try to display settings before they are fully loaded

Closes #1653

See merge request briar/briar!1194
This commit is contained in:
akwizgran
2019-11-07 15:29:55 +00:00

View File

@@ -137,6 +137,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
// Fields that are accessed from background threads must be volatile // Fields that are accessed from background threads must be volatile
private volatile Settings settings, btSettings, torSettings; private volatile Settings settings, btSettings, torSettings;
private volatile boolean settingsLoaded = false;
@Inject @Inject
volatile SettingsManager settingsManager; volatile SettingsManager settingsManager;
@@ -351,6 +352,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
settings = settingsManager.getSettings(SETTINGS_NAMESPACE); settings = settingsManager.getSettings(SETTINGS_NAMESPACE);
btSettings = settingsManager.getSettings(BT_NAMESPACE); btSettings = settingsManager.getSettings(BT_NAMESPACE);
torSettings = settingsManager.getSettings(TOR_NAMESPACE); torSettings = settingsManager.getSettings(TOR_NAMESPACE);
settingsLoaded = true;
logDuration(LOG, "Loading settings", start); logDuration(LOG, "Loading settings", start);
displaySettings(); displaySettings();
} catch (DbException e) { } catch (DbException e) {
@@ -361,6 +363,9 @@ public class SettingsFragment extends PreferenceFragmentCompat
private void displaySettings() { private void displaySettings() {
listener.runOnUiThreadUnlessDestroyed(() -> { listener.runOnUiThreadUnlessDestroyed(() -> {
// due to events, we might try to display before a load completed
if (!settingsLoaded) return;
boolean btEnabledSetting = boolean btEnabledSetting =
btSettings.getBoolean(PREF_BT_ENABLE, false); btSettings.getBoolean(PREF_BT_ENABLE, false);
enableBluetooth.setValue(Boolean.toString(btEnabledSetting)); enableBluetooth.setValue(Boolean.toString(btEnabledSetting));