Merge "Add WebView provider setting to developer settings."
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index d3c8852..a836fe4 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -79,6 +79,12 @@
android:summary="@string/picture_color_mode_desc"
android:persistent="false" />
+ <ListPreference
+ android:key="select_webview_provider"
+ android:title="@string/select_webview_provider_title"
+ android:dialogTitle="@string/select_webview_provider_dialog_title"
+ android:summary="%s" />
+
<PreferenceCategory android:key="debug_debugging_category"
android:title="@string/debug_debugging_category">
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 950af3c..598608c 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -72,6 +72,8 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
+import android.webkit.IWebViewUpdateService;
+import android.webkit.WebViewProviderInfo;
import android.widget.Switch;
import android.widget.TextView;
@@ -110,6 +112,7 @@
private static final String ENABLE_TERMINAL = "enable_terminal";
private static final String KEEP_SCREEN_ON = "keep_screen_on";
private static final String BT_HCI_SNOOP_LOG = "bt_hci_snoop_log";
+ private static final String WEBVIEW_PROVIDER_KEY = "select_webview_provider";
private static final String ENABLE_OEM_UNLOCK = "oem_unlock_enable";
private static final String HDCP_CHECKING_KEY = "hdcp_checking";
private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
@@ -253,6 +256,7 @@
private ListPreference mAnimatorDurationScale;
private ListPreference mOverlayDisplayDevices;
private ListPreference mOpenGLTraces;
+ private ListPreference mWebViewProvider;
private ListPreference mSimulateColorSpace;
@@ -389,6 +393,7 @@
mMobileDataAlwaysOn = findAndInitSwitchPref(MOBILE_DATA_ALWAYS_ON);
mLogdSize = addListPreference(SELECT_LOGD_SIZE_KEY);
mUsbConfiguration = addListPreference(USB_CONFIGURATION_KEY);
+ mWebViewProvider = addListPreference(WEBVIEW_PROVIDER_KEY);
mWindowAnimationScale = addListPreference(WINDOW_ANIMATION_SCALE_KEY);
mTransitionAnimationScale = addListPreference(TRANSITION_ANIMATION_SCALE_KEY);
@@ -461,6 +466,7 @@
removePreference(KEY_COLOR_MODE);
mColorModePreference = null;
}
+ updateWebViewProviderOptions();
}
private ListPreference addListPreference(String prefKey) {
@@ -669,6 +675,7 @@
updateSimulateColorSpace();
updateUSBAudioOptions();
updateForceResizableOptions();
+ updateWebViewProviderOptions();
}
private void resetDangerousOptions() {
@@ -697,6 +704,35 @@
pokeSystemProperties();
}
+ private void updateWebViewProviderOptions() {
+ IWebViewUpdateService webViewUpdateService =
+ IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
+ try {
+ WebViewProviderInfo[] providers = webViewUpdateService.getValidWebViewPackages();
+ String[] options = new String[providers.length];
+ String[] values = new String[providers.length];
+ for(int n = 0; n < providers.length; n++) {
+ options[n] = providers[n].description;
+ values[n] = providers[n].packageName;
+ }
+ mWebViewProvider.setEntries(options);
+ mWebViewProvider.setEntryValues(values);
+
+ String value = webViewUpdateService.getCurrentWebViewPackageName();
+ if (value == null) {
+ value = "";
+ }
+
+ for (int i = 0; i < values.length; i++) {
+ if (value.contentEquals(values[i])) {
+ mWebViewProvider.setValueIndex(i);
+ return;
+ }
+ }
+ } catch(RemoteException e) {
+ }
+ }
+
private void updateHdcpValues() {
ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
if (hdcpChecking != null) {
@@ -736,6 +772,18 @@
mBtHciSnoopLog.isChecked() ? 1 : 0);
}
+ private void writeWebViewProviderOptions(Object newValue) {
+ IWebViewUpdateService webViewUpdateService =
+ IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
+
+ try {
+ webViewUpdateService.changeProviderAndSetting(
+ newValue == null ? "" : newValue.toString());
+ updateWebViewProviderOptions();
+ } catch(RemoteException e) {
+ }
+ }
+
private void writeDebuggerOptions() {
try {
ActivityManagerNative.getDefault().setDebugApp(
@@ -1754,6 +1802,9 @@
updateHdcpValues();
pokeSystemProperties();
return true;
+ } else if (preference == mWebViewProvider) {
+ writeWebViewProviderOptions(newValue);
+ return true;
} else if (preference == mLogdSize) {
writeLogdSizeOption(newValue);
return true;