Merge "add developer setting for multiprocess webview" into nyc-dev
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 02454c0..53ac1bb 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -85,6 +85,11 @@
android:summary="%s" />
<SwitchPreference
+ android:key="enable_webview_multiprocess"
+ android:title="@string/enable_webview_multiprocess"
+ android:summary="@string/enable_webview_multiprocess_desc" />
+
+ <SwitchPreference
android:key="color_temperature"
android:title="@string/color_temperature"
android:summary="@string/color_temperature_desc" />
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 3de2af2..084f25a 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -53,6 +53,7 @@
import android.os.ServiceManager;
import android.os.StrictMode;
import android.os.SystemProperties;
+import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.IMountService;
import android.provider.SearchIndexableResource;
@@ -115,6 +116,7 @@
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 WEBVIEW_MULTIPROCESS_KEY = "enable_webview_multiprocess";
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";
@@ -218,6 +220,7 @@
private IWindowManager mWindowManager;
private IBackupManager mBackupManager;
+ private IWebViewUpdateService mWebViewUpdateService;
private DevicePolicyManager mDpm;
private UserManager mUm;
private WifiManager mWifiManager;
@@ -277,6 +280,8 @@
private ListPreference mAnimatorDurationScale;
private ListPreference mOverlayDisplayDevices;
private ListPreference mOpenGLTraces;
+
+ private SwitchPreference mWebViewMultiprocess;
private ListPreference mWebViewProvider;
private ListPreference mSimulateColorSpace;
@@ -324,6 +329,9 @@
mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
mBackupManager = IBackupManager.Stub.asInterface(
ServiceManager.getService(Context.BACKUP_SERVICE));
+ mWebViewUpdateService =
+ IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
+
mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
mUm = (UserManager) getSystemService(Context.USER_SERVICE);
@@ -418,6 +426,7 @@
mLogdSize = addListPreference(SELECT_LOGD_SIZE_KEY);
mUsbConfiguration = addListPreference(USB_CONFIGURATION_KEY);
mWebViewProvider = addListPreference(WEBVIEW_PROVIDER_KEY);
+ mWebViewMultiprocess = findAndInitSwitchPref(WEBVIEW_MULTIPROCESS_KEY);
mBluetoothDisableAbsVolume = findAndInitSwitchPref(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY);
mWindowAnimationScale = addListPreference(WINDOW_ANIMATION_SCALE_KEY);
@@ -713,6 +722,7 @@
updateUSBAudioOptions();
updateForceResizableOptions();
updateEnableFreeformWindowsSupportOptions();
+ updateWebViewMultiprocessOptions();
updateWebViewProviderOptions();
updateOemUnlockOptions();
if (mColorTemperaturePreference != null) {
@@ -748,10 +758,8 @@
}
private void updateWebViewProviderOptions() {
- IWebViewUpdateService webViewUpdateService =
- IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
try {
- WebViewProviderInfo[] providers = webViewUpdateService.getValidWebViewPackages();
+ WebViewProviderInfo[] providers = mWebViewUpdateService.getValidWebViewPackages();
if (providers == null) {
Log.e(TAG, "No WebView providers available");
return;
@@ -765,7 +773,7 @@
mWebViewProvider.setEntries(options);
mWebViewProvider.setEntryValues(values);
- String value = webViewUpdateService.getCurrentWebViewPackageName();
+ String value = mWebViewUpdateService.getCurrentWebViewPackageName();
if (value == null) {
value = "";
}
@@ -780,6 +788,25 @@
}
}
+ private void updateWebViewMultiprocessOptions() {
+ updateSwitchPreference(mWebViewMultiprocess,
+ Settings.Global.getInt(getActivity().getContentResolver(),
+ Settings.Global.WEBVIEW_MULTIPROCESS, 0) != 0);
+ }
+
+ private void writeWebViewMultiprocessOptions() {
+ boolean value = mWebViewMultiprocess.isChecked();
+ Settings.Global.putInt(getActivity().getContentResolver(),
+ Settings.Global.WEBVIEW_MULTIPROCESS, value ? 1 : 0);
+
+ try {
+ String wv_package = mWebViewUpdateService.getCurrentWebViewPackageName();
+ ActivityManagerNative.getDefault().killPackageDependents(
+ wv_package, UserHandle.USER_ALL);
+ } catch(RemoteException e) {
+ }
+ }
+
private void updateHdcpValues() {
ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
if (hdcpChecking != null) {
@@ -820,11 +847,8 @@
}
private void writeWebViewProviderOptions(Object newValue) {
- IWebViewUpdateService webViewUpdateService =
- IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
-
try {
- webViewUpdateService.changeProviderAndSetting(
+ mWebViewUpdateService.changeProviderAndSetting(
newValue == null ? "" : newValue.toString());
updateWebViewProviderOptions();
} catch(RemoteException e) {
@@ -1912,6 +1936,8 @@
startBackgroundCheckFragment();
} else if (preference == mBluetoothDisableAbsVolume) {
writeBluetoothDisableAbsVolumeOptions();
+ } else if (preference == mWebViewMultiprocess) {
+ writeWebViewMultiprocessOptions();
} else {
return super.onPreferenceTreeClick(preference);
}