diff --git a/app/src/main/java/eu/faircode/email/DisconnectBlacklist.java b/app/src/main/java/eu/faircode/email/DisconnectBlacklist.java index 1ff30a6be2..9ce81e8b07 100644 --- a/app/src/main/java/eu/faircode/email/DisconnectBlacklist.java +++ b/app/src/main/java/eu/faircode/email/DisconnectBlacklist.java @@ -20,7 +20,6 @@ package eu.faircode.email; */ import android.content.Context; -import android.net.Uri; import android.os.SystemClock; import org.json.JSONArray; @@ -84,18 +83,10 @@ public class DisconnectBlacklist { JSONObject jsites = (JSONObject) jblock.get(name); Iterator sites = jsites.keys(); if (sites.hasNext()) { - List domains = new ArrayList<>(); - String site = sites.next(); - String host = Uri.parse(site).getHost(); - if (host != null) - domains.add(host.toLowerCase(Locale.ROOT)); - JSONArray jdomains = jsites.getJSONArray(site); - for (int d = 0; d < jdomains.length(); d++) - domains.add(jdomains.getString(d).toLowerCase(Locale.ROOT)); - - for (String domain : domains) { + for (int d = 0; d < jdomains.length(); d++) { + String domain = jdomains.getString(d).toLowerCase(Locale.ROOT); if (!map.containsKey(domain)) map.put(domain, new ArrayList<>()); List list = map.get(domain); @@ -134,25 +125,32 @@ public class DisconnectBlacklist { } static List getCategories(String domain) { - if (domain == null) - return null; - - synchronized (map) { - List result = map.get(domain.toLowerCase(Locale.ROOT)); - return (result == null || result.size() == 0 ? null : result); - } + return _getCategories(domain); } static boolean isTracking(String host) { - if (host == null) + List categories = _getCategories(host); + if (categories == null || categories.size() == 0) return false; + return !categories.contains("Content"); + } + + private static List _getCategories(String domain) { + if (domain == null) + return null; synchronized (map) { - List result = map.get(host.toLowerCase(Locale.ROOT)); - if (result == null || result.size() == 0) - return false; - return !result.contains("Content"); + String d = domain.toLowerCase(Locale.ROOT); + while (d.contains(".")) { + List result = map.get(d); + if (result != null) + return result; + int dot = d.indexOf("."); + d = d.substring(dot + 1); + } } + + return null; } private static File getFile(Context context) {