diff options
| author | John Reck <jreck@google.com> | 2012-02-22 21:35:32 -0800 |
|---|---|---|
| committer | John Reck <jreck@google.com> | 2012-02-23 10:28:53 -0800 |
| commit | 4d0a8cf06797cd596c0f1f35b295ce001c41eef5 (patch) | |
| tree | c21ef211fdc24f96f4f3d780a84e90d4f735b034 /core/java/android/webkit/WebView.java | |
| parent | a172b6e96909186451a6a968b8e70872f6753c10 (diff) | |
Support mIntentUrl for addresses
Change-Id: I61abf7f333608fa91629ce62e348dda83a795e45
Diffstat (limited to 'core/java/android/webkit/WebView.java')
| -rw-r--r-- | core/java/android/webkit/WebView.java | 57 |
1 files changed, 38 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; |
