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