From 982f1e12858475236259bd2a6a83cb3c5550325b Mon Sep 17 00:00:00 2001 From: mar-v-in Date: Sat, 11 Apr 2015 11:04:52 +0200 Subject: [PATCH] Add support for byte[] --- .../microg/safeparcel/SafeParcelReader.java | 10 ++++++++++ .../org/microg/safeparcel/SafeParcelUtil.java | 19 ++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelReader.java b/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelReader.java index 7ece470..128f587 100644 --- a/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelReader.java +++ b/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelReader.java @@ -170,6 +170,16 @@ public class SafeParcelReader { return arr; } + public static byte[] readByteArray(Parcel parcel, int position) { + int length = readStart(parcel, position); + int start = parcel.dataPosition(); + if (length == 0) + return null; + byte[] arr = parcel.createByteArray(); + parcel.setDataPosition(start + length); + return arr; + } + public static void skip(Parcel parcel, int position) { int i = readStart(parcel, position); parcel.setDataPosition(parcel.dataPosition() + i); diff --git a/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelUtil.java b/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelUtil.java index 108433e..24278bc 100644 --- a/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelUtil.java +++ b/safe-parcel/src/main/java/org/microg/safeparcel/SafeParcelUtil.java @@ -7,7 +7,6 @@ import android.util.Log; import java.lang.reflect.Constructor; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -27,7 +26,7 @@ public class SafeParcelUtil { return t; } catch (NoSuchMethodException e) { throw new RuntimeException("createObject() requires a default constructor"); - } catch (InvocationTargetException | InstantiationException | IllegalAccessException e) { + } catch (Exception e) { throw new RuntimeException("Can't construct object", e); } } @@ -96,13 +95,11 @@ public class SafeParcelUtil { } } - private static Parcelable.Creator getCreator(Field field) - throws IllegalAccessException { + private static Parcelable.Creator getCreator(Field field) throws IllegalAccessException { try { return (Parcelable.Creator) field.getType().getDeclaredField("CREATOR").get(null); } catch (NoSuchFieldException e) { - throw new RuntimeException( - field.getType() + " is an Parcelable without CREATOR"); + throw new RuntimeException(field.getType() + " is an Parcelable without CREATOR"); } } @@ -141,6 +138,9 @@ public class SafeParcelUtil { case StringArray: SafeParcelWriter.write(parcel, num, (String[]) field.get(object), mayNull); break; + case ByteArray: + SafeParcelWriter.write(parcel, num, (byte[]) field.get(object), mayNull); + break; case Integer: SafeParcelWriter.write(parcel, num, (Integer) field.get(object)); break; @@ -184,6 +184,9 @@ public class SafeParcelUtil { case StringArray: field.set(object, SafeParcelReader.readStringArray(parcel, position)); break; + case ByteArray: + field.set(object, SafeParcelReader.readByteArray(parcel, position)); + break; case Integer: field.set(object, SafeParcelReader.readInt(parcel, position)); break; @@ -206,7 +209,7 @@ public class SafeParcelUtil { } private enum SafeParcelType { - Parcelable, Binder, List, ParcelableArray, StringArray, + Parcelable, Binder, List, ParcelableArray, StringArray, ByteArray, Integer, Long, Boolean, Float, Double, String; public static SafeParcelType fromClass(Class clazz) { @@ -214,6 +217,8 @@ public class SafeParcelUtil { return ParcelableArray; if (clazz.isArray() && String.class.isAssignableFrom(clazz.getComponentType())) return StringArray; + if (clazz.isArray() && byte.class.isAssignableFrom(clazz.getComponentType())) + return ByteArray; if (Parcelable.class.isAssignableFrom(clazz)) return Parcelable; if (IBinder.class.isAssignableFrom(clazz))