Selaa lähdekoodia

1、本地闹钟
2、logo设置优化

ccc 1 päivä sitten
vanhempi
commit
2fbaa0d1f1
27 muutettua tiedostoa jossa 318 lisäystä ja 123 poistoa
  1. 1 1
      app/src/main/AndroidManifest.xml
  2. 2 2
      buildSrc/src/main/kotlin/com/quyunshuo/sbm10/buildsrc/ProjectBuildConfig.kt
  3. 29 30
      lib_base/src/main/java/com/quyunshuo/sbm10/base/mvvm/v/BaseFrameFragment.kt
  4. BIN
      lib_base/src/main/res/drawable/icon_p10.png
  5. 6 3
      lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MMKVName.kt
  6. 2 1
      lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MqName.kt
  7. 2 0
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AlarmManagerUtil.java
  8. 3 3
      lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AlarmSettingUtil.kt
  9. 50 22
      module_backstage/src/main/java/com/module/backstage/adapter/TestAdapter.kt
  10. 1 1
      module_backstage/src/main/java/com/module/backstage/dialog/LocalAlarmClockDialog.kt
  11. 3 0
      module_backstage/src/main/java/com/module/backstage/fragment/other/SystemSettingsFragment.kt
  12. 5 4
      module_backstage/src/main/java/com/module/backstage/vm/OtherFragmentVM.kt
  13. 2 1
      module_backstage/src/main/java/com/module/backstage/vm/SystemSettingsFragmentVM.kt
  14. 1 0
      module_backstage/src/main/res/layout/backstage_dialog_local_alarm_clock.xml
  15. 1 2
      module_home/src/main/AndroidManifest.xml
  16. 3 3
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/BuyFragment.kt
  17. 3 3
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/HomeFragment.kt
  18. 5 4
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt
  19. 9 3
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/SleepFragment.kt
  20. 46 10
      module_home/src/main/java/com/quyunshuo/module/home/receiver/TimedCleaningTaskAlarmReceiver.java
  21. 20 0
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt
  22. 2 0
      module_home/src/main/java/com/quyunshuo/module/home/service/GlobalServiceViewModel.kt
  23. 3 2
      module_home/src/main/java/com/quyunshuo/module/home/service/MqService.kt
  24. 16 11
      module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt
  25. 14 8
      module_home/src/main/res/layout/home_fragment_make.xml
  26. 30 0
      module_home/src/main/res/layout/home_fragment_sleep_block.xml
  27. 59 9
      serialport-api/src/main/java/com/hboxs/serialport/sbc/thread/ThreadGlobalParam.kt

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -24,7 +24,7 @@
     <application
         android:name="com.sunzee.app.AppApplication"
         android:allowBackup="false"
-        android:icon="@drawable/pic_sc_01"
+        android:icon="@drawable/icon_p10"
         android:label="@string/app_name"
         android:networkSecurityConfig="@xml/network_security_config"
         android:roundIcon="@mipmap/ic_launcher_round"

+ 2 - 2
buildSrc/src/main/kotlin/com/quyunshuo/sbm10/buildsrc/ProjectBuildConfig.kt

