package com.common.lib_base.aop.aspectj;

import android.content.Context;
import android.widget.Toast;

import androidx.fragment.app.Fragment;

import com.common.lib_base.utils.NetworkUtils;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

/**
 * Date: 2022/5/19 0019 14:41
 * Description:
 */
@Aspect
public class NetworkCheckAspect {

//    /**
//     * 进行一个切点
//     * NetworkCheck的包名路径，此处建议copy
//     */
//    @Pointcut("execution(@com.common.lib_base.aop.annotation.NetworkCheck * *(..))")
//    public void pointActionMenthod() {
//
//    }
//
//    /**
//     * 进行切面的处理
//     * 填写切点的方法名，注意带上()
//     * @param proceedingJoinPoint
//     * @throws Throwable
//     */
//    @Around("pointActionMenthod()")
//    public void aProceedingJoinPoint(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
//        //拿到上下文
//        Context context = null;
//        //getThis() 当前切点方法所在的类
//        final Object thisObject = proceedingJoinPoint.getThis();
//
//        if (thisObject instanceof Context) {
//            context = (Context) thisObject;
//        } else if (thisObject instanceof Fragment) {
//            context = ((Fragment) thisObject).getActivity();
//        }
//
//        if (context == null) {
//            throw new IllegalAccessException("context == null");
//        }
//
//        if (NetworkUtils.isNetworkAvaiable(context)) {
//            //网络正常，使NetworkCheck注解修饰的方法正常执行
//
//            proceedingJoinPoint.proceed();
//        } else {
//            //网络不正常，进行各种处理，以下多种处理方式，可任选其一
//
//            //方式一：普通toast
//            Toast.makeText(context, "没有网络", Toast.LENGTH_LONG).show();
//
//            //方式二：显示注解中的处理方式，使用反射找到注解
//           /* Class<?> thisObjectClass = thisObject.getClass();
//            Method[] declaredMethods = thisObjectClass.getDeclaredMethods();
//            for (Method method : declaredMethods) {
//                method.setAccessible(true);//让虚拟机跳跃不要检测
//                boolean annotationPresent = method.isAnnotationPresent(NoNetworkShow.class);
//
//                if (annotationPresent) {
//                    method.invoke(thisObject);
//                }
//            }*/
//
//            //方式三：跳转到网络设置
//            NetworkUtils.goNetSettings(context);
//        }
//    }

}