Merge "Fix HitTest type detection"
This commit is contained in:
@@ -9238,6 +9238,30 @@ public class WebView extends AbsoluteLayout
|
||||
}
|
||||
}
|
||||
|
||||
private void setHitTestTypeFromUrl(String url) {
|
||||
String substr = null;
|
||||
if (url.startsWith(SCHEME_GEO)) {
|
||||
mInitialHitTestResult.mType = HitTestResult.GEO_TYPE;
|
||||
substr = url.substring(SCHEME_GEO.length());
|
||||
} else if (url.startsWith(SCHEME_TEL)) {
|
||||
mInitialHitTestResult.mType = HitTestResult.PHONE_TYPE;
|
||||
substr = url.substring(SCHEME_TEL.length());
|
||||
} else if (url.startsWith(SCHEME_MAILTO)) {
|
||||
mInitialHitTestResult.mType = HitTestResult.EMAIL_TYPE;
|
||||
substr = url.substring(SCHEME_MAILTO.length());
|
||||
} else {
|
||||
mInitialHitTestResult.mType = HitTestResult.SRC_ANCHOR_TYPE;
|
||||
mInitialHitTestResult.mExtra = url;
|
||||
return;
|
||||
}
|
||||
try {
|
||||
mInitialHitTestResult.mExtra = URLDecoder.decode(substr, "UTF-8");
|
||||
} catch (Throwable e) {
|
||||
Log.w(LOGTAG, "Failed to decode URL! " + substr, e);
|
||||
mInitialHitTestResult.mType = HitTestResult.UNKNOWN_TYPE;
|
||||
}
|
||||
}
|
||||
|
||||
private void setHitTestResult(WebKitHitTest hit) {
|
||||
if (hit == null) {
|
||||
mInitialHitTestResult = null;
|
||||
@@ -9245,9 +9269,9 @@ public class WebView extends AbsoluteLayout
|
||||
}
|
||||
mInitialHitTestResult = new HitTestResult();
|
||||
if (hit.mLinkUrl != null) {
|
||||
mInitialHitTestResult.mType = HitTestResult.SRC_ANCHOR_TYPE;
|
||||
mInitialHitTestResult.mExtra = hit.mLinkUrl;
|
||||
if (hit.mImageUrl != null) {
|
||||
setHitTestTypeFromUrl(hit.mLinkUrl);
|
||||
if (hit.mImageUrl != null
|
||||
&& mInitialHitTestResult.mType == HitTestResult.SRC_ANCHOR_TYPE) {
|
||||
mInitialHitTestResult.mType = HitTestResult.SRC_IMAGE_ANCHOR_TYPE;
|
||||
mInitialHitTestResult.mExtra = hit.mImageUrl;
|
||||
}
|
||||
@@ -9257,25 +9281,7 @@ public class WebView extends AbsoluteLayout
|
||||
} else if (hit.mEditable) {
|
||||
mInitialHitTestResult.mType = HitTestResult.EDIT_TEXT_TYPE;
|
||||
} else if (hit.mIntentUrl != null) {
|
||||
String substr = null;
|
||||
if (hit.mIntentUrl.startsWith(SCHEME_GEO)) {
|
||||
mInitialHitTestResult.mType = HitTestResult.GEO_TYPE;
|
||||
substr = hit.mIntentUrl.substring(SCHEME_GEO.length());
|
||||
} else if (hit.mIntentUrl.startsWith(SCHEME_TEL)) {
|
||||
mInitialHitTestResult.mType = HitTestResult.PHONE_TYPE;
|
||||
substr = hit.mIntentUrl.substring(SCHEME_TEL.length());
|
||||
} else if (hit.mIntentUrl.startsWith(SCHEME_MAILTO)) {
|
||||
mInitialHitTestResult.mType = HitTestResult.EMAIL_TYPE;
|
||||
substr = hit.mIntentUrl.substring(SCHEME_MAILTO.length());
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
mInitialHitTestResult.mExtra = URLDecoder.decode(substr, "UTF-8");
|
||||
} catch (Throwable e) {
|
||||
Log.w(LOGTAG, "Failed to decode GEO URL!", e);
|
||||
mInitialHitTestResult.mType = HitTestResult.UNKNOWN_TYPE;
|
||||
}
|
||||
setHitTestTypeFromUrl(hit.mIntentUrl);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user