package com.doumee.keyCabinet; 
 | 
  
 | 
import android.app.Application; 
 | 
import android.content.Context; 
 | 
import android.hardware.usb.UsbDevice; 
 | 
import android.net.Uri; 
 | 
import android.os.CountDownTimer; 
 | 
import android.text.TextUtils; 
 | 
import android.widget.ImageView; 
 | 
  
 | 
import androidx.annotation.Nullable; 
 | 
  
 | 
import com.doumee.keyCabinet.bean.DevConfigBean; 
 | 
import com.doumee.keyCabinet.bean.LoginBean; 
 | 
import com.doumee.keyCabinet.utils.CrashHandler; 
 | 
import com.bumptech.glide.Glide; 
 | 
import com.doumee.keyCabinet.utils.TimeUtils; 
 | 
import com.doumee.lib_coremodel.base.CoreConfig; 
 | 
import com.doumee.lib_coremodel.http.other.OkHttpNetworkFetcher; 
 | 
import com.doumee.lib_coremodel.util.SpUtil; 
 | 
import com.doumee.keyCabinet.bean.MemberBean; 
 | 
import com.doumee.keyCabinet.utils.LanguageUtil; 
 | 
import com.facebook.fresco.helper.Phoenix; 
 | 
import com.facebook.imagepipeline.core.ImagePipelineConfig; 
 | 
import com.facebook.imagepipeline.listener.RequestListener; 
 | 
import com.facebook.imagepipeline.listener.RequestLoggingListener; 
 | 
import com.orhanobut.logger.AndroidLogAdapter; 
 | 
import com.orhanobut.logger.FormatStrategy; 
 | 
import com.orhanobut.logger.Logger; 
 | 
import com.orhanobut.logger.PrettyFormatStrategy; 
 | 
import com.scwang.smart.refresh.footer.ClassicsFooter; 
 | 
import com.scwang.smart.refresh.header.ClassicsHeader; 
 | 
import com.scwang.smart.refresh.layout.SmartRefreshLayout; 
 | 
import com.scwang.smart.refresh.layout.api.RefreshFooter; 
 | 
import com.scwang.smart.refresh.layout.api.RefreshHeader; 
 | 
import com.scwang.smart.refresh.layout.api.RefreshLayout; 
 | 
import com.scwang.smart.refresh.layout.listener.DefaultRefreshFooterCreator; 
 | 
import com.scwang.smart.refresh.layout.listener.DefaultRefreshHeaderCreator; 
 | 
import com.yuyh.library.imgsel.ISNav; 
 | 
  
 | 
import java.io.File; 
 | 
import java.util.HashSet; 
 | 
import java.util.Random; 
 | 
import java.util.Set; 
 | 
  
 | 
import dagger.hilt.android.HiltAndroidApp; 
 | 
import okhttp3.OkHttpClient; 
 | 
import timber.log.Timber; 
 | 
  
 | 
@HiltAndroidApp 
 | 
public class MApplication extends Application { 
 | 
  
 | 
    public static Context mContext; 
 | 
    private static CountDownTimer countTimer; 
 | 
    public static int nLan = 0;//中文用0,其他用1 
 | 
  
