Support converting byte array to/from PersistableBundle

Test: FrameworksVcnTests:PersistableBundleUtilsTest(new tests added)
Change-Id: I1d700c9b6d10a40ef43abcab449d4b07d897f0ec
This commit is contained in:
Yan Yan
2020-11-09 10:45:04 -08:00
parent a3e954ffda
commit 42444745fc
2 changed files with 51 additions and 0 deletions

View File

@@ -21,6 +21,8 @@ import android.annotation.Nullable;
import android.os.ParcelUuid;
import android.os.PersistableBundle;
import com.android.internal.util.HexDump;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -42,6 +44,7 @@ public class PersistableBundleUtils {
private static final String MAP_VALUE_FORMAT = "MAP_VALUE_%d";
private static final String PARCEL_UUID_KEY = "PARCEL_UUID";
private static final String BYTE_ARRAY_KEY = "BYTE_ARRAY_KEY";
/**
* Functional interface to convert an object of the specified type to a PersistableBundle.
@@ -146,6 +149,43 @@ public class PersistableBundleUtils {
return result;
}
// TODO: b/170513329 Delete #fromByteArray and #toByteArray once BaseBundle#putByteArray and
// BaseBundle#getByteArray are exposed.
/**
* Converts a byte array to a PersistableBundle.
*
* <p>To avoid key collisions, NO additional key/value pairs should be added to the returned
* PersistableBundle object.
*
* @param array a byte array instance to persist
* @return the PersistableBundle instance
*/
public static PersistableBundle fromByteArray(byte[] array) {
final PersistableBundle result = new PersistableBundle();
result.putString(BYTE_ARRAY_KEY, HexDump.toHexString(array));
return result;
}
/**
* Converts from a PersistableBundle to a byte array.
*
* @param bundle the PersistableBundle containing the byte array
* @return the byte array instance
*/
public static byte[] toByteArray(PersistableBundle bundle) {
Objects.requireNonNull(bundle, "PersistableBundle is null");
String hex = bundle.getString(BYTE_ARRAY_KEY);
if (hex == null || hex.length() % 2 != 0) {
throw new IllegalArgumentException("PersistableBundle contains invalid byte array");
}
return HexDump.hexStringToByteArray(hex);
}
/**
* Converts from a Map of Persistable objects to a single PersistableBundle.
*

View File

@@ -16,6 +16,7 @@
package com.android.server.vcn.util;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import android.os.PersistableBundle;
@@ -189,4 +190,14 @@ public class PersistableBundleUtilsTest {
assertEquals(sourceMap, resultList);
}
@Test
public void testByteArrayConversionLossless() {
final byte[] byteArray = "testByteArrayConversionLossless".getBytes();
PersistableBundle bundle = PersistableBundleUtils.fromByteArray(byteArray);
byte[] result = PersistableBundleUtils.toByteArray(bundle);
assertArrayEquals(byteArray, result);
}
}