diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/CheckedChange.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/CheckedChange.java index 7aa88dd79d..00c4716ca7 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/CheckedChange.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/CheckedChange.java @@ -37,8 +37,8 @@ * The method MAY have multiple parameter: *
*@@ -56,6 +56,11 @@ * // Something Here * } * + * @CheckedChange + * void myButtonCheckedChanged(CheckBox button) { + * // Something Here + * } + * * @CheckedChange({R.id.myButton, R.id.myButton1}) * void checkedChangedOnSomeButtons(CompoundButton button, boolean isChecked) { * // Something Here diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/Click.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/Click.java index 4ab6c7e10a..bdf7efdfe5 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/Click.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/Click.java @@ -34,8 +34,8 @@ * The method MAY have one parameter: * *- *
*- A {@link android.view.View} parameter to know which view has been clicked - *
+ *- A {@link android.view.View} (or a subclass) parameter to know which view + * has been clicked
** @@ -51,6 +51,11 @@ * void myButtonClicked(View view) { * // Something Here * } + * + * @Click + * void myButtonClicked(Button view) { + * // Something Here + * } * * *diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EditorAction.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EditorAction.java index bf1ddd65c6..32e26d09e7 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EditorAction.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/EditorAction.java @@ -36,8 +36,8 @@ * The method MAY have multiple parameter : * *- *
@@ -63,6 +63,11 @@ * // Something Here * } * + * @EditorAction + * void helloEditTextEditorAction(EditText hello) { + * // Something Here + * } + * * @EditorAction({R.id.editText, R.id.helloTextView}) * void onEditorActionsOnSomeTextViews(TextView tv, int actionId) { * // Something Here diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/FocusChange.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/FocusChange.java index a79ff89291..46f751269c 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/FocusChange.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/FocusChange.java @@ -36,8 +36,8 @@ * The method MAY have multiple parameter: * *- A {@link android.widget.TextView} parameter to know which view has - * targeted this event
+ *- A {@link android.widget.TextView} (or a subclass) parameter to know which + * view has targeted this event
*- An int parameter to get the actionId
*- A {@link android.view.KeyEvent} parameter
*- *
* @@ -56,6 +56,11 @@ * // Something Here * } * + * @FocusChange + * void myTextFocusChanged(EditText button) { + * // Something Here + * } + * * @FocusChange({R.id.myButton, R.id.myButton1}) * void focusChangedOnSomeButtons(View button, boolean isChecked) { * // Something Here diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/LongClick.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/LongClick.java index 8275378b9e..101363e248 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/LongClick.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/LongClick.java @@ -40,8 +40,8 @@ * The method MAY have one parameter: * *- A {@link android.view.View} parameter to know which view has targeted - * this event
+ *- A {@link android.view.View} (or a subclass) parameter to know which view + * has targeted this event
*- An {@link boolean} to know the view has focus.
*- *
* *- A {@link android.view.View} parameter to know which view has been long - * clicked
+ *- A {@link android.view.View} (or a subclass) parameter to know which view + * has been long clicked
*@@ -59,6 +59,11 @@ * // Something Here * } * + * @LongClick + * void myButtonLongClicked(Button view) { + * // Something Here + * } + * * @LongClick(R.id.myButton) * boolean longClickConsumedOnMyButton(View view) { * return true; diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceChange.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceChange.java index 4a6c41679e..435fce96aa 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceChange.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceChange.java @@ -39,8 +39,8 @@ * The method MAY have multiple parameter: * *- *
- A {@link android.preference.Preference Preference} parameter to know - * which preference was targeted by this event
+ *- A {@link android.preference.Preference Preference} (or a sublcass) + * parameter to know which preference was targeted by this event
*- An {@link Object}, {@link String}, {@link java.util.Set Set of strings} * and also a {@link Boolean}, {@link Float}, {@link Integer}, {@link Long} or * their corresponding primitive types to obtain the new value of the @@ -65,6 +65,11 @@ * // Something Here * } * + * @PreferenceChange + * void myPrefPreferenceChanged(ListPreference preference) { + * // Something Here + * } + * * @PreferenceChange({R.string.myPref1, R.string.myPref2}) * void preferenceChangeOnMultiplePrefs(Preference preference, String newValue) { * // Something Here diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceClick.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceClick.java index e81e79a2d7..5c74e50e7a 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceClick.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/PreferenceClick.java @@ -37,8 +37,8 @@ * The method MAY have one parameter: * *
- *
*- A {@link android.preference.Preference Preference} parameter to know - * which preference has been clicked
+ *- A {@link android.preference.Preference Preference} (or a subclass) + * parameter to know which preference has been clicked
** @@ -54,6 +54,11 @@ * void myPrefPreferenceClicked(Preference preference) { * // Something Here * } + * + * @PreferenceClick + * void myPrefPreferenceClicked(ListPreference preference) { + * // Something Here + * } * * *diff --git a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/Touch.java b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/Touch.java index c9bc8f789f..004d2be592 100644 --- a/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/Touch.java +++ b/AndroidAnnotations/androidannotations-api/src/main/java/org/androidannotations/annotations/Touch.java @@ -41,8 +41,8 @@ * The method MAY have one or two parameters: * *- *
*- A {@link android.view.View} parameter to know which view has been clicked - *
+ *- A {@link android.view.View} (or a subclass) parameter to know which view + * has been clicked
*- A {@link android.view.MotionEvent} parameter
*@@ -61,6 +61,11 @@ * } * * @Touch + * void myTextTouched(TextView view) { + * // Something Here + * } + * + * @Touch * void myButtonTouched(View view, MotionEvent motionEvent) { * // Something Here * } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/AbstractListenerHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/AbstractListenerHandler.java index 58a814efbf..95a8ef3da3 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/AbstractListenerHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/AbstractListenerHandler.java @@ -22,9 +22,11 @@ import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.TypeElement; import javax.lang.model.element.VariableElement; import javax.lang.model.type.TypeMirror; +import org.androidannotations.helper.APTCodeModelHelper; import org.androidannotations.helper.AndroidManifest; import org.androidannotations.helper.IdAnnotationHelper; import org.androidannotations.helper.IdValidatorHelper; @@ -37,13 +39,16 @@ import com.sun.codemodel.JBlock; import com.sun.codemodel.JClass; import com.sun.codemodel.JDefinedClass; +import com.sun.codemodel.JExpr; import com.sun.codemodel.JExpression; import com.sun.codemodel.JFieldRef; import com.sun.codemodel.JInvocation; import com.sun.codemodel.JMethod; +import com.sun.codemodel.JVar; public abstract class AbstractListenerHandlerextends BaseAnnotationHandler { + private final APTCodeModelHelper codeModelHelper = new APTCodeModelHelper(); private IdAnnotationHelper helper; private T holder; private String methodName; @@ -100,6 +105,22 @@ public void process(Element element, T holder) { assignListeners(holder, idsRefs, listenerAnonymousClass); } + protected final JExpression castArgumentIfNecessary(T holder, String baseType, JVar param, Element element) { + JExpression argument = param; + TypeMirror typeMirror = element.asType(); + if (!baseType.equals(typeMirror.toString())) { + JClass typeMirrorToJClass = codeModelHelper.typeMirrorToJClass(typeMirror, holder); + argument = JExpr.cast(typeMirrorToJClass, param); + } + return argument; + } + + protected final boolean isTypeOrSubclass(String baseType, Element element) { + TypeMirror typeMirror = element.asType(); + TypeElement typeElement = helper.typeElementFromQualifiedName(baseType); + return helper.isSubtype(typeMirror, typeElement.asType()); + } + protected abstract void assignListeners(T holder, List idsRefs, JDefinedClass listenerAnonymousClass); protected abstract void makeCall(JBlock listenerMethodBody, JInvocation call, TypeMirror returnType); diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/CheckedChangeHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/CheckedChangeHandler.java index 45cfc652c6..66ea9dffe5 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/CheckedChangeHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/CheckedChangeHandler.java @@ -52,7 +52,7 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa validatorHelper.returnTypeIsVoid(executableElement, valid); validatorHelper.param.anyOrder() // - .type(CanonicalNameConstants.COMPOUND_BUTTON).optional() // + .extendsType(CanonicalNameConstants.COMPOUND_BUTTON).optional() // .primitiveOrWrapper(TypeKind.BOOLEAN).optional() // .validate(executableElement, valid); } @@ -69,8 +69,8 @@ protected void processParameters(EComponentWithViewSupportHolder holder, JMethod for (VariableElement parameter : parameters) { String parameterType = parameter.asType().toString(); - if (parameterType.equals(CanonicalNameConstants.COMPOUND_BUTTON)) { - call.arg(btnParam); + if (isTypeOrSubclass(CanonicalNameConstants.COMPOUND_BUTTON, parameter)) { + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.COMPOUND_BUTTON, btnParam, parameter)); } else if (parameterType.equals(CanonicalNameConstants.BOOLEAN) || parameter.asType().getKind() == TypeKind.BOOLEAN) { call.arg(isCheckedParam); } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/ClickHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/ClickHandler.java index bd6f841455..1b5e9d0175 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/ClickHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/ClickHandler.java @@ -66,7 +66,7 @@ protected void processParameters(EComponentWithViewSupportHolder holder, JMethod JVar viewParam = listenerMethod.param(classes().VIEW, "view"); if (hasItemParameter) { - call.arg(viewParam); + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.VIEW, viewParam, parameters.get(0))); } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EditorActionHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EditorActionHandler.java index 06a6392931..02977a8836 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EditorActionHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/EditorActionHandler.java @@ -54,7 +54,7 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); validatorHelper.param.anyOrder() // - .type(CanonicalNameConstants.TEXT_VIEW).optional() // + .extendsType(CanonicalNameConstants.TEXT_VIEW).optional() // .primitiveOrWrapper(TypeKind.INT).optional() // .type(CanonicalNameConstants.KEY_EVENT).optional() // .validate(executableElement, valid); @@ -80,8 +80,8 @@ protected void processParameters(EComponentWithViewSupportHolder holder, JMethod for (VariableElement param : userParameters) { String paramClassQualifiedName = param.asType().toString(); - if (paramClassQualifiedName.equals(CanonicalNameConstants.TEXT_VIEW)) { - call.arg(textView); + if (isTypeOrSubclass(CanonicalNameConstants.TEXT_VIEW, param)) { + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.TEXT_VIEW, textView, param)); } else if (paramClassQualifiedName.equals(CanonicalNameConstants.INTEGER) || paramClassQualifiedName.equals(codeModel().INT.fullName())) { call.arg(actionId); } else if (paramClassQualifiedName.equals(CanonicalNameConstants.KEY_EVENT)) { diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/FocusChangeHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/FocusChangeHandler.java index 3eb9b2f312..d75ff74605 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/FocusChangeHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/FocusChangeHandler.java @@ -53,7 +53,7 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa validatorHelper.returnTypeIsVoid(executableElement, valid); validatorHelper.param.anyOrder() // - .type(CanonicalNameConstants.VIEW).optional() // + .extendsType(CanonicalNameConstants.VIEW).optional() // .primitiveOrWrapper(TypeKind.BOOLEAN).optional() // .validate(executableElement, valid); } @@ -70,8 +70,8 @@ protected void processParameters(EComponentWithViewSupportHolder holder, JMethod for (VariableElement parameter : parameters) { String parameterType = parameter.asType().toString(); - if (parameterType.equals(CanonicalNameConstants.VIEW)) { - call.arg(viewParam); + if (isTypeOrSubclass(CanonicalNameConstants.VIEW, parameter)) { + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.VIEW, viewParam, parameter)); } else if (parameterType.equals(CanonicalNameConstants.BOOLEAN) || parameter.asType().getKind() == TypeKind.BOOLEAN) { call.arg(hasFocusParam); } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/LongClickHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/LongClickHandler.java index 265b3566b2..3d280448e6 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/LongClickHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/LongClickHandler.java @@ -53,7 +53,7 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); - validatorHelper.param.type(CanonicalNameConstants.VIEW).optional().validate(executableElement, valid); + validatorHelper.param.extendsType(CanonicalNameConstants.VIEW).optional().validate(executableElement, valid); } @Override @@ -72,7 +72,7 @@ protected void processParameters(EComponentWithViewSupportHolder holder, JMethod boolean hasViewParameter = parameters.size() == 1; JVar viewParam = listenerMethod.param(classes().VIEW, "view"); if (hasViewParameter) { - call.arg(viewParam); + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.VIEW, viewParam, parameters.get(0))); } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceChangeHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceChangeHandler.java index b37afab6eb..79ba096c78 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceChangeHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceChangeHandler.java @@ -59,7 +59,7 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); validatorHelper.param.anyOrder() // - .type(CanonicalNameConstants.PREFERENCE).optional() // + .extendsType(CanonicalNameConstants.PREFERENCE).optional() // .anyOfTypes(CanonicalNameConstants.OBJECT, CanonicalNameConstants.STRING_SET, CanonicalNameConstants.STRING, // CanonicalNameConstants.BOOLEAN, boolean.class.getName(), // CanonicalNameConstants.INTEGER, int.class.getName(), // @@ -86,9 +86,8 @@ protected void processParameters(HasPreferences holder, JMethod listenerMethod, for (VariableElement variableElement : userParameters) { String type = variableElement.asType().toString(); - - if (type.equals(CanonicalNameConstants.PREFERENCE)) { - call.arg(preferenceParam); + if (isTypeOrSubclass(CanonicalNameConstants.PREFERENCE, variableElement)) { + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.PREFERENCE, preferenceParam, variableElement)); } else if (type.equals(CanonicalNameConstants.OBJECT)) { call.arg(newValueParam); } else if (type.equals(CanonicalNameConstants.INTEGER) || type.equals(int.class.getName()) || // diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceClickHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceClickHandler.java index 61e0ec464e..4b2a0d3cc8 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceClickHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/PreferenceClickHandler.java @@ -55,7 +55,7 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa validatorHelper.returnTypeIsVoidOrBoolean(executableElement, valid); validatorHelper.param // - .type(CanonicalNameConstants.PREFERENCE).optional() // + .extendsType(CanonicalNameConstants.PREFERENCE).optional() // .validate(executableElement, valid); } @@ -75,7 +75,7 @@ protected void processParameters(HasPreferences holder, JMethod listenerMethod, JVar preferenceParam = listenerMethod.param(classes().PREFERENCE, "preference"); if (userParameters.size() == 1) { - call.arg(preferenceParam); + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.PREFERENCE, preferenceParam, userParameters.get(0))); } } diff --git a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/TouchHandler.java b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/TouchHandler.java index ef11351a19..468532ed31 100644 --- a/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/TouchHandler.java +++ b/AndroidAnnotations/androidannotations/src/main/java/org/androidannotations/handler/TouchHandler.java @@ -55,7 +55,7 @@ public void validate(Element element, AnnotationElements validatedElements, IsVa validatorHelper.param.anyOrder() // .type(CanonicalNameConstants.MOTION_EVENT).optional() // - .type(CanonicalNameConstants.VIEW).optional() // + .extendsType(CanonicalNameConstants.VIEW).optional() // .validate(executableElement, valid); } @@ -78,10 +78,11 @@ protected void processParameters(EComponentWithViewSupportHolder holder, JMethod for (VariableElement parameter : parameters) { String parameterType = parameter.asType().toString(); + if (parameterType.equals(CanonicalNameConstants.MOTION_EVENT)) { call.arg(eventParam); - } else if (parameterType.equals(CanonicalNameConstants.VIEW)) { - call.arg(viewParam); + } else if (isTypeOrSubclass(CanonicalNameConstants.VIEW, parameter)) { + call.arg(castArgumentIfNecessary(holder, CanonicalNameConstants.VIEW, viewParam, parameter)); } } } diff --git a/AndroidAnnotations/functional-test-1-5/res/layout/checkable_widgets.xml b/AndroidAnnotations/functional-test-1-5/res/layout/checkable_widgets.xml index 95586df4c7..ca742f8fdf 100644 --- a/AndroidAnnotations/functional-test-1-5/res/layout/checkable_widgets.xml +++ b/AndroidAnnotations/functional-test-1-5/res/layout/checkable_widgets.xml @@ -26,6 +26,11 @@ android:layout_width="fill_parent" android:layout_height="wrap_content" /> + + + + + + diff --git a/AndroidAnnotations/functional-test-1-5/res/values/values.xml b/AndroidAnnotations/functional-test-1-5/res/values/values.xml index cc332c0475..5cbc0a19d1 100644 --- a/AndroidAnnotations/functional-test-1-5/res/values/values.xml +++ b/AndroidAnnotations/functional-test-1-5/res/values/values.xml @@ -29,6 +29,7 @@ editTextPrefKey listPreferenceKey checkBoxPrefKey +checkBoxWithCastPrefKey switchPrefKey - \ No newline at end of file + diff --git a/AndroidAnnotations/functional-test-1-5/res/xml/settings.xml b/AndroidAnnotations/functional-test-1-5/res/xml/settings.xml index 0c52a89690..250a0e8322 100644 --- a/AndroidAnnotations/functional-test-1-5/res/xml/settings.xml +++ b/AndroidAnnotations/functional-test-1-5/res/xml/settings.xml @@ -30,6 +30,8 @@+ + diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/CheckedChangeHandledActivity.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/CheckedChangeHandledActivity.java index 6a93ddbd0a..42b1e57c86 100644 --- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/CheckedChangeHandledActivity.java +++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/CheckedChangeHandledActivity.java @@ -18,6 +18,7 @@ import org.androidannotations.annotations.CheckedChange; import org.androidannotations.annotations.EActivity; +import android.widget.CheckBox; import android.widget.CompoundButton; @EActivity(R.layout.checkable_widgets) @@ -33,6 +34,11 @@ public void conventionButton(CompoundButton evt, boolean checked) { this.checked = checked; } + @CheckedChange + public void checkBox(CheckBox evt, boolean checked) { + button = evt; + } + @CheckedChange public void snakeCaseButton(boolean checked, CompoundButton evt) { snakeCaseButtonEventHandled = true; @@ -57,5 +63,4 @@ public void buttonWithViewArgument(boolean checked) { public void multipleButtonWithViewArgument(CompoundButton v, boolean checked) { } - } diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ClicksHandledActivity.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ClicksHandledActivity.java index 282a38f5bb..c02d586e79 100644 --- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ClicksHandledActivity.java +++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/ClicksHandledActivity.java @@ -19,6 +19,7 @@ import org.androidannotations.annotations.EActivity; import android.view.View; +import android.widget.Button; @EActivity(R.layout.clickable_widgets) public class ClicksHandledActivity extends EventsHandledAbstractActivity { @@ -62,6 +63,11 @@ public void buttonWithViewArgument(View viewArgument) { this.viewArgument = viewArgument; } + @Click + public void buttonWithButtonArgument(Button viewArgument) { + this.viewArgument = viewArgument; + } + @Click({ R.id.button1, R.id.button2 }) public void multipleButtonWithViewArgument(View viewArgument) { this.viewArgument = viewArgument; diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/EditorActionsHandledActivity.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/EditorActionsHandledActivity.java index 9c4cb08ccf..d2329f027a 100644 --- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/EditorActionsHandledActivity.java +++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/EditorActionsHandledActivity.java @@ -37,6 +37,8 @@ public class EditorActionsHandledActivity extends Activity { @ViewById EditText editText1; + EditText passedEditText; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -47,6 +49,11 @@ void editorActionWithFullParameters(TextView tv, int actionId, KeyEvent event) { actionHandled = true; } + @EditorAction(R.id.editText4) + void editorActionWithEditTextParameter(EditText et) { + passedEditText = et; + } + @EditorAction(R.id.editText2) void editorActionInversedParameters(KeyEvent event, int actionId) { this.actionId = actionId; diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/FocusChangeHandledActivity.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/FocusChangeHandledActivity.java index d7ead7eeff..f4864c5fe6 100644 --- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/FocusChangeHandledActivity.java +++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/FocusChangeHandledActivity.java @@ -19,6 +19,7 @@ import org.androidannotations.annotations.FocusChange; import android.view.View; +import android.widget.Button; @EActivity(R.layout.clickable_widgets) public class FocusChangeHandledActivity extends EventsHandledAbstractActivity { @@ -32,6 +33,11 @@ public void conventionButton(View evt, boolean hasFocus) { } + @FocusChange + public void buttonWithButtonArgument(Button evt, boolean hasFocus) { + view = evt; + } + @FocusChange public void snakeCaseButton(boolean hasFocus) { snakeCaseButtonEventHandled = true; diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/LongClicksHandledActivity.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/LongClicksHandledActivity.java index 5c48070733..c3516ab44d 100644 --- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/LongClicksHandledActivity.java +++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/LongClicksHandledActivity.java @@ -19,6 +19,7 @@ import org.androidannotations.annotations.LongClick; import android.view.View; +import android.widget.Button; @EActivity(R.layout.clickable_widgets) public class LongClicksHandledActivity extends EventsHandledAbstractActivity { @@ -33,6 +34,11 @@ public void conventionButton() { conventionButtonEventHandled = true; } + @LongClick + public void buttonWithButtonArgument(Button button) { + viewArgument = button; + } + @LongClick public void snakeCaseButton() { snakeCaseButtonEventHandled = true; diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/TouchesHandledActivity.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/TouchesHandledActivity.java index 23efd2648b..77a643a047 100644 --- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/TouchesHandledActivity.java +++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/TouchesHandledActivity.java @@ -20,6 +20,7 @@ import android.view.MotionEvent; import android.view.View; +import android.widget.Button; @EActivity(R.layout.clickable_widgets) public class TouchesHandledActivity extends EventsHandledAbstractActivity { @@ -53,6 +54,11 @@ public void buttonWithViewArgument(MotionEvent evt, View viewArgument) { this.viewArgument = viewArgument; } + @Touch + public void buttonWithButtonArgument(MotionEvent evt, Button button) { + viewArgument = button; + } + @Touch public void buttonWithOnlyViewArgument(View viewArgument) { } diff --git a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/preference/PreferenceEventsHandledActivity.java b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/preference/PreferenceEventsHandledActivity.java index 8b4ec7505f..831a829a48 100644 --- a/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/preference/PreferenceEventsHandledActivity.java +++ b/AndroidAnnotations/functional-test-1-5/src/main/java/org/androidannotations/test15/preference/PreferenceEventsHandledActivity.java @@ -21,6 +21,7 @@ import org.androidannotations.test15.R; import android.os.Bundle; +import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceActivity; @@ -66,6 +67,11 @@ void checkBoxPreferenceChanged(Preference preference, Boolean newValue) { this.newValue = newValue; } + @PreferenceChange(R.string.checkBoxWithCastPrefKey) + void checkBoxWithCastPreferenceChanged(CheckBoxPreference preference) { + this.preference = preference; + } + @PreferenceChange(R.string.switchPrefKey) boolean switchPreferenceChanged() { return false; @@ -86,6 +92,11 @@ void checkBoxPreferenceClicked(Preference preference) { this.preference = preference; } + @PreferenceClick(R.string.checkBoxWithCastPrefKey) + void checkBoxWithCastPreferenceClicked(CheckBoxPreference preference) { + this.preference = preference; + } + @PreferenceClick(R.string.switchPrefKey) boolean switchPreferenceClicked() { return false; diff --git a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/CheckedChangeHandledActivityTest.java b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/CheckedChangeHandledActivityTest.java index d689eabdfe..ab0f365098 100644 --- a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/CheckedChangeHandledActivityTest.java +++ b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/CheckedChangeHandledActivityTest.java @@ -23,6 +23,7 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; +import android.widget.CheckBox; import android.widget.Checkable; import android.widget.CompoundButton; @@ -46,6 +47,16 @@ public void testHandlingWithConvention() { assertThat(activity.conventionButtonEventHandled).isTrue(); } + @Test + public void testHandlingWithCheckBox() { + assertThat(activity.button).isNull(); + + CheckBox button = (CheckBox) activity.findViewById(R.id.checkBox); + button.setChecked(true); + + assertThat(activity.button).isSameAs(button); + } + @Test public void testCompoundButtonPassedToAnnotatedMethod() { assertThat(activity.button).isNull(); @@ -65,5 +76,4 @@ public void testCheckedStatePassedToAnnotatedMethod() { assertThat(activity.checked).isTrue(); } - } diff --git a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/ClicksHandledActivityTest.java b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/ClicksHandledActivityTest.java index 9c18174f3c..520ab2bf81 100644 --- a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/ClicksHandledActivityTest.java +++ b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/ClicksHandledActivityTest.java @@ -24,7 +24,7 @@ import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; - +import android.widget.Button; @RunWith(RobolectricTestRunner.class) public class ClicksHandledActivityTest { @@ -98,6 +98,16 @@ public void viewArgumentIsGiven() { assertThat(activity.viewArgument).hasId(R.id.buttonWithViewArgument); } + @Test + public void buttonArgumentIsGiven() { + assertThat(activity.viewArgument).isNull(); + + Button button = (Button) activity.findViewById(R.id.buttonWithButtonArgument); + button.performClick(); + + assertThat(activity.viewArgument).isSameAs(button); + } + @Test public void multipleButtonsClicked() { assertThat(activity.multipleButtonsEventHandled).isFalse(); diff --git a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/EditorActionsActivityTest.java b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/EditorActionsActivityTest.java index 457a4883e7..d25de27924 100644 --- a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/EditorActionsActivityTest.java +++ b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/EditorActionsActivityTest.java @@ -51,6 +51,18 @@ public void testActionHandled() { assertThat(activity.actionHandled).isTrue(); } + @Test + public void testEditTextPassed() { + assertThat(activity.passedEditText).isNull(); + + EditText editText = (EditText) activity.findViewById(R.id.editText4); + OnEditorActionListener listener = getOnEditorActionListener(editText); + + listener.onEditorAction(editText, 0, null); + + assertThat(activity.passedEditText).isSameAs(editText); + } + @Test public void testActionIdPassed() { assertThat(activity.actionId).isZero(); diff --git a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/FocusChangeHandledActivityTest.java b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/FocusChangeHandledActivityTest.java index 5220c1fb03..e36e78b6c7 100644 --- a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/FocusChangeHandledActivityTest.java +++ b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/FocusChangeHandledActivityTest.java @@ -54,6 +54,16 @@ public void testViewPassed() { assertThat(activity.view).isEqualTo(view); } + @Test + public void testButtonPassed() { + assertThat(activity.view).isNull(); + + View view = activity.findViewById(R.id.buttonWithButtonArgument); + view.getOnFocusChangeListener().onFocusChange(view, false); + + assertThat(activity.view).isSameAs(view); + } + @Test public void testHasFocusPassed() { assertThat(activity.hasFocus).isFalse(); diff --git a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/LongClicksHandledActivityTest.java b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/LongClicksHandledActivityTest.java index 9e8ed58135..1ece447a52 100644 --- a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/LongClicksHandledActivityTest.java +++ b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/LongClicksHandledActivityTest.java @@ -24,6 +24,8 @@ import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; +import android.widget.Button; + @RunWith(RobolectricTestRunner.class) public class LongClicksHandledActivityTest { @@ -96,6 +98,16 @@ public void viewArgumentIsGiven() { assertThat(activity.viewArgument).hasId(R.id.buttonWithViewArgument); } + @Test + public void buttonArgumentIsGiven() { + assertThat(activity.viewArgument).isNull(); + + Button button = (Button) activity.findViewById(R.id.buttonWithButtonArgument); + button.performLongClick(); + + assertThat(activity.viewArgument).isSameAs(button); + } + @Test public void multipleButtonsClicked() { assertThat(activity.multipleButtonsEventHandled).isFalse(); diff --git a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/TouchesHandledActivityTest.java b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/TouchesHandledActivityTest.java index 2a2e2a48c4..e7eef3ea7c 100644 --- a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/TouchesHandledActivityTest.java +++ b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/TouchesHandledActivityTest.java @@ -25,6 +25,7 @@ import org.robolectric.RobolectricTestRunner; import android.view.MotionEvent; +import android.widget.Button; @RunWith(RobolectricTestRunner.class) public class TouchesHandledActivityTest { @@ -98,6 +99,16 @@ public void viewArgumentIsGiven() { assertThat(activity.viewArgument).hasId(R.id.buttonWithViewArgument); } + @Test + public void buttonArgumentIsGiven() { + assertThat(activity.viewArgument).isNull(); + + Button button = (Button) activity.findViewById(R.id.buttonWithButtonArgument); + button.dispatchTouchEvent(mockedEvent); + + assertThat(activity.viewArgument).isSameAs(button); + } + @Test public void multipleButtonsClicked() { assertThat(activity.multipleButtonsEventHandled).isFalse(); diff --git a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/preference/PreferenceEventsHandledActivityTest.java b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/preference/PreferenceEventsHandledActivityTest.java index f48f5b91a7..ef2d1e7d62 100644 --- a/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/preference/PreferenceEventsHandledActivityTest.java +++ b/AndroidAnnotations/functional-test-1-5/src/test/java/org/androidannotations/test15/preference/PreferenceEventsHandledActivityTest.java @@ -69,6 +69,14 @@ public void testPreferenceChangeParameterPassed() { assertThat(activity.newValue).isSameAs(newValue); } + @Test + public void testPreferenceChangeCastedParameterPassed() { + Preference preference = activity.findPreference(activity.getString(R.string.checkBoxWithCastPrefKey)); + preference.getOnPreferenceChangeListener().onPreferenceChange(preference, true); + + assertThat(activity.preference).isSameAs(preference); + } + @Test public void testPreferenceChangeParsedParameterPassed() { Preference preference = activity.findPreference(activity.getString(R.string.editTextPrefKey)); @@ -122,6 +130,14 @@ public void testPreferenceClickParameterPassed() { assertThat(activity.preference).isSameAs(preference); } + @Test + public void testPreferenceClickCastedParameterPassed() { + Preference preference = activity.findPreference(activity.getString(R.string.checkBoxWithCastPrefKey)); + preference.getOnPreferenceClickListener().onPreferenceClick(preference); + + assertThat(activity.preference).isSameAs(preference); + } + @Test public void testPreferenceClickDefaultReturnValue() { Preference preference = activity.findPreference(activity.getString(R.string.listPreferenceKey));