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); |
} |