Attach updated settings to SettingsUpdatedEvent.

This commit is contained in:
akwizgran
2018-08-09 17:57:31 +01:00
parent de63141997
commit 7b116f15df
6 changed files with 58 additions and 58 deletions

View File

@@ -16,7 +16,6 @@ import android.support.v4.app.TaskStackBuilder;
import org.briarproject.bramble.api.Multiset;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.db.DatabaseExecutor;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.event.Event;
import org.briarproject.bramble.api.event.EventListener;
@@ -53,11 +52,9 @@ import org.briarproject.briar.api.sharing.event.InvitationResponseReceivedEvent;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger;
import javax.annotation.concurrent.ThreadSafe;
import javax.inject.Inject;
@@ -78,8 +75,6 @@ import static android.support.v4.app.NotificationCompat.PRIORITY_LOW;
import static android.support.v4.app.NotificationCompat.PRIORITY_MIN;
import static android.support.v4.app.NotificationCompat.VISIBILITY_SECRET;
import static android.support.v4.content.ContextCompat.getColor;
import static java.util.logging.Level.WARNING;
import static org.briarproject.bramble.util.LogUtils.logException;
import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
import static org.briarproject.briar.android.contact.ConversationActivity.CONTACT_ID;
import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_BLOGS;
@@ -96,10 +91,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
private static final long SOUND_DELAY = TimeUnit.SECONDS.toMillis(2);
private static final Logger LOG =
Logger.getLogger(AndroidNotificationManagerImpl.class.getName());
private final Executor dbExecutor;
private final SettingsManager settingsManager;
private final AndroidExecutor androidExecutor;
private final Clock clock;
@@ -125,10 +116,8 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
private volatile Settings settings = new Settings();
@Inject
AndroidNotificationManagerImpl(@DatabaseExecutor Executor dbExecutor,
SettingsManager settingsManager, AndroidExecutor androidExecutor,
Application app, Clock clock) {
this.dbExecutor = dbExecutor;
AndroidNotificationManagerImpl(SettingsManager settingsManager,
AndroidExecutor androidExecutor, Application app, Clock clock) {
this.settingsManager = settingsManager;
this.androidExecutor = androidExecutor;
this.clock = clock;
@@ -232,7 +221,8 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
public void eventOccurred(Event e) {
if (e instanceof SettingsUpdatedEvent) {
SettingsUpdatedEvent s = (SettingsUpdatedEvent) e;
if (s.getNamespace().equals(SETTINGS_NAMESPACE)) loadSettings();
if (s.getNamespace().equals(SETTINGS_NAMESPACE))
settings = s.getSettings();
} else if (e instanceof PrivateMessageReceivedEvent) {
PrivateMessageReceivedEvent p = (PrivateMessageReceivedEvent) e;
showContactNotification(p.getContactId());
@@ -263,15 +253,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
}
}
private void loadSettings() {
dbExecutor.execute(() -> {
try {
settings = settingsManager.getSettings(SETTINGS_NAMESPACE);
} catch (DbException e) {
logException(LOG, WARNING, e);
}
});
}
@UiThread
@Override

View File

@@ -135,7 +135,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
private Preference notifySound;
// Fields that are accessed from background threads must be volatile
volatile Settings settings;
private volatile Settings settings, btSettings, torSettings;
@Inject
volatile SettingsManager settingsManager;
@Inject
@@ -241,7 +242,6 @@ public class SettingsFragment extends PreferenceFragmentCompat
if (testing == null) throw new AssertionError();
testing.setVisible(false);
}
}
@Override
@@ -347,30 +347,31 @@ public class SettingsFragment extends PreferenceFragmentCompat
try {
long start = now();
settings = settingsManager.getSettings(SETTINGS_NAMESPACE);
Settings btSettings = settingsManager.getSettings(BT_NAMESPACE);
Settings torSettings =
settingsManager.getSettings(TOR_NAMESPACE);
btSettings = settingsManager.getSettings(BT_NAMESPACE);
torSettings = settingsManager.getSettings(TOR_NAMESPACE);
logDuration(LOG, "Loading settings", start);
boolean btSetting =
btSettings.getBoolean(PREF_BT_ENABLE, false);
int torNetworkSetting = torSettings.getInt(PREF_TOR_NETWORK,
PREF_TOR_NETWORK_AUTOMATIC);
boolean torMobileSetting =
torSettings.getBoolean(PREF_TOR_MOBILE, true);
displaySettings(btSetting, torNetworkSetting, torMobileSetting);
displaySettings();
} catch (DbException e) {
logException(LOG, WARNING, e);
}
});
}
private void displaySettings(boolean btSetting, int torNetworkSetting,
boolean torMobileSetting) {
private void displaySettings() {
listener.runOnUiThreadUnlessDestroyed(() -> {
enableBluetooth.setValue(Boolean.toString(btSetting));
boolean btEnabledSetting =
btSettings.getBoolean(PREF_BT_ENABLE, false);
enableBluetooth.setValue(Boolean.toString(btEnabledSetting));
int torNetworkSetting = torSettings.getInt(PREF_TOR_NETWORK,
PREF_TOR_NETWORK_AUTOMATIC);
torNetwork.setValue(Integer.toString(torNetworkSetting));
setTorNetworkSummary(torNetworkSetting);
boolean torMobileSetting =
torSettings.getBoolean(PREF_TOR_MOBILE, true);
torMobile.setChecked(torMobileSetting);
displayScreenLockSetting();
if (SDK_INT < 26) {
@@ -660,12 +661,20 @@ public class SettingsFragment extends PreferenceFragmentCompat
@Override
public void eventOccurred(Event e) {
if (e instanceof SettingsUpdatedEvent) {
String namespace = ((SettingsUpdatedEvent) e).getNamespace();
if (namespace.equals(BT_NAMESPACE)
|| namespace.equals(TOR_NAMESPACE)
|| namespace.equals(SETTINGS_NAMESPACE)) {
SettingsUpdatedEvent s = (SettingsUpdatedEvent) e;
String namespace = s.getNamespace();
if (namespace.equals(SETTINGS_NAMESPACE)) {
LOG.info("Settings updated");
loadSettings();
settings = s.getSettings();
displaySettings();
} else if (namespace.equals(BT_NAMESPACE)) {
LOG.info("Bluetooth settings updated");
btSettings = s.getSettings();
displaySettings();
} else if (namespace.equals(TOR_NAMESPACE)) {
LOG.info("Tor settings updated");
torSettings = s.getSettings();
displaySettings();
}
}
}