diff --git a/app/src/main/java/com/philliphsu/clock2/util/ParcelableUtil.java b/app/src/main/java/com/philliphsu/clock2/util/ParcelableUtil.java new file mode 100644 index 0000000..b18ee10 --- /dev/null +++ b/app/src/main/java/com/philliphsu/clock2/util/ParcelableUtil.java @@ -0,0 +1,31 @@ +package com.philliphsu.clock2.util; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Utilities to marshall and unmarshall a {@code Parcelable} to and from a byte array. + */ +public final class ParcelableUtil { + public static byte[] marshall(Parcelable parcelable) { + Parcel parcel = Parcel.obtain(); + parcelable.writeToParcel(parcel, 0); + byte[] bytes = parcel.marshall(); + parcel.recycle(); + return bytes; + } + + public static Parcel unmarshall(byte[] bytes) { + Parcel parcel = Parcel.obtain(); + parcel.unmarshall(bytes, 0, bytes.length); + parcel.setDataPosition(0); // This is extremely important! + return parcel; + } + + public static T unmarshall(byte[] bytes, Parcelable.Creator creator) { + Parcel parcel = unmarshall(bytes); + T result = creator.createFromParcel(parcel); + parcel.recycle(); + return result; + } +}