//package com.gingersoft.gsa.cloud.common.function.click;
//
//import android.util.Log;
//import android.view.View;
//
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//
//import java.lang.reflect.Method;
//
///**
// * @author 宇航.
// * User: admin
// * Date: 2021/3/3
// * Time: 11:46
// * Use:
// */
//@Aspect
//public class SingleClickAspect {
//    private static final long DEFAULT_TIME_INTERVAL = 5000;
//    /**
//     * 定义切点，标记切点为所有被@SingleClick注解的方法
//     注意：这里me.baron.test.annotation.SingleClick需要替换成
//     * 你自己项目中SingleClick这个类的全路径哦
//     */
//    @Pointcut("execution(@com.gingersoft.gsa.cloud.common.function.click.SingleClick * *(..))")
//    public void methodAnnotated() {}
//
//    /**
//     * 定义一个切面方法，包裹切点方法
//     */
//    @Around("methodAnnotated()")
//    public void aroundJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
//        // 取出方法的参数
////        View view = null;
////        for (Object arg : joinPoint.getArgs()) {
////            if (arg instanceof View) {
////                view = (View) arg;
////                break;
////            }
////        }
////        if (view == null) {
////            return;
////        }
//        // 取出方法的注解
//        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
//        Method method = methodSignature.getMethod();
//        Log.e("eee", "aroundJoinPoint");
//        if (!method.isAnnotationPresent(SingleClick.class)) {
//            Log.e("eee", "isAnnotationPresent");
//            return;
//        }
//        SingleClick singleClick = method.getAnnotation(SingleClick.class);
//        // 判断是否快速点击
//        if (!isFastDoubleClick(method.getName(), singleClick.value())) {
//            Log.e("eee", "不是快速點擊");
//            // 不是快速点击，执行原方法
//            joinPoint.proceed();
//        } else {
//            Log.e("eee", "快速點擊");
//        }
//    }
//
//    /**
//     * 最近一次点击的时间
//     */
//    private static long mLastClickTime;
//    /**
//     * 最近一次点击的方法
//     */
//    private static String mLastMethodName;
//
//    /**
//     * 是否是快速点击
//     * @param intervalMillis  时间间期（毫秒）
//     * @return  true:是，false:不是
//     */
//    public static boolean isFastDoubleClick(String methodName, long intervalMillis) {
//        long time = System.currentTimeMillis();
//        long timeInterval = Math.abs(time - mLastClickTime);
//        if (timeInterval < intervalMillis && methodName.equals(mLastMethodName)) {
//            return true;
//        } else {
//            mLastClickTime = time;
//            mLastMethodName = methodName;
//            return false;
//        }
//    }
//}
