summaryrefslogtreecommitdiff
path: root/core/java/android/webkit/WebView.java
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2012-02-24 10:13:24 -0800
committerJohn Reck <jreck@google.com>2012-02-24 10:13:24 -0800
commit59265e896a87502d07c981d26e93ad078920999c (patch)
treef7096dac78bcde2070103a880ac869226667f191 /core/java/android/webkit/WebView.java
parent5d5b378383cfcdb70efb94c6d6c66ed5623141ec (diff)
Fix HitTest type detection
Change-Id: Ide3d137de18302d2bb83437c3709a31afcdef9ff
Diffstat (limited to 'core/java/android/webkit/WebView.java')
-rw-r--r--core/java/android/webkit/WebView.java50
1 files changed, 28 insertions, 22 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 98d59c43fdec..c24192538bd5 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -9238,6 +9238,30 @@ public class WebView extends AbsoluteLayout
}
}
+ private void setHitTestTypeFromUrl(String url) {
+ String substr = null;
+ if (url.startsWith(SCHEME_GEO)) {
+ mInitialHitTestResult.mType = HitTestResult.GEO_TYPE;
+ substr = url.substring(SCHEME_GEO.length());
+ } else if (url.startsWith(SCHEME_TEL)) {
+ mInitialHitTestResult.mType = HitTestResult.PHONE_TYPE;
+ substr = url.substring(SCHEME_TEL.length());
+ } else if (url.startsWith(SCHEME_MAILTO)) {
+ mInitialHitTestResult.mType = HitTestResult.EMAIL_TYPE;
+ substr = url.substring(SCHEME_MAILTO.length());
+ } else {
+ mInitialHitTestResult.mType = HitTestResult.SRC_ANCHOR_TYPE;
+ mInitialHitTestResult.mExtra = url;
+ return;
+ }
+ try {
+ mInitialHitTestResult.mExtra = URLDecoder.decode(substr, "UTF-8");
+ } catch (Throwable e) {
+ Log.w(LOGTAG, "Failed to decode URL! " + substr, e);
+ mInitialHitTestResult.mType = HitTestResult.UNKNOWN_TYPE;
+ }
+ }
+
private void setHitTestResult(WebKitHitTest hit) {
if (hit == null) {
mInitialHitTestResult = null;
@@ -9245,9 +9269,9 @@ public class WebView extends AbsoluteLayout
}
mInitialHitTestResult = new HitTestResult();
if (hit.mLinkUrl != null) {
- mInitialHitTestResult.mType = HitTestResult.SRC_ANCHOR_TYPE;
- mInitialHitTestResult.mExtra = hit.mLinkUrl;
- if (hit.mImageUrl != null) {
+ setHitTestTypeFromUrl(hit.mLinkUrl);
+ if (hit.mImageUrl != null
+ && mInitialHitTestResult.mType == HitTestResult.SRC_ANCHOR_TYPE) {
mInitialHitTestResult.mType = HitTestResult.SRC_IMAGE_ANCHOR_TYPE;
mInitialHitTestResult.mExtra = hit.mImageUrl;
}
@@ -9257,25 +9281,7 @@ public class WebView extends AbsoluteLayout
} else if (hit.mEditable) {
mInitialHitTestResult.mType = HitTestResult.EDIT_TEXT_TYPE;
} else if (hit.mIntentUrl != null) {
- String substr = null;
- if (hit.mIntentUrl.startsWith(SCHEME_GEO)) {
- mInitialHitTestResult.mType = HitTestResult.GEO_TYPE;
- substr = hit.mIntentUrl.substring(SCHEME_GEO.length());
- } else if (hit.mIntentUrl.startsWith(SCHEME_TEL)) {
- mInitialHitTestResult.mType = HitTestResult.PHONE_TYPE;
- substr = hit.mIntentUrl.substring(SCHEME_TEL.length());
- } else if (hit.mIntentUrl.startsWith(SCHEME_MAILTO)) {
- mInitialHitTestResult.mType = HitTestResult.EMAIL_TYPE;
- substr = hit.mIntentUrl.substring(SCHEME_MAILTO.length());
- } else {
- return;
- }
- try {
- mInitialHitTestResult.mExtra = URLDecoder.decode(substr, "UTF-8");
- } catch (Throwable e) {
- Log.w(LOGTAG, "Failed to decode GEO URL!", e);
- mInitialHitTestResult.mType = HitTestResult.UNKNOWN_TYPE;
- }
+ setHitTestTypeFromUrl(hit.mIntentUrl);
}
}