diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java index cabb2f653..84d58c61e 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java @@ -42,6 +42,7 @@ import static java.util.Collections.list; import static java.util.Collections.singletonList; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; +import static org.briarproject.bramble.api.plugin.LanTcpConstants.DEFAULT_PREF_PLUGIN_ENABLE; import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE; import static org.briarproject.bramble.api.plugin.Plugin.State.INACTIVE; import static org.briarproject.bramble.util.IoUtils.tryToClose; @@ -82,7 +83,8 @@ class AndroidLanTcpPlugin extends LanTcpPlugin { if (used.getAndSet(true)) throw new IllegalStateException(); initialisePortProperty(); Settings settings = callback.getSettings(); - state.setStarted(settings.getBoolean(PREF_PLUGIN_ENABLE, false)); + state.setStarted(settings.getBoolean(PREF_PLUGIN_ENABLE, + DEFAULT_PREF_PLUGIN_ENABLE)); updateConnectionStatus(); } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/BluetoothConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/BluetoothConstants.java index c2e506851..6b8a654bd 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/BluetoothConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/BluetoothConstants.java @@ -6,6 +6,10 @@ public interface BluetoothConstants { int UUID_BYTES = 16; + // Transport properties String PROP_ADDRESS = "address"; String PROP_UUID = "uuid"; + + // Default value for PREF_PLUGIN_ENABLE + boolean DEFAULT_PREF_PLUGIN_ENABLE = false; } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/LanTcpConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/LanTcpConstants.java index 69880b4ab..f3fe7456f 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/LanTcpConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/LanTcpConstants.java @@ -12,4 +12,7 @@ public interface LanTcpConstants { // Local settings (not shared with contacts) String PREF_LAN_IP_PORTS = "ipPorts"; String PREF_IPV6 = "ipv6"; + + // Default value for PREF_PLUGIN_ENABLE + boolean DEFAULT_PREF_PLUGIN_ENABLE = true; } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java index e22d6da4a..e10da185d 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java @@ -4,6 +4,7 @@ public interface TorConstants { TransportId ID = new TransportId("org.briarproject.bramble.tor"); + // Transport properties String PROP_ONION_V2 = "onion"; String PROP_ONION_V3 = "onion3"; @@ -13,17 +14,25 @@ public interface TorConstants { int CONNECT_TO_PROXY_TIMEOUT = 5000; // Milliseconds int EXTRA_SOCKET_TIMEOUT = 30000; // Milliseconds + // Local settings (not shared with contacts) String PREF_TOR_NETWORK = "network2"; String PREF_TOR_PORT = "port"; String PREF_TOR_MOBILE = "useMobileData"; String PREF_TOR_ONLY_WHEN_CHARGING = "onlyWhenCharging"; + // Values for PREF_TOR_NETWORK int PREF_TOR_NETWORK_AUTOMATIC = 0; int PREF_TOR_NETWORK_WITHOUT_BRIDGES = 1; int PREF_TOR_NETWORK_WITH_BRIDGES = 2; // TODO: Remove when settings migration code is removed int PREF_TOR_NETWORK_NEVER = 3; + // Default values for local settings + boolean DEFAULT_PREF_PLUGIN_ENABLE = true; + int DEFAULT_PREF_TOR_NETWORK = PREF_TOR_NETWORK_AUTOMATIC; + boolean DEFAULT_PREF_TOR_MOBILE = true; + boolean DEFAULT_PREF_TOR_ONLY_WHEN_CHARGING = false; + /** * Reason flag returned by {@link Plugin#getReasonsDisabled()}. */ diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/WanTcpConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/WanTcpConstants.java index abb11b9a6..37bd5c672 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/WanTcpConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/WanTcpConstants.java @@ -4,4 +4,7 @@ public interface WanTcpConstants { TransportId ID = new TransportId("org.briarproject.bramble.wan"); + // Default value for PREF_PLUGIN_ENABLE + boolean DEFAULT_PREF_PLUGIN_ENABLE = false; } + diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java index 85c37a643..643af4608 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothPlugin.java @@ -46,6 +46,7 @@ import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_BLUETOOTH; +import static org.briarproject.bramble.api.plugin.BluetoothConstants.DEFAULT_PREF_PLUGIN_ENABLE; import static org.briarproject.bramble.api.plugin.BluetoothConstants.ID; import static org.briarproject.bramble.api.plugin.BluetoothConstants.PROP_ADDRESS; import static org.briarproject.bramble.api.plugin.BluetoothConstants.PROP_UUID; @@ -164,7 +165,8 @@ abstract class BluetoothPlugin implements DuplexPlugin, EventListener { public void start() throws PluginException { if (used.getAndSet(true)) throw new IllegalStateException(); Settings settings = callback.getSettings(); - boolean enabledByUser = settings.getBoolean(PREF_PLUGIN_ENABLE, false); + boolean enabledByUser = settings.getBoolean(PREF_PLUGIN_ENABLE, + DEFAULT_PREF_PLUGIN_ENABLE); state.setStarted(enabledByUser); try { initialiseAdapter(); @@ -432,7 +434,8 @@ abstract class BluetoothPlugin implements DuplexPlugin, EventListener { @IoExecutor private void onSettingsUpdated(Settings settings) { - boolean enabledByUser = settings.getBoolean(PREF_PLUGIN_ENABLE, false); + boolean enabledByUser = settings.getBoolean(PREF_PLUGIN_ENABLE, + DEFAULT_PREF_PLUGIN_ENABLE); SS ss = state.setEnabledByUser(enabledByUser); State s = getState(); if (ss != null) { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java index b7d64b3fa..2416f233f 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java @@ -38,6 +38,7 @@ import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_LAN; +import static org.briarproject.bramble.api.plugin.LanTcpConstants.DEFAULT_PREF_PLUGIN_ENABLE; import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID; import static org.briarproject.bramble.api.plugin.LanTcpConstants.PREF_IPV6; import static org.briarproject.bramble.api.plugin.LanTcpConstants.PREF_LAN_IP_PORTS; @@ -103,7 +104,8 @@ class LanTcpPlugin extends TcpPlugin { if (used.getAndSet(true)) throw new IllegalStateException(); initialisePortProperty(); Settings settings = callback.getSettings(); - state.setStarted(settings.getBoolean(PREF_PLUGIN_ENABLE, false)); + state.setStarted(settings.getBoolean(PREF_PLUGIN_ENABLE, + DEFAULT_PREF_PLUGIN_ENABLE)); bind(); } @@ -116,6 +118,11 @@ class LanTcpPlugin extends TcpPlugin { } } + @Override + protected boolean isEnabledByDefault() { + return DEFAULT_PREF_PLUGIN_ENABLE; + } + @Override protected List getLocalSocketAddresses(boolean ipv4) { TransportProperties p = callback.getLocalProperties(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java index 522d1f0d2..e97ff2993 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java @@ -102,6 +102,11 @@ abstract class TcpPlugin implements DuplexPlugin, EventListener { protected abstract boolean isConnectable(InterfaceAddress local, InetSocketAddress remote); + /** + * Returns true if the plugin is enabled by default. + */ + protected abstract boolean isEnabledByDefault(); + TcpPlugin(Executor ioExecutor, Backoff backoff, PluginCallback callback, int maxLatency, int maxIdleTime, int connectionTimeout) { this.ioExecutor = ioExecutor; @@ -131,7 +136,8 @@ abstract class TcpPlugin implements DuplexPlugin, EventListener { public void start() { if (used.getAndSet(true)) throw new IllegalStateException(); Settings settings = callback.getSettings(); - state.setStarted(settings.getBoolean(PREF_PLUGIN_ENABLE, false)); + state.setStarted( + settings.getBoolean(PREF_PLUGIN_ENABLE, isEnabledByDefault())); bind(); } @@ -402,7 +408,8 @@ abstract class TcpPlugin implements DuplexPlugin, EventListener { @IoExecutor private void onSettingsUpdated(Settings settings) { - boolean enabledByUser = settings.getBoolean(PREF_PLUGIN_ENABLE, false); + boolean enabledByUser = + settings.getBoolean(PREF_PLUGIN_ENABLE, isEnabledByDefault()); List toClose = state.setEnabledByUser(enabledByUser); State s = getState(); if (!toClose.isEmpty()) { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPlugin.java index 42f686ebc..d466e87b0 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/WanTcpPlugin.java @@ -17,6 +17,7 @@ import java.util.concurrent.Executor; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; +import static org.briarproject.bramble.api.plugin.WanTcpConstants.DEFAULT_PREF_PLUGIN_ENABLE; import static org.briarproject.bramble.api.plugin.WanTcpConstants.ID; @MethodsNotNullByDefault @@ -42,6 +43,11 @@ class WanTcpPlugin extends TcpPlugin { return ID; } + @Override + protected boolean isEnabledByDefault() { + return DEFAULT_PREF_PLUGIN_ENABLE; + } + @Override protected List getLocalSocketAddresses(boolean ipv4) { if (!ipv4) return emptyList(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java index 374f221af..ea0a46495 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java @@ -75,6 +75,10 @@ import static org.briarproject.bramble.api.plugin.Plugin.State.ENABLING; import static org.briarproject.bramble.api.plugin.Plugin.State.INACTIVE; import static org.briarproject.bramble.api.plugin.Plugin.State.STARTING_STOPPING; import static org.briarproject.bramble.api.plugin.TorConstants.CONTROL_PORT; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_PLUGIN_ENABLE; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_TOR_MOBILE; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_TOR_NETWORK; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_TOR_ONLY_WHEN_CHARGING; import static org.briarproject.bramble.api.plugin.TorConstants.ID; import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_MOBILE; import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK; @@ -290,9 +294,9 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { // TODO: Remove after a reasonable migration period (added 2020-06-25) private Settings migrateSettings(Settings settings) { int network = settings.getInt(PREF_TOR_NETWORK, - PREF_TOR_NETWORK_AUTOMATIC); + DEFAULT_PREF_TOR_NETWORK); if (network == PREF_TOR_NETWORK_NEVER) { - settings.putInt(PREF_TOR_NETWORK, PREF_TOR_NETWORK_AUTOMATIC); + settings.putInt(PREF_TOR_NETWORK, DEFAULT_PREF_TOR_NETWORK); settings.putBoolean(PREF_PLUGIN_ENABLE, false); callback.mergeSettings(settings); } @@ -774,13 +778,15 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener { String country = locationUtils.getCurrentCountry(); boolean blocked = circumventionProvider.isTorProbablyBlocked(country); - boolean enabledByUser = - settings.getBoolean(PREF_PLUGIN_ENABLE, true); + boolean enabledByUser = settings.getBoolean(PREF_PLUGIN_ENABLE, + DEFAULT_PREF_PLUGIN_ENABLE); int network = settings.getInt(PREF_TOR_NETWORK, - PREF_TOR_NETWORK_AUTOMATIC); - boolean useMobile = settings.getBoolean(PREF_TOR_MOBILE, true); + DEFAULT_PREF_TOR_NETWORK); + boolean useMobile = settings.getBoolean(PREF_TOR_MOBILE, + DEFAULT_PREF_TOR_MOBILE); boolean onlyWhenCharging = - settings.getBoolean(PREF_TOR_ONLY_WHEN_CHARGING, false); + settings.getBoolean(PREF_TOR_ONLY_WHEN_CHARGING, + DEFAULT_PREF_TOR_ONLY_WHEN_CHARGING); boolean bridgesWork = circumventionProvider.doBridgesWork(country); boolean automatic = network == PREF_TOR_NETWORK_AUTOMATIC; 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 0c41e6fba..c09f91190 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 @@ -75,6 +75,9 @@ import static androidx.core.view.ViewCompat.LAYOUT_DIRECTION_LTR; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.bramble.api.plugin.Plugin.PREF_PLUGIN_ENABLE; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_TOR_MOBILE; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_TOR_NETWORK; +import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_PREF_TOR_ONLY_WHEN_CHARGING; import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_MOBILE; import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK; import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK_AUTOMATIC; @@ -372,9 +375,9 @@ public class SettingsFragment extends PreferenceFragmentCompat // TODO: Remove after a reasonable migration period (added 2020-06-25) private Settings migrateTorSettings(Settings s) { - int network = s.getInt(PREF_TOR_NETWORK, PREF_TOR_NETWORK_AUTOMATIC); + int network = s.getInt(PREF_TOR_NETWORK, DEFAULT_PREF_TOR_NETWORK); if (network == PREF_TOR_NETWORK_NEVER) { - s.putInt(PREF_TOR_NETWORK, PREF_TOR_NETWORK_AUTOMATIC); + s.putInt(PREF_TOR_NETWORK, DEFAULT_PREF_TOR_NETWORK); s.putBoolean(PREF_PLUGIN_ENABLE, false); // We don't need to save the migrated settings - the Tor plugin is // responsible for that. This code just handles the case where the @@ -388,29 +391,32 @@ public class SettingsFragment extends PreferenceFragmentCompat // due to events, we might try to display before a load completed if (!settingsLoaded) return; - boolean btEnabledSetting = - btSettings.getBoolean(PREF_PLUGIN_ENABLE, false); + boolean btEnabledSetting = btSettings.getBoolean(PREF_PLUGIN_ENABLE, + BluetoothConstants.DEFAULT_PREF_PLUGIN_ENABLE); enableBluetooth.setChecked(btEnabledSetting); boolean wifiEnabledSetting = - wifiSettings.getBoolean(PREF_PLUGIN_ENABLE, false); + wifiSettings.getBoolean(PREF_PLUGIN_ENABLE, + LanTcpConstants.DEFAULT_PREF_PLUGIN_ENABLE); enableWifi.setChecked(wifiEnabledSetting); boolean torEnabledSetting = - torSettings.getBoolean(PREF_PLUGIN_ENABLE, true); + torSettings.getBoolean(PREF_PLUGIN_ENABLE, + TorConstants.DEFAULT_PREF_PLUGIN_ENABLE); enableTor.setChecked(torEnabledSetting); int torNetworkSetting = torSettings.getInt(PREF_TOR_NETWORK, - PREF_TOR_NETWORK_AUTOMATIC); + DEFAULT_PREF_TOR_NETWORK); torNetwork.setValue(Integer.toString(torNetworkSetting)); setTorNetworkSummary(torNetworkSetting); - boolean torMobileSetting = - torSettings.getBoolean(PREF_TOR_MOBILE, true); + boolean torMobileSetting = torSettings.getBoolean(PREF_TOR_MOBILE, + DEFAULT_PREF_TOR_MOBILE); torMobile.setChecked(torMobileSetting); boolean torChargingSetting = - torSettings.getBoolean(PREF_TOR_ONLY_WHEN_CHARGING, false); + torSettings.getBoolean(PREF_TOR_ONLY_WHEN_CHARGING, + DEFAULT_PREF_TOR_ONLY_WHEN_CHARGING); torOnlyWhenCharging.setChecked(torChargingSetting); displayScreenLockSetting();