package com.lody.virtual.client.hook.base;
import android.util.Log;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Add this annotation to a {@link MethodProxy} or a {@link MethodInvocationStub} to
* log all the calls and their arguments.
*
* Obviously, this is only useful for debugging.
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface LogInvocation {
public Condition value() default Condition.ALWAYS;
static enum Condition {
/** Never logs anything */
NEVER {
public int getLogLevel(boolean isHooked, boolean isError) {
return -1;
}
},
/**
* Logs every call.
* Mostly useful for debugging.
*/
ALWAYS {
public int getLogLevel(boolean isHooked, boolean isError) {
return isError ? Log.WARN : Log.INFO;
}
},
/**
* Logs only calls that exited with error
* A reasonable tradeoff between noise and getting relevant information
*/
ON_ERROR {
public int getLogLevel(boolean isHooked, boolean isError) {
return isError ? Log.WARN : -1;
}
},
/**
* Log only calls that haven't been hooked
* It only makes sense on a MethodInvocationProxy, and is useful to pinpoint missing methods
*/
NOT_HOOKED {
public int getLogLevel(boolean isHooked, boolean isError) {
return isHooked ? -1 : isError ? Log.WARN : Log.INFO;
}
};
public abstract int getLogLevel(boolean isHooked, boolean isError);
};
};