同步最新 sdk602patch0626 commit 11db54f4ba432655bb756c80ae47f47ab9207d57
authorCaisking <3449750381@qq.com>
Thu, 10 Oct 2024 08:00:41 +0000 (16:00 +0800)
committerSnickerSun <snickersun@163.com>
Thu, 10 Oct 2024 13:35:36 +0000 (21:35 +0800)
85 files changed:
code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h
code/sdk/application/wearable/fd230app/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothCaseListAdapter.cpp
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothDeviceListView.cpp
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothItemView.cpp
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/fd230app/nativeui/calculator/include/CalculatorModel.h
code/sdk/application/wearable/fd230app/nativeui/calculator/include/CalculatorView.h
code/sdk/application/wearable/fd230app/nativeui/calculator/src/CalculatorModel.cpp
code/sdk/application/wearable/fd230app/nativeui/calculator/src/CalculatorView.cpp
code/sdk/application/wearable/fd230app/nativeui/callerlog/src/CallerLogModel.cpp
code/sdk/application/wearable/fd230app/nativeui/flashlight/src/FlashlightPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/heart_blood/health_service/health_service.cpp
code/sdk/application/wearable/fd230app/nativeui/heartrate/include/HeartModel.h
code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartModel.cpp
code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageItemView.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp
code/sdk/application/wearable/fd230app/nativeui/phone/src/phoneaddressmodel.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordListView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListAdapter.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListitemView.cpp
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingModel.h
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingView.cpp
code/sdk/application/wearable/fd230app/nativeui/sleep/include/SleepModel.h
code/sdk/application/wearable/fd230app/nativeui/sleep/src/SleepModel.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TrainingSetCaluliView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TrainingSetMileView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TrainingSetStepView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TrainingSetTimeView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_more/include/TraingMoreModel.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_more/src/TraingMoreModel.cpp
code/sdk/application/wearable/nativeabilityfwk/src/Ability.cpp
code/sdk/application/wearable/service/ble_service/bleservice/bleANCS.c
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h
code/sdk/application/wearable/service/msg_center/CMakeLists.txt
code/sdk/application/wearable/service/msg_center/brandy-native-js-autoota/libmsg_center.a
code/sdk/application/wearable/service/msg_center/brandy-native-js-autootacli/libmsg_center.a
code/sdk/application/wearable/service/msg_center/brandy-native-js-leakcheck/libmsg_center.a
code/sdk/application/wearable/service/msg_center/include/notify/dial_sos_c.h
code/sdk/application/wearable/service/msg_center/include/notify/pairing_notification.h
code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp
code/sdk/application/wearable/service/msg_center/src/notify/findwatch_notification.cpp
code/sdk/application/wearable/service/msg_center/src/notify/makephone_notification.cpp
code/sdk/application/wearable/service/msg_center/src/notify/pairing_notification.cpp
code/sdk/drivers/peripheral/ppg/hx3695/hx3695.c
code/sdk/drivers/peripheral/utils/custom_runtime.c
code/sdk/drivers/peripheral/utils/custom_runtime.h
code/sdk/middleware/services/gpu/api/rm/brandy-native-js-autoota/libgfx_rm.a
code/sdk/middleware/services/gpu/api/rm/brandy-native-js-autootacli/libgfx_rm.a
code/sdk/middleware/services/gpu/api/rm/brandy-native-js-leakcheck/libgfx_rm.a
code/sdk/middleware/services/gui/hal/display/brandy-native-js-autoota/libdisplay_gfx.a
code/sdk/middleware/services/gui/hal/display/brandy-native-js-autootacli/libdisplay_gfx.a
code/sdk/middleware/services/gui/hal/display/brandy-native-js-leakcheck/libdisplay_gfx.a
code/sdk/middleware/services/gui/uikit/brandy-native-js-autoota/libuikit_ext.a
code/sdk/middleware/services/gui/uikit/brandy-native-js-autootacli/libuikit_ext.a
code/sdk/middleware/services/gui/uikit/brandy-native-js-leakcheck/libuikit_ext.a
code/sdk/middleware/services/gui/uikit/proprietary/src/utils/frameworks/mem_check.cpp
code/sdk/middleware/utils/fs/vfs/brandy-native-js-autoota/libx_vfs_private.a
code/sdk/middleware/utils/fs/vfs/brandy-native-js-autootacli/libx_vfs_private.a
code/sdk/middleware/utils/fs/vfs/brandy-native-js-leakcheck/libx_vfs_private.a
code/sdk/middleware/utils/fs/yaffs2/brandy-native-js-autoota/libfs_yaffs2.a
code/sdk/middleware/utils/fs/yaffs2/brandy-native-js-autootacli/libfs_yaffs2.a
code/sdk/middleware/utils/fs/yaffs2/brandy-native-js-leakcheck/libfs_yaffs2.a
code/sdk/open_source/openharmony/foundation/aafwk/aafwk_lite/brandy-native-js-autoota/libams.a
code/sdk/open_source/openharmony/foundation/aafwk/aafwk_lite/brandy-native-js-autootacli/libams.a
code/sdk/open_source/openharmony/foundation/aafwk/aafwk_lite/brandy-native-js-leakcheck/libams.a
code/sdk/open_source/openharmony/foundation/ace/ace_engine_lite/brandy-native-js-autoota/libace.a
code/sdk/open_source/openharmony/foundation/ace/ace_engine_lite/brandy-native-js-autootacli/libace.a
code/sdk/open_source/openharmony/foundation/ace/ace_engine_lite/brandy-native-js-leakcheck/libace.a
code/sdk/open_source/openharmony/foundation/appexecfwk/appexecfwk_lite/brandy-native-js-autoota/libbms.a
code/sdk/open_source/openharmony/foundation/appexecfwk/appexecfwk_lite/brandy-native-js-autootacli/libbms.a
code/sdk/open_source/openharmony/foundation/appexecfwk/appexecfwk_lite/brandy-native-js-leakcheck/libbms.a
code/sdk/open_source/openharmony/third_party/jerryscript/brandy-native-js-autoota/libjerryscript.a
code/sdk/open_source/openharmony/third_party/jerryscript/brandy-native-js-autootacli/libjerryscript.a
code/sdk/open_source/openharmony/third_party/jerryscript/brandy-native-js-leakcheck/libjerryscript.a
tools/scripts/merge_from_commit_diff.sh [new file with mode: 0644]

index 2c3c710..9e5c260 100644 (file)
@@ -314,6 +314,101 @@ namespace OHOS
     static constexpr const char *PNG_VOICE_ASSISTANT_IMAGE_27 = APP_RES_PATH "/assistant/assistant_gif/assistant_28.bin";  
     static constexpr const char *PNG_VOICE_ASSISTANT_IMAGE_28 = APP_RES_PATH "/assistant/assistant_gif/assistant_29.bin";  
     static constexpr const char *PNG_VOICE_ASSISTANT_IMAGE_29 = APP_RES_PATH "/assistant/assistant_gif/assistant_30.bin";
+    /*运动目标达成*/
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_01 = APP_RES_PATH "/Training/training_GIF/win/1.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_02 = APP_RES_PATH "/Training/training_GIF/win/2.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_03 = APP_RES_PATH "/Training/training_GIF/win/3.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_04 = APP_RES_PATH "/Training/training_GIF/win/4.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_05 = APP_RES_PATH "/Training/training_GIF/win/5.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_06 = APP_RES_PATH "/Training/training_GIF/win/6.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_07 = APP_RES_PATH "/Training/training_GIF/win/7.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_08 = APP_RES_PATH "/Training/training_GIF/win/8.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_09 = APP_RES_PATH "/Training/training_GIF/win/9.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_10 = APP_RES_PATH "/Training/training_GIF/win/10.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_11 = APP_RES_PATH "/Training/training_GIF/win/11.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_12 = APP_RES_PATH "/Training/training_GIF/win/12.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_13 = APP_RES_PATH "/Training/training_GIF/win/13.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_14 = APP_RES_PATH "/Training/training_GIF/win/14.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_15 = APP_RES_PATH "/Training/training_GIF/win/15.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_16 = APP_RES_PATH "/Training/training_GIF/win/16.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_17 = APP_RES_PATH "/Training/training_GIF/win/17.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_18 = APP_RES_PATH "/Training/training_GIF/win/18.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_19 = APP_RES_PATH "/Training/training_GIF/win/19.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_20 = APP_RES_PATH "/Training/training_GIF/win/20.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_21 = APP_RES_PATH "/Training/training_GIF/win/21.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_22 = APP_RES_PATH "/Training/training_GIF/win/22.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_23 = APP_RES_PATH "/Training/training_GIF/win/23.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_24 = APP_RES_PATH "/Training/training_GIF/win/24.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_25 = APP_RES_PATH "/Training/training_GIF/win/25.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_26 = APP_RES_PATH "/Training/training_GIF/win/26.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_27 = APP_RES_PATH "/Training/training_GIF/win/27.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_28 = APP_RES_PATH "/Training/training_GIF/win/28.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_29 = APP_RES_PATH "/Training/training_GIF/win/29.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_30 = APP_RES_PATH "/Training/training_GIF/win/30.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_31 = APP_RES_PATH "/Training/training_GIF/win/31.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_32 = APP_RES_PATH "/Training/training_GIF/win/32.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_33 = APP_RES_PATH "/Training/training_GIF/win/33.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_34 = APP_RES_PATH "/Training/training_GIF/win/34.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_35 = APP_RES_PATH "/Training/training_GIF/win/35.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_36 = APP_RES_PATH "/Training/training_GIF/win/36.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_37 = APP_RES_PATH "/Training/training_GIF/win/37.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_38 = APP_RES_PATH "/Training/training_GIF/win/38.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_39 = APP_RES_PATH "/Training/training_GIF/win/39.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_40 = APP_RES_PATH "/Training/training_GIF/win/40.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_41 = APP_RES_PATH "/Training/training_GIF/win/41.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_42 = APP_RES_PATH "/Training/training_GIF/win/42.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_43 = APP_RES_PATH "/Training/training_GIF/win/43.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_44 = APP_RES_PATH "/Training/training_GIF/win/44.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_45 = APP_RES_PATH "/Training/training_GIF/win/45.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_46 = APP_RES_PATH "/Training/training_GIF/win/46.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_47 = APP_RES_PATH "/Training/training_GIF/win/47.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_48 = APP_RES_PATH "/Training/training_GIF/win/48.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_49 = APP_RES_PATH "/Training/training_GIF/win/49.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_50 = APP_RES_PATH "/Training/training_GIF/win/50.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_51 = APP_RES_PATH "/Training/training_GIF/win/51.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_52 = APP_RES_PATH "/Training/training_GIF/win/52.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_53 = APP_RES_PATH "/Training/training_GIF/win/53.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_54 = APP_RES_PATH "/Training/training_GIF/win/54.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_55 = APP_RES_PATH "/Training/training_GIF/win/55.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_56 = APP_RES_PATH "/Training/training_GIF/win/56.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_57 = APP_RES_PATH "/Training/training_GIF/win/57.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_58 = APP_RES_PATH "/Training/training_GIF/win/58.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_59 = APP_RES_PATH "/Training/training_GIF/win/59.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_60 = APP_RES_PATH "/Training/training_GIF/win/60.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_61 = APP_RES_PATH "/Training/training_GIF/win/61.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_62 = APP_RES_PATH "/Training/training_GIF/win/62.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_63 = APP_RES_PATH "/Training/training_GIF/win/63.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_64 = APP_RES_PATH "/Training/training_GIF/win/64.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_65 = APP_RES_PATH "/Training/training_GIF/win/65.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_66 = APP_RES_PATH "/Training/training_GIF/win/66.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_67 = APP_RES_PATH "/Training/training_GIF/win/67.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_68 = APP_RES_PATH "/Training/training_GIF/win/68.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_69 = APP_RES_PATH "/Training/training_GIF/win/69.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_70 = APP_RES_PATH "/Training/training_GIF/win/70.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_71 = APP_RES_PATH "/Training/training_GIF/win/71.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_72 = APP_RES_PATH "/Training/training_GIF/win/72.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_73 = APP_RES_PATH "/Training/training_GIF/win/73.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_74 = APP_RES_PATH "/Training/training_GIF/win/74.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_75 = APP_RES_PATH "/Training/training_GIF/win/75.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_76 = APP_RES_PATH "/Training/training_GIF/win/76.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_77 = APP_RES_PATH "/Training/training_GIF/win/77.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_78 = APP_RES_PATH "/Training/training_GIF/win/78.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_79 = APP_RES_PATH "/Training/training_GIF/win/79.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_80 = APP_RES_PATH "/Training/training_GIF/win/80.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_81 = APP_RES_PATH "/Training/training_GIF/win/81.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_82 = APP_RES_PATH "/Training/training_GIF/win/82.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_83 = APP_RES_PATH "/Training/training_GIF/win/83.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_84 = APP_RES_PATH "/Training/training_GIF/win/84.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_85 = APP_RES_PATH "/Training/training_GIF/win/85.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_86 = APP_RES_PATH "/Training/training_GIF/win/86.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_87 = APP_RES_PATH "/Training/training_GIF/win/87.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_88 = APP_RES_PATH "/Training/training_GIF/win/88.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_89 = APP_RES_PATH "/Training/training_GIF/win/89.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_90 = APP_RES_PATH "/Training/training_GIF/win/90.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_91 = APP_RES_PATH "/Training/training_GIF/win/91.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_92 = APP_RES_PATH "/Training/training_GIF/win/92.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_93 = APP_RES_PATH "/Training/training_GIF/win/93.bin";  
+    static constexpr const char *PNG_TRAINING_WIN_IMAGE_94 = APP_RES_PATH "/Training/training_GIF/win/94.bin";
     /* -------------------------------------------------------------------------- */
     static constexpr const char *PNG_ALIPAY_BIND_FAILURE = APP_RES_PATH "/alipay/ALIPAY_BIND_FAILURE.bin";
     static constexpr const char *PNG_ALIPAY_BIND_SUCCESS = APP_RES_PATH "/alipay/ALIPAY_BIND_SUCCESS.bin";
