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

Commit d8faf746 authored by alanv's avatar alanv
Browse files

Check whether ChromeVox is ready before attempting to call it.

Calls to performAction will immediately return false if ChromeVox is not
loaded. Also adds additional debugging output.

Bug: 7328657
Change-Id: I5bd7c69ccc9500cebaa4a8c1bf023794f4eebe2e
parent 4574df0c
Loading
Loading
Loading
Loading
+26 −3
Original line number Diff line number Diff line
@@ -96,11 +96,26 @@ class AccessibilityInjector {

    // Template for JavaScript that performs AndroidVox actions.
    private static final String ACCESSIBILITY_ANDROIDVOX_TEMPLATE =
            "cvox.AndroidVox.performAction('%1s')";
            "(function() {" +
                    "  if ((typeof(cvox) != 'undefined')"+
                    "      && (typeof(cvox.ChromeVox) != 'undefined')" +
                    "      && (typeof(cvox.AndroidVox) != 'undefined')" +
                    "      && cvox.ChromeVox.isActive) {" +
                    "    return cvox.AndroidVox.performAction('%1s');" +
                    "  } else {" +
                    "    return false;" +
                    "  }" +
                    "})()";

    // JS code used to shut down an active AndroidVox instance.
    private static final String TOGGLE_CVOX_TEMPLATE =
            "javascript:(function() { cvox.ChromeVox.host.activateOrDeactivateChromeVox(%b); })();";
            "javascript:(function() {" +
                    "  if ((typeof(cvox) != 'undefined')"+
                    "      && (typeof(cvox.ChromeVox) != 'undefined')" +
                    "      && (typeof(cvox.ChromeVox.host) != 'undefined')) {" +
                    "    cvox.ChromeVox.host.activateOrDeactivateChromeVox(%b);" +
                    "  }" +
                    "})();";

    /**
     * Creates an instance of the AccessibilityInjector based on
@@ -787,20 +802,26 @@ class AccessibilityInjector {
            while (true) {
                try {
                    if (mResultId == resultId) {
                        if (DEBUG)
                            Log.w(TAG, "Received CVOX result");
                        return true;
                    }
                    if (mResultId > resultId) {
                        if (DEBUG)
                            Log.w(TAG, "Obsolete CVOX result");
                        return false;
                    }
                    final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis;
                    waitTimeMillis = RESULT_TIMEOUT - elapsedTimeMillis;
                    if (waitTimeMillis <= 0) {
                        if (DEBUG)
                            Log.w(TAG, "Timed out while waiting for CVOX result");
                        return false;
                    }
                    mResultLock.wait(waitTimeMillis);
                } catch (InterruptedException ie) {
                    if (DEBUG)
                        Log.w(TAG, "Timed out while waiting for CVOX result");
                        Log.w(TAG, "Interrupted while waiting for CVOX result");
                    /* ignore */
                }
            }
@@ -816,6 +837,8 @@ class AccessibilityInjector {
        @JavascriptInterface
        @SuppressWarnings("unused")
        public void onResult(String id, String result) {
            if (DEBUG)
                Log.w(TAG, "Saw CVOX result of '" + result + "'");
            final long resultId;

            try {