summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Privacy-policy.md15
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java5
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/fragments/SettingsFragment.java7
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java5
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/utils/SystemPropertiesHelper.java36
5 files changed, 67 insertions, 1 deletions
diff --git a/Privacy-policy.md b/Privacy-policy.md
new file mode 100644
index 00000000..d808088b
--- /dev/null
+++ b/Privacy-policy.md
@@ -0,0 +1,15 @@
+Privacy Policy for Bitmask
+===========================
+
+Bitmask does not communicate with any server other than the servers of the selected LEAP VPN provider.
+
+The authors don't collect any data nor logs. Logs that are created don't leave the app's storage and are deleted by default with each new successful connection. They are only accessible in the app.
+
+For the privacy policy of the LEAP VPN service you are using, please refer to the respective privacy policy.
+
+End of service
+==============
+The program and its components are under open-source licenses that allow you to use this app forever according to terms of the open-source licenses for details.
+
+However, the author reserves the right to suspend development or stop publishing the app or updates to it at any time.
+
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java b/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java
index 6c8e3115..3f73e49d 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/BitmaskApp.java
@@ -43,6 +43,7 @@ import static se.leap.bitmaskclient.base.models.Constants.SHARED_PREFERENCES;
import static se.leap.bitmaskclient.appUpdate.DownloadBroadcastReceiver.ACTION_DOWNLOAD;
import static se.leap.bitmaskclient.appUpdate.DownloadServiceCommand.CHECK_VERSION_FILE;
import static se.leap.bitmaskclient.appUpdate.DownloadServiceCommand.DOWNLOAD_UPDATE;
+import static se.leap.bitmaskclient.base.utils.ConfigHelper.isCalyxOSWithTetheringSupport;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getSavedProviderFromSharedPreferences;
/**
@@ -75,7 +76,9 @@ public class BitmaskApp extends MultiDexApplication {
torStatusObservable = TorStatusObservable.getInstance();
EipSetupObserver.init(this, preferences);
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
- TetheringStateManager.getInstance().init(this);
+ if (!isCalyxOSWithTetheringSupport(this)) {
+ TetheringStateManager.getInstance().init(this);
+ }
if (BuildConfig.FLAVOR.contains("Fatweb")) {
downloadBroadcastReceiver = new DownloadBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(BROADCAST_DOWNLOAD_SERVICE_EVENT);
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 94f737b4..9d15f839 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
@@ -11,6 +11,7 @@ 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.ConfigHelper.ObfsVpnHelper.useObfsVpn;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.allowExperimentalTransports;
+import static se.leap.bitmaskclient.base.utils.ConfigHelper.isCalyxOSWithTetheringSupport;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getPreferUDP;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getShowAlwaysOnDialog;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getUseBridges;
@@ -213,6 +214,12 @@ public class SettingsFragment extends Fragment implements SharedPreferences.OnSh
private void initTetheringEntry(View rootView) {
tethering = rootView.findViewById(R.id.tethering);
+
+ if (isCalyxOSWithTetheringSupport(this.getContext())) {
+ tethering.setVisibility(GONE);
+ return;
+ }
+
tethering.setOnClickListener((buttonView) -> {
showTetheringAlert();
});
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java
index 8ac5baf0..102756c4 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java
@@ -273,6 +273,11 @@ public class ConfigHelper {
Matcher matcher = IPv4_PATTERN.matcher(ipv4);
return matcher.matches();
}
+
+ public static boolean isCalyxOSWithTetheringSupport(Context context) {
+ return SystemPropertiesHelper.contains("ro.calyxos.version", context) &&
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.R;
+ }
// ObfsVpnHelper class allows us to mock BuildConfig.use_obfsvpn while
// not mocking the whole ConfigHelper class
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/SystemPropertiesHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/SystemPropertiesHelper.java
new file mode 100644
index 00000000..b148f685
--- /dev/null
+++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/SystemPropertiesHelper.java
@@ -0,0 +1,36 @@
+package se.leap.bitmaskclient.base.utils;
+
+import android.content.Context;
+
+import java.lang.reflect.Method;
+
+
+public class SystemPropertiesHelper {
+
+ /**
+ * Checks if SystemProperties contains a given key using reflection
+ * @return true if reflection was successful and the key was found
+ */
+ public static boolean contains(String key, Context context) {
+ String result = null;
+ try {
+ ClassLoader cl = context.getClassLoader();
+ @SuppressWarnings("rawtypes")
+ Class SystemProperties = cl.loadClass("android.os.SystemProperties");
+ @SuppressWarnings("rawtypes")
+ Class[] paramTypes= new Class[1];
+ paramTypes[0]= String.class;
+
+ Method get = SystemProperties.getMethod("get", paramTypes);
+ Object[] params= new Object[1];
+ params[0]= key;
+
+ result = (String) get.invoke(SystemProperties, params);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return result != null;
+ }
+}
+