diff --git a/app/src/main/java/eu/faircode/email/ContactInfo.java b/app/src/main/java/eu/faircode/email/ContactInfo.java index 310d08c72e..cdc6240e27 100644 --- a/app/src/main/java/eu/faircode/email/ContactInfo.java +++ b/app/src/main/java/eu/faircode/email/ContactInfo.java @@ -690,6 +690,7 @@ public class ContactInfo { String type = jicon.optString("type", ""); if (!TextUtils.isEmpty(src)) { Element img = doc.createElement("link") + .attr("rel", "manifest") .attr("href", src) .attr("sizes", sizes) .attr("type", type); @@ -707,26 +708,11 @@ public class ContactInfo { Collections.sort(imgs, new Comparator() { @Override public int compare(Element img1, Element img2) { - boolean l1 = "link".equals(img1.tagName()); - boolean l2 = "link".equals(img2.tagName()); - int l = Boolean.compare(l1, l2); - if (l != 0) - return -l; - - // https://en.wikipedia.org/wiki/Favicon#How_to_use - boolean i1 = "icon".equalsIgnoreCase(img1.attr("rel") - .replace("shortcut", "").trim()); - boolean i2 = "icon".equalsIgnoreCase(img2.attr("rel") - .replace("shortcut", "").trim()); - int i = Boolean.compare(i1, i2); - if (i != 0) - return -i; - int t1 = getOrder(img1); int t2 = getOrder(img2); int t = Integer.compare(t1, t2); if (t != 0) - return t; + return -t; int s1 = getSize(img1.attr("sizes")); int s2 = getSize(img2.attr("sizes")); @@ -738,7 +724,7 @@ public class ContactInfo { Log.i("Favicons " + base + "=" + imgs.size()); for (int i = 0; i < imgs.size(); i++) - Log.i("Favicon " + i + "=" + imgs.get(i) + " @" + base); + Log.i("Favicon #" + getOrder(imgs.get(i)) + " " + i + "=" + imgs.get(i) + " @" + base); List>> futures = new ArrayList<>(); for (Element img : imgs) { @@ -778,15 +764,30 @@ public class ContactInfo { } private static int getOrder(Element img) { - String href = img.attr("href"); - String type = img.attr("type"); - - int order = -1; - String h = (href == null ? "" : href.toLowerCase(Locale.ROOT)); - if (h.endsWith(".ico")) - order = 2; - else if (h.endsWith(".svg") || "image/svg+xml".equals(type)) - order = 1; + // https://en.wikipedia.org/wiki/Favicon#How_to_use + String href = img.attr("href") + .toLowerCase(Locale.ROOT) + .trim(); + String rel = img.attr("rel") + .toLowerCase(Locale.ROOT) + .replace("shortcut", "") // "shortcut icon" + .trim(); + String type = img.attr("type") + .trim(); + + int order = 0; + if ("link".equals(img.tagName())) + order += 100; + + if ("icon".equals(rel)) + order += 10; + else if ("apple-touch-icon".equals(rel)) + order += 20; + + if (href.endsWith(".ico")) + order -= 2; + else if (href.endsWith(".svg") || "image/svg+xml".equals(type)) + order -= 1; return order; }