| 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(); | 
|     } | 
| } |