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

Commit 59265e89 authored by John Reck's avatar John Reck
Browse files

Fix HitTest type detection

Change-Id: Ide3d137de18302d2bb83437c3709a31afcdef9ff
parent 5d5b3783
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);
        }
    }