@@ -11,8 +11,8 @@ object ProjectBuildConfig {
     const val applicationId = "com.quyunshuo.sbm10"
     const val minSdkVersion = 21
     const val targetSdkVersion = 29
-    const val versionCode = 17
-    const val versionName = "1.0.17"
+    const val versionCode = 17//版本号
+    const val versionName = "1.0.17"//版本名
     const val isAppMode = false
     const val appVersion = 1  //国内外版本修改
 

+ 29 - 30
lib_base/src/main/java/com/quyunshuo/sbm10/base/mvvm/v/BaseFrameFragment.kt

@@ -50,9 +50,9 @@ abstract class BaseFrameFragment<VB : ViewBinding, VM : BaseViewModel> : Fragmen
         // ARouter 依赖注入
         ARouter.getInstance().inject(this)
         var className = javaClass.name
-        Log.d("backinfo", "类名:" + className)//获取当前fragment
-        var fragmentName = ""
-        fragmentName = getclassName(className, fragmentName)
+        Log.d("backinfo", "类名:" + className)
+        //获取当前fragment
+        val fragmentName: String = getclassName(className)
         XLogUtil.d("进入了$fragmentName")
         // 根据子类是否有 RegisterEventBus 注解決定是否进行注册 EventBus
         if (javaClass.isAnnotationPresent(RegisterEventBus::class.java)) {
@@ -74,43 +74,42 @@ abstract class BaseFrameFragment<VB : ViewBinding, VM : BaseViewModel> : Fragmen
     }
 
     override fun onDestroy() {
-
         super.onDestroy()
     }
 
     //用于判断客户进入了什么页面
-    private fun getclassName(className: String, fragmentName: String): String {
-        var fragmentName1 = fragmentName
+    private fun getclassName(className: String): String {
+        val fragmentName:String
         when (className.substringAfterLast(".")) {
-            "BuyFragment" -> fragmentName1 = "广告页"
-            "MakeFragment" -> fragmentName1 = "制作页"
-            "SleepFragment" -> fragmentName1 = "休眠页"
-            "HomeFragment" -> fragmentName1 = "选购页"
-            "UserLoginFragment" -> fragmentName1 = "登录页"
+            "BuyFragment" -> fragmentName = "广告页"
+            "MakeFragment" -> fragmentName = "制作页"
+            "SleepFragment" -> fragmentName = "休眠页"
+            "HomeFragment" -> fragmentName = "选购页"
+            "UserLoginFragment" -> fragmentName = "登录页"
             //            "ProductFragment" -> fragmentName = "选购页"
-            "PriceFragment" -> fragmentName1 = "调价页"
-            "ShowProductFragment" -> fragmentName1 = "商品设置页"
-            "DebugProductFragment" -> fragmentName1 = "商品调试页"
+            "PriceFragment" -> fragmentName = "调价页"
+            "ShowProductFragment" -> fragmentName = "商品设置页"
+            "DebugProductFragment" -> fragmentName = "商品调试页"
             //            "ParamSetFragment" -> fragmentName = "调试页"
-            "DebugParamFragment" -> fragmentName1 = "调试页"
-            "GeneralParamFragment" -> fragmentName1 = "参数调整页"
-            "DebugAlarmFragment" -> fragmentName1 = "报警屏蔽页"
-            "PayFragment" -> fragmentName1 = "支付方式选择页"
-            "DateFragment" -> fragmentName1 = "订单页"
+            "DebugParamFragment" -> fragmentName = "调试页"
+            "GeneralParamFragment" -> fragmentName = "参数调整页"
+            "DebugAlarmFragment" -> fragmentName = "报警屏蔽页"
+            "PayFragment" -> fragmentName = "支付方式选择页"
+            "DateFragment" -> fragmentName = "订单页"
             //            "HistogramDataFragment" -> fragmentName = "选购页"
             //            "OrderDataFragment" -> fragmentName = "选购页"
-            "LanguageFragment" -> fragmentName1 = "语言选择页"
-            "ErrorStatFragment" -> fragmentName1 = "报警记录页"
-            "ResetPwdFragment" -> fragmentName1 = "重置密码页"
-            "LocalAlarmClockFragment" -> fragmentName1 = "闹钟页"
-            "MaterialFragment" -> fragmentName1 = "物料查看页"
-            "SystemSettingsFragment" -> fragmentName1 = "其他设置页"
-            "BillCoinFragment" -> fragmentName1 = "纸币硬币支付"
-            "NayaxCardFragment" -> fragmentName1 = "nayax支付"
-            "QrCodeFragment" -> fragmentName1 = "二码合一支付"
-
+            "LanguageFragment" -> fragmentName = "语言选择页"
+            "ErrorStatFragment" -> fragmentName = "报警记录页"
+            "ResetPwdFragment" -> fragmentName = "重置密码页"
+            "LocalAlarmClockFragment" -> fragmentName = "闹钟页"
+            "MaterialFragment" -> fragmentName = "物料查看页"
+            "SystemSettingsFragment" -> fragmentName = "其他设置页"
+            "BillCoinFragment" -> fragmentName = "纸币硬币支付"
+            "NayaxCardFragment" -> fragmentName = "nayax支付"
+            "QrCodeFragment" -> fragmentName = "二码合一支付"
+            else-> fragmentName=className
         }
-        return fragmentName1
+        return fragmentName
     }
 
 }

BIN
lib_base/src/main/res/drawable/icon_p10.png


+ 6 - 3
lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MMKVName.kt

@@ -186,9 +186,12 @@ abstract class MMKVName {
         val COIN_PULSE_DIVIDE: String
             //硬币脉冲相除
             get() = "COIN_PULSE_DIVIDE"
-        val IS_SHOW_CHANGLOGE: String
-            //是否展示修改logo
-            get() = "IS_SHOW_CHANGLOGE"
+//        val IS_SHOW_CHANGLOGE: String
+//            //是否展示修改logo
+//            get() = "IS_SHOW_CHANGLOGE"
+
+        //是否展示修改logo
+        var IS_SHOW_CHANGLOGE: Boolean = false
 
         val PLC_PATH:String
             //单板机通讯地址默认值

+ 2 - 1
lib_common/src/main/java/com/quyunshuo/sbm10/common/constant/MqName.kt

@@ -10,7 +10,8 @@ object MqName {
     val VOLUME ="volume"//音量调节
     var UPDATE_PRODUCTS_SHOW = "updateProductsShow"//显示花型
     var PAY_SUCCESS = "pay_success"//收到支付成功
-    var SLEEP= "sleep"//开关休眠
+    var SLEEP= "sleep"//远程开关休眠
+    var GO_SLEEP= "go_sleep"//闹钟执行休眠
     var BLOCK = "block"//开关锁机
     var STATUS_TYPE = "statusType"//连接服务器的状态
     var GUEST_PWD = "guestPwd"

+ 2 - 0
lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AlarmManagerUtil.java

@@ -49,6 +49,7 @@ public class AlarmManagerUtil {
      */
     public static void setAlarm(Context context, int flag, int hour, int minute, int second, int id, int
             week, String tips) {
+        Log.d("闹钟测试", "setAlarm:1 ");
             AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
             Calendar calendar = Calendar.getInstance();
             long intervalMillis = 0;
@@ -64,6 +65,7 @@ public class AlarmManagerUtil {
             long startLong = 0L;
             //版本适配 System.currentTimeMillis()
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// 6.0及以上
+                Log.d("闹钟测试", "setAlarm:2 ");
                 //中午十二点会出现问题。
                 startLong = calendar.getTimeInMillis();
                 if (System.currentTimeMillis() >= startLong) {

+ 3 - 3
lib_common/src/main/java/com/quyunshuo/sbm10/common/util/AlarmSettingUtil.kt

@@ -54,9 +54,9 @@ object AlarmSettingUtil {
 //            return 0
 //        }
         for (i in number until alarmNumber) { //清除所有的闹钟
-            com.quyunshuo.sbm10.common.util.AlarmManagerUtil.cancelAlarm(
+            AlarmManagerUtil.cancelAlarm(
                 BaseApplication.context,
-                com.quyunshuo.sbm10.common.util.AlarmManagerUtil.ALARM_ACTION,
+                AlarmManagerUtil.ALARM_ACTION,
                 i
             )
         }
@@ -113,7 +113,7 @@ object AlarmSettingUtil {
 
         //时间。
         for (i in week.indices) {
-            com.quyunshuo.sbm10.common.util.AlarmManagerUtil.setAlarm(
+            AlarmManagerUtil.setAlarm(
                 BaseApplication.context,
                 2,
                 Integer.valueOf(alarmClockBean.hour),

+ 50 - 22
module_backstage/src/main/java/com/module/backstage/adapter/TestAdapter.kt

@@ -7,6 +7,7 @@ import android.content.Context
 import android.content.Intent
 import android.media.AudioManager
 import android.os.Build
+import android.os.Handler
 import android.provider.Settings
 import android.util.Log
 import android.view.LayoutInflater
@@ -36,6 +37,7 @@ import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
+import com.quyunshuo.sbm10.common.util.LongClickUtils
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
 import org.greenrobot.eventbus.EventBus
@@ -98,26 +100,46 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
                     // 绑定 item 数据
                     holder.viewBinding.run {
                         tvName.text = UiUtil.getStringRes(item!!.nameId)
-                        tvName.setOnLongClickListener(object : OnLongClickListener {
-                            override fun onLongClick(v: View?): Boolean {
-                                if (item.mmkvName == MMKVName.PROMOTION_CODE) {
-                                    if (updateClickListener != null) {
-                                        if (SpUtils.getBoolean(
-                                                MMKVName.IS_SHOW_CHANGLOGE, false
-                                            ) == true
-                                        ) {
-                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, false)
-                                        } else {
-                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, true)
-                                        }
-                                        updateClickListener?.setOnLongClickListener(
-                                            item.type, position, ""
-                                        )
-                                    }
+                        LongClickUtils.setLongClick(Handler(), tvName, 5000) {
+                            if (item.mmkvName == MMKVName.PROMOTION_CODE) {
+                                if (updateClickListener != null) {
+                                    MMKVName.IS_SHOW_CHANGLOGE = true
+//                                        if (SpUtils.getBoolean(
+//                                                MMKVName.IS_SHOW_CHANGLOGE, false
+//                                            ) == true
+//                                        ) {
+//                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, false)
+//                                        } else {
+//                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, true)
+//                                        }
+                                    updateClickListener?.setOnLongClickListener(
+                                        item.type, position, ""
+                                    )
                                 }
-                                return false
                             }
-                        })
+                            false
+                        }
+//                        tvName.setOnLongClickListener(object : OnLongClickListener {
+//                            override fun onLongClick(v: View?): Boolean {
+//                                if (item.mmkvName == MMKVName.PROMOTION_CODE) {
+//                                    if (updateClickListener != null) {
+//                                        MMKVName.IS_SHOW_CHANGLOGE=true
+//                                        if (SpUtils.getBoolean(
+//                                                MMKVName.IS_SHOW_CHANGLOGE, false
+//                                            ) == true
+//                                        ) {
+//                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, false)
+//                                        } else {
+//                                            SpUtils.putBoolean(MMKVName.IS_SHOW_CHANGLOGE, true)
+//                                        }
+//                                        updateClickListener?.setOnLongClickListener(
+//                                            item.type, position, ""
+//                                        )
+//                                    }
+//                                }
+//                                return false
+//                            }
+//                        })
                         rgSwitch.setOnCheckedChangeListener { group, checkedId ->
                             when (checkedId) {
                                 R.id.rb_close -> {
@@ -173,14 +195,20 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
 
                         tvName.text = UiUtil.getStringRes(item!!.nameId)
 
-                        var defaultValue = SpUtils.getString(item.mmkvName, item.default as String)
+                        val defaultValue = SpUtils.getString(item.mmkvName, item.default as String)
                         etValue.setText(defaultValue)
                         btnUpdate.setOnClickListener {
-                            val value = etValue.text.trim().toString()
+                            var value = etValue.text.trim().toString()
                             if (value == "") {
                                 ToastUtil.switchToastStyleToWarn("输入为空")
                                 return@setOnClickListener
                             }
+                            if (item.mmkvName == MMKVName.LOGO_TEXT) {
+                                val invalidValues = setOf("1", "2", "7777", "0000")
+                                if (value !in invalidValues) {
+                                    value = "7777"
+                                }
+                            }
                             SpUtils.putString(item.mmkvName, value)
                             ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success) + item.mmkvName)
                         }
@@ -247,7 +275,7 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
                 }
             }).addItemType(
             SLIDER_TYPE,
-            object : OnMultiItemAdapterListener<OtherEnum, SliderVH> { // 类型 2
+            object : OnMultiItemAdapterListener<OtherEnum, SliderVH> { // 类型 4
                 override fun onCreate(
                     context: Context,
                     parent: ViewGroup,
@@ -398,7 +426,7 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
 
             }).addItemType(
             BUTTON_TYPE,
-            object : OnMultiItemAdapterListener<OtherEnum, ButtonVH> { // 类型 2
+            object : OnMultiItemAdapterListener<OtherEnum, ButtonVH> { // 类型 6
                 override fun onCreate(
                     context: Context,
                     parent: ViewGroup,

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/dialog/LocalAlarmClockDialog.kt

@@ -40,7 +40,7 @@ class LocalAlarmClockDialog(mContext: Context) :
         rgType.setOnCheckedChangeListener { group, checkedId ->
             when (checkedId) {
                 R.id.rb_open_dev -> alarmclockTypeEnum = AlarmClockEnum.OPEN_DEV
-                R.id.rb_close_dev -> alarmclockTypeEnum = AlarmClockEnum.CLOSE_DEV
+//                R.id.rb_close_dev -> alarmclockTypeEnum = AlarmClockEnum.CLOSE_DEV
                 R.id.rb_open_sleep -> alarmclockTypeEnum = AlarmClockEnum.OPEN_SLEEP
                 R.id.rb_close_sleep -> alarmclockTypeEnum = AlarmClockEnum.CLOSE_SLEEP
                 else -> {

+ 3 - 0
module_backstage/src/main/java/com/module/backstage/fragment/other/SystemSettingsFragment.kt

@@ -18,6 +18,8 @@ import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.module.backstage.vm.SystemSettingsFragmentVM
 import com.module.backstage.weight.HorizontalSpaceItemDecoration
 import com.quyunshuo.sbm10.base.DialogClickListener
+import com.quyunshuo.sbm10.base.utils.SpUtils
+import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
@@ -47,6 +49,7 @@ class SystemSettingsFragment : BaseFragment<BackstageFragmentSystemSettingsBindi
     var functionIndex=0
 
     override fun BackstageFragmentSystemSettingsBinding.initView() {
+        MMKVName.IS_SHOW_CHANGLOGE=false
         if (arguments!=null){
             functionIndex = arguments?.getInt("FUNCTION")!!
         }

+ 5 - 4
module_backstage/src/main/java/com/module/backstage/vm/OtherFragmentVM.kt

@@ -38,10 +38,11 @@ class OtherFragmentVM @Inject constructor(private val mRepo: OtherFragmentRepo)
     val readAllDataSuccess: LiveData<Int> get() = _readAllDataSuccess
 
     fun search(searchText: CharSequence) {
-        var isOpenChangLogo = SpUtils.getBoolean(
-            MMKVName.IS_SHOW_CHANGLOGE,
-            false
-        )
+//        var isOpenChangLogo = SpUtils.getBoolean(
+//            MMKVName.IS_SHOW_CHANGLOGE,
+//            false
+//        )
+        val isOpenChangLogo = MMKVName.IS_SHOW_CHANGLOGE
         list.clear()
         val arrayList = mRepo.arrayList
         XLogUtil.d("arrayList :$arrayList")

+ 2 - 1
module_backstage/src/main/java/com/module/backstage/vm/SystemSettingsFragmentVM.kt

@@ -49,7 +49,8 @@ class SystemSettingsFragmentVM @Inject constructor(private val mRepo: SystemSett
                 return mRepo.changeSetList
             }
             5 -> {
-                if (SpUtils.getBoolean(MMKVName.IS_SHOW_CHANGLOGE, false) == true) {
+//                if (SpUtils.getBoolean(MMKVName.IS_SHOW_CHANGLOGE, false) == true) {
+                if (MMKVName.IS_SHOW_CHANGLOGE) {
                     return mRepo.otherSetListLogo
                 }else{
                     return mRepo.otherSetList

+ 1 - 0
module_backstage/src/main/res/layout/backstage_dialog_local_alarm_clock.xml

@@ -199,6 +199,7 @@
                 android:textSize="50sp"/>
 
             <RadioButton
+                android:visibility="gone"
                 android:id="@+id/rb_close_dev"
                 android:layout_width="wrap_content"
                 android:padding="10dp"

+ 1 - 2
module_home/src/main/AndroidManifest.xml

@@ -89,10 +89,9 @@
 
         <service android:name="org.eclipse.paho.android.service.MqttService" />
 
-
         <receiver
             android:name=".receiver.TimedCleaningTaskAlarmReceiver"
-            android:exported="false">
+            android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.Timed_Cleaning_Task" />
             </intent-filter>

+ 3 - 3
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/BuyFragment.kt

@@ -95,9 +95,9 @@ class BuyFragment : BaseFragment<HomeFragmentBuyBinding, BuyFragmentVM>(),
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val layoutParams = ivLogo.layoutParams
-        enumByValue?.navId?.let { ivLogo.setImageResource(it) }
-        enumByValue?.width?.let { layoutParams.width = it }
-        enumByValue?.height?.let { layoutParams.height = it }
+        enumByValue.navId.let { ivLogo.setImageResource(it) }
+        enumByValue.width.let { layoutParams.width = it }
+        enumByValue.height.let { layoutParams.height = it }
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)

+ 3 - 3
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/HomeFragment.kt

@@ -176,9 +176,9 @@ class HomeFragment : BaseFragment<HomeFragmentHomeBinding, HomeFragmentVM>(), Vi
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val layoutParams = ivLogo.layoutParams
-        enumByValue?.navId?.let { ivLogo.setImageResource(it) }
-        enumByValue?.width?.let { layoutParams.width = it }
-        enumByValue?.height?.let { layoutParams.height = it }
+        enumByValue.navId.let { ivLogo.setImageResource(it) }
+        enumByValue.width.let { layoutParams.width = it }
+        enumByValue.height.let { layoutParams.height = it }
 
         NetWorkUtils.registerLister(
             this@HomeFragment.activity,

+ 5 - 4
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/MakeFragment.kt

@@ -125,22 +125,23 @@ class MakeFragment : BaseFragment<HomeFragmentMakeBinding, MakeFragmentVM>(), Li
 //                }
 //            }
         }
-        LongClickUtils.setLongClick(Handler(), ivLogo, 5000, object : View.OnLongClickListener {
+        LongClickUtils.setLongClick(Handler(), rlLogo, 5000, object : View.OnLongClickListener {
             override fun onLongClick(p0: View?): Boolean {
                 val findNavController = findNavController()
                 findNavController.navigate(R.id.home_action_home_makefragment_to_home_homefragment)
                 return true
             }
         })
+
         //硬币清零
         restCoin()
 
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val layoutParams = ivLogo.layoutParams
-        enumByValue?.navId?.let { ivLogo.setImageResource(it) }
-        enumByValue?.width?.let { layoutParams.width = it }
-        enumByValue?.height?.let { layoutParams.height = it }
+        enumByValue.navId.let { ivLogo.setImageResource(it) }
+        enumByValue.width.let { layoutParams.width = it }
+        enumByValue.height.let { layoutParams.height = it }
     }
 
 //    private fun setMaterialValue(materialValue: String?) {

+ 9 - 3
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/SleepFragment.kt

@@ -26,6 +26,7 @@ import com.quyunshuo.module.home.fragment.vm.SleepFragmentVM
 import com.quyunshuo.module.home.fragment.vm.UserLoginFragmentVM
 import com.quyunshuo.module.home.model.livedata.LiveDataBean
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import dagger.hilt.android.AndroidEntryPoint
@@ -66,10 +67,15 @@ class SleepFragment : BaseFragment<HomeFragmentSleepBlockBinding, SleepFragmentV
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val layoutParams = ivLogo.layoutParams
-        enumByValue?.navId?.let { ivLogo.setImageResource(it) }
-        enumByValue?.width?.let { layoutParams.width = it }
-        enumByValue?.height?.let { layoutParams.height = it }
+        enumByValue.navId.let { ivLogo.setImageResource(it) }
+        enumByValue.width.let { layoutParams.width = it }
+        enumByValue.height.let { layoutParams.height = it }
         mBinding.tvTitle.text = sleepText
+        val deviceId = XLogUtil.getDeviceId()
+        if (deviceId.isNotEmpty()) {
+            tvClientId.text =
+                UiUtil.getStringRes(R.string.home_dev_id) + deviceId.substring(deviceId.length - 6)
+        }
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)

+ 46 - 10
module_home/src/main/java/com/quyunshuo/module/home/receiver/TimedCleaningTaskAlarmReceiver.java

@@ -6,12 +6,19 @@ import android.content.Intent;
 import android.text.format.DateFormat;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+
+import com.quyunshuo.sbm10.base.utils.XLogUtil;
+import com.quyunshuo.sbm10.common.constant.Heartbeat;
 import com.quyunshuo.sbm10.common.constant.MqName;
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent;
 import com.quyunshuo.sbm10.common.enums.AlarmClockEnum;
 
 import org.greenrobot.eventbus.EventBus;
 
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.HashMap;
 /**
  * 监听并启动定时清洗任务广播.
  */
@@ -30,20 +37,49 @@ public class TimedCleaningTaskAlarmReceiver extends BroadcastReceiver {
       if ("0".equals(msg)) {
             //开机了则不能开机了。
             //LogUtils.logWrite("定时开机:"+open);
-            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.OPEN_DEV.getCode(), "开机"));
-        } else if ("1".equals(msg)) {
-            //开启一个定时闹钟,1.弹窗。2.倒计时。3.关机 4.结束弹窗
-            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.CLOSE_DEV.getCode(), "关机"));
-        } else if ("1show".equals(msg)) {
-            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.CLOSE_DEV.getCode() + "show", "关机"));
+//          EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.OPEN_DEV.getContent(), "开机"));
+          String ld;
+          try {
+              URL url = new URL("http://time.tianqi.com/");
+              URLConnection uc = url.openConnection();
+              uc.connect();
+              ld = String.valueOf(uc.getDate());
+          } catch (Exception e) {
+              ld = "0";
+          }
+          HashMap<String,String> responseContent = new HashMap<>();
+          responseContent.put("netTime",ld);
+          responseContent.put("eqeStatus","1");
+          HashMap<String, Object> map = getHashMap(responseContent,"eqeStatus");
+          EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getEQESTATUS(), map));
+//        } else if ("1".equals(msg)) {
+//            //开启一个定时闹钟,1.弹窗。2.倒计时。3.关机 4.结束弹窗
+//            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.CLOSE_DEV.getCode(), "关机"));
+//        } else if ("1show".equals(msg)) {
+//            EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.CLOSE_DEV.getCode() + "show", "关机"));
         } else if ("2".equals(msg)) {
             //LogUtils.logWrite("休眠2?:"+msg);
-            //睡眠
-            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), "1"));
+          HashMap<String, Object> map = getHashMap("1","sleep");
+          //睡眠
+            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), map));
+          XLogUtil.INSTANCE.d("定时开启休眠");
         } else if ("3".equals(msg)) {
-            //LogUtils.logWrite("休眠3?:"+msg);
+          HashMap<String, Object> map = getHashMap("0","sleep");
             //唤醒。
-            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), "0"));
+            EventBus.getDefault().post(new ApiMessageEvent(MqName.INSTANCE.getSLEEP(), map));
+          XLogUtil.INSTANCE.d("定时关闭休眠");
         }
     }
+
+    private static @NonNull HashMap<String, Object> getHashMap(Object state,String operation) {
+        HashMap<String ,Object> map = new HashMap<>();
+        map.put("responseContent", state);
+        map.put("statusCode",200);
+        map.put("clientId", Heartbeat.INSTANCE.getDeviceId());
+        map.put("timestamp",System.currentTimeMillis());
+        map.put("operation",operation);
+        map.put("direction",2);
+        return map;
+    }
+
 }

+ 20 - 0
module_home/src/main/java/com/quyunshuo/module/home/service/GlobalService.kt

@@ -6,6 +6,7 @@ import android.app.NotificationChannel
 import android.app.NotificationManager
 import android.content.Context
 import android.content.Intent
+import android.content.IntentFilter
 import android.media.AudioManager
 import android.os.Build
 import android.os.IBinder
@@ -27,6 +28,7 @@ import com.quyunshuo.module.home.bean.WarningBean
 import com.quyunshuo.module.home.dialog.CountDownDialogFragment
 import com.quyunshuo.module.home.dialog.WarringDialog
 import com.quyunshuo.module.home.receiver.MqttHelper
+import com.quyunshuo.module.home.receiver.TimedCleaningTaskAlarmReceiver
 import com.quyunshuo.sbm10.base.DialogClickListener
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.GsonUtil
@@ -39,6 +41,7 @@ import com.quyunshuo.sbm10.common.constant.Heartbeat
 import com.quyunshuo.sbm10.common.constant.MMKVName
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
+import com.quyunshuo.sbm10.common.util.AlarmManagerUtil.ALARM_ACTION
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
 import dagger.hilt.android.AndroidEntryPoint
@@ -80,10 +83,16 @@ class GlobalService : LifecycleService() {
 
     @Inject
     lateinit var mqttHelper: MqttHelper
+    var alarmReceiver: TimedCleaningTaskAlarmReceiver? = null
 
     @SuppressLint("ForegroundServiceType")
     override fun onCreate() {
         super.onCreate()
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            alarmReceiver = TimedCleaningTaskAlarmReceiver()
+            val filter = IntentFilter(ALARM_ACTION)
+            registerReceiver(alarmReceiver, filter)
+        }
         val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
 
         //创建NotificationChannel
@@ -479,6 +488,16 @@ class GlobalService : LifecycleService() {
             }
 
             MqName.EQESTATUS->{
+                Log.d(TAG, " MqName.EQESTATUSevent: "+messageEvent.data)
+                val map = Gson().fromJson(messageEvent.data.toString(), JsonObject::class.java)
+                val response= map.getAsJsonObject("responseContent")
+                val eqeStatus = GsonUtil.getAsString(response,"eqeStatus","0")
+                Log.d(TAG, "eventeqeStatus: "+eqeStatus)
+                if (eqeStatus=="1"){
+                    globalServiceViewModel.threadGlobalParam.stopUp()
+                    globalServiceViewModel.threadGlobalParam.startUp()
+                    Log.d(TAG, "event: startUp")
+                }
                 mqttHelper.sendData("response", Gson().toJson(messageEvent.data))
             }
 
@@ -521,6 +540,7 @@ class GlobalService : LifecycleService() {
     override fun onDestroy() {
         super.onDestroy()
         EventBus.getDefault().unregister(this)
+        alarmReceiver?.let { unregisterReceiver(it) }
     }
 
     override fun onBind(intent: Intent?): IBinder? {

+ 2 - 0
module_home/src/main/java/com/quyunshuo/module/home/service/GlobalServiceViewModel.kt

@@ -456,9 +456,11 @@ class GlobalServiceViewModel @Inject constructor(
         Log.d(TAG, "cmdHeartbeat1: " + messageEvent.data)
         SBCHeartbeat.devCode = messageEvent.data.substring(0, 2)//p10机器状态码
         if (SBCHeartbeat.devCode == "01") {
+            threadGlobalParam.stopUp()
             if (!isLoadDevOpen) {
                 Log.d(TAG, "cmdHeartbeat: MMKVName.OPEN_DEV")
                 isLoadDevOpen = true
+                SpUtils.putString(MMKVName.OPEN_DEV,"1")
             }
         }else {
             isLoadDevOpen = false

+ 3 - 2
module_home/src/main/java/com/quyunshuo/module/home/service/MqService.kt

@@ -248,7 +248,7 @@ class MqService : Service() {
                     uc.connect() // 发出连接
                     ld = uc.date.toString() // 取得网站日期时间
                 }catch (e:Exception){
-                    ld = ""
+                    ld = "0"
                 }
 
                 val responseContent = hashMapOf(
@@ -306,13 +306,14 @@ class MqService : Service() {
         val sweet = materialHashMap["sweet"].toString()
         val salty = materialHashMap["salty"].toString()
         val box = materialHashMap["box"].toString()
+        val eqeState= SpUtils.getString(MMKVName.OPEN_DEV,"0").toString()
         val heartbeatBean = HeartbeatBean(
             "0",
             "0",
             SBCHeartbeat.cabinetTm,
             "0",
             Heartbeat.clientId.toString(),
-            "0",
+            eqeState,
             "0",
             "0",
             "0",

+ 16 - 11
module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt

@@ -10,9 +10,6 @@ import android.util.Log
 import com.google.gson.Gson
 import com.hboxs.serialport.plc.message.Message
 import com.hboxs.serialport.plc.thread.ThreadSettingParam
-import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
-import com.hboxs.serialport.sbc.frame.VboxCommand
-import com.hboxs.serialport.sbc.frame.VboxWriteCommand
 import com.qiniu.android.http.ResponseInfo
 import com.qiniu.android.storage.UpCompletionHandler
 import com.qiniu.android.storage.UploadManager
@@ -270,15 +267,23 @@ class RemotePushUtil @Inject constructor() {
             }
 
             MqName.EQESTATUS->{
-                val map =setMap(msgId,DataBean.kind_data)
-                Log.d(TAG, "getMqttMessageUPDATEPRODUCT: "+map)
-                if (DataBean.kind_data=="1"){
-                    VboxSerialPortSendQueue.getInstance()
-                        .sendCommand(
-                            VboxWriteCommand(
-                                VboxCommand.CMD_ON_OFF, VboxCommand.DEBUG_ID+"0100")
-                        )
+                //开机了则不能开机了。
+                //LogUtils.logWrite("定时开机:"+open);
+//          EventBus.getDefault().post(new ApiMessageEvent(AlarmClockEnum.OPEN_DEV.getContent(), "开机"));
+                var ld: String
+                try {
+                    val url = URL("http://time.tianqi.com/")
+                    val uc = url.openConnection()
+                    uc.connect()
+                    ld = uc.date.toString()
+                } catch (e: Exception) {
+                    ld = "0"
                 }
+                val responseContent = hashMapOf(
+                    "netTime" to ld,
+                    "eqeStatus" to DataBean.kind_data
+                )
+                val map =setMap(msgId,responseContent)
                 EventBus.getDefault().post(ApiMessageEvent(MqName.EQESTATUS, map))
             }
             MqName.OPENDOOR->{

+ 14 - 8
module_home/src/main/res/layout/home_fragment_make.xml

@@ -21,15 +21,21 @@
         android:layout_height="200dp"
         android:background="@drawable/userbottom_bg"/>
 
-    <ImageView
-        android:id="@+id/iv_logo"
-        android:layout_width="350dp"
-        android:layout_height="150dp"
-        android:layout_marginLeft="20dp"
-        android:layout_marginTop="20dp"
-        android:src="@drawable/logo_sevencloud"
+    <RelativeLayout
+        android:id="@+id/rl_logo"
+        android:layout_width="450dp"
+        android:layout_height="250dp"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/iv_logo"
+            android:layout_width="350dp"
+            android:layout_height="150dp"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="20dp"
+            android:src="@drawable/logo_sevencloud" />
+    </RelativeLayout>
 
     <com.quyunshuo.module.home.weight.ProgressView
         android:id="@+id/progressView"

+ 30 - 0
module_home/src/main/res/layout/home_fragment_sleep_block.xml

@@ -12,6 +12,8 @@
         android:layout_height="wrap_content"
         android:text="@string/device_sleep"
         android:gravity="center"
+        android:textStyle="bold"
+        android:letterSpacing="0.1"
         android:textColor="@color/white"
         android:textSize="100sp"
         app:layout_constraintBottom_toBottomOf="parent"
@@ -41,5 +43,33 @@
         android:layout_marginTop="20dp"
         android:src="@drawable/logo_sevencloud" />
     </RelativeLayout>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_home_time"
+        android:layout_width="550dp"
+        android:layout_height="250dp"
+        android:layout_marginTop="20dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <TextView
+            android:id="@+id/tv_time"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="2024-07-21 21:06:23"
+            android:textColor="@color/white"
+            android:textSize="50sp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_clientId"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/home_dev_id"
+            android:textColor="@color/white"
+            android:textSize="50sp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tv_time" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 59 - 9
serialport-api/src/main/java/com/hboxs/serialport/sbc/thread/ThreadGlobalParam.kt

@@ -7,6 +7,7 @@ import androidx.lifecycle.OnLifecycleEvent
 import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
 import com.hboxs.serialport.sbc.frame.VboxCommand
 import com.hboxs.serialport.sbc.frame.VboxWriteCommand
+import com.quyunshuo.sbm10.base.utils.XLogUtil
 import com.quyunshuo.sbm10.common.constant.MqName
 import com.quyunshuo.sbm10.common.constant.event.ApiMessageEvent
 import kotlinx.coroutines.CoroutineScope
@@ -16,9 +17,10 @@ import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 import org.greenrobot.eventbus.EventBus
 
-class ThreadGlobalParam: LifecycleObserver {
+class ThreadGlobalParam : LifecycleObserver {
 
     private val TAG = "ThreadGeneralParam"
+
     //初始化
     var jobSbcInit: Job? = null
         get() = field
@@ -27,6 +29,7 @@ class ThreadGlobalParam: LifecycleObserver {
         set(value) {
             field = value
         }
+
     //读取心跳
     var jobHeartbeat: Job? = null
         get() = field
@@ -53,10 +56,51 @@ class ThreadGlobalParam: LifecycleObserver {
         set(value) {
             field = value
         }
+    var jobStartUp: Job? = null
+        get() = field
+    var isActiveStartUp: Boolean = true
+        get() = field
+        set(value) {
+            field = value
+        }
+
+    private var startUpNumber = 0
+
+    /**
+     * 开机
+     */
+    fun startUp() {
+        stopUp()
+        isActiveStartUp = true
+        startUpNumber = 0
+        // 启动协程
+        jobStartUp = CoroutineScope(Dispatchers.Main).launch {
+            while (isActiveStartUp) {
+                if (startUpNumber < 5) {
+                    VboxSerialPortSendQueue.getInstance()
+                        .sendCommand(
+                            VboxWriteCommand(
+                                VboxCommand.CMD_ON_OFF, VboxCommand.DEBUG_ID + "0100"
+                            )
+                        )
+                    delay(2000) // 每隔0.3秒重复执行
+                    startUpNumber++
+                } else {
+                    stopUp()
+                    XLogUtil.d("远程或本地闹钟开机失败")
+                }
+            }
+        }
+    }
+
+    fun stopUp() {
+        isActiveStartUp = false
+        jobStartUp?.cancel()
+    }
 
     fun startInit() {
         stopInit()
-        isActiveSbcInit=true
+        isActiveSbcInit = true
         // 启动协程
         jobSbcInit = CoroutineScope(Dispatchers.Main).launch {
             while (isActiveSbcInit) {
@@ -70,8 +114,8 @@ class ThreadGlobalParam: LifecycleObserver {
         }
     }
 
-    fun stopInit(){
-        isActiveSbcInit=false
+    fun stopInit() {
+        isActiveSbcInit = false
         jobSbcInit?.cancel()
     }
 
@@ -95,19 +139,24 @@ class ThreadGlobalParam: LifecycleObserver {
 
     fun startPreheatOff() {
         stopPreheatOff()
-        isActivePreheatOff=true
+        isActivePreheatOff = true
         // 启动协程
         jobPreheatOff = CoroutineScope(Dispatchers.Main).launch {
             while (isActivePreheatOff) {
                 VboxSerialPortSendQueue.getInstance()
-                    .sendCommand(VboxWriteCommand(VboxCommand.CMD_IO,
-                        VboxCommand.DEBUG_ID+"0500"))
+                    .sendCommand(
+                        VboxWriteCommand(
+                            VboxCommand.CMD_IO,
+                            VboxCommand.DEBUG_ID + "0500"
+                        )
+                    )
                 // 执行定时任务的操作
                 Log.d(TAG, "startPreheat: 发送预热关闭")
                 delay(1000) // 每隔1秒重复执行
             }
         }
     }
+
     fun stopPreheatOff() {
         jobPreheatOff?.cancel()
     }
@@ -117,9 +166,9 @@ class ThreadGlobalParam: LifecycleObserver {
         // 启动协程
         jobBackData = CoroutineScope(Dispatchers.Main).launch {
             while (isActiveBackData) {
-                EventBus.getDefault().post(ApiMessageEvent(MqName.HEARTBEAT,""))
+                EventBus.getDefault().post(ApiMessageEvent(MqName.HEARTBEAT, ""))
                 Log.d(TAG, "startBackData: ")
-                delay(1000*60*5) // 每隔5分钟重复执行
+                delay(1000 * 60 * 5) // 每隔5分钟重复执行
             }
         }
     }
@@ -134,6 +183,7 @@ class ThreadGlobalParam: LifecycleObserver {
     @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
     fun destroy() {
         //避免线程池关不掉
+        stopUp()
         stopInit()
         stopHeartbeat()
         stopPreheatOff()