| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- package com.grkj.iscs
- import android.app.AlarmManager
- import android.app.Application
- import android.app.PendingIntent
- import android.content.Context
- import android.content.Intent
- import android.content.res.Configuration
- import android.util.TypedValue
- import ch.qos.logback.classic.Level
- import com.drake.statelayout.StateConfig
- import com.grkj.data.data.EventConstants
- import com.grkj.data.database.DbReadyGate
- import com.grkj.data.database.ISCSDatabase
- import com.grkj.data.di.LogicManager
- import com.grkj.iscs.common.GlobalManager
- import com.grkj.iscs.features.splash.activity.SplashActivity
- import com.grkj.ui_base.service.CheckKeyInfoTask
- import com.grkj.shared.model.EventBean
- import com.grkj.shared.utils.ArcSoftUtil
- import com.grkj.shared.utils.i18n.I18nManager
- import com.grkj.shared.utils.i18n.LanguageCatalog
- import com.grkj.shared.utils.i18n.LanguageStore
- import com.grkj.shared.utils.i18n.source.AssetsCsvSource
- import com.grkj.shared.utils.i18n.source.FileCsvSource
- import com.grkj.ui_base.business.ModbusBusinessManager
- import com.grkj.ui_base.config.ISCSConfig
- import com.grkj.ui_base.utils.ble.BleUtil
- import com.grkj.ui_base.utils.modbus.ModBusController
- import com.kongzue.dialogx.DialogX
- import com.scwang.smart.refresh.footer.ClassicsFooter
- import com.scwang.smart.refresh.header.ClassicsHeader
- import com.scwang.smart.refresh.layout.SmartRefreshLayout
- import com.sik.cronjob.managers.CronJobScanner
- import com.sik.sikcore.SIKCore
- import com.sik.sikcore.crash.GlobalCrashCatch
- import com.sik.sikcore.extension.toJson
- import com.sik.sikcore.log.LogUtils
- import com.sik.sikcore.thread.ThreadUtils
- import dagger.hilt.android.HiltAndroidApp
- import kotlinx.coroutines.CoroutineScope
- import kotlinx.coroutines.Dispatchers
- import kotlinx.coroutines.launch
- import me.jessyan.autosize.AutoSizeConfig
- import org.greenrobot.eventbus.EventBus
- import org.greenrobot.eventbus.Subscribe
- import org.greenrobot.eventbus.ThreadMode
- import org.slf4j.Logger
- import org.slf4j.LoggerFactory
- import java.util.Locale
- /**
- * 启动入口
- */
- @HiltAndroidApp
- class ISCSApplication : Application() {
- private val logger: Logger = LoggerFactory.getLogger(ISCSApplication::class.java)
- /**
- * 程序创建
- */
- override fun onCreate() {
- super.onCreate()
- DialogX.init(this)
- SIKCore.init(this)
- //todo 模拟器不支持
- ArcSoftUtil.checkActiveStatus(this)
- ArcSoftUtil.initEngine(this)
- if (!EventBus.getDefault().isRegistered(this)) {
- EventBus.getDefault().register(this)
- }
- GlobalCrashCatch.instance.init(this).setGlobalCrashHandlerListener {
- logger.error("异常发生", it)
- true
- }
- if (ISCSConfig.DEBUG) {
- LogUtils.setGlobalLogLevel(Level.DEBUG)
- }
- System.loadLibrary("sqlcipher") // 新库必须手动加载
- I18nManager.init(
- defaultLocale = LanguageStore.resolveEffectiveLocale(this),
- initialSources = arrayOf(
- com.grkj.shared.utils.i18n.source.AssetsCsvSource(this, "i18n", mergedMode = false),
- com.grkj.shared.utils.i18n.source.FileCsvSource(this, "i18n", mergedMode = false)
- ),
- eagerLoad = true
- )
- // 建议:可提前刷新一下目录(不强制)
- LanguageCatalog.refresh(this)
- // 若“跟随系统”,监听系统语言变化
- LanguageStore.registerSystemLocaleObserver(this)
- if (ISCSConfig.isInit) {
- BleUtil.instance?.initBle(this)
- }
- AutoSizeConfig.getInstance().isCustomFragment = true
- StateConfig.emptyLayout = com.grkj.ui_base.R.layout.layout_empty
- ThreadUtils.runOnIO {
- DbReadyGate.await()
- ModbusBusinessManager.registerMainListener()
- LogicManager.init(this@ISCSApplication)
- }
- }
- @Subscribe(threadMode = ThreadMode.MAIN)
- open fun onEvent(event: EventBean<*>) {
- when (event.code) {
- EventConstants.EVENT_START_MODBUS -> {
- ThreadUtils.runOnIO {
- ModBusController.interruptReadTrashBinStatus(false)
- ModBusController.start()
- logger.info("Application 连接完成,开始初始化")
- ModBusController.initDevicesStatus()
- }
- }
- EventConstants.EVENT_RESTART_APP -> {
- scheduleRestart(this)
- }
- EventConstants.EVENT_START_MODBUS_COMPLETE -> {
- if (ISCSConfig.isInit) {
- val jobList = CronJobScanner.scanJobs(CheckKeyInfoTask())
- logger.info("扫描任务结果:${jobList.toJson()},开始注册")
- GlobalManager.cronJobManager.registerJobs(jobList)
- }
- }
- }
- }
- /**
- * 计划重启
- */
- private fun scheduleRestart(context: Context) {
- val restartIntent = Intent(context, SplashActivity::class.java).apply {
- addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
- }
- val pi = PendingIntent.getActivity(
- context,
- 0,
- restartIntent,
- PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE
- )
- val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
- am.setExact(
- AlarmManager.RTC,
- System.currentTimeMillis() + 2000,
- pi
- )
- Runtime.getRuntime().exit(0)
- }
- override fun onTerminate() {
- if (EventBus.getDefault().isRegistered(this)) {
- EventBus.getDefault().unregister(this)
- }
- super.onTerminate()
- }
- //static 代码段可以防止内存泄露
- init {
- //设置全局的Header构建器
- SmartRefreshLayout.setDefaultRefreshHeaderCreator { context, layout ->
- ClassicsHeader(context).apply {
- if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
- setTextSizeTime(TypedValue.COMPLEX_UNIT_SP, 18 * 1.7f)
- setTextSizeTitle(TypedValue.COMPLEX_UNIT_SP, 18 * 1.7f)
- } else {
- setTextSizeTime(TypedValue.COMPLEX_UNIT_SP, 18 * 1.2f)
- setTextSizeTitle(TypedValue.COMPLEX_UNIT_SP, 18 * 1.2f)
- }
- } //.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header
- }
- //设置全局的Footer构建器
- SmartRefreshLayout.setDefaultRefreshFooterCreator { context, p1 -> //指定为经典Footer,默认是 BallPulseFooter
- ClassicsFooter(context).apply {
- if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
- setTextSizeTitle(TypedValue.COMPLEX_UNIT_SP, 18 * 1.7f)
- setDrawableSize(20f * 1.7f)
- } else {
- setTextSizeTitle(TypedValue.COMPLEX_UNIT_SP, 18 * 1.2f)
- setDrawableSize(20f * 1.2f)
- }
- }
- }
- }
- }
|