| Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferences.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferences.java
|
| index 251d00c670a4ba44f893f63b4692b134096a854d..14b32f48a9536addf1107d1bc300843a9290a7a7 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferences.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/SiteSettingsPreferences.java
|
| @@ -24,6 +24,11 @@ import java.util.List;
|
| * Microphone, etc. By clicking into one of these categories, the user can see or and modify
|
| * permissions that have been granted to websites, as well as enable or disable permissions
|
| * browser-wide.
|
| + *
|
| + * Depending on version and which experiment is running, this class also handles showing the Media
|
| + * sub-menu, which contains Autoplay and Protected Content. To avoid the Media sub-menu having only
|
| + * one sub-item, when either Autoplay or Protected Content should not be visible the other is shown
|
| + * in the main setting instead (as opposed to under Media).
|
| */
|
| public class SiteSettingsPreferences extends PreferenceFragment
|
| implements OnPreferenceClickListener {
|
| @@ -35,14 +40,23 @@ public class SiteSettingsPreferences extends PreferenceFragment
|
| static final String COOKIES_KEY = "cookies";
|
| static final String FULLSCREEN_KEY = "fullscreen";
|
| static final String JAVASCRIPT_KEY = "javascript";
|
| + static final String LANGUAGE_KEY = "language";
|
| static final String LOCATION_KEY = "device_location";
|
| + static final String MEDIA_KEY = "media";
|
| static final String MICROPHONE_KEY = "microphone";
|
| static final String NOTIFICATIONS_KEY = "notifications";
|
| static final String POPUPS_KEY = "popups";
|
| static final String PROTECTED_CONTENT_KEY = "protected_content";
|
| static final String STORAGE_KEY = "use_storage";
|
|
|
| - boolean mAutoplayExperimentEnabled = false;
|
| + // Whether the Autoplay menu is available for display.
|
| + boolean mAutoplayMenuAvailable = false;
|
| +
|
| + // Whether the Protected Content menu is available for display.
|
| + boolean mProtectedContentMenuAvailable = false;
|
| +
|
| + // Whether this class is handling showing the Media sub-menu (and not the main menu).
|
| + boolean mMediaSubMenu = false;
|
|
|
| @Override
|
| public void onCreate(Bundle savedInstanceState) {
|
| @@ -50,17 +64,21 @@ public class SiteSettingsPreferences extends PreferenceFragment
|
| addPreferencesFromResource(R.xml.site_settings_preferences);
|
| getActivity().setTitle(R.string.prefs_site_settings);
|
|
|
| - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
|
| - getPreferenceScreen().removePreference(findPreference(PROTECTED_CONTENT_KEY));
|
| - }
|
| + mProtectedContentMenuAvailable = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
|
|
|
| String autoplayTrialGroupName =
|
| FieldTrialList.findFullName("MediaElementGestureOverrideExperiment");
|
| - mAutoplayExperimentEnabled = autoplayTrialGroupName.startsWith("Enabled");
|
| - if (!mAutoplayExperimentEnabled) {
|
| - getPreferenceScreen().removePreference(findPreference(AUTOPLAY_KEY));
|
| + mAutoplayMenuAvailable = autoplayTrialGroupName.startsWith("Enabled");
|
| +
|
| + String category = "";
|
| + if (getArguments() != null) {
|
| + category = getArguments().getString(SingleCategoryPreferences.EXTRA_CATEGORY, "");
|
| + if (MEDIA_KEY.equals(category)) {
|
| + mMediaSubMenu = true;
|
| + }
|
| }
|
|
|
| + configurePreferences();
|
| updatePreferenceStates();
|
| }
|
|
|
| @@ -91,26 +109,69 @@ public class SiteSettingsPreferences extends PreferenceFragment
|
| return -1;
|
| }
|
|
|
| + private void configurePreferences() {
|
| + if (mMediaSubMenu) {
|
| + // The Media sub-menu only contains Protected Content and Autoplay, so remove all other
|
| + // menus.
|
| + getPreferenceScreen().removePreference(findPreference(ALL_SITES_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(BACKGROUND_SYNC_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(CAMERA_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(COOKIES_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(FULLSCREEN_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(JAVASCRIPT_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(LOCATION_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(MEDIA_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(MICROPHONE_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(NOTIFICATIONS_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(POPUPS_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(LANGUAGE_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(STORAGE_KEY));
|
| + } else {
|
| + // If both Autoplay and Protected Content menus are available, they'll be tucked under
|
| + // the Media key. Otherwise, we can remove the Media menu entry.
|
| + if (!mAutoplayMenuAvailable || !mProtectedContentMenuAvailable) {
|
| + getPreferenceScreen().removePreference(findPreference(MEDIA_KEY));
|
| +
|
| + if (!mAutoplayMenuAvailable) {
|
| + getPreferenceScreen().removePreference(findPreference(AUTOPLAY_KEY));
|
| + }
|
| + if (!mProtectedContentMenuAvailable) {
|
| + getPreferenceScreen().removePreference(findPreference(PROTECTED_CONTENT_KEY));
|
| + }
|
| + } else {
|
| + // These two will be tucked under the Media subkey, so no reason to show them now.
|
| + getPreferenceScreen().removePreference(findPreference(AUTOPLAY_KEY));
|
| + getPreferenceScreen().removePreference(findPreference(PROTECTED_CONTENT_KEY));
|
| + }
|
| + }
|
| + }
|
| +
|
| private void updatePreferenceStates() {
|
| PrefServiceBridge prefServiceBridge = PrefServiceBridge.getInstance();
|
|
|
| // Preferences that navigate to Website Settings.
|
| List<String> websitePrefs = new ArrayList<String>();
|
| - websitePrefs.add(LOCATION_KEY);
|
| - if (Build.VERSION.SDK_INT >= 19) {
|
| + if (mMediaSubMenu) {
|
| websitePrefs.add(PROTECTED_CONTENT_KEY);
|
| - }
|
| - if (mAutoplayExperimentEnabled) {
|
| websitePrefs.add(AUTOPLAY_KEY);
|
| + } else {
|
| + // When showing the main menu, only one of these two will be visible, at most.
|
| + if (mProtectedContentMenuAvailable && !mAutoplayMenuAvailable) {
|
| + websitePrefs.add(PROTECTED_CONTENT_KEY);
|
| + } else if (mAutoplayMenuAvailable) {
|
| + websitePrefs.add(AUTOPLAY_KEY);
|
| + }
|
| + websitePrefs.add(BACKGROUND_SYNC_KEY);
|
| + websitePrefs.add(CAMERA_KEY);
|
| + websitePrefs.add(COOKIES_KEY);
|
| + websitePrefs.add(FULLSCREEN_KEY);
|
| + websitePrefs.add(JAVASCRIPT_KEY);
|
| + websitePrefs.add(LOCATION_KEY);
|
| + websitePrefs.add(MICROPHONE_KEY);
|
| + websitePrefs.add(NOTIFICATIONS_KEY);
|
| + websitePrefs.add(POPUPS_KEY);
|
| }
|
| - websitePrefs.add(BACKGROUND_SYNC_KEY);
|
| - websitePrefs.add(CAMERA_KEY);
|
| - websitePrefs.add(COOKIES_KEY);
|
| - websitePrefs.add(FULLSCREEN_KEY);
|
| - websitePrefs.add(JAVASCRIPT_KEY);
|
| - websitePrefs.add(MICROPHONE_KEY);
|
| - websitePrefs.add(NOTIFICATIONS_KEY);
|
| - websitePrefs.add(POPUPS_KEY);
|
| +
|
| // Initialize the summary and icon for all preferences that have an
|
| // associated content settings entry.
|
| for (String prefName : websitePrefs) {
|
| @@ -156,10 +217,12 @@ public class SiteSettingsPreferences extends PreferenceFragment
|
| }
|
|
|
| Preference p = findPreference(ALL_SITES_KEY);
|
| - p.setOnPreferenceClickListener(this);
|
| + if (p != null) p.setOnPreferenceClickListener(this);
|
| + p = findPreference(MEDIA_KEY);
|
| + if (p != null) p.setOnPreferenceClickListener(this);
|
| // TODO(finnur): Re-move this for Storage once it can be moved to the 'Usage' menu.
|
| p = findPreference(STORAGE_KEY);
|
| - p.setOnPreferenceClickListener(this);
|
| + if (p != null) p.setOnPreferenceClickListener(this);
|
| }
|
|
|
| @Override
|
|
|