summaryrefslogtreecommitdiff
path: root/core/java/android/webkit/WebView.java
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2012-02-22 21:35:32 -0800
committerJohn Reck <jreck@google.com>2012-02-23 10:28:53 -0800
commit4d0a8cf06797cd596c0f1f35b295ce001c41eef5 (patch)
treec21ef211fdc24f96f4f3d780a84e90d4f735b034 /core/java/android/webkit/WebView.java
parenta172b6e96909186451a6a968b8e70872f6753c10 (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.java57
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;