summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Mak <tonymak@google.com> 2016-06-20 15:55:25 +0100
committer Tony Mak <tonymak@google.com> 2016-06-20 19:41:08 +0000
commit1d18efe080f63f6518f06ebfb85d2bad4556590c (patch)
tree00759fb5cd3ef08997db38c8363fe4798dab2744
parent955f8ab45ca97e002b89ecb753853a2b79c27e6d (diff)
Fix the handling of bundle array in RestrictionsManager
Fix: 29506624 Change-Id: I0683d406f8b70d5d5f78bfc337d3952b6513d102
-rw-r--r--core/java/android/content/RestrictionsManager.java18
-rw-r--r--core/tests/coretests/src/android/content/RestrictionsManagerTest.java14
2 files changed, 28 insertions, 4 deletions
diff --git a/core/java/android/content/RestrictionsManager.java b/core/java/android/content/RestrictionsManager.java
index 6893067e060b..88aae6655428 100644
--- a/core/java/android/content/RestrictionsManager.java
+++ b/core/java/android/content/RestrictionsManager.java
@@ -719,10 +719,20 @@ public class RestrictionsManager {
bundle.putBundle(entry.getKey(), childBundle);
break;
case RestrictionEntry.TYPE_BUNDLE_ARRAY:
- restrictions = entry.getRestrictions();
- Bundle[] bundleArray = new Bundle[restrictions.length];
- for (int i = 0; i < restrictions.length; i++) {
- bundleArray[i] = addRestrictionToBundle(new Bundle(), restrictions[i]);
+ RestrictionEntry[] bundleRestrictionArray = entry.getRestrictions();
+ Bundle[] bundleArray = new Bundle[bundleRestrictionArray.length];
+ for (int i = 0; i < bundleRestrictionArray.length; i++) {
+ RestrictionEntry[] bundleRestrictions =
+ bundleRestrictionArray[i].getRestrictions();
+ if (bundleRestrictions == null) {
+ // Non-bundle entry found in bundle array.
+ Log.w(TAG, "addRestrictionToBundle: " +
+ "Non-bundle entry found in bundle array");
+ bundleArray[i] = new Bundle();
+ } else {
+ bundleArray[i] = convertRestrictionsToBundle(Arrays.asList(
+ bundleRestrictions));
+ }
}
bundle.putParcelableArray(entry.getKey(), bundleArray);
break;
diff --git a/core/tests/coretests/src/android/content/RestrictionsManagerTest.java b/core/tests/coretests/src/android/content/RestrictionsManagerTest.java
index 8921924c5081..d92eece8afca 100644
--- a/core/tests/coretests/src/android/content/RestrictionsManagerTest.java
+++ b/core/tests/coretests/src/android/content/RestrictionsManagerTest.java
@@ -74,4 +74,18 @@ public class RestrictionsManagerTest extends AndroidTestCase {
assertEquals(2, childBundleArray.length);
}
+ public void testConvertRestrictionsToBundle_bundleArray() {
+ String packageName = getContext().getPackageName();
+ List<RestrictionEntry> manifestRestrictions = mRm.getManifestRestrictions(packageName);
+ Bundle bundle = RestrictionsManager.convertRestrictionsToBundle(manifestRestrictions);
+ assertEquals(6, bundle.size());
+ Parcelable[] array = bundle.getParcelableArray("bundle_array_key");
+ assertNotNull(array);
+ assertEquals(2, array.length);
+ Bundle firstBundle = (Bundle) array[0];
+ assertEquals(0, firstBundle.size());
+ Bundle secondBundle = (Bundle) array[1];
+ assertEquals(1, secondBundle.size());
+ assertTrue(secondBundle.containsKey("bundle_array_bundle_int_key"));
+ }
}