From 1d18efe080f63f6518f06ebfb85d2bad4556590c Mon Sep 17 00:00:00 2001 From: Tony Mak Date: Mon, 20 Jun 2016 15:55:25 +0100 Subject: [PATCH] Fix the handling of bundle array in RestrictionsManager Fix: 29506624 Change-Id: I0683d406f8b70d5d5f78bfc337d3952b6513d102 --- .../android/content/RestrictionsManager.java | 18 ++++++++++++++---- .../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 6893067e060b3..88aae6655428b 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 8921924c5081f..d92eece8afca0 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 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")); + } }