@@ -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