91 lines
3.6 KiB
Java
91 lines
3.6 KiB
Java
package androidx.versionedparcelable;
|
|
|
|
import android.os.Bundle;
|
|
import android.os.Parcelable;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RestrictTo;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.util.ArrayList;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
public class ParcelUtils {
|
|
private static final String INNER_BUNDLE_KEY = "a";
|
|
|
|
private ParcelUtils() {
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static <T extends VersionedParcelable> T fromInputStream(InputStream inputStream) {
|
|
return (T) new VersionedParcelStream(inputStream, null).readVersionedParcelable();
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static <T extends VersionedParcelable> T fromParcelable(Parcelable parcelable) {
|
|
if (parcelable instanceof ParcelImpl) {
|
|
return (T) ((ParcelImpl) parcelable).getVersionedParcel();
|
|
}
|
|
throw new IllegalArgumentException("Invalid parcel");
|
|
}
|
|
|
|
@Nullable
|
|
public static <T extends VersionedParcelable> T getVersionedParcelable(@NonNull Bundle bundle, @NonNull String str) {
|
|
try {
|
|
Bundle bundle2 = (Bundle) bundle.getParcelable(str);
|
|
if (bundle2 == null) {
|
|
return null;
|
|
}
|
|
bundle2.setClassLoader(ParcelUtils.class.getClassLoader());
|
|
return (T) fromParcelable(bundle2.getParcelable("a"));
|
|
} catch (RuntimeException unused) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Nullable
|
|
public static <T extends VersionedParcelable> List<T> getVersionedParcelableList(Bundle bundle, String str) {
|
|
ArrayList arrayList = new ArrayList();
|
|
try {
|
|
Bundle bundle2 = (Bundle) bundle.getParcelable(str);
|
|
bundle2.setClassLoader(ParcelUtils.class.getClassLoader());
|
|
Iterator it = bundle2.getParcelableArrayList("a").iterator();
|
|
while (it.hasNext()) {
|
|
arrayList.add(fromParcelable((Parcelable) it.next()));
|
|
}
|
|
return arrayList;
|
|
} catch (RuntimeException unused) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public static void putVersionedParcelable(@NonNull Bundle bundle, @NonNull String str, @Nullable VersionedParcelable versionedParcelable) {
|
|
if (versionedParcelable != null) {
|
|
Bundle bundle2 = new Bundle();
|
|
bundle2.putParcelable("a", toParcelable(versionedParcelable));
|
|
bundle.putParcelable(str, bundle2);
|
|
}
|
|
}
|
|
|
|
public static void putVersionedParcelableList(@NonNull Bundle bundle, @NonNull String str, @NonNull List<? extends VersionedParcelable> list) {
|
|
Bundle bundle2 = new Bundle();
|
|
ArrayList<? extends Parcelable> arrayList = new ArrayList<>();
|
|
for (VersionedParcelable versionedParcelable : list) {
|
|
arrayList.add(toParcelable(versionedParcelable));
|
|
}
|
|
bundle2.putParcelableArrayList("a", arrayList);
|
|
bundle.putParcelable(str, bundle2);
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static void toOutputStream(VersionedParcelable versionedParcelable, OutputStream outputStream) {
|
|
VersionedParcelStream versionedParcelStream = new VersionedParcelStream(null, outputStream);
|
|
versionedParcelStream.writeVersionedParcelable(versionedParcelable);
|
|
versionedParcelStream.closeField();
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public static Parcelable toParcelable(VersionedParcelable versionedParcelable) {
|
|
return new ParcelImpl(versionedParcelable);
|
|
}
|
|
}
|