summaryrefslogtreecommitdiff
path: root/app/src/main/java/se/leap/bitmaskclient/base/models
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2021-11-23 14:51:33 +0100
committercyBerta <cyberta@riseup.net>2021-11-23 14:51:33 +0100
commitf29ee8ac7378408e070be1130c9cadc8e947ddb3 (patch)
tree5b6cf94738065434a41ca5a69be049d3b261d3cf /app/src/main/java/se/leap/bitmaskclient/base/models
parent438b2b866b64f63dc1346ca89cf3e56847def6da (diff)
sort locations by transport
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/base/models')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/models/Location.java43
1 files changed, 32 insertions, 11 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/models/Location.java b/app/src/main/java/se/leap/bitmaskclient/base/models/Location.java
index e0ce9e8b..064f25c0 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/models/Location.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/models/Location.java
@@ -19,22 +19,25 @@ package se.leap.bitmaskclient.base.models;
import androidx.annotation.NonNull;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.function.ToDoubleFunction;
import de.blinkt.openvpn.core.connection.Connection;
+import de.blinkt.openvpn.core.connection.Connection.TransportType;
public class Location implements Cloneable {
@NonNull private String name = "";
- @NonNull private HashMap<Connection.TransportType, Double> averageLoad = new HashMap<>();
- @NonNull private HashMap<Connection.TransportType, Integer> numberOfGateways = new HashMap<>();
+ @NonNull private HashMap<TransportType, Double> averageLoad = new HashMap<>();
+ @NonNull private HashMap<TransportType, Integer> numberOfGateways = new HashMap<>();
public boolean selected;
public Location() {}
public Location(@NonNull String name,
- @NonNull HashMap<Connection.TransportType, Double> averageLoad,
- @NonNull HashMap<Connection.TransportType, Integer> numberOfGateways,
+ @NonNull HashMap<TransportType, Double> averageLoad,
+ @NonNull HashMap<TransportType, Integer> numberOfGateways,
boolean selected) {
this.name = name;
this.averageLoad = averageLoad;
@@ -46,26 +49,26 @@ public class Location implements Cloneable {
return !numberOfGateways.isEmpty() && !averageLoad.isEmpty() && !name.isEmpty();
}
- public boolean supportsTransport(Connection.TransportType transportType) {
+ public boolean supportsTransport(TransportType transportType) {
return numberOfGateways.containsKey(transportType);
}
- public void setAverageLoad(Connection.TransportType transportType, double load) {
+ public void setAverageLoad(TransportType transportType, double load) {
averageLoad.put(transportType, load);
}
- public double getAverageLoad(Connection.TransportType transportType) {
+ public double getAverageLoad(TransportType transportType) {
if (averageLoad.containsKey(transportType)) {
return averageLoad.get(transportType);
}
return 0;
}
- public void setNumberOfGateways(Connection.TransportType transportType, int numbers) {
+ public void setNumberOfGateways(TransportType transportType, int numbers) {
numberOfGateways.put(transportType, numbers);
}
- public int getNumberOfGateways(Connection.TransportType transportType) {
+ public int getNumberOfGateways(TransportType transportType) {
if (numberOfGateways.containsKey(transportType)) {
return numberOfGateways.get(transportType);
}
@@ -101,8 +104,26 @@ public class Location implements Cloneable {
public Location clone() throws CloneNotSupportedException {
Location copy = (Location) super.clone();
copy.name = this.name;
- copy.numberOfGateways = (HashMap<Connection.TransportType, Integer>) this.numberOfGateways.clone();
- copy.averageLoad = (HashMap<Connection.TransportType, Double>) this.averageLoad.clone();
+ copy.numberOfGateways = (HashMap<TransportType, Integer>) this.numberOfGateways.clone();
+ copy.averageLoad = (HashMap<TransportType, Double>) this.averageLoad.clone();
return copy;
}
+
+ public static class SortByAverageLoad implements Comparator<Location> {
+ TransportType transportType;
+ public SortByAverageLoad(TransportType transportType) {
+ this.transportType = transportType;
+ }
+
+ @Override
+ public int compare(Location location1, Location location2) {
+ if (location1.supportsTransport(transportType) && location2.supportsTransport(transportType)) {
+ return (int) (location1.getAverageLoad(transportType) * 100) - (int) (location2.getAverageLoad(transportType) * 100);
+ } else if (location1.supportsTransport(transportType) && !location2.supportsTransport(transportType)) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+ }
}