Skip to content

Commit 0d41348

Browse files
jreckAndroid (Google) Code Review
authored andcommitted
Merge "Fix HitTest type detection"
2 parents 64c2263 + 59265e8 commit 0d41348

File tree

1 file changed

+28
-22
lines changed

1 file changed

+28
-22
lines changed

core/java/android/webkit/WebView.java

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9238,16 +9238,40 @@ public void handleMessage(Message msg) {
92389238
}
92399239
}
92409240

9241+
private void setHitTestTypeFromUrl(String url) {
9242+
String substr = null;
9243+
if (url.startsWith(SCHEME_GEO)) {
9244+
mInitialHitTestResult.mType = HitTestResult.GEO_TYPE;
9245+
substr = url.substring(SCHEME_GEO.length());
9246+
} else if (url.startsWith(SCHEME_TEL)) {
9247+
mInitialHitTestResult.mType = HitTestResult.PHONE_TYPE;
9248+
substr = url.substring(SCHEME_TEL.length());
9249+
} else if (url.startsWith(SCHEME_MAILTO)) {
9250+
mInitialHitTestResult.mType = HitTestResult.EMAIL_TYPE;
9251+
substr = url.substring(SCHEME_MAILTO.length());
9252+
} else {
9253+
mInitialHitTestResult.mType = HitTestResult.SRC_ANCHOR_TYPE;
9254+
mInitialHitTestResult.mExtra = url;
9255+
return;
9256+
}
9257+
try {
9258+
mInitialHitTestResult.mExtra = URLDecoder.decode(substr, "UTF-8");
9259+
} catch (Throwable e) {
9260+
Log.w(LOGTAG, "Failed to decode URL! " + substr, e);
9261+
mInitialHitTestResult.mType = HitTestResult.UNKNOWN_TYPE;
9262+
}
9263+
}
9264+
92419265
private void setHitTestResult(WebKitHitTest hit) {
92429266
if (hit == null) {
92439267
mInitialHitTestResult = null;
92449268
return;
92459269
}
92469270
mInitialHitTestResult = new HitTestResult();
92479271
if (hit.mLinkUrl != null) {
9248-
mInitialHitTestResult.mType = HitTestResult.SRC_ANCHOR_TYPE;
9249-
mInitialHitTestResult.mExtra = hit.mLinkUrl;
9250-
if (hit.mImageUrl != null) {
9272+
setHitTestTypeFromUrl(hit.mLinkUrl);
9273+
if (hit.mImageUrl != null
9274+
&& mInitialHitTestResult.mType == HitTestResult.SRC_ANCHOR_TYPE) {
92519275
mInitialHitTestResult.mType = HitTestResult.SRC_IMAGE_ANCHOR_TYPE;
92529276
mInitialHitTestResult.mExtra = hit.mImageUrl;
92539277
}
@@ -9257,25 +9281,7 @@ private void setHitTestResult(WebKitHitTest hit) {
92579281
} else if (hit.mEditable) {
92589282
mInitialHitTestResult.mType = HitTestResult.EDIT_TEXT_TYPE;
92599283
} else if (hit.mIntentUrl != null) {
9260-
String substr = null;
9261-
if (hit.mIntentUrl.startsWith(SCHEME_GEO)) {
9262-
mInitialHitTestResult.mType = HitTestResult.GEO_TYPE;
9263-
substr = hit.mIntentUrl.substring(SCHEME_GEO.length());
9264-
} else if (hit.mIntentUrl.startsWith(SCHEME_TEL)) {
9265-
mInitialHitTestResult.mType = HitTestResult.PHONE_TYPE;
9266-
substr = hit.mIntentUrl.substring(SCHEME_TEL.length());
9267-
} else if (hit.mIntentUrl.startsWith(SCHEME_MAILTO)) {
9268-
mInitialHitTestResult.mType = HitTestResult.EMAIL_TYPE;
9269-
substr = hit.mIntentUrl.substring(SCHEME_MAILTO.length());
9270-
} else {
9271-
return;
9272-
}
9273-
try {
9274-
mInitialHitTestResult.mExtra = URLDecoder.decode(substr, "UTF-8");
9275-
} catch (Throwable e) {
9276-
Log.w(LOGTAG, "Failed to decode GEO URL!", e);
9277-
mInitialHitTestResult.mType = HitTestResult.UNKNOWN_TYPE;
9278-
}
9284+
setHitTestTypeFromUrl(hit.mIntentUrl);
92799285
}
92809286
}
92819287

0 commit comments

Comments
 (0)