diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/AvatarPreference.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/AvatarPreference.java index e3f30f981..77812b14f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/AvatarPreference.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/AvatarPreference.java @@ -5,6 +5,7 @@ import android.util.AttributeSet; import android.view.View; import android.widget.TextView; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import androidx.annotation.Nullable; @@ -14,6 +15,7 @@ import de.hdodenhof.circleimageview.CircleImageView; import static org.briarproject.briar.android.view.AuthorView.setAvatar; +@NotNullByDefault public class AvatarPreference extends Preference { @Nullable diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/ConnectionsStore.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/ConnectionsStore.java index 6c1c64b5b..94a12d53b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/ConnectionsStore.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/ConnectionsStore.java @@ -5,6 +5,8 @@ import org.briarproject.bramble.api.settings.SettingsManager; import java.util.concurrent.Executor; +import androidx.annotation.Nullable; + import static org.briarproject.bramble.api.plugin.Plugin.PREF_PLUGIN_ENABLE; import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_MOBILE; import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK; @@ -49,12 +51,12 @@ class ConnectionsStore extends SettingsStore { } @Override - public void putInt(String key, int value) { + public void putString(String key, @Nullable String value) { // translate between Android UI pref keys and bramble keys if (key.equals(PREF_KEY_TOR_NETWORK)) { - super.putInt(PREF_TOR_NETWORK, value); + super.putString(PREF_TOR_NETWORK, value); } else { - throw new AssertionError(); + throw new AssertionError(key); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/DisplayFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/DisplayFragment.java index 6ef75cefb..8fd21c207 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/DisplayFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/DisplayFragment.java @@ -16,6 +16,7 @@ import java.util.Locale; import java.util.logging.Logger; import androidx.core.text.TextUtilsCompat; +import androidx.fragment.app.FragmentActivity; import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; @@ -25,6 +26,7 @@ import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.os.Build.VERSION.SDK_INT; import static androidx.core.view.ViewCompat.LAYOUT_DIRECTION_LTR; +import static java.util.Objects.requireNonNull; import static java.util.logging.Level.INFO; import static java.util.logging.Logger.getLogger; import static org.briarproject.briar.android.BriarApplication.ENTRY_ACTIVITY; @@ -43,11 +45,11 @@ public class DisplayFragment extends PreferenceFragmentCompat { public void onCreatePreferences(Bundle bundle, String s) { addPreferencesFromResource(R.xml.settings_display); - ListPreference language = findPreference(PREF_LANGUAGE); + ListPreference language = requireNonNull(findPreference(PREF_LANGUAGE)); setLanguageEntries(language); language.setOnPreferenceChangeListener(this::onLanguageChanged); - ListPreference theme = findPreference(PREF_THEME); + ListPreference theme = requireNonNull(findPreference(PREF_THEME)); setThemeEntries(theme); theme.setOnPreferenceChangeListener(this::onThemeChanged); } @@ -121,7 +123,8 @@ public class DisplayFragment extends PreferenceFragmentCompat { private boolean onThemeChanged(Preference preference, Object newValue) { // activate new theme - UiUtils.setTheme(getActivity(), (String) newValue); + FragmentActivity activity = requireActivity(); + UiUtils.setTheme(activity, (String) newValue); // bring up parent activity, so it can change its theme as well // upstream bug: https://issuetracker.google.com/issues/38352704 Intent intent = new Intent(getActivity(), ENTRY_ACTIVITY); @@ -129,9 +132,9 @@ public class DisplayFragment extends PreferenceFragmentCompat { startActivity(intent); // bring this activity back to the foreground // TODO maybe tell the activity here to relaunch this fragment? - intent = new Intent(getActivity(), getActivity().getClass()); + intent = new Intent(getActivity(), activity.getClass()); startActivity(intent); - getActivity().finish(); + activity.finish(); return true; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/NotificationsManager.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/NotificationsManager.java index 40f8995ab..83a18c0ce 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/NotificationsManager.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/NotificationsManager.java @@ -37,7 +37,6 @@ import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_SOUND; import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_VIBRATION; - @MethodsNotNullByDefault @ParametersNotNullByDefault class NotificationsManager { @@ -64,7 +63,7 @@ class NotificationsManager { private volatile String ringtoneName, ringtoneUri; - public NotificationsManager(Context ctx, + NotificationsManager(Context ctx, SettingsManager settingsManager, Executor dbExecutor) { this.ctx = ctx; @@ -153,7 +152,7 @@ class NotificationsManager { return ringtoneName; } - public String getRingtoneUri() { + String getRingtoneUri() { return ringtoneUri; } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsStore.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsStore.java index 23f9f3a11..b5752de51 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsStore.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsStore.java @@ -11,7 +11,6 @@ import java.util.logging.Logger; import androidx.annotation.Nullable; import androidx.preference.PreferenceDataStore; -import static java.util.Objects.requireNonNull; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; @@ -21,8 +20,6 @@ import static org.briarproject.bramble.util.LogUtils.now; /** * A custom PreferenceDataStore that stores settings in Briar's encrypted DB. - *
- * Warning: This expects all strings to be integers and stores them as such.
*/
@NotNullByDefault
class SettingsStore extends PreferenceDataStore {
@@ -61,8 +58,11 @@ class SettingsStore extends PreferenceDataStore {
@Override
public void putString(String key, @Nullable String value) {
- int integer = Integer.parseInt(requireNonNull(value));
- putInt(key, integer);
+ if (LOG.isLoggable(INFO))
+ LOG.info("Store string setting: " + key + "=" + value);
+ Settings s = new Settings();
+ s.put(key, value);
+ storeSettings(s);
}
private void storeSettings(Settings s) {
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsViewModel.java
index 707d63b1a..9b0392d72 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsViewModel.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsViewModel.java
@@ -42,6 +42,7 @@ import java.util.logging.Logger;
import javax.inject.Inject;
+import androidx.annotation.AnyThread;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
@@ -117,7 +118,7 @@ class SettingsViewModel extends DbViewModel implements EventListener {
this.authorManager = authorManager;
this.ioExecutor = ioExecutor;
this.featureFlags = featureFlags;
- this.settingsStore = new SettingsStore(settingsManager, dbExecutor,
+ settingsStore = new SettingsStore(settingsManager, dbExecutor,
SETTINGS_NAMESPACE);
torSummaryProvider = new TorSummaryProvider(getApplication(),
locationUtils, circumventionProvider);
@@ -195,6 +196,7 @@ class SettingsViewModel extends DbViewModel implements EventListener {
}
}
+ @AnyThread
private void updateSettings(Settings settings) {
screenLockEnabled.postValue(settings.getBoolean(PREF_SCREEN_LOCK,
false));
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/TorSummaryProvider.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/TorSummaryProvider.java
index 0d4258849..5e0ba6e8b 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/settings/TorSummaryProvider.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/TorSummaryProvider.java
@@ -20,7 +20,7 @@ class TorSummaryProvider implements SummaryProvider