diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java index fac266a436570c888694adafd5fd7ee82f91e8fd..12cf46b24b42adfe3ef78262f4a3b2563e71a95f 100644 --- a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java @@ -42,6 +42,7 @@ import static android.content.Context.NOTIFICATION_SERVICE; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP; import static java.util.logging.Level.WARNING; +import static org.briarproject.android.fragment.SettingsFragment.SETTINGS_NAMESPACE; class AndroidNotificationManagerImpl implements AndroidNotificationManager, Service, EventListener { @@ -97,7 +98,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, dbExecutor.execute(new Runnable() { public void run() { try { - settings = db.getSettings("settings-activity"); + settings = db.getSettings(SETTINGS_NAMESPACE); } catch (DbException e) { if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e); @@ -135,7 +136,8 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, public void eventOccurred(Event e) { if (e instanceof SettingsUpdatedEvent) { - loadSettings(); + SettingsUpdatedEvent s = (SettingsUpdatedEvent) e; + if (s.getNamespace().equals(SETTINGS_NAMESPACE)) loadSettings(); } else if (e instanceof MessageValidatedEvent) { MessageValidatedEvent m = (MessageValidatedEvent) e; if (m.isValid() && !m.isLocal()) { diff --git a/briar-android/src/org/briarproject/android/fragment/SettingsFragment.java b/briar-android/src/org/briarproject/android/fragment/SettingsFragment.java index 71f70d09c26eda400b8af18de0fbebd8578c6f8c..aacd149fc58dd15318714ed52ca5e201c4d76624 100644 --- a/briar-android/src/org/briarproject/android/fragment/SettingsFragment.java +++ b/briar-android/src/org/briarproject/android/fragment/SettingsFragment.java @@ -28,7 +28,6 @@ import org.briarproject.android.util.ListLoadingProgressBar; import org.briarproject.api.db.DatabaseComponent; import org.briarproject.api.db.DbException; import org.briarproject.api.event.Event; -import org.briarproject.api.event.EventBus; import org.briarproject.api.event.SettingsUpdatedEvent; import org.briarproject.api.settings.Settings; import org.briarproject.api.settings.SettingsManager; @@ -38,6 +37,7 @@ import java.util.logging.Logger; import javax.inject.Inject; +import static android.app.Activity.RESULT_OK; import static android.graphics.Typeface.DEFAULT_BOLD; import static android.media.RingtoneManager.ACTION_RINGTONE_PICKER; import static android.media.RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI; @@ -55,16 +55,15 @@ import static android.widget.LinearLayout.VERTICAL; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.android.TestingConstants.SHOW_TESTING_ACTIVITY; -import static android.app.Activity.RESULT_OK; import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP; import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1; -public class SettingsFragment extends BaseFragment implements +public class SettingsFragment extends BaseEventFragment implements View.OnClickListener { - public final static String TAG = "SettingsFragment"; - + public static final String TAG = "SettingsFragment"; public static final int REQUEST_RINGTONE = 2; + public static final String SETTINGS_NAMESPACE = "android-ui"; private static final Logger LOG = Logger.getLogger(SettingsFragment.class.getName()); @@ -82,9 +81,8 @@ public class SettingsFragment extends BaseFragment implements // Fields that are accessed from background threads must be volatile @Inject private volatile DatabaseComponent db; @Inject private volatile SettingsManager settingsManager; - @Inject private volatile EventBus eventBus; private volatile Settings settings; - private volatile boolean bluetoothSetting = true, torSetting = false; + private volatile boolean bluetoothSetting = false, torSetting = false; public static SettingsFragment newInstance() { @@ -282,7 +280,7 @@ public class SettingsFragment extends BaseFragment implements public void run() { try { long now = System.currentTimeMillis(); - settings = settingsManager.getSettings("settings-activity"); + settings = settingsManager.getSettings(SETTINGS_NAMESPACE); Settings btSettings = settingsManager.getSettings("bt"); Settings torSettings = settingsManager.getSettings("tor"); long duration = System.currentTimeMillis() - now; @@ -360,7 +358,8 @@ public class SettingsFragment extends BaseFragment implements notifyPrivateMessages.isChecked()); storeSettings(s); } else if (view == panicSettings || view == panicSettingsHint) { - startActivity(new Intent(getActivity(), PanicPreferencesActivity.class)); + startActivity(new Intent(getActivity(), + PanicPreferencesActivity.class)); } else if (view == notifyForumPosts) { Settings s = new Settings(); s.putBoolean("notifyForumPosts", notifyForumPosts.isChecked()); @@ -431,8 +430,7 @@ public class SettingsFragment extends BaseFragment implements public void run() { try { long now = System.currentTimeMillis(); - settingsManager - .mergeSettings(settings, "settings-activity"); + settingsManager.mergeSettings(settings, SETTINGS_NAMESPACE); long duration = System.currentTimeMillis() - now; if (LOG.isLoggable(INFO)) LOG.info("Merging settings took " + duration + " ms"); @@ -475,10 +473,15 @@ public class SettingsFragment extends BaseFragment implements } } + @Override public void eventOccurred(Event e) { if (e instanceof SettingsUpdatedEvent) { - LOG.info("Settings updated"); - loadSettings(); + String namespace = ((SettingsUpdatedEvent) e).getNamespace(); + if (namespace.equals("bt") || namespace.equals("tor") + || namespace.equals(SETTINGS_NAMESPACE)) { + LOG.info("Settings updated"); + loadSettings(); + } } } } diff --git a/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java b/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java index b6c2f345ade8651a31c2e12bf12743bae5142516..b0cc91746d57a6955d2c5b631d97258e8a2ba361 100644 --- a/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java +++ b/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java @@ -596,8 +596,10 @@ class TorPlugin implements DuplexPlugin, EventHandler, public void eventOccurred(Event e) { if (e instanceof SettingsUpdatedEvent) { - // Wifi setting may have been updated - updateConnectionStatus(); + if (((SettingsUpdatedEvent) e).getNamespace().equals("tor")) { + // Wifi setting may have been updated + updateConnectionStatus(); + } } } diff --git a/briar-api/src/org/briarproject/api/event/SettingsUpdatedEvent.java b/briar-api/src/org/briarproject/api/event/SettingsUpdatedEvent.java index 2f369891b5e876bac5bc0a2497955699c59d5284..ef25719aaaebe87e58bc9182bd57ea6e6b9ea6d0 100644 --- a/briar-api/src/org/briarproject/api/event/SettingsUpdatedEvent.java +++ b/briar-api/src/org/briarproject/api/event/SettingsUpdatedEvent.java @@ -3,4 +3,13 @@ package org.briarproject.api.event; /** An event that is broadcast when one or more settings are updated. */ public class SettingsUpdatedEvent extends Event { + private final String namespace; + + public SettingsUpdatedEvent(String namespace) { + this.namespace = namespace; + } + + public String getNamespace() { + return namespace; + } } diff --git a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java index b303939cd3e813826af029b06966332b1ec1efd7..676b64204106c10c976b38d420a8eccb15f74d68 100644 --- a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java +++ b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java @@ -930,15 +930,11 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { } public void mergeSettings(Settings s, String namespace) throws DbException { - boolean changed = false; lock.writeLock().lock(); try { T txn = db.startTransaction(); try { - if (!s.equals(db.getSettings(txn, namespace))) { - db.mergeSettings(txn, s, namespace); - changed = true; - } + db.mergeSettings(txn, s, namespace); db.commitTransaction(txn); } catch (DbException e) { db.abortTransaction(txn); @@ -947,7 +943,7 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { } finally { lock.writeLock().unlock(); } - if (changed) eventBus.broadcast(new SettingsUpdatedEvent()); + eventBus.broadcast(new SettingsUpdatedEvent(namespace)); } public void receiveAck(ContactId c, Ack a) throws DbException {