Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d413483 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Fix HitTest type detection"

parents 64c22634 59265e89
Loading
Loading
Loading
Loading
+28 −22
Original line number Diff line number Diff line
@@ -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);
        }
    }