 | 
    @Override 
 | 
    public void onCreate() { 
 | 
        super.onCreate(); 
 | 
        mContext=this; 
 | 
        //初始化日志打印 
 | 
        FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder() 
 | 
                .showThreadInfo(false)      //(可选)是否显示线程信息。 默认值为true 
 | 
                .methodCount(2)               // (可选)要显示的方法行数。 默认2 
 | 
                .methodOffset(0)               // (可选)设置调用堆栈的函数偏移值,0的话则从打印该Log的函数开始输出堆栈信息,默认是0 
 | 
                //.logStrategy(customLog)  //(可选)更改要打印的日志策略。 默认LogCat 
 | 
                .tag("Logger") 
 | 
                //(可选)每个日志的全局标记。 默认PRETTY_LOGGER(如上图) 
 | 
                .build(); 
 | 
        Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy){ 
 | 
            @Override 
 | 
            public boolean isLoggable(int priority, @Nullable String tag) { 
 | 
                return BuildConfig.DEBUG;//控制是否输出日志 
 | 
            } 
 | 
        }); 
 | 
  
 | 
        Timber.plant(new Timber.DebugTree() { 
 | 
            @Override protected void log(int priority, String tag, String message, Throwable t) { 
 | 
                if(BuildConfig.DEBUG){ 
 | 
                    System.out.println(TimeUtils.getNowDate()+"    "+tag+" ===> "+message); 
 | 
                    //Logger.log(priority, tag, message, t); 
 | 
                } 
 | 
            } 
 | 
        }); 
 | 
        //设置全局的Header构建器 
 | 
        SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() { 
 | 
            @Override 
 | 
            public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) { 
 | 
                layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色 
 | 
                return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header 
 | 
            } 
 | 
        }); 
 | 
        //设置全局的Footer构建器 
 | 
        SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() { 
 | 
            @Override 
 | 
            public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) { 
 | 
                //指定为经典Footer,默认是 BallPulseFooter 
 | 
                return new ClassicsFooter(context).setDrawableSize(20); 
 | 
            } 
 | 
        }); 
 | 
        // 自定义图片加载器 
 | 
        ISNav.getInstance().init(new com.yuyh.library.imgsel.common.ImageLoader() { 
 | 
            @Override 
 | 
            public void displayImage(Context context, String path, ImageView imageView) { 
 | 
                Glide.with(context).load(Uri.fromFile(new File(path))).into(imageView); 
 | 
            } 
 | 
        }); 
 | 
        initFresco(); 
 | 
        SpUtil.init(this); 
 | 
        CoreConfig.nomalPicId=R.mipmap.ic_vipimg; 
 | 
        CoreConfig.nomalHeadPicId=R.mipmap.ic_vipimg; 
 | 
        addCrash(); 
 | 
        setLanguage(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 设置语言 
 | 
     */ 
 | 
    private void setLanguage() { 
 | 
        String language = SpUtil.getString("language"); 
 | 
        if(TextUtils.isEmpty(language)){ 
 | 
            return; 
 | 
        } 
 | 
        LanguageUtil.changeAppLanguage(this,language); 
 | 
    } 
 | 
  
 | 
    private void initFresco() { 
 | 
        Set<RequestListener> requestListeners = new HashSet<>(); 
 | 
        requestListeners.add(new RequestLoggingListener()); 
 | 
  
 | 
        OkHttpClient okHttpClient = new OkHttpClient.Builder() 
 | 
                .build(); 
 | 
  
 | 
        ImagePipelineConfig imagePipelineConfig = new com.facebook.fresco.helper.config.PhoenixConfig.Builder(this) 
 | 
                .setNetworkFetcher(new OkHttpNetworkFetcher(okHttpClient)) 
 | 
                .setRequestListeners(requestListeners) 
 | 
                .build(); 
 | 
        Phoenix.init(this, imagePipelineConfig); 
 | 
    } 
 | 
    public static interface CountTimerCallBack{ 
 | 
        void onFinish(); 
 | 
        void onTick(long millisUntilFinished); 
 | 
    } 
 | 
  
 | 
    private static CountTimerCallBack timerCallBack; 
 | 
    public static void initCountTimer(boolean isToGuild,CountTimerCallBack callBack){ 
 | 
        if(countTimer!=null){ 
 | 
            countTimer.cancel(); 
 | 
        } 
 | 
        if(timerCallBack!=null){ 
 | 
            timerCallBack = null; 
 | 
        } 
 | 
        if(configBean==null){ 
 | 
            return; 
 | 
        } 
 | 
        timerCallBack = callBack; 
 | 
        countTimer = new CountDownTimer(60*1000, 1*1000) { 
 | 
            @Override 
 | 
            public void onTick(long millisUntilFinished) { 
 | 
                //Timber.tag("CountTimer==>").d(millisUntilFinished+""); 
 | 
                if (timerCallBack!=null) { 
 | 
                    timerCallBack.onTick(millisUntilFinished); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            @Override 
 | 
            public void onFinish() { 
 | 
                Timber.tag("CountTimer==>").d("onFinish"); 
 | 
                if (timerCallBack!=null) { 
 | 
                    timerCallBack.onFinish(); 
 | 
                } 
 | 
            } 
 | 
        }; 
 | 
    } 
 | 
  
 | 
    public static void startCountTimer(){ 
 | 
        if(countTimer!=null){ 
 | 
            countTimer.start(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void addCrash(){ 
 | 
        try { 
 | 
            CrashHandler crashHandler = CrashHandler.getInstance(); 
 | 
            crashHandler.init(this); 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
            System.out.println("错误日志4"+e.getMessage()); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static void stopCountTimer() { 
 | 
        if(countTimer!=null){ 
 | 
            countTimer.cancel(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private static DevConfigBean configBean; 
 | 
    public static void saveConfigBean(DevConfigBean bean){ 
 | 
        configBean = bean; 
 | 
    } 
 | 
  
 | 
    public static DevConfigBean getConfigBean(){ 
 | 
        if(configBean==null){ 
 | 
            configBean = new DevConfigBean(); 
 | 
        } 
 | 
        return configBean; 
 | 
    } 
 | 
  
 | 
    private static UsbDevice customDevice; 
 | 
  
 | 
    public static UsbDevice getUsbDevice() { 
 | 
        return customDevice; 
 | 
    } 
 | 
  
 | 
    public static void setUsbDevice(UsbDevice device) { 
 | 
        customDevice = device; 
 | 
    } 
 | 
  
 | 
    private static LoginBean loginBean; 
 | 
  
 | 
    public static LoginBean getLoginBean() { 
 | 
        if(loginBean==null){ 
 | 
            loginBean = new LoginBean(); 
 | 
        } 
 | 
        return loginBean; 
 | 
    } 
 | 
  
 | 
    public static void setLoginBean(LoginBean cookie) { 
 | 
        MApplication.loginBean = cookie; 
 | 
    } 
 | 
  
 | 
    private static Random random; 
 | 
    public static boolean nextBoolean(){ 
 | 
        if(random==null){ 
 | 
            random = new Random(); 
 | 
        } 
 | 
        return random.nextBoolean(); 
 | 
    } 
 | 
} 
 |