diff options
-rw-r--r-- | res/values/strings.xml | 9 | ||||
-rw-r--r-- | res/xml/development_prefs.xml | 4 | ||||
-rw-r--r-- | src/com/android/settings/DevelopmentSettings.java | 94 |
3 files changed, 107 insertions, 0 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index 2c97e16..c70586a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4831,6 +4831,15 @@ <string name="show_all_anrs_summary">Show App Not Responding dialog for background apps</string> + <!-- UI debug setting: webview data reduction proxy [CHAR LIMIT=100] --> + <string name="dev_settings_use_google_settings">Please use GoogleSettings app for this operation</string> + + <!-- UI debug setting: webview data reduction proxy [CHAR LIMIT=50] --> + <string name="webview_data_reduction_proxy">Reduce WebView Network Usage</string> + <!-- UI debug setting: webview data reduction proxy summary [CHAR LIMIT=200] --> + <string name="webview_data_reduction_proxy_summary">Reduce network usage by + proxying WebView connections through Google compression servers</string> + <!-- Activity title for network data usage summary. [CHAR LIMIT=25] --> <string name="data_usage_summary_title">Data usage</string> <!-- Activity title for Appk data usage summary. [CHAR LIMIT=25] --> diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml index 96eb62a..b0d69d4 100644 --- a/res/xml/development_prefs.xml +++ b/res/xml/development_prefs.xml @@ -318,6 +318,10 @@ android:title="@string/show_all_anrs" android:summary="@string/show_all_anrs_summary"/> + <SwitchPreference + android:key="webview_data_reduction_proxy" + android:title="@string/webview_data_reduction_proxy" + android:summary="@string/webview_data_reduction_proxy_summary"/> </PreferenceCategory> </PreferenceScreen> diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index 8c13f9c..2f8a9e4 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -33,8 +33,10 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; +import android.database.Cursor; import android.hardware.usb.IUsbManager; import android.hardware.usb.UsbManager; +import android.net.Uri; import android.net.wifi.WifiManager; import android.os.AsyncTask; import android.os.BatteryManager; @@ -62,6 +64,7 @@ import android.view.HardwareRenderer; import android.view.IWindowManager; import android.view.View; import android.view.accessibility.AccessibilityManager; +import android.webkit.WebView; import android.widget.Switch; import android.widget.TextView; @@ -155,6 +158,11 @@ public class DevelopmentSettings extends SettingsPreferenceFragment private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs"; + private static final String WEBVIEW_DATA_REDUCTION_PROXY_KEY = "webview_data_reduction_proxy"; + // GoogleSetting name for the data reduction proxy setting. + // Setting type: int ( 0 = disallow, 1 = allow ) + private static final String WEBVIEW_DATA_REDUCTION_PROXY = "use_webview_data_reduction_proxy"; + private static final String PROCESS_STATS = "proc_stats"; private static final String TAG_CONFIRM_ENFORCE = "confirm_enforce"; @@ -167,6 +175,11 @@ public class DevelopmentSettings extends SettingsPreferenceFragment private static final String PERSISTENT_DATA_BLOCK_PROP = "ro.frp.pst"; + // The setting Uri. Used when querying GoogleSettings. + private static final Uri GOOGLE_SETTINGS_CONTENT_URI = Uri.parse("content://com.google.settings/partner"); + private static final String GOOGLE_SETTINGS_COMPONENT = "com.google.android.gms"; + private static final String GOOGLE_SETTINGS_ACTIVITY = ".app.settings.GoogleSettingsActivity"; + private static String DEFAULT_LOG_RING_BUFFER_SIZE_IN_BYTES = "262144"; // 256K private IWindowManager mWindowManager; @@ -234,6 +247,8 @@ public class DevelopmentSettings extends SettingsPreferenceFragment private SwitchPreference mShowAllANRs; + private SwitchPreference mWebViewDataReductionProxy; + private PreferenceScreen mProcessStats; private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>(); @@ -371,6 +386,15 @@ public class DevelopmentSettings extends SettingsPreferenceFragment mProcessStats = (PreferenceScreen) findPreference(PROCESS_STATS); mAllPrefs.add(mProcessStats); + + mWebViewDataReductionProxy = findAndInitSwitchPref(WEBVIEW_DATA_REDUCTION_PROXY_KEY); + mWebViewDataReductionProxy.setOnPreferenceChangeListener( + new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + return handleDataReductionProxyPreferenceChange(); + } + }); } private ListPreference addListPreference(String prefKey) { @@ -540,6 +564,7 @@ public class DevelopmentSettings extends SettingsPreferenceFragment updateImmediatelyDestroyActivitiesOptions(); updateAppProcessLimitOptions(); updateShowAllANRsOptions(); + updateWebViewDataReductionProxyOptions(); updateVerifyAppsOverUsbOptions(); updateBugreportOptions(); updateForceRtlOptions(); @@ -1320,6 +1345,73 @@ public class DevelopmentSettings extends SettingsPreferenceFragment getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0); } + // Reads the googlesetting and converts to an int. Throws an exception if GoogleSettings + // provider does not exist or if the setting name cannot be found. + private int getGoogleSettingValue(String name) throws Exception { + String value = null; + Cursor c = null; + try { + ContentResolver resolver = getActivity().getContentResolver(); + c = resolver.query(GOOGLE_SETTINGS_CONTENT_URI, new String[] { "value" }, + "name=?", new String[]{ name }, null); + if (c != null && c.moveToNext()) value = c.getString(0); + } finally { + if (c != null) c.close(); + } + // Throw an exception if value is null. This will indicate that setting is not found. + return Integer.parseInt(value); + } + + private boolean handleDataReductionProxyPreferenceChange() { + int val; + try { + val = getGoogleSettingValue(WEBVIEW_DATA_REDUCTION_PROXY); + } catch (Exception e) { + // Accessing GoogleSettings failed. Use the developer setting. + return true; + } + + Intent i = new Intent(); + i.setClassName(GOOGLE_SETTINGS_COMPONENT, + GOOGLE_SETTINGS_COMPONENT + GOOGLE_SETTINGS_ACTIVITY); + try { + startActivity(i); + } catch (android.content.ActivityNotFoundException ex) { + // We found the GoogleSetting but for some reason activity not found. + // Do our best and put an alert dialog + new AlertDialog.Builder(getActivity()).setMessage( + getActivity().getResources().getString( + R.string.dev_settings_use_google_settings)) + .setPositiveButton(android.R.string.ok, this) + .show(); + } + // Use GoogleSettings to set. + return false; + } + + private void writeWebViewDataReductionProxyOptions() { + Settings.Secure.putInt(getActivity().getContentResolver(), + Settings.Secure.WEBVIEW_DATA_REDUCTION_PROXY, + mWebViewDataReductionProxy.isChecked() ? 1 : 0); + Intent intent = new Intent(WebView.DATA_REDUCTION_PROXY_SETTING_CHANGED); + // Broadcast to all apps running as current user. + getActivity().sendBroadcastAsUser(intent, UserHandle.CURRENT); + } + + private void updateWebViewDataReductionProxyOptions() { + int val = -1; + try { + val = getGoogleSettingValue(WEBVIEW_DATA_REDUCTION_PROXY); + } catch (Exception e) { + // Accessing GoogleSettings failed. Use the developer setting + } + if (val == -1) { + val = Settings.Secure.getInt(getActivity().getContentResolver(), + Settings.Secure.WEBVIEW_DATA_REDUCTION_PROXY, 0); + } + updateSwitchPreference(mWebViewDataReductionProxy, val != 0); + } + @Override public void onSwitchChanged(Switch switchView, boolean isChecked) { if (switchView != mSwitchBar.getSwitch()) { @@ -1439,6 +1531,8 @@ public class DevelopmentSettings extends SettingsPreferenceFragment writeImmediatelyDestroyActivitiesOptions(); } else if (preference == mShowAllANRs) { writeShowAllANRsOptions(); + } else if (preference == mWebViewDataReductionProxy) { + writeWebViewDataReductionProxyOptions(); } else if (preference == mForceHardwareUi) { writeHardwareUiOptions(); } else if (preference == mForceMsaa) { |