summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/eip
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2023-08-02 22:45:26 +0200
committercyBerta <cyberta@riseup.net>2023-08-02 22:45:26 +0200
commit64449816223cb9abb6e75310c03dcc9353a42ee4 (patch)
tree66cb86d382cc67267441a10320f7e13cd125e66b /app/src/main/java/se/leap/bitmaskclient/eip
parent1ac4ec903f0d10b65810b720f76f08df969c3bec (diff)
use single instance of shared prefernces across the app, this reduces the laggyness of the UI noticably
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/eip')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/EIP.java25
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java17
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java32
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java26
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java8
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/VpnConfigGenerator.java1
6 files changed, 49 insertions, 60 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java b/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java
index 29714670..d8905bca 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/EIP.java
@@ -22,7 +22,6 @@ import static se.leap.bitmaskclient.R.string.vpn_certificate_is_invalid;
import static se.leap.bitmaskclient.R.string.warning_client_parsing_error_gateways;
import static se.leap.bitmaskclient.base.models.Constants.BROADCAST_GATEWAY_SETUP_OBSERVER_EVENT;
import static se.leap.bitmaskclient.base.models.Constants.BROADCAST_RESULT_KEY;
-import static se.leap.bitmaskclient.base.models.Constants.CLEARLOG;
import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_CHECK_CERT_VALIDITY;
import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_IS_RUNNING;
import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_LAUNCH_VPN;
@@ -50,7 +49,6 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
-import android.content.SharedPreferences;
import android.net.VpnService;
import android.os.Build;
import android.os.Bundle;
@@ -81,7 +79,6 @@ import de.blinkt.openvpn.VpnProfile;
import de.blinkt.openvpn.core.ConnectionStatus;
import de.blinkt.openvpn.core.IOpenVPNServiceInternal;
import de.blinkt.openvpn.core.OpenVPNService;
-import de.blinkt.openvpn.core.Preferences;
import de.blinkt.openvpn.core.VpnStatus;
import se.leap.bitmaskclient.R;
import se.leap.bitmaskclient.base.OnBootReceiver;
@@ -108,7 +105,6 @@ public final class EIP extends JobIntentService implements Observer {
ERRORS = "errors",
ERRORID = "errorId";
- private volatile SharedPreferences preferences;
private volatile EipStatus eipStatus;
// Service connection to OpenVpnService, shared between threads
private volatile OpenVpnServiceConnection openVpnServiceConnection;
@@ -144,7 +140,6 @@ public final class EIP extends JobIntentService implements Observer {
super.onCreate();
eipStatus = EipStatus.getInstance();
eipStatus.addObserver(this);
- preferences = PreferenceHelper.getSharedPreferences(this);
}
@Override
@@ -230,8 +225,9 @@ public final class EIP extends JobIntentService implements Observer {
earlyRoutes(result);
}
- if (!preferences.getBoolean(EIP_RESTART_ON_BOOT, false)) {
- preferences.edit().putBoolean(EIP_RESTART_ON_BOOT, true).commit();
+ if (!PreferenceHelper.getRestartOnBoot()) {
+ // TODO: check if move to async here was ok
+ PreferenceHelper.restartOnBoot(true);
}
if (!isVPNCertificateValid()) {
@@ -328,7 +324,7 @@ public final class EIP extends JobIntentService implements Observer {
if (gatewayOptions == null || gatewayOptions.gateway == null ||
(profile = gatewayOptions.gateway.getProfile(gatewayOptions.transportType)) == null) {
- String preferredLocation = getPreferredCity(getApplicationContext());
+ String preferredLocation = getPreferredCity();
if (preferredLocation != null) {
setErrorResult(result, NO_MORE_GATEWAYS.toString(), getStringResourceForNoMoreGateways(), getString(R.string.app_name), preferredLocation);
} else {
@@ -354,8 +350,9 @@ public final class EIP extends JobIntentService implements Observer {
LocalBroadcastManager.getInstance(this).sendBroadcast(setupObserverIntent);
// Check if we need to clear the log
- if (Preferences.getDefaultSharedPreferences(this).getBoolean(CLEARLOG, true))
+ if (PreferenceHelper.getClearLog()) {
VpnStatus.clearLog();
+ }
// check profile configuration
int vpnok = profile.checkProfile(this);
@@ -421,12 +418,12 @@ public final class EIP extends JobIntentService implements Observer {
* @return true if VPN certificate is valid false otherwise
*/
private boolean isVPNCertificateValid() {
- VpnCertificateValidator validator = new VpnCertificateValidator(preferences.getString(PROVIDER_VPN_CERTIFICATE, ""));
+ VpnCertificateValidator validator = new VpnCertificateValidator(PreferenceHelper.getProviderVPNCertificate());
return validator.isValid();
}
private boolean shouldUpdateVPNCertificate() {
- VpnCertificateValidator validator = new VpnCertificateValidator(preferences.getString(PROVIDER_VPN_CERTIFICATE, ""));
+ VpnCertificateValidator validator = new VpnCertificateValidator(PreferenceHelper.getProviderVPNCertificate());
return validator.shouldBeUpdated();
}
@@ -476,7 +473,7 @@ public final class EIP extends JobIntentService implements Observer {
* then stop VPN
*/
private boolean stop() {
- preferences.edit().putBoolean(EIP_RESTART_ON_BOOT, false).apply();
+ PreferenceHelper.restartOnBoot(false);
if (eipStatus.isBlockingVpnEstablished()) {
stopBlockingVpn();
}
@@ -549,11 +546,11 @@ public final class EIP extends JobIntentService implements Observer {
private @StringRes int getStringResourceForNoMoreGateways() {
- boolean isManualGatewaySelection = PreferenceHelper.getPreferredCity(getApplicationContext()) != null;
+ boolean isManualGatewaySelection = PreferenceHelper.getPreferredCity() != null;
if (isManualGatewaySelection) {
return R.string.warning_no_more_gateways_manual_gw_selection;
} else if (ProviderObservable.getInstance().getCurrentProvider().supportsPluggableTransports()) {
- if (PreferenceHelper.getUseBridges(getApplicationContext())) {
+ if (PreferenceHelper.getUseBridges()) {
return R.string.warning_no_more_gateways_use_ovpn;
} else {
return R.string.warning_no_more_gateways_use_pt;
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java b/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java
index bb05810c..ed83770b 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/EipSetupObserver.java
@@ -56,7 +56,6 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
@@ -98,12 +97,10 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta
AtomicBoolean changingGateway = new AtomicBoolean(false);
AtomicInteger setupNClosestGateway = new AtomicInteger();
private Vector<EipSetupListener> listeners = new Vector<>();
- private SharedPreferences preferences;
private static EipSetupObserver instance;
- private EipSetupObserver(Context context, SharedPreferences preferences) {
+ private EipSetupObserver(Context context) {
this.appContext = context.getApplicationContext();
- this.preferences = preferences;
IntentFilter updateIntentFilter = new IntentFilter(BROADCAST_GATEWAY_SETUP_OBSERVER_EVENT);
updateIntentFilter.addAction(BROADCAST_EIP_EVENT);
updateIntentFilter.addAction(BROADCAST_PROVIDER_API_EVENT);
@@ -115,9 +112,9 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta
VpnStatus.addLogListener(this);
}
- public static void init(Context context, SharedPreferences preferences) {
+ public static void init(Context context) {
if (instance == null) {
- instance = new EipSetupObserver(context, preferences);
+ instance = new EipSetupObserver(context);
}
}
@@ -196,7 +193,7 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta
Log.d(TAG, "correctly updated service json");
provider = resultData.getParcelable(PROVIDER_KEY);
ProviderObservable.getInstance().updateProvider(provider);
- PreferenceHelper.storeProviderInPreferences(preferences, provider);
+ PreferenceHelper.storeProviderInPreferences(provider);
if (EipStatus.getInstance().isDisconnected()) {
EipCommand.startVPN(appContext, false);
}
@@ -204,7 +201,7 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta
case CORRECTLY_UPDATED_INVALID_VPN_CERTIFICATE:
provider = resultData.getParcelable(PROVIDER_KEY);
ProviderObservable.getInstance().updateProvider(provider);
- PreferenceHelper.storeProviderInPreferences(preferences, provider);
+ PreferenceHelper.storeProviderInPreferences(provider);
EipCommand.startVPN(appContext, false);
EipStatus.getInstance().setUpdatingVpnCert(false);
if (TorStatusObservable.isRunning()) {
@@ -214,7 +211,7 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta
case CORRECTLY_DOWNLOADED_GEOIP_JSON:
provider = resultData.getParcelable(PROVIDER_KEY);
ProviderObservable.getInstance().updateProvider(provider);
- PreferenceHelper.storeProviderInPreferences(preferences, provider);
+ PreferenceHelper.storeProviderInPreferences(provider);
maybeStartEipService(resultData);
break;
case INCORRECTLY_DOWNLOADED_GEOIP_JSON:
@@ -400,7 +397,7 @@ public class EipSetupObserver extends BroadcastReceiver implements VpnStatus.Sta
}
private boolean shouldCheckAppUpdate() {
- return System.currentTimeMillis() - PreferenceHelper.getLastAppUpdateCheck(appContext) >= UPDATE_CHECK_TIMEOUT;
+ return System.currentTimeMillis() - PreferenceHelper.getLastAppUpdateCheck() >= UPDATE_CHECK_TIMEOUT;
}
private void selectNextGateway() {
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java b/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java
index 719b960e..d2592cd7 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java
@@ -37,8 +37,6 @@ import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getObfuscationPi
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.getPreferUDP;
import static se.leap.bitmaskclient.base.utils.PreferenceHelper.useObfuscationPinning;
-import android.content.Context;
-
import androidx.annotation.NonNull;
import com.google.gson.Gson;
@@ -86,12 +84,12 @@ public class Gateway {
* Build a gateway object from a JSON OpenVPN gateway definition in eip-service.json
* and create a VpnProfile belonging to it.
*/
- public Gateway(JSONObject eipDefinition, JSONObject secrets, JSONObject gateway, Context context)
+ public Gateway(JSONObject eipDefinition, JSONObject secrets, JSONObject gateway)
throws ConfigParser.ConfigParseError, JSONException, IOException {
- this(eipDefinition, secrets, gateway, null, context);
+ this(eipDefinition, secrets, gateway, null);
}
- public Gateway(JSONObject eipDefinition, JSONObject secrets, JSONObject gateway, JSONObject load, Context context)
+ public Gateway(JSONObject eipDefinition, JSONObject secrets, JSONObject gateway, JSONObject load)
throws ConfigParser.ConfigParseError, JSONException, IOException {
this.gateway = gateway;
@@ -99,28 +97,28 @@ public class Gateway {
this.load = load;
apiVersion = getApiVersion(eipDefinition);
- VpnConfigGenerator.Configuration configuration = getProfileConfig(context, eipDefinition, apiVersion);
+ VpnConfigGenerator.Configuration configuration = getProfileConfig(eipDefinition, apiVersion);
generalConfiguration = getGeneralConfiguration(eipDefinition);
timezone = getTimezone(eipDefinition);
name = configuration.profileName;
vpnProfiles = createVPNProfiles(configuration);
}
- private VpnConfigGenerator.Configuration getProfileConfig(Context context, JSONObject eipDefinition, int apiVersion) {
+ private VpnConfigGenerator.Configuration getProfileConfig(JSONObject eipDefinition, int apiVersion) {
VpnConfigGenerator.Configuration config = new VpnConfigGenerator.Configuration();
config.apiVersion = apiVersion;
- config.preferUDP = getPreferUDP(context);
- config.experimentalTransports = allowExperimentalTransports(context);
- config.excludedApps = getExcludedApps(context);
+ config.preferUDP = getPreferUDP();
+ config.experimentalTransports = allowExperimentalTransports();
+ config.excludedApps = getExcludedApps();
- config.remoteGatewayIP = config.useObfuscationPinning ? getObfuscationPinningIP(context) : gateway.optString(IP_ADDRESS);
- config.useObfuscationPinning = useObfuscationPinning(context);
- config.profileName = config.useObfuscationPinning ? getObfuscationPinningGatewayLocation(context) : locationAsName(eipDefinition);
+ config.remoteGatewayIP = config.useObfuscationPinning ? getObfuscationPinningIP() : gateway.optString(IP_ADDRESS);
+ config.useObfuscationPinning = useObfuscationPinning();
+ config.profileName = config.useObfuscationPinning ? getObfuscationPinningGatewayLocation() : locationAsName(eipDefinition);
if (config.useObfuscationPinning) {
- config.obfuscationProxyIP = getObfuscationPinningIP(context);
- config.obfuscationProxyPort = getObfuscationPinningPort(context);
- config.obfuscationProxyCert = getObfuscationPinningCert(context);
- config.obfuscationProxyKCP = getObfuscationPinningKCP(context);
+ config.obfuscationProxyIP = getObfuscationPinningIP();
+ config.obfuscationProxyPort = getObfuscationPinningPort();
+ config.obfuscationProxyCert = getObfuscationPinningCert();
+ config.obfuscationProxyKCP = getObfuscationPinningKCP();
}
return config;
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
index 5e05b7c1..9b4d431c 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
@@ -134,7 +134,7 @@ public class GatewaysManager {
* @return the n closest Gateway
*/
public GatewayOptions select(int nClosest) {
- if (PreferenceHelper.useObfuscationPinning(context)) {
+ if (PreferenceHelper.useObfuscationPinning()) {
if (nClosest > 2) {
// no need to try again the pinned proxy, probably configuration error
return null;
@@ -145,12 +145,12 @@ public class GatewaysManager {
}
return new GatewayOptions(gateway, OBFS4);
}
- String selectedCity = getPreferredCity(context);
+ String selectedCity = getPreferredCity();
return select(nClosest, selectedCity);
}
public GatewayOptions select(int nClosest, String city) {
- TransportType[] transportTypes = getUseBridges(context) ? new TransportType[]{OBFS4, OBFS4_HOP} : new TransportType[]{OPENVPN};
+ TransportType[] transportTypes = getUseBridges() ? new TransportType[]{OBFS4, OBFS4_HOP} : new TransportType[]{OPENVPN};
if (presortedList.size() > 0) {
return getGatewayFromPresortedList(nClosest, transportTypes, city);
}
@@ -193,7 +193,7 @@ public class GatewaysManager {
HashMap<String, Integer> locationNames = new HashMap<>();
ArrayList<Location> locations = new ArrayList<>();
- String preferredCity = PreferenceHelper.getPreferredCity(context);
+ String preferredCity = PreferenceHelper.getPreferredCity();
for (Gateway gateway : gateways.values()) {
String name = gateway.getName();
if (name == null) {
@@ -399,16 +399,18 @@ public class GatewaysManager {
e.printStackTrace();
}
- if (PreferenceHelper.useObfuscationPinning(context)) {
+ if (PreferenceHelper.useObfuscationPinning()) {
try {
Transport[] transports = new Transport[]{
new Transport(OBFS4.toString(),
- new String[]{getObfuscationPinningKCP(context) ? "kcp" : "tcp"},
- new String[]{getObfuscationPinningPort(context)},
- getObfuscationPinningCert(context))};
+ new String[]{getObfuscationPinningKCP() ? "kcp" : "tcp"},
+ new String[]{getObfuscationPinningPort()},
+ getObfuscationPinningCert())};
GatewayJson.Capabilities capabilities = new GatewayJson.Capabilities(false, false, false, transports, false);
- GatewayJson gatewayJson = new GatewayJson(context.getString(R.string.unknown_location), getObfuscationPinningIP(context), null, PINNED_OBFUSCATION_PROXY, capabilities);
- Gateway gateway = new Gateway(eipDefinition, secrets, new JSONObject(gatewayJson.toString()), this.context);
+ GatewayJson gatewayJson = new GatewayJson(context.getString(R.string.unknown_location), getObfuscationPinningIP(
+
+ ), null, PINNED_OBFUSCATION_PROXY, capabilities);
+ Gateway gateway = new Gateway(eipDefinition, secrets, new JSONObject(gatewayJson.toString()));
addGateway(gateway);
} catch (JSONException | ConfigParser.ConfigParseError | IOException e) {
e.printStackTrace();
@@ -417,7 +419,7 @@ public class GatewaysManager {
for (int i = 0; i < gatewaysDefined.length(); i++) {
try {
JSONObject gw = gatewaysDefined.getJSONObject(i);
- Gateway aux = new Gateway(eipDefinition, secrets, gw, this.context);
+ Gateway aux = new Gateway(eipDefinition, secrets, gw);
if (gateways.get(aux.getHost()) == null) {
addGateway(aux);
}
@@ -515,7 +517,7 @@ public class GatewaysManager {
}
private boolean handleGatewayPinning() {
- String host = PreferenceHelper.getPinnedGateway(this.context);
+ String host = PreferenceHelper.getPinnedGateway();
if (host == null) {
return false;
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java b/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java
index d9da622c..53781f52 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/VoidVpnService.java
@@ -19,12 +19,10 @@ package se.leap.bitmaskclient.eip;
import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_START_ALWAYS_ON_VPN;
import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_START_BLOCKING_VPN;
import static se.leap.bitmaskclient.base.models.Constants.EIP_ACTION_STOP_BLOCKING_VPN;
-import static se.leap.bitmaskclient.base.models.Constants.EIP_IS_ALWAYS_ON;
import static se.leap.bitmaskclient.base.utils.ConfigHelper.getProviderFormattedString;
import android.app.Notification;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.net.VpnService;
import android.os.Binder;
import android.os.Build;
@@ -84,8 +82,7 @@ public class VoidVpnService extends VpnService implements Observer, VpnNotificat
thread = new Thread(new Runnable() {
public void run() {
establishBlockingVpn();
- SharedPreferences preferences = PreferenceHelper.getSharedPreferences(VoidVpnService.this.getApplicationContext());
- preferences.edit().putBoolean(EIP_IS_ALWAYS_ON, false).commit();
+ PreferenceHelper.isAlwaysOnSync(false);
Log.d(TAG, "start blocking vpn profile - always on = false");
}
});
@@ -96,8 +93,7 @@ public class VoidVpnService extends VpnService implements Observer, VpnNotificat
thread = new Thread(new Runnable() {
public void run() {
establishBlockingVpn();
- SharedPreferences preferences = PreferenceHelper.getSharedPreferences(VoidVpnService.this.getApplicationContext());
- preferences.edit().putBoolean(EIP_IS_ALWAYS_ON, true).commit();
+ PreferenceHelper.isAlwaysOnSync(true);
requestVpnWithLastSelectedProfile();
Log.d(TAG, "start blocking vpn profile - always on = true");
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/VpnConfigGenerator.java b/app/src/main/java/se/leap/bitmaskclient/eip/VpnConfigGenerator.java
index fa2ab352..6d5a406e 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/VpnConfigGenerator.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/VpnConfigGenerator.java
@@ -25,7 +25,6 @@ import static se.leap.bitmaskclient.base.models.Constants.IP_ADDRESS6;
import static se.leap.bitmaskclient.base.models.Constants.KCP;
import static se.leap.bitmaskclient.base.models.Constants.PORTS;
import static se.leap.bitmaskclient.base.models.Constants.PROTOCOLS;
-import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_PRIVATE_KEY;
import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_VPN_CERTIFICATE;
import static se.leap.bitmaskclient.base.models.Constants.REMOTE;
import static se.leap.bitmaskclient.base.models.Constants.TCP;