Skip to content

Commit 9f6a665

Browse files
committed
allow Preference subclasses as parameter for @PreferenceChange and @PreferenceClick
1 parent 1ae4956 commit 9f6a665

4 files changed

Lines changed: 19 additions & 10 deletions

File tree

‎AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceChange.java‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
* The method MAY have multiple parameter:
4040
* </p>
4141
* <ul>
42-
* <li>A {@link android.preference.Preference Preference} parameter to know
43-
* which preference was targeted by this event</li>
42+
* <li>A {@link android.preference.Preference Preference} (or a sublcass)
43+
* parameter to know which preference was targeted by this event</li>
4444
* <li>An {@link Object}, {@link String}, {@link java.util.Set Set of strings}
4545
* and also a {@link Boolean}, {@link Float}, {@link Integer}, {@link Long} or
4646
* their corresponding primitive types to obtain the new value of the
@@ -65,6 +65,11 @@
6565
* // Something Here
6666
* }
6767
*
68+
* &#064;PreferenceChange
69+
* void <b>myPref</b>PreferenceChanged(ListPreference preference) {
70+
* // Something Here
71+
* }
72+
*
6873
* &#064;PreferenceChange(<b>{R.string.myPref1, R.string.myPref2}</b>)
6974
* void preferenceChangeOnMultiplePrefs(Preference preference, String newValue) {
7075
* // Something Here

‎AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceClick.java‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
* The method MAY have one parameter:
3838
* </p>
3939
* <ul>
40-
* <li>A {@link android.preference.Preference Preference} parameter to know
41-
* which preference has been clicked</li>
40+
* <li>A {@link android.preference.Preference Preference} (or a subclass)
41+
* parameter to know which preference has been clicked</li>
4242
* </ul>
4343
* <blockquote>
4444
*
@@ -54,6 +54,11 @@
5454
* void <b>myPref</b>PreferenceClicked(Preference preference) {
5555
* // Something Here
5656
* }
57+
*
58+
* &#064;PreferenceClick
59+
* void <b>myPref</b>PreferenceClicked(ListPreference preference) {
60+
* // Something Here
61+
* }
5762
* </pre>
5863
*
5964
* </blockquote>

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceChangeHandler.java‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa
5959
validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid);
6060

6161
validatorHelper.param.anyOrder() //
62-
.type(CanonicalNameConstants.PREFERENCE).optional() //
62+
.extendsType(CanonicalNameConstants.PREFERENCE).optional() //
6363
.anyOfTypes(CanonicalNameConstants.OBJECT, CanonicalNameConstants.STRING_SET, CanonicalNameConstants.STRING, //
6464
CanonicalNameConstants.BOOLEAN, boolean.class.getName(), //
6565
CanonicalNameConstants.INTEGER, int.class.getName(), //
@@ -86,9 +86,8 @@ protected void processParameters(HasPreferences holder, JMethod listenerMethod,
8686

8787
for (VariableElement variableElement : userParameters) {
8888
String type = variableElement.asType().toString();
89-
90-
if (type.equals(CanonicalNameConstants.PREFERENCE)) {
91-
call.arg(preferenceParam);
89+
if (isTypeOrSubclass(CanonicalNameConstants.PREFERENCE, variableElement)) {
90+
call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.PREFERENCE, preferenceParam, variableElement));
9291
} else if (type.equals(CanonicalNameConstants.OBJECT)) {
9392
call.arg(newValueParam);
9493
} else if (type.equals(CanonicalNameConstants.INTEGER) || type.equals(int.class.getName()) || //

‎AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceClickHandler.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa
5555
validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid);
5656

5757
validatorHelper.param //
58-
.type(CanonicalNameConstants.PREFERENCE).optional() //
58+
.extendsType(CanonicalNameConstants.PREFERENCE).optional() //
5959
.validate(executableElement, valid);
6060
}
6161

@@ -75,7 +75,7 @@ protected void processParameters(HasPreferences holder, JMethod listenerMethod,
7575
JVar preferenceParam = listenerMethod.param(classes().PREFERENCE, "preference");
7676

7777
if (userParameters.size() == 1) {
78-
call.arg(preferenceParam);
78+
call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.PREFERENCE, preferenceParam, userParameters.get(0)));
7979
}
8080
}
8181

0 commit comments

Comments
 (0)