| Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/GroupedPermissionInfoBar.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/GroupedPermissionInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/GroupedPermissionInfoBar.java
|
| index 3e0be873d88c7acc92e17d1b260e2248345d1457..f04bf66cb318bd5acc574e68774e3e42d53b47c6 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/GroupedPermissionInfoBar.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/GroupedPermissionInfoBar.java
|
| @@ -4,23 +4,33 @@
|
|
|
| package org.chromium.chrome.browser.infobar;
|
|
|
| +import android.support.v7.widget.SwitchCompat;
|
| +
|
| import org.chromium.base.annotations.CalledByNative;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.ResourceId;
|
| import org.chromium.ui.base.WindowAndroid;
|
|
|
| +import java.util.ArrayList;
|
| +
|
| /**
|
| * An infobar for showing several permission requests which can be allowed or blocked.
|
| */
|
| public class GroupedPermissionInfoBar extends ConfirmInfoBar {
|
| private final int[] mPermissionIcons;
|
| private final String[] mPermissionText;
|
| + private final int[] mContentSettings;
|
| + private final WindowAndroid mWindowAndroid;
|
| + private long mNativeGroupedPermissionInfoBar;
|
|
|
| GroupedPermissionInfoBar(String message, String buttonOk, String buttonCancel,
|
| - int[] permissionIcons, String[] permissionText) {
|
| + int[] permissionIcons, String[] permissionText, WindowAndroid windowAndroid,
|
| + int[] contentSettings) {
|
| super(0, null, message, null, buttonOk, buttonCancel);
|
| mPermissionIcons = permissionIcons;
|
| mPermissionText = permissionText;
|
| + mWindowAndroid = windowAndroid;
|
| + mContentSettings = contentSettings;
|
| }
|
|
|
| @Override
|
| @@ -28,10 +38,49 @@ public class GroupedPermissionInfoBar extends ConfirmInfoBar {
|
| super.createContent(layout);
|
| InfoBarControlLayout control = layout.addControlLayout();
|
|
|
| - for (int i = 0; i < mPermissionIcons.length; i++) {
|
| - control.addIcon(ResourceId.mapToDrawableId(mPermissionIcons[i]), mPermissionText[i],
|
| - null, R.color.light_normal_color);
|
| + if (mPermissionIcons.length == 1) {
|
| + control.addIcon(ResourceId.mapToDrawableId(mPermissionIcons[0]),
|
| + R.color.light_normal_color, mPermissionText[0], null);
|
| + } else {
|
| + for (int i = 0; i < mPermissionIcons.length; i++) {
|
| + control.addSwitch(ResourceId.mapToDrawableId(mPermissionIcons[i]),
|
| + R.color.light_normal_color, mPermissionText[i], i, true);
|
| + }
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public void onButtonClicked(final boolean isPrimaryButton) {
|
| + if (isPrimaryButton) {
|
| + boolean[] toggleStatus = new boolean[mPermissionIcons.length];
|
| +
|
| + if (mPermissionIcons.length == 1) {
|
| + toggleStatus[0] = true;
|
| + } else {
|
| + for (int i = 0; i < mPermissionIcons.length; i++) {
|
| + toggleStatus[i] = ((SwitchCompat) getView().findViewById(i)).isChecked();
|
| + }
|
| + }
|
| +
|
| + // Only call setContentSettings with the permissions which were actually allowed by the
|
| + // user.
|
| + ArrayList<Integer> selectedContentSettings = new ArrayList<Integer>();
|
| + for (int i = 0; i < toggleStatus.length; i++) {
|
| + if (toggleStatus[i]) {
|
| + selectedContentSettings.add(Integer.valueOf(mContentSettings[i]));
|
| + }
|
| + }
|
| + int[] selectedArray = new int[selectedContentSettings.size()];
|
| + for (int i = 0; i < selectedContentSettings.size(); i++) {
|
| + selectedArray[i] = selectedContentSettings.get(i).intValue();
|
| + }
|
| +
|
| + if (mNativeGroupedPermissionInfoBar != 0) {
|
| + nativeSetPermissionState(mNativeGroupedPermissionInfoBar, toggleStatus);
|
| + setContentSettings(mWindowAndroid, selectedArray);
|
| + }
|
| }
|
| + super.onButtonClicked(isPrimaryButton);
|
| }
|
|
|
| /**
|
| @@ -50,9 +99,22 @@ public class GroupedPermissionInfoBar extends ConfirmInfoBar {
|
| private static InfoBar create(String message, String buttonOk, String buttonCancel,
|
| int[] permissionIcons, String[] permissionText, WindowAndroid windowAndroid,
|
| int[] contentSettings) {
|
| - GroupedPermissionInfoBar infobar = new GroupedPermissionInfoBar(
|
| - message, buttonOk, buttonCancel, permissionIcons, permissionText);
|
| - infobar.setContentSettings(windowAndroid, contentSettings);
|
| + GroupedPermissionInfoBar infobar = new GroupedPermissionInfoBar(message, buttonOk,
|
| + buttonCancel, permissionIcons, permissionText, windowAndroid, contentSettings);
|
| return infobar;
|
| }
|
| +
|
| + @CalledByNative
|
| + private void setNativePtr(long nativePtr) {
|
| + mNativeGroupedPermissionInfoBar = nativePtr;
|
| + }
|
| +
|
| + @Override
|
| + protected void onNativeDestroyed() {
|
| + mNativeGroupedPermissionInfoBar = 0;
|
| + super.onNativeDestroyed();
|
| + }
|
| +
|
| + private native void nativeSetPermissionState(
|
| + long nativeGroupedPermissionInfoBar, boolean[] permissions);
|
| }
|
|
|