From 0ba61b349f108d3865398315aa8d0cd464203baf Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Mon, 19 Nov 2018 13:42:09 +0100 Subject: [PATCH] StationsActivity: Fix product filter to take into account the location products field. --- .../oeffi/stations/StationsActivity.java | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java index ae16944..979fa33 100644 --- a/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java +++ b/oeffi/src/de/schildbach/oeffi/stations/StationsActivity.java @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Date; +import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -235,8 +236,7 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware if (!removed.isEmpty()) { for (final Iterator i = stations.iterator(); i.hasNext();) { final Station station = i.next(); - final List lines = station.getLines(); - if (!filter(lines, products)) { + if (!filter(station, products)) { i.remove(); stationsMap.remove(station.location.id); } @@ -998,7 +998,7 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware changed = true; } } - } else if (filter(freshStation.getLines(), products)) { + } else if (filter(freshStation, products)) { stations.add(freshStation); stationsMap.put(freshStation.location.id, freshStation); @@ -1043,16 +1043,23 @@ public class StationsActivity extends OeffiMainActivity implements StationsAware updateGUI(); } - private static boolean filter(final List lines, final Collection products) { - if (lines == null) - return true; + private static boolean filter(final Station station, final Collection productFilter) { + final Set products = station.location.products; + if (products != null) { + final Set copy = EnumSet.copyOf(products); + copy.retainAll(productFilter); + return !copy.isEmpty(); + } - for (final LineDestination line : lines) { - final Product product = line.line.product; - if (product != null) - for (final Product filterProduct : products) - if (product == filterProduct) - return true; + final List lines = station.getLines(); + if (lines != null) { + for (final LineDestination line : lines) { + final Product product = line.line.product; + if (product != null) + for (final Product filterProduct : productFilter) + if (product == filterProduct) + return true; + } } return false;