Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added RadioGroup OnCheckedChangeListener annotation #245

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package butterknife;

import android.view.View;
import butterknife.internal.ListenerClass;
import butterknife.internal.ListenerMethod;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static android.widget.RadioGroup.OnCheckedChangeListener;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.CLASS;

/**
* Bind a method to an {@link OnCheckedChangeListener OnCheckedChangeListener} on the view for
* each ID specified.
* <pre><code>
* {@literal @}OnCheckedChanged(R.id.example) void onChecked(boolean checked) {
* Toast.makeText(this, checked ? "Checked!" : "Unchecked!", LENGTH_SHORT).show();
* }
* </code></pre>
* Any number of parameters from
* {@link OnCheckedChangeListener#onCheckedChanged(android.widget.RadioGroup, int)
* onCheckedChanged} may be used on the method.
*
* @see OnCheckedChangeListener
*/
@Target(METHOD)
@Retention(CLASS)
@ListenerClass(
targetType = "android.widget.RadioGroup",
setter = "setOnCheckedChangeListener",
type = "android.widget.RadioGroup.OnCheckedChangeListener",
method = @ListenerMethod(
name = "onCheckedChanged",
parameters = {
"android.widget.RadioGroup",
"int"
}
)
)
public @interface OnRadioGroupCheckedChanged {
/** View IDs to which the method will be bound. */
int[] value() default { View.NO_ID };
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import butterknife.OnItemSelected;
import butterknife.OnLongClick;
import butterknife.OnPageChange;
import butterknife.OnRadioGroupCheckedChanged;
import butterknife.OnTextChanged;
import butterknife.OnTouch;
import butterknife.ResourceBool;
Expand Down Expand Up @@ -81,6 +82,7 @@ public final class ButterKnifeProcessor extends AbstractProcessor {
OnItemSelected.class, //
OnLongClick.class, //
OnPageChange.class, //
OnRadioGroupCheckedChanged.class, //
OnTextChanged.class, //
OnTouch.class //
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package butterknife.internal;

import com.google.common.base.Joiner;
import com.google.testing.compile.JavaFileObjects;
import org.junit.Test;

import javax.tools.JavaFileObject;

import static butterknife.internal.ProcessorTestUtilities.butterknifeProcessors;
import static com.google.common.truth.Truth.ASSERT;
import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;

public class OnRadioGroupCheckChangedTest {
@Test
public void checkedChanged() {
JavaFileObject source = JavaFileObjects.forSourceString("test.Test", Joiner.on('\n').join(
"package test;",
"import android.app.Activity;",
"import butterknife.OnRadioGroupCheckedChanged;",
"public class Test extends Activity {",
" @OnRadioGroupCheckedChanged(1) void doStuff() {}",
"}"
));

JavaFileObject expectedSource = JavaFileObjects.forSourceString("test/Test$$ViewBinder",
Joiner.on('\n').join(
"package test;",
"import android.view.View;",
"import butterknife.ButterKnife.Finder;",
"import butterknife.ButterKnife.ViewBinder;",
"public class Test$$ViewBinder<T extends test.Test> implements ViewBinder<T> {",
" @Override public void bind(final Finder finder, final T target, Object source) {",
" View view;",
" view = finder.findRequiredView(source, 1, \"method 'doStuff'\");",
" ((android.widget.RadioGroup) view).setOnCheckedChangeListener(new android.widget.RadioGroup.OnCheckedChangeListener() {",
" @Override public void onCheckedChanged(android.widget.RadioGroup p0, int p1) {",
" target.doStuff();",
" }",
" });",
" }",
" @Override public void unbind(T target) {",
" }",
"}"
));

ASSERT.about(javaSource()).that(source)
.processedWith(butterknifeProcessors())
.compilesWithoutError()
.and()
.generatesSources(expectedSource);
}
}