diff options
Diffstat (limited to 'app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java')
-rw-r--r-- | app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java | 32 |
1 files changed, 29 insertions, 3 deletions
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 90c8f890..2bd666bf 100644 --- a/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java +++ b/app/src/main/java/se/leap/bitmaskclient/eip/GatewaySelector.java @@ -1,26 +1,52 @@ package se.leap.bitmaskclient.eip; -import java.util.*; +import android.util.Log; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + +import static se.leap.bitmaskclient.utils.ConfigHelper.getCurrentTimezone; public class GatewaySelector { + private final static String TAG = GatewaySelector.class.getSimpleName(); List<Gateway> gateways; + TreeMap<Integer, Set<Gateway>> offsets; public GatewaySelector(List<Gateway> gateways) { this.gateways = gateways; + this.offsets = calculateOffsets(); + } public Gateway select() { return closestGateway(); } + public Gateway select(int nClosest) { + int i = 0; + for (Map.Entry<Integer,Set<Gateway>> entrySet : offsets.entrySet()) { + for (Gateway gateway : entrySet.getValue()) { + if (i == nClosest) { + return gateway; + } + i = i + 1; + } + } + + Log.e(TAG, "There are less than " + nClosest + " Gateways available."); + return null; + } + private Gateway closestGateway() { - TreeMap<Integer, Set<Gateway>> offsets = calculateOffsets(); return offsets.isEmpty() ? null : offsets.firstEntry().getValue().iterator().next(); } private TreeMap<Integer, Set<Gateway>> calculateOffsets() { TreeMap<Integer, Set<Gateway>> offsets = new TreeMap<Integer, Set<Gateway>>(); - int localOffset = Calendar.getInstance().get(Calendar.ZONE_OFFSET) / 3600000; + int localOffset = getCurrentTimezone(); for (Gateway gateway : gateways) { int dist = timezoneDistance(localOffset, gateway.getTimezone()); Set<Gateway> set = (offsets.get(dist) != null) ? |