Skip to content

Commit 0a28a28

Browse files
committed
@InstanceState and @FragmentArg use putParcelableArrayList() instead of putSerializable() when possible
1 parent 2aa295e commit 0a28a28

3 files changed

Lines changed: 55 additions & 1 deletion

File tree

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/helper/BundleHelper.java‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static org.androidannotations.helper.CanonicalNameConstants.STRING;
2121

2222
import java.util.HashMap;
23+
import java.util.List;
2324
import java.util.Map;
2425

2526
import javax.lang.model.element.Element;
@@ -115,6 +116,42 @@ public BundleHelper(AnnotationHelper helper, Element element) {
115116
methodNameToRestore = "get" + "Serializable";
116117
restoreCallNeedCastStatement = true;
117118
}
119+
} else if (typeString.startsWith(CanonicalNameConstants.ARRAYLIST)) {
120+
121+
boolean hasTypeArguments = false;
122+
TypeMirror elementAsType = element.asType();
123+
if (elementAsType instanceof DeclaredType) {
124+
DeclaredType declaredType = (DeclaredType) elementAsType;
125+
List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments();
126+
if (typeArguments.size() == 1) {
127+
TypeMirror typeArgument = typeArguments.get(0);
128+
if (typeArgument instanceof DeclaredType) {
129+
declaredType = (DeclaredType) typeArgument;
130+
typeString = declaredType.asElement().toString();
131+
elementType = annotationHelper.typeElementFromQualifiedName(typeString);
132+
hasTypeArguments = declaredType.getTypeArguments().size() > 0;
133+
}
134+
if (isTypeParcelable(elementType)) {
135+
methodNameToSave = "put" + "ParcelableArrayList";
136+
methodNameToRestore = "get" + "ParcelableArrayList";
137+
138+
if (hasTypeArguments) {
139+
restoreCallNeedsSuppressWarning = true;
140+
}
141+
}
142+
}
143+
}
144+
145+
if (methodNameToSave == null) {
146+
methodNameToSave = "put" + "Serializable";
147+
methodNameToRestore = "get" + "Serializable";
148+
restoreCallNeedCastStatement = true;
149+
150+
if (hasTypeArguments) {
151+
restoreCallNeedsSuppressWarning = true;
152+
}
153+
}
154+
118155
} else {
119156

120157
TypeMirror elementAsType = element.asType();

‎AndroidAnnotations/functional-test-1-5-tests/src/test/java/org/androidannotations/test15/instancestate/SaveInstanceStateActivityParameterizedTest.java‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.fest.assertions.Assertions.assertThat;
1919

2020
import java.lang.reflect.Field;
21+
import java.util.ArrayList;
2122
import java.util.Arrays;
2223
import java.util.Collection;
2324

@@ -38,7 +39,11 @@ public class SaveInstanceStateActivityParameterizedTest {
3839

3940
@Parameters
4041
public static Collection<Object[]> generateTestCases() throws Exception {
41-
42+
ArrayList<MyGenericParcelableBean<Integer>> myGenericParcelableBeanArrayList = new ArrayList<MyGenericParcelableBean<Integer>>();
43+
myGenericParcelableBeanArrayList.add(new MyGenericParcelableBean<Integer>((Integer) 1));
44+
myGenericParcelableBeanArrayList.add(new MyGenericParcelableBean<Integer>((Integer) 2));
45+
myGenericParcelableBeanArrayList.add(new MyGenericParcelableBean<Integer>((Integer) 3));
46+
4247
Object[][] testCases = { //
4348
//
4449
{ "myBoolean", true }, //
@@ -85,6 +90,9 @@ public static Collection<Object[]> generateTestCases() throws Exception {
8590
{ "myGenericSerializableBeanArray", new MyGenericSerializableBean[] {new MyGenericSerializableBean<Integer>((Integer)3), new MyGenericSerializableBean<Integer>((Integer)5)} }, //
8691
{ "myGenericParcelableBean", new MyGenericParcelableBean<String>("Plop !")}, //
8792
{ "myGenericParcelableBeanArray", new MyGenericParcelableBean[] {new MyGenericParcelableBean<Integer>((Integer)3), new MyGenericParcelableBean<Integer>((Integer)5)} }, //
93+
{ "myParcelableBeanArrayList", Lists.newArrayList(new MyParcelableBean(1), new MyParcelableBean(2), new MyParcelableBean(3)) }, //
94+
{ "myGenericParcelableBeanArrayList", myGenericParcelableBeanArrayList }, //
95+
{ "mySerializableBeanArrayList", Lists.newArrayList(new MySerializableBean(1), new MySerializableBean(2), new MySerializableBean(3)) }, //
8896
{ "nullWrappedLong", null }, //
8997
};
9098
return Arrays.asList(testCases);

‎AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/instancestate/SaveInstanceStateActivity.java‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,5 +167,14 @@ public class SaveInstanceStateActivity extends Activity {
167167

168168
@InstanceState
169169
MyGenericParcelableBean<Integer>[] myGenericParcelableBeanArray;
170+
171+
@InstanceState
172+
ArrayList<MyParcelableBean> myParcelableBeanArrayList;
173+
174+
@InstanceState
175+
ArrayList<MyGenericParcelableBean<Integer>> myGenericParcelableBeanArrayList;
176+
177+
@InstanceState
178+
ArrayList<MySerializableBean> mySerializableBeanArrayList;
170179

171180
}

0 commit comments

Comments
 (0)