Merge "Make the URL for the JavaScript based screen-reader used by WebView configurable."
This commit is contained in:
committed by
Android (Google) Code Review
commit
ba621bd359
@@ -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>
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user