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

Commit 3ca5a74c authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Make the URL for the JavaScript based screen-reader used by WebView configurable.

The URl from which to inject a screen-reader for WebView accessiblity support should be
configurable because: 1) The accessibility engineering team should be able to point
devices to a staging build of the screen-reader; 2) We would like to be able to change
this URL via the Google services mechanism.

bug:5718543

Change-Id: I3d4d343f1c93e0e0173f04b2912949fe8a3566b9
parent 7cee3183
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -2779,10 +2779,10 @@ public final class Settings {
        public static final String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password";

        /**
         * If injection of accessibility enhancing JavaScript scripts
         * If injection of accessibility enhancing JavaScript screen-reader
         * is enabled.
         * <p>
         *   Note: Accessibility injecting scripts are served by the
         *   Note: The JavaScript based screen-reader is served by the
         *   Google infrastructure and enable users with disabilities to
         *   efficiantly navigate in and explore web content.
         * </p>
@@ -2794,6 +2794,22 @@ public final class Settings {
        public static final String ACCESSIBILITY_SCRIPT_INJECTION =
            "accessibility_script_injection";

        /**
         * The URL for the injected JavaScript based screen-reader used
         * for providing accessiblity of content in WebView.
         * <p>
         *   Note: The JavaScript based screen-reader is served by the
         *   Google infrastructure and enable users with disabilities to
         *   efficiently navigate in and explore web content.
         * </p>
         * <p>
         *   This property represents a string value.
         * </p>
         * @hide
         */
        public static final String ACCESSIBILITY_SCREEN_READER_URL =
            "accessibility_script_injection_url";

        /**
         * Key bindings for navigation in built-in accessibility support for web content.
         * <p>
+17 −6
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ import android.os.Message;
import android.os.StrictMode;
import android.provider.Settings;
import android.speech.tts.TextToSpeech;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.EventLog;
import android.util.Log;
@@ -849,13 +850,12 @@ public class WebView extends AbsoluteLayout
    // the alias via which accessibility JavaScript interface is exposed
    private static final String ALIAS_ACCESSIBILITY_JS_INTERFACE = "accessibility";

    // JavaScript to inject the script chooser which will
    // pick the right script for the current URL
    private static final String ACCESSIBILITY_SCRIPT_CHOOSER_JAVASCRIPT =
    // Template for JavaScript that injects a screen-reader.
    private static final String ACCESSIBILITY_SCREEN_READER_JAVASCRIPT_TEMPLATE =
        "javascript:(function() {" +
        "    var chooser = document.createElement('script');" +
        "    chooser.type = 'text/javascript';" +
        "    chooser.src = 'https://ssl.gstatic.com/accessibility/javascript/android/AndroidScriptChooser.user.js';" +
        "    chooser.src = '%1s';" +
        "    document.getElementsByTagName('head')[0].appendChild(chooser);" +
        "  })();";

@@ -3818,7 +3818,7 @@ public class WebView extends AbsoluteLayout
            if (onDeviceScriptInjectionEnabled) {
                ensureAccessibilityScriptInjectorInstance(false);
                // neither script injected nor script injection opted out => we inject
                loadUrl(ACCESSIBILITY_SCRIPT_CHOOSER_JAVASCRIPT);
                loadUrl(getScreenReaderInjectingJs());
                // TODO: Set this flag after successfull script injection. Maybe upon injection
                // the chooser should update the meta tag and we check it to declare success
                mAccessibilityScriptInjected = true;
@@ -3832,7 +3832,7 @@ public class WebView extends AbsoluteLayout
        } else if (axsParameterValue == ACCESSIBILITY_SCRIPT_INJECTION_PROVIDED) {
            ensureAccessibilityScriptInjectorInstance(false);
            // the URL provides accessibility but we still need to add our generic script
            loadUrl(ACCESSIBILITY_SCRIPT_CHOOSER_JAVASCRIPT);
            loadUrl(getScreenReaderInjectingJs());
        } else {
            Log.e(LOGTAG, "Unknown URL value for the \"axs\" URL parameter: " + axsParameterValue);
        }
@@ -3853,6 +3853,17 @@ public class WebView extends AbsoluteLayout
        }
    }

    /**
     * Gets JavaScript that injects a screen-reader.
     *
     * @return The JavaScript snippet.
     */
    private String getScreenReaderInjectingJs() {
        String screenReaderUrl = Settings.Secure.getString(mContext.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL);
        return String.format(ACCESSIBILITY_SCREEN_READER_JAVASCRIPT_TEMPLATE, screenReaderUrl);
    }

    /**
     * Gets the "axs" URL parameter value.
     *
+5 −0
Original line number Diff line number Diff line
@@ -115,6 +115,11 @@
            0x200000038=0x03000701:0x03010701:0x03020701;
    </string>

    <!-- Default for Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION_URL -->
    <string name="def_accessibility_screen_reader_url" translatable="false">
        https://ssl.gstatic.com/accessibility/javascript/android/AndroidScriptChooser.user.js
    </string>

    <!-- Default for Settings.Secure.TOUCH_EXPLORATION_ENABLED -->
    <bool name="def_touch_exploration_enabled">false</bool>

+20 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
    // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
    // is properly propagated through your change.  Not doing so will result in a loss of user
    // settings.
    private static final int DATABASE_VERSION = 73;
    private static final int DATABASE_VERSION = 74;

    private Context mContext;

@@ -986,6 +986,22 @@ public class DatabaseHelper extends SQLiteOpenHelper {
            upgradeVersion = 73;
        }

        if (upgradeVersion == 73) {
            // URL from which WebView loads a JavaScript based screen-reader.
            db.beginTransaction();
            SQLiteStatement stmt = null;
            try {
                stmt = db.compileStatement("INSERT INTO secure(name,value) VALUES(?,?);");
                loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
                        R.string.def_accessibility_screen_reader_url);
                db.setTransactionSuccessful();
            } finally {
                db.endTransaction();
                if (stmt != null) stmt.close();
            }
            upgradeVersion = 74;
        }

        // *** Remember to update DATABASE_VERSION above!

        if (upgradeVersion != currentVersion) {
@@ -1526,6 +1542,9 @@ public class DatabaseHelper extends SQLiteOpenHelper {

            loadBooleanSetting(stmt, Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD,
                    R.bool.def_accessibility_speak_password);

            loadStringSetting(stmt, Settings.Secure.ACCESSIBILITY_SCREEN_READER_URL,
                    R.string.def_accessibility_screen_reader_url);
        } finally {
            if (stmt != null) stmt.close();
        }