@@ -392,8 +487,8 @@ namespace OHOS
     static constexpr const char *PNG_APPLIST_RECORD_IMAGE = APP_LIST_PATH "/recording.bin";         // 录音
     static constexpr const char *PNG_APPLIST_TRAINING_IMAGE = APP_LIST_PATH "/training.bin";        // 训练
     static constexpr const char *PNG_APPLIST_TRAINING_RECORD_IMAGE = APP_LIST_PATH "/record.bin";   // 训练记录
-    static constexpr const char *PNG_APPLIST_STOPWATCH_IMAGE = APP_LIST_PATH "/clock.bin";          // 秒表
-    static constexpr const char *PNG_APPLIST_COUNTDOWN_IMAGE = APP_LIST_PATH "/countdown.bin";      // 计时器
+    static constexpr const char *PNG_APPLIST_STOPWATCH_IMAGE = APP_LIST_PATH "/countdown.bin";      // 秒表
+    static constexpr const char *PNG_APPLIST_COUNTDOWN_IMAGE = APP_LIST_PATH "/clock.bin";          // 计时器
     static constexpr const char *PNG_APPLIST_ALIPAY_IMAGE = APP_LIST_PATH "/alipay.bin";            // 支付宝
     static constexpr const char *PNG_APPLIST_FINDPHONE_IMAGE = APP_LIST_PATH "/findphone.bin";      // 查找手机
     static constexpr const char *PNG_APPLIST_DISTURB_IMAGE = APP_LIST_PATH "/disturb.bin";          // 勿扰模式
index c926335..bc2a293 100644 (file)
@@ -438,7 +438,7 @@ extern "C"
                     OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::WAKE);\r
                     // 早安提醒(关闭)\r
                     // AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
-                    OHOS::SleepModel::GetInstance().ReInitData(); // 更新睡眠数据\r
+                    // OHOS::SleepModel::GetInstance().ReInitData(); // 更新睡眠数据\r
                     SendMsgToUIService(UI_UPDATE_SLEEP_DATA, 0, nullptr, 0);\r
                 }\r
 \r
@@ -450,7 +450,7 @@ extern "C"
                     uapi_dev_runtime_set_absolute_static_status(0); // 清零绝对静止状态\r
                     // uapi_dev_runtime_set_nap_monitoring_status(1);\r
                     // uapi_dev_runtime_set_sleep_monitoring_status(0);\r
-                    OHOS::SleepModel::GetInstance().ReInitData(); // 更新睡眠数据\r
+                    // OHOS::SleepModel::GetInstance().ReInitData(); // 更新睡眠数据\r
                     set_keep_in_wear_det_mode(1);                 // 开启小睡佩戴监测\r
                     SendMsgToUIService(UI_UPDATE_SLEEP_DATA, 0, nullptr, 0);\r
                     do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL); // 算法底层切换小睡监测模式\r
index 313221d..51a126b 100644 (file)
@@ -176,8 +176,8 @@ UIView *BluetoothCaseListAdapter::GetView(UIView *inView, int16_t index)
         node->addr[2], node->addr[3], node->addr[4], node->addr[5]); // 没有%s类型,不做返回判断
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addrTmp %s", addrTmp);
     // ClickAnimation(itemData, item);
-    item->SetItemInfo(itemData, true);
     item->SetViewIndex(index);
+    item->SetItemInfo(itemData, true);
     item->SetPairingtatus();
     return item;
 }
index 263363c..e72f778 100644 (file)
@@ -89,7 +89,7 @@ namespace OHOS
             list->SetStyle(STYLE_BORDER_RADIUS, 50);\r
             list->SetDragACCLevel(5);\r
             list->SetSwipeACCLevel(800);\r
-            list->SetReboundSize(30);\r
+            // list->SetReboundSize(30);\r
             // list->SetScrollBlankSize(30);\r
             list->SetAdapter(adapterText);\r
         }\r
@@ -138,7 +138,7 @@ namespace OHOS
                 return;\r
             }\r
         }\r
-        newEquipmentButton->SetPosition(173, list->GetY() + list->GetHeight() + 20, 120, 40);\r
+        newEquipmentButton->SetPosition(173, 390, 120, 40);\r
         newEquipmentButton->SetTextId(STR_BT_HEADSET_RESCAN); // 重新搜索\r
         newEquipmentButton->SetViewId(BLUETOOTH_NEWEQUIPMENT_BUTTON);\r
         newEquipmentButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
@@ -248,10 +248,10 @@ namespace OHOS
                 list->Resize(380, 250);\r
                 break;\r
             }\r
-            newEquipmentButton->SetY(list->GetY() + list->GetHeight() + 20);\r
+            // newEquipmentButton->SetY(list->GetY() + list->GetHeight() + 20);\r
             list->RefreshList();\r
             list->Invalidate();\r
-            newEquipmentButton->Invalidate();\r
+            // newEquipmentButton->Invalidate();\r
         }\r
     }\r
 \r
index d73c441..26ed838 100644 (file)
@@ -101,15 +101,31 @@ namespace OHOS
             }\r
         }\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "index =  %d", GetViewIndex());\r
-        List<BluetoothCaseInfo> &btConnedDevicesList_ = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
-        std::list<BluetoothCaseInfo> &btScansDevicesList_ = BluetoothModel::GetInstance()->GetCase();\r
-        if (GetViewIndex() == btConnedDevicesList_.Size() - 1 || GetViewIndex()  == btScansDevicesList_.size() - 1)\r
+        if(!isCaseList)\r
         {\r
-            lineImage.SetVisible(false);\r
+            //已连接的耳机界面\r
+            List<BluetoothCaseInfo> &btConnedDevicesList_ = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
+            if (GetViewIndex() == btConnedDevicesList_.Size() - 1)\r
+            {\r
+                lineImage.SetVisible(false);\r
+            }\r
+            else\r
+            {\r
+                lineImage.SetVisible(true);\r
+            }\r
         }\r
         else\r
         {\r
-            lineImage.SetVisible(true);\r
+            //搜索出耳机的界面\r
+            std::list<BluetoothCaseInfo> &btScansDevicesList_ = BluetoothModel::GetInstance()->GetCase();\r
+            if (GetViewIndex() == btScansDevicesList_.size() - 1)\r
+            {\r
+                lineImage.SetVisible(false);\r
+            }\r
+            else\r
+            {\r
+                lineImage.SetVisible(true);\r
+            }\r
         }\r
     }\r
 \r
index 658e2f3..ff8d995 100644 (file)
@@ -323,6 +323,10 @@ void BluetoothModel::AddCase(BluetoothCaseInfo caseInfo)
         return;\r
     } else {\r
         btScansDevicesList_.push_back(caseInfo);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "btScansDevicesList_ num = %d",btScansDevicesList_.size());\r
+        if(BluetoothEarListView::GetInstance()) //动态计算扫描出来的设备列表ui高度\r
+            GraphicService::GetInstance()->PostGraphicEvent( \r
+                std::bind(&BluetoothEarListView::RefreshBluetoothEarListView, BluetoothEarListView::GetInstance()));\r
     }\r
 }\r
 //设置设备的信号强度\r
@@ -795,7 +799,7 @@ void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status)
     // }\r
     // uapi_a2dp_snk_connect();\r
     // a2dp_snk_connect(bdAddr);\r
-    if(uapi_dev_runtime_get_bt_powerstat() && !get_ble_pair()&& (status == GAP_PAIR_PAIRED))\r
+    if(cm_custom_ble_service_on_flag() && !get_ble_pair()&& (status == GAP_PAIR_PAIRED))\r
     {\r
         send_pair_succ((bd_addr_t*)bdAddr);\r
     //     if(cm_get_A2DP_switch() || cm_get_HFP_switch())\r
index cbb79ae..9412c33 100644 (file)
@@ -31,6 +31,7 @@ public:
     uint8_t get_stcak_size();
     void  symbol_stack_top_uddata(char data);
     void clean_stack();
+    void symbol_stack_pop(void);
 private:
     CalculatorModel();
     CalculatorModel(const CalculatorModel &);
index 3d27578..a19cda1 100644 (file)
@@ -50,6 +50,7 @@ public:
     void show_hint_label(bool data);
     
     void show_long_label();
+    bool string_have_dot(std::string buf);
 
     osTimerId_t call_roll_timer=NULL;
     osTimerId_t call_roll_timer_move=NULL;
@@ -66,7 +67,7 @@ private:
     UILabel *number{nullptr};
     UILabelExt *hint{nullptr};
 
-    std::string number_string="";
+    std::string number_string=" ";
 
     UIView::OnClickListener* clickLeftListener{nullptr};
     UIView:: OnDragListener* dragListener{nullptr};
index a161d49..cdcaed1 100644 (file)
@@ -59,6 +59,15 @@ void CalculatorModel:: symbol_stack_top_uddata(char data)
     }
 }
 
+
+void CalculatorModel:: symbol_stack_pop(void)
+{
+    if(!symbolStack.empty())
+    {
+        symbolStack.pop();
+    }
+}
+
 uint8_t CalculatorModel::get_stcak_size()
 {
     return numberStack.size();
index 53eba1b..860ce26 100644 (file)
@@ -10,6 +10,8 @@
 #include "calculator/include/CalculatorModel.h"
 #include "wearable_log.h"
 #include <math.h>
+#include <iostream>
+#include <iomanip>
 
 namespace OHOS {
 
@@ -125,6 +127,7 @@ void CalculatorView::show_hint_label(bool data)
 void CalculatorView::show_long_label(void)
 {
    number->SetText(number_string.c_str());
+    number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
 
    RootView::GetInstance()->Invalidate();
 }
@@ -176,6 +179,17 @@ void CalculatorView::start_call_roll_timer_move()
     }
 }
 
+bool CalculatorView::string_have_dot(std::string buf)
+{
+    for(int i=0;i<buf.length();i++)
+    {
+        if(buf.c_str()[i]=='.')
+        {
+            return true;
+        }
+    }
+    return false;
+}
 
 
 void CalculatorView::number_text_updata_buf(const char *buf)
@@ -186,6 +200,11 @@ void CalculatorView::number_text_updata_buf(const char *buf)
     if(number_falg!=1)
     number_string="";
 
+    if(buf[0]=='.' && string_have_dot(number_string))
+    {
+        return;
+    }
+
 
     if(number_string.length()>20)
     {
@@ -200,12 +219,14 @@ void CalculatorView::number_text_updata_buf(const char *buf)
     if(number_string.length()>12)
     {
         number->SetText(number_string.c_str()+number_string.length()-12);
+         number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
         number_falg=1;
         RootView::GetInstance()->Invalidate();
         return;
     }
 
     number->SetText(number_string.c_str());
+     number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
 
     number_falg=1;
 
@@ -234,6 +255,7 @@ void CalculatorView::symbol_text_updata_buf(const char *buf)
 
         number_string=new_buf;
         number->SetText(buf);
+         number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
 
         RootView::GetInstance()->Invalidate();
         return;
@@ -241,6 +263,10 @@ void CalculatorView::symbol_text_updata_buf(const char *buf)
     double number_float=strtod(text_buf,NULL);
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%lf %s",number_float,text_buf);
 
+    char new_buf_[64]={0};
+    sprintf_s(new_buf_,64,"%.010lf",number_float);
+    number_float=strtod(new_buf_,NULL);
+
     CalculatorModel::GetInstance()->number_push_stack(number_float);
 
     if( CalculatorModel::GetInstance()->get_stcak_size()>=2)
@@ -255,6 +281,7 @@ void CalculatorView::symbol_text_updata_buf(const char *buf)
 
     number_string=new_buf;
     number->SetText(new_buf);
+     number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
 
     RootView::GetInstance()->Invalidate();
     
@@ -279,7 +306,7 @@ void CalculatorView::symbol_text_updata_single_buf(const char *buf)
 
     char new_buf[64]={0};
 
-    const char*text_buf=number_string.c_str();
+    char*text_buf=(char *)number_string.c_str();
    
     double number_float=strtod(text_buf,NULL);
     if(buf[0]=='C')
@@ -335,16 +362,28 @@ void CalculatorView::symbol_text_updata_single_buf(const char *buf)
     }
         number_string=new_buf;
         number->SetText(new_buf);
