summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap
diff options
context:
space:
mode:
authorcyberta <cyberta@riseup.net>2021-11-25 02:27:53 +0000
committercyberta <cyberta@riseup.net>2021-11-25 02:27:53 +0000
commitdcee5f2fa1dc67e5b08223db3441da8bd38e8b20 (patch)
tree7f9ecf27ea203335fddcee3085d55e0c7fe5b8cf /app/src/main/java/se/leap
parent5a2ff7c85f13fe2e875e4ca7ec4192df0e896d01 (diff)
parent4795e984c940a7bbf1c2e2cae6e5eb1cf143ba4e (diff)
Merge branch 'snowflake_ui' into 'master'
implement UI to enable/disable tor in settings fragment See merge request leap/bitmask_android!146
Diffstat (limited to 'app/src/main/java/se/leap')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/SettingsFragment.java15
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java2
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/utils/PreferenceHelper.java37
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java4
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java2
5 files changed, 47 insertions, 13 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/fragments/SettingsFragment.java b/app/src/main/java/se/leap/bitmaskclient/base/fragments/SettingsFragment.java
index db19b86a..ed1e8b6d 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/fragments/SettingsFragment.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/fragments/SettingsFragment.java
@@ -36,7 +36,10 @@ import static se.leap.bitmaskclient.base.models.Constants.USE_BRIDGES;
import static se.leap.bitmaskclient.base.models.Constants.USE_IPv6_FIREWALL;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getShowAlwaysOnDialog;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getUseBridges;
+import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getUseSnowflake;
+import static se.leap.bitmaskclient.base.utils.PreferenceHelper.hasSnowflakePrefs;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.useBridges;
+import static se.leap.bitmaskclient.base.utils.PreferenceHelper.useSnowflake;
public class SettingsFragment extends Fragment implements SharedPreferences.OnSharedPreferenceChangeListener {
@@ -63,6 +66,7 @@ public class SettingsFragment extends Fragment implements SharedPreferences.OnSh
initFirewallEntry(view);
initTetheringEntry(view);
initUseBridgesEntry(view);
+ initUseSnowflakeEntry(view);
return view;
}
@@ -94,6 +98,17 @@ public class SettingsFragment extends Fragment implements SharedPreferences.OnSh
}
}
+ private void initUseSnowflakeEntry(View rootView) {
+ IconSwitchEntry useSnowflake = rootView.findViewById(R.id.snowflake_switch);
+ useSnowflake.setVisibility(VISIBLE);
+ useSnowflake.setChecked(hasSnowflakePrefs(getContext()) && getUseSnowflake(getContext()));
+ useSnowflake.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ if (!buttonView.isPressed()) {
+ return;
+ }
+ useSnowflake(getContext(), isChecked);
+ });
+ }
private void initAlwaysOnVpnEntry(View rootView) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java b/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java
index d91880c6..016a8563 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/models/Constants.java
@@ -41,7 +41,7 @@ public interface Constants {
String RESTART_ON_UPDATE = "restart_on_update";
String LAST_UPDATE_CHECK = "last_update_check";
String PREFERRED_CITY = "preferred_city";
- String USE_TOR = "use_tor";
+ String USE_SNOWFLAKE = "use_snowflake";
//////////////////////////////////////////////
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/PreferenceHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/PreferenceHelper.java
index 40b7fc05..515ec282 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/utils/PreferenceHelper.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/PreferenceHelper.java
@@ -2,6 +2,7 @@ package se.leap.bitmaskclient.base.utils;
import android.content.Context;
import android.content.SharedPreferences;
+import android.preference.Preference;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
@@ -37,7 +38,7 @@ import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES;
import static se.leap.bitmaskclient.base.models.Constants.SHOW_EXPERIMENTAL;
import static se.leap.bitmaskclient.base.models.Constants.USE_BRIDGES;
import static se.leap.bitmaskclient.base.models.Constants.USE_IPv6_FIREWALL;
-import static se.leap.bitmaskclient.base.models.Constants.USE_TOR;
+import static se.leap.bitmaskclient.base.models.Constants.USE_SNOWFLAKE;
/**
* Created by cyberta on 18.03.18.
@@ -155,20 +156,29 @@ public class PreferenceHelper {
public static void useBridges(Context context, boolean isEnabled) {
putBoolean(context, USE_BRIDGES, isEnabled);
- putBoolean(context, USE_TOR, isEnabled);
+ }
+
+ public static Boolean getUseSnowflake(SharedPreferences preferences) {
+ return preferences.getBoolean(USE_SNOWFLAKE, true);
+ }
+
+ public static void useSnowflake(Context context, boolean isEnabled) {
+ putBoolean(context, USE_SNOWFLAKE, isEnabled);
if (!isEnabled) {
TorStatusObservable.setProxyPort(-1);
}
}
- // in contrast to USE_BRIDGES, USE_TOR in enabled by default
- // This way the initial provider setup can rely on tor as fallback circumvention mechanism
- public static Boolean getUseTor(SharedPreferences preferences) {
- return preferences.getBoolean(USE_TOR, true);
+ public static boolean hasSnowflakePrefs(SharedPreferences preferences) {
+ return preferences.contains(USE_SNOWFLAKE);
}
- public static Boolean getUseTor(Context context) {
- return getBoolean(context, USE_TOR, true);
+ public static boolean hasSnowflakePrefs(Context context) {
+ return hasKey(context, USE_SNOWFLAKE);
+ }
+
+ public static Boolean getUseSnowflake(Context context) {
+ return getBoolean(context, USE_SNOWFLAKE, true);
}
public static void saveBattery(Context context, boolean isEnabled) {
@@ -306,7 +316,7 @@ public class PreferenceHelper {
preferences.edit().putString(key, value).apply();
}
- public static Boolean getBoolean(Context context, String key, Boolean defValue) {
+ public static boolean getBoolean(Context context, String key, Boolean defValue) {
if (context == null) {
return false;
}
@@ -323,4 +333,13 @@ public class PreferenceHelper {
SharedPreferences preferences = context.getSharedPreferences(SHARED_PREFERENCES, MODE_PRIVATE);
preferences.edit().putBoolean(key, value).apply();
}
+
+ private static Boolean hasKey(Context context, String key) {
+ if (context == null) {
+ return false;
+ }
+
+ SharedPreferences preferences = context.getSharedPreferences(SHARED_PREFERENCES, MODE_PRIVATE);
+ return preferences.contains(key);
+ }
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
index 52046e07..808d9e75 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
@@ -200,7 +200,7 @@ public abstract class ProviderApiManagerBase {
}
try {
- if (PreferenceHelper.getUseBridges(preferences)) {
+ if (PreferenceHelper.hasSnowflakePrefs(preferences)) {
startTorProxy();
}
} catch (InterruptedException | IllegalStateException e) {
@@ -313,7 +313,7 @@ public abstract class ProviderApiManagerBase {
protected boolean startTorProxy() throws InterruptedException, IllegalStateException, TimeoutException {
if (EipStatus.getInstance().isDisconnected() &&
- PreferenceHelper.getUseTor(preferences) &&
+ PreferenceHelper.getUseSnowflake(preferences) &&
serviceCallback.startTorService()) {
waitForTorCircuits();
if (TorStatusObservable.isCancelled()) {
diff --git a/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java b/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java
index 461ee356..68988b67 100644
--- a/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java
+++ b/app/src/main/java/se/leap/bitmaskclient/tor/TorServiceCommand.java
@@ -126,7 +126,7 @@ public class TorServiceCommand {
private static TorServiceConnection initTorServiceConnection(Context context) throws InterruptedException, IllegalStateException {
Log.d(TAG, "initTorServiceConnection");
- if (PreferenceHelper.getUseTor(context)) {
+ if (PreferenceHelper.getUseSnowflake(context)) {
Log.d(TAG, "serviceConnection is still null");
if (!TorService.hasClientTransportPlugin()) {
TorService.setClientTransportPlugin(new ClientTransportPlugin(context.getApplicationContext()));