ModesDetailActivity.kt 109 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995
  1. package com.develop.step.ui
  2. import android.annotation.SuppressLint
  3. import android.content.Context
  4. import android.content.Intent
  5. import android.os.Bundle
  6. import android.os.Handler
  7. import android.os.SystemClock
  8. import android.util.Log
  9. import android.view.Gravity
  10. import android.view.KeyEvent
  11. import android.view.KeyEvent.ACTION_DOWN
  12. import android.view.LayoutInflater
  13. import android.view.MotionEvent
  14. import android.view.View
  15. import android.widget.RelativeLayout
  16. import androidx.appcompat.widget.AppCompatTextView
  17. import androidx.core.graphics.drawable.DrawableCompat
  18. import androidx.databinding.ViewDataBinding
  19. import com.alibaba.android.arouter.facade.annotation.Route
  20. import com.blankj.utilcode.util.ToastUtils
  21. import com.bumptech.glide.Glide
  22. import com.develop.base.ext.getModelNum
  23. import com.develop.base.ext.getSN
  24. import com.develop.base.ext.isBrand011A
  25. import com.develop.base.ext.isBrand062
  26. import com.develop.base.ext.isNightTheme
  27. import com.develop.base.ext.navigateTo
  28. import com.develop.base.ext.runOnMainThread
  29. import com.develop.base.ext.setGone
  30. import com.develop.base.ext.setVisible
  31. import com.develop.base.ext.src
  32. import com.develop.base.ext.updateText
  33. import com.develop.base.util.ThreadUtils
  34. import com.develop.base.util.TopResumedAtyHolder
  35. import com.develop.base.util.TuyaEventEntity
  36. import com.develop.base.widgets.CommonPopupWindow
  37. import com.develop.common.bean.TuyaEvent
  38. import com.develop.common.bean.WorkMode
  39. import com.develop.common.data_repo.FoodDataProvider
  40. import com.develop.common.data_repo.db.ModesType
  41. import com.develop.common.dialog.CancelConfirmDialog
  42. import com.develop.common.dialog.PotCoverUnlockedDialog
  43. import com.develop.common.event.CookStepEvent
  44. import com.develop.common.food_sdk.FloatWindowManager
  45. import com.develop.common.food_sdk.FoodSdkUtils
  46. import com.develop.common.router.Screens
  47. import com.develop.common.tag.MODE_TYPE
  48. import com.develop.common.tag.NUMBER_TAG
  49. import com.develop.common.tag.PRESS_DOWN_KEY_CODE
  50. import com.develop.common.tag.SOURCE_TAG
  51. import com.develop.common.tag.TURN_DOWN_KEY_CODE
  52. import com.develop.common.tag.TURN_UP_KEY_CODE
  53. import com.develop.common.ui.CommonBVMActivity
  54. import com.develop.common.utils.CofarUtils
  55. import com.develop.common.utils.ConfigUtils
  56. import com.develop.common.utils.StringUtils
  57. import com.develop.common.utils.getTimeStr
  58. import com.develop.common.widget.DirectionView
  59. import com.develop.common.widget.EggsSelectorLayout
  60. import com.develop.common.widget.RingControlView
  61. import com.develop.common.widget.TimePickerView
  62. import com.develop.step.CookSettingType
  63. import com.develop.step.R
  64. import com.develop.step.databinding.ActivityModeDetailBinding
  65. import com.develop.step.viewmodel.ModesViewMode
  66. import com.drake.net.time.Interval
  67. import com.kuyuntech.cofarcooking.device.sdk.constant.core.CommonEventTypes
  68. import com.kuyuntech.cofarcooking.device.sdk.constant.core.DevModes
  69. import com.kuyuntech.cofarcooking.device.sdk.constant.core.DevStatus
  70. import com.kuyuntech.cofarcooking.device.sdk.constant.core.HeatModes
  71. import com.kuyuntech.cofarcooking.device.sdk.constant.core.MotorDirections
  72. import com.kuyuntech.cofarcooking.device.sdk.constant.core.WorkModes
  73. import com.kuyuntech.cofarcooking.device.sdk.devmode.core.BaseDevMode
  74. import com.kuyuntech.cofarcooking.device.sdk.devmode.core.Kettle
  75. import com.kuyuntech.cofarcooking.device.sdk.devmode.core.Knead
  76. import com.kuyuntech.cofarcooking.device.sdk.devmode.core.SlowCooking010D
  77. import com.kuyuntech.cofarcooking.device.sdk.devmode.core.SlowCooking033F
  78. import com.kuyuntech.cofarcooking.device.sdk.eventbus.core.DevInfo
  79. import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevCommonEvent
  80. import com.kuyuntech.cofarcooking.device.sdk.eventbus.event.DevStatusEvent
  81. import com.kuyuntech.cofarcooking.device.sdk.util.core.CofarSDK
  82. import org.greenrobot.eventbus.Subscribe
  83. import org.greenrobot.eventbus.ThreadMode
  84. import java.util.concurrent.TimeUnit
  85. /**
  86. * 模式详情页
  87. */
  88. @Route(path = Screens.Cook.COOK_MODES)
  89. class ModesDetailActivity : CommonBVMActivity<ActivityModeDetailBinding, ModesViewMode>() {
  90. private var modeType = ModesType.CHOP.name
  91. private var lastModeType = ModesType.CHOP.name
  92. private var userChanging = false //当前是否用户在操作
  93. private var currDevInfo = DevInfo()
  94. private var modeChange = false
  95. private var mSettingInstId = ""
  96. private var mRunningInstId = ""
  97. private var mRunningState = 0
  98. private var currentTemp = 0
  99. private var currentMotorGer = 0
  100. private var currentWaterGear = 0;
  101. private var maxTemp = 0
  102. private var minTemp = 0
  103. private var maxMotorGear = 0
  104. private var minMotorGear = 0
  105. private var maxWaterGear = 0
  106. private var minWaterGear = 0
  107. private var startMotorGer = 0
  108. private var currTime = 0L
  109. private var maxTime = 0L
  110. private var minTime = 0L
  111. private var isTempChange = false
  112. private var isTimeChange = false
  113. private var isMotorGearChange = false
  114. private var isMotorDirectionGearChange = false
  115. private var isWaterGearChange = false
  116. private var initModeData = false
  117. private var pressStartTime = -1L
  118. private var canStart = true
  119. private var whereIndex = -1
  120. private var modeName = ""
  121. private var opMode = "HAND"
  122. lateinit var ctx: Context
  123. private var confirmType: Boolean = false
  124. private var eggConfirm: AppCompatTextView? = null
  125. private var potCloverInterval: Interval? = null
  126. private var workMode: WorkMode? = null
  127. private var sdkDevMode: String = ""
  128. private var isClickType = 0
  129. private var isDevModes = true
  130. private var isModelNum = ""
  131. private var devMode = ""
  132. private var is062 = false
  133. private var is011 = false
  134. private var isResetZero = -1 //初始扭橙的值
  135. private var sn = getSN()
  136. private var keep: Boolean = false
  137. private var mWeightTime: Long = 0 //防止客户重复点击称重
  138. private var isWeightNum: Float = -50F
  139. private lateinit var baseMode: BaseDevMode
  140. private val deviceStateDialog by lazy {
  141. CancelConfirmDialog()
  142. }
  143. private val backRequestDialog by lazy {
  144. CancelConfirmDialog()
  145. }
  146. private val overrideModeDialog by lazy {
  147. CancelConfirmDialog()
  148. }
  149. private val eggsPopupWindow by lazy {
  150. CommonPopupWindow.ViewBuilder<EggsSelectorLayout>()
  151. .width(RelativeLayout.LayoutParams.WRAP_CONTENT)
  152. .height(RelativeLayout.LayoutParams.WRAP_CONTENT)
  153. .outsideTouchable(true).focusable(true).alpha(0.5f).clippingEnabled(false)
  154. .view(EggsSelectorLayout(this)).intercept { popupWindow, view ->
  155. }.onShowBefore { popupWindow, view ->
  156. var pop_eggs_all_layout: RelativeLayout =
  157. view.findViewById(com.develop.common.R.id.pop_eggs_all_layout)
  158. pop_eggs_all_layout.setOnClickListener {
  159. // popupWindow.dismiss()
  160. }
  161. eggConfirm = view.findViewById(com.develop.common.R.id.egg_btn_confirm)
  162. eggConfirm?.setOnClickListener {
  163. var size = view.getSizeCheckType()
  164. var hardness = view.getHardnessCheckType()
  165. setEggTime(size, hardness)
  166. popupWindow.dismiss()
  167. }
  168. }.build<ViewDataBinding>(this)
  169. }
  170. override fun createViewModel(): ModesViewMode {
  171. return getViewModel(ModesViewMode::class.java)
  172. }
  173. override fun createViewBinding(inflater: LayoutInflater): ActivityModeDetailBinding {
  174. return ActivityModeDetailBinding.inflate(inflater)
  175. }
  176. private fun turnDevModeUI() {
  177. if (CofarSDK.devInfo().devMode == DevModes.AIR_FRYER) {
  178. binding.clCookTemp.visibility = View.VISIBLE
  179. binding.clCookTime.visibility = View.VISIBLE
  180. //隐藏点击
  181. binding.clCookDirection.visibility = View.GONE;
  182. binding.clCookSpeed.visibility = View.GONE;
  183. /**
  184. * 2023.11.21 空炸部分把喷水功能隐藏
  185. * */
  186. binding.clCookWater.visibility = View.GONE
  187. // binding.clCookWater.visibility = View.VISIBLE
  188. binding.ivTurbo.visibility = View.GONE
  189. //中间要有个占位
  190. binding.clTextView.visibility = View.INVISIBLE
  191. }
  192. if (CofarSDK.devInfo().devMode == DevModes.SOUP) {
  193. //隐藏点击
  194. binding.clCookTemp.visibility = View.VISIBLE
  195. binding.clCookTime.visibility = View.VISIBLE
  196. binding.clCookDirection.visibility = View.VISIBLE;
  197. binding.clCookSpeed.visibility = View.VISIBLE;
  198. binding.clCookWater.visibility = View.GONE
  199. // binding.ivTurbo.visibility = View.VISIBLE
  200. binding.clCookWater.visibility = View.GONE
  201. binding.clTextView.visibility = View.GONE
  202. }
  203. // if (CofarSDK.devInfo().devMode=="AF_AIR_FRYER"){
  204. // binding.clCookDirection.visibility = View.GONE;
  205. // binding.clCookSpeed.visibility = View.GONE;
  206. // /**
  207. // * 2023.11.21 空炸部分把喷水功能隐藏
  208. // * */
  209. // binding.clCookWater.visibility = View.GONE
  210. // binding.ivTurbo.visibility = View.GONE
  211. // }
  212. }
  213. override fun onCreate(savedInstanceState: Bundle?) {
  214. super.onCreate(savedInstanceState)
  215. hasShowScreenSaver = true
  216. configLock = true
  217. is062 = isBrand062()
  218. is011 = isBrand011A()
  219. isResetZero = CofarSDK.devInfo().resetZero.toInt()
  220. devMode = CofarSDK.devInfo().devMode
  221. isModelNum = getModelNum()
  222. if (!isNightTheme()) {
  223. var color =
  224. if (is062) com.develop.common.R.color.white else if (is011) com.develop.common.R.color.view_change_011 else com.develop.common.R.color.view_change
  225. binding.ivBack.drawable?.apply {
  226. DrawableCompat.setTint(
  227. this,
  228. resources.getColor(color)
  229. )
  230. }
  231. }
  232. //2023.12.11 000A客户需要隐藏电磁阀
  233. if (sn.startsWith("063")) {
  234. binding.tvCount.setVisible()
  235. binding.ivPotCover.setVisible()
  236. } else {
  237. binding.tvCount.setGone()
  238. binding.ivPotCover.setGone()
  239. }
  240. // if (!getSN().startsWith("000")) {
  241. // binding.tvCount.setGone()
  242. // binding.ivPotCover.setGone()
  243. // }
  244. turnDevModeUI();
  245. viewModel.modeType = intent.extras?.getString(MODE_TYPE, ModesType.CHOP.name) ?: ""
  246. modeName = intent.extras?.getString("mode_name", "") ?: ""
  247. opMode = intent.extras?.getString("OP_MODE", "HAND") ?: "HAND"
  248. keep = intent.extras?.getBoolean("keep", false) ?: false
  249. if (keep){
  250. startMotorGer = intent.extras?.getInt("startMotorGer", 0) ?: 0
  251. currentMotorGer = startMotorGer
  252. }
  253. viewModel.lastModeType = viewModel.modeType
  254. lastModeType = viewModel.modeType
  255. modeType = lastModeType
  256. workMode = ConfigUtils.getMode(modeType)
  257. sdkDevMode = CofarSDK.devInfo().devMode
  258. /**
  259. * 需求:扭橙模式一打开,如果没有扭橙汁配件时需要提示
  260. * CofarSDK.devInfo().resetZero.toInt()==1 代表已经是扭橙汁配件
  261. * */
  262. if (modeType == WorkModes.CITRUS_JUICER && CofarSDK.devInfo().resetZero.toInt() != 1) {
  263. showMsgDialog(resources.getString(com.develop.common.R.string.dev_dice_and_peel_tips))
  264. }
  265. /**
  266. * 需求:非扭橙模式打开点击运行,且是扭橙的配件时需要提示用户
  267. * CofarSDK.devInfo().resetZero.toInt()==1 代表已经是扭橙汁配件
  268. * */
  269. if (modeType != WorkModes.CITRUS_JUICER && CofarSDK.devInfo().resetZero.toInt() == 1) {
  270. showMsgDialog(resources.getString(com.develop.common.R.string.dev_dice_and_peel_tips))
  271. }
  272. /**
  273. * 需求 切丁/去皮程序逻辑是点击进入程序界面时弹窗提示
  274. *
  275. * */
  276. if (modeType == WorkModes.DICING || modeType == WorkModes.POTATO_PEELER) {
  277. showMsgDialog(resources.getString(com.develop.common.R.string.dev_dice_and_peel_tips))
  278. }
  279. if (!isNightTheme()) {
  280. if (workMode == null) {
  281. binding.ivBanner.setImageResource(com.develop.common.R.drawable.ic_mode_diy)
  282. // Glide.with(this).load(com.develop.common.R.drawable.ic_mode_diy)
  283. // .into(binding.ivBanner)
  284. } else {
  285. binding.ivBanner.setImageResource(
  286. resources.getIdentifier(
  287. workMode?.bg,
  288. "drawable",
  289. this.packageName
  290. )
  291. )
  292. // Glide.with(this).load(
  293. // resources.getIdentifier(
  294. // workMode?.bg,
  295. // "drawable",
  296. // this.packageName
  297. // )
  298. // ).into(binding.ivBanner)
  299. }
  300. }
  301. if (sn.startsWith("011")) {
  302. binding.turboText.text =
  303. resources.getString(com.develop.common.R.string.press_the_button_011)
  304. binding.tvWeightTare.text = resources.getString(com.develop.common.R.string.tare_011)
  305. if (viewModel.modeType == "DICING" || viewModel.modeType == "CITRUS_JUICER" || viewModel.modeType == "POTATO_PEELER") {
  306. binding.ivTurbo.visibility = View.INVISIBLE
  307. binding.ivWeight.visibility = View.INVISIBLE
  308. }
  309. }
  310. binding.tvWeightNum.setOnClickListener {
  311. CofarSDK.startWeight()
  312. }
  313. //初始化模式数据
  314. initModeData(lastModeType)
  315. initData()
  316. initListener()
  317. ThreadUtils.runOnMainThread({ configLock = false }, 500)
  318. ctx = this
  319. }
  320. override fun onDestroy() {
  321. super.onDestroy()
  322. isWidget = false
  323. viewModel.stopTurbo()
  324. viewModel.cancelAnimator()
  325. hasShowScreenSaver = false
  326. }
  327. /**
  328. * 旋转物理键
  329. */
  330. var lastKeyTime = 0L
  331. override fun dispatchKeyEvent(event: KeyEvent): Boolean {
  332. val spend = (System.currentTimeMillis() - lastKeyTime);
  333. if (spend < 10) {
  334. return super.dispatchKeyEvent(event);
  335. }
  336. lastKeyTime = System.currentTimeMillis();
  337. val currentStep = viewModel.currentStep.value
  338. Log.d("aaaaaa", "${event.keyCode}")
  339. if (event.action != KeyEvent.ACTION_UP) {
  340. when (event.keyCode) {
  341. //旋转+
  342. TURN_UP_KEY_CODE -> {
  343. when (currentStep) {
  344. CookSettingType.TEMP_SETTING -> {
  345. if (isTempChange) {
  346. /**
  347. * 当后台点进来模式页面,currentTemp为0故在这重新set值
  348. * */
  349. if (currentTemp == 0 && keep) {
  350. // temp 当前温度 目标温度 targetTemp
  351. currentTemp = if (CofarSDK.devInfo().temp > baseMode.minTemp) {
  352. CofarSDK.devInfo().temp.toInt()
  353. } else {
  354. baseMode.minTemp
  355. }
  356. }
  357. //当前调节温度
  358. currentTemp += CofarSDK.getTempInterval()
  359. if (currentTemp > maxTemp) {
  360. currentTemp = maxTemp
  361. }
  362. currentTemp = FoodSdkUtils.parseTemp(currentTemp.toShort()).toInt();
  363. Log.d("aaaaaa++++", "curr=${currentTemp} max=${maxTemp}")
  364. binding.tempRingView.updateProgress(currentTemp)
  365. tempRingEvent(currentTemp)
  366. }
  367. }
  368. CookSettingType.SPEED_SETTING -> {
  369. if (isMotorGearChange) {
  370. //当前调节转速
  371. currentMotorGer += 1
  372. if (currentMotorGer > maxMotorGear) {
  373. currentMotorGer = maxMotorGear
  374. }
  375. binding.speedRingView.updateProgress(currentMotorGer)
  376. motorGearSpeedEvent(currentMotorGer)
  377. }
  378. }
  379. CookSettingType.WATER_SPRY -> {
  380. if (isWaterGearChange) {
  381. //当前调节转速
  382. currentWaterGear += 1
  383. if (currentWaterGear > maxWaterGear) {
  384. currentWaterGear = maxWaterGear
  385. }
  386. binding.waterRingView.updateProgress(currentWaterGear)
  387. waterGearSpeedEvent(currentWaterGear)
  388. }
  389. }
  390. CookSettingType.TIME_SETTING -> {
  391. if (isTimeChange) {
  392. //当前调节时间
  393. //dealWithTimeByOperation(true)
  394. handleRotateTimeChange(true)
  395. }
  396. }
  397. CookSettingType.DIRECTION_SETTING -> {
  398. motorGearDirectionClick(DirectionView.Direction.RIGHT)
  399. }
  400. else -> {
  401. }
  402. }
  403. }
  404. //旋转-
  405. TURN_DOWN_KEY_CODE -> {
  406. when (currentStep) {
  407. CookSettingType.TEMP_SETTING -> {
  408. if (isTempChange) {
  409. /**
  410. * 当后台点进来模式页面,currentTemp为0故在这重新set值
  411. * */
  412. if (currentTemp == 0 && keep) {
  413. // temp 当前温度 目标温度 targetTemp
  414. currentTemp = if (CofarSDK.devInfo().temp > baseMode.minTemp) {
  415. CofarSDK.devInfo().temp.toInt()
  416. } else {
  417. baseMode.minTemp + CofarSDK.getTempInterval()
  418. }
  419. }
  420. //当前调节温度
  421. currentTemp -= CofarSDK.getTempInterval()
  422. if (currentTemp < minTemp) {
  423. currentTemp = minTemp
  424. }
  425. if (currentTemp < 35) { //小于37度置0
  426. currentTemp = 0
  427. }
  428. currentTemp = FoodSdkUtils.parseTemp(currentTemp.toShort()).toInt();
  429. Log.d("aaaaaa------", "curr=${currentTemp} min=${minTemp}")
  430. binding.tempRingView.updateProgress(currentTemp)
  431. tempRingEvent(currentTemp)
  432. }
  433. }
  434. CookSettingType.SPEED_SETTING -> {
  435. if (isMotorGearChange) {
  436. //当前调节转速
  437. currentMotorGer -= 1
  438. if (currentMotorGer < minMotorGear) {
  439. currentMotorGer = minMotorGear
  440. }
  441. binding.speedRingView.updateProgress(currentMotorGer)
  442. motorGearSpeedEvent(currentMotorGer)
  443. }
  444. }
  445. CookSettingType.WATER_SPRY -> {
  446. if (isWaterGearChange) {
  447. //当前调节转速
  448. currentWaterGear -= 1
  449. if (currentWaterGear > maxWaterGear) {
  450. currentWaterGear = maxWaterGear
  451. }
  452. binding.waterRingView.updateProgress(currentWaterGear)
  453. waterGearSpeedEvent(currentWaterGear)
  454. }
  455. }
  456. CookSettingType.TIME_SETTING -> {
  457. if (isTimeChange) {
  458. //当前调节时间
  459. //dealWithTimeByOperation(false)
  460. handleRotateTimeChange(false)
  461. }
  462. }
  463. CookSettingType.DIRECTION_SETTING -> {
  464. motorGearDirectionClick(DirectionView.Direction.LEFT)
  465. }
  466. else -> {
  467. }
  468. }
  469. }
  470. }
  471. }
  472. return super.dispatchKeyEvent(event)
  473. }
  474. /**
  475. * 物理键按下事件
  476. */
  477. override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
  478. Log.d("TAG onkey", "物理键onKeyDown")
  479. if (keyCode == PRESS_DOWN_KEY_CODE) {
  480. //
  481. // if (backRequestDialog.isShow){
  482. // backRequestDialog.onConfirmClick()
  483. // }else if (overrideModeDialog.isShow){
  484. // overrideModeDialog.onConfirmClick()
  485. // }
  486. //当前是turbo模式下
  487. if (viewModel.modeType == ModesType.TURBO.name) {
  488. turboDownEvent()
  489. } else {
  490. if (pressStartTime == -1L) {
  491. pressStartTime = System.currentTimeMillis()
  492. }
  493. if (pressStartTime != -1L && (System.currentTimeMillis() - pressStartTime) >
  494. 1000 && event.keyCode == PRESS_DOWN_KEY_CODE
  495. ) {
  496. this.onKeyLongPress(keyCode, event);
  497. event.startTracking()
  498. pressStartTime = -1L
  499. canStart = false;
  500. return false
  501. }
  502. }
  503. }
  504. return super.onKeyDown(keyCode, event)
  505. }
  506. /**
  507. * 物理键长按事件
  508. */
  509. override fun onKeyLongPress(keyCode: Int, event: KeyEvent?): Boolean {
  510. if (CofarSDK.devInfo().isWeightStatus) {
  511. weightClearClick()
  512. } else if (mRunningState == DevStatus.RUNNING.toInt() || currDevInfo.status == DevStatus.PAUSE.toInt()) {
  513. stopClick()
  514. } else if (mRunningState == DevStatus.STOP.toInt()) {
  515. setResult(50, Intent().putExtra("type", true))
  516. finish()
  517. // startClick()
  518. }
  519. return super.onKeyLongPress(keyCode, event)
  520. }
  521. /**
  522. * 物理键离开事件
  523. */
  524. override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
  525. if (viewModel.modeType == ModesType.TURBO.name && event.keyCode == PRESS_DOWN_KEY_CODE) {
  526. //当前是turbo模式下,并且是物理键按下
  527. Log.d("dddddd", "物理键Up")
  528. turboUpEvent()
  529. return false
  530. }
  531. pressStartTime = -1L
  532. if (!CofarSDK.devInfo().isWeightStatus && viewModel.modeType != ModesType.TURBO.name && event.keyCode == PRESS_DOWN_KEY_CODE && canStart) {
  533. //非turbo模式
  534. if (userChanging && currDevInfo.status.toByte() != DevStatus.STOP) {
  535. //用户调节中
  536. confirmClick()
  537. } else {
  538. if (mRunningState == DevStatus.RUNNING.toInt()) {
  539. pauseClick()
  540. } else if (currDevInfo.status == DevStatus.PAUSE.toInt()) {
  541. resumeClick();
  542. } else if (mRunningState == DevStatus.STOP.toInt()) {
  543. startClick()
  544. }
  545. }
  546. }
  547. if (CofarSDK.devInfo().isWeightStatus) {
  548. weightClearClick();
  549. }
  550. canStart = true
  551. return super.onKeyUp(keyCode, event)
  552. }
  553. @Subscribe
  554. fun onTuyaEvent(event: TuyaEvent) {
  555. if ("start" == event.type) {
  556. if (DevStatus.PAUSE.toInt() == CofarSDK.devInfo().status) {
  557. CofarSDK.confirm()
  558. resumeClick()
  559. } else {
  560. startClick(false)
  561. }
  562. }
  563. if ("stop" == event.type) {
  564. stopClick(false)
  565. }
  566. if ("pause" == event.type) {
  567. pauseClick()
  568. }
  569. if ("change_time" == event.type) {
  570. ThreadUtils.runOnMainThread {
  571. //当前调节时间
  572. var targetTime = currDevInfo.targetTime
  573. if (currDevInfo.remainTime != 0) {
  574. targetTime = currDevInfo.remainTime
  575. }
  576. if (currDevInfo.targetTimeBuffer != -1) {
  577. targetTime = currDevInfo.targetTimeBuffer
  578. }
  579. if (targetTime < 0) {
  580. targetTime = 0;
  581. }
  582. if (targetTime > currDevInfo.mode.maxTime) {
  583. targetTime = currDevInfo.mode.maxTime
  584. }
  585. if (targetTime < currDevInfo.mode.minTime) {
  586. targetTime = currDevInfo.mode.minTime
  587. }
  588. val sec = targetTime % 60
  589. val min = ((targetTime / 60) % 60)
  590. val hour = (targetTime / 3600)
  591. var time = ""
  592. if (hour > 0) {
  593. time += if (hour < 10) {
  594. "0${hour}"
  595. } else {
  596. "$hour"
  597. }
  598. time += if (min < 10) {
  599. ":0${min}"
  600. } else {
  601. ":${min}"
  602. }
  603. } else {
  604. time += if (min < 10) {
  605. "0${min}"
  606. } else {
  607. "$min"
  608. }
  609. time += if (sec < 10) {
  610. ":0${sec}"
  611. } else {
  612. ":${sec}"
  613. }
  614. }
  615. rollTimeEvent(hour, min, sec, time, setByUser = true, "change_time")
  616. currDevInfo.apply {
  617. updateTimeUI(
  618. mode.minTime,
  619. mode.maxTime,
  620. remainTime,
  621. targetTime.toLong(),
  622. true, false, "change_time"
  623. )
  624. }
  625. binding.clSetTime.setTimeInternal(
  626. hour,
  627. min,
  628. sec,
  629. changeSetting = true,
  630. setByUser = true
  631. )
  632. }
  633. }
  634. if ("change_temp" == event.type) {
  635. ThreadUtils.runOnMainThread({
  636. updateTempUI(
  637. minTemp.toFloat(),
  638. maxTemp.toFloat(),
  639. if (currDevInfo.status == DevStatus.STOP.toInt()) currDevInfo.targetTemp.toInt()
  640. else currDevInfo.temp.toInt(),
  641. if (currDevInfo.targetTempBuffer.toInt() != -1) currDevInfo.targetTempBuffer.toString() else currDevInfo.targetTemp.toString(),
  642. isTempChange,
  643. focusUpdate = true
  644. )
  645. }, 500)
  646. }
  647. }
  648. //======================================烹饪设备回调监听==================================\\
  649. @Subscribe
  650. fun onDevCommonEvent(event: DevCommonEvent) {
  651. if (configLock) {
  652. return;
  653. }
  654. ThreadUtils.runOnMainThread({
  655. //currDevInfo.targetTime,
  656. // currDevInfo.targetTime.toLong()
  657. if (CommonEventTypes.MOTOR_GEAR_RATHER_THEN_7 == event.type) {
  658. CofarSDK.cfgTime((10 * 60))
  659. currDevInfo.mode.apply {
  660. updateTimeUI(
  661. minTime,
  662. maxTime,
  663. if (currDevInfo.status == DevStatus.STOP.toInt()) if (currDevInfo.targetTimeBuffer != -1) currDevInfo.targetTimeBuffer else currDevInfo.targetTime
  664. else currDevInfo.remainTime,
  665. if (currDevInfo.targetTimeBuffer != -1) currDevInfo.targetTimeBuffer.toLong() else currDevInfo.targetTime.toLong(),
  666. isTimeChange = true,
  667. focusUpdate = true, "onDevCommonEvent"
  668. )
  669. }
  670. }
  671. if (CommonEventTypes.MAX_MOTOR_GEAR_RATHER_THEN_WITH_TEMP == event.type) {
  672. CofarSDK.cfgMotorGear(CofarSDK.devInfo().mode.maxMotorWithTemp.toByte())
  673. currDevInfo.mode.apply {
  674. updateMotorGearUI(
  675. minMotorGear.toFloat(),
  676. maxMotorGear.toFloat(),
  677. CofarSDK.devInfo().mode.maxMotorWithTemp,
  678. isMotorGearChange
  679. )
  680. }
  681. }
  682. if (CommonEventTypes.MOTOR_REVERSE_CAN_NOT_RATHER_THEN_3 == event.type) {
  683. CofarSDK.cfgMotorGear(3)
  684. currDevInfo.mode.apply {
  685. updateMotorGearUI(
  686. minMotorGear.toFloat(),
  687. maxMotorGear.toFloat(),
  688. 3,
  689. isMotorGearChange
  690. )
  691. }
  692. }
  693. }, 500)
  694. }
  695. private var potCloverEleStatus = 0
  696. private var currentBgId = com.develop.common.R.drawable.pot_clover_ele_unlock //0是开锁图,1上锁图
  697. @Subscribe(threadMode = ThreadMode.MAIN)
  698. fun onDevStateEvent(event: DevStatusEvent) {
  699. if (!initModeData) {
  700. return
  701. }
  702. Log.d("TAG DevStateEvent", "event:" + event.devInfo.toString())
  703. //由于sdk没有判断E7到E16 需要判断运行和暂停过程中,设备发生故障弹出窗口告知故障
  704. if ((isClickType == DevStatus.RUNNING.toInt() || isClickType == DevStatus.PAUSE.toInt()
  705. || isClickType == DevStatus.STOP.toInt()) && viewModel.modeType != ModesType.WIGHT.name
  706. ) {
  707. if (ConfigUtils.getBooleanErrCode(event.devInfo.errCode.toInt()) && event.devInfo.devMode == DevModes.AIR_FRYER) {
  708. showErrCodeDialog(event.devInfo.errCode.toInt())
  709. isClickType = event.devInfo.status
  710. return
  711. }
  712. }
  713. //devInfo.potCloverStatus 0是合盖,1是没盒盖
  714. //处理扭橙逻辑 一进来是扭橙盖,重新打开,重新闭合 没办法跳转到扭橙页面
  715. if (event.devInfo.potCloverStatus.toInt() == 1) {
  716. isResetZero = event.devInfo.resetZero.toInt()
  717. }
  718. //处理扭橙运行过程中打开盖子还倒计时,估要调用SDK stop方法
  719. if (modeType == WorkModes.CITRUS_JUICER && isClickType == DevStatus.RUNNING.toInt() && event.devInfo.potCloverStatus.toInt() == 1) {
  720. stopClick()
  721. }
  722. //处理扭橙问题 扭橙 resetZero ==1 //普通 resetZero ==0
  723. /**
  724. * 当扭橙的值不等于初始化的时候,就需要重新跳转ModesDetails
  725. * */
  726. if (event.devInfo.resetZero.toInt() == 1 && event.devInfo.resetZero.toInt() != isResetZero) {
  727. var modeName = if (sn.startsWith("011")) {
  728. resources.getString(com.develop.common.R.string.citrus_juicer_011)
  729. } else {
  730. resources.getString(com.develop.common.R.string.citrus_juicer)
  731. }
  732. navigateTo(Screens.Cook.COOK_MODES) {
  733. val bundle = Bundle()
  734. bundle.putString(MODE_TYPE, WorkModes.CITRUS_JUICER)
  735. bundle.putString(
  736. "mode_name",
  737. modeName
  738. )
  739. with(bundle)
  740. }
  741. finish()
  742. } else {
  743. ////devInfo.potStatus 0是有锅 1是没锅
  744. //处理换锅问题
  745. if (isModelNum == "5037" && event.devInfo.potStatus.toInt() == 1) {
  746. // isDevModes 避免重复刷新
  747. // if (isDevModes && workMode?.devMode!=DevModes.SOUP) {
  748. // isDevModes = false
  749. // CofarSDK.changeDevModeFocus(DevModes.SOUP)
  750. // return
  751. // }
  752. } else if (isModelNum == "5037" && event.devInfo.potStatus.toInt() == 0 && workMode?.type != "WIGHT") {
  753. /**
  754. * 由于客户无锅状态下是默认汤锅列表,但是在一进来是空炸锅,拿出来(无锅的时候已经换了汤锅模式),
  755. * 但重新放空炸锅,onDevModeChange 是不会回调的,固需要用potCoverType 锅盖协议来判断是否需要重新换模式
  756. * */
  757. //potCloverStatus 0是合盖,1是没盒盖
  758. //potCoverType 0 是汤锅 1是空炸
  759. if (event.devInfo.potCloverType.toInt() == 1 && devMode == DevModes.SOUP) {
  760. CofarSDK.changeDevModeFocus(DevModes.AIR_FRYER)
  761. return
  762. } else if (event.devInfo.potCloverType.toInt() == 0 && devMode == DevModes.AIR_FRYER) {
  763. CofarSDK.changeDevModeFocus(DevModes.SOUP)
  764. return
  765. }
  766. isDevModes = true
  767. }
  768. //处理中途换换锅问题
  769. if (sdkDevMode != event.devInfo.devMode) {
  770. return
  771. }
  772. }
  773. ThreadUtils.runOnMainThread {
  774. currDevInfo = event.devInfo
  775. mRunningState = currDevInfo.runningStatus.toInt()
  776. mRunningInstId = currDevInfo.runningInstId
  777. mSettingInstId = currDevInfo.settingInstId
  778. updateStatusBtn(currDevInfo.status.toByte())
  779. //之前是000 需要做电磁阀,现在单独判断063
  780. //sn.startsWith("000")
  781. if (sn.startsWith("063")) {
  782. if (!CofarSDK.devInfo().isWeightStatus && currDevInfo.mode.mode != "TURBO") {
  783. //电磁阀在非称重/切碎下显示开锁和上锁
  784. if (currDevInfo.potCloverEleStatus.toInt() == 0 && potCloverEleStatus != 0) {
  785. potCloverEleStatus = 0
  786. potCloverInterval?.cancel()
  787. if (currentBgId == com.develop.common.R.drawable.pot_clover_ele_unlock) {
  788. binding.tvCount.setGone()
  789. } else {
  790. binding.tvCount.setVisible()
  791. potCloverInterval = Interval(0, 1, TimeUnit.SECONDS, 5).life(this)
  792. .subscribe {
  793. binding.tvCount.updateText(it.toString())
  794. }.finish {
  795. binding.tvCount.setGone()
  796. currentBgId =
  797. com.develop.common.R.drawable.pot_clover_ele_unlock
  798. binding.ivPotCover.setBackgroundResource(com.develop.common.R.drawable.pot_clover_ele_unlock)
  799. }
  800. .start()
  801. }
  802. } else if (currDevInfo.potCloverEleStatus.toInt() == 1 && potCloverEleStatus != 1) {
  803. potCloverEleStatus = 1
  804. potCloverInterval?.cancel()
  805. if (currentBgId == com.develop.common.R.drawable.pot_clover_ele_lock) {
  806. binding.tvCount.setGone()
  807. } else {
  808. binding.tvCount.setGone()
  809. currentBgId = com.develop.common.R.drawable.pot_clover_ele_lock
  810. binding.ivPotCover.setBackgroundResource(com.develop.common.R.drawable.pot_clover_ele_lock)
  811. }
  812. } else if (currDevInfo.potCloverEleStatus.toInt() == 2 && potCloverEleStatus != 2) {
  813. potCloverEleStatus = 2
  814. binding.tvCount.setGone()
  815. }
  816. }
  817. }
  818. currDevInfo.mode.apply {
  819. //判断如果称重不更新其他UI
  820. if (!(viewModel.modeType == ModesType.WIGHT.name
  821. || viewModel.modeType == ModesType.SM_WIGHT.name)
  822. ) {
  823. updateTempUI(
  824. minTemp.toFloat(),
  825. maxTemp.toFloat(),
  826. if (currDevInfo.status == DevStatus.STOP.toInt()) currDevInfo.targetTemp.toInt()
  827. else currDevInfo.temp.toInt(),
  828. if (currDevInfo.targetTempBuffer.toInt() != -1) currDevInfo.targetTempBuffer.toString() else currDevInfo.targetTemp.toString(),
  829. isTempChange
  830. )
  831. updateTimeUI(
  832. if (currDevInfo.status == DevStatus.STOP.toInt() || userChanging) minTime else 0,
  833. maxTime,
  834. if (currDevInfo.status == DevStatus.STOP.toInt()) if (currDevInfo.targetTimeBuffer != -1) currDevInfo.targetTimeBuffer else currDevInfo.targetTime
  835. else currDevInfo.remainTime,
  836. if (currDevInfo.targetTimeBuffer != -1) currDevInfo.targetTimeBuffer.toLong() else currDevInfo.targetTime.toLong(),
  837. isTimeChange, false, "onDevStateEvent"
  838. )
  839. var motorGear = currDevInfo.motorGear.toInt()
  840. if (currDevInfo.motorGearBuffer.toInt() != -1) {
  841. motorGear = currDevInfo.motorGearBuffer.toInt()
  842. }
  843. updateMotorGearUI(
  844. minMotorGear.toFloat(),
  845. maxMotorGear.toFloat(),
  846. motorGear,
  847. isMotorGearChange
  848. )
  849. var waterGear =
  850. if (currDevInfo.waterGear != null) currDevInfo.waterGear.toInt() else defaultMotorGear;
  851. if (currDevInfo.waterGearBuffer != null && currDevInfo.waterGearBuffer.toInt() != -1) {
  852. waterGear = currDevInfo.waterGearBuffer.toInt()
  853. }
  854. updateWaterGearUI(
  855. minWaterGear.toFloat(),
  856. maxWaterGear.toFloat(),
  857. waterGear,
  858. isWaterGearChange
  859. )
  860. updateMotorDirectionUI(
  861. if (currDevInfo.motorDirectionBuffer.toInt() == -1) currDevInfo.motorDirection.toInt() else currDevInfo.motorDirectionBuffer.toInt(),
  862. isMotorDirectionChange
  863. )
  864. } else {
  865. updateWeightUI(currDevInfo.weight.toFloat())
  866. }
  867. }
  868. }
  869. }
  870. //======================================初始化数据和监听去==================================\\
  871. private fun initData() {
  872. if (modeName.isNotEmpty() || workMode?.name == null) {
  873. binding.tvModeName.text = modeName
  874. } else {
  875. binding.tvModeName.text =
  876. getString(resources.getIdentifier(workMode?.name, "string", this.packageName))
  877. }
  878. // // 获取ImageView的宽度和高度
  879. // val imageViewWidth = binding.ivBanner.width
  880. // val imageViewHeight = binding.ivBanner.height
  881. //
  882. // // 设置ImageView的尺寸和scaleType属性
  883. // binding.ivBanner.layoutParams.width = imageViewWidth
  884. // binding.ivBanner.layoutParams.height = imageViewHeight
  885. // binding.ivBanner.scaleType = ImageView.ScaleType.FIT_CENTER
  886. //
  887. // // 设置ImageView的图片
  888. // val bitmap = BitmapFactory.decodeResource(resources, resources.getIdentifier(workMode?.bg,"drawable",this.packageName))
  889. // binding.ivBanner.setImageBitmap(bitmap)
  890. //点击切换的模式来显示对应的UI
  891. viewModel.currentStep.observe(this) {
  892. if (it == null) {
  893. return@observe
  894. }
  895. if (it != CookSettingType.WEIGHT) {
  896. CofarSDK.stoptWeight()
  897. }
  898. when (it) {
  899. CookSettingType.WEIGHT -> {
  900. changeWeightStep()
  901. }
  902. CookSettingType.TEMP_SETTING -> {
  903. changeTempSettingStep()
  904. }
  905. CookSettingType.TIME_SETTING -> {
  906. changeTimeSettingStep()
  907. }
  908. CookSettingType.SPEED_SETTING -> {
  909. changeSpeedSettingStep()
  910. }
  911. CookSettingType.WATER_SPRY -> {
  912. // changeSpeedSettingStep()
  913. changeWaterSprySettingStep()
  914. }
  915. CookSettingType.DIRECTION_SETTING -> {
  916. changeDirectionSettingStep()
  917. }
  918. CookSettingType.TURBO -> {
  919. changeTurboStep()
  920. }
  921. }
  922. }
  923. }
  924. var configLock = false;
  925. private fun initModeData(type: String, keep: Boolean? = false) {
  926. Log.d("TAG initModeData", "viewModel.modeType:" + viewModel.modeType + " keep:" + keep)
  927. viewModel.modeType.apply {
  928. baseMode = CofarSDK.devMode(this)
  929. setKneadMotorGear(false)
  930. //显示对应模式UI
  931. if (this == ModesType.WIGHT.name || this == ModesType.SM_WIGHT.name) {
  932. CofarSDK.recordConfig()
  933. //称重模式
  934. viewModel.changeStep(CookSettingType.WEIGHT)
  935. //CofarSDK.changeMode(baseMode)
  936. } else if (this == ModesType.TURBO.name || this == ModesType.SM_TURBO.name) {
  937. CofarSDK.recordConfig()
  938. viewModel.changeStep(CookSettingType.TURBO)
  939. CofarSDK.changeMode(baseMode)
  940. } else {
  941. //其他模式
  942. changeCommonStep()
  943. viewModel.changeStep(CookSettingType.TEMP_SETTING)
  944. this@ModesDetailActivity.isMotorDirectionGearChange =
  945. baseMode.isMotorDirectionChange
  946. if (CofarSDK.devInfo().status != DevStatus.PAUSE.toInt() && CofarSDK.devInfo().status != DevStatus.RUNNING.toInt()) {
  947. Log.d("TAG initModeData", "baseMode :" + baseMode.toString())
  948. var targetTemp = baseMode.defaultTemp.toShort()
  949. var motorDirection = baseMode.motorDirection.toByte()
  950. var motorGear = baseMode.defaultMotorGear.toByte()
  951. var targetTime = baseMode.defaultTime.toInt()
  952. if (keep == true) {
  953. var restoreConfig: DevInfo? = null
  954. configLock = true;
  955. restoreConfig = CofarSDK.changeMode(type, baseMode, true)
  956. ThreadUtils.runOnMainThread({
  957. configLock = false;
  958. }, 500);
  959. if (restoreConfig != null) {
  960. targetTemp = restoreConfig.targetTemp;
  961. motorDirection = restoreConfig.motorDirection;
  962. motorGear = restoreConfig.motorGear;
  963. targetTime = restoreConfig.targetTime;
  964. } else {
  965. targetTemp = baseMode.defaultTemp.toShort()
  966. motorDirection = baseMode.motorDirection.toByte()
  967. motorGear = baseMode.defaultMotorGear.toByte()
  968. targetTime = baseMode.defaultTime.toInt()
  969. }
  970. } else {
  971. CofarSDK.changeMode(type, baseMode)
  972. }
  973. // currDevInfo.apply {
  974. // targetTemp = baseMode.defaultTemp.toShort()
  975. // motorDirection = baseMode.motorDirection.toByte()
  976. // motorGear = baseMode.defaultMotorGear.toByte()
  977. // targetTime = baseMode.defaultTime.toInt()
  978. // }
  979. baseMode.apply {
  980. currentTemp = targetTemp.toInt()
  981. updateTempUI(
  982. minTemp.toFloat(),
  983. maxTemp.toFloat(),
  984. currentTemp,
  985. targetTemp.toString(),
  986. isTempChange,
  987. true
  988. )
  989. currTime = targetTime.toLong()
  990. updateTimeUI(
  991. minTime,
  992. maxTime,
  993. currTime.toInt(),
  994. targetTime.toLong(),
  995. isTimeChange,
  996. true, "initModeData"
  997. )
  998. currentMotorGer = defaultMotorGear
  999. updateMotorGearUI(
  1000. minMotorGear.toFloat(),
  1001. maxMotorGear.toFloat(),
  1002. motorGear.toInt(),
  1003. isMotorGearChange,
  1004. focusUpdate = true
  1005. )
  1006. updateMotorDirectionUI(motorDirection.toInt(), isMotorDirectionChange)
  1007. updateWeightUI(currDevInfo.weight.toFloat())
  1008. }
  1009. }
  1010. }
  1011. initModeData = true
  1012. }
  1013. }
  1014. @SuppressLint("ClickableViewAccessibility")
  1015. private fun initListener() {
  1016. binding.ivBack.setOnClickListener {
  1017. backClick()
  1018. }
  1019. binding.clCookTemp.setOnClickListener {
  1020. viewModel.changeStep(CookSettingType.TEMP_SETTING)
  1021. }
  1022. binding.clCookTime.setOnClickListener {
  1023. viewModel.changeStep(CookSettingType.TIME_SETTING)
  1024. }
  1025. binding.clCookSpeed.setOnClickListener {
  1026. viewModel.changeStep(CookSettingType.SPEED_SETTING)
  1027. }
  1028. binding.clCookDirection.setOnClickListener {
  1029. viewModel.changeStep(CookSettingType.DIRECTION_SETTING)
  1030. }
  1031. binding.clCookWater.setOnClickListener {
  1032. viewModel.changeStep(CookSettingType.WATER_SPRY)
  1033. }
  1034. binding.ivTurbo.setOnClickListener {
  1035. turboClick()
  1036. }
  1037. binding.ivEggs.setOnClickListener {
  1038. eggsPopupWindow.showAtLocation(binding.titleLayout, Gravity.CENTER, 0, 0)
  1039. }
  1040. binding.ivWeight.setOnClickListener {
  1041. weightClick()
  1042. }
  1043. binding.btnStart.setOnClickListener {
  1044. startClick()
  1045. }
  1046. binding.btnResume.setOnClickListener {
  1047. resumeClick()
  1048. }
  1049. binding.btnPause.setOnClickListener {
  1050. pauseClick()
  1051. }
  1052. binding.btnStop.setOnClickListener {
  1053. stopClick()
  1054. }
  1055. binding.btnCancel.setOnClickListener {
  1056. cancelClick()
  1057. }
  1058. binding.btnConfirm.setOnClickListener {
  1059. confirmClick()
  1060. }
  1061. binding.tvWeightTare.setOnClickListener {
  1062. weightClearClick()
  1063. }
  1064. binding.btnReset.setOnClickListener {
  1065. resetConfigClick()
  1066. }
  1067. binding.jiahao.setOnClickListener {
  1068. var event = KeyEvent(0, 0, ACTION_DOWN, TURN_UP_KEY_CODE, 0);
  1069. this.dispatchKeyEvent(event);
  1070. }
  1071. binding.jianhao.setOnClickListener {
  1072. var event = KeyEvent(0, 0, ACTION_DOWN, TURN_DOWN_KEY_CODE, 0);
  1073. this.dispatchKeyEvent(event);
  1074. }
  1075. binding.tempRingView.onRingViewListener = object : RingControlView.OnRingViewListener {
  1076. override fun onProgressChange(progress: Int) {
  1077. val pg = FoodSdkUtils.parseTemp(progress.toShort()).toInt()
  1078. currentTemp = pg
  1079. tempRingEvent(pg)
  1080. }
  1081. }
  1082. val packageName = this.packageName;
  1083. val ctx = this
  1084. backRequestDialog.apply {
  1085. title = ctx.getString(com.develop.common.R.string.keep_cooking_in_the_background)
  1086. onDialogClickListener = object : CancelConfirmDialog.OnDialogClickListener {
  1087. override fun onConfirm() {
  1088. if (CofarSDK.devInfo().status == DevStatus.STOP.toInt()) {
  1089. FloatWindowManager.hideStepFlowWindow()
  1090. finish()
  1091. return
  1092. }
  1093. runOnMainThread {
  1094. var workMode = ConfigUtils.getMode(modeType)
  1095. var cookStepEvent = CookStepEvent(
  1096. coverPath = ctx.theme.resources.getIdentifier(
  1097. workMode?.icon,
  1098. "drawable",
  1099. packageName
  1100. ),
  1101. isMode = true,
  1102. modeType = viewModel.modeType,
  1103. modeName = getString(
  1104. resources.getIdentifier(
  1105. workMode?.name,
  1106. "string",
  1107. packageName
  1108. )
  1109. ),
  1110. startMotorGer = startMotorGer
  1111. )
  1112. FloatWindowManager.showStepFlowWindow(cookStepEvent)
  1113. finish()
  1114. }
  1115. }
  1116. override fun onCancel() {
  1117. runOnMainThread {
  1118. FloatWindowManager.hideStepFlowWindow()
  1119. CofarSDK.stop()
  1120. finish()
  1121. }
  1122. }
  1123. override fun onKey() {
  1124. }
  1125. }
  1126. }
  1127. overrideModeDialog.title =
  1128. getString(com.develop.common.R.string.current_cooking_dialog_title)
  1129. overrideModeDialog.apply {
  1130. onDialogClickListener = object : CancelConfirmDialog.OnDialogClickListener {
  1131. override fun onConfirm() {
  1132. val cookStepEvent = CookStepEvent(
  1133. coverPath = viewModel.getBanner(),
  1134. isMode = true,
  1135. modeName = viewModel.modeType
  1136. )
  1137. FloatWindowManager.showStepFlowWindow(cookStepEvent)
  1138. when (viewModel.modeType) {
  1139. ModesType.WIGHT.name -> {
  1140. CofarSDK.stop(false)
  1141. CofarSDK.startWeight()
  1142. }
  1143. ModesType.TURBO.name -> {
  1144. CofarSDK.stop(false)
  1145. }
  1146. ModesType.SM_WIGHT.name -> {
  1147. CofarSDK.stop(false)
  1148. CofarSDK.startWeight()
  1149. }
  1150. ModesType.SM_TURBO.name -> {
  1151. CofarSDK.stop(false)
  1152. }
  1153. else -> {
  1154. userChanging = false
  1155. CofarSDK.startRunning(viewModel.modeType)
  1156. }
  1157. }
  1158. }
  1159. override fun onCancel() {
  1160. }
  1161. override fun onKey() {
  1162. }
  1163. }
  1164. }
  1165. binding.speedRingView.onRingViewListener = object : RingControlView.OnRingViewListener {
  1166. override fun onProgressChange(progress: Int) {
  1167. currentMotorGer = progress
  1168. motorGearSpeedEvent(progress)
  1169. }
  1170. }
  1171. binding.waterRingView.onRingViewListener = object : RingControlView.OnRingViewListener {
  1172. override fun onProgressChange(progress: Int) {
  1173. currentWaterGear = progress
  1174. waterGearSpeedEvent(progress)
  1175. }
  1176. }
  1177. binding.clSetTime.onTimePickerCallback = object : TimePickerView.OnTimePickerCallback {
  1178. override fun onTimePicker(
  1179. hours: Int, minute: Int, second: Int, time: String, setByUser: Boolean
  1180. ) {
  1181. if (setByUser) {
  1182. // currTime = time.toLong()
  1183. rollTimeEvent(hours, minute, second, time, setByUser, "rCallback")
  1184. }
  1185. }
  1186. override fun onTimePickerTouchFirst(where: Int) {
  1187. whereIndex = where
  1188. userChanging = true
  1189. }
  1190. }
  1191. binding.flDirection.onDirectionClickListener =
  1192. object : DirectionView.OnDirectionClickListener {
  1193. override fun onDirectionClick(direction: DirectionView.Direction) {
  1194. motorGearDirectionClick(direction)
  1195. }
  1196. }
  1197. //TODO 2023年06月22日16:45:43 这里原来点击图标两侧也可以启动,现在修改只能点击图标启动
  1198. /**
  1199. * turbo触摸事件
  1200. */
  1201. binding.ivTurboView.setOnTouchListener { view, motionEvent ->
  1202. when (motionEvent.action) {
  1203. MotionEvent.ACTION_DOWN -> {
  1204. if (modeType != WorkModes.CITRUS_JUICER && CofarSDK.devInfo().resetZero.toInt() == 1) {
  1205. showMsgDialog(resources.getString(com.develop.common.R.string.dev_remove_orange_parts))
  1206. } else {
  1207. if (CofarSDK.devInfo().potStatus.toInt() == 1) {
  1208. if (baseSn.startsWith("011")) {
  1209. showErrMsgDialog("mei_fang_guo_yi_chan_011")
  1210. } else {
  1211. showErrMsgDialog("mei_fang_guo_yi_chan")
  1212. }
  1213. } else if (CofarSDK.devInfo().potStatus.toInt() == 0 && CofarSDK.devInfo().potCloverStatus.toInt() == 1) {
  1214. showPotCloverDialog()
  1215. } else {
  1216. Log.d("dddddd", "按下(${motionEvent.x},${motionEvent.y})")
  1217. turboDownEvent()
  1218. }
  1219. }
  1220. }
  1221. MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
  1222. Log.d("dddddd", "异常点击(${motionEvent.x},${motionEvent.y})")
  1223. if (motionEvent.x == 0f && motionEvent.y == 0f) {
  1224. Log.d("dddddd", "异常点击(0,0)")
  1225. } else {
  1226. Log.d("dddddd", "物理键Up${motionEvent.action}")
  1227. turboUpEvent()
  1228. }
  1229. }
  1230. }
  1231. true
  1232. }
  1233. }
  1234. //======================================UI更新的方法==================================\\
  1235. /**默认显示的UI,切换到温度*/
  1236. private fun changeCommonStep() {
  1237. whereIndex = -1
  1238. binding.clSetTime.stopAlphaAnim()
  1239. binding.functionLayout.visibility = View.VISIBLE
  1240. binding.llWeightView.visibility = View.GONE
  1241. // 2023.12.11客户需要隐藏
  1242. // if (getSN().startsWith("000")){
  1243. // binding.ivPotCover.setVisible()
  1244. // }
  1245. // if (viewModel.modeType=="DICING"||viewModel.modeType=="CITRUS_JUICER" ||viewModel.modeType=="POTATO_PEELER"){
  1246. // binding.ivTurbo.visibility = View.INVISIBLE
  1247. // binding.ivWeight.visibility = View.INVISIBLE
  1248. // }
  1249. if (viewModel.modeType == ModesType.WIGHT.name || viewModel.modeType == ModesType.TURBO.name || viewModel.modeType == ModesType.AUTO_CLEAN.name) {
  1250. binding.ivWeight.visibility = View.GONE
  1251. binding.ivTurbo.visibility = View.GONE
  1252. //设置鸡蛋
  1253. visibilityEgg(View.GONE)
  1254. if (viewModel.modeType == ModesType.TURBO.name) {
  1255. binding.llTurboView.visibility = View.VISIBLE
  1256. }
  1257. } else if (viewModel.modeType == ModesType.CITRUS_JUICER.name
  1258. || viewModel.modeType == ModesType.DICING.name
  1259. || viewModel.modeType == ModesType.POTATO_PEELER.name
  1260. ) {
  1261. if (sn.startsWith("011")) {
  1262. binding.ivTurbo.visibility = View.INVISIBLE
  1263. binding.ivWeight.visibility = View.INVISIBLE
  1264. } else {
  1265. binding.ivTurbo.visibility = View.GONE
  1266. }
  1267. } else {
  1268. // isWidget = true
  1269. binding.ivWeight.visibility = View.VISIBLE
  1270. binding.ivTurbo.visibility = View.VISIBLE
  1271. visibilityEgg(View.VISIBLE)
  1272. }
  1273. turnDevModeUI()
  1274. changeTempSettingStep()
  1275. }
  1276. /**切换到称重*/
  1277. private fun changeWeightStep() {
  1278. whereIndex = -1
  1279. binding.clSetTime.stopAlphaAnim()
  1280. isWidget = false
  1281. binding.ivWeight.visibility = View.GONE
  1282. binding.ivTurbo.visibility = View.GONE
  1283. visibilityEgg(View.GONE)
  1284. binding.functionLayout.visibility = View.GONE
  1285. binding.llWeightView.visibility = View.VISIBLE
  1286. binding.llTurboView.visibility = View.GONE
  1287. if (SystemClock.elapsedRealtime() - mWeightTime < 1000) {
  1288. return
  1289. }
  1290. //开始称重
  1291. CofarSDK.startWeight()
  1292. mWeightTime = SystemClock.elapsedRealtime()
  1293. }
  1294. /**切换到切碎*/
  1295. private fun changeTurboStep() {
  1296. whereIndex = -1
  1297. binding.clSetTime.stopAlphaAnim()
  1298. isWidget = false
  1299. binding.ivWeight.visibility = View.GONE
  1300. binding.ivTurbo.visibility = View.GONE
  1301. visibilityEgg(View.GONE)
  1302. binding.functionLayout.visibility = View.GONE
  1303. binding.llTurboView.visibility = View.VISIBLE
  1304. binding.llWeightView.visibility = View.GONE
  1305. }
  1306. /**切换到温度*/
  1307. private fun changeTempSettingStep() {
  1308. binding.jianhao.setVisible()
  1309. binding.jiahao.setVisible()
  1310. binding.steamFire.visibility = View.GONE
  1311. binding.llWeightView.visibility = View.GONE
  1312. binding.functionLayout.visibility = View.VISIBLE
  1313. binding.tempRingView.visibility = View.VISIBLE
  1314. binding.tempRingText.visibility = View.VISIBLE
  1315. binding.speedRingView.visibility = View.GONE
  1316. binding.speedRingText.visibility = View.GONE
  1317. binding.tempRingTextCooking.visibility = View.GONE
  1318. binding.clSetTime.visibility = View.GONE
  1319. binding.flDirection.visibility = View.GONE
  1320. binding.waterRingView.visibility = View.GONE
  1321. binding.waterSprayShow.visibility = View.GONE
  1322. //处理蒸汽模式
  1323. if (modeType == ModesType.STEAM.name) {
  1324. binding.tempRingText.visibility = View.GONE;
  1325. binding.clCookTemp.turnSteamMode();
  1326. binding.steamFire.visibility = View.VISIBLE
  1327. } else {
  1328. binding.clCookTemp.turnCommonMode();
  1329. }
  1330. setPanelViewProperty(CookSettingType.TEMP_SETTING)
  1331. }
  1332. /**切换到时间*/
  1333. private fun changeTimeSettingStep() {
  1334. binding.steamFire.visibility = View.GONE
  1335. binding.jianhao.setVisible()
  1336. binding.jiahao.setVisible()
  1337. binding.llWeightView.visibility = View.GONE
  1338. binding.functionLayout.visibility = View.VISIBLE
  1339. binding.tempRingView.visibility = View.INVISIBLE
  1340. binding.speedRingView.visibility = View.GONE
  1341. binding.speedRingText.visibility = View.GONE
  1342. binding.tempRingText.visibility = View.GONE
  1343. binding.tempRingTextCooking.visibility = View.GONE
  1344. binding.clSetTime.visibility = View.VISIBLE
  1345. binding.flDirection.visibility = View.GONE
  1346. binding.waterRingView.visibility = View.GONE
  1347. binding.waterSprayShow.visibility = View.GONE
  1348. setPanelViewProperty(CookSettingType.TIME_SETTING)
  1349. }
  1350. /**切换到转速*/
  1351. private fun changeSpeedSettingStep() {
  1352. whereIndex = -1
  1353. binding.clSetTime.stopAlphaAnim()
  1354. binding.steamFire.visibility = View.GONE
  1355. binding.jianhao.setVisible()
  1356. binding.jiahao.setVisible()
  1357. binding.llWeightView.visibility = View.GONE
  1358. binding.functionLayout.visibility = View.VISIBLE
  1359. binding.tempRingView.visibility = View.INVISIBLE
  1360. binding.tempRingText.visibility = View.INVISIBLE
  1361. binding.speedRingView.visibility = View.VISIBLE
  1362. binding.speedRingText.visibility = View.VISIBLE
  1363. binding.tempRingTextCooking.visibility = View.GONE
  1364. binding.clSetTime.visibility = View.GONE
  1365. binding.flDirection.visibility = View.GONE
  1366. binding.waterRingView.visibility = View.GONE
  1367. binding.waterSprayShow.visibility = View.GONE
  1368. setPanelViewProperty(CookSettingType.SPEED_SETTING)
  1369. }
  1370. /**切换到方向*/
  1371. private fun changeDirectionSettingStep() {
  1372. whereIndex = -1
  1373. binding.clSetTime.stopAlphaAnim()
  1374. binding.steamFire.visibility = View.GONE
  1375. binding.jianhao.setGone()
  1376. binding.jiahao.setGone()
  1377. binding.llWeightView.visibility = View.GONE
  1378. binding.functionLayout.visibility = View.VISIBLE
  1379. binding.tempRingView.visibility = View.INVISIBLE
  1380. binding.tempRingText.visibility = View.GONE
  1381. binding.speedRingView.visibility = View.GONE
  1382. binding.speedRingText.visibility = View.GONE
  1383. binding.tempRingTextCooking.visibility = View.GONE
  1384. binding.clSetTime.visibility = View.GONE
  1385. binding.flDirection.visibility = View.VISIBLE
  1386. binding.waterRingView.visibility = View.GONE
  1387. binding.waterSprayShow.visibility = View.GONE
  1388. setPanelViewProperty(CookSettingType.DIRECTION_SETTING)
  1389. }
  1390. /**切换到*/
  1391. private fun changeWaterSprySettingStep() {
  1392. whereIndex = -1
  1393. binding.clSetTime.stopAlphaAnim()
  1394. binding.steamFire.visibility = View.GONE
  1395. binding.jianhao.setVisible()
  1396. binding.jiahao.setVisible()
  1397. binding.llWeightView.visibility = View.GONE
  1398. binding.functionLayout.visibility = View.VISIBLE
  1399. binding.tempRingView.visibility = View.INVISIBLE
  1400. binding.tempRingText.visibility = View.GONE
  1401. binding.speedRingView.visibility = View.GONE
  1402. binding.speedRingText.visibility = View.GONE
  1403. binding.tempRingTextCooking.visibility = View.GONE
  1404. binding.clSetTime.visibility = View.GONE
  1405. binding.flDirection.visibility = View.GONE
  1406. binding.clCookWater.visibility = View.VISIBLE
  1407. binding.waterRingView.visibility = View.VISIBLE
  1408. binding.waterSprayShow.visibility = View.VISIBLE
  1409. setPanelViewProperty(CookSettingType.WATER_SPRY)
  1410. }
  1411. private fun setPanelViewProperty(selectStep: CookSettingType) {
  1412. binding.apply {
  1413. clCookTemp.upSelectedView(false)
  1414. clCookTime.upSelectedView(false)
  1415. clCookSpeed.upSelectedView(false)
  1416. clCookDirection.upSelectedView(false)
  1417. clCookWater.upSelectedView(false)
  1418. when (selectStep) {
  1419. CookSettingType.TEMP_SETTING -> {
  1420. clCookTemp.upSelectedView(true)
  1421. }
  1422. CookSettingType.TIME_SETTING -> {
  1423. clCookTime.upSelectedView(true)
  1424. }
  1425. CookSettingType.SPEED_SETTING -> {
  1426. clCookSpeed.upSelectedView(true)
  1427. }
  1428. CookSettingType.DIRECTION_SETTING -> {
  1429. clCookDirection.upSelectedView(true)
  1430. }
  1431. CookSettingType.WATER_SPRY -> {
  1432. clCookWater.upSelectedView(true)
  1433. }
  1434. CookSettingType.WEIGHT -> {
  1435. // do nothing
  1436. }
  1437. CookSettingType.TURBO -> {
  1438. }
  1439. }
  1440. }
  1441. }
  1442. /**旋转按钮切换时间*/
  1443. private fun handleRotateTimeChange(increase: Boolean) {
  1444. ThreadUtils.runOnMainThread {
  1445. //当前调节时间
  1446. var targetTime = currDevInfo.targetTime
  1447. if (currDevInfo.remainTime != 0) {
  1448. targetTime = currDevInfo.remainTime
  1449. }
  1450. if (currDevInfo.targetTimeBuffer != -1) {
  1451. targetTime = currDevInfo.targetTimeBuffer
  1452. }
  1453. var step = 0
  1454. if (whereIndex == 1) {
  1455. step += rotateMinOrHourStep()
  1456. } else {
  1457. step = rotateSecOrMinStep()
  1458. }
  1459. if (increase) {
  1460. targetTime += step
  1461. } else {
  1462. targetTime -= step
  1463. }
  1464. Log.d("kkkkkkk", "$whereIndex===$step===$targetTime")
  1465. if (targetTime < 0) {
  1466. targetTime = 0;
  1467. }
  1468. if (targetTime > currDevInfo.mode.maxTime) {
  1469. targetTime = currDevInfo.mode.maxTime
  1470. }
  1471. if (targetTime < currDevInfo.mode.minTime) {
  1472. targetTime = currDevInfo.mode.minTime
  1473. }
  1474. val sec = targetTime % 60
  1475. val min = ((targetTime / 60) % 60)
  1476. val hour = (targetTime / 3600)
  1477. var time = ""
  1478. if (hour > 0) {
  1479. time += if (hour < 10) {
  1480. "0${hour}"
  1481. } else {
  1482. "$hour"
  1483. }
  1484. time += if (min < 10) {
  1485. ":0${min}"
  1486. } else {
  1487. ":${min}"
  1488. }
  1489. } else {
  1490. time += if (min < 10) {
  1491. "0${min}"
  1492. } else {
  1493. "$min"
  1494. }
  1495. time += if (sec < 10) {
  1496. ":0${sec}"
  1497. } else {
  1498. ":${sec}"
  1499. }
  1500. }
  1501. rollTimeEvent(hour, min, sec, time, setByUser = true, "TimeChange")
  1502. currDevInfo.apply {
  1503. updateTimeUI(
  1504. mode.minTime,
  1505. mode.maxTime,
  1506. remainTime,
  1507. targetTime.toLong(),
  1508. true, false, "TimeChange"
  1509. )
  1510. }
  1511. binding.clSetTime.setTimeInternal(
  1512. hour,
  1513. min,
  1514. sec,
  1515. changeSetting = true,
  1516. setByUser = true
  1517. )
  1518. }
  1519. }
  1520. /**旋转按钮步进
  1521. * 右边分/秒的步进
  1522. * */
  1523. private fun rotateSecOrMinStep(): Int {
  1524. if (currDevInfo.targetTime in 0..59) {
  1525. return 1
  1526. }
  1527. if (currDevInfo.targetTime >= 60 && currDevInfo.targetTime < 10 * 60) {
  1528. return 10
  1529. }
  1530. if (currDevInfo.targetTime >= 10 * 60 && currDevInfo.targetTime < 60 * 60) {
  1531. return 30
  1532. }
  1533. if (currDevInfo.targetTime >= 60 * 60) {
  1534. return 60
  1535. }
  1536. return 1
  1537. }
  1538. /**旋转按钮步进
  1539. * 左边边分/时的步进
  1540. * */
  1541. private fun rotateMinOrHourStep(): Int {
  1542. if (currDevInfo.targetTime >= 60 && currDevInfo.targetTime < 60 * 60) {
  1543. return 60
  1544. }
  1545. if (currDevInfo.targetTime >= 60 * 60) {
  1546. return 60 * 60
  1547. }
  1548. return 60
  1549. }
  1550. /**
  1551. * 更新温度相关的UI
  1552. * @param minTemp 最小温度
  1553. * @param maxTemp 最大温度
  1554. * @param currentTemp 当前温度(或默认温度)
  1555. * @param targetTemp 设置的目标温度
  1556. * @param isTempChange 温度是否可以改变
  1557. */
  1558. @SuppressLint("SetTextI18n")
  1559. private fun updateTempUI(
  1560. minTemp: Float,
  1561. maxTemp: Float,
  1562. currentTemp: Int,
  1563. targetTemp: String,
  1564. isTempChange: Boolean,
  1565. focusUpdate: Boolean = false
  1566. ) {
  1567. this.maxTemp = maxTemp.toInt()
  1568. this.minTemp = minTemp.toInt()
  1569. this.isTempChange = isTempChange
  1570. binding.apply {
  1571. clCookTemp.updateChangeValue("${FoodSdkUtils.parseTemp(currDevInfo.temp)}°C")
  1572. tempRingView.setRange(minTemp, maxTemp)
  1573. tempRingView.setCanTouch(isTempChange)
  1574. if (targetTemp.toInt() > maxTemp) {
  1575. CofarSDK.cfgHeat(maxTemp.toInt().toShort(), HeatModes.PU_TONG);
  1576. clCookTemp.setConfigValue(
  1577. "--${
  1578. CofarUtils.parseTemp(
  1579. maxTemp.toInt().toShort()
  1580. )
  1581. }°C--"
  1582. )
  1583. tempRingView.updateProgress(CofarUtils.parseTemp(maxTemp.toInt().toShort()).toInt())
  1584. tempRingText.text = ("${CofarUtils.parseTemp(maxTemp.toInt().toShort()).toInt()}°C")
  1585. }
  1586. var tempBuffer = CofarSDK.devInfo().targetTempBuffer
  1587. steamFire.configNum(
  1588. CofarUtils.parseTemp(if (tempBuffer.toInt() != -1) tempBuffer else targetTemp.toShort())
  1589. .toInt()
  1590. )
  1591. clCookTemp.configSteamFire(
  1592. CofarUtils.parseTemp(if (tempBuffer.toInt() != -1) tempBuffer else targetTemp.toShort())
  1593. .toInt()
  1594. )
  1595. if (!userChanging || focusUpdate) {
  1596. clCookTemp.setConfigValue("--${FoodSdkUtils.parseTemp(if (tempBuffer.toInt() != -1) tempBuffer else targetTemp.toShort())}°C--")
  1597. tempRingView.updateProgress(FoodSdkUtils.parseTemp(currentTemp.toShort()).toInt())
  1598. tempRingText.text = ("${FoodSdkUtils.parseTemp(currentTemp.toShort()).toInt()}°C")
  1599. }
  1600. }
  1601. }
  1602. /**
  1603. * 更新时间相关的UI
  1604. * @param minTime 最小时间
  1605. * @param maxTime 最大时间
  1606. * @param remainTime 剩余时间(或默认时间)
  1607. * @param targetTime 设置的目标时间
  1608. * @param isTimeChange 时间是否可以修复
  1609. */
  1610. private fun updateTimeUI(
  1611. minTime: Int,
  1612. maxTime: Int,
  1613. remainTime: Int,
  1614. targetTime: Long,
  1615. isTimeChange: Boolean,
  1616. focusUpdate: Boolean = false, type: String
  1617. ) {
  1618. this.isTimeChange = isTimeChange
  1619. this.maxTime = maxTime.toLong()
  1620. this.minTime = minTime.toLong()
  1621. binding.apply {
  1622. clCookTime.updateChangeValue(getTimeStr(currDevInfo.remainTime.toLong()))
  1623. var hours = 0
  1624. var minute = 0
  1625. var sec = 0
  1626. Log.d(
  1627. "TAG updateTimeUI",
  1628. "minTime:$minTime maxTime:$maxTime dev:${currDevInfo.remainTime.toLong()} remainTime:$remainTime targetTime:$targetTime isTimeChange:$isTimeChange focusUpdate$focusUpdate type :$type"
  1629. )
  1630. /**
  1631. * 由于速度大于7或等于7的时候 ,SDK会回调onDevCommonEvent方法,这个方法focusUpdate传入true,
  1632. * 就会调用下面if方法,故下面clSetTime.setTimeInternal,由于之前的minute sec 方法计算错误,现特殊处理minute sec 计算
  1633. * */
  1634. if (type == "onDevCommonEvent") {
  1635. minute = (targetTime / 60).toInt()
  1636. sec = (targetTime % 60).toInt()
  1637. } else {
  1638. if (remainTime > 3600) {
  1639. hours = remainTime / 3600
  1640. minute = remainTime % 3600 / 60
  1641. } else {
  1642. minute = remainTime / 60
  1643. sec = remainTime % 60
  1644. }
  1645. }
  1646. if (!userChanging || focusUpdate) {
  1647. clCookTime.setConfigValue("--${getTimeStr(targetTime)}--")
  1648. clSetTime.setTargetTime("--${getTimeStr(targetTime)}--")
  1649. clSetTime.setTimeInternal(hours, minute, sec, true)
  1650. }
  1651. clSetTime.isTimeCanChange(isTimeChange)
  1652. clSetTime.setTimeRange(minTime, maxTime)
  1653. }
  1654. }
  1655. /**
  1656. * 更新电机方向的UI
  1657. * @param motorDirection 电机方向
  1658. * @param isMotorDirectionChange 方向是否可以修改
  1659. */
  1660. private fun updateMotorDirectionUI(motorDirection: Int, isMotorDirectionChange: Boolean) {
  1661. binding.apply {
  1662. flDirection.isCanChangeDirection(isMotorDirectionChange)
  1663. if (!userChanging) {
  1664. clCookDirection.updateChangeValue(
  1665. viewModel.getDirectionStr(
  1666. motorDirection == MotorDirections.REVERSE.toInt(), resources
  1667. )
  1668. )
  1669. flDirection.updateDirectionView(
  1670. if (motorDirection == MotorDirections.FORWARD.toInt()) DirectionView.Direction.RIGHT
  1671. else DirectionView.Direction.LEFT
  1672. )
  1673. }
  1674. if (mRunningState == DevStatus.RUNNING.toInt() && currDevInfo.motorGear > 0) {
  1675. viewModel.playRotateAnimator(
  1676. CofarSDK.devInfo().motorDirection.toInt(),
  1677. binding.clCookDirection.binding.viewIcon
  1678. )
  1679. } else {
  1680. viewModel.pauseRotateAnimator(binding.clCookDirection.binding.viewIcon)
  1681. }
  1682. }
  1683. }
  1684. /**
  1685. * 更新电机转速的UI
  1686. * @param minMotorGear 电机最小转速
  1687. * @param maxMotorGear 电机最大转速
  1688. * @param currentMotorGer 电机当前转速
  1689. * @param isMotorGearChange 转速是否可以修改
  1690. */
  1691. private fun updateMotorGearUI(
  1692. minMotorGear: Float,
  1693. maxMotorGear: Float,
  1694. currentMotorGer: Int,
  1695. isMotorGearChange: Boolean,
  1696. focusUpdate: Boolean = false
  1697. ) {
  1698. // if (CofarSDK.devInfo().devMode != DevModes.SOUP) {
  1699. // return
  1700. // }
  1701. this.minMotorGear = minMotorGear.toInt()
  1702. this.maxMotorGear = maxMotorGear.toInt()
  1703. this.isMotorGearChange = isMotorGearChange
  1704. binding.apply {
  1705. speedRingView.setCanTouch(isMotorGearChange)
  1706. //处理慢炖0挡速的时候,要显示设置当
  1707. /**
  1708. * 010D 033F
  1709. * 处理慢炖开5停25逻辑,因为SDK 停的时候 设置挡速为0,客户那边说不能显示0挡速估在这UI处理
  1710. *
  1711. * */
  1712. /**
  1713. * 各个平台的揉面 需要处理
  1714. *
  1715. * */
  1716. if (((modeType == WorkModes.KNEAD || modeType == WorkModes.KNEAD_TOUGH)&& currentMotorGer == 0)
  1717. ||((sn.startsWith("010") || sn.startsWith("033")) && (modeType == WorkModes.SLOW_COOKING || modeType == WorkModes.SLOW_COOK)&& currentMotorGer == 0) ) {
  1718. /**
  1719. * 后台运行,点击回来,会导致挡速度,因为开5停25 的原因 currentMotorGer 是0
  1720. * 客户那边说不能显示0挡速估在这UI处理,估另外处理后台运行,点击回来挡速
  1721. * */
  1722. if (keep) {
  1723. var current: Int = startMotorGer
  1724. clCookSpeed.updateChangeValue(current.toString())
  1725. speedRingView.setRange(minMotorGear, maxMotorGear)
  1726. speedRingText.text = current.toString()
  1727. if (!userChanging || focusUpdate) {
  1728. speedRingView.updateProgress(current)
  1729. speedRingText.text = current.toString()
  1730. }
  1731. return@apply
  1732. }
  1733. return@apply
  1734. }
  1735. clCookSpeed.updateChangeValue(currentMotorGer.toString())
  1736. speedRingView.setRange(minMotorGear, maxMotorGear)
  1737. speedRingText.text = currentMotorGer.toString()
  1738. if (!userChanging || focusUpdate) {
  1739. speedRingView.updateProgress(currentMotorGer)
  1740. speedRingText.text = currentMotorGer.toString()
  1741. }
  1742. }
  1743. }
  1744. /**
  1745. * 更新喷水档位的UI
  1746. * @param minWaterGear 最小转速
  1747. * @param maxWaterGear 电机最大转速
  1748. * @param currentMotorGer 电机当前转速
  1749. * @param isWaterGearChange 转速是否可以修改
  1750. */
  1751. private fun updateWaterGearUI(
  1752. minWaterGear: Float,
  1753. maxWaterGear: Float,
  1754. currentMotorGer: Int,
  1755. isWaterGearChange: Boolean,
  1756. focusUpdate: Boolean = false
  1757. ) {
  1758. if (CofarSDK.devInfo().devMode != DevModes.AIR_FRYER) {
  1759. return
  1760. }
  1761. this.minWaterGear = minWaterGear.toInt()
  1762. this.maxWaterGear = maxWaterGear.toInt()
  1763. this.isWaterGearChange = isWaterGearChange
  1764. binding.apply {
  1765. clCookSpeed.updateChangeValue(if (currentMotorGer != 0) currentMotorGer.toString() else this@ModesDetailActivity.currentMotorGer.toString())
  1766. waterRingView.setRange(minWaterGear, maxWaterGear)
  1767. waterRingView.setCanTouch(isWaterGearChange)
  1768. waterSprayShow.updateGear(currentMotorGer)
  1769. binding.clCookWater.binding.waterSprayShow.updateGear(currentWaterGear)
  1770. if (!userChanging) {
  1771. waterRingView.updateProgress(currentMotorGer)
  1772. }
  1773. }
  1774. }
  1775. /**
  1776. * 更新电机转速的UI
  1777. * @param weight 当前的重量
  1778. */
  1779. @SuppressLint("SetTextI18n")
  1780. private fun updateWeightUI(weight: Float) {
  1781. if (isWeightNum == weight) {
  1782. return
  1783. }
  1784. binding.tvWeightNum.text = "${weight}g"
  1785. binding.weightView.setWeightNumber(weight)
  1786. isWeightNum = weight
  1787. }
  1788. /**
  1789. * 更新各种状态的按钮
  1790. * @param status 设备运行状态
  1791. */
  1792. private fun updateStatusBtn(status: Byte) {
  1793. //当前用户正在修改不更新按钮状态
  1794. if (userChanging) return
  1795. //切碎功能隐藏按钮
  1796. if (viewModel.modeType == ModesType.TURBO.name || viewModel.modeType == ModesType.SM_TURBO.name) {
  1797. binding.apply {
  1798. btnStart.visibility = View.GONE
  1799. btnResume.visibility = View.GONE
  1800. btnPause.visibility = View.GONE
  1801. btnStop.visibility = View.GONE
  1802. btnCancel.visibility = View.GONE
  1803. btnConfirm.visibility = View.GONE
  1804. }
  1805. return
  1806. }
  1807. if (viewModel.modeType == ModesType.WIGHT.name || viewModel.modeType == ModesType.SM_WIGHT.name) {
  1808. binding.apply {
  1809. btnStart.visibility = View.GONE
  1810. btnResume.visibility = View.GONE
  1811. btnPause.visibility = View.GONE
  1812. btnStop.visibility = View.GONE
  1813. btnCancel.visibility = View.GONE
  1814. btnConfirm.visibility = View.GONE
  1815. }
  1816. return
  1817. }
  1818. when (status) {
  1819. DevStatus.RUNNING -> {
  1820. binding.apply {
  1821. ivWeight.visibility = View.GONE
  1822. ivTurbo.visibility = View.GONE
  1823. ivEggs.visibility = View.GONE
  1824. btnStart.visibility = View.INVISIBLE
  1825. btnStop.visibility = View.VISIBLE
  1826. btnResume.visibility = View.INVISIBLE
  1827. btnPause.visibility = View.VISIBLE
  1828. btnReset.visibility = View.INVISIBLE
  1829. //2023.11.21 运行过程中暂停,修改参数之后点一次就启动 处理标识
  1830. confirmType = false
  1831. }
  1832. }
  1833. DevStatus.PAUSE -> {
  1834. /**
  1835. * 2023.11.21 运行过程中暂停,修改参数之后点一次就启动
  1836. * 由于调用resume 会触发 updateStatusBtn ,会导致按钮显示一下在隐藏
  1837. * 故写一个confirmType来辨别是confirmClick 点击
  1838. * 逻辑走后,需要在runing 重新设置 confirmType设置false
  1839. * */
  1840. binding.apply {
  1841. if (viewModel.modeType == ModesType.CITRUS_JUICER.name
  1842. || viewModel.modeType == ModesType.DICING.name
  1843. || viewModel.modeType == ModesType.POTATO_PEELER.name
  1844. ) {
  1845. if (sn.startsWith("011")) {
  1846. binding.ivTurbo.visibility = View.INVISIBLE
  1847. binding.ivWeight.visibility = View.INVISIBLE
  1848. } else {
  1849. ivWeight.visibility = View.VISIBLE
  1850. binding.ivTurbo.visibility = View.GONE
  1851. }
  1852. } else {
  1853. ivWeight.visibility = View.VISIBLE
  1854. binding.ivTurbo.visibility = View.GONE
  1855. }
  1856. btnStart.visibility = View.INVISIBLE
  1857. if (confirmType) btnResume.visibility =
  1858. View.INVISIBLE else btnResume.visibility = View.VISIBLE
  1859. // btnResume.visibility = View.VISIBLE
  1860. btnPause.visibility = View.INVISIBLE
  1861. btnStop.visibility = View.VISIBLE
  1862. btnCancel.visibility = View.INVISIBLE
  1863. btnConfirm.visibility = View.INVISIBLE
  1864. btnReset.visibility = View.INVISIBLE
  1865. }
  1866. }
  1867. DevStatus.STOP -> {
  1868. binding.apply {
  1869. if (viewModel.modeType == ModesType.CITRUS_JUICER.name
  1870. || viewModel.modeType == ModesType.DICING.name
  1871. || viewModel.modeType == ModesType.POTATO_PEELER.name
  1872. ) {
  1873. if (sn.startsWith("011")) {
  1874. binding.ivTurbo.visibility = View.INVISIBLE
  1875. binding.ivWeight.visibility = View.INVISIBLE
  1876. } else {
  1877. ivWeight.visibility = View.VISIBLE
  1878. ivTurbo.visibility = View.VISIBLE
  1879. }
  1880. } else {
  1881. if (isModelNum == "5067" && viewModel.modeType == ModesType.SM_WIGHT.name) {
  1882. ivWeight.visibility = View.GONE
  1883. ivTurbo.visibility = View.GONE
  1884. } else {
  1885. if (viewModel.modeType == ModesType.AUTO_CLEAN.name) {
  1886. ivWeight.visibility = View.GONE
  1887. ivTurbo.visibility = View.GONE
  1888. } else {
  1889. ivWeight.visibility = View.VISIBLE
  1890. ivTurbo.visibility = View.VISIBLE
  1891. }
  1892. }
  1893. }
  1894. visibilityEgg(View.VISIBLE)
  1895. btnStop.visibility = View.INVISIBLE
  1896. btnStart.visibility = View.VISIBLE
  1897. btnPause.visibility = View.INVISIBLE
  1898. btnResume.visibility = View.INVISIBLE
  1899. btnCancel.visibility = View.INVISIBLE
  1900. btnConfirm.visibility = View.INVISIBLE
  1901. btnReset.visibility = View.VISIBLE
  1902. }
  1903. }
  1904. }
  1905. turnDevModeUI()
  1906. }
  1907. /**
  1908. * 显示/隐藏 确认取消按钮
  1909. */
  1910. private fun showConfirmAndCancelBtn() {
  1911. if (currDevInfo.status.toByte() != DevStatus.STOP) {
  1912. binding.btnCancel.visibility = View.VISIBLE
  1913. binding.btnConfirm.visibility = View.VISIBLE
  1914. binding.btnStop.visibility = View.GONE
  1915. binding.btnPause.visibility = View.GONE
  1916. binding.btnResume.visibility = View.GONE
  1917. binding.btnReset.visibility = View.GONE
  1918. binding.btnStart.visibility = View.GONE
  1919. }
  1920. }
  1921. //============================================================操作事件的响应方法=================================================\\
  1922. /**
  1923. * 点击开始操作
  1924. */
  1925. private fun startClick(showStopTips: Boolean = true) {
  1926. var devInfo = CofarSDK.devInfo()
  1927. //判断是否是空炸错误,由于汤锅错误SDK 已经做了
  1928. if (ConfigUtils.getBooleanErrCode(devInfo.errCode.toInt()) && devInfo.devMode == DevModes.AIR_FRYER) {
  1929. lastMsg = ""
  1930. showErrCodeDialog(devInfo.errCode.toInt())
  1931. } else {
  1932. //devInfo.potStatus 0是有锅 1是没锅
  1933. // //devInfo.potCloverStatus 0是合盖,1是没盒盖
  1934. // if (CofarSDK.devInfo().potCloverStatus.toInt() == 1) {
  1935. // showPotCloverDialog()
  1936. // }
  1937. /**
  1938. * 需求:扭橙模式一打开,如果没有扭橙汁配件时需要提示
  1939. * CofarSDK.devInfo().resetZero.toInt()==1 代表已经是扭橙汁配件
  1940. *
  1941. * 提示 dev_dice_and_peel_tips
  1942. * */
  1943. if (modeType == WorkModes.CITRUS_JUICER && CofarSDK.devInfo().resetZero.toInt() != 1) {
  1944. showMsgDialog(resources.getString(com.develop.common.R.string.dev_dice_and_peel_tips))
  1945. return
  1946. }
  1947. /**
  1948. * 需求:非扭橙模式打开点击运行,且是扭橙的配件时需要提示用户
  1949. * CofarSDK.devInfo().resetZero.toInt()==1 代表已经是扭橙汁配件
  1950. * 之前是dev_remove_orange_parts
  1951. * 现在改回dev_dice_and_peel_tips
  1952. * */
  1953. if (modeType != WorkModes.CITRUS_JUICER && CofarSDK.devInfo().resetZero.toInt() == 1) {
  1954. showMsgDialog(resources.getString(com.develop.common.R.string.dev_dice_and_peel_tips))
  1955. return
  1956. }
  1957. if (CofarSDK.devInfo().potStatus.toInt() == 1) {
  1958. if (baseSn.startsWith("011")) {
  1959. showErrMsgDialog("mei_fang_guo_yi_chan_011")
  1960. } else {
  1961. showErrMsgDialog("mei_fang_guo_yi_chan")
  1962. }
  1963. } else if (CofarSDK.devInfo().potStatus.toInt() == 0 && CofarSDK.devInfo().potCloverStatus.toInt() == 1) {
  1964. showPotCloverDialog()
  1965. } else if (mRunningInstId != mSettingInstId) {
  1966. overrideModeDialog.showDialog(supportFragmentManager, "overrideModeDialog")
  1967. overrideModeDialog.onConfirmClick()
  1968. } else {
  1969. userChanging = false
  1970. isClickType = 1
  1971. CofarSDK.cancel()
  1972. CofarSDK.devInfo().runningRecipeId = null
  1973. //处理010 033 后台后回来的显示转速问题
  1974. startMotorGer = if (CofarSDK.devInfo().motorGearBuffer.toInt()!=-1) CofarSDK.devInfo().motorGearBuffer.toInt() else if (CofarSDK.devInfo().motorGear.toInt()!=0) CofarSDK.devInfo().motorGear.toInt() else currentMotorGer
  1975. var startConfig = HashMap<String, Any>()
  1976. startConfig.put("stopTips", showStopTips)
  1977. CofarSDK.startWithConfig(viewModel.modeType, startConfig)
  1978. whereIndex = -1
  1979. binding.clSetTime.stopAlphaAnim()
  1980. }
  1981. }
  1982. }
  1983. private fun showPotCloverDialog() {
  1984. val warnDialog = PotCoverUnlockedDialog()
  1985. warnDialog.showDialog(supportFragmentManager, "PotCloverDialog")
  1986. }
  1987. /**
  1988. * 点击恢复操作
  1989. */
  1990. private fun resumeClick() {
  1991. /**
  1992. * 做这个判断原因是,有可能是扭橙自动程序,start 以后,按返回键程序后台
  1993. * 不在这个页面的后台中,把扭橙锅盖打开sdk 会调用暂停方法 ,然后重新进入到扭橙页面,把锅盖换成汤锅盖
  1994. * 然后在点击resume按钮就会提示 errCode=16 错误提示,但011客户不想这样以errCode=16的提示,估所有都做判断显示换配件
  1995. * 会导致 resetZero=1,errCode=16,估在
  1996. * */
  1997. if (modeType == WorkModes.CITRUS_JUICER && CofarSDK.devInfo().resetZero.toInt() == 1 && CofarSDK.devInfo().errCode.toInt() == 16) {
  1998. showMsgDialog(resources.getString(com.develop.common.R.string.dev_dice_and_peel_tips))
  1999. return
  2000. }
  2001. /**
  2002. * 需求:扭橙模式一打开,如果没有扭橙汁配件时需要提示
  2003. * CofarSDK.devInfo().resetZero.toInt()==1 代表已经是扭橙汁配件
  2004. *
  2005. * 提示 dev_dice_and_peel_tips
  2006. * */
  2007. if (modeType == WorkModes.CITRUS_JUICER && CofarSDK.devInfo().resetZero.toInt() != 1) {
  2008. showMsgDialog(resources.getString(com.develop.common.R.string.dev_dice_and_peel_tips))
  2009. return
  2010. }
  2011. /**
  2012. * 需求:非扭橙模式打开点击运行,且是扭橙的配件时需要提示用户
  2013. * CofarSDK.devInfo().resetZero.toInt()==1 代表已经是扭橙汁配件
  2014. * 之前是dev_remove_orange_parts
  2015. * 现在改回dev_dice_and_peel_tips
  2016. * */
  2017. if (modeType != WorkModes.CITRUS_JUICER && CofarSDK.devInfo().resetZero.toInt() == 1) {
  2018. showMsgDialog(resources.getString(com.develop.common.R.string.dev_dice_and_peel_tips))
  2019. return
  2020. }
  2021. if (CofarSDK.devInfo().potStatus.toInt() == 1) {
  2022. if (baseSn.startsWith("011")) {
  2023. showErrMsgDialog("mei_fang_guo_yi_chan_011")
  2024. } else {
  2025. showErrMsgDialog("mei_fang_guo_yi_chan")
  2026. }
  2027. return
  2028. }
  2029. if (CofarSDK.devInfo().potStatus.toInt() == 0 && CofarSDK.devInfo().potCloverStatus.toInt() == 1) {
  2030. showPotCloverDialog()
  2031. return
  2032. }
  2033. userChanging = false
  2034. CofarSDK.resume()
  2035. }
  2036. /**
  2037. * 点击取消操作
  2038. */
  2039. private fun cancelClick() {
  2040. //取消
  2041. userChanging = false
  2042. CofarSDK.cancel()
  2043. binding.btnCancel.visibility = View.GONE
  2044. binding.btnConfirm.visibility = View.GONE
  2045. }
  2046. /**
  2047. * 点击确认操作
  2048. */
  2049. private fun confirmClick() {
  2050. whereIndex = -1
  2051. binding.clSetTime.stopAlphaAnim()
  2052. //确认
  2053. userChanging = false
  2054. //处理010 033 后台后回来的显示转速问题
  2055. startMotorGer = if (CofarSDK.devInfo().motorGearBuffer.toInt()!=-1) CofarSDK.devInfo().motorGearBuffer.toInt() else if (CofarSDK.devInfo().motorGear.toInt()!=0) CofarSDK.devInfo().motorGear.toInt() else currentMotorGer
  2056. //配置
  2057. CofarSDK.confirm()
  2058. binding.btnCancel.visibility = View.GONE
  2059. binding.btnConfirm.visibility = View.GONE
  2060. /**
  2061. * 2023.11.21 运行过程中暂停,修改参数之后点一次就启动
  2062. * 由于调用resume 会触发 updateStatusBtn ,会导致按钮显示一下在隐藏
  2063. * 故写一个confirmType来辨别是confirmClick 点击
  2064. * */
  2065. confirmType = true //确定是 confirm
  2066. binding.btnResume.visibility = View.INVISIBLE
  2067. userChanging = false
  2068. Handler().postDelayed({
  2069. CofarSDK.resume()
  2070. }, 200)
  2071. }
  2072. private fun resetConfigClick() {
  2073. //确认
  2074. userChanging = false
  2075. initModeData(modeType)
  2076. }
  2077. /**
  2078. * 点击停止操作
  2079. */
  2080. private fun stopClick(tips: Boolean = true) {
  2081. userChanging = false
  2082. //中途系统出现故障记录
  2083. isClickType = 0
  2084. //结束
  2085. CofarSDK.stop(tips)
  2086. try {
  2087. FloatWindowManager.hideStepFlowWindow()
  2088. } catch (e: Exception) {
  2089. print(e)
  2090. }
  2091. }
  2092. /**
  2093. * 点击暂停操作
  2094. */
  2095. private fun pauseClick() {
  2096. userChanging = false
  2097. isClickType = 2
  2098. CofarSDK.pause()
  2099. }
  2100. /**
  2101. * 点击称重操作
  2102. */
  2103. private fun weightClick() {
  2104. // CofarSDK.stop(false)
  2105. whereIndex = -1
  2106. binding.clSetTime.stopAlphaAnim()
  2107. modeChange = true
  2108. viewModel.modeType = ModesType.WIGHT.name
  2109. modeType = viewModel.modeType
  2110. initModeData(viewModel.modeType)
  2111. viewModel.changeStep(CookSettingType.WEIGHT)
  2112. binding.ivTurbo.visibility = View.GONE
  2113. visibilityEgg(View.GONE)
  2114. binding.ivTurbo.visibility = View.INVISIBLE
  2115. binding.ivPotCover.setGone()
  2116. binding.tvCount.setGone()
  2117. isWidget = false
  2118. binding.ivWeight.visibility = View.INVISIBLE
  2119. binding.tvModeName.text = viewModel.getModeTitle(resources)
  2120. }
  2121. /**
  2122. * 点击turbo操作
  2123. */
  2124. private fun turboClick() {
  2125. binding.ivPotCover.setGone()
  2126. binding.tvCount.setGone()
  2127. CofarSDK.stop(false)
  2128. whereIndex = -1
  2129. binding.clSetTime.stopAlphaAnim()
  2130. modeChange = true
  2131. viewModel.modeType = ModesType.TURBO.name
  2132. modeType = viewModel.modeType
  2133. initModeData(viewModel.modeType)
  2134. viewModel.changeStep(CookSettingType.TURBO)
  2135. //由于之前没有配置兼容包,直接在公用的翻译添加自动程序名字+后缀_010的翻译,估在这写
  2136. binding.tvModeName.text =
  2137. if (sn.startsWith("010")) viewModel.getModeTitle(resources) else viewModel.getModeTitle(
  2138. resources
  2139. )
  2140. binding.ivTurbo.visibility = View.GONE
  2141. visibilityEgg(View.GONE)
  2142. isWidget = false
  2143. binding.ivWeight.visibility = View.INVISIBLE
  2144. Log.d("dddddd", "llTurboView===VISIBLE")
  2145. binding.llTurboView.visibility = View.VISIBLE
  2146. }
  2147. /**
  2148. * 点击称重清0操作
  2149. */
  2150. private fun weightClearClick() {
  2151. //称重清0
  2152. userChanging = false
  2153. CofarSDK.clearWeight()
  2154. }
  2155. /**
  2156. * 点击返回按钮操作
  2157. */
  2158. private fun backClick() {
  2159. if (modeChange) {
  2160. if (modeType == ModesType.TURBO.name || modeType == ModesType.SM_TURBO.name) { //TURBO未停止之前不能退出
  2161. CofarSDK.stop(false)
  2162. if (DevStatus.STOP != CofarSDK.devInfo().status.toByte()) {
  2163. return
  2164. }
  2165. //先注释掉,忘记有什么用了
  2166. // turboLock = true
  2167. // ThreadUtils.runOnMainThread({turboLock = false},2000);
  2168. }
  2169. ThreadUtils.runOnMainThread {
  2170. var cm = viewModel.modeType;
  2171. modeType = viewModel.lastModeType
  2172. viewModel.modeType = viewModel.lastModeType
  2173. //binding.tvModeName.text = viewModel.getModeTitle(resources)
  2174. var workMode = ConfigUtils.getMode(modeType)
  2175. if (!isNightTheme()) {
  2176. if (workMode == null) {
  2177. Glide.with(this).load(com.develop.common.R.drawable.ic_mode_diy)
  2178. .into(binding.ivBanner)
  2179. } else {
  2180. Glide.with(this).load(
  2181. resources.getIdentifier(
  2182. workMode.bg,
  2183. "drawable",
  2184. this.packageName
  2185. )
  2186. )
  2187. .into(binding.ivBanner)
  2188. }
  2189. }
  2190. binding.tvModeName.text =
  2191. getString(resources.getIdentifier(workMode?.name, "string", this.packageName))
  2192. modeChange = false
  2193. Log.d("dddddd", "llTurboView===GONE")
  2194. binding.llTurboView.visibility = View.GONE
  2195. initModeData(modeType, cm == ModesType.WIGHT.name || cm == ModesType.TURBO.name)
  2196. changeCommonStep()
  2197. }
  2198. } else if (mRunningState != 0 && viewModel.modeType != ModesType.WIGHT.name && viewModel.modeType != ModesType.TURBO.name) {
  2199. if (CofarSDK.devInfo().runningInstId == viewModel.modeType) backRequestDialog.showDialog(
  2200. supportFragmentManager, "backRequestDialog"
  2201. )
  2202. else {
  2203. CofarSDK.stoptWeight()
  2204. finish()
  2205. }
  2206. } else {
  2207. /**
  2208. * 由于 app 按暂停 和 料理机同时按 backRequestDialog YES 会导致 ,重新点击悬浮进来的模式是暂停的
  2209. * 按返回退出的话不会消除悬浮,估在这加多一个消除悬浮代码
  2210. * **/
  2211. FloatWindowManager.hideStepFlowWindow()
  2212. CofarSDK.stoptWeight()
  2213. finish()
  2214. }
  2215. }
  2216. /**
  2217. * 旋转温度事件
  2218. */
  2219. private fun tempRingEvent(progress: Int) {
  2220. userChanging = true
  2221. binding.tempRingText.text = "${progress}°C"
  2222. binding.clCookTemp.setConfigValue("--${progress}°C--")
  2223. CofarSDK.cfgHeat(progress.toShort(), HeatModes.PU_TONG);
  2224. showConfirmAndCancelBtn()
  2225. }
  2226. private fun waterGearSpeedEvent(progress: Int) {
  2227. userChanging = true
  2228. CofarSDK.cfgWaterBear(progress);
  2229. showConfirmAndCancelBtn()
  2230. }
  2231. /**
  2232. * 旋转电机转速事件
  2233. */
  2234. private fun motorGearSpeedEvent(progress: Int) {
  2235. userChanging = true
  2236. binding.speedRingText.text = "$progress"
  2237. CofarSDK.cfgMotorGear(progress.toByte());
  2238. showConfirmAndCancelBtn()
  2239. }
  2240. /**
  2241. * 点击电机方向事件
  2242. */
  2243. private fun motorGearDirectionClick(direction: DirectionView.Direction) {
  2244. if (isMotorDirectionGearChange) {
  2245. userChanging = true
  2246. binding.clCookDirection.updateChangeValue(
  2247. viewModel.getDirectionStr(
  2248. direction == DirectionView.Direction.LEFT, resources
  2249. )
  2250. )
  2251. binding.flDirection.updateDirectionView(
  2252. if (direction == DirectionView.Direction.LEFT) DirectionView.Direction.LEFT
  2253. else DirectionView.Direction.RIGHT
  2254. )
  2255. if (direction != DirectionView.Direction.RIGHT) {
  2256. CofarSDK.cfgMotorDirection(MotorDirections.REVERSE);
  2257. updateMotorDirectionUI(MotorDirections.REVERSE.toInt(), true);
  2258. } else {
  2259. CofarSDK.cfgMotorDirection(MotorDirections.FORWARD);
  2260. updateMotorDirectionUI(MotorDirections.FORWARD.toInt(), true);
  2261. }
  2262. showConfirmAndCancelBtn()
  2263. }
  2264. }
  2265. /**
  2266. * 滑动时间事件
  2267. */
  2268. private fun rollTimeEvent(
  2269. hours: Int, minute: Int, second: Int, time: String, setByUser: Boolean, type: String
  2270. ) {
  2271. if (setByUser) {
  2272. userChanging = true
  2273. binding.clCookTime.setConfigValue("--${time}--")
  2274. CofarSDK.cfgTime((second + (minute + hours * 60) * 60))
  2275. showConfirmAndCancelBtn()
  2276. }
  2277. }
  2278. /**
  2279. * turbo按下事件
  2280. */
  2281. private fun turboDownEvent() {
  2282. binding.ivTurboView.src = com.develop.common.R.drawable.ic_turbo_selected
  2283. viewModel.startTurbo()
  2284. }
  2285. /**
  2286. * turbo离开事件
  2287. */
  2288. private fun turboUpEvent() {
  2289. binding.ivTurboView.src = com.develop.common.R.drawable.ic_turbo_unselected
  2290. viewModel.stopTurbo()
  2291. }
  2292. private fun init011Mode(obj: Any) {
  2293. }
  2294. private fun setEggTime(size: Int, hardness: Int) {
  2295. var time: Int = 0
  2296. when (size) {
  2297. 1 -> {//小
  2298. when (hardness) {
  2299. 1 -> {//软
  2300. time = 6 * 60
  2301. }
  2302. 2 -> {//中
  2303. time = 9 * 60
  2304. }
  2305. 3 -> {//硬
  2306. time = 13 * 60
  2307. }
  2308. else -> {
  2309. time = 0
  2310. }
  2311. }
  2312. }
  2313. 2 -> {//中
  2314. when (hardness) {
  2315. 1 -> {//软
  2316. time = 7 * 60
  2317. }
  2318. 2 -> {//中
  2319. time = 10 * 60
  2320. }
  2321. 3 -> {//硬
  2322. time = 14 * 60
  2323. }
  2324. else -> {
  2325. time = 0
  2326. }
  2327. }
  2328. }
  2329. 3 -> {//大
  2330. when (hardness) {
  2331. 1 -> {//软
  2332. time = 8 * 60
  2333. }
  2334. 2 -> {//中
  2335. time = 11 * 60
  2336. }
  2337. 3 -> {//硬
  2338. time = 15 * 60
  2339. }
  2340. else -> {
  2341. time = 0
  2342. }
  2343. }
  2344. }
  2345. else -> {
  2346. time = 0
  2347. }
  2348. }
  2349. if (time == 0) {
  2350. return
  2351. }
  2352. //确认
  2353. userChanging = false
  2354. CofarSDK.cfgMotorGear(1)
  2355. CofarSDK.cfgTime(time)
  2356. CofarSDK.confirm()
  2357. }
  2358. private fun visibilityEgg(visibility: Int) {
  2359. //2023.12.11 000A客户,鸡蛋程序还未完整,需隐藏
  2360. if ("COOK_EGGS" == viewModel.modeType) {
  2361. binding.ivEggs.visibility = visibility
  2362. //由于鸡蛋SDK默认时间只有20秒,需要自己另行设置
  2363. CofarSDK.devInfo().mode.maxTime = 20 * 60
  2364. } else {
  2365. binding.ivEggs.visibility = View.GONE
  2366. }
  2367. }
  2368. private fun showErrCodeDialog(code: Int) {
  2369. var errCodeStr = ConfigUtils.getErrCodeStr(this, code)
  2370. if (errCodeStr.isNullOrEmpty() || lastMsg == "e" + code + "_errCode") {
  2371. return
  2372. }
  2373. lastMsg = "e" + code + "_errCode"
  2374. deviceStateDialog.showCancel = false
  2375. deviceStateDialog.showConfirm = true
  2376. deviceStateDialog.confirmStr = getString(com.develop.common.R.string.pmpt_confirm)
  2377. deviceStateDialog.title = errCodeStr
  2378. deviceStateDialog.showDialog(supportFragmentManager, "errCodeCancelDialog")
  2379. deviceStateDialog.onDialogClickListener =
  2380. object : CancelConfirmDialog.OnDialogClickListener {
  2381. override fun onConfirm() {
  2382. deviceStateDialog.removeSelf();
  2383. // lastMsg = "";
  2384. }
  2385. override fun onCancel() {
  2386. deviceStateDialog.removeSelf();
  2387. // lastMsg = "";
  2388. }
  2389. override fun onKey() {
  2390. }
  2391. }
  2392. }
  2393. private fun showErrMsgDialog(msg: String) {
  2394. if (lastMsg == msg) {
  2395. return
  2396. }
  2397. lastMsg = msg
  2398. deviceStateDialog.showCancel = false
  2399. deviceStateDialog.showConfirm = true
  2400. deviceStateDialog.confirmStr = getString(com.develop.common.R.string.pmpt_confirm)
  2401. deviceStateDialog.title = resources.getString(
  2402. resources.getIdentifier(
  2403. lastMsg, "string", this.packageName
  2404. )
  2405. )
  2406. deviceStateDialog.showDialog(supportFragmentManager, "errCodeCancelDialog")
  2407. deviceStateDialog.onDialogClickListener =
  2408. object : CancelConfirmDialog.OnDialogClickListener {
  2409. override fun onConfirm() {
  2410. deviceStateDialog.removeSelf();
  2411. lastMsg = "";
  2412. }
  2413. override fun onCancel() {
  2414. deviceStateDialog.removeSelf();
  2415. lastMsg = "";
  2416. }
  2417. override fun onKey() {
  2418. }
  2419. }
  2420. }
  2421. //当换锅的时候,需要做的逻辑
  2422. @Subscribe
  2423. fun onDevModeChange(event: DevCommonEvent) {
  2424. //在当前页面,换了模式以后 重新启动
  2425. if (CommonEventTypes.DEV_MODE_CHANGE == event.type) {
  2426. //针对DIY处理
  2427. if (workMode?.devMode != CofarSDK.devInfo().devMode && (lastModeType == WorkModes.ADAPTED_COOKING || lastModeType == WorkModes.AF_DIY)) {
  2428. // isWidget = false
  2429. // viewModel.stopTurbo()
  2430. // viewModel.cancelAnimator()
  2431. // hasShowScreenSaver = false
  2432. navigateTo(Screens.Cook.COOK_MODES) {
  2433. if (DevModes.SOUP == CofarSDK.devInfo().devMode) {
  2434. val bundle = Bundle()
  2435. bundle.putString(MODE_TYPE, WorkModes.ADAPTED_COOKING)
  2436. bundle.putString(
  2437. "mode_name",
  2438. resources.getString(com.develop.common.R.string.adapted_cooking)
  2439. )
  2440. with(bundle)
  2441. } else {
  2442. val bundle = Bundle()
  2443. bundle.putString(MODE_TYPE, WorkModes.AF_DIY)
  2444. with(bundle)
  2445. }
  2446. }
  2447. finish()
  2448. } else {
  2449. //称重留在当前页面
  2450. if (workMode?.devMode == CofarSDK.devInfo().devMode || workMode?.type == "WIGHT") {
  2451. return
  2452. } else {
  2453. finish()
  2454. }
  2455. }
  2456. }
  2457. }
  2458. override fun onNewIntent(intent: Intent?) {
  2459. super.onNewIntent(intent)
  2460. }
  2461. @Override
  2462. override fun onTuyaMsg(event: TuyaEventEntity) {
  2463. //处理 2577 bug问题
  2464. when (event.isType) {
  2465. 0 -> {
  2466. //模式
  2467. if (CofarSDK.devInfo().runningStatus != DevStatus.STOP) {
  2468. showMsgOKDialog(getString(com.develop.common.R.string.running_block_tips))
  2469. }
  2470. }
  2471. 1 -> {
  2472. //食谱
  2473. if (CofarSDK.devInfo().runningStatus != DevStatus.STOP) {
  2474. var backDialog = CancelConfirmDialog()
  2475. backDialog.apply {
  2476. title =
  2477. ctx.getString(com.develop.common.R.string.keep_cooking_in_the_background)
  2478. onDialogClickListener = object : CancelConfirmDialog.OnDialogClickListener {
  2479. override fun onConfirm() {
  2480. if (CofarSDK.devInfo().status == DevStatus.STOP.toInt()) {
  2481. FloatWindowManager.hideStepFlowWindow()
  2482. finish()
  2483. return
  2484. }
  2485. runOnMainThread {
  2486. var workMode = ConfigUtils.getMode(modeType)
  2487. val cookStepEvent = CookStepEvent(
  2488. coverPath = ctx.theme.resources.getIdentifier(
  2489. workMode?.icon,
  2490. "drawable",
  2491. packageName
  2492. ),
  2493. isMode = true,
  2494. modeType = viewModel.modeType,
  2495. modeName = getString(
  2496. resources.getIdentifier(
  2497. workMode?.name,
  2498. "string",
  2499. packageName
  2500. )
  2501. )
  2502. )
  2503. FloatWindowManager.showStepFlowWindow(cookStepEvent)
  2504. getRecipe(event.recipeNumber ?: "")
  2505. finish()
  2506. }
  2507. }
  2508. override fun onCancel() {
  2509. runOnMainThread {
  2510. FloatWindowManager.hideStepFlowWindow()
  2511. CofarSDK.stop()
  2512. getRecipe(event.recipeNumber ?: "")
  2513. finish()
  2514. }
  2515. }
  2516. override fun onKey() {
  2517. }
  2518. }
  2519. }
  2520. backDialog.showDialog(
  2521. supportFragmentManager, "backRequestDialog"
  2522. )
  2523. }
  2524. }
  2525. else -> {
  2526. }
  2527. }
  2528. }
  2529. private fun setKneadMotorGear(isStop: Boolean) {
  2530. //处理5/7/10寸屏,默认转速不同
  2531. if (modeType == WorkModes.KNEAD || modeType == WorkModes.KNEAD_TOUGH ) {
  2532. var defMotorGear = when (StringUtils.getWindowsScreen(this@ModesDetailActivity)) {
  2533. 5 -> {
  2534. 1
  2535. }
  2536. 7 -> {
  2537. 3
  2538. }
  2539. 10 -> {
  2540. 3
  2541. }
  2542. else -> {
  2543. 1
  2544. }
  2545. }
  2546. baseMode.defaultMotorGear = defMotorGear
  2547. // if (isStop){
  2548. //// baseMode.isMotorGearChange = true
  2549. // CofarSDK.devInfo().motorGear = defMotorGear.toByte()
  2550. //// CofarSDK.cfgMotorGear(defMotorGear.toByte())
  2551. // }
  2552. // CofarSDK.cfgMotorGearNative((byte)this.initMotorGear);
  2553. }
  2554. }
  2555. //程序运行完以后回调
  2556. override fun onDevStop() {
  2557. setKneadMotorGear(true)
  2558. }
  2559. private fun getRecipe(number: String) {
  2560. FoodDataProvider.getDatabase().recipeDao().apply {
  2561. var recipeNumber = number
  2562. if (recipeNumber.contains("@")) {
  2563. var (numbers, language) = recipeNumber.split("@")
  2564. recipeNumber = numbers
  2565. }
  2566. val recipeBean = queryRecipe(recipeNumber)
  2567. if (recipeBean != null) {
  2568. navigateTo(Screens.Cook.COOK_DETAIL) {
  2569. withString(
  2570. SOURCE_TAG, "local"
  2571. )
  2572. withString(NUMBER_TAG, number)
  2573. }
  2574. } else {
  2575. navigateTo(Screens.Cook.COOK_DETAIL) {
  2576. withString(
  2577. SOURCE_TAG, "remote"
  2578. )
  2579. withString(NUMBER_TAG, number)
  2580. }
  2581. }
  2582. }
  2583. }
  2584. }