From 7a82b96d127f64ec380144120a5fbb5658132261 Mon Sep 17 00:00:00 2001
From: Kay-Uwe Janssen
Date: Sun, 15 Nov 2015 09:11:14 +0100
Subject: [PATCH 1/4] support string arrays for @DefaultRes in shared
preference interfaces
---
.../internal/core/handler/SharedPrefHandler.java | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/SharedPrefHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/SharedPrefHandler.java
index 3f3ad8c527..b105340f4b 100644
--- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/SharedPrefHandler.java
+++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/SharedPrefHandler.java
@@ -96,7 +96,7 @@ private static final class DefaultPrefInfo {
put("int", new DefaultPrefInfo<>(DefaultInt.class, IntPrefField.class, IRClass.Res.INTEGER, 0, "intField"));
put("long", new DefaultPrefInfo<>(DefaultLong.class, LongPrefField.class, IRClass.Res.INTEGER, 0L, "longField"));
put(CanonicalNameConstants.STRING, new DefaultPrefInfo<>(DefaultString.class, StringPrefField.class, IRClass.Res.STRING, "", "stringField"));
- put(CanonicalNameConstants.STRING_SET, new DefaultPrefInfo>(DefaultStringSet.class, StringSetPrefField.class, null, null, "stringSetField"));
+ put(CanonicalNameConstants.STRING_SET, new DefaultPrefInfo>(DefaultStringSet.class, StringSetPrefField.class, IRClass.Res.ARRAY, null, "stringSetField"));
}
};
@@ -322,10 +322,21 @@ private IJExpression extractResValue(SharedPrefHolder holder, Element method, IR
case STRING:
resourceGetMethodName = "getString";
break;
+ case ARRAY:
+ resourceGetMethodName = "getStringArray";
+ break;
default:
break;
}
- return holder.getContextField().invoke("getResources").invoke(resourceGetMethodName).arg(idRef);
+
+ JInvocation resourceInvocation = holder.getContextField().invoke("getResources").invoke(resourceGetMethodName).arg(idRef);
+
+ if (IRClass.Res.ARRAY.equals(res)) {
+ JInvocation asList = getClasses().ARRAYS.staticInvoke("asList");
+ JInvocation newHashMap = JExpr._new(getClasses().HASH_SET.narrow(getClasses().STRING));
+ resourceInvocation = newHashMap.arg(asList.arg(resourceInvocation));
+ }
+ return resourceInvocation;
}
private IJExpression newEmptyStringHashSet() {
From 3cd2e0f7c2e67361c230882b1332a4042649a7d8 Mon Sep 17 00:00:00 2001
From: Kay-Uwe Janssen
Date: Sun, 15 Nov 2015 09:12:12 +0100
Subject: [PATCH 2/4] add test for string array support in DefaultRes
---
.../java/org/androidannotations/test/prefs/SomePrefs.java | 4 ++++
.../androidannotations/test/prefs/PrefsActivityTest.java | 8 ++++++++
2 files changed, 12 insertions(+)
diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/prefs/SomePrefs.java b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/prefs/SomePrefs.java
index 71f38ad3eb..cda1ec9823 100644
--- a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/prefs/SomePrefs.java
+++ b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/main/java/org/androidannotations/test/prefs/SomePrefs.java
@@ -21,6 +21,7 @@
import org.androidannotations.annotations.sharedpreferences.DefaultFloat;
import org.androidannotations.annotations.sharedpreferences.DefaultInt;
import org.androidannotations.annotations.sharedpreferences.DefaultLong;
+import org.androidannotations.annotations.sharedpreferences.DefaultRes;
import org.androidannotations.annotations.sharedpreferences.DefaultString;
import org.androidannotations.annotations.sharedpreferences.DefaultStringSet;
import org.androidannotations.annotations.sharedpreferences.SharedPref;
@@ -60,4 +61,7 @@ public interface SomePrefs {
@DefaultStringSet({})
Set emtpyStringSet();
+
+ @DefaultRes(R.array.planets_array)
+ Set planetsStringSet();
}
diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/prefs/PrefsActivityTest.java b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/prefs/PrefsActivityTest.java
index 01488cc123..d0b206b6fc 100644
--- a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/prefs/PrefsActivityTest.java
+++ b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/prefs/PrefsActivityTest.java
@@ -238,4 +238,12 @@ public void getStringSetEmptySetDefaultValue() {
assertThat(somePrefs.types().get()).isEmpty();
}
+
+ @Test
+ public void getStringSetWithDefaultRes() {
+ sharedPref.edit().clear().commit();
+
+ assertThat(somePrefs.planetsStringSet().get().size()).isEqualTo(8);
+ assertThat(somePrefs.planetsStringSet().get()).contains("Earth");
+ }
}
From 8cf148901ab0134ebfad04e0697cbcfc8cf6d59d Mon Sep 17 00:00:00 2001
From: Kay-Uwe Janssen
Date: Sun, 15 Nov 2015 09:12:53 +0100
Subject: [PATCH 3/4] add missing test for empty string sets using empty braces
---
.../androidannotations/test/prefs/PrefsActivityTest.java | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/prefs/PrefsActivityTest.java b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/prefs/PrefsActivityTest.java
index d0b206b6fc..143cfb0370 100644
--- a/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/prefs/PrefsActivityTest.java
+++ b/AndroidAnnotations/androidannotations-core/androidannotations-test/src/test/java/org/androidannotations/test/prefs/PrefsActivityTest.java
@@ -239,6 +239,13 @@ public void getStringSetEmptySetDefaultValue() {
assertThat(somePrefs.types().get()).isEmpty();
}
+ @Test
+ public void getStringSetEmptyWithDefaultValue() {
+ sharedPref.edit().clear().commit();
+
+ assertThat(somePrefs.emtpyStringSet().get()).isEmpty();
+ }
+
@Test
public void getStringSetWithDefaultRes() {
sharedPref.edit().clear().commit();
From 2d5ee0830183a08d734d3b8225fc707f458662d3 Mon Sep 17 00:00:00 2001
From: Kay-Uwe Janssen
Date: Sun, 15 Nov 2015 09:30:32 +0100
Subject: [PATCH 4/4] add return type to resource type mapping to @DefaultRes
javadoc
---
.../sharedpreferences/DefaultRes.java | 30 +++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences/DefaultRes.java b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences/DefaultRes.java
index db7f8ce6b1..a51b56885f 100644
--- a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences/DefaultRes.java
+++ b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/sharedpreferences/DefaultRes.java
@@ -31,6 +31,36 @@
* The annotation value must be one of R.* fields. If the value is not set, the
* method name will be used as the R.* field name.
*
+ *
+ *
+ * | Return Type |
+ * Resource Type |
+ *
+ *
+ * | String |
+ * R.string.* |
+ *
+ *
+ * | int |
+ * R.integer.* |
+ *
+ *
+ * | long |
+ * R.integer.* |
+ *
+ *
+ * | float |
+ * R.integer.* |
+ *
+ *
+ * | boolean |
+ * R.bool.* |
+ *
+ *
+ * | Set<String> |
+ * R.array.* |
+ *
+ *
*
* The key of the preference will be the method name by default. This can be
* overridden by specifying a string resource with the {@link #keyRes()}