diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml index d3c88529068..a836fe4002d 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" /> + + diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index 950af3cdafb..598608c47f8 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -72,6 +72,8 @@ import android.view.LayoutInflater; 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 @@ public class DevelopmentSettings extends SettingsPreferenceFragment 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 @@ public class DevelopmentSettings extends SettingsPreferenceFragment private ListPreference mAnimatorDurationScale; private ListPreference mOverlayDisplayDevices; private ListPreference mOpenGLTraces; + private ListPreference mWebViewProvider; private ListPreference mSimulateColorSpace; @@ -389,6 +393,7 @@ public class DevelopmentSettings extends SettingsPreferenceFragment 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 @@ public class DevelopmentSettings extends SettingsPreferenceFragment removePreference(KEY_COLOR_MODE); mColorModePreference = null; } + updateWebViewProviderOptions(); } private ListPreference addListPreference(String prefKey) { @@ -669,6 +675,7 @@ public class DevelopmentSettings extends SettingsPreferenceFragment updateSimulateColorSpace(); updateUSBAudioOptions(); updateForceResizableOptions(); + updateWebViewProviderOptions(); } private void resetDangerousOptions() { @@ -697,6 +704,35 @@ public class DevelopmentSettings extends SettingsPreferenceFragment 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 @@ public class DevelopmentSettings extends SettingsPreferenceFragment 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 @@ public class DevelopmentSettings extends SettingsPreferenceFragment updateHdcpValues(); pokeSystemProperties(); return true; + } else if (preference == mWebViewProvider) { + writeWebViewProviderOptions(newValue); + return true; } else if (preference == mLogdSize) { writeLogdSizeOption(newValue); return true;