package com.xscm.modulemain import android.app.Activity import android.content.Context import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.CrashUtils import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.Utils import com.opensource.svgaplayer.utils.log.SVGALogger import com.scwang.smartrefresh.layout.SmartRefreshLayout import com.scwang.smartrefresh.layout.footer.ClassicsFooter import com.scwang.smartrefresh.layout.header.ClassicsHeader import com.xscm.modulemain.activity.main.activity.MainActivity import com.xscm.modulemain.dialog.InviteDialog import com.xscm.modulemain.widget.WheatLayoutSingManager import com.xscm.moduleutil.base.CommonAppContext import com.xscm.moduleutil.bean.IndexRecommendRoom import com.xscm.moduleutil.http.BaseObserver import com.xscm.moduleutil.http.RetrofitClient import io.reactivex.disposables.Disposable open class Application : CommonAppContext() { var APP_CONENT = "" var LOGUTILS_SAVE_PATH = "" var CRASHUTILS_SAVE_PATH = "" var isAgoraStop = false var inviteDialog: InviteDialog? = null // 单例实例 companion object { @Volatile private lateinit var instance: Application // 全局获取 Application 实例 fun getInstance(): Application { return instance } // 获取 Application Context(避免内存泄漏) fun getContext(): Context { return instance.applicationContext } } override fun onCreate() { super.onCreate() LOGUTILS_SAVE_PATH = getExternalFilesDir("APP_CONTENT/APP_LOG")?.absolutePath.toString() CRASHUTILS_SAVE_PATH = getExternalFilesDir("APP_CONTENT/APP_CRASH")?.absolutePath.toString() getExternalFilesDir("") APP_CONENT = getExternalFilesDir("APP_CONTENT")?.absolutePath.toString() // 初始化单例实例 instance = this // 初始化并预绘制视图 二卡八列 WheatLayoutSingManager.init(this) WheatLayoutSingManager.getInstance().setWheatData(null) // 默认情况下,SVGA 内部不会输出任何 log,所以需要手动设置为 true SVGALogger.setLogEnabled(false) initLogUtils() initCrashUtils() initSmartRefreshLayout() } fun bgToForeground() { AppUtils.registerAppStatusChangedListener(object : Utils.OnAppStatusChangedListener { override fun onForeground(activity: Activity?) {//应用切换到前台 if (!CommonAppContext.getInstance().isPlaying) { RetrofitClient.getInstance() .index_recommend_room(object : BaseObserver() { override fun onSubscribe(d: Disposable) { } override fun onNext(t: IndexRecommendRoom) { if (!t.room_id.isNullOrEmpty()) { showInviteDialog(activity, t) } } }) } } override fun onBackground(activity: Activity?) {//应用切换到后台 } }) } fun showInviteDialog(activity: Activity?,t: IndexRecommendRoom) { if (inviteDialog == null) { inviteDialog = activity?.let { InviteDialog(it, t) } } inviteDialog?.setData(t) } private fun initLogUtils() { LogUtils.getConfig() .setLogSwitch(true) // 全局开关 .setLog2FileSwitch(true) // 必须设为 true! .setDir(LOGUTILS_SAVE_PATH) // 设置有效路径 .setFileFilter(LogUtils.V); // 允许所有级别 } private fun initCrashUtils() { CrashUtils.init(CRASHUTILS_SAVE_PATH, object : CrashUtils.OnCrashListener { override fun onCrash(crashInfo: CrashUtils.CrashInfo?) { LogUtils.e("crash", crashInfo.toString()) } }) } private fun initSmartRefreshLayout() { //设置全局的Header构建器 SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, _ -> val header = ClassicsHeader(context) header.setDrawableSize(20f) // header.setFinishDuration(0) header.setTextSizeTitle(12f) header.setTextSizeTime(10f) header } //设置全局的Footer构建器 SmartRefreshLayout.setDefaultRefreshFooterCreator { context, _ -> val classicsFooter = ClassicsFooter(context) classicsFooter.setDrawableSize(20f) // classicsFooter.setFinishDuration(0) classicsFooter.setTextSizeTitle(12f) //指定为经典Footer,默认是 BallPulseFooter classicsFooter } } fun getAppContent(): String { return APP_CONENT } }