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 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(long time,CountTimerCallBack callBack){ if(countTimer!=null){ countTimer.cancel(); } if(timerCallBack!=null){ timerCallBack = null; } if(configBean==null){ return; } timerCallBack = callBack; countTimer = new CountDownTimer(time, 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(); } }