+         number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
         RootView::GetInstance()->Invalidate();
     }
     else if (buf[0]=='D')
     {
-        number_float=0;
-        sprintf_s(new_buf,16,"%.00lf",number_float);
-
-        number_string=new_buf;
-        number->SetText(new_buf);
-        number_falg=2;
+        // number_float=0;
+        // sprintf_s(new_buf,16,"%.00lf",number_float);
+        text_buf[number_string.length()-1]='\0';
+        number_string=text_buf;
+        number->SetText(text_buf);
+         number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
+        if(number_falg==0)
+        {
+            CalculatorModel::GetInstance()->symbol_stack_pop();
+            number_falg=1;
+        }
+        else 
+        {
+            number_falg=1;
+        }
+        
+       
         RootView::GetInstance()->Invalidate();
     }
 
@@ -362,13 +401,24 @@ void CalculatorView::symbol_text_updata_calculate_buf(const char *buf)
 
     char new_buf[64]={0};
     const char*text_buf=number_string.c_str();
+    double number_float=0;
 
-    double number_float=strtod(text_buf,NULL);
-
-    CalculatorModel::GetInstance()->number_push_stack(number_float);
+    if(text_buf[0]>='0' && text_buf[0]<='9')
+    {
+        number_float=strtod(text_buf,NULL);
+        char new_buf_[64]={0};
+        sprintf_s(new_buf_,64,"%.010lf",number_float);
+        number_float=strtod(new_buf_,NULL);
 
+        CalculatorModel::GetInstance()->number_push_stack(number_float);
+    }
+    
     number_float =CalculatorModel::GetInstance()->calculate_stack();
 
+    char new_buf_[64]={0};
+    sprintf_s(new_buf_,64,"%.010lf",number_float);
+    number_float=strtod(new_buf_,NULL);
+
     double number_float_=number_float;
     int decimal_places = 0;
     double frac;
@@ -416,6 +466,7 @@ void CalculatorView::symbol_text_updata_calculate_buf(const char *buf)
     number_string=new_buf;
 
     number->SetText(new_buf);
+     number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
     RootView::GetInstance()->Invalidate();
 
 
@@ -505,7 +556,7 @@ bool CalculatorView::Label_init()
     number->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
     number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
     number->SetRollSpeed(0);
-    number->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 50);
+    number->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 50);
 
     // Add to rootView
     group->Add(number);
index 754e78a..11a0d97 100644 (file)
@@ -118,6 +118,8 @@ static void DisableCallingTimer()
     }
 }
 
+#include "dial_sos_c.h"
+
 /* 状态复位 */
 void StatusReset(void)
 {
@@ -541,6 +543,11 @@ static void NonWatchFinishHandle(int laststatus)
     if (GetCurrCallNum() == 0) {
         g_phoneStatus = PHONE_SINGLE_STATUS;
     }
+
+    if(get_falg_SOS())
+    {
+        sos_falg_add();
+    }
 }
 
 static void WatchFinishHandle(void)
@@ -567,6 +574,11 @@ static void WatchFinishHandle(void)
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "??????????????????????");
     }
     g_phoneStatus = PHONE_SINGLE_STATUS;
+
+    if(get_falg_SOS())
+    {
+        sos_falg_add();
+    }
 }
 
 void CAT1_ChangeStatusScreendisplay(int lastStatus)
@@ -924,6 +936,8 @@ void CallerLogModel::SetWaitingStatus(bool status)
 void CallerLogModel::SetCallStatus(bool status)
 {
     callStatus = status;
+    if(status)
+    sos_falg_clean();
 }
 
 bool CallerLogModel::GetCallStatus()
index 1fa3fb3..883bad2 100644 (file)
@@ -14,6 +14,7 @@
 #include "common/key_code.h"
 #include <custom_utils.h>
 #include "gfx_utils/mem_check.h"
+#include "ConfigModel.h"
 
 namespace OHOS
 {
@@ -196,6 +197,7 @@ namespace OHOS
         }
         else
         {
+            uapi_setScreenBrightness(ConfigModel::GetInstance()->GetBrightness());//滑动到手电筒设置页面需要将亮度恢复到ConfigModel中设置的亮度值
             FlashlightModel::GetInstance().FlashlightStopTimer();
             ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
         }
index 6362569..0ad2b45 100644 (file)
@@ -1,10 +1,13 @@
 #include "health_service.h"
-#include "bloodoxygen/include/BloodOxygenModel.h"
+#include <iostream>
+#include "wearable_log.h"
 #include "cJSON.h"
+#include <sys/stat.h>
+#include <ctime>
+#include "kv_store.h"
 #include "custom_utils.h"
 #include "custom_runtime.h"
 #include <fstream>
-#include <iostream>
 #include <sstream>
 #include <string>
 #include <cstdint>
@@ -88,8 +91,20 @@ bool HealthService::CreateHealthFolder() {
       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
                     "mkdir HEALTH_JSON_PATH_OXYGEN is error");
       return false;
+       }
+   }
+
+        return true;
+    }
+
+    /*生成bin*/
+    std::string GetBinFilePath(uint8_t type)
+    {
+        std::string currentDate = GetCurrentDate();
+        const char *healthTypePath = (type == HEALTH_TYPE_HEART) ? HEALTH_JSON_PATH_HEART : HEALTH_JSON_PATH_OXYGEN;
+
+        return healthTypePath + currentDate + ".bin";
     }
-  }
 
     /* --------------------------------- json操作 --------------------------------- */
     static constexpr const char *HEART_JSON_PATH = "/user/userdata/health/heart.json";
@@ -439,263 +454,24 @@ bool HealthService::CreateHealthFolder() {
         HeartModel::GetInstance()->ClearDisplayData();
         BloodOxygenModel::GetInstance()->ClearDisplayData();
 
-/* --------------------------------- json操作 ---------------------------------
- */
-static constexpr const char *HEART_JSON_PATH =
-    "/user/userdata/health/heart.json";
-static constexpr const char *BLOOD_JSON_PATH =
-    "/user/userdata/health/blood.json";
-
-// 读取血氧数据
-BloodOxygenData *HealthService::ReadBloodOxygenData() {
-  // 判断文件夹是否存在
-  if (!CreateHealthFolder()) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
-    return nullptr;
-  }
-
-  // 读取文件
-  std::ifstream inFile(BLOOD_JSON_PATH);
-  if (!inFile.is_open()) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open JSON file");
-    return nullptr;
-  }
-
-  // 读取文件内容到字符串
-  std::stringstream buffer;
-  buffer << inFile.rdbuf();
-  std::string jsonDataString = buffer.str();
-  const char *jsonData = jsonDataString.c_str();
-  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData: %s", jsonData);
-
-  // 关闭文件
-  inFile.close();
-
-  if (jsonDataString.empty()) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonDataString is empty");
-    return nullptr;
-  }
-
-  cJSON *oxygen_root = cJSON_Parse(jsonData);
-  if (oxygen_root == NULL) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "oxygen_root is empty");
-    return nullptr;
-  }
-
-  BloodOxygenData *data = new BloodOxygenData();
-
-  cJSON *value_item = cJSON_GetObjectItem(oxygen_root, "value");
-  cJSON *timestamp_item = cJSON_GetObjectItem(oxygen_root, "timestamp");
-
-  if (value_item && timestamp_item) {
-    data->SPO2 = value_item->valueint;
-    data->timestamp = timestamp_item->valuedouble;
-  } else {
-    // 读取的数据异常
-    cJSON_Delete(oxygen_root);
-    delete data;
-    return nullptr;
-  }
-  cJSON_Delete(oxygen_root);
-  return data;
-}
-// 读取心率数据
-HeartRateData *HealthService::ReadHeartRateData() {
-  // 判断文件夹是否存在
-  if (!CreateHealthFolder()) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
-    return nullptr;
-  }
-
-  // 读取文件
-  std::ifstream inFile(HEART_JSON_PATH);
-  if (!inFile.is_open()) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open JSON file");
-    // 创建一个默认值为 0的数据 存储到json里面 ?
-    return nullptr;
-  }
-
-  // 读取文件内容到字符串
-  std::stringstream buffer;
-  buffer << inFile.rdbuf();
-  std::string jsonDataString = buffer.str();
-  const char *jsonData = jsonDataString.c_str();
-  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData: %s", jsonData);
-
-  // 关闭文件
-  inFile.close();
-
-  if (jsonDataString.empty()) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonDataString is empty");
-    return nullptr;
-  }
-
-  cJSON *heart_root = cJSON_Parse(jsonData);
-  if (heart_root == NULL) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heart_root is empty");
-    return nullptr;
-  }
-
-  HeartRateData *data = new HeartRateData();
-
-  cJSON *value_item = cJSON_GetObjectItem(heart_root, "value");
-  cJSON *timestamp_item = cJSON_GetObjectItem(heart_root, "timestamp");
-
-  if (value_item && timestamp_item) {
-    data->Heart = value_item->valueint;
-    data->timestamp = timestamp_item->valuedouble;
-  } else {
-    // 读取的数据异常
-    cJSON_Delete(heart_root);
-    delete data;
-    return nullptr;
-  }
-  cJSON_Delete(heart_root);
-  return data;
-}
-// 保存血氧数据
-bool HealthService::UpdateHealthData(const BloodOxygenData &data) {
-  // 判断文件夹是否存在
-  if (!CreateHealthFolder()) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
-    return false;
-  }
-
-  // 判断文件是否存在 不存在即创建 并打开以输出模式
-  std::ofstream outFile(BLOOD_JSON_PATH, std::ios::trunc);
-  if (!outFile.is_open()) {
-    // 文件创建失败
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                  "Failed to create or open JSON file for writing");
-    return false;
-  }
-
-  // 创建一个 JSON 对象
-  cJSON *oxygen_root = cJSON_CreateObject();
-  if (oxygen_root == NULL) {
-    outFile.close();
-    return false;
-  }
-
-  cJSON_AddItemToObject(oxygen_root, "value", cJSON_CreateNumber(data.SPO2));
-  cJSON_AddItemToObject(oxygen_root, "timestamp",
-                        cJSON_CreateNumber(data.timestamp));
-
-  char *jsonData = cJSON_Print(oxygen_root);
-  if (jsonData == NULL) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data");
-    cJSON_free(oxygen_root);
-    outFile.close();
-    return false;
-  }
-
-  // 写入 JSON 数据到文件
-  outFile << jsonData;
-
-  cJSON_free(oxygen_root);
-  free(jsonData);
-  outFile.close();
-  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData SPO2 JSON is ok");
-
-  /* 存储bin文件[协议使用] */
-  std::string binFilePath = GetBinFilePath(HEALTH_TYPE_OXYGEN);
-  FILE *fp = fopen(binFilePath.c_str(), "ab+");
-  if (fp == NULL) {
-    return false;
-  }
-
-  fwrite(&data.timestamp, 4, 1, fp);
-  fwrite(&data.SPO2, 1, 1, fp);
-
-  fclose(fp);
-
-  return true;
-}
-
-// 存储心率
-bool HealthService::UpdateHealthData(const HeartRateData &data) {
-  // 判断文件夹是否存在
-  if (!CreateHealthFolder()) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
-    return false;
-  }
-
-  // 判断文件是否存在 不存在即创建 并打开以输出模式
-  std::ofstream outFile(HEART_JSON_PATH, std::ios::trunc);
-  if (!outFile.is_open()) {
-    // 文件创建失败
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                  "Failed to create or open JSON file for writing");
-    return false;
-  }
-
-  // 创建一个 JSON 对象
-  cJSON *heart_root = cJSON_CreateObject();
-  if (heart_root == NULL) {
-    outFile.close();
-    return false;
-  }
-
-  cJSON_AddItemToObject(heart_root, "value", cJSON_CreateNumber(data.Heart));
-  cJSON_AddItemToObject(heart_root, "timestamp",
-                        cJSON_CreateNumber(data.timestamp));
-
-  char *jsonData = cJSON_Print(heart_root);
-  if (jsonData == NULL) {
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data");
-    cJSON_free(heart_root);
-    outFile.close();
-    return false;
-  }
-
-  // 写入 JSON 数据到文件
-  outFile << jsonData;
-
-  cJSON_free(heart_root);
-  free(jsonData);
-  outFile.close();
-  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData Heart JSON is ok");
-
-  // 写入文件到当天历史数据
-  UpdateHourlyHeartRate(data.timestamp, data.Heart);
-  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHourlyHeartRate is ok");
-
-  /* 存储bin文件[协议使用] */
-  std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART);
-  FILE *fp = fopen(binFilePath.c_str(), "ab+");
-  if (fp == NULL) {
-    return false;
-  }
-
-  fwrite(&data.timestamp, 4, 1, fp);
-  fwrite(&data.Heart, 1, 1, fp);
-
-  fclose(fp);
-
-  return true;
-}
-// 清空健康数据
-bool HealthService::CleanHealthData() {
-  ClearHourlyHeartRates();
-  HeartModel::GetInstance()->ClearDisplayData();
-  BloodOxygenModel::GetInstance()->ClearDisplayData();
-
-  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CleanHealthData  is ok");
-  return true;
-}
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CleanHealthData  is ok");
+        return true;
+    }
 
