From 4d0a8cf06797cd596c0f1f35b295ce001c41eef5 Mon Sep 17 00:00:00 2001 From: John Reck Date: Wed, 22 Feb 2012 21:35:32 -0800 Subject: Support mIntentUrl for addresses Change-Id: I61abf7f333608fa91629ce62e348dda83a795e45 --- core/java/android/webkit/WebView.java | 57 +++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 19 deletions(-) (limited to 'core/java/android/webkit/WebView.java') diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 5601dca8cbe4..a399c32cbd5c 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -122,6 +122,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashMap; @@ -7922,7 +7923,10 @@ public class WebView extends AbsoluteLayout } }, ViewConfiguration.getPressedStateDuration()); } - if (sDisableNavcache) { + if (mFocusedNode != null && mFocusedNode.mIntentUrl != null) { + playSoundEffect(SoundEffectConstants.CLICK); + overrideLoading(mFocusedNode.mIntentUrl); + } else if (sDisableNavcache) { WebViewCore.TouchUpData touchUpData = new WebViewCore.TouchUpData(); // use "0" as generation id to inform WebKit to use the same x/y as // it used when processing GET_TOUCH_HIGHLIGHT_RECTS @@ -9160,24 +9164,7 @@ public class WebView extends AbsoluteLayout WebKitHitTest hit = (WebKitHitTest) msg.obj; mFocusedNode = hit; setTouchHighlightRects(hit); - if (hit == null) { - mInitialHitTestResult = null; - } else { - mInitialHitTestResult = new HitTestResult(); - if (hit.mLinkUrl != null) { - mInitialHitTestResult.mType = HitTestResult.SRC_ANCHOR_TYPE; - mInitialHitTestResult.mExtra = hit.mLinkUrl; - if (hit.mImageUrl != null) { - mInitialHitTestResult.mType = HitTestResult.SRC_IMAGE_ANCHOR_TYPE; - mInitialHitTestResult.mExtra = hit.mImageUrl; - } - } else if (hit.mImageUrl != null) { - mInitialHitTestResult.mType = HitTestResult.IMAGE_TYPE; - mInitialHitTestResult.mExtra = hit.mImageUrl; - } else if (hit.mEditable) { - mInitialHitTestResult.mType = HitTestResult.EDIT_TEXT_TYPE; - } - } + setHitTestResult(hit); break; case SAVE_WEBARCHIVE_FINISHED: @@ -9249,6 +9236,38 @@ public class WebView extends AbsoluteLayout } } + private void setHitTestResult(WebKitHitTest hit) { + if (hit == null) { + mInitialHitTestResult = null; + } else { + mInitialHitTestResult = new HitTestResult(); + if (hit.mLinkUrl != null) { + mInitialHitTestResult.mType = HitTestResult.SRC_ANCHOR_TYPE; + mInitialHitTestResult.mExtra = hit.mLinkUrl; + if (hit.mImageUrl != null) { + mInitialHitTestResult.mType = HitTestResult.SRC_IMAGE_ANCHOR_TYPE; + mInitialHitTestResult.mExtra = hit.mImageUrl; + } + } else if (hit.mImageUrl != null) { + mInitialHitTestResult.mType = HitTestResult.IMAGE_TYPE; + mInitialHitTestResult.mExtra = hit.mImageUrl; + } else if (hit.mEditable) { + mInitialHitTestResult.mType = HitTestResult.EDIT_TEXT_TYPE; + } else if (hit.mIntentUrl != null) { + if (hit.mIntentUrl.startsWith(SCHEME_GEO)) { + mInitialHitTestResult.mType = HitTestResult.GEO_TYPE; + String substr = hit.mIntentUrl.substring(SCHEME_GEO.length()); + try { + mInitialHitTestResult.mExtra = URLDecoder.decode(substr, "UTF-8"); + } catch (UnsupportedEncodingException e) { + Log.w(LOGTAG, "Failed to decode GEO URL!", e); + mInitialHitTestResult.mType = HitTestResult.UNKNOWN_TYPE; + } + } + } + } + } + private boolean shouldDrawHighlightRect() { if (mFocusedNode == null || mInitialHitTestResult == null) { return false; -- cgit v1.2.3