package cn.mutils.app.event.listener;
import android.view.View;
import java.lang.reflect.Method;
import cn.mutils.core.log.Logs;
import cn.mutils.core.reflect.ReflectUtil;
/**
* IOC for @Click
*/
public class OnClickListener implements View.OnClickListener {
/**
* Callback
*/
protected Method mCallBack;
/**
* Proxy of onClick
*/
protected Object mProxy;
public void setCallBack(Method m) {
mCallBack = m;
}
public void setProxy(Object proxy) {
mProxy = proxy;
}
@Override
public void onClick(View v) {
if (v.getVisibility() != View.VISIBLE) {
return;
}
if (!mCallBack.isAccessible()) {
mCallBack.setAccessible(true);
}
Class<?>[] paramTypes = mCallBack.getParameterTypes();
boolean invoked = false;
if (paramTypes.length == 0) {
ReflectUtil.invoke(mProxy, mCallBack);
invoked = true;
} else if (paramTypes.length == 1) {
if (View.class.isAssignableFrom(paramTypes[0])) {
ReflectUtil.invoke(mProxy, mCallBack, v);
invoked = true;
}
}
if (!invoked) {
Logs.e(mCallBack.getDeclaringClass().getSimpleName() + "." + mCallBack.getName(), "Click Invalid: " + v);
}
}
}