package xdroid.core; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseIntArray; import java.io.Serializable; /** * @author Oleksii Kropachov ([email protected]) */ public final class ParcelUtils { public static final int VAL_PARCELABLE = 0x01; public static final int VAL_SERIALIZABLE = 0x02; public static final int VAL_NULL = 0x03; private ParcelUtils() { // disallow public access } public static void writeParcelableOrSerializable(Parcel out, int flags, Object value) { if (value instanceof Parcelable) { out.writeInt(VAL_PARCELABLE); out.writeParcelable((Parcelable) value, flags); } else if (value instanceof Serializable) { out.writeInt(VAL_SERIALIZABLE); out.writeSerializable((Serializable) value); } else { out.writeInt(VAL_NULL); } } public static <T> T readParcelableOrSerializable(Parcel in, ClassLoader classLoader) { switch (in.readInt()) { case VAL_PARCELABLE: //noinspection unchecked return (T) in.readParcelable(classLoader); case VAL_SERIALIZABLE: //noinspection unchecked return (T) in.readSerializable(); case VAL_NULL: // fall down default: return null; } } public static void writeSparseIntArray(Parcel out, SparseIntArray value) { if (value == null) { out.writeInt(-1); } else { int count = value.size(); out.writeInt(count); for (int i = 0; i < count; ++i) { out.writeInt(value.keyAt(i)); out.writeInt(value.valueAt(i)); } } } public static SparseIntArray readSparseIntArray(Parcel in) { int count = in.readInt(); if (count < 0) { return null; } SparseIntArray result = new SparseIntArray(); for (int i = 0; i < count; ++i) { int key = in.readInt(); int value = in.readInt(); result.put(key, value); } return result; } }