Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e3c0ae6 authored by Benedict Wong's avatar Benedict Wong Committed by Chiachang Wang
Browse files

Add to/from disk stable format

This change adds a utility to convert persistable bundles to and from
disk-stable byte arrays.

Bug: 192078259
Test: atest FrameworksVcnTests:PersistableBundleUtilsTest
Change-Id: Ifafb7081ec6a34ce3ab8e2aa502d46411405cb6d
(cherry picked from commit 823599b4)
Merged-In: Ifafb7081ec6a34ce3ab8e2aa502d46411405cb6d
parent 29d740c0
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.os.PersistableBundle;

import com.android.internal.util.HexDump;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -295,6 +297,30 @@ public class PersistableBundleUtils {
        return result;
    }

    /**
     * Converts a PersistableBundle into a disk-stable byte array format
     *
     * @param bundle the PersistableBundle to be converted to a disk-stable format
     * @return the byte array representation of the PersistableBundle
     */
    @Nullable
    public static byte[] toDiskStableBytes(@NonNull PersistableBundle bundle) throws IOException {
        final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        bundle.writeToStream(outputStream);
        return outputStream.toByteArray();
    }

    /**
     * Converts from a disk-stable byte array format to a PersistableBundle
     *
     * @param bytes the disk-stable byte array
     * @return the PersistableBundle parsed from this byte array.
     */
    public static PersistableBundle fromDiskStableBytes(@NonNull byte[] bytes) throws IOException {
        final ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
        return PersistableBundle.readFromStream(inputStream);
    }

    /**
     * Ensures safe reading and writing of {@link PersistableBundle}s to and from disk.
     *
+9 −0
Original line number Diff line number Diff line
@@ -267,6 +267,15 @@ public class PersistableBundleUtilsTest {
        assertTrue(PersistableBundleUtils.isEqual(testBundle, minimized));
    }

    @Test
    public void testToFromDiskStableBytes() throws Exception {
        final PersistableBundle testBundle = getTestBundle();
        final PersistableBundle result =
                PersistableBundleUtils.fromDiskStableBytes(
                        PersistableBundleUtils.toDiskStableBytes(testBundle));
        assertTrue(PersistableBundleUtils.isEqual(testBundle, result));
    }

    @Test
    public void testEquality_identical() throws Exception {
        final PersistableBundle left = getTestBundle();