mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-15 12:19:54 +01:00
Add toggle setting for Tor plugin.
This commit is contained in:
@@ -13,6 +13,7 @@ public interface TorConstants {
|
|||||||
int CONNECT_TO_PROXY_TIMEOUT = 5000; // Milliseconds
|
int CONNECT_TO_PROXY_TIMEOUT = 5000; // Milliseconds
|
||||||
int EXTRA_SOCKET_TIMEOUT = 30000; // Milliseconds
|
int EXTRA_SOCKET_TIMEOUT = 30000; // Milliseconds
|
||||||
|
|
||||||
|
String PREF_TOR_ENABLE = "enable";
|
||||||
String PREF_TOR_NETWORK = "network2";
|
String PREF_TOR_NETWORK = "network2";
|
||||||
String PREF_TOR_PORT = "port";
|
String PREF_TOR_PORT = "port";
|
||||||
String PREF_TOR_MOBILE = "useMobileData";
|
String PREF_TOR_MOBILE = "useMobileData";
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ 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.INACTIVE;
|
||||||
import static org.briarproject.bramble.api.plugin.TorConstants.CONTROL_PORT;
|
import static org.briarproject.bramble.api.plugin.TorConstants.CONTROL_PORT;
|
||||||
import static org.briarproject.bramble.api.plugin.TorConstants.ID;
|
import static org.briarproject.bramble.api.plugin.TorConstants.ID;
|
||||||
|
import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_ENABLE;
|
||||||
import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_MOBILE;
|
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;
|
||||||
import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK_AUTOMATIC;
|
import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK_AUTOMATIC;
|
||||||
@@ -200,7 +201,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Load the settings
|
// Load the settings
|
||||||
settings = callback.getSettings();
|
settings = migrateSettings(callback.getSettings());
|
||||||
// Install or update the assets if necessary
|
// Install or update the assets if necessary
|
||||||
if (!assetsAreUpToDate()) installAssets();
|
if (!assetsAreUpToDate()) installAssets();
|
||||||
if (cookieFile.exists() && !cookieFile.delete())
|
if (cookieFile.exists() && !cookieFile.delete())
|
||||||
@@ -288,6 +289,18 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
bind();
|
bind();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Remove after a reasonable migration period (added 2020-01-16)
|
||||||
|
private Settings migrateSettings(Settings settings) {
|
||||||
|
int network = settings.getInt(PREF_TOR_NETWORK,
|
||||||
|
PREF_TOR_NETWORK_AUTOMATIC);
|
||||||
|
if (network == PREF_TOR_NETWORK_NEVER) {
|
||||||
|
settings.putInt(PREF_TOR_NETWORK, PREF_TOR_NETWORK_AUTOMATIC);
|
||||||
|
settings.putBoolean(PREF_TOR_ENABLE, false);
|
||||||
|
callback.mergeSettings(settings);
|
||||||
|
}
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean assetsAreUpToDate() {
|
private boolean assetsAreUpToDate() {
|
||||||
return doneFile.lastModified() > getLastUpdateTime();
|
return doneFile.lastModified() > getLastUpdateTime();
|
||||||
}
|
}
|
||||||
@@ -763,6 +776,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
String country = locationUtils.getCurrentCountry();
|
String country = locationUtils.getCurrentCountry();
|
||||||
boolean blocked =
|
boolean blocked =
|
||||||
circumventionProvider.isTorProbablyBlocked(country);
|
circumventionProvider.isTorProbablyBlocked(country);
|
||||||
|
boolean enabledByUser = settings.getBoolean(PREF_TOR_ENABLE, true);
|
||||||
int network = settings.getInt(PREF_TOR_NETWORK,
|
int network = settings.getInt(PREF_TOR_NETWORK,
|
||||||
PREF_TOR_NETWORK_AUTOMATIC);
|
PREF_TOR_NETWORK_AUTOMATIC);
|
||||||
boolean useMobile = settings.getBoolean(PREF_TOR_MOBILE, true);
|
boolean useMobile = settings.getBoolean(PREF_TOR_MOBILE, true);
|
||||||
@@ -785,7 +799,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
|
|
||||||
if (!online) {
|
if (!online) {
|
||||||
LOG.info("Disabling network, device is offline");
|
LOG.info("Disabling network, device is offline");
|
||||||
} else if (network == PREF_TOR_NETWORK_NEVER) {
|
} else if (!enabledByUser) {
|
||||||
LOG.info("Disabling network, user has disabled Tor");
|
LOG.info("Disabling network, user has disabled Tor");
|
||||||
disabledBySettings = true;
|
disabledBySettings = true;
|
||||||
reasonDisabled = REASON_USER;
|
reasonDisabled = REASON_USER;
|
||||||
@@ -866,11 +880,11 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
callback.pluginStateChanged(getState());
|
callback.pluginStateChanged(getState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Doesn't affect getState()
|
||||||
synchronized void setTorStarted() {
|
synchronized void setTorStarted() {
|
||||||
torStarted = true;
|
torStarted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
|
|
||||||
synchronized boolean isTorRunning() {
|
synchronized boolean isTorRunning() {
|
||||||
return torStarted && !stopped;
|
return torStarted && !stopped;
|
||||||
}
|
}
|
||||||
@@ -910,12 +924,14 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
|||||||
callback.pluginStateChanged(getState());
|
callback.pluginStateChanged(getState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Doesn't affect getState()
|
||||||
synchronized boolean setServerSocket(ServerSocket ss) {
|
synchronized boolean setServerSocket(ServerSocket ss) {
|
||||||
if (stopped || serverSocket != null) return false;
|
if (stopped || serverSocket != null) return false;
|
||||||
serverSocket = ss;
|
serverSocket = ss;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Doesn't affect getState()
|
||||||
synchronized void clearServerSocket(ServerSocket ss) {
|
synchronized void clearServerSocket(ServerSocket ss) {
|
||||||
if (serverSocket == ss) serverSocket = null;
|
if (serverSocket == ss) serverSocket = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ import static androidx.core.view.ViewCompat.LAYOUT_DIRECTION_LTR;
|
|||||||
import static java.util.logging.Level.INFO;
|
import static java.util.logging.Level.INFO;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
import static org.briarproject.bramble.api.plugin.BluetoothConstants.PREF_BT_ENABLE;
|
import static org.briarproject.bramble.api.plugin.BluetoothConstants.PREF_BT_ENABLE;
|
||||||
|
import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_ENABLE;
|
||||||
import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_MOBILE;
|
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;
|
||||||
import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK_AUTOMATIC;
|
import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK_AUTOMATIC;
|
||||||
@@ -105,16 +106,19 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
implements EventListener, OnPreferenceChangeListener {
|
implements EventListener, OnPreferenceChangeListener {
|
||||||
|
|
||||||
public static final String SETTINGS_NAMESPACE = "android-ui";
|
public static final String SETTINGS_NAMESPACE = "android-ui";
|
||||||
public static final String BT_NAMESPACE = BluetoothConstants.ID.getString();
|
|
||||||
public static final String TOR_NAMESPACE = TorConstants.ID.getString();
|
|
||||||
public static final String LANGUAGE = "pref_key_language";
|
public static final String LANGUAGE = "pref_key_language";
|
||||||
public static final String PREF_SCREEN_LOCK = "pref_key_lock";
|
public static final String PREF_SCREEN_LOCK = "pref_key_lock";
|
||||||
public static final String PREF_SCREEN_LOCK_TIMEOUT =
|
public static final String PREF_SCREEN_LOCK_TIMEOUT =
|
||||||
"pref_key_lock_timeout";
|
"pref_key_lock_timeout";
|
||||||
public static final String NOTIFY_SIGN_IN = "pref_key_notify_sign_in";
|
public static final String NOTIFY_SIGN_IN = "pref_key_notify_sign_in";
|
||||||
public static final String TOR_NETWORK = "pref_key_tor_network";
|
|
||||||
public static final String TOR_MOBILE = "pref_key_tor_mobile_data";
|
private static final String BT_NAMESPACE =
|
||||||
public static final String TOR_ONLY_WHEN_CHARGING =
|
BluetoothConstants.ID.getString();
|
||||||
|
private static final String TOR_NAMESPACE = TorConstants.ID.getString();
|
||||||
|
private static final String TOR_ENABLE = "pref_key_tor_enable";
|
||||||
|
private static final String TOR_NETWORK = "pref_key_tor_network";
|
||||||
|
private static final String TOR_MOBILE = "pref_key_tor_mobile_data";
|
||||||
|
private static final String TOR_ONLY_WHEN_CHARGING =
|
||||||
"pref_key_tor_only_when_charging";
|
"pref_key_tor_only_when_charging";
|
||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
@@ -123,6 +127,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
private SettingsActivity listener;
|
private SettingsActivity listener;
|
||||||
private ListPreference language;
|
private ListPreference language;
|
||||||
private ListPreference enableBluetooth;
|
private ListPreference enableBluetooth;
|
||||||
|
private SwitchPreference enableTor;
|
||||||
private ListPreference torNetwork;
|
private ListPreference torNetwork;
|
||||||
private SwitchPreference torMobile;
|
private SwitchPreference torMobile;
|
||||||
private SwitchPreference torOnlyWhenCharging;
|
private SwitchPreference torOnlyWhenCharging;
|
||||||
@@ -167,6 +172,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
setLanguageEntries();
|
setLanguageEntries();
|
||||||
ListPreference theme = findPreference("pref_key_theme");
|
ListPreference theme = findPreference("pref_key_theme");
|
||||||
enableBluetooth = findPreference("pref_key_bluetooth");
|
enableBluetooth = findPreference("pref_key_bluetooth");
|
||||||
|
enableTor = findPreference(TOR_ENABLE);
|
||||||
torNetwork = findPreference(TOR_NETWORK);
|
torNetwork = findPreference(TOR_NETWORK);
|
||||||
torMobile = findPreference(TOR_MOBILE);
|
torMobile = findPreference(TOR_MOBILE);
|
||||||
torOnlyWhenCharging = findPreference(TOR_ONLY_WHEN_CHARGING);
|
torOnlyWhenCharging = findPreference(TOR_ONLY_WHEN_CHARGING);
|
||||||
@@ -187,8 +193,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
UiUtils.setTheme(getActivity(), (String) newValue);
|
UiUtils.setTheme(getActivity(), (String) newValue);
|
||||||
// bring up parent activity, so it can change its theme as well
|
// bring up parent activity, so it can change its theme as well
|
||||||
// upstream bug: https://issuetracker.google.com/issues/38352704
|
// upstream bug: https://issuetracker.google.com/issues/38352704
|
||||||
Intent intent =
|
Intent intent = new Intent(getActivity(), ENTRY_ACTIVITY);
|
||||||
new Intent(getActivity(), ENTRY_ACTIVITY);
|
|
||||||
intent.setFlags(
|
intent.setFlags(
|
||||||
FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
|
FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
@@ -200,6 +205,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
enableBluetooth.setOnPreferenceChangeListener(this);
|
enableBluetooth.setOnPreferenceChangeListener(this);
|
||||||
|
enableTor.setOnPreferenceChangeListener(this);
|
||||||
torNetwork.setOnPreferenceChangeListener(this);
|
torNetwork.setOnPreferenceChangeListener(this);
|
||||||
torMobile.setOnPreferenceChangeListener(this);
|
torMobile.setOnPreferenceChangeListener(this);
|
||||||
torOnlyWhenCharging.setOnPreferenceChangeListener(this);
|
torOnlyWhenCharging.setOnPreferenceChangeListener(this);
|
||||||
@@ -365,6 +371,10 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
btSettings.getBoolean(PREF_BT_ENABLE, false);
|
btSettings.getBoolean(PREF_BT_ENABLE, false);
|
||||||
enableBluetooth.setValue(Boolean.toString(btEnabledSetting));
|
enableBluetooth.setValue(Boolean.toString(btEnabledSetting));
|
||||||
|
|
||||||
|
boolean torEnabledSetting =
|
||||||
|
torSettings.getBoolean(PREF_TOR_ENABLE, true);
|
||||||
|
enableTor.setChecked(torEnabledSetting);
|
||||||
|
|
||||||
int torNetworkSetting = torSettings.getInt(PREF_TOR_NETWORK,
|
int torNetworkSetting = torSettings.getInt(PREF_TOR_NETWORK,
|
||||||
PREF_TOR_NETWORK_AUTOMATIC);
|
PREF_TOR_NETWORK_AUTOMATIC);
|
||||||
torNetwork.setValue(Integer.toString(torNetworkSetting));
|
torNetwork.setValue(Integer.toString(torNetworkSetting));
|
||||||
@@ -437,9 +447,10 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
// - pref_key_lock (screenLock -> displayScreenLockSetting())
|
// - pref_key_lock (screenLock -> displayScreenLockSetting())
|
||||||
// - pref_key_lock_timeout (screenLockTimeout)
|
// - pref_key_lock_timeout (screenLockTimeout)
|
||||||
enableBluetooth.setEnabled(enabled);
|
enableBluetooth.setEnabled(enabled);
|
||||||
torNetwork.setEnabled(enabled);
|
enableTor.setEnabled(enabled);
|
||||||
torMobile.setEnabled(enabled);
|
torNetwork.setEnabled(enabled && enableTor.isChecked());
|
||||||
torOnlyWhenCharging.setEnabled(enabled);
|
torMobile.setEnabled(enabled && enableTor.isChecked());
|
||||||
|
torOnlyWhenCharging.setEnabled(enabled && enableTor.isChecked());
|
||||||
if (!enabled) screenLock.setEnabled(false);
|
if (!enabled) screenLock.setEnabled(false);
|
||||||
notifyPrivateMessages.setEnabled(enabled);
|
notifyPrivateMessages.setEnabled(enabled);
|
||||||
notifyGroupMessages.setEnabled(enabled);
|
notifyGroupMessages.setEnabled(enabled);
|
||||||
@@ -541,6 +552,13 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
} else if (preference == enableBluetooth) {
|
} else if (preference == enableBluetooth) {
|
||||||
boolean btSetting = Boolean.valueOf((String) newValue);
|
boolean btSetting = Boolean.valueOf((String) newValue);
|
||||||
storeBluetoothSettings(btSetting);
|
storeBluetoothSettings(btSetting);
|
||||||
|
} else if (preference == enableTor) {
|
||||||
|
boolean torEnabledSetting = (Boolean) newValue;
|
||||||
|
torNetwork.setEnabled(torNetwork.isEnabled() && torEnabledSetting);
|
||||||
|
torMobile.setEnabled(torMobile.isEnabled() && torEnabledSetting);
|
||||||
|
torOnlyWhenCharging.setEnabled(torOnlyWhenCharging.isEnabled() &&
|
||||||
|
torEnabledSetting);
|
||||||
|
storeTorEnabledSetting(torEnabledSetting);
|
||||||
} else if (preference == torNetwork) {
|
} else if (preference == torNetwork) {
|
||||||
int torNetworkSetting = Integer.valueOf((String) newValue);
|
int torNetworkSetting = Integer.valueOf((String) newValue);
|
||||||
storeTorNetworkSetting(torNetworkSetting);
|
storeTorNetworkSetting(torNetworkSetting);
|
||||||
@@ -604,6 +622,12 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void storeTorEnabledSetting(boolean torEnabledSetting) {
|
||||||
|
Settings s = new Settings();
|
||||||
|
s.putBoolean(PREF_TOR_ENABLE, torEnabledSetting);
|
||||||
|
mergeSettings(s, TOR_NAMESPACE);
|
||||||
|
}
|
||||||
|
|
||||||
private void storeTorNetworkSetting(int torNetworkSetting) {
|
private void storeTorNetworkSetting(int torNetworkSetting) {
|
||||||
Settings s = new Settings();
|
Settings s = new Settings();
|
||||||
s.putInt(PREF_TOR_NETWORK, torNetworkSetting);
|
s.putInt(PREF_TOR_NETWORK, torNetworkSetting);
|
||||||
|
|||||||
@@ -13,13 +13,11 @@
|
|||||||
<item>@string/tor_network_setting_automatic</item>
|
<item>@string/tor_network_setting_automatic</item>
|
||||||
<item>@string/tor_network_setting_without_bridges</item>
|
<item>@string/tor_network_setting_without_bridges</item>
|
||||||
<item>@string/tor_network_setting_with_bridges</item>
|
<item>@string/tor_network_setting_with_bridges</item>
|
||||||
<item>@string/tor_network_setting_never</item>
|
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="tor_network_setting_values">
|
<string-array name="tor_network_setting_values">
|
||||||
<item>0</item>
|
<item>0</item>
|
||||||
<item>1</item>
|
<item>1</item>
|
||||||
<item>2</item>
|
<item>2</item>
|
||||||
<item>3</item>
|
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="pref_language_values">
|
<string-array name="pref_language_values">
|
||||||
|
|||||||
@@ -441,12 +441,13 @@
|
|||||||
<string name="pref_theme_auto">Automatic (Daytime)</string>
|
<string name="pref_theme_auto">Automatic (Daytime)</string>
|
||||||
<string name="pref_theme_system">System Default</string>
|
<string name="pref_theme_system">System Default</string>
|
||||||
|
|
||||||
<!-- Settings Network -->
|
<!-- Settings Connections -->
|
||||||
<string name="network_settings_title">Networks</string>
|
<string name="network_settings_title">Connections</string>
|
||||||
<string name="bluetooth_setting">Connect via Bluetooth</string>
|
<string name="bluetooth_setting">Connect via Bluetooth</string>
|
||||||
<string name="bluetooth_setting_enabled">Whenever contacts are nearby</string>
|
<string name="bluetooth_setting_enabled">Whenever contacts are nearby</string>
|
||||||
<string name="bluetooth_setting_disabled">Only when adding contacts</string>
|
<string name="bluetooth_setting_disabled">Only when adding contacts</string>
|
||||||
<string name="tor_network_setting">Connect via Internet (Tor)</string>
|
<string name="tor_enable_title">Connect to contacts via Internet (Tor)</string>
|
||||||
|
<string name="tor_network_setting">Connection method for Internet (Tor)</string>
|
||||||
<string name="tor_network_setting_automatic">Automatic based on location</string>
|
<string name="tor_network_setting_automatic">Automatic based on location</string>
|
||||||
<string name="tor_network_setting_without_bridges">Use Tor without bridges</string>
|
<string name="tor_network_setting_without_bridges">Use Tor without bridges</string>
|
||||||
<string name="tor_network_setting_with_bridges">Use Tor with bridges</string>
|
<string name="tor_network_setting_with_bridges">Use Tor with bridges</string>
|
||||||
|
|||||||
@@ -39,6 +39,14 @@
|
|||||||
android:title="@string/bluetooth_setting"
|
android:title="@string/bluetooth_setting"
|
||||||
app:iconSpaceReserved="false"/>
|
app:iconSpaceReserved="false"/>
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="true"
|
||||||
|
android:key="pref_key_tor_enable"
|
||||||
|
android:persistent="false"
|
||||||
|
android:title="@string/tor_enable_title"
|
||||||
|
android:widgetLayout="@layout/preference_switch_compat"
|
||||||
|
app:iconSpaceReserved="false"/>
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="0"
|
android:defaultValue="0"
|
||||||
android:entries="@array/tor_network_setting_names"
|
android:entries="@array/tor_network_setting_names"
|
||||||
|
|||||||
Reference in New Issue
Block a user