diff options
| author | John Reck <jreck@google.com> | 2012-02-24 10:22:56 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-02-24 10:22:56 -0800 |
| commit | 0d4134834eeceffa6b75e02d2c8a1ffce1deffea (patch) | |
| tree | 4f0595575ca0be3197405d964879ad428da31fe7 /core/java/android/webkit/WebView.java | |
| parent | 64c2263428e1a2a49cd48e79389c6aebc1c9e49f (diff) | |
| parent | 59265e896a87502d07c981d26e93ad078920999c (diff) | |
Merge "Fix HitTest type detection"
Diffstat (limited to 'core/java/android/webkit/WebView.java')
| -rw-r--r-- | core/java/android/webkit/WebView.java | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 887554d88048..b9dfb2e99611 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); } } |
