diff options
| author | 2016-06-20 15:55:25 +0100 | |
|---|---|---|
| committer | 2016-06-20 19:41:08 +0000 | |
| commit | 1d18efe080f63f6518f06ebfb85d2bad4556590c (patch) | |
| tree | 00759fb5cd3ef08997db38c8363fe4798dab2744 | |
| parent | 955f8ab45ca97e002b89ecb753853a2b79c27e6d (diff) | |
Fix the handling of bundle array in RestrictionsManager
Fix: 29506624
Change-Id: I0683d406f8b70d5d5f78bfc337d3952b6513d102
| -rw-r--r-- | core/java/android/content/RestrictionsManager.java | 18 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/content/RestrictionsManagerTest.java | 14 |
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")); + } } |