diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/AfterPreferences.java b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/AfterPreferences.java index 539bdbe156..7e1e96d64d 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/AfterPreferences.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/AfterPreferences.java @@ -31,6 +31,13 @@ * an {@link AfterPreferences} annotated method. *
*
+ * This annotation only can be used inside
+ * {@link org.androidannotations.annotations.EActivity EActivity} or
+ * {@link org.androidannotations.annotations.EFragment EFragment} annotated
+ * class, which is a subclass of {@link android.preference.PreferenceActivity
+ * PreferenceActivity} or PreferenceFragment(Compat), respectively.
+ *
* The method MUST have zero parameters. *
*diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceByKey.java b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceByKey.java index 8655377409..bfff1e82a6 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceByKey.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceByKey.java @@ -23,11 +23,13 @@ /** *
* Use it on a {@link android.preference.Preference Preference} or
- * {@link android.preference.Preference Preference} subtype fields in a
+ * {@link android.preference.Preference Preference} subtype or
+ * android.support.v7.preference.Preference or
+ * android.support.v7.preference.Preference subtype fields in a
* {@link org.androidannotations.annotations.EActivity EActivity} or
* {@link org.androidannotations.annotations.EFragment EFragment} annotated
* class, which is a subclass of {@link android.preference.PreferenceActivity
- * PreferenceActivity} or PreferenceFragment, respectively.
+ * PreferenceActivity} or PreferenceFragment(Compat), respectively.
*
* The annotation value should be an array of R.string.* fields. diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceChange.java b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceChange.java index 435fce96aa..63b0512575 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceChange.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceChange.java @@ -24,31 +24,37 @@ *
* This annotation is intended to be used on methods to receive events defined
* by
- * {@link android.preference.Preference.OnPreferenceChangeListener#onPreferenceChange(android.preference.Preference, Object)
- * OnPreferenceChangeListener#onPreferenceChange} when the value of a
- * {@link android.preference.Preference Preference} has been changed by the user
- * and is about to be set and/or persisted.
+ * OnPreferenceChangeListener#onPreferenceChange(Preference, Object)
+ * when the value of a Preference has been changed by the user and
+ * is about to be set and/or persisted.
*
* The annotation value should be one or several R.string.* fields that refers
* to {@link android.preference.Preference Preference} or subclasses of
- * {@link android.preference.Preference Preference}. If not set, the method name
- * will be used as the R.string.* field name.
+ * {@link android.preference.Preference Preference} or
+ * android.support.v7.preference.Preference or subclasses of
+ * android.support.v7.preference.Preference. If not set, the method
+ * name will be used as the R.string.* field name. This annotation only can be
+ * used inside {@link org.androidannotations.annotations.EActivity EActivity} or
+ * {@link org.androidannotations.annotations.EFragment EFragment} annotated
+ * class, which is a subclass of {@link android.preference.PreferenceActivity
+ * PreferenceActivity} or PreferenceFragment(Compat), respectively.
*
* The method MAY have multiple parameter: *
*android.support.v7.preference.Preference (or a subclass)
* parameter to know which preference was targeted by this eventnewValue parameter coming from the
- * {@link android.preference.Preference Preference} is a {@link String}, so we
- * parse it to a number object (Android {@link android.preference.Preference
- * Preference} classes use {@link String}s instead of number objects).Preference. Please note with number types, we assume that the
+ * newValue parameter coming from the Preference is a
+ * {@link String}, so we parse it to a number object (Android
+ * Preference classes use {@link String}s instead of number
+ * objects).
* * diff --git a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceClick.java b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceClick.java index 5c74e50e7a..8d71cc097b 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceClick.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceClick.java @@ -23,11 +23,15 @@ /** ** This annotation is intended to be used on methods to receive events defined - * by - * {@link android.preference.Preference.OnPreferenceClickListener#onPreferenceClick(android.preference.Preference) - * OnPreferenceClickListener#onPreferenceClick} when the - * {@link android.preference.Preference Preference} has been clicked by the - * user. + * by
+ *OnPreferenceClickListener#onPreferenceClick(Preference)when + * thePreferencehas been clicked by the user. + *+ * This annotation only can be used inside + * {@link org.androidannotations.annotations.EActivity EActivity} or + * {@link org.androidannotations.annotations.EFragment EFragment} annotated + * class, which is a subclass of {@link android.preference.PreferenceActivity + * PreferenceActivity} or
*PreferenceFragment(Compat), respectively. ** The annotation value should be one or several of R.string.* fields. If not @@ -37,7 +41,8 @@ * The method MAY have one parameter: *
*- *
*- A {@link android.preference.Preference Preference} (or a subclass) + *
- A {@link android.preference.Preference Preference} (or a subclass) or + *
*android.support.v7.preference.Preference(or a subclass) * parameter to know which preference has been clickeddiff --git a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceScreen.java b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceScreen.java index 510e88d433..017e956630 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceScreen.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceScreen.java @@ -25,8 +25,10 @@ * Should be used on {@link org.androidannotations.annotations.EActivity * EActivity} or {@link org.androidannotations.annotations.EFragment EFragment} * classes which are subclass of {@link android.preference.PreferenceActivity - * PreferenceActivity} orPreferenceFragment, to inject the - * preference screen from resource. + * PreferenceActivity} orPreferenceFragmentor + *android.support.v7.preference.PreferenceFragmentCompator + *android.support.v14.PreferenceFragment, to inject the preference + * screen from resource. * ** The annotation value should be one of R.xml.* fields. diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java index 5ac9290b79..c6f13b15b3 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/CanonicalNameConstants.java @@ -114,12 +114,17 @@ public final class CanonicalNameConstants { public static final String PREFERENCE_ACTIVITY = "android.preference.PreferenceActivity"; public static final String PREFERENCE_FRAGMENT = "android.preference.PreferenceFragment"; public static final String SUPPORT_V4_PREFERENCE_FRAGMENT = "android.support.v4.preference.PreferenceFragment"; + public static final String SUPPORT_V7_PREFERENCE_FRAGMENTCOMPAT = "android.support.v7.preference.PreferenceFragmentCompat"; + public static final String SUPPORT_V14_PREFERENCE_FRAGMENT = "android.support.v14.preference.PreferenceFragment"; public static final String MACHINARIUS_V4_PREFERENCE_FRAGMENT = "com.github.machinarius.preferencefragment.PreferenceFragment"; public static final String ACTIVITY_COMPAT = "android.support.v4.app.ActivityCompat"; public static final String CONTEXT_COMPAT = "android.support.v4.content.ContextCompat"; public static final String PREFERENCE = "android.preference.Preference"; + public static final String SUPPORT_V7_PREFERENCE = "android.support.v7.preference.Preference"; public static final String PREFERENCE_CHANGE_LISTENER = "android.preference.Preference.OnPreferenceChangeListener"; + public static final String SUPPORT_V7_PREFERENCE_CHANGE_LISTENER = "android.support.v7.preference.Preference.OnPreferenceChangeListener"; public static final String PREFERENCE_CLICK_LISTENER = "android.preference.Preference.OnPreferenceClickListener"; + public static final String SUPPORT_V7_PREFERENCE_CLICK_LISTENER = "android.support.v7.preference.Preference.OnPreferenceClickListener"; public static final String PREFERENCE_ACTIVITY_HEADER = "android.preference.PreferenceActivity.Header"; public static final String APP_WIDGET_MANAGER = "android.appwidget.AppWidgetManager"; diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java index 23279c21c9..d07f49b38a 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorHelper.java @@ -69,7 +69,8 @@ public class ValidatorHelper { private static final Collection
VALID_LOG_LEVELS = Arrays.asList(LOG_VERBOSE, LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR); private static final List VALID_PREFERENCE_CLASSES = asList(CanonicalNameConstants.PREFERENCE_ACTIVITY, CanonicalNameConstants.PREFERENCE_FRAGMENT, - CanonicalNameConstants.SUPPORT_V4_PREFERENCE_FRAGMENT, CanonicalNameConstants.MACHINARIUS_V4_PREFERENCE_FRAGMENT); + CanonicalNameConstants.SUPPORT_V4_PREFERENCE_FRAGMENT, CanonicalNameConstants.MACHINARIUS_V4_PREFERENCE_FRAGMENT, CanonicalNameConstants.SUPPORT_V7_PREFERENCE_FRAGMENTCOMPAT, + CanonicalNameConstants.SUPPORT_V14_PREFERENCE_FRAGMENT); protected final TargetAnnotationHelper annotationHelper; @@ -407,7 +408,7 @@ public void extendsListOfView(Element element, ElementValidation valid) { } public void extendsPreference(Element element, ElementValidation validation) { - extendsType(element, CanonicalNameConstants.PREFERENCE, validation); + extendsOneOfTypes(element, asList(CanonicalNameConstants.PREFERENCE, CanonicalNameConstants.SUPPORT_V7_PREFERENCE), validation); } public void extendsOneOfTypes(Element element, List typeQualifiedNames, ElementValidation valid) { diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorParameterHelper.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorParameterHelper.java index cc117ddb33..dd0baf8344 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorParameterHelper.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/helper/ValidatorParameterHelper.java @@ -119,6 +119,10 @@ public V extendsType(String qualifiedName) { return param(new ExtendsTypeParameterRequirement(qualifiedName)); } + public V extendsAnyOfTypes(String... types) { + return param(new ExtendsAnyOfTypesParameterRequirement(types)); + } + public V anyType() { return extendsType(CanonicalNameConstants.OBJECT); } @@ -361,6 +365,44 @@ protected String description() { } } + public class ExtendsAnyOfTypesParameterRequirement extends BaseParameterRequirement { + + private List types; + + public ExtendsAnyOfTypesParameterRequirement(String... types) { + this.types = Arrays.asList(types); + } + + @Override + public boolean isSatisfied(VariableElement parameter) { + TypeMirror elementType = parameter.asType(); + + for (String type : types) { + TypeElement typeElement = annotationHelper.typeElementFromQualifiedName(type); + if (typeElement != null) { + TypeMirror expectedType = typeElement.asType(); + if (annotationHelper.isSubtype(elementType, expectedType)) { + return true; + } + } + } + + return false; + } + + @Override + protected String description() { + StringBuilder builder = new StringBuilder(); + builder.append("extending one of the following: ["); + for (int i = 0; i < types.size() - 1; ++i) { + builder.append(types.get(i)).append(", "); + } + builder.append(types.get(types.size() - 1)).append(" ]"); + + return builder.toString(); + } + } + public class AnnotatedWithParameterRequirement extends BaseParameterRequirement { private Class extends Annotation> annotationClass; @@ -460,6 +502,10 @@ public OneParamValidator extendsType(String qualifiedName) { return param(new ExtendsTypeParameterRequirement(qualifiedName)); } + public OneParamValidator extendsAnyOfTypes(String... types) { + return param(new ExtendsAnyOfTypesParameterRequirement(types)); + } + public OneParamValidator anyType() { return param(new AnyTypeParameterRequirement()); } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java index f83cec66d6..d31464500c 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EActivityHolder.java @@ -753,6 +753,15 @@ public FoundPreferenceHolder getFoundPreferenceHolder(JFieldRef idRef, JClass pr return preferencesHolder.getFoundPreferenceHolder(idRef, preferenceClass); } + @Override + public boolean usingSupportV7Preference() { + return preferencesHolder.usingSupportV7Preference(); + } + + public JClass getBasePreferenceClass() { + return preferencesHolder.getBasePreferenceClass(); + } + @Override public JBlock getOnBuildHeadersBlock() { return preferencesHolder.getOnBuildHeadersBlock(); diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java index ace04de0e7..ebd3b0fc0e 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/EFragmentHolder.java @@ -565,4 +565,13 @@ public void assignFindPreferenceByKey(JFieldRef idRef, JClass preferenceClass, J public FoundPreferenceHolder getFoundPreferenceHolder(JFieldRef idRef, JClass preferenceClass) { return preferencesDelegate.getFoundPreferenceHolder(idRef, preferenceClass); } + + @Override + public boolean usingSupportV7Preference() { + return preferencesDelegate.usingSupportV7Preference(); + } + + public JClass getBasePreferenceClass() { + return preferencesDelegate.getBasePreferenceClass(); + } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/FoundPreferenceHolder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/FoundPreferenceHolder.java index e762a5f00b..fc86989c5d 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/FoundPreferenceHolder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/FoundPreferenceHolder.java @@ -27,7 +27,9 @@ public FoundPreferenceHolder(GeneratedClassHolder holder, JClass type, JExpressi @Override protected JClass getBaseType() { - return getClasses().PREFERENCE; + HasPreferences hasPreferences = (HasPreferences) getGeneratedClassHolder(); + + return hasPreferences.getBasePreferenceClass(); } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasPreferences.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasPreferences.java index c140307f0a..ba4a812460 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasPreferences.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/HasPreferences.java @@ -28,4 +28,8 @@ public interface HasPreferences extends GeneratedClassHolder { void assignFindPreferenceByKey(JFieldRef idRef, JClass preferenceClass, JFieldRef fieldRef); FoundPreferenceHolder getFoundPreferenceHolder(JFieldRef idRef, JClass preferenceClass); + + boolean usingSupportV7Preference(); + + JClass getBasePreferenceClass(); } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/PreferencesDelegate.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/PreferencesDelegate.java index 8c1799c43e..819528af41 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/PreferencesDelegate.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/holder/PreferencesDelegate.java @@ -20,7 +20,13 @@ import static com.sun.codemodel.JExpr.invoke; import static com.sun.codemodel.JMod.PUBLIC; +import javax.lang.model.element.TypeElement; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.Elements; +import javax.lang.model.util.Types; + import org.androidannotations.helper.APTCodeModelHelper; +import org.androidannotations.helper.CanonicalNameConstants; import com.sun.codemodel.JBlock; import com.sun.codemodel.JClass; @@ -37,9 +43,28 @@ public class PreferencesDelegate extends GeneratedClassHolderDelegate idsRefs = annotationHelper.extractAnnotationFieldRefs(element, getResourceType(), true); - JDefinedClass listenerAnonymousClass = getCodeModel().anonymousClass(getListenerClass()); + JDefinedClass listenerAnonymousClass = getCodeModel().anonymousClass(getListenerClass(holder)); JMethod listenerMethod = createListenerMethod(listenerAnonymousClass); listenerMethod.annotate(Override.class); @@ -108,7 +108,8 @@ protected final JExpression castArgumentIfNecessary(T holder, String baseType, J protected final boolean isTypeOrSubclass(String baseType, Element element) { TypeMirror typeMirror = element.asType(); TypeElement typeElement = annotationHelper.typeElementFromQualifiedName(baseType); - return annotationHelper.isSubtype(typeMirror, typeElement.asType()); + + return typeElement != null && annotationHelper.isSubtype(typeMirror, typeElement.asType()); } protected abstract void assignListeners(T holder, List idsRefs, JDefinedClass listenerAnonymousClass); @@ -121,9 +122,9 @@ protected final boolean isTypeOrSubclass(String baseType, Element element) { protected abstract String getSetterName(); - protected abstract JClass getListenerClass(); + protected abstract JClass getListenerClass(T holder); - protected abstract JClass getListenerTargetClass(); + protected abstract JClass getListenerTargetClass(T holder); protected String getMethodName() { return methodName; diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractPreferenceListenerHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractPreferenceListenerHandler.java index 0f7b3783ea..937271b7ba 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractPreferenceListenerHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractPreferenceListenerHandler.java @@ -48,8 +48,8 @@ public void validate(Element element, ElementValidation valid) { } @Override - protected final JClass getListenerTargetClass() { - return getClasses().PREFERENCE; + protected final JClass getListenerTargetClass(HasPreferences holder) { + return holder.getBasePreferenceClass(); } @Override @@ -60,9 +60,8 @@ protected final Res getResourceType() { @Override protected final void assignListeners(HasPreferences holder, List idsRefs, JDefinedClass listenerAnonymousClass) { for (JFieldRef idRef : idsRefs) { - FoundPreferenceHolder foundPreferenceHolder = holder.getFoundPreferenceHolder(idRef, getListenerTargetClass()); + FoundPreferenceHolder foundPreferenceHolder = holder.getFoundPreferenceHolder(idRef, getListenerTargetClass(holder)); foundPreferenceHolder.getIfNotNullBlock().invoke(foundPreferenceHolder.getRef(), getSetterName()).arg(_new(listenerAnonymousClass)); } } - } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractViewListenerHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractViewListenerHandler.java index dde10e5260..5d54079025 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractViewListenerHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/AbstractViewListenerHandler.java @@ -50,13 +50,13 @@ public void validate(Element element, ElementValidation valid) { @Override protected final void assignListeners(EComponentWithViewSupportHolder holder, List idsRefs, JDefinedClass listenerAnonymousClass) { for (JFieldRef idRef : idsRefs) { - FoundViewHolder foundViewHolder = holder.getFoundViewHolder(idRef, getListenerTargetClass()); + FoundViewHolder foundViewHolder = holder.getFoundViewHolder(idRef, getListenerTargetClass(holder)); foundViewHolder.getIfNotNullBlock().invoke(foundViewHolder.getRef(), getSetterName()).arg(_new(listenerAnonymousClass)); } } @Override - protected JClass getListenerTargetClass() { + protected JClass getListenerTargetClass(EComponentWithViewSupportHolder holder) { return getClasses().VIEW; } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/CheckedChangeHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/CheckedChangeHandler.java index a3fe31ca1a..3b733d6ed1 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/CheckedChangeHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/CheckedChangeHandler.java @@ -87,12 +87,12 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { + protected JClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().COMPOUND_BUTTON_ON_CHECKED_CHANGE_LISTENER; } @Override - protected JClass getListenerTargetClass() { + protected JClass getListenerTargetClass(EComponentWithViewSupportHolder holder) { return getClasses().COMPOUND_BUTTON; } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ClickHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ClickHandler.java index 15f8c1f389..c68cea6d2b 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ClickHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ClickHandler.java @@ -80,7 +80,7 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { + protected JClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().VIEW_ON_CLICK_LISTENER; } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/EditorActionHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/EditorActionHandler.java index 59c922f4cf..3b58c16567 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/EditorActionHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/EditorActionHandler.java @@ -100,12 +100,12 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { + protected JClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().TEXT_VIEW_ON_EDITOR_ACTION_LISTENER; } @Override - protected JClass getListenerTargetClass() { + protected JClass getListenerTargetClass(EComponentWithViewSupportHolder holder) { return getClasses().TEXT_VIEW; } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/FocusChangeHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/FocusChangeHandler.java index d270252fbb..f526599dc3 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/FocusChangeHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/FocusChangeHandler.java @@ -88,7 +88,7 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { + protected JClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().VIEW_ON_FOCUS_CHANGE_LISTENER; } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemClickHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemClickHandler.java index fc1f0aba5b..61e078d098 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemClickHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemClickHandler.java @@ -99,12 +99,12 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { + protected JClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().ON_ITEM_CLICK_LISTENER; } @Override - protected JClass getListenerTargetClass() { + protected JClass getListenerTargetClass(EComponentWithViewSupportHolder holder) { return getClasses().ADAPTER_VIEW.narrow(getCodeModel().wildcard()); } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemLongClickHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemLongClickHandler.java index 8666a871c9..0e355551c2 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemLongClickHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemLongClickHandler.java @@ -106,12 +106,12 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { + protected JClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().ON_ITEM_LONG_CLICK_LISTENER; } @Override - protected JClass getListenerTargetClass() { + protected JClass getListenerTargetClass(EComponentWithViewSupportHolder holder) { return getClasses().ADAPTER_VIEW.narrow(getCodeModel().wildcard()); } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemSelectHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemSelectHandler.java index 4ce09e8091..0308e73a4e 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemSelectHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/ItemSelectHandler.java @@ -125,12 +125,12 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { + protected JClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().ON_ITEM_SELECTED_LISTENER; } @Override - protected JClass getListenerTargetClass() { + protected JClass getListenerTargetClass(EComponentWithViewSupportHolder holder) { return getClasses().ADAPTER_VIEW.narrow(getCodeModel().wildcard()); } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/LongClickHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/LongClickHandler.java index f6a92f251a..ab599e1e60 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/LongClickHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/LongClickHandler.java @@ -86,7 +86,7 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { + protected JClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().VIEW_ON_LONG_CLICK_LISTENER; } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceChangeHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceChangeHandler.java index f193d74066..38f6343f28 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceChangeHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceChangeHandler.java @@ -56,7 +56,7 @@ public void validate(Element element, ElementValidation valid) { validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); validatorHelper.param.anyOrder() // - .extendsType(CanonicalNameConstants.PREFERENCE).optional() // + .extendsAnyOfTypes(CanonicalNameConstants.PREFERENCE, CanonicalNameConstants.SUPPORT_V7_PREFERENCE).optional() // .anyOfTypes(CanonicalNameConstants.OBJECT, CanonicalNameConstants.STRING_SET, CanonicalNameConstants.STRING, // CanonicalNameConstants.BOOLEAN, boolean.class.getName(), // CanonicalNameConstants.INTEGER, int.class.getName(), // @@ -78,13 +78,16 @@ protected void makeCall(JBlock listenerMethodBody, JInvocation call, TypeMirror @Override protected void processParameters(HasPreferences holder, JMethod listenerMethod, JInvocation call, List extends VariableElement> userParameters) { - JVar preferenceParam = listenerMethod.param(getClasses().PREFERENCE, "preference"); + JVar preferenceParam = listenerMethod.param(holder.getBasePreferenceClass(), "preference"); + JVar newValueParam = listenerMethod.param(getClasses().OBJECT, "newValue"); for (VariableElement variableElement : userParameters) { String type = variableElement.asType().toString(); if (isTypeOrSubclass(CanonicalNameConstants.PREFERENCE, variableElement)) { call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.PREFERENCE, preferenceParam, variableElement)); + } else if (isTypeOrSubclass(CanonicalNameConstants.SUPPORT_V7_PREFERENCE, variableElement)) { + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.SUPPORT_V7_PREFERENCE, preferenceParam, variableElement)); } else if (type.equals(CanonicalNameConstants.OBJECT)) { call.arg(newValueParam); } else if (type.equals(CanonicalNameConstants.INTEGER) || type.equals(int.class.getName()) || // @@ -114,7 +117,7 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { - return getClasses().PREFERENCE_CHANGE_LISTENER; + protected JClass getListenerClass(HasPreferences holder) { + return holder.usingSupportV7Preference() ? getClasses().SUPPORT_V7_PREFERENCE_CHANGE_LISTENER : getClasses().PREFERENCE_CHANGE_LISTENER; } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceClickHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceClickHandler.java index 3720063c88..bc43fec198 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceClickHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/PreferenceClickHandler.java @@ -54,7 +54,7 @@ public void validate(Element element, ElementValidation valid) { validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); validatorHelper.param // - .extendsType(CanonicalNameConstants.PREFERENCE).optional() // + .extendsAnyOfTypes(CanonicalNameConstants.PREFERENCE, CanonicalNameConstants.SUPPORT_V7_PREFERENCE).optional() // .validate(executableElement, valid); } @@ -71,10 +71,12 @@ protected void makeCall(JBlock listenerMethodBody, JInvocation call, TypeMirror @Override protected void processParameters(HasPreferences holder, JMethod listenerMethod, JInvocation call, List extends VariableElement> userParameters) { - JVar preferenceParam = listenerMethod.param(getClasses().PREFERENCE, "preference"); + String preferenceClassName = holder.getBasePreferenceClass().fullName(); + + JVar preferenceParam = listenerMethod.param(getEnvironment().getJClass(preferenceClassName), "preference"); if (userParameters.size() == 1) { - call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.PREFERENCE, preferenceParam, userParameters.get(0))); + call.arg(castArgumentIfNecessary(holder, preferenceClassName, preferenceParam, userParameters.get(0))); } } @@ -89,8 +91,8 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { - return getClasses().PREFERENCE_CLICK_LISTENER; + protected JClass getListenerClass(HasPreferences holder) { + return holder.usingSupportV7Preference() ? getClasses().SUPPORT_V7_PREFERENCE_CLICK_LISTENER : getClasses().PREFERENCE_CLICK_LISTENER; } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/TouchHandler.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/TouchHandler.java index aa12efb8e9..4deafd236e 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/TouchHandler.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/core/handler/TouchHandler.java @@ -97,7 +97,7 @@ protected String getSetterName() { } @Override - protected JClass getListenerClass() { + protected JClass getListenerClass(EComponentWithViewSupportHolder holder) { return getClasses().VIEW_ON_TOUCH_LISTENER; } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/process/ProcessHolder.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/process/ProcessHolder.java index 72ef95fabd..d17b8e1a03 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/process/ProcessHolder.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/main/java/org/androidannotations/internal/process/ProcessHolder.java @@ -125,8 +125,11 @@ public class Classes { public final JClass APP_WIDGET_MANAGER = refClass(CanonicalNameConstants.APP_WIDGET_MANAGER); public final JClass PREFERENCE = refClass(CanonicalNameConstants.PREFERENCE); + public final JClass SUPPORT_V7_PREFERENCE = refClass(CanonicalNameConstants.SUPPORT_V7_PREFERENCE); public final JClass PREFERENCE_CHANGE_LISTENER = refClass(CanonicalNameConstants.PREFERENCE_CHANGE_LISTENER); + public final JClass SUPPORT_V7_PREFERENCE_CHANGE_LISTENER = refClass(CanonicalNameConstants.SUPPORT_V7_PREFERENCE_CHANGE_LISTENER); public final JClass PREFERENCE_CLICK_LISTENER = refClass(CanonicalNameConstants.PREFERENCE_CLICK_LISTENER); + public final JClass SUPPORT_V7_PREFERENCE_CLICK_LISTENER = refClass(CanonicalNameConstants.SUPPORT_V7_PREFERENCE_CLICK_LISTENER); public final JClass PREFERENCE_ACTIVITY_HEADER = refClass(CanonicalNameConstants.PREFERENCE_ACTIVITY_HEADER); /* diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/android/support/v7/preference/Preference.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/android/support/v7/preference/Preference.java new file mode 100644 index 0000000000..74a0643ac1 --- /dev/null +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/android/support/v7/preference/Preference.java @@ -0,0 +1,34 @@ +/** + * Copyright (C) 2010-2015 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package android.support.v7.preference; + +public class Preference { + + public interface OnPreferenceChangeListener { + boolean onPreferenceChange(Preference preference, java.lang.Object newValue); + } + + public interface OnPreferenceClickListener { + boolean onPreferenceClick(Preference preference); + } + + public void setOnPreferenceChangeListener(OnPreferenceChangeListener onPreferenceChangeListener) { + } + + public void setOnPreferenceClickListener(OnPreferenceClickListener onPreferenceClickListener) { + } + +} diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/android/support/v7/preference/PreferenceFragmentCompat.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/android/support/v7/preference/PreferenceFragmentCompat.java new file mode 100644 index 0000000000..9d6a072762 --- /dev/null +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/android/support/v7/preference/PreferenceFragmentCompat.java @@ -0,0 +1,27 @@ +/** + * Copyright (C) 2010-2015 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package android.support.v7.preference; + +public class PreferenceFragmentCompat extends android.app.Fragment { + + public void addPreferencesFromResource(int preferencesResId) { + + } + + public Preference findPreference(CharSequence key) { + return null; + } +} diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/android/support/v7/preference/SwitchPreference.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/android/support/v7/preference/SwitchPreference.java new file mode 100644 index 0000000000..ddc8cd9664 --- /dev/null +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/android/support/v7/preference/SwitchPreference.java @@ -0,0 +1,19 @@ +/** + * Copyright (C) 2010-2015 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package android.support.v7.preference; + +public class SwitchPreference extends Preference { +} diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/PreferenceFragmentTest.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/PreferenceFragmentTest.java index f98e61d84f..e43da8dd00 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/PreferenceFragmentTest.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/PreferenceFragmentTest.java @@ -43,4 +43,9 @@ public void machinariusPreferenceFragmentCompiles() { assertCompilationSuccessful(compileFiles(MachinariusSettingsFragment.class)); } + @Test + public void supportV7PreferenceFragmentCompiles() { + assertCompilationSuccessful(compileFiles(SupportV7SettingsFragment.class)); + } + } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/R.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/R.java index d8eeaf40b2..78b290527f 100644 --- a/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/R.java +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/R.java @@ -4,4 +4,8 @@ public class R { public static final class xml { public static final int preferences = 0x7f06000a; } + + public static final class string { + public static final int myKey = 0x7f06000b; + } } diff --git a/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/SupportV7SettingsFragment.java b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/SupportV7SettingsFragment.java new file mode 100644 index 0000000000..a16ddc52b5 --- /dev/null +++ b/AndroidAnnotations/androidannotations-core/androidannotations/src/test/java/org/androidannotations/preference/SupportV7SettingsFragment.java @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2010-2015 eBusiness Information, Excilys Group + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed To in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package org.androidannotations.preference; + +import org.androidannotations.annotations.EFragment; +import org.androidannotations.annotations.PreferenceByKey; +import org.androidannotations.annotations.PreferenceChange; +import org.androidannotations.annotations.PreferenceClick; +import org.androidannotations.annotations.PreferenceScreen; + +import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceFragmentCompat; +import android.support.v7.preference.SwitchPreference; + +@PreferenceScreen(R.xml.preferences) +@EFragment +public class SupportV7SettingsFragment extends PreferenceFragmentCompat { + + @PreferenceByKey(R.string.myKey) + SwitchPreference pref; + + @PreferenceByKey(R.string.myKey) + Preference pref2; + + @PreferenceChange(R.string.myKey) + void prefChanged(Preference pref) { + + } + + @PreferenceClick(R.string.myKey) + void prefClicked(SwitchPreference pref) { + + } +}