-HealthState HealthService::GetHealthCurrent() { return healthState_; }
-void HealthService::SetHealthCurrent(HealthState healthState) {
-  healthState_ = healthState;
-}
-/* ------------------------------- 心率当天历史数据处理
- * ------------------------------ */
-static constexpr const char *HEART_DATA_PATH =
-    "/user/userdata/health/heart_history.bin";
-bool HealthService::LoadDailyHeartRate()  
-{  
-    // 初始化心率数组为 0  
-    ClearHourlyHeartRates();  
+    HealthState HealthService::GetHealthCurrent()
+    {
+        return healthState_;
+    }
+    void HealthService::SetHealthCurrent(HealthState healthState)
+    {
+        healthState_ = healthState;
+    }
+    /* ------------------------------- 心率当天历史数据处理 ------------------------------ */
+    static constexpr const char *HEART_DATA_PATH = "/user/userdata/health/heart_history.bin";
+    bool HealthService::LoadDailyHeartRate()
+    {
+        // 初始化心率数组为 0
+        ClearHourlyHeartRates();
 
     // 获取当前时间  
     time_t currentTime = time(nullptr);  
@@ -732,38 +508,14 @@ bool HealthService::LoadDailyHeartRate()
                 }  
                 dailyHeartRates[i] = heartRate;  
 
-                // 打印心率数据  
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Hour %d: Heart Rate %d", i, heartRate);  
-            }  
-
-            // 计算最大和最小心率  
-            int maxHeartRate = dailyHeartRates[0];  
-            int minHeartRate = dailyHeartRates[0];  
-
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "maxHeartRate %d: minHeartRate %d", minHeartRate, maxHeartRate);  
-
-            for (int i = 1; i < MAX_HOURS; ++i)  
-            {  
-                if (dailyHeartRates[i] > maxHeartRate)  
-                {  
-                    maxHeartRate = dailyHeartRates[i];  
-                }  
-                if ((minHeartRate == 0 && dailyHeartRates[i] != 0)||(dailyHeartRates[i] < minHeartRate && dailyHeartRates[i] != 0))  
-                {  
-                    minHeartRate = dailyHeartRates[i];  
-                }  
-            }  
-
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "for maxHeartRate %d: minHeartRate %d", minHeartRate, maxHeartRate);  
-
-            // 设置最大和最小心率  
-            HeartModel::GetInstance()->SetTopAndBottom(maxHeartRate, minHeartRate);
-
-            file.close();  
-            return true; // 成功读取  
-        }  
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "************************************************");  
-    }  
+                    // 打印心率数据
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Hour %d: Heart Rate %d", i, heartRate);
+                }
+                file.close();
+                return true; // 成功读取
+            }
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "************************************************");
+        }
 
     // 如果不是同一天,关闭文件  
     file.close();  
index 755e327..fb22b42 100644 (file)
@@ -149,8 +149,7 @@ public:
   std::string GetCheckString();\r
   uint16_t *GetArrayData();\r
   void SetArrayData();\r
-  void SetTopAndBottom(int maxheart,int minheart);\r
-  void UpdateTopAndBottom(int heart);\r
+\r
 private:\r
   HealthAllDatas healthDatas;\r
   uint16_t pretime{0};\r
index 622eab8..5fb49ad 100644 (file)
@@ -594,6 +594,20 @@ void HeartModel::UpHeartdata(uint16_t heart) {
     currentheart = displayheart; // 更新当前心率\r
     valid_counter_++;            // 增加有效计数器\r
     disvalid_counter_ = 0;       // 清空无效计数器\r
+\r
+    // 更新最大和最小心率\r
+    displayheart_max =\r
+        (displayheart_max < displayheart ? displayheart : displayheart_max);\r
+\r
+    // 确保最小心率的第一次赋值大于50\r
+    if (displayheart_min == 0 && displayheart > MIN_DISPLAY_HEART) {\r
+      displayheart_min = displayheart; // 初始化最小心率\r
+    } else {\r
+      displayheart_min =\r
+          (displayheart_min > displayheart && displayheart > MIN_DISPLAY_HEART)\r
+              ? displayheart\r
+              : displayheart_min;\r
+    }\r
   } else {\r
     disvalid_counter_++; // 增加无效计数器\r
     valid_counter_ = 0;  // 清零有效计数器\r
@@ -614,7 +628,6 @@ void HeartModel::UpHeartdata(uint16_t heart) {
                   "检测结果:成功 valid_counter:%d currentheart:%d",\r
                   valid_counter_, currentheart);\r
     SetResult(HeartResult::SUCCESS); // 标记为成功检测\r
-    UpdateTopAndBottom(currentheart);\r
     Heart_Stop();\r
     return;\r
   }\r
index 917a4ab..f836bae 100644 (file)
@@ -445,6 +445,11 @@ namespace OHOS
                 sleepCardView->SetCurrentPage(0);
             }
         }
+        if (SleepModel::GetInstance().CheckSleepTime()) {
+            //通知消息更新
+            GraphicService::GetInstance()->PostGraphicEvent(
+            std::bind(&OHOS::SleepModel::UpdateSleepView, &OHOS::SleepModel::GetInstance()));
+          }
     }
     /*天气卡片*/
     void MainPresenterSample::ResetWeatherCardView()
index de33f15..fe1c1dd 100644 (file)
@@ -79,8 +79,8 @@ namespace OHOS
         // 设置图标可见性
         sIcon.SetVisible(!itemInfo.read);
 
-        printf("MessageItemView   itemInfo %d %s %s\r\n", itemInfo.read, itemInfo.labeltitle.c_str(), itemInfo.labeldetails.c_str(), itemInfo.labeltime.c_str());
-        printf("MessageItemView   size %d %d %d\r\n", label_length, item_length, time_top);
+        // printf("MessageItemView   itemInfo %d %s %s\r\n", itemInfo.read, itemInfo.labeltitle.c_str(), itemInfo.labeldetails.c_str(), itemInfo.labeltime.c_str());
+        // printf("MessageItemView   size %d %d %d\r\n", label_length, item_length, time_top);
     }
     void MessageItemView::TearDownChild()
     {
index 5c773f1..762c562 100644 (file)
 #include <string>
 #include "cJSON.h"
 #include "wearable_log.h"
+
 #include "custom_utils.h"
 #include <algorithm>
+#include <chrono>
 #include <cstring>
 #include <dirent.h>
 #include <map>
@@ -52,7 +54,58 @@ extern "C"
 #endif
     static void Notify(void *args, const Topic topic, Request *request);
 
-    using namespace OHOS;
+using namespace OHOS;
+
+Subscriber MessageSubscirber = {
+    .identity = NULL,
+    .args = NULL,
+    .Notify = Notify,
+};
+
+void MessageSubscribeTopic(Topic topic) {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "stepsubscribeTopic, topic=%u", topic);
+  BroadcastApi *broadcastApi = NULL;
+  IUnknown *api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME,
+                                                     BROADCAST_FEATURE_NAME);
+  if (api == NULL) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "stepsubscribeTopic, GetFeatureApi failed");
+    return;
+  }
+  int result =
+      api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);
+  if (result != 0 || broadcastApi == NULL) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "stepsubscribeTopic, QueryInterface failed");
+    return;
+  }
+  broadcastApi->SubscribeTopic((IUnknown *)broadcastApi, topic,
+                               &MessageSubscirber);
+  broadcastApi->Release((IUnknown *)broadcastApi);
+}
+
+void MessageUnsubscribeTopic(Topic topic) {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MessageUnsubscribeTopic, topic=%u",
+                topic);
+  BroadcastApi *broadcastApi = NULL;
+  IUnknown *api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME,
+                                                     BROADCAST_FEATURE_NAME);
+  if (api == NULL) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "MessageUnsubscribeTopic, GetFeatureApi failed");
+    return;
+  }
+  int result =
+      api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);
+  if (result != 0 || broadcastApi == NULL) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "MessageUnsubscribeTopic, QueryInterface failed");
+    return;
+  }
+  broadcastApi->UnsubscribeTopic((IUnknown *)broadcastApi, topic,
+                                 &MessageSubscirber);
+  broadcastApi->Release((IUnknown *)broadcastApi);
+}
 
 // 存储消息更新的定时器
 static std::chrono::milliseconds updateDelay(500); // 设置更新延迟,0.5s
index 9954351..f826bc7 100644 (file)
@@ -169,6 +169,19 @@ namespace OHOS
 
     bool get_phone_addrss_name(char *name,const char *phone,uint8_t *sex)
     {
+
+        for(int i=0;i<get_sos_number_count();i++)
+        {
+            if(addrss_strcmp((char *)phone,sos_number_data[i].number))
+            {
+                strcpy_s(name,NAME_LEN+1,sos_number_data[i].name);
+                if(sex!=NULL)
+                *sex= sos_number_data[i].sex==0 ? 1:2;
+                return true;
+            }
+        }
+
+
         for(int i=0;i<addressbook_t.num;i++)
         {
             //if(strcmp(phone,addressbook_t.Contact_t[i].phone_number_t[0].number)==0)
index 4075e9e..5866c38 100644 (file)
@@ -284,8 +284,8 @@ namespace OHOS
         recordList->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。\r
         recordList->SetDragACCLevel(5);\r
         recordList->SetSwipeACCLevel(800); /*设置手指抬起屏幕后的补偿距离。*/\r
-        recordList->SetReboundSize(30);\r
-        recordList->SetScrollBlankSize(20);\r
+        // recordList->SetReboundSize(30);\r
+        // recordList->SetScrollBlankSize(20);\r
         recordList->SetIntercept(true); // 设置是否拦截输入事件。如果被截获,视图在本地处理后不会将输入事件传递给父视图。\r
         recordList->SetAdapter(p_RecordingListAdapter);\r
         RecordListScrollView->Add(recordList);\r
index e8cebf9..1fd07d4 100644 (file)
@@ -80,9 +80,9 @@ namespace OHOS
         {
             item = static_cast<RecordingListitemView *>(inView);
         }
+        item->SetViewIndex(index);
         item->SetItemInfo(itemData);
         item->SetOnClickListener(itemClickListener);
-        item->SetViewIndex(index);
         return item;
     }
 
index 1b8b9c7..b3acc03 100644 (file)
@@ -6,6 +6,7 @@
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListitemView.cpp
  */
 #include "record/include/RecordingListitemView.h"
+#include "record/include/RecordingModel.h"
 #include "wearable_log.h"
 
 namespace OHOS
@@ -41,6 +42,15 @@ namespace OHOS
         m_recordId.SetText(itemInfo.recordId.c_str());
         m_recordTotalTime.SetText(itemInfo.recordTotalTime);
         m_recordTime.SetText(itemInfo.recordTime);
+        //·ÀÖ¹listÖÐÔªËØ³¬¹ý3¸öºó×îºóÒ»¸ö±»ÕÚס£¬ÇÒ½öÔÚ×îºóÒ»¸öÔªËØÉèÖÃÆä¸ß¶ÈΪ160
+        if (RecordingModel::GetInstance()->GetRecordingListNum() > 2 && GetViewIndex() == RecordingModel::GetInstance()->GetRecordingListNum() - 1)
+        {
+            SetHeight(160);
+        }
+        else
+        {
+            SetHeight(120);
+        }
     }
 
     void RecordingListitemView::SetUpChild()
index 41e9787..4149144 100644 (file)
@@ -23,7 +23,7 @@ namespace OHOS
         void calculateHeartrateTotal(void);
         void ResumeStatus();
 
-        void RT_StartTimer(uint32_t interval);
+        void RT_StartTimer(uint64_t interval);
         void RT_StopTimer(void);
 
         int GetRespiratoryTrainingSelectTime();
index 47a4435..838abbe 100644 (file)
@@ -24,6 +24,7 @@
 #include <sstream>
 #include <thread>
 #include <unordered_map>
+#include <custom_runtime.h>
 namespace OHOS
 {
     // 声明定时器变量
@@ -60,7 +61,7 @@ namespace OHOS
     {
         int time = RespiratoryTrainingModel::GetInstance().GetRespiratoryTrainingSelectTime();
         uint64_t time_;
-        switch (time_)
+        switch (time)
         {
         case 1:
             time_ = ONE_MIN;
@@ -146,6 +147,7 @@ namespace OHOS
         heartTotal = 0;
         count = 0;
         HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE); // 关闭心率检测
+        uapi_dev_runtime_set_respiratory_training_status(0);                               // 如果直接退出也要设置为0
     }
     /* -------------------------------------------------------------------------- */
     /*定时器到期时的处理*/
@@ -157,6 +159,7 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_RespiratoryTrainingView is nullptr!!");
             return;
         }
+        uapi_dev_runtime_set_respiratory_training_status(0);                               // 训练结束runtime设置为0
         RespiratoryTrainingModel::GetInstance().RT_StopTimer();                            // 停止定时器
         RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes();             // 呼吸训练次数加1
         p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop();              // 关闭呼吸动画
@@ -178,7 +181,7 @@ namespace OHOS
      *  @brief 开启定时器函数
      *  @param interval 时间间隔,单位ms
      */
-    void RespiratoryTrainingModel::RT_StartTimer(uint32_t interval)
+    void RespiratoryTrainingModel::RT_StartTimer(uint64_t interval)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingModel::RT_StartTimer");
         /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
index 7390274..d11c080 100644 (file)
@@ -49,7 +49,7 @@ namespace OHOS
     void RespiratoryTrainingPresenter::OnStart()
     {
         Presenter<RespiratoryTrainingView>::OnStart();
-        ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
+        // ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
     }
 
     void RespiratoryTrainingPresenter::OnPause(void)
index 8e5f8d0..d340b33 100644 (file)
@@ -15,6 +15,8 @@
 #include "respiratorytraining/include/RespiratoryTrainingModel.h"
 #include "heartrate/include/HeartModel.h"
 #include "vibrator_service.h"
+#include <custom_runtime.h>
+#include <custom_utils.h>
 
 namespace OHOS
 {
@@ -242,7 +244,8 @@ namespace OHOS
             RespiratoryTrainingStartNote_->SetVisible(true);
             RespiratoryTrainingImg_->SetVisible(true);
         }
-
+        ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);//开始训练后常亮屏
+        uapi_dev_runtime_set_respiratory_training_status(1);                                                                         // 训练开始runtime设置为1
         StartRespiratoryTraining();                                                                                                  // 开始呼吸训练
         HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::INITIATIVE);                                         // 开启心率检测
         RespiratoryTrainingModel::GetInstance().RT_StartTimer(RespiratoryTrainingModel::GetInstance().GetRespiratoryTrainingTime()); // 开启定时器
index 1588811..c6f8111 100644 (file)
@@ -138,6 +138,8 @@ namespace OHOS
         bool SaveSleepData(const SleepDataUI &data); // 更新睡眠数据
         bool DeleteSleepData();                      // 清空睡眠文件
 
+        bool CheckSleepTime();//对睡眠时间进行校验
+
         void UpdateSleepView();
         std::string GetUpdateSleepTime();
 
@@ -177,6 +179,7 @@ namespace OHOS
         int goal_total_time = 0;
         int nap_total_time = 0;
 
+        uint32_t sleep_update_time{0};
 
         SLEEPSTATE sleepstate_ = SLEEPSTATE::WAKE;
         int CradId = 0; // 主界面状态
index 8aae038..00ae317 100644 (file)
@@ -880,11 +880,20 @@ namespace OHOS
   {
     sleep_time_str.clear();
     // 获取睡眠最新时间
-    uint32_t sleep_time = get_sleep_update_timestamp();
+    sleep_update_time = get_sleep_update_timestamp();
     // 获取时间戳
-    update_time_info(sleep_time, sleep_time_str);
+    update_time_info(sleep_update_time, sleep_time_str);
     return sleep_time_str;
   }
+  //校验时间更新
+  bool SleepModel::CheckSleepTime()
+  {
+    // 获取睡眠最新时间
+    if (sleep_update_time != get_sleep_update_timestamp()) {
+      return true;
+      }
+    return false;
+  }
   void SleepModel::update_sleep(SLEEP_T *data)
   {
     if (data == nullptr)
index 22f5eab..0028875 100644 (file)
@@ -462,14 +462,16 @@ void TraingModel::AnalysisData(cywee_activity_result_t *cyweeInfo) {
 
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "sportdata->goaldegree %d",
                   sportdata->goaldegree);
-    if (sportdata->goaldegree == 100) {
+    if (sportdata->goaldegree >= 100) { //测试
       // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentdata%d", currentdata);
       uapi_set_screen_on_api(); // 亮屏检测
       if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb()) {
         ui_api_vibrate_once_func();
       }
       TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true);
-      TraingCardView::GetInstance()->GetAnimator()->Start();
+      if (TraingCardView::GetInstance()->GetAnimator()) {
+        TraingCardView::GetInstance()->GetAnimator()->Start();
+      }
       Gettagstuats = true;
     }
   }
index 65e4877..6d19f0c 100644 (file)
@@ -42,8 +42,13 @@ namespace OHOS
         group->Add(butDistance);\r
         group->Add(butSteps);\r
 \r
-        InitLabelExt(labelDistance, 100, 390, 150, 35, "label3", STR_DISTANCE, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        InitLabelExt(labelSteps, 100, 510, 150, 35, "label5", STR_STEP_NUMBER, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitRollLabel(labelDistance, 130, 390, 150, 35, "label3", STR_DISTANCE, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitRollLabel(labelSteps, 130, 510, 150, 35, "label5", STR_STEP_NUMBER,\r
+                      DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        \r
+        labelDistance->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);\r
+        labelSteps->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);\r
+        \r
         group->Add(labelDistance);\r
         group->Add(labelSteps);\r
 \r
@@ -67,7 +72,7 @@ namespace OHOS
         }\r
         // 初始化Lable\r
         UIResourceTextId sportid = TraingModel::GetInstance()->GetSportEvent();\r
-        InitLabelExt(labeltitle, 83, 50, 300, 35, "label1", sportid, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitRollLabel(labeltitle, 83, 50, 300, 35, "label1", sportid, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
         group->Add(labeltitle);\r
 \r
         //  初始化Button\r
@@ -78,8 +83,13 @@ namespace OHOS
         group->Add(butTime);\r
         group->Add(butKcal);\r
 \r
-        InitLabelExt(labelTime, 100, 150, 150, 35, "label2", STR_DURATION, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        InitLabelExt(labelKcal, 100, 270, 150, 35, "label4", STR_CALORIE, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitRollLabel(labelTime, 130, 150, 150, 35, "label2", STR_DURATION, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        InitRollLabel(labelKcal, 130, 270, 150, 35, "label4", STR_CALORIE,\r
+                      DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        \r
+        labelTime->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);\r
+        labelKcal->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);\r
+\r
         group->Add(labelTime);\r
         group->Add(labelKcal);\r
 \r
index d86be7f..f0d71cc 100644 (file)
@@ -175,7 +175,7 @@ namespace OHOS
         SetCaluliScrollView->SetVerticalScrollState(false); // 禁止垂直滑动
                                                             /* -------------------------------------------------------------------------- */
                                                             // 初始化Lable
-        InitLabelExt(labeltitle_, 83, 50, 300, 35, "label1",STR_CALORIE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitRollLabel(labeltitle_, 83, 50, 300, 35, "label1",STR_CALORIE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
         SetCaluliScrollView->Add(labeltitle_);
 
         // 初始化UIPicker
index b598ce3..e00ba0c 100644 (file)
@@ -169,7 +169,7 @@ namespace OHOS
         SetMileScrollView->SetVerticalScrollState(false); // 禁止垂直滑动
         /* -------------------------------------------------------------------------- */
         // 初始化Lable
-        InitLabelExt(labeltitle_, 83, 50, 300, 35, "label1",STR_RANGE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitRollLabel(labeltitle_, 83, 50, 300, 35, "label1",STR_RANGE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
         SetMileScrollView->Add(labeltitle_);
 
         // 初始化UIPicker
index a975492..4858ed0 100644 (file)
@@ -169,7 +169,7 @@ namespace OHOS
         SetStepScrollView->SetVerticalScrollState(false); // 禁止垂直滑动
         /* -------------------------------------------------------------------------- */
         // 初始化Lable
-        InitLabelExt(labeltitle_, 83, 50, 300, 35, "label1", STR_STEP_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitRollLabel(labeltitle_, 83, 50, 300, 35, "label1", STR_STEP_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
         SetStepScrollView->Add(labeltitle_);
 
         // 初始化UIPicker
index 5f00365..219b011 100644 (file)
@@ -169,7 +169,7 @@ namespace OHOS
         SetTimeScrollView->SetVerticalScrollState(false); // 禁止垂直滑动
         /* -------------------------------------------------------------------------- */
         // 初始化Lable
-        InitLabelExt(labeltitle_, 83, 50, 300, 35, "label1", STR_DURATION_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitRollLabel(labeltitle_, 83, 50, 300, 35, "label1", STR_DURATION_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
         SetTimeScrollView->Add(labeltitle_);
 
         // 初始化UIPicker
index b939924..586bf7e 100644 (file)
@@ -29,6 +29,7 @@ class TraingCardPresenter : public Presenter<TraingCardView>,
                             public UIView::OnClickListener,\r
                             public UIView::OnDragListener,\r
                             public UISwipeView::OnSwipeListener,\r
+                            public RootView::OnKeyActListener,\r
                             public ModelListenerSample {\r
 public:\r
   TraingCardPresenter();\r
@@ -66,6 +67,8 @@ private:
   bool OnClick(UIView &view, const ClickEvent &event) override;\r
   bool OnDrag(UIView &view, const DragEvent &event) override;\r
   void OnSwipe(UISwipeView &view) override;\r
+  bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件\r
+\r
   int tag_ = 0;\r
   bool opensensorstuats{false};\r
   // bool OnDragEnd(UIView& view, const DragEvent& event) override;\r
index 340571f..fa2d03d 100644 (file)
@@ -335,9 +335,9 @@ bool TraingCardPresenter::OnClick(UIView &view, const ClickEvent &event) {
           // 确定达到目标\r
           {BUTTONWINOK,\r
            [&]() {\r
+             TraingCardView::GetInstance()->GetAnimator()->Stop();\r
              TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup,\r
                                                                false);\r
-             TraingCardView::GetInstance()->GetAnimator()->Stop();\r
            }},\r
           // 确定心率提醒\r
           {BUTTONNOTE,\r
@@ -361,6 +361,10 @@ void TraingCardPresenter::OnSwipe(UISwipeView &view) {
   UNUSED(view);\r
   return;\r
 }\r
+bool TraingCardPresenter::OnKeyAct(UIView &view, const KeyEvent &event) {\r
+  /*消耗按键事件*/\r
+  return true;\r
+}\r
 /* -------------------------------- 协议发起运动处理\r
  * -------------------------------- */\r
 \r
@@ -396,34 +400,39 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
   }\r
 \r
   // 仅在一般状态下允许开始运动\r
-  if (cmdstate == ExerciseState::Start &&\r
-      currentState == ExerciseState::General) {\r
-    if (TraingCardView::GetInstance() == nullptr) {\r
-      uapi_set_screen_on_api(); // 亮屏\r
-      NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
-      // 设置目标类型和项目有且只有一次\r
-      switch (cmd->sportType) {\r
-      case 0:\r
-        TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING);\r
-        OpenSensor(ExerciseClass::OUTDOOR);\r
-        break;\r
-      case 1:\r
-        TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING);\r
-        OpenSensor(ExerciseClass::OUTDOOR);\r
-        break;\r
-      case 2:\r
-        TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);\r
-        OpenSensor(ExerciseClass::FREE_TRAINING);\r
-        break;\r
-      default:\r
-        break;\r
+  if (cmdstate == ExerciseState::Start) {\r
+    if ((currentState == ExerciseState::General)) {\r
+      if (TraingCardView::GetInstance() == nullptr) {\r
+        uapi_set_screen_on_api(); // 亮屏\r
+        NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
+        // 设置目标类型和项目有且只有一次\r
+        switch (cmd->sportType) {\r
+        case 0:\r
+          TraingModel::GetInstance()->SetSportEvent(\r
+              STR_EXERCISE_OUTDOORWALKING);\r
+          OpenSensor(ExerciseClass::OUTDOOR);\r
+          break;\r
+        case 1:\r
+          TraingModel::GetInstance()->SetSportEvent(\r
+              STR_EXERCISE_OUTDOORRUNNING);\r
+          OpenSensor(ExerciseClass::OUTDOOR);\r
+          break;\r
+        case 2:\r
+          TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);\r
+          OpenSensor(ExerciseClass::FREE_TRAINING);\r
+          break;\r
+        default:\r
+          break;\r
+        }\r
       }\r
+      reply_APP_OpenSportModeCmd(true);\r
+      handleStartState();\r
+      return true;\r
+    } else {\r
+      reply_APP_OpenSportModeCmd(false);\r
+      // return false;\r
     }\r
-\r
-    handleStartState();\r
-    return true;\r
   }\r
-\r
   // 仅在运动状态为开始或继续时允许暂停\r
   if (cmdstate == ExerciseState::Pause) {\r
     if (currentState == ExerciseState::Start ||\r
@@ -460,7 +469,8 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
                 cmd->sportType, cmd->controlmd, cmd->sportTagType,\r
                 cmd->sportTag);\r
 \r
-  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "由于状态限制,命令未执行。\r\n");\r
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+                "由于状态限制,命令未执行 当前状态 %d。\r\n", currentState);\r
   return false; // 没有执行任何命令\r
 }\r
 \r
@@ -468,6 +478,7 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
 void TraingCardPresenter::handleEndState() {\r
   TraingModel::GetInstance()->SetSportState(ExerciseState::End);\r
   ControlSensor(ExerciseState::End);\r
+  uapi_set_screen_on_api(); // 亮屏\r
 #if DATATEST\r
   NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
   return;\r
index 4267ca3..de0129b 100644 (file)
@@ -67,6 +67,111 @@ static const uint16_t LABEL_FONT_SIZE = 200;
 static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;\r
 static const uint32_t CARD_PAGE_COLOR = 0xffd0d0d0;\r
 \r
+// 动态刷新设置  \r
+static constexpr uint16_t IMAGE_SIZE_X = 120;  \r
+static constexpr uint16_t IMAGE_SIZE_Y = 120;  \r
+static constexpr uint16_t IMAGE_POSITION_X = 173;  \r
+static constexpr uint16_t IMAGE_POSITION_Y = 100;  \r
+static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SIZE = 94;  \r
+static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SPEED = 30;  \r
+\r
+static ImageAnimatorInfo g_imageAnimatorInfo_trainingwin[94] = {  \r
+    {PNG_TRAINING_WIN_IMAGE_01, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_02, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_03, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_04, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_05, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_06, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_07, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_08, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_09, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_30, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_31, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_32, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_33, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_34, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_35, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_36, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_37, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_38, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_39, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_40, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_41, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_42, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_43, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_44, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_45, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_46, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_47, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_48, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_49, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_50, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_51, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_52, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_53, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_54, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_55, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_56, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_57, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_58, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_59, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_60, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_61, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_62, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_63, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_64, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_65, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_66, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_67, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_68, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_69, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_70, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_71, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_72, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_73, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_74, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_75, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_76, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_77, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_78, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_79, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_80, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_81, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_82, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_83, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_84, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_85, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_86, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_87, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_88, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_89, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_90, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_91, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_92, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_93, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+    {PNG_TRAINING_WIN_IMAGE_94, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH},  \r
+};\r
+\r
 static TraingCardView *g_pTraingCardView{nullptr};\r
 \r
 TraingCardView::TraingCardView() {\r
@@ -83,9 +188,7 @@ TraingCardView::TraingCardView() {
 }\r
 \r
 TraingCardView::~TraingCardView() {\r
-  imageAnimator->Stop();\r
-  FreeImageInfoArray(winimageInfos, winbasePath.c_str(), 94);\r
-  ReleaseImageAnimatorSource(winimageAnimatorInfo, 94);\r
+\r
   DeInit();\r
 \r
   g_pTraingCardView = nullptr;\r
@@ -138,6 +241,7 @@ void TraingCardView ::InitView() {
   }\r
   swipe_->SetOnSwipeListener(onSwipeListener);\r
 \r
+  RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::InitPage over");\r
 }\r
 \r
@@ -190,19 +294,20 @@ void TraingCardView::DeInit() {
   buttonnote_ = nullptr;\r
 \r
   /*动画*/\r
-  delete imageAnimator;\r
-  imageAnimator = nullptr;\r
+  if (imageAnimator) {\r
+    imageAnimator->Stop();\r
+    delete imageAnimator;\r
+    imageAnimator = nullptr;\r
+  }\r
 \r
   /*卡片*/\r
   delete controlview_;\r
   controlview_ = nullptr;\r
   delete dataallview_;\r
   dataallview_ = nullptr;\r
-  // delete DetailView;\r
-  // DetailView = nullptr;\r
-  delete swipe_;\r
   delete musicview_;\r
   musicview_ = nullptr;\r
+\r
   /*弹窗*/\r
   delete endView;\r
   endView = nullptr;\r
@@ -211,6 +316,7 @@ void TraingCardView::DeInit() {
   delete heartView;\r
   heartView = nullptr;\r
 \r
+  delete swipe_;\r
   swipe_ = nullptr;\r
 }\r
 UICardPage *TraingCardView::InitControlPage(void) {\r
@@ -483,6 +589,7 @@ void TraingCardView::InitImageAnimator() {
     break;\r
   }\r
   case ExerciseTag::Steps:\r
+    tagString = tagString + "steps";\r
     break;\r
   default:\r
     break;\r
@@ -496,9 +603,20 @@ void TraingCardView::InitImageAnimator() {
   getView->Add(labeltag);\r
 \r
   // 初始化图片数组以及动画\r
-  winimageInfos = CreateImageInfoArray(winbasePath.c_str(), 94);\r
-  InitImageAnimatorSource(imageAnimator, winimageAnimatorInfo, winimageInfos,\r
-                          94, 173, 100, 120, 120, "imageAnimator1", 10);\r
+  if (imageAnimator == nullptr) {\r
+    imageAnimator = new UIImageAnimatorView();\r
+    if (imageAnimator == nullptr) {\r
+      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
+                    "AssistantAnswerView::new UIImageAnimatorView fail");\r
+      return;\r
+    }\r
+  }\r
+  imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_trainingwin,\r
+                                     DETECTION_IMAGE_ANIMATORVIEW_SIZE,\r
+                                     DETECTION_IMAGE_ANIMATORVIEW_SPEED);\r
+  imageAnimator->SetRepeat(true);\r
+  // imageAnimator->Start();\r
+\r
   getView->Add(imageAnimator);\r
 }\r
 \r
@@ -516,6 +634,7 @@ void TraingCardView::OnTearDownView() {
 \r
 void TraingCardView::OnStop() {\r
   View<TraingCardPresenter>::OnStop();\r
+  container_ = nullptr;\r
   RootView::GetInstance()->RemoveAll();\r
   return;\r
 }\r
index ef1f6c6..ffa0b51 100644 (file)
@@ -35,7 +35,7 @@ namespace OHOS
         TraingMoreModel(const TraingMoreModel &);
         TraingMoreModel &operator=(const TraingMoreModel &);
         virtual ~TraingMoreModel();
-        static const uint16_t TraingMoreListMaxNum = 7;
+        static const uint16_t TraingMoreListMaxNum = 9;
         TraingMoreItem TraingMores[TraingMoreListMaxNum] = {VIEW_INVALID, STR_ICE_SPORTS, nullptr};
         // std::map<int, AppViewId> TraingMoreIdToViewId;
         bool btConnectStatus{false};
index 4caa87e..b2843a2 100644 (file)
@@ -38,14 +38,17 @@ namespace OHOS
 
     void TraingMoreModel::InitTraingMoreListItem()
     {
-        TraingMores[0] = {VIEW_TRAININGFITNESS, STR_EXERCISE_LIST, FITNESS_IMAGE};
-        TraingMores[1] = {VIEW_TRAININGDANCE, STR_DANCING_LIST, DANCE_IMAGE};
-        TraingMores[2] = {VIEW_TRAININGREST, STR_RECREATIONAL_LIST, REST_IMAGE};
-        TraingMores[3] = {VIEW_TRAININGBALL, STR_BALL_LIST, BALL_IMAGE};
+        int index = 0;
+        TraingMores[index++] = {VIEW_TRAININGMORE, STR_TRAINING, nullptr};
+        TraingMores[index++] = {VIEW_TRAININGFITNESS, STR_EXERCISE_LIST, FITNESS_IMAGE};
+        TraingMores[index++] = {VIEW_TRAININGDANCE, STR_DANCING_LIST, DANCE_IMAGE};
+        TraingMores[index++] = {VIEW_TRAININGREST, STR_RECREATIONAL_LIST, REST_IMAGE};
+        TraingMores[index++] = {VIEW_TRAININGBALL, STR_BALL_LIST, BALL_IMAGE};
         // TraingMores[4] = {VIEW_TRAININGAQUATIC, STR_WATER_LIST, SWIMMING_IMAGE};水上运动
-        TraingMores[4] = {VIEW_TRAININGICE, STR_ICE_LIST, ICE_IMAGE};
-        TraingMores[5] = {VIEW_TRAININGLIMIT, STR_EXTREME_LIST, LIMIT_IMAGE};
-        TraingMores[6] = {VIEW_TRAININGOTHER, STR_OTHER_LIST, OTHER_IMAGE};
+        TraingMores[index++] = {VIEW_TRAININGICE, STR_ICE_LIST, ICE_IMAGE};
+        TraingMores[index++] = {VIEW_TRAININGLIMIT, STR_EXTREME_LIST, LIMIT_IMAGE};
+        TraingMores[index++] = {VIEW_TRAININGOTHER, STR_OTHER_LIST, OTHER_IMAGE};
+        TraingMores[index++] = {VIEW_INVALID, STR_TRAINING, nullptr};
     }
 
     const TraingMoreItem *TraingMoreModel::GetTraingMorelistItems() const
index 6f593b4..8ae0503 100755 (executable)
@@ -144,7 +144,7 @@ namespace OHOS
            if(id!=VIEW_INCOMING_CALL)
            make_phone_push(id);
         }
-        showsStackSliceId();
+        // showsStackSliceId();
         /*
             if (GetCurSliceId() == targetSliceId) {
             return;
@@ -162,23 +162,14 @@ namespace OHOS
             GraphicService::GetInstance()->PostGraphicEvent(std::bind(&Ability::PostChangeSlice, this, targetSliceId,
                                                                       type, priority));
 #endif            
+        } else {
+            GRAPHIC_LOGE("ChangeSlice failed! targetSliceId = %u, transitionCount_ = %d",
+                targetSliceId, osal_atomic_read(&transitionCount_));
         }
     }
 
     void Ability::PostChangeSlice(const uint16_t targetSliceId, TransitionType type, const uint16_t priority)
     {
-       
-#ifdef JS_ENABLE
-    ElementName *elementName = OHOS::AbilityMsClient::GetInstance().GetTopAbility();
-    if (elementName != nullptr && strcmp(elementName->bundleName, "com.huawei.launcher") != 0) {
-        OHOS::AbilityMsClient::GetInstance().ForceStop(elementName->bundleName);
-        targetSliceIdFromJS_ = targetSliceId;
-        if (type != TransitionType::TRANSITION_INVALID) {
-            osal_atomic_dec(&transitionCount_);
-        }
-        return;
-    }
-#endif
         /*
             1.首先检查当前Slice是否存在,并验证transitionId的有效性。
             如果当前存在一个有效的Slice,并且transitionId合法,则调用sliceTransition_的SaveCurrentSnapshot方法保存当前Slice的快照,
@@ -219,7 +210,16 @@ namespace OHOS
         printf("*******************next slice id is %d*****************\r\n", targetSliceId);
 #endif
         // slice页面跳转,先onstop,再onstart.在一个线程同步执行绘制,不会出现闪屏现象
-
+#ifdef JS_ENABLE
+        ElementName *elementName = OHOS::AbilityMsClient::GetInstance().GetTopAbility();
+        if (elementName != nullptr && strcmp(elementName->bundleName, "com.huawei.launcher") != 0)
+        {
+            OHOS::AbilityMsClient::GetInstance().ForceStop(elementName->bundleName);
+            targetSliceIdFromJS_ = targetSliceId;
+            osal_atomic_dec(&transitionCount_);
+            return;
+        }
+#endif
         /*
             调用StartSlice函数以启动新的指定的Slice。
             StartSlice函数内部会先检查是否存在目标Slice的Proxy,并通过Proxy创建新的实例,
index 1a5afdb..dc4195f 100644 (file)
@@ -17,6 +17,9 @@
 #include <stdint.h>
 #include <stdio.h>
 #include "stdbool.h"
+#include <stdio.h>  
+#include <stdlib.h>  
+#include <time.h> 
 
 #include "bts_le_gap.h"
 #include "bts_br_gap.h"
@@ -301,65 +304,62 @@ static void ble_ancs_client_notify_source_cbk(uint8_t client_id, uint16_t conn_i
 //static  char old_time_buf[64]={0};
 static uint32_t ancs_msg_index =0;
 
-//"20240709T093253"
-/* ANCS服务通知属性响应结果回调 */
-static void ble_ancs_client_notification_attr_rsp_cbk(uint8_t client_id, uint16_t conn_id,
-    ble_ancs_notification_attr_rsp_t *notify_attr_rsp, errcode_t status)
-{
-    if (status == ERRCODE_BT_SUCCESS) {
-        printf("[ANCSClientNotifyATTRSPCBK]conn_id:%d status:0x%x notify_uid:%lu\r\n",
-            conn_id, status, notify_attr_rsp->notification_uid);
 
-        ble_ancs_attr_rsp_t *node = (ble_ancs_attr_rsp_t *)notify_attr_rsp->attr_rsp_lst.head;
-        uint16_t att_num = 1;
-        char title_buf[300]={0};
-        char msg_buf[300]={0};
-        char app_buf[70]={0};
-        while (node != NULL) {
-            if (node != NULL) {
-                printf("[ANCSClientNotifyATTRSPCBK]att id:%d length:%lu att_value:%s\r\n",
-                    node->att_id, node->att_length, node->att);
-                if( node->att_id==1)
-                {
-                    sprintf_s(title_buf,300,"%s",node->att);
-                }
-                if(node->att_id==3)
-                {
-                    sprintf_s(msg_buf,300,"%s",node->att);
-                }
-                if(node->att_id==0)
-                {
-                   sprintf_s(app_buf,70,"%s",node->att);
-                }
-            }
-            node = lnext(node);
-            if (att_num == notify_attr_rsp->att_num) {
-                break;
-            }
-            att_num = att_num + 1;
-        }
-       
-        printf("ble_ancs_client_notification_attr_rsp_cbk test\r\n");
-
-
-        // if(strcmp(old_time_buf,new_msg_buf)!=0)
-        // {
-            // memset(old_time_buf,0,64);
-            // memcpy_s(old_time_buf,64,new_msg_buf,64);
-           // printf("ble_ancs_client_notification_attr_rsp_cbk test 2\r\n");
-            if(is_filtration_data(app_buf))
-            message_data(notify_attr_rsp->notification_uid,0,title_buf,msg_buf,0);
-           
-
-            
-        //}
-       
-    } else {
-        printf("[ANCSClientNotifyATTRSPCBK]conn_id:%d status:0x%x.\r\n",
-            conn_id, status);
-    }
+/* ANCS服务通知属性响应结果回调 */  
+static void ble_ancs_client_notification_attr_rsp_cbk(uint8_t client_id, uint16_t conn_id,  
+    ble_ancs_notification_attr_rsp_t *notify_attr_rsp, errcode_t status)  
+{  
+    if (status == ERRCODE_BT_SUCCESS) {  
+        printf("[ANCSClientNotifyATTRSPCBK]conn_id:%d status:0x%x notify_uid:%lu\r\n",  
+            conn_id, status, notify_attr_rsp->notification_uid);  
+
+        ble_ancs_attr_rsp_t *node = (ble_ancs_attr_rsp_t *)notify_attr_rsp->attr_rsp_lst.head;  
+        uint16_t att_num = 1;  
+        char title_buf[300] = {0};  
+        char msg_buf[300] = {0};  
+        char app_buf[70] = {0};  
+        time_t timestamp = 0;  // 初始化时间戳  
+
+        while (node != NULL) {  
+            if (node != NULL) {  
+                printf("[ANCSClientNotifyATTRSPCBK]att id:%d length:%lu att_value:%s\r\n",  
+                    node->att_id, node->att_length, node->att);  
+                
+                if (node->att_id == 1) {  
+                    sprintf_s(title_buf, 300, "%s", node->att);  
+                } else if (node->att_id == 3) {  
+                    sprintf_s(msg_buf, 300, "%s", node->att);  
+                } else if (node->att_id == 0) {  
+                    sprintf_s(app_buf, 70, "%s", node->att);  
+                } else if (node->att_id == 5) {  
+                    struct tm tm = {0};  
+                    // 将 node->att 强制转换为 const char *  
+                    if (strptime((const char *)node->att, "%Y%m%dT%H%M%S", &tm) != NULL) {  
+                        timestamp = mktime(&tm);  // 获取时间戳  
+                    } else {  
+                        printf("时间字符串解析失败: %s\r\n", node->att);  
+                    }  
+                }  
+            }  
+            node = lnext(node);  
+            if (att_num == notify_attr_rsp->att_num) {  
+                break;  
+            }  
+            att_num++;  
+        }  
+
+        printf("ble_ancs_client_notification_attr_rsp_cbk test\r\n");  
+
+        // 只有在成功解析时间戳后才进行后续操作  
+        if (is_filtration_data(app_buf) && (timestamp >= subscribe_notify_creationTime)) {  
+            message_data(notify_attr_rsp->notification_uid, 0, title_buf, msg_buf, 0);  
+        }  
+
+    } else {  
+        printf("[ANCSClientNotifyATTRSPCBK]conn_id:%d status:0x%x.\r\n",  
+            conn_id, status);  
+    }  
 }
-
 /* ANCS服务应用属性响应结果回调 */
 static void ble_ancs_client_app_attr_rsp_cbk(uint8_t client_id, uint16_t conn_id,
     ble_ancs_app_attr_rsp_t *app_attr_rsp, errcode_t status)
index 8d6c2ba..9e0c23c 100644 (file)
@@ -2430,6 +2430,8 @@ void SetsteptargetParamCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota
 \r
         printf("设置步数:%d %d %d %d \r\n",targetStep,ringOn,vibration,notify);\r
 \r
+        set_goal_stepcount(targetStep);\r
+        \r
 \r
         if(ringOn &&vibration &&  notify)\r
         set_goal_step_notification(1);\r
@@ -4193,7 +4195,7 @@ static void DeleteFileTypeCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *t
 void reply_APP_OpenSportModeCmd(bool falg)\r
 {\r
 \r
-    ble_data_type type_={0x01,0x06,1,1,1};\r
+    ble_data_type type_={0x01,0x0A,1,1,1};\r
     char data[1]={0};\r
     if(falg)\r
     data[0]=1;\r
index 16a2221..61fd1f0 100644 (file)
@@ -96,6 +96,7 @@ typedef enum {
     TOPIC_EVENT_MESSAGE_UPDATA, //消息更新通知
     TOPIC_EVENT_SLEEPNOTE, //睡眠通知
     TOPIC_EVENT_DEBUGOUTPUT,//开发调试专用窗口
+    TOPIC_EVENT_ASSISTANT_NOTE,//语音助手结束
     TOPIC_END_NUM = 20000,
 } TopicNum;
 
index 95024d3..26c5bcb 100644 (file)
@@ -148,6 +148,7 @@ set(PRIVATE_HEADER
     ${CMAKE_CURRENT_SOURCE_DIR}/../../fd230app/nativeui/bluetooth/include
     ${CMAKE_CURRENT_SOURCE_DIR}/../../fd230app/nativelauncher/include
     ${CMAKE_CURRENT_SOURCE_DIR}/../../fd230app/nativeui/goal/include
+    # ${CMAKE_CURRENT_SOURCE_DIR}/../../fd230app/nativelauncher/include
     ${CMAKE_CURRENT_SOURCE_DIR}/../../ohos_deps
     ${CMAKE_CURRENT_SOURCE_DIR}/../../CustomUIComponentTool/uicomponents/
     ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
@@ -212,6 +213,7 @@ if("JS_ENABLE" IN_LIST DEFINES)
 set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/src/msg_center_customer.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/src/msg_center_cmd.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/common/msg_center_common.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/alarm_notification.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/charge_notification.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/makephone_notification.cpp
@@ -224,10 +226,10 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/message_notification.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sleep_notification.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/motion_recognition_notification.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/goal_notification.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/debug_output_notification/debug_output_notification_adapter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/debug_output_notification/debug_output_notification_itemview.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/debug_output_notification/debug_output_notification.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/goal_notification.cpp
 )
 else()
 set(SOURCES
index e319004..84ab43b 100644 (file)
Binary files a/code/sdk/application/wearable/service/msg_center/brandy-native-js-autoota/libmsg_center.a and b/code/sdk/application/wearable/service/msg_center/brandy-native-js-autoota/libmsg_center.a differ
index e319004..84ab43b 100644 (file)
Binary files a/code/sdk/application/wearable/service/msg_center/brandy-native-js-autootacli/libmsg_center.a and b/code/sdk/application/wearable/service/msg_center/brandy-native-js-autootacli/libmsg_center.a differ
index e319004..84ab43b 100644 (file)
Binary files a/code/sdk/application/wearable/service/msg_center/brandy-native-js-leakcheck/libmsg_center.a and b/code/sdk/application/wearable/service/msg_center/brandy-native-js-leakcheck/libmsg_center.a differ
index 152fcc9..143ef57 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-03-22 09:48:07
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-11 17:22:48
+ * @LastEditTime: 2024-10-09 09:54:34
  * @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/include/notify/pairing_notification.h
  */
 #ifndef PAIRING_NOTIFICATION_H
@@ -18,11 +18,12 @@ namespace OHOS
     void FreeDeviceBindingView(void);
     void FreeDeviceUnBindingView(void);
     void FreeDeviceUnbindingRequestGroupView(void);
-    class PairingViewEventListener : public OHOS::UIView::OnClickListener
+    class PairingViewEventListener : public OHOS::UIView::OnClickListener,public RootView::OnKeyActListener
     {
     public:
         static PairingViewEventListener &GetInstance(void);
         bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event) override;
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override; // Ôö¼Ó°´¼üʼþ
         void SetDeviceName(char *Name);
         char *GetDeviceName();
         void DeviceUnBindingViewIsVisible(bool state);
index c107b94..374f962 100644 (file)
@@ -884,7 +884,7 @@ void MsgCenterNotifyMessageProc(const Topic topic, Request* req)
 {
     //unused(topic);
     unused(req);
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyMessageProc !");
+    // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyMessageProc !");
     if (CheckPriority(topic)) {
         NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_THREE);
         NotificationManager::GetInstance()->ShowNotify(showMessageNotify, (uint16_t)topic, true);
index 3db3e3a..4f0978e 100644 (file)
@@ -172,7 +172,15 @@ namespace OHOS
         const power_display_svr_api_t *display_api = power_display_svr_get_api();
         if (display_api)
         {
-            int brightnessValue = ConfigModel::GetInstance()->GetBrightness();
+            int brightnessValue;
+            if(uapi_dev_runtime_get_saveele_status()) //如果是省电模式状态下退出要把亮度设置为最低
+            {
+                brightnessValue = 51;
+            }
+            else
+            {
+                brightnessValue= ConfigModel::GetInstance()->GetBrightness();
+            }
             if (display_api->set_brightness(brightnessValue) != ERRCODE_SUCC)
             {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[FindWatchViewEventListener] resume_brightness fail!");
@@ -488,6 +496,7 @@ namespace OHOS
         }
 
         FindWatchViewEventListener::GetInstance().ResumeScreenBrightness();
+        FindWatchViewEventListener::GetInstance().FindWatch_StopTimer();
     }
 
     /* ----------------------- FindWatchRingPlayerListener ---------------------- */
index 98ce870..efc8c73 100755 (executable)
@@ -50,7 +50,7 @@ static uint8_t sos_dail_falg=0;
 
 #define SOS_TEST_FLAG 0
 
-#define SOS_HFP_FALG 0
+#define SOS_HFP_FALG 1
 
 #define DIAL_TIME 30
 
@@ -66,7 +66,7 @@ void sos_falg_add(void)
 {
     if(sos_dail_falg)
     {
-
+        printf("sos dial %d\r\n",sos_dail_falg);
         #if SOS_TEST_FLAG
         if(1)
         #else
@@ -86,7 +86,7 @@ void sos_falg_add(void)
              calldial_event_sendmsg_toUI("SOS");
         }
         sos_dail_falg++;
-        if(sos_dail_falg>=9)
+        if(sos_dail_falg>=OHOS::get_sos_number_count()*3)
         {
             sos_dail_falg=0;
         }
@@ -112,7 +112,7 @@ void start_SOS_phone_dail(void)
     #if SOS_HFP_FALG
     else if(uapi_hfp_connect_state())
     {
-        DialCall((unsigned char *)sos_dail_buf,osal_strlen((const char*)sos_dail_buf));
+        DialCall((unsigned char *)OHOS::get_sos_number(0),osal_strlen((const char*)OHOS::get_sos_number(0)));
         sos_dail_falg=1;
     }
     #endif
@@ -614,7 +614,6 @@ void cat1_phone_state_change_cb(uint8_t state)
             if(call_stat==2)
             call_stat=1;
             PhoneServiceScreenCtr(true);
-            sos_falg_clean();
             WatchActiveHandle();
             break;
         case OPERATE_PHONE_HOLD:
index e6090d8..3ff1a9d 100644 (file)
@@ -163,6 +163,10 @@ namespace OHOS
                     return false;
                 }
                 DeviceUnbindingRequestGroupView->SetVisible(false);
+                /* -------------------------------------------------------------------------- */
+                RootView::GetInstance()->ClearOnKeyActListener();
+                RootView::GetInstance()->SetOnKeyActListener(this);
+                /* -------------------------------------------------------------------------- */
                 RootView::GetInstance()->Add(ShutDownImageAnimatorGroupView);
             }
             ShutDownImageAnimatorView::GetInstance()->ShutDownImageAnimator_Start(3);
@@ -175,6 +179,12 @@ namespace OHOS
         return true;
     }
 
+    bool PairingViewEventListener::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件
+    {
+        //消耗按键事件
+        return true;
+    }
+
     static UIButton *CreateButton(unsigned int x, unsigned int y, unsigned int w, unsigned int h, const char *imageSrc)
     {
         UIButton *button = new UIButton();
index d37b19d..0a6c890 100644 (file)
@@ -3091,7 +3091,7 @@ void hx3695_hrs_ppg_Int_handle(void)
             encoded_hrm[15] = ppg_s_data.green_cur;//绿灯电流\r
             encoded_hrm[16] = ppg_s_data.ir_cur;//红外电流\r
 \r
-            if(uapi_dev_runtime_get_bt_powerstat())\r
+            if(cm_custom_ble_service_on_flag())\r
               ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX);\r
 \r
             // ble_op_att_send_data(ATT_CHARACTERISTIC_2a37_01_VALUE_HANDLE,encoded_hrm, \\r
@@ -3537,7 +3537,7 @@ void hx3695_spo2_ppg_Int_handle(void)
             \r
             encoded_hrm[15] = cal.R_LED;\r
             encoded_hrm[16] = cal.IR_LED1;\r
-            if(uapi_dev_runtime_get_bt_powerstat())\r
+            if(cm_custom_ble_service_on_flag())\r
               ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX);\r
         }\r
     }\r
index 253e341..8da01fe 100644 (file)
@@ -95,6 +95,8 @@ typedef struct
     uint8_t lock_flag_sleep;//睡眠
 
     uint8_t lock_flag_goal;//每日目标数据 5个数据一起锁
+    
+    uint8_t respiratory_training_status;//呼吸训练开始状态
 
 } runtime_status_t;
 
@@ -416,6 +418,16 @@ uint8_t uapi_dev_runtime_get_motion_recognition_status(void)
     return g_runtime.motion_recognition_status;
 }
 
+//设置呼吸训练状态
+void uapi_dev_runtime_set_respiratory_training_status(uint8_t status)
+{
+    g_runtime.respiratory_training_status = status;
+}
+uint8_t uapi_dev_runtime_get_respiratory_training_status(void)
+{
+    return g_runtime.respiratory_training_status;
+}
+
 // sleep mode flag
 void uapi_sleep_mode_flag_set(uint8_t flag)
 {
index 0360c8e..491376a 100644 (file)
@@ -162,6 +162,10 @@ uint8_t uapi_dev_runtime_get_goal_storage_status(void);
 void uapi_dev_runtime_set_motion_recognition_status(uint8_t status);
 uint8_t uapi_dev_runtime_get_motion_recognition_status(void);
 
+
+//呼吸训练
+void uapi_dev_runtime_set_respiratory_training_status(uint8_t status);
+uint8_t uapi_dev_runtime_get_respiratory_training_status(void);
 /***************************************cat1 runtime 变量设置获取函数**************************************************/
 
 
index 1f2f82e..4347741 100644 (file)
Binary files a/code/sdk/middleware/services/gpu/api/rm/brandy-native-js-autoota/libgfx_rm.a and b/code/sdk/middleware/services/gpu/api/rm/brandy-native-js-autoota/libgfx_rm.a differ
index 1f2f82e..4347741 100644 (file)
Binary files a/code/sdk/middleware/services/gpu/api/rm/brandy-native-js-autootacli/libgfx_rm.a and b/code/sdk/middleware/services/gpu/api/rm/brandy-native-js-autootacli/libgfx_rm.a differ
index 1f2f82e..4347741 100644 (file)
Binary files a/code/sdk/middleware/services/gpu/api/rm/brandy-native-js-leakcheck/libgfx_rm.a and b/code/sdk/middleware/services/gpu/api/rm/brandy-native-js-leakcheck/libgfx_rm.a differ
index 4406327..9727828 100644 (file)
Binary files a/code/sdk/middleware/services/gui/hal/display/brandy-native-js-autoota/libdisplay_gfx.a and b/code/sdk/middleware/services/gui/hal/display/brandy-native-js-autoota/libdisplay_gfx.a differ
index 4406327..9727828 100644 (file)
Binary files a/code/sdk/middleware/services/gui/hal/display/brandy-native-js-autootacli/libdisplay_gfx.a and b/code/sdk/middleware/services/gui/hal/display/brandy-native-js-autootacli/libdisplay_gfx.a differ
index 4406327..9727828 100644 (file)
Binary files a/code/sdk/middleware/services/gui/hal/display/brandy-native-js-leakcheck/libdisplay_gfx.a and b/code/sdk/middleware/services/gui/hal/display/brandy-native-js-leakcheck/libdisplay_gfx.a differ
index 8ee2fe1..807b8f2 100644 (file)
Binary files a/code/sdk/middleware/services/gui/uikit/brandy-native-js-autoota/libuikit_ext.a and b/code/sdk/middleware/services/gui/uikit/brandy-native-js-autoota/libuikit_ext.a differ
index 8ee2fe1..807b8f2 100644 (file)
Binary files a/code/sdk/middleware/services/gui/uikit/brandy-native-js-autootacli/libuikit_ext.a and b/code/sdk/middleware/services/gui/uikit/brandy-native-js-autootacli/libuikit_ext.a differ
index 8ee2fe1..807b8f2 100644 (file)
Binary files a/code/sdk/middleware/services/gui/uikit/brandy-native-js-leakcheck/libuikit_ext.a and b/code/sdk/middleware/services/gui/uikit/brandy-native-js-leakcheck/libuikit_ext.a differ
index 5afac3a..426d6a2 100755 (executable)
@@ -190,9 +190,9 @@ void MemCheck::DumpMemInfo()
     printf("--------\n");
     //此处打印比较多,需要请自行打开。
     // GrallocEngines::GetInstance()->DumpMem();
-#endif
 }
 
+
 #ifndef VERSION_IOT
 bool MemCheck::isBeyondTime()
 {
@@ -278,5 +278,6 @@ bool MemCheck::CreateRecordFile()
     }
     return true;
 }
-} // namespace OHOS
 #endif
+} // namespace OHOS
+#endif
\ No newline at end of file
index 9af3d9c..54aaff3 100644 (file)
Binary files a/code/sdk/middleware/utils/fs/vfs/brandy-native-js-autoota/libx_vfs_private.a and b/code/sdk/middleware/utils/fs/vfs/brandy-native-js-autoota/libx_vfs_private.a differ
index 9af3d9c..54aaff3 100644 (file)
Binary files a/code/sdk/middleware/utils/fs/vfs/brandy-native-js-autootacli/libx_vfs_private.a and b/code/sdk/middleware/utils/fs/vfs/brandy-native-js-autootacli/libx_vfs_private.a differ
index 9af3d9c..54aaff3 100644 (file)
Binary files a/code/sdk/middleware/utils/fs/vfs/brandy-native-js-leakcheck/libx_vfs_private.a and b/code/sdk/middleware/utils/fs/vfs/brandy-native-js-leakcheck/libx_vfs_private.a differ
index f9f27b7..5ae1a87 100644 (file)
Binary files a/code/sdk/middleware/utils/fs/yaffs2/brandy-native-js-autoota/libfs_yaffs2.a and b/code/sdk/middleware/utils/fs/yaffs2/brandy-native-js-autoota/libfs_yaffs2.a differ
index f9f27b7..5ae1a87 100644 (file)
Binary files a/code/sdk/middleware/utils/fs/yaffs2/brandy-native-js-autootacli/libfs_yaffs2.a and b/code/sdk/middleware/utils/fs/yaffs2/brandy-native-js-autootacli/libfs_yaffs2.a differ
index f9f27b7..5ae1a87 100644 (file)
Binary files a/code/sdk/middleware/utils/fs/yaffs2/brandy-native-js-leakcheck/libfs_yaffs2.a and b/code/sdk/middleware/utils/fs/yaffs2/brandy-native-js-leakcheck/libfs_yaffs2.a differ
index c3b361c..fd47414 100644 (file)
Binary files a/code/sdk/open_source/openharmony/foundation/aafwk/aafwk_lite/brandy-native-js-autoota/libams.a and b/code/sdk/open_source/openharmony/foundation/aafwk/aafwk_lite/brandy-native-js-autoota/libams.a differ
index c3b361c..fd47414 100644 (file)
Binary files a/code/sdk/open_source/openharmony/foundation/aafwk/aafwk_lite/brandy-native-js-autootacli/libams.a and b/code/sdk/open_source/openharmony/foundation/aafwk/aafwk_lite/brandy-native-js-autootacli/libams.a differ
index c3b361c..fd47414 100644 (file)
Binary files a/code/sdk/open_source/openharmony/foundation/aafwk/aafwk_lite/brandy-native-js-leakcheck/libams.a and b/code/sdk/open_source/openharmony/foundation/aafwk/aafwk_lite/brandy-native-js-leakcheck/libams.a differ
index 8fdfdbf..c090187 100644 (file)
Binary files a/code/sdk/open_source/openharmony/foundation/ace/ace_engine_lite/brandy-native-js-autoota/libace.a and b/code/sdk/open_source/openharmony/foundation/ace/ace_engine_lite/brandy-native-js-autoota/libace.a differ
index 8fdfdbf..c090187 100644 (file)
Binary files a/code/sdk/open_source/openharmony/foundation/ace/ace_engine_lite/brandy-native-js-autootacli/libace.a and b/code/sdk/open_source/openharmony/foundation/ace/ace_engine_lite/brandy-native-js-autootacli/libace.a differ
index 8fdfdbf..c090187 100644 (file)
Binary files a/code/sdk/open_source/openharmony/foundation/ace/ace_engine_lite/brandy-native-js-leakcheck/libace.a and b/code/sdk/open_source/openharmony/foundation/ace/ace_engine_lite/brandy-native-js-leakcheck/libace.a differ
index 686c9ea..5cf8f15 100644 (file)
Binary files a/code/sdk/open_source/openharmony/foundation/appexecfwk/appexecfwk_lite/brandy-native-js-autoota/libbms.a and b/code/sdk/open_source/openharmony/foundation/appexecfwk/appexecfwk_lite/brandy-native-js-autoota/libbms.a differ
index 686c9ea..5cf8f15 100644 (file)
Binary files a/code/sdk/open_source/openharmony/foundation/appexecfwk/appexecfwk_lite/brandy-native-js-autootacli/libbms.a and b/code/sdk/open_source/openharmony/foundation/appexecfwk/appexecfwk_lite/brandy-native-js-autootacli/libbms.a differ
index 686c9ea..5cf8f15 100644 (file)
Binary files a/code/sdk/open_source/openharmony/foundation/appexecfwk/appexecfwk_lite/brandy-native-js-leakcheck/libbms.a and b/code/sdk/open_source/openharmony/foundation/appexecfwk/appexecfwk_lite/brandy-native-js-leakcheck/libbms.a differ
index 73de5fe..75cadbf 100644 (file)
Binary files a/code/sdk/open_source/openharmony/third_party/jerryscript/brandy-native-js-autoota/libjerryscript.a and b/code/sdk/open_source/openharmony/third_party/jerryscript/brandy-native-js-autoota/libjerryscript.a differ
index 73de5fe..75cadbf 100644 (file)
Binary files a/code/sdk/open_source/openharmony/third_party/jerryscript/brandy-native-js-autootacli/libjerryscript.a and b/code/sdk/open_source/openharmony/third_party/jerryscript/brandy-native-js-autootacli/libjerryscript.a differ
index 73de5fe..75cadbf 100644 (file)
Binary files a/code/sdk/open_source/openharmony/third_party/jerryscript/brandy-native-js-leakcheck/libjerryscript.a and b/code/sdk/open_source/openharmony/third_party/jerryscript/brandy-native-js-leakcheck/libjerryscript.a differ
diff --git a/tools/scripts/merge_from_commit_diff.sh b/tools/scripts/merge_from_commit_diff.sh
new file mode 100644 (file)
index 0000000..f46da76
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# for commit in `git log sdk602patch0911...sdk602patch0626  --oneline --reverse |awk '{print $1}'`
+for commit in `git log sdk602patch0911...sdk602patch0626  --oneline --reverse |awk '{print $1}'`
+do
+count=`git show --pretty="format:" --name-only $commit |wc -l`
+if [ $count -gt 0 ]; then
+# echo $commit = $count
+git log -1 --oneline $commit
+# echo git cherry-pick $commit
+# git cherry-pick $commit
+# echo press ctrl-c to stop and any other key to continue..
+# read n
+fi
+
+done