Chromium Code Reviews| 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..2f9bbc839827c32acda935b1b4b7f440e0cbf141 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,6 +4,9 @@ |
| package org.chromium.chrome.browser.infobar; |
| +import android.util.SparseIntArray; |
| +import android.widget.CompoundButton; |
| + |
| import org.chromium.base.annotations.CalledByNative; |
| import org.chromium.chrome.R; |
| import org.chromium.chrome.browser.ResourceId; |
| @@ -12,15 +15,24 @@ import org.chromium.ui.base.WindowAndroid; |
| /** |
| * An infobar for showing several permission requests which can be allowed or blocked. |
| */ |
| -public class GroupedPermissionInfoBar extends ConfirmInfoBar { |
| +public class GroupedPermissionInfoBar |
| + extends ConfirmInfoBar implements CompoundButton.OnCheckedChangeListener { |
| private final int[] mPermissionIcons; |
| private final String[] mPermissionText; |
| + private final int[] mContentSettings; |
| + private boolean[] mToggleStatus; |
|
gone
2016/05/31 21:20:42
mPermissionState? Would relate it to the other mP
tsergeant
2016/06/02 07:04:36
Done (Obsoleted by changes to switch handling)
|
| + private long mNativeGroupedPermissionInfoBar; |
| + private final WindowAndroid mWindowAndroid; |
|
gone
2016/05/31 21:20:42
private finals before privates
tsergeant
2016/06/02 07:04:36
Done.
|
| 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; |
| + mToggleStatus = new boolean[mPermissionIcons.length]; |
| } |
| @Override |
| @@ -28,9 +40,41 @@ 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, this, true) |
|
gone
2016/05/31 21:20:42
Indentation here is wonky. Why are you doing a fi
tsergeant
2016/06/02 07:04:36
Welp, oops.
Done.
|
| + .findViewById(R.id.control_toggle_switch); |
| + } |
| + } |
| + } |
| + |
| + @Override |
| + public void onButtonClicked(final boolean isPrimaryButton) { |
|
gone
2016/05/31 21:20:42
Doesn't this whole code block depend on whether th
tsergeant
2016/06/02 07:04:36
Done.
|
| + // Only call setContentSettings with the permissions which were actually allowed by the |
| + // user. |
| + SparseIntArray selectedContentSettings = new SparseIntArray(); |
|
gone
2016/05/31 21:20:42
Why bother with a SparseIntArray here? Seems like
tsergeant
2016/06/02 07:04:36
Done. (I played around with both originally, Spars
|
| + for (int i = 0; i < mToggleStatus.length; i++) { |
| + if (mToggleStatus[i]) { |
| + selectedContentSettings.append(selectedContentSettings.size(), mContentSettings[i]); |
| + } |
| + } |
| + int[] selectedArray = new int[selectedContentSettings.size()]; |
| + for (int i = 0; i < selectedContentSettings.size(); i++) { |
| + selectedArray[i] = selectedContentSettings.get(i); |
| + } |
| + setContentSettings(mWindowAndroid, selectedArray); |
| + super.onButtonClicked(isPrimaryButton); |
| + } |
| + |
| + @Override |
| + public void onCheckedChanged(CompoundButton button, boolean isChecked) { |
| + mToggleStatus[button.getId()] = isChecked; |
| + if (mNativeGroupedPermissionInfoBar != 0) { |
| + nativeToggleAccept(mNativeGroupedPermissionInfoBar, button.getId(), isChecked); |
| } |
| } |
| @@ -50,9 +94,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 nativeToggleAccept( |
| + long nativeGroupedPermissionInfoBar, int position, boolean value); |
| } |