diff options
| -rw-r--r-- | core/java/android/webkit/WebView.java | 57 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewCore.java | 1 |
2 files changed, 39 insertions, 19 deletions
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; diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 037e3234f767..649e5c98daea 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -879,6 +879,7 @@ public final class WebViewCore { static class WebKitHitTest { String mLinkUrl; + String mIntentUrl; String mAnchorText; String mImageUrl; String mAltDisplayString; |