diff options
author | Danny Baumann <dannybaumann@web.de> | 2014-09-03 09:09:19 +0200 |
---|---|---|
committer | Danny Baumann <dannybaumann@web.de> | 2014-09-03 09:10:25 +0200 |
commit | 887609d1f6d00d883783e9d03bf16b24e716e234 (patch) | |
tree | e5d5caa0b32cfbedd9b5af2ae5c56ae061466364 | |
parent | 1a130e5da140faab5645a053cec8788aeff15c23 (diff) | |
download | android_packages_apps_Dialer-887609d1f6d00d883783e9d03bf16b24e716e234.tar.gz android_packages_apps_Dialer-887609d1f6d00d883783e9d03bf16b24e716e234.tar.bz2 android_packages_apps_Dialer-887609d1f6d00d883783e9d03bf16b24e716e234.zip |
Refine regexes for Das Telefonbuch.
Looks like private and business numbers have a slightly differing
format.
Change-Id: I7eae982fe81cf890686f49b88417e604ba0171a0
-rw-r--r-- | src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java b/src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java index 4a6a6c41f..70c2962a7 100644 --- a/src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java +++ b/src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java @@ -18,6 +18,7 @@ package com.android.dialer.lookup.dastelefonbuch; import android.content.Context; import android.net.Uri; +import android.text.Html; import com.android.dialer.lookup.LookupSettings; @@ -53,6 +54,19 @@ public class TelefonbuchApi { .appendQueryParameter("kw", number) .build(); String output = httpGet(uri.toString()); + if (output == null) { + return null; + } + + // Cut out everything we're not interested in (scripts etc.) to + // speed up the subsequent matching. + Pattern regex = Pattern.compile(": Treffer(.*)Ende Treffer", Pattern.DOTALL); + Matcher matcher = regex.matcher(output); + if (!matcher.find()) { + return null; + } + + output = matcher.group(1); String name = parseName(output); if (name == null) { @@ -106,58 +120,41 @@ public class TelefonbuchApi { Matcher m = regex.matcher(output); if (m.find()) { - return m.group(1).trim().replaceAll("&", "&"); + return fromHtml(m.group(1)); } return null; } private static String parseNumber(String output) { - Pattern regex = Pattern.compile("<span\\s+class=\"ico fon.*?>.*<span>(.*?)</span>", - Pattern.DOTALL); + Pattern regex = Pattern.compile("<span\\s+class=\"ico fon.*>.*<span>(.*?)</span><br/>", 0); Matcher m = regex.matcher(output); if (m.find()) { - return m.group(1).trim(); + return fromHtml(m.group(1).replaceAll("</?span.*?>", "")); } return null; } private static String parseAddress(String output) { - String regexBase = "<span\\s+itemprop=\"%s\"\\s?>(.*?)</span>"; - - Pattern regexAddress = Pattern.compile( - String.format(regexBase, "street-address"), Pattern.DOTALL); - Matcher addressMatcher = regexAddress.matcher(output); - if (!addressMatcher.find()) { - return null; + Pattern regex = Pattern.compile("<address.*?>\n?(.*?)</address>", Pattern.DOTALL); + Matcher m = regex.matcher(output); + if (m.find()) { + return fromHtml(m.group(1).replaceAll("</?span.*?>", "")); } - Pattern regexPostal = Pattern.compile( - String.format(regexBase, "postal-code"), Pattern.DOTALL); - Matcher postalMatcher = regexPostal.matcher(output); - if (!postalMatcher.find()) { - return null; - } + return null; + } - Pattern regexLocation = Pattern.compile( - String.format(regexBase, "locality"), Pattern.DOTALL); - Matcher locationMatcher = regexLocation.matcher(output); - if (!locationMatcher.find()) { + private static String fromHtml(String input) { + if (input == null) { return null; } - - StringBuilder sb = new StringBuilder(); - sb.append(addressMatcher.group(1).trim()).append(", "); - sb.append(postalMatcher.group(1).trim()).append(" "); - sb.append(locationMatcher.group(1).trim()); - - return sb.toString(); + return Html.fromHtml(input).toString().trim(); } public static class ContactInfo { String name; - String city; String address; String formattedNumber; String website; |