OSDN Git Service

Fix the handling of bundle array in RestrictionsManager
authorTony Mak <tonymak@google.com>
Mon, 20 Jun 2016 14:55:25 +0000 (15:55 +0100)
committerTony Mak <tonymak@google.com>
Mon, 20 Jun 2016 19:41:08 +0000 (19:41 +0000)
Fix: 29506624

Change-Id: I0683d406f8b70d5d5f78bfc337d3952b6513d102

core/java/android/content/RestrictionsManager.java
core/tests/coretests/src/android/content/RestrictionsManagerTest.java

index 6893067..88aae66 100644 (file)
@@ -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;
index 8921924..d92eece 100644 (file)
@@ -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"));
+    }
 }