FoodCookingApp.kt 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package com.develop.foodcooking
  2. import android.annotation.SuppressLint
  3. import android.content.Context
  4. import android.content.Intent
  5. import android.net.Uri
  6. import android.os.PowerManager
  7. import android.provider.Settings
  8. import com.blankj.utilcode.util.AppUtils
  9. import com.blankj.utilcode.util.PathUtils
  10. import com.blankj.utilcode.util.ResourceUtils
  11. import com.blankj.utilcode.util.Utils
  12. import com.develop.base.app.BaseApp
  13. import com.develop.base.util.MMkvUtils
  14. import com.develop.common.data_repo.FoodDataProvider
  15. import com.develop.common.data_repo.net.Api
  16. import com.develop.common.data_repo.net.converter.SerializationConverter
  17. import com.develop.common.data_repo.net.interceptor.FoodRequestInterceptor
  18. import com.develop.common.food_sdk.GlobalDevEvent
  19. import com.develop.common.food_sdk.SerialPortUtils
  20. import com.develop.common.utils.compat.CategoryTabViewLayoutCompat
  21. import com.develop.common.utils.compat.ClassicsFooterCompat
  22. import com.develop.common.utils.compat.FoodContentViewCompat
  23. import com.develop.common.utils.compat.RecyclerViewCompat
  24. import com.develop.common.utils.compat.ShapeableImageViewCompat
  25. import com.develop.common.utils.compat.SmartRefreshLayoutCompat
  26. import com.develop.common.utils.compat.StartViewCompat
  27. import com.drake.net.convert.NetConverter
  28. import com.drake.net.interceptor.RequestInterceptor
  29. import com.drake.net.interfaces.NetErrorHandler
  30. import com.kuyuntech.cofarcooking.device.sdk.constant.core.DevStatus
  31. import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevStatusEvent
  32. import com.kuyuntech.cofarcooking.device.sdk.util.core.CofarSDK
  33. import org.alee.component.skin.compat.ConstraintLayoutCompat
  34. import org.alee.component.skin.page.WindowManager
  35. import org.alee.component.skin.service.Config
  36. import org.alee.component.skin.service.IOptionFactory
  37. import org.alee.component.skin.service.IThemeSkinOption
  38. import org.greenrobot.eventbus.Subscribe
  39. import java.io.File
  40. class FoodCookingApp : BaseApp() {
  41. companion object {
  42. init {
  43. Config.getInstance().skinMode = Config.SkinMode.REPLACE_ALL
  44. Config.getInstance().performanceMode = Config.PerformanceMode.EXPERIENCE_FIRST
  45. ConstraintLayoutCompat.init()
  46. RecyclerViewCompat.init()
  47. SmartRefreshLayoutCompat.init()
  48. ShapeableImageViewCompat.init()
  49. StartViewCompat.init()
  50. }
  51. }
  52. var mWakeLock: PowerManager.WakeLock? = null
  53. private lateinit var pm: PowerManager
  54. var minute = 0
  55. override fun onCreate() {
  56. super.onCreate()
  57. ResourceUtils.copyFileFromAssets(
  58. ASSETS_NIGHT_SKIN_PACK,
  59. SKIN_PACK_PATH + NIGHT_SKIN_PACK_NAME
  60. )
  61. WindowManager.getInstance().init(this, OptionFactory())
  62. SerialPortUtils.init()
  63. CofarSDK.register(this)
  64. CofarSDK.stopNative()
  65. // val powerManager = getSystemService(POWER_SERVICE) as PowerManager
  66. // val wakeLock: PowerManager.WakeLock =
  67. // powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "motionDetection:keepAwake")
  68. // wakeLock.acquire()
  69. pm = getSystemService(POWER_SERVICE) as PowerManager
  70. minute = MMkvUtils.getInt("ScreenSaver")
  71. if (minute == 0) {
  72. minute = 3
  73. }
  74. Settings.System.putInt(
  75. contentResolver,
  76. Settings.System.SCREEN_OFF_TIMEOUT,
  77. (1000 * 60 * minute).toInt()
  78. )
  79. val uri: Uri = Settings.System
  80. .getUriFor(Settings.System.SCREEN_OFF_TIMEOUT)
  81. contentResolver.notifyChange(uri, null)
  82. }
  83. override fun createHostUrl(): String {
  84. return Api.HOST
  85. }
  86. override fun createRequestInterceptor(): RequestInterceptor {
  87. return FoodRequestInterceptor()
  88. }
  89. override fun createConverter(): NetConverter {
  90. return SerializationConverter()
  91. }
  92. override fun createErrorHandle(): NetErrorHandler {
  93. return NetErrorHandler.DEFAULT
  94. }
  95. override fun attachBaseContext(base: Context?) {
  96. super.attachBaseContext(base)
  97. FoodDataProvider.prepareData(this)
  98. }
  99. override fun onTerminate() {
  100. super.onTerminate()
  101. SerialPortUtils.destroy()
  102. CofarSDK.unregister(this)
  103. }
  104. @SuppressLint("InvalidWakeLockTag")
  105. @Subscribe
  106. @Synchronized
  107. fun globalCoverEvent(event: DevStatusEvent) {
  108. val devInfo = event.devInfo;
  109. val pm = getSystemService(POWER_SERVICE) as PowerManager
  110. if (devInfo.status == DevStatus.RUNNING.toInt() || devInfo.isWeightStatus) {
  111. if (mWakeLock == null) {
  112. mWakeLock = pm.newWakeLock(
  113. PowerManager.SCREEN_BRIGHT_WAKE_LOCK or PowerManager.ON_AFTER_RELEASE or PowerManager.ACQUIRE_CAUSES_WAKEUP,
  114. "tag"
  115. );
  116. mWakeLock?.setReferenceCounted(false);
  117. mWakeLock?.acquire()
  118. }
  119. } else if (devInfo.status != DevStatus.RUNNING.toInt()) {
  120. if (mWakeLock != null) {
  121. mWakeLock?.release()
  122. mWakeLock = null
  123. val intent = Intent()
  124. intent.action = "android.intent.action.SS_DEVICE_TOUCH"
  125. sendBroadcast(intent)
  126. }
  127. }
  128. GlobalDevEvent.globalCoverEvent(event, pm)
  129. }
  130. }
  131. class OptionFactory : IOptionFactory {
  132. override fun defaultTheme(): Int {
  133. return 0
  134. }
  135. override fun requireOption(theme: Int): IThemeSkinOption? {
  136. return when (theme) {
  137. 1 -> NightOption()
  138. else -> null
  139. }
  140. }
  141. }
  142. class NightOption : IThemeSkinOption {
  143. override fun getStandardSkinPackPath(): LinkedHashSet<String> {
  144. val pathSet = LinkedHashSet<String>()
  145. pathSet.add(SKIN_PACK_PATH + NIGHT_SKIN_PACK_NAME)
  146. return pathSet
  147. }
  148. }
  149. const val NIGHT_SKIN_PACK_NAME = "night.skin"
  150. const val ASSETS_NIGHT_SKIN_PACK = "skins/night.skin"
  151. /**
  152. * 应用存储空间根路径
  153. */
  154. private val ROOT_PATH =
  155. Utils.getApp().getExternalFilesDir(null)?.absolutePath?.run { this + File.separator }
  156. ?: (PathUtils.getExternalAppDataPath() + "." + AppUtils.getAppPackageName() + File.separator)
  157. /**
  158. * 皮肤包根路径
  159. */
  160. val SKIN_PACK_PATH = ROOT_PATH + ".SkinPack" + File.separator