@Override public void unbind() { ViewCollections.set(targets, setter, null); } }
private static @Nullable Unbinder parseOnClick(final Object target, final Method method, View source) { OnClick onClick = method.getAnnotation(OnClick.class); if (onClick == null) { return null; } validateMember(method); validateReturnType(method, void.class); final ArgumentTransformer argumentTransformer = createArgumentTransformer(method, ON_CLICK_TYPES); List<View> views = findViews(source, onClick.value(), isRequired(method), method.getName(), View.class); ViewCollections.set(views, ON_CLICK, v -> tryInvoke(method, target, argumentTransformer.transform(v))); return new ListenerUnbinder<>(views, ON_CLICK); }
private static @Nullable Unbinder parseOnFocusChange(final Object target, final Method method, View source) { OnFocusChange onFocusChange = method.getAnnotation(OnFocusChange.class); if (onFocusChange == null) { return null; } validateMember(method); validateReturnType(method, void.class); final ArgumentTransformer argumentTransformer = createArgumentTransformer(method, ON_FOCUS_CHANGE_TYPES); List<View> views = findViews(source, onFocusChange.value(), isRequired(method), method.getName(), View.class); ViewCollections.set(views, ON_FOCUS_CHANGE, (v, hasFocus) -> tryInvoke(method, target, argumentTransformer.transform(v, hasFocus))); return new ListenerUnbinder<>(views, ON_FOCUS_CHANGE); }
private static @Nullable Unbinder parseOnCheckedChanged(final Object target, final Method method, View source) { OnCheckedChanged onCheckedChanged = method.getAnnotation(OnCheckedChanged.class); if (onCheckedChanged == null) { return null; } validateMember(method); validateReturnType(method, void.class); final ArgumentTransformer argumentTransformer = createArgumentTransformer(method, ON_CHECKED_CHANGED_TYPES); List<CompoundButton> views = findViews(source, onCheckedChanged.value(), isRequired(method), method.getName(), CompoundButton.class); ViewCollections.set(views, ON_CHECKED_CHANGE, (buttonView, isChecked) -> tryInvoke(method, target, argumentTransformer.transform(buttonView, isChecked))); return new ListenerUnbinder<>(views, ON_CHECKED_CHANGE); }
private static @Nullable Unbinder parseOnEditorAction(final Object target, final Method method, View source) { OnEditorAction onEditorAction = method.getAnnotation(OnEditorAction.class); if (onEditorAction == null) { return null; } validateMember(method); final boolean propagateReturn = validateReturnType(method, boolean.class); final ArgumentTransformer argumentTransformer = createArgumentTransformer(method, ON_EDITOR_ACTION_TYPES); List<TextView> views = findViews(source, onEditorAction.value(), isRequired(method), method.getName(), TextView.class); ViewCollections.set(views, ON_EDITOR_ACTION, (v, actionId, event) -> { Object value = tryInvoke(method, target, argumentTransformer.transform(v, actionId, event)); //noinspection SimplifiableConditionalExpression return propagateReturn ? (boolean) value : false; }); return new ListenerUnbinder<>(views, ON_EDITOR_ACTION); }
private static @Nullable Unbinder parseOnItemClick(final Object target, final Method method, View source) { OnItemClick onItemClick = method.getAnnotation(OnItemClick.class); if (onItemClick == null) { return null; } validateMember(method); validateReturnType(method, void.class); final ArgumentTransformer argumentTransformer = createArgumentTransformer(method, ON_ITEM_CLICK_TYPES); List<AdapterView<?>> views = findViews(source, onItemClick.value(), isRequired(method), method.getName(), AdapterView.class); ViewCollections.set(views, ON_ITEM_CLICK, (parent, view, position, id) -> tryInvoke(method, target, argumentTransformer.transform(parent, view, position, id))); return new ListenerUnbinder<>(views, ON_ITEM_CLICK); }
private static @Nullable Unbinder parseOnTouch(final Object target, final Method method, View source) { OnTouch onTouch = method.getAnnotation(OnTouch.class); if (onTouch == null) { return null; } validateMember(method); final boolean propagateReturn = validateReturnType(method, boolean.class); final ArgumentTransformer argumentTransformer = createArgumentTransformer(method, ON_TOUCH_TYPES); List<View> views = findViews(source, onTouch.value(), isRequired(method), method.getName(), View.class); ViewCollections.set(views, ON_TOUCH, (v, event) -> { Object returnValue = tryInvoke(method, target, argumentTransformer.transform(v)); //noinspection SimplifiableConditionalExpression return propagateReturn ? (boolean) returnValue : false; }); return new ListenerUnbinder<>(views, ON_TOUCH); }
private static @Nullable Unbinder parseOnLongClick(final Object target, final Method method, View source) { OnLongClick onLongClick = method.getAnnotation(OnLongClick.class); if (onLongClick == null) { return null; } validateMember(method); final boolean propagateReturn = validateReturnType(method, boolean.class); final ArgumentTransformer argumentTransformer = createArgumentTransformer(method, ON_LONG_CLICK_TYPES); List<View> views = findViews(source, onLongClick.value(), isRequired(method), method.getName(), View.class); ViewCollections.set(views, ON_LONG_CLICK, v -> { Object returnValue = tryInvoke(method, target, argumentTransformer.transform(v)); //noinspection SimplifiableConditionalExpression return propagateReturn ? (boolean) returnValue : false; }); return new ListenerUnbinder<>(views, ON_LONG_CLICK); }
private static @Nullable Unbinder parseOnItemLongClick(final Object target, final Method method, View source) { OnItemLongClick onItemLongClick = method.getAnnotation(OnItemLongClick.class); if (onItemLongClick == null) { return null; } validateMember(method); final boolean propagateReturn = validateReturnType(method, boolean.class); final ArgumentTransformer argumentTransformer = createArgumentTransformer(method, ON_ITEM_LONG_CLICK_TYPES); List<AdapterView<?>> views = findViews(source, onItemLongClick.value(), isRequired(method), method.getName(), AdapterView.class); ViewCollections.set(views, ON_ITEM_LONG_CLICK, (parent, view, position, id) -> { Object value = tryInvoke(method, target, argumentTransformer.transform(parent, view, position, id)); //noinspection SimplifiableConditionalExpression return propagateReturn ? (boolean) value : false; }); return new ListenerUnbinder<>(views, ON_ITEM_LONG_CLICK); }
@Test public void setterAppliedToView() { View view = new View(context); assertThat(view.isEnabled()).isTrue(); ViewCollections.set(view, SETTER_ENABLED, false); assertThat(view.isEnabled()).isFalse(); }
@Test public void propertyAppliedToView() { View view = new View(context); assertThat(view.isEnabled()).isTrue(); ViewCollections.set(view, PROPERTY_ENABLED, false); assertThat(view.isEnabled()).isFalse(); }
@Test public void propertyAppliedToEveryViewInList() { View view1 = new View(context); View view2 = new View(context); View view3 = new View(context); assertThat(view1.isEnabled()).isTrue(); assertThat(view2.isEnabled()).isTrue(); assertThat(view3.isEnabled()).isTrue(); List<View> views = asList(view1, view2, view3); ViewCollections.set(views, PROPERTY_ENABLED, false); assertThat(view1.isEnabled()).isFalse(); assertThat(view2.isEnabled()).isFalse(); assertThat(view3.isEnabled()).isFalse(); }
@Test public void setterAppliedToEveryViewInList() { View view1 = new View(context); View view2 = new View(context); View view3 = new View(context); assertThat(view1.isEnabled()).isTrue(); assertThat(view2.isEnabled()).isTrue(); assertThat(view3.isEnabled()).isTrue(); List<View> views = asList(view1, view2, view3); ViewCollections.set(views, SETTER_ENABLED, false); assertThat(view1.isEnabled()).isFalse(); assertThat(view2.isEnabled()).isFalse(); assertThat(view3.isEnabled()).isFalse(); }
@Test public void propertyAppliedToEveryViewInArray() { View view1 = new View(context); View view2 = new View(context); View view3 = new View(context); assertThat(view1.isEnabled()).isTrue(); assertThat(view2.isEnabled()).isTrue(); assertThat(view3.isEnabled()).isTrue(); View[] views = new View[] { view1, view2, view3 }; ViewCollections.set(views, PROPERTY_ENABLED, false); assertThat(view1.isEnabled()).isFalse(); assertThat(view2.isEnabled()).isFalse(); assertThat(view3.isEnabled()).isFalse(); }
@Test public void setterAppliedToEveryViewInArray() { View view1 = new View(context); View view2 = new View(context); View view3 = new View(context); assertThat(view1.isEnabled()).isTrue(); assertThat(view2.isEnabled()).isTrue(); assertThat(view3.isEnabled()).isTrue(); View[] views = new View[] { view1, view2, view3 }; ViewCollections.set(views, SETTER_ENABLED, false); assertThat(view1.isEnabled()).isFalse(); assertThat(view2.isEnabled()).isFalse(); assertThat(view3.isEnabled()).isFalse(); } }