summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/eip
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2021-07-30 18:22:12 +0200
committercyBerta <cyberta@riseup.net>2021-11-15 16:13:41 +0100
commit84d604de74d46c9d29d8d8ae20467c0320d2ffb3 (patch)
tree62e61755f30469272b15e2bed548044d71aefd53 /app/src/main/java/se/leap/bitmaskclient/eip
parent5c4c3cde26fafbd763e4a879dc46ca959b1a7d27 (diff)
show bridges icon in gateway selector for locations supporting them
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/eip')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java4
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java10
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java26
3 files changed, 31 insertions, 9 deletions
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 78b33355..8a48684f 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/Gateway.java
@@ -195,6 +195,10 @@ public class Gateway {
return vpnProfiles.get(transportType) != null;
}
+ public HashSet<Connection.TransportType> getSupportedTransports() {
+ return new HashSet<>(vpnProfiles.keySet());
+ }
+
public int getTimezone() {
return timezone;
}
diff --git a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java
index 33fd3c21..a48cc6d5 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java
@@ -2,6 +2,8 @@ package se.leap.bitmaskclient.eip;
import android.util.Log;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -18,7 +20,15 @@ public class GatewaySelector {
public GatewaySelector(List<Gateway> gateways) {
this.gateways = gateways;
this.offsets = calculateOffsets();
+ }
+ public ArrayList<Gateway> getGatewaysSortedByDistance() {
+ ArrayList<Gateway> list = new ArrayList<>();
+ int i = 0;
+ for (Collection<Gateway> gatewayCollection : offsets.values()) {
+ list.addAll(gatewayCollection);
+ }
+ return list;
}
public Gateway select() {
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 0819e9b6..0b2c2030 100644
--- a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
+++ b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaysManager.java
@@ -43,7 +43,6 @@ import de.blinkt.openvpn.core.connection.Connection;
import se.leap.bitmaskclient.base.models.Location;
import se.leap.bitmaskclient.base.models.Provider;
import se.leap.bitmaskclient.base.models.ProviderObservable;
-import se.leap.bitmaskclient.base.utils.PreferenceHelper;
import static de.blinkt.openvpn.core.connection.Connection.TransportType.OBFS4;
import static de.blinkt.openvpn.core.connection.Connection.TransportType.OPENVPN;
@@ -121,13 +120,20 @@ public class GatewaysManager {
return getGatewayFromTimezoneCalculation(nClosest, transportType, city);
}
+ public ArrayList<Gateway> getSortedGateways() {
+ if (presortedList.size() > 0) {
+ return presortedList;
+ } else {
+ GatewaySelector gatewaySelector = new GatewaySelector(new ArrayList<>(gateways.values()));
+ return gatewaySelector.getGatewaysSortedByDistance();
+ }
+ }
+
public List<Location> getGatewayLocations() {
- String selectedCity = PreferenceHelper.getPreferredCity(context);
HashMap<String, Integer> locationNames = new HashMap<>();
ArrayList<Location> locations = new ArrayList<>();
- int n = 0;
- Gateway gateway;
- while ((gateway = select(n, null)) != null) {
+ ArrayList<Gateway> gateways = getSortedGateways();
+ for (Gateway gateway : gateways) {
String name = gateway.getName();
if (name == null) {
Log.e(TAG, "Gateway without location name found. This should never happen. Provider misconfigured?");
@@ -139,23 +145,25 @@ public class GatewaysManager {
// fake values for now
Random rand = new Random();
double averageLoad = rand.nextDouble(); //location.averageLoad;
- Log.d(TAG, "getGatewayLocations - new averageLoad (" + gateway.getName() + "): " + averageLoad);
+ Log.d(TAG, "getGatewayLocations - new averageLoad (" + gateway.getName() + " - " + gateway.getHost()+ "): " + averageLoad);
Location location = new Location(
gateway.getName(),
averageLoad
/*gateway.getFullness()*/,
- 1);
+ 1,
+ gateway.getSupportedTransports()
+ );
locations.add(location);
} else {
int index = locationNames.get(gateway.getName());
Location location = locations.get(index);
location.averageLoad = (location.numberOfGateways * location.averageLoad + gateway.getFullness()) / (location.numberOfGateways + 1);
- Log.d(TAG, "getGatewayLocations - updated averageLoad: (" + gateway.getName() + "): " + location.averageLoad);
+ Log.d(TAG, "getGatewayLocations - updated averageLoad: (" + gateway.getName() + " - " + gateway.getHost()+ "): " + location.averageLoad);
location.numberOfGateways += 1;
+ location.supportedTransports.addAll(gateway.getSupportedTransports());
locations.set(index, location);
}
- n++;
}
return locations;