Skip to content

Commit 081b8ec

Browse files
committed
Update encoder/decoder
1 parent 92a9c6a commit 081b8ec

File tree

4 files changed

+27
-3
lines changed

4 files changed

+27
-3
lines changed

Parse/src/main/java/com/parse/ParseFile.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,14 +225,25 @@ public ParseFile(byte[] data, String contentType) {
225225
}
226226

227227
/**
228-
* Creates a new file instance from a Parcel {@code source}. This is used when unparceling
228+
* Creates a new file instance from a {@link Parcel} source. This is used when unparceling
229229
* a non-dirty ParseFile. Subclasses that need Parcelable behavior should provide their own
230230
* {@link android.os.Parcelable.Creator} and override this constructor.
231231
*
232232
* @param source
233233
* the source Parcel
234234
*/
235235
protected ParseFile(Parcel source) {
236+
this(source, ParseParcelDecoder.get());
237+
}
238+
239+
/**
240+
* Creates a new file instance from a {@link Parcel} using the given {@link ParseParcelDecoder}.
241+
* The decoder is currently unused, but it might be in the future, plus this is the pattern we
242+
* are using in parcelable classes.
243+
* @param source the parcel
244+
* @param decoder the decoder
245+
*/
246+
ParseFile(Parcel source, ParseParcelDecoder decoder) {
236247
this(new State.Builder()
237248
.url(source.readString())
238249
.name(source.readString())
@@ -732,6 +743,10 @@ public int describeContents() {
732743

733744
@Override
734745
public void writeToParcel(Parcel dest, int flags) {
746+
writeToParcel(dest, ParseParcelEncoder.get());
747+
}
748+
749+
void writeToParcel(Parcel dest, ParseParcelEncoder encoder) {
735750
if (isDirty()) {
736751
throw new RuntimeException("Unable to parcel an unsaved ParseFile.");
737752
}

Parse/src/main/java/com/parse/ParseParcelDecoder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public Object decode(Parcel source) {
5959
case ParseParcelEncoder.TYPE_OP:
6060
return ParseFieldOperations.decode(source, this);
6161

62+
case ParseParcelEncoder.TYPE_FILE:
63+
return new ParseFile(source, this);
64+
6265
case ParseParcelEncoder.TYPE_ACL:
6366
return new ParseACL(source, this);
6467

Parse/src/main/java/com/parse/ParseParcelEncoder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ private static boolean isValidType(Object value) {
5353
/* package */ final static String TYPE_NULL = "Null";
5454
/* package */ final static String TYPE_NATIVE = "Native";
5555
/* package */ final static String TYPE_OP = "Operation";
56+
/* package */ final static String TYPE_FILE = "ParseFile";
5657

5758
public void encode(Object object, Parcel dest) {
5859
try {
@@ -75,7 +76,8 @@ public void encode(Object object, Parcel dest) {
7576
((ParseFieldOperation) object).encode(dest, this);
7677

7778
} else if (object instanceof ParseFile) {
78-
throw new IllegalArgumentException("Not supported yet");
79+
dest.writeString(TYPE_FILE);
80+
((ParseFile) object).writeToParcel(dest, this);
7981

8082
} else if (object instanceof ParseGeoPoint) {
8183
throw new IllegalArgumentException("Not supported yet");

Parse/src/test/java/com/parse/ParseObjectTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ public void testGetLongWithWrongValue() throws Exception {
497497

498498
@Test
499499
public void testParcelable() throws Exception {
500-
// TODO test ParseGeoPoint and ParseFile after merge
500+
// TODO test ParseGeoPoint after merge
501501
ParseObject object = ParseObject.createWithoutData("Test", "objectId");
502502
object.isDeleted = true;
503503
object.put("long", 200L);
@@ -528,6 +528,9 @@ public void testParcelable() throws Exception {
528528
ParseRelation<ParseObject> rel = new ParseRelation<>(object, "relation");
529529
rel.add(related);
530530
object.put("relation", rel);
531+
// File
532+
ParseFile file = new ParseFile(new ParseFile.State.Builder().url("fileUrl").build());
533+
object.put("file", file);
531534

532535
Parcel parcel = Parcel.obtain();
533536
object.writeToParcel(parcel, 0);
@@ -553,6 +556,7 @@ public void testParcelable() throws Exception {
553556
assertEquals(newRel.getKey(), rel.getKey());
554557
assertEquals(newRel.getKnownObjects().size(), rel.getKnownObjects().size());
555558
newRel.hasKnownObject(related);
559+
assertEquals(newObject.getParseFile("file").getUrl(), object.getParseFile("file").getUrl());
556560
}
557561

558562
@Test

0 commit comments

Comments
 (0)