Merge branch 'xts_origin' of codeup.aliyun.com:64191456b9581d62e8f81ac0/FD230 into...
authorSnickerSun <snickersun@163.com>
Mon, 29 Jan 2024 07:33:16 +0000 (15:33 +0800)
committerSnickerSun <snickersun@163.com>
Mon, 29 Jan 2024 07:33:16 +0000 (15:33 +0800)
34 files changed:
1  2 
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/blood/include/BloodCardView.h
code/sdk/application/wearable/fd230app/nativeui/blood/include/BloodNoteView.h
code/sdk/application/wearable/fd230app/nativeui/blood/include/BloodOxygenView.h
code/sdk/application/wearable/fd230app/nativeui/blood/include/BloodPresenter.h
code/sdk/application/wearable/fd230app/nativeui/blood/include/BloodTestView.h
code/sdk/application/wearable/fd230app/nativeui/blood/include/BloodWarnView.h
code/sdk/application/wearable/fd230app/nativeui/blood/src/BloodCardView.cpp
code/sdk/application/wearable/fd230app/nativeui/blood/src/BloodNoteView.cpp
code/sdk/application/wearable/fd230app/nativeui/blood/src/BloodOxygenView.cpp
code/sdk/application/wearable/fd230app/nativeui/blood/src/BloodPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/blood/src/BloodTestView.cpp
code/sdk/application/wearable/fd230app/nativeui/blood/src/BloodWarnView.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodBandoffView.h
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodBandoffView.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodOxygenView.cpp
code/sdk/application/wearable/fd230app/nativeui/main/include/MainViewSample.h
code/sdk/application/wearable/fd230app/nativeui/main/src/MainViewSample.cpp
code/sdk/application/wearable/fd230app/nativeui/system/include/SystemFactoryResetView.h
code/sdk/application/wearable/fd230app/nativeui/system/include/SystemModel.h
code/sdk/application/wearable/fd230app/nativeui/system/include/SystemPresenter.h
code/sdk/application/wearable/fd230app/nativeui/system/include/SystemView.h
code/sdk/application/wearable/fd230app/nativeui/system/src/SystemFactoryResetView.cpp
code/sdk/application/wearable/fd230app/nativeui/system/src/SystemLanguageView.cpp
code/sdk/application/wearable/fd230app/nativeui/system/src/SystemModel.cpp
code/sdk/application/wearable/fd230app/nativeui/system/src/SystemPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp
code/sdk/interim_binary/brandy/libs/gpu/evb_recovery/libgpu.a
code/sdk/open_source/openharmony/base/startup/syspara_lite/src/hal_sys_param.c

index fe697a0,0000000..bdadde9
mode 100644,000000..100644
--- /dev/null
@@@ -1,349 -1,0 +1,349 @@@
-     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/blood/src/BloodView.cpp
 +set(COMPONENT_NAME "fd230launcher")
 +set(MODULE_NAME "app")
 +set(AUTO_DEF_FILE_ID TRUE)
 +set(UI_SAMPLE_ROOT ${ROOT_DIR}/middleware/services/gui/uikit/sample/uitest)
 +
 +set(PUBLIC_HEADER
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativelauncher/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/screennotify/include
 +
 +)
 +
 +set(PRIVATE_HEADER
 +    ${ROOT_DIR}/open_source/openharmony/foundation/ace/ace_engine_lite/interfaces/base
 +    ${ROOT_DIR}/open_source/openharmony/third_party/cJSON
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/clock/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/rebootdevice/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heartrate/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/callerlog/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/makephone/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/rtcservice/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/connectnewphone/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarmclockmanage/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarmclocktimerconfig/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/offlinevoice/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/settings/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/key/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/applist/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phoneservice/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/screensetting/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uiservice/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uisample/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/UIInitializer/
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/InitComponent/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uisample/uitest/framework/include
 +    ${UI_SAMPLE_ROOT}/components
 +    ${CMAKE_CURRENT_SOURCE_DIR}/../service/smart_voice/smart_voice_service/interfaces/innerkits/native_c/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/../service/smart_voice/voice_engine_hal/interfaces/innerkits/native_c/include
 +    ${CMAKE_CURRENT_SOURCE_DIR}/../ohos_deps
 +    ${CMAKE_CURRENT_SOURCE_DIR}/../../battery
 +    ${CMAKE_CURRENT_SOURCE_DIR}/../../../drivers/drivers/driver/rtc_unified
 +    ${CMAKE_CURRENT_SOURCE_DIR}/../../../kernel/liteos/liteos_v207.1.0/Huawei_LiteOS/compat/linux/include/uapi/linux/
 +   
 +    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits
 +    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
 +    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/ui/frameworks
 +    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include/service
 +    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
 +    ${ROOT_DIR}/middleware/services/gui/lvgl/src/hal
 +    
 +    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits
 +    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
 +    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits
 +    ${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits
 +    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/kits
 +    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/kits/components
 +    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/kits/events
 +    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks/
 +
 +
 +    ${ROOT_DIR}/open_source/openharmony/foundation/graphic/ui/interfaces/kits/events
 +    ${ROOT_DIR}/open_source/openharmony/foundation/graphic/ui/interfaces/kits
 +    ${ROOT_DIR}/open_source/openharmony/foundation/graphic/utils/interfaces/kits
 +    ${ROOT_DIR}/open_source/openharmony/foundation/graphic/utils/interfaces/kits/gfx_utils
 +    ${ROOT_DIR}/open_source/openharmony/foundation/graphic/utils/interfaces/innerkits
 +    ${ROOT_DIR}/open_source/openharmony/foundation/graphic/ui/interfaces/innerkits
 +    ${ROOT_DIR}/open_source/openharmony/foundation/graphic/ui/frameworks
 +    ${ROOT_DIR}/open_source/openharmony/foundation/graphic/surface/interfaces/kits
 +    ${ROOT_DIR}/open_source/openharmony/foundation/graphic/ui/interfaces/kits/components
 +    ${ROOT_DIR}/open_source/openharmony/foundation/multimedia/player/interfaces/kits/
 +
 +    ${ROOT_DIR}/include/middleware/services/bts/common
 +    ${ROOT_DIR}/include/middleware/services/bts/ble
 +    ${ROOT_DIR}/include/middleware/services/bts/br
 +
 +    ${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include
 +    ${ROOT_DIR}/open_source/openharmony/foundation/distributedschedule/samgr_lite/interfaces/kits/samgr
 +
 +
 +)
 +
 +set(SOURCES
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativelauncher/src/NativeLauncher.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/MainViewSample.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/MainPresenterSample.cpp
 +
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/ModelListenerSample.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/PresenterTask.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/HealthModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/PullUpDownView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/applist/src/AppItemView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/applist/src/ApplistAdapter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/applist/src/ApplistModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/applist/src/ApplistPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/applist/src/ApplistView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/applist/src/ApplistCardView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/clock/src/MainClockView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/src/BloodOxygenView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/src/BloodBandoffView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/src/BloodOxygenPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bloodoxygen/src/BloodOxygenModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceCaseListAdapter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceListView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothHeadsetEvent.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/MainBluetoothView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothEarPhoneView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/TipsConnFailMessageView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/TipsFailMessageView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/TipsSuccMessageView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothEarListView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothOptionsView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothReconnectView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothItemView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothCaseListAdapter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/IndoorWalkView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/IndoorWalkPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/IndoorWalkModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/IndoorWalkPreparedView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/IndoorWalkMotionView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/MotionPageFirst.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/MotionPageSecond.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/MotionPageThird.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/MotionPageFourth.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/MotionPageFifth.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/CustomizationView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/indoorwalk/src/IndoorWalkEndView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/connectnewphone/src/ConnectPhoneView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/connectnewphone/src/ConnectSelectView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/connectnewphone/src/ConnectOpenView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/connectnewphone/src/ConnectPhonePresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/rebootdevice/src/RebootView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/rebootdevice/src/RebootPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/rebootdevice/src/RebootModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/rebootdevice/src/RebootDeviceView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/rebootdevice/src/ShutdownDeviceView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/callerlog/src/CallerLogView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/callerlog/src/CallerLogPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/callerlog/src/CallerLogModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/callerlog/src/CallerItemView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/makephone/src/CallerDisplayView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/makephone/src/WaitingHintsView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/makephone/src/CallingView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/makephone/src/MainCallingPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/makephone/src/DialingScreenView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/makephone/src/MainCallingView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/VolumeSettingView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/VolumeSettingPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/BluetoothView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersCaseListAdapter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayerListDelSongView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayerListitemView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/MainActivityView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityWeekView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heartrate/src/HeartRateView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heartrate/src/HeartModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmClockModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/MainAlarmView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmConfigView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmSetTimeView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmSetWeekView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmJudgeView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmPopUpView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmRingView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmCloseRingView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmNewTimeView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmPopUpPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarm/src/AlarmMaxClock.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempJoinStudy.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempMainView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempMeasure.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempExitInter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempPromptWear.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempClickMea.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempRemindWear.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempMeaProcess.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempInitInter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempWarn.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempLittleTip.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempExitPrompt.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempStudyAbout.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempContinueWarn.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/temperature/src/TempReport.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/settings/src/SettingAdapter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/settings/src/SettingPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/settings/src/SettingView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/settings/src/SettingModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/settings/src/SettingItemView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/key/src/KeyInputListener.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/screennotify/src/ui_screennotify.cpp
-     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/system/src/SystemFactoryResetPresenter.cpp
++    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/blood/src/BloodCardView.cpp
 +    
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/dial/src/Digital_clockView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/dial/src/DialView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/dial/src/DialPresenter.cpp
 +
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingView.cpp
 +
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/MainWeatherPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/MainWeatherView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherReportPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherReportView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/FutureWeatherPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/FutureWeatherView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/GetWeatherDataErrorPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/GetWeatherDataErrorView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherControlView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherView.cpp
 +
 +    #系统
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/system/src/SystemPresenter.cpp                       
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/system/src/SystemView.cpp                                         
++    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/system/src/SystemModel.cpp                                                
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/system/src/SystemAboutTheWatchView.cpp                     
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/system/src/SystemSuperviseView.cpp             
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/system/src/SystemLanguageView.cpp     
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/system/src/SystemFactoryResetView.cpp
 +
 +    #声音与震动
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationPresenter.cpp 
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationView.cpp      
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SystemVolumePresenter.cpp           
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SystemVolumeView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/CallVolumePresenter.cpp           
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/CallVolumeView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/MediaVolumePresenter.cpp          
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/MediaVolumeView.cpp            
 +
 +    #显示与亮度
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/DisplayBrightnessModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/DisplayBrightnessPresent.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/DisplayBrightnessView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/BrightnessControlPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/BrightnessControlView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/ScreenDurationPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/ScreenDurationView.cpp
 +
 +    #辅助功能
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/secondaryfunction/src/SecondaryFunctionPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/secondaryfunction/src/SecondaryFunctionView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/secondaryfunction/src/FastTrainingAttentionPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/secondaryfunction/src/FastTrainingAttentionView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/secondaryfunction/src/FastTrainingPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/secondaryfunction/src/FastTrainingView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/secondaryfunction/src/QuickAccessPresenter.cpp            
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/secondaryfunction/src/QuickAccessView.cpp    
 +
 +    #指南针
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassControlView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassCalibrationView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/MainCompassView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/MainCompassPresenter.cpp
 +
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/message/src/MessageAdapter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/message/src/MessageItemView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/message/src/MessageModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/message/src/MessagePresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/message/src/MessageView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/message/src/MessageCardView.cpp
 +
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phoneservice/src/PhoneService.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/phoneservice/src/PhoneAudio.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/offlinevoice/src/VocassistModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/offlinevoice/src/VocassistPresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/offlinevoice/src/VocassistView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/offlinevoice/src/MainVocassistView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/screensetting/src/ScreenModels.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarmclockmanage/src/AlarmClockManage.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/alarmclocktimerconfig/src/AlarmClockTimerConfig.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/rtcservice/src/RtcService.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uiservice/src/ui_service.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uisample/src/UISampleView.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uisample/src/UISamplePresenter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uisample/src/UISampleModel.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uisample/uitest/framework/src/test_case_list_adapter.cpp
 +    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/uisample/uitest/framework/src/ui_test_group.cpp
 + 
 +    ${UI_SAMPLE_ROOT}/components/ui_test_tiger/tiger_view.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_tiger/ui_test_tiger.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_running_ball/ui_test_running_ball.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_breath/ui_test_breath.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_card_switch/ui_test_card_switch.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_countdown/ui_test_countdown.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_list_fps/image_text_adapter.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_list_fps/ui_test_list_fps.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_message/ui_test_message.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_cube_rotate/cube_rotate_view.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_cube_rotate/ui_test_cube_rotate.cpp
 +    ${UI_SAMPLE_ROOT}/components/ui_test_video_play/ui_test_video_play.cpp
 +      # ${UI_SAMPLE_ROOT}/components/ui_test_video_play/media_video_play.cpp
 +)
 +
 +set(COMPONENT_PUBLIC_CCFLAGS
 +)
 +
 +set(COMPONENT_CCFLAGS
 +    -std=c++11
 +    -Wno-error
 +    -Wno-unused-parameter
 +    -fno-exceptions
 +    -fno-unwind-tables
 +    -fno-asynchronous-unwind-tables
 +    -Wno-undef
 +    -Wno-bitwise-op-parentheses
 +    -Wno-shift-op-parentheses
 +    -nostdlibinc
 +    -nostdinc
 +    -nostdlib
 +    -Wno-c++11-narrowing
 +    -Wno-error=unused-function
 +)
 +
 +set(WHOLE_LINK
 +    true
 +)
 +
 +set(MAIN_COMPONENT
 +    false
 +)
 +
 +set(PUBLIC_DEFINES
 +    SUPPORT_NATIVE_UI
 +)
 +
 +set(PRIVATE_DEFINES
 +)
 +
 +build_component()
index 8ef146e,0000000..26c098c
mode 100644,000000..100644
--- /dev/null
@@@ -1,86 -1,0 +1,86 @@@
-     VIEW_DIAL,                   // 切换表盘
 +
 +/*
 + * Copyright (c) 2020-2021 CompanyNameMagicTag.
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +#ifndef APP_VIEW_IDS_H
 +#define APP_VIEW_IDS_H
 +
 +#include <cstdint>
 +
 +/*
 + * 基础应用的view id,与MVP的V一一对应
 + * 枚举命名要求:参考View名字,名字尽量简短
 + */
 +typedef enum : uint16_t
 +{
 +    VIEW_INVALID = 0, // 无效视图
 +    /* ----------------------------- 每一个id对应一个slice ----------------------------- */
 +    VIEW_MAIN = 1,               // 主界面
 +    VIEW_SETTING,                // 设置
 +    VIEW_APPLIST,                // App应用
 +    VIEW_MAIN_ALARM,             // 闹钟
 +    VIEW_ALARM_POP_UP,           // 闹铃界面
 +    VIEW_BLUETOOTH_EARPHONE,     // 连接蓝牙耳机界面
 +    VIEW_CALLER_LOG,             // 通话记录界面
 +    VIEW_INCOMING_CALL,          // 来电界面
 +    VIEW_BLOODOXY,               // 血氧饱和度界面
 +    VIEW_COMPASS,                // 指南针界面
 +    VIEW_CONNECT_PHONE,          // 连接手机界面
 +    VIEW_INDOORWALK,             // 室内步行
 +    VIEW_SHUTDOWN_OR_REBOOT,     // 关机或重启界面
-     VIEW_SYSTEM_FACTORY_RESET,   // 系统:恢复出厂设置
 +    VIEW_WEATHER,                // 天气
 +    VIEW_WEATHER_REPORT,         // 气象报告
 +    VIEW_FUTURE_WEATHER,         // 未来天气
 +    VIEW_GET_WEATHER_DATA_ERROR, // 获取天气数据失败
 +    VIEW_SYSTEM,                 // 系统
 +    VIEW_SOUND_VIBRATION,        // 声音与震动
 +    VIEW_SYSTEM_VOLUME,          // 系统音量
 +    VIEW_CALL_VOLUME,            // 通话音量
 +    VIEW_MEDIA_VOLUME,           // 媒体音量
 +    VIEW_DISPLAY_BRIGHTNESS,     // 屏幕与亮度
 +    VIEW_BRIGHTNESS_CONTROL,     // 亮度调节
 +    VIEW_SCREEN_DURATION,        // 亮屏时长
 +    VIEW_SECONDARY_FUNCTION,     // 辅助功能
 +    VIEW_QUICK_ACCESS,           // 快速访问
 +    VIEW_FAST_TRAINING,          // 快速训练
 +    VIEW_FAST_TRAINING_ATTENTION,// 快速训练项目选择超出提示
 +    /* ---------------------------------- 测试界面 ---------------------------------- */
++    VIEW_DIAL,    // 切换表盘
 +    VIEW_MESSAGE, // 信息通知
++    VIEW_BLOODO,  // 血氧监测
 +    /* -------------------------------------------------------------------------- */
 +    VIEW_MAIN_TEMP,     // 体温界面(暂时不用)
 +    VIEW_OFFLINEVOICE,  // 语音助手界面(暂时不用)
 +    VIEW_MAIN_ACTIVITY, // 记录步数界面(暂时不用)
 +    VIEW_UISAMPLE,      // 示例(暂时不用)
 +    /* -------------------------------------------------------------------------- */
 +    VIEW_MAX_INTER_APP,       // 在此之前添加native应用ID.
 +    VIEW_EXTERN_APP = 0xFFFE, // 三方应用
 +    VIEW_INVALIDE_APP = 0xFFFF,
 +} AppViewId;
 +
 +/*
 + * Slice页面优先级,越小优先级越高
 + */
 +typedef enum : uint16_t
 +{
 +    PRIO_0 = 0,
 +    PRIO_1,
 +    PRIO_2,
 +    PRIO_3,
 +    PRIO_4
 +} AppPriority;
 +
 +#endif
index 2b334b6,0000000..cc32501
mode 100644,000000..100644
--- /dev/null
@@@ -1,79 -1,0 +1,80 @@@
-         void InitDialSlice(void);
 +
 +/***
 + * @Author: Caisking 3449750381@qq.com
 + * @Date: 2023-12-13 19:33:14
 + * @LastEditors: Caisking 3449750381@qq.com
 + * @LastEditTime: 2024-01-22 16:32:42
 + * @FilePath: /FD230/code/sdk/application/wearable/nativeapp/nativelauncher/include/NativeLauncher.h
 + * @Description:
 + * @Description:
 + * @
 + * @Copyright (c) 2024 by Caisking , All Rights Reserved.
 + * @Copyright (c) 2024 by Caisking , All Rights Reserved.
 + */
 +
 +#ifndef NATIVE_LAUNCHER_H
 +#define NATIVE_LAUNCHER_H
 +#include "AppViewIDs.h"
 +
 +namespace OHOS
 +{
 +    class NativeLauncher
 +    {
 +    public:
 +        static NativeLauncher &GetInstance(void);
 +        void InitNativeLauncher(void);
 +        void InitMainSampleSlice(void);
 +        void InitSettingSlice(void);
 +        void InitApplistSlice(void);
 +        void InitMainAlarmSlice(void);
 +        void InitAlarmPopUpSlice(void);
 +        void InitActivitySlice(void);
 +        void InitWeekStepSlice(void);
 +        void InitBluetoothSlice(void);
 +        void InitWifiView(void);
 +        void InitMainBloodOxyView(void);
 +        void InitMainCallerLogView(void);
 +        void InitMainMakePhoneView(void);
 +        void InitCompassSlice(void);
 +        void InitOfflineVoice(void);
 +        void InitConnectPhoneSlice(void);
 +        void InitMainTempSlice(void);
 +        void InitIndoorWalkSlice(void);
 +        void InitRebootSlice(void);
 +        void InitUISampleSlice(void);
-         void InitSystemFactoryResetSlice(void);
 +        /* ----------------------------------- 天气 ----------------------------------- */
 +        void InitWeatherSlice(void);
 +        void InitWeatherReportSlice(void);
 +        void InitFutureWeatherSlice(void);
 +        void InitGetWeatherDataErrorSlice(void);
 +        /* -------------------------------------------------------------------------- */
 +        void InitSystemSlice(void);
 +        /* -------------------------------------------------------------------------- */
 +        void InitSoundAndVibrationSlice(void);
 +        void InitSystemVolumeSlice(void);
 +        void InitCallVolumeSlice(void);
 +        void InitMediaVolumeSlice(void);
 +        void InitMessageSlice(void);
 +        /* -------------------------------------------------------------------------- */
 +        void InitUIDisplayBrightnessSlice(void);
 +        void InitBrightnessControlSlice(void);
 +        void InitScreenDurationSlice(void);
++        /* --------------------------------测试界面------------------------------------ */
++        void InitDialSlice(void);
++        void InitBloodSlice(void);
 +        /* -------------------------------------------------------------------------- */
 +        void InitSecondaryFunction(void);
 +        void InitQuickAccessSlice(void);  
 +        void InitFastTrainingSlice(void);
 +        void InitFastTrainingAttentionSlice(void);
 +
 +    private:
 +        void InitAllNativeSlices(void);
 +
 +        NativeLauncher();
 +        NativeLauncher(const NativeLauncher &);
 +        NativeLauncher &operator=(const NativeLauncher &);
 +        ~NativeLauncher();
 +    };
 +}
 +#endif // NATIVE_LAUNCHER_H
index 06c4d1b,0000000..8f3f0b2
mode 100644,000000..100644
--- /dev/null
@@@ -1,271 -1,0 +1,338 @@@
-     /* -------------------------------- 血氧倒计时动画图片 ------------------------------- */
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_0 = APP_RES_PATH "/COUNTDOWN_IMAGE_01.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_1 = APP_RES_PATH "/COUNTDOWN_IMAGE_02.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_2 = APP_RES_PATH "/COUNTDOWN_IMAGE_03.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_3 = APP_RES_PATH "/COUNTDOWN_IMAGE_04.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_4 = APP_RES_PATH "/COUNTDOWN_IMAGE_05.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_5 = APP_RES_PATH "/COUNTDOWN_IMAGE_06.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_6 = APP_RES_PATH "/COUNTDOWN_IMAGE_07.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_7 = APP_RES_PATH "/COUNTDOWN_IMAGE_08.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_8 = APP_RES_PATH "/COUNTDOWN_IMAGE_09.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_9 = APP_RES_PATH "/COUNTDOWN_IMAGE_10.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_10 = APP_RES_PATH "/COUNTDOWN_IMAGE_11.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_11 = APP_RES_PATH "/COUNTDOWN_IMAGE_12.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_12 = APP_RES_PATH "/COUNTDOWN_IMAGE_13.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_13 = APP_RES_PATH "/COUNTDOWN_IMAGE_14.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_14 = APP_RES_PATH "/COUNTDOWN_IMAGE_15.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_15 = APP_RES_PATH "/COUNTDOWN_IMAGE_16.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_16 = APP_RES_PATH "/COUNTDOWN_IMAGE_17.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_17 = APP_RES_PATH "/COUNTDOWN_IMAGE_18.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_18 = APP_RES_PATH "/COUNTDOWN_IMAGE_19.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_19 = APP_RES_PATH "/COUNTDOWN_IMAGE_20.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_20 = APP_RES_PATH "/COUNTDOWN_IMAGE_21.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_21 = APP_RES_PATH "/COUNTDOWN_IMAGE_22.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_22 = APP_RES_PATH "/COUNTDOWN_IMAGE_23.bin";
-     static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_23 = APP_RES_PATH "/COUNTDOWN_IMAGE_24.bin";
 +/*
 + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
 + * Description: UiConfig for application resource
 + * Author:
 + * Create: 2021-12-03
 + */
 +
 +#ifndef UI_CONFIG_H
 +#define UI_CONFIG_H
 +
 +#include <cstdint>
 +#include "ohos_types.h"
 +#include "graphic_config.h"
 +
 +namespace OHOS
 +{
 +#ifndef UNUSED
 +#define UNUSED(x) ((void)(x))
 +#endif
 +
 +#define LA_HORIZONTAL_RESOLUTION 400 // watch width
 +#define LA_VERTICAL_RESOLUTION 400   // watch height
 +#define NORMAL_BUTTON_WIDTH 100      // normal button width
 +#define NORMAL_BUTTON_HEIGHT 50      // normal button height
 +#define NORMAL_MARGIN 5              // normal margin
 +#define DIAL_SQUARE 250              // watch plate sauqre
 +#define SETTING_ITEM_HEIGHT 100      // setting item height
 +#define UN_OPACITY 255               // UN_OPACITY
 +
 +#define MILLESECOND 1
 +#define SECOND 1000          // 1s 1000ms
 +#define MINUTE (60 * SECOND) // 1min 60s
 +#define HOUR (60 * MINUTE)   // 1hour 60min
 +
 +#define FONT_COMMON 20 // 20px
 +#define X_DRAG_OFFSET 20
 +#define DOUBLES 2
 +
 +#define APP_RES_PATH "/user/res"
 +#define APP_MUSIC_PATH "/user/music"
 +#define APP_VIDEO_PATH "/user/video"
 +
 +    static constexpr const char *CARD_CONFIG_PATH = "/user/cardconfig.bin";
 +    static constexpr const char *CLOCK_IAMGES = APP_RES_PATH "/clock/clock.bin";
 +    static constexpr const char *PLAYER_IAMGES = APP_RES_PATH "/player/player.bin";
 +    static constexpr const char *COMPASS_IAMGES = APP_RES_PATH "/compass/compass.bin";
 +    static constexpr const char *DROPDOWN_IAMGES = APP_RES_PATH "/dropdown/dropdown.bin";
 +    static constexpr const char *HEART_IAMGES = APP_RES_PATH "/heart/heart.bin";
 +    /* ----------------------------------- 打电话图片 ---------------------------------- */
 +    static constexpr const char *PNG_AGREEING_IMAGE_PATH = APP_RES_PATH "/AGREEING.bin";
 +    static constexpr const char *PNG_DISSGREE_IMAGE_PATH = APP_RES_PATH "/DISSGREE.bin";
 +    static constexpr const char *PNG_BLUETOOTH_HINTS_PATH = APP_RES_PATH "/BLUETOOTH_HINTS.bin";
 +    static constexpr const char *PNG_MICROPHONE_OPEN_IMAGE_PATH = APP_RES_PATH "/MICRO_PHONE_OPEN.bin";
 +    static constexpr const char *PNG_MICROPHONE_CLOSE_IMAGE_PATH = APP_RES_PATH "/MICRO_PHONE_CLOSE.bin";
 +    static constexpr const char *PNG_HANDUP_IMAGE_PATH = APP_RES_PATH "/HANDUP.bin";
 +    static constexpr const char *PNG_ANSWER_TMAGE_PATH = APP_RES_PATH "/ANSWER_PHONE.bin";
 +    static constexpr const char *PNG_CALLING_TMAGE_PATH = APP_RES_PATH "/CALLING_PHONE.bin";
 +    static constexpr const char *PNG_CALLER_TMAGE_PATH = APP_RES_PATH "/CALLER_LOG_IMAGE.bin";
 +    static constexpr const char *PNG_NO_CALLER_LOG_IMAGE = APP_RES_PATH "/NO_CALLER_LOG_IMAGE.bin";
 +    static constexpr const char *PNG_SOUNDBUTTON2 = APP_RES_PATH "/SOUND_IMAGE.bin";
 +    /* ---------------------------------- 血氧中图片 --------------------------------- */
 +    static constexpr const char *PNG_BLOODOXYGEN_IMAGE_PATH = APP_RES_PATH "/BLOODOXYGEN_VIEW.bin";
 +    static constexpr const char *PNG_PULLBUTTON_FACE_IMAGE = APP_RES_PATH "/BLOOD_FLOW_IMAGE_01.bin";
 +    static constexpr const char *PNG_BLOOD_ICON_ENTER = APP_RES_PATH "/BLOOD_ICON_ENTER.bin";
 +    static constexpr const char *PNG_PROGRESS_BAR_TMAGE = APP_RES_PATH "/PROGRESS_BAR_TMAGE.bin";
 +    /* --------------------------------- 血氧动画图片 --------------------------------- */
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_0 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_02.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_1 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_03.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_2 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_04.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_3 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_05.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_4 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_06.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_5 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_07.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_6 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_08.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_7 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_09.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_8 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_10.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_9 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_11.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_10 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_12.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_11 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_13.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_12 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_14.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_13 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_15.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_14 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_16.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_15 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_17.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_16 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_18.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_17 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_19.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_18 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_20.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_19 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_21.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_20 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_22.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_21 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_23.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_22 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_24.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_23 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_25.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_24 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_26.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_25 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_27.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_26 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_28.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_27 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_29.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_28 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_30.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_29 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_31.bin";
 +    static constexpr const char *PNG_BLOOD_FLOW_IMAGE_30 = APP_RES_PATH "/BLOOD_FLOW_IMAGE_32.bin";
++    /* -------------------------------- 血氧动画 ------------------------------------------------- */
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_0 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_1.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_1 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_2.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_2 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_3.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_3 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_4.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_4 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_5.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_5 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_6.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_6 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_7.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_7 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_8.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_8 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_9.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_9 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_10.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_10 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_11.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_11 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_12.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_12 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_13.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_13 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_14.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_14 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_15.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_15 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_16.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_16 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_17.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_17 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_18.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_18 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_19.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_19 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_20.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_20 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_21.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_21 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_22.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_22 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_23.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_23 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_24.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_24 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_25.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_25 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_26.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_26 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_27.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_27 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_28.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_28 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_29.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_29 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_30.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_30 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_31.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_31 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_32.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_32 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_33.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_33 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_34.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_34 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_35.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_35 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_36.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_36 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_37.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_37 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_38.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_38 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_39.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_39 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_40.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_40 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_41.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_41 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_42.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_42 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_43.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_43 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_44.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_44 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_45.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_45 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_46.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_46 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_47.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_47 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_48.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_48 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_49.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_49 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_50.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_50 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_51.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_51 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_52.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_52 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_53.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_53 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_54.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_54 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_55.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_55 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_56.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_56 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_57.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_57 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_58.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_58 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_59.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_59 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_60.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_60 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_61.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_61 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_62.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_62 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_63.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_63 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_64.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_64 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_65.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_65 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_66.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_66 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_67.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_67 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_68.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_68 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_69.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_69 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_70.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_70 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_71.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_71 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_72.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_72 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_73.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_73 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_74.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_74 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_75.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_75 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_76.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_76 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_77.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_77 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_78.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_78 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_79.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_79 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_80.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_80 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_81.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_81 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_82.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_82 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_83.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_83 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_84.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_84 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_85.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_85 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_86.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_86 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_87.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_87 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_88.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_88 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_89.bin";
++    static constexpr const char *PNG_COUNTDOWN_TIME_IMAGE_89 = APP_RES_PATH "/Blood/SPO2H/BLOOD_IMAGE_90.bin";
++
 +    /* ---------------------------------- 闹钟图片 ---------------------------------- */
 +    static constexpr const char *ALARM_ADD_BUTTON_PATH = APP_RES_PATH "/BLUE_ADD.bin";
 +    static constexpr const char *ALARM_CLOCK_CLOSE_ADD_PATH = APP_RES_PATH "/CLOSE_RING_CLOCK.bin";
 +    static constexpr const char *ALARM_CLOCK_ADD_PATH = APP_RES_PATH "/POP_UP_CLOCK.bin";
 +    static constexpr const char *ALARM_CLOCK_POP_ADD_PATH = APP_RES_PATH "/RING_CLOCK.bin";
 +    static constexpr const char *ALARM_DELETE_ADD_PATH = APP_RES_PATH "/DELETE.bin";
 +    static constexpr const char *ALARM_TRUE_ADD_PATH = APP_RES_PATH "/TRUE_ADD.bin";
 +    /* ---------------------------------- 心率动画图片 ---------------------------------- */
 +    static constexpr const char *PNG_A004_070_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_01.bin";
 +    static constexpr const char *PNG_A004_071_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_02.bin";
 +    static constexpr const char *PNG_A004_072_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_03.bin";
 +    static constexpr const char *PNG_A004_073_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_04.bin";
 +    static constexpr const char *PNG_A004_074_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_05.bin";
 +    static constexpr const char *PNG_A004_075_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_06.bin";
 +    static constexpr const char *PNG_A004_076_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_07.bin";
 +    static constexpr const char *PNG_A004_077_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_08.bin";
 +    static constexpr const char *PNG_A004_078_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_09.bin";
 +    static constexpr const char *PNG_A004_079_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_10.bin";
 +    static constexpr const char *PNG_A004_080_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_11.bin";
 +    static constexpr const char *PNG_A004_081_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_12.bin";
 +    static constexpr const char *PNG_A004_082_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_13.bin";
 +    static constexpr const char *PNG_A004_083_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_14.bin";
 +    static constexpr const char *PNG_A004_084_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_15.bin";
 +    static constexpr const char *PNG_A004_085_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_16.bin";
 +    static constexpr const char *PNG_A004_086_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_17.bin";
 +    static constexpr const char *PNG_A004_087_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_18.bin";
 +    static constexpr const char *PNG_A004_088_IMAGE_PATH = APP_RES_PATH "/HEARTBEAT_IMAGE_19.bin";
 +    /* -------------------------------- 蓝牙搜索的动画图片 ------------------------------- */
 +    static constexpr const char *PNG_A019_080_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_01.bin";
 +    static constexpr const char *PNG_A019_081_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_02.bin";
 +    static constexpr const char *PNG_A019_082_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_03.bin";
 +    static constexpr const char *PNG_A019_083_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_04.bin";
 +    static constexpr const char *PNG_A019_084_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_05.bin";
 +    static constexpr const char *PNG_A019_085_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_06.bin";
 +    static constexpr const char *PNG_A019_086_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_07.bin";
 +    static constexpr const char *PNG_A019_087_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_08.bin";
 +    static constexpr const char *PNG_A019_088_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_09.bin";
 +    static constexpr const char *PNG_A019_089_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_10.bin";
 +    static constexpr const char *PNG_A019_090_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_11.bin";
 +    static constexpr const char *PNG_A019_091_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_12.bin";
 +    static constexpr const char *PNG_A019_092_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_13.bin";
 +    static constexpr const char *PNG_A019_093_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_14.bin";
 +    static constexpr const char *PNG_A019_094_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_15.bin";
 +    static constexpr const char *PNG_A019_095_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_16.bin";
 +    static constexpr const char *PNG_BLUETOOTHEAR = APP_RES_PATH "/BLUETOOTHEAR.bin";
 +    /* --------------------------------- AppList -------------------------------- */
 +    static constexpr const char *PNG_APPLIST_ALARM_IMAGE = APP_RES_PATH "/APPLIST_ALARM.bin";           // 闹钟
 +    static constexpr const char *PNG_APPLIST_SPO2_IMAGE = APP_RES_PATH "/APPLIST_SPO2.bin";             // 血氧
 +    static constexpr const char *PNG_APPLIST_SETTING_IMAGE = APP_RES_PATH "/APPLIST_SETTING.bin";       // 设置
 +    static constexpr const char *PNG_APPLIST_CALLER_IMAGE = APP_RES_PATH "/APPLIST_CALLER_IMAGE.bin";   // 打电话
 +    static constexpr const char *PNG_APPLIST_COMPASS_IMAGE = APP_RES_PATH "/APPLIST_COMPASS_IMAGE.bin"; // 指南针
 +    static constexpr const char *PNG_APPLIST_WEATHER_IMAGE = APP_RES_PATH "/APPLIST_WEATHER_IMAGE.bin"; // 天气
 +    /* ---------------------------------- 快速训练 ---------------------------------- */
 +    static constexpr const char *PNG_TRAING_BOUTTONMORE_IMAGE = APP_RES_PATH "/Training/More.bin";
 +    static constexpr const char *PNG_TRAING_BUTTONGRONG_IMAGE = APP_RES_PATH "/Training/Bouttonground.bin";
 +    static constexpr const char *PNG_TRAING_BUTTONGRONG2_IMAGE = APP_RES_PATH "/Training/Buttonground2.bin";
 +    static constexpr const char *PNG_TRAING_RIDINGBIG_IMAGE = APP_RES_PATH "/Training/riding-big2.bin";
 +    static constexpr const char *PNG_TRAING_RUNNINGBIG_IMAGE = APP_RES_PATH "/Training/running-big.bin";
 +    static constexpr const char *PNG_TRAING_WALKINGBIG_IMAGE = APP_RES_PATH "/Training/walking-big.bin";
 +    /* ---------------------------------- 室内步行 ---------------------------------- */
 +    static constexpr const char *PNG_APPLIST_WALK_IMAGE = APP_RES_PATH "/APPLIST_WALK.bin"; // Applist图标
 +    static constexpr const char *PNG_WALK_BACK_GROUND = APP_RES_PATH "/WALK_BACK_GROUND.bin";
 +    static constexpr const char *PNG_WALK_IMAGE = APP_RES_PATH "/INDOORWALK.bin";
 +    static constexpr const char *PNG_AEROBIC_IMAGE = APP_RES_PATH "/AEROBIC.bin";
 +    static constexpr const char *PNG_ANAEROBIC_IMAGE = APP_RES_PATH "/ANAEROBIC.bin";
 +    static constexpr const char *PNG_OPTIONS_BOX1_IMAGE = APP_RES_PATH "/OPTIONS_BOX1.bin";
 +    static constexpr const char *PNG_OPTIONS_BOX2_IMAGE = APP_RES_PATH "/OPTIONS_BOX2.bin";
 +    static constexpr const char *PNG_OPTIONS_BOX3_IMAGE = APP_RES_PATH "/OPTIONS_BOX3.bin";
 +    static constexpr const char *PNG_OPTIONS_BOX4_IMAGE = APP_RES_PATH "/OPTIONS_BOX4.bin";
 +    static constexpr const char *PNG_WALK_TIME_IMAGE = APP_RES_PATH "/TIME_IMAGE.bin";
 +    static constexpr const char *PNG_WALK_DISTANCES_IMAGE = APP_RES_PATH "/DISTANCES_IMAGE.bin";
 +    static constexpr const char *PNG_WALK_HEART_IMAGE = APP_RES_PATH "/HEART_IMAGE.bin";
 +    static constexpr const char *PNG_WALK_SPEED_IMAGE = APP_RES_PATH "/SPEED_IMAGE.bin";
 +    static constexpr const char *PNG_WALK_STEPS_IMAGE = APP_RES_PATH "/STEPS_IMAGE.bin";
 +    /* ----------------------------------- 设置 ----------------------------------- */
 +    static constexpr const char *PNG_SETTINGS_DISPLAY_BRIGHTNESS = APP_RES_PATH "/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin"; // 显示与亮度
 +    static constexpr const char *PNG_SETTINGS_BLUETOOTH = APP_RES_PATH "/settings/SETTINGS_BLUETOOTH.bin";                   // 蓝牙
 +    static constexpr const char *PNG_SETTINGS_SOUND_VIBRATION = APP_RES_PATH "/settings/SETTINGS_SOUND_VIBRATION.bin";       // 声音与震动
 +    static constexpr const char *PNG_SETTINGS_SECONDARY_FUNCTION = APP_RES_PATH "/settings/SETTINGS_QUICK_ACCESS.bin";       // 辅助功能
 +    static constexpr const char *PNG_SETTINGS_SYSTEM = APP_RES_PATH "/settings/SETTINGS_SYSTEM.bin";                         // 系统
 +    static constexpr const char *PNG_SETTINGS_SETTINGS_POWER_CONTROL = APP_RES_PATH "/settings/SETTINGS_POWER_CONTROL.bin";  // 关机和重启
 +    /* ---------------------------------- 消息中心 ---------------------------------- */
 +    static constexpr const char *PNG_Message_System = APP_RES_PATH "/message/system-icon.bin"; // 系统消息
 +    static constexpr const char *PNG_Message_Note = APP_RES_PATH "/message/message-icon.bin";  // 短信
 +    static constexpr const char *PNG_Message_Wechat = APP_RES_PATH "/message/WeChat-icon.bin"; // 微信消息
 +    static constexpr const char *PNG_Message_QQ = APP_RES_PATH "/message/QQ-icon.bin";         // QQ消息
 +    /* ---------------------------------- 通用图片 ---------------------------------- */
 +    static constexpr const char *PNG_CHECKBOX_OFF_IMAGE = APP_RES_PATH "/CHECKBOX_OFF.bin";                     // checkbox未选中图片
 +    static constexpr const char *PNG_CHECKBOX_ON_IMAGE = APP_RES_PATH "/CHECKBOX_ON.bin";                       // checkbox选中图片
 +    static constexpr const char *PNG_SETTING_NEXT_IMAGE = APP_RES_PATH "/SETTING_NEXT.bin";                     //  箭头图片
 +    static constexpr const char *PNG_SETTING_BACKGROUND_IMAGE = APP_RES_PATH "/SETTING_BACKGROUND.bin";         //  按钮的背景图片
 +    static constexpr const char *PNG_VOLUME_CONTROL_VECTOR = APP_RES_PATH "/VolumeControlVector.bin";           //  调节音量图片
 +    static constexpr const char *PNG_BRIGHTNESS_CONTROL_VECTOR = APP_RES_PATH "/BringhtnessContuolVector.bin";  // 调节亮度图片
 +    static constexpr const char *PNG_SYSTEM_CHECK_ON_IMAGE = APP_RES_PATH "/SYSTEM_CheckOn.bin";                // 勾
 +    static constexpr const char *PNG_SYSTEM_CHECK_OFF_IMAGE = APP_RES_PATH "/SYSTEM_CheckOff.bin";              // 叉
 +    static constexpr const char *PNG_TOGGLEBUTTON_OFF_IMAGE = APP_RES_PATH "/TOGGLEBUTTON_OFF.bin";             // togglebuttton未选中图片
 +    static constexpr const char *PNG_TOGGLEBUTTON_ON_IMAGE = APP_RES_PATH "/TOGGLEBUTTON_ON.bin";               // togglebuttton选中图片
 +    static constexpr const char *PNG_SYSTEM_VOLUME_IMAGE = APP_RES_PATH "/SYSTEM_VOLUME.bin";                   // 系统音量
 +    static constexpr const char *PNG_CALL_VOLUME_IMAGE = APP_RES_PATH "/CALL_VOLUME.bin";                       // 通话音量
 +    static constexpr const char *PNG_MEDIA_VOLUME_IMAGE = APP_RES_PATH "/MEDIA_VOLUME.bin";                     // 媒体音量
 +    static constexpr const char *PNG_ORANGE_ATTENTION_VECTOR_IMAGE = APP_RES_PATH "/OrangeAttentionVector.bin"; // 橘黄色感叹号图标
 +    static constexpr const char *PNG_ANIMATOR1_IMAGE = APP_RES_PATH "/Record/animator1.bin";
 +    static constexpr const char *PNG_ANIMATOR2_IMAGE = APP_RES_PATH "/Record/animator2.bin";
 +    /* -------------------------------- 已删除的不必要图片 ------------------------------- */
 +    static constexpr const char *PNG_APPLIST_UI_SAMPLE_IMAGE = APP_RES_PATH "/APPLIST_UI_SAMPLE.bin"; // Applist图标
 +    static constexpr const char *PNG_APPLIST_TEMP_IMAGE = APP_RES_PATH "/TEMP_IMAGE.bin";
 +    static constexpr const char *TEMP_MEASURE = APP_RES_PATH "/TEMP_MEASURE.bin";
 +    static constexpr const char *TEMP_UP_DROP = APP_RES_PATH "/TEMP_UP_DROP.bin";
 +    static constexpr const char *TEMP_EXIT = APP_RES_PATH "/TEMP_EXIT.bin";
 +    static constexpr const char *TEMP_ROTATE = APP_RES_PATH "/TEMP_ROTATE.bin";
 +    static constexpr const char *TEMP_ICON_ENTER = APP_RES_PATH "/TEMP_ICON_ENTER.bin";
 +    static constexpr const char *TEMP_BACKGROUND = APP_RES_PATH "/TEMP_BACKGROUND.bin";
 +    static constexpr const char *TEMP_WARN = APP_RES_PATH "/TEMP_WARN.bin";
 +    static constexpr const char *TEMP_LITTLE_MEASURE = APP_RES_PATH "/TEMP_LITTLE_MEASURE.bin";
 +    static constexpr const char *TEMP_HOT = APP_RES_PATH "/TEMP_HOT.bin";
 +    static constexpr const char *TEMP_COLD = APP_RES_PATH "/TEMP_COLD.bin";
 +    static constexpr const char *TEMP_LIT_TIP = APP_RES_PATH "/TEMP_LIT_TIP.bin";
 +    static constexpr const char *TEMP_ABOUT_STUDY = APP_RES_PATH "/TEMP_ABOUT_STUDY.bin";
 +    static constexpr const char *TEMP_TRUE = APP_RES_PATH "/TEMP_TRUE.bin";
 +    static constexpr const char *TEMP_DELETE = APP_RES_PATH "/TEMP_DELETE.bin";
 +    static constexpr const char *TEMP_WAITING = APP_RES_PATH "/TEMP_WAITING.bin";
 +    static constexpr const char *TEMP_REPORT = APP_RES_PATH "/TEMP_REPORT.bin";
 +    static constexpr const char *TEMP_POINT = APP_RES_PATH "/TEMP_POINT.bin";
 +    static constexpr const char *TEMP_REV_POINTER = APP_RES_PATH "/TEMP_REV_POINTER.bin";
 +    static constexpr const char *PNG_MAIN_FACE_IMAGE = APP_RES_PATH "/MAIN_FACE_IMAGE.bin";
 +    static constexpr const char *B024_009_IMAGE_PATH = APP_RES_PATH "/HOURHAND.bin";
 +    static constexpr const char *B024_010_IMAGE_PATH = APP_RES_PATH "/SECONDHAND.bin";
 +    static constexpr const char *B024_011_IMAGE_PATH = APP_RES_PATH "/MINUTEHAND.bin";
 +    /* -------------------------------------------------------------------------- */
 +    static constexpr const char *PNG_NEW_WLAN_WIFI = APP_RES_PATH "/FULL_SIGNAL_OPEN.bin";
 +    static constexpr const char *FULL_SIGNAL_ENCRYPTION = APP_RES_PATH "/FULL_SIGNAL_ENCRYPTION.bin";
 +    /* ------------------------------- 不确定是否要删除的图片 ------------------------------ */
 +    static constexpr const char *COMPASS_CALIBRATE_IMAGE = APP_RES_PATH "/COMPASS_CALIBRATE_IMAGE.bin";
 +    static constexpr const char *PNG_STEP_SHOE_IMAGE_PATH = APP_RES_PATH "/SHOE_IMAGE.bin";
 +    static constexpr const char *PNG_SETTTING_BUTTON_IMAGE = APP_RES_PATH "/SETTTING_BUTTON.bin";
 +    static constexpr const char *PNG_REBOOT_BUTTON_IMAGE = APP_RES_PATH "/REBOOT_BUTTON.bin";
 +    static constexpr const char *PNG_SHUTDOWN_BUTTON_IMAGE = APP_RES_PATH "/SHUTDOWN_BUTTON.bin";
 +    static constexpr const char *PNG_SETTTING_REBOOT_IMAGE = APP_RES_PATH "/SETTTING_REBOOT.bin";
 +    static constexpr const char *PNG_SETTTING_SHUTDOWN_IMAGE = APP_RES_PATH "/SETTTING_SHUTDOWN.bin";
 +    static constexpr const char *PNG_CONNECT_PHONE_IMAGE = APP_RES_PATH "/CONNECT_PHONE.bin";
 +    static constexpr const char *PNG_BLUETOOTH_STITLE = APP_RES_PATH "/BLUETOOTH_TITLE.bin";
 +    static constexpr const char *PNG_NEW_DEVICE = APP_RES_PATH "/NEW_DEVICE.bin";
 +    static constexpr const char *PNG_BT_LIST = APP_RES_PATH "/BT_LIST.bin";
 +    static constexpr const char *PNG_SELECTION_BOX = APP_RES_PATH "/SELECTION_BOX.bin";
 +    static constexpr const char *PNG_GANTAN = APP_RES_PATH "/GANTAN.bin";
 +    static constexpr const char *PNG_RIGHT = APP_RES_PATH "/RIGHT.bin";
 +}
 +
 +#endif // UI_CONFIG_H
index b822538,0000000..77a6b5e
mode 100644,000000..100644
--- /dev/null
@@@ -1,609 -1,0 +1,598 @@@
- #include "system/include/SystemFactoryResetPresenter.h"
- #include "system/include/SystemFactoryResetView.h"
 +/*
 + * Copyright (c) 2020-2021 CompanyNameMagicTag.
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +#include "NativeLauncher.h"
 +#include "SliceProxy.h"
 +#include "AbilitySliceProxy.h"
 +#include "wearable_log.h"
 +#include "MainViewSample.h"
 +#include "MainPresenterSample.h"
 +#include "SettingView.h"
 +#include "SettingPresenter.h"
 +#include "ApplistView.h"
 +#include "ApplistPresenter.h"
 +#include "BloodOxygenView.h"
 +#include "BloodOxygenPresenter.h"
 +#include "CallerLogView.h"
 +#include "CallerLogPresenter.h"
 +#include "MainCallingView.h"
 +#include "MainCallingPresenter.h"
 +#include "ActivityPresenter.h"
 +#include "MainAlarmView.h"
 +#include "AlarmPresenter.h"
 +#include "AlarmPopUpPresenter.h"
 +#include "AlarmPopUpView.h"
 +#include "MainBluetoothView.h"
 +#include "BluetoothPresenter.h"
 +#include "PlayersModel.h"
 +#include "HealthModel.h"
 +#include "PresenterTask.h"
 +#include "MainCompassPresenter.h"
 +#include "MainCompassView.h"
 +#include "CallerLogModel.h"
 +#include "VocassistPresenter.h"
 +#include "MainVocassistView.h"
 +#include "VocassistModel.h"
 +#include "ConnectPhonePresenter.h"
 +#include "ConnectPhoneView.h"
 +#include "ScreenModels.h"
 +#include "TempMainView.h"
 +#include "TempPresenter.h"
 +#include "IndoorWalkPresenter.h"
 +#include "IndoorWalkView.h"
 +#include "RebootView.h"
 +#include "RebootPresenter.h"
 +#include "UISampleView.h"
 +#include "UISamplePresenter.h"
 +
 +#include "dial/include/DialPresenter.h"
 +#include "dial/include/DialView.h"
++#include "blood/include/BloodCardView.h"
++
 +
 +#include "weather/include/MainWeatherPresenter.h"
 +#include "weather/include/MainWeatherView.h"
 +#include "weather/include/WeatherReportPresenter.h"
 +#include "weather/include/WeatherReportView.h"
 +#include "weather/include/FutureWeatherPresenter.h"
 +#include "weather/include/FutureWeatherView.h"
 +#include "weather/include/GetWeatherDataErrorPresenter.h"
 +#include "weather/include/GetWeatherDataErrorView.h"
 +
 +#include "system/include/SystemPresenter.h"
 +#include "system/include/SystemView.h"
-         {VIEW_SYSTEM_FACTORY_RESET, &NativeLauncher::InitSystemFactoryResetSlice},    // 系统:恢复出厂设置实例化地址
 +
 +#include "soundandvibration/include/SoundAndVibrationPresenter.h"
 +#include "soundandvibration/include/SoundAndVibrationView.h"
 +#include "soundandvibration/include/SystemVolumePresenter.h"
 +#include "soundandvibration/include/SystemVolumeView.h"
 +
 +#include "displaybrightness/include/DisplayBrightnessPresenter.h"
 +#include "displaybrightness/include/DisplayBrightnessView.h"
 +#include "displaybrightness/include/BrightnessControlPresenter.h"
 +#include "displaybrightness/include/BrightnessControlView.h"
 +#include "displaybrightness/include/ScreenDurationPresenter.h"
 +#include "displaybrightness/include/ScreenDurationView.h"
 +
 +#include "message/include/MessageAdapter.h"
 +#include "message/include/MessageView.h"
 +#include "message/include/MessageItemView.h"
 +#include "message/include/MessageModel.h"
 +#include "message/include/MessagePresenter.h"
 +
 +#include "secondaryfunction/include/SecondaryFunctionPresenter.h"
 +#include "secondaryfunction/include/SecondaryFunctionView.h"
 +#include "secondaryfunction/include/FastTrainingPresenter.h"
 +#include "secondaryfunction/include/FastTrainingView.h"
 +#include "secondaryfunction/include/FastTrainingAttentionPresenter.h"
 +#include "secondaryfunction/include/FastTrainingAttentionView.h"
 +#include "secondaryfunction/include/QuickAccessPresenter.h"
 +#include "secondaryfunction/include/QuickAccessView.h"
 +
 +#include "BluetoothHeadsetEvent.h"
 +#include "graphic_hardware_config.h"
 +#include "graphic_service.h"
 +#include "common/graphic_startup.h"
 +
 +namespace OHOS
 +{
 +    struct AppViewMapper
 +    {
 +        AppViewId id;
 +        void (NativeLauncher::*func)(void);
 +    };
 +
 +    struct ViewIdToString
 +    {
 +        AppViewId id;
 +        char idForUikit[256];
 +    };
 +
 +    static const AppViewMapper SLICE_MAPPER[] = {
 +        {VIEW_MAIN, &NativeLauncher::InitMainSampleSlice},
 +        {VIEW_SETTING, &NativeLauncher::InitSettingSlice},
 +        {VIEW_APPLIST, &NativeLauncher::InitApplistSlice},
 +        {VIEW_MAIN_ALARM, &NativeLauncher::InitMainAlarmSlice},
 +        {VIEW_ALARM_POP_UP, &NativeLauncher::InitAlarmPopUpSlice},
 +        {VIEW_BLUETOOTH_EARPHONE, &NativeLauncher::InitBluetoothSlice},
 +        {VIEW_CALLER_LOG, &NativeLauncher::InitMainCallerLogView},
 +        {VIEW_INCOMING_CALL, &NativeLauncher::InitMainMakePhoneView},
 +        {VIEW_BLOODOXY, &NativeLauncher::InitMainBloodOxyView},
 +        {VIEW_COMPASS, &NativeLauncher::InitCompassSlice},
 +        {VIEW_CONNECT_PHONE, &NativeLauncher::InitConnectPhoneSlice},
 +        {VIEW_INDOORWALK, &NativeLauncher::InitIndoorWalkSlice},
 +        {VIEW_SHUTDOWN_OR_REBOOT, &NativeLauncher::InitRebootSlice},
 +        {VIEW_DIAL, &NativeLauncher::InitDialSlice},
 +        {VIEW_WEATHER, &NativeLauncher::InitWeatherSlice},                            // 天气
 +        {VIEW_WEATHER_REPORT, &NativeLauncher::InitWeatherReportSlice},               // 气象报告
 +        {VIEW_FUTURE_WEATHER, &NativeLauncher::InitFutureWeatherSlice},               // 未来天气
 +        {VIEW_GET_WEATHER_DATA_ERROR, &NativeLauncher::InitGetWeatherDataErrorSlice}, // 获取天气数据失败
 +        {VIEW_SYSTEM, &NativeLauncher::InitSystemSlice},                              // 系统实例化地址
-     void NativeLauncher::InitSystemFactoryResetSlice(void) // 系统:恢复出厂设置
-     {
-         SliceProxy *systemfactoryreset = new AbilitySliceProxy<SystemFactoryResetView, SystemFactoryResetPresenter>;
-         if (systemfactoryreset == nullptr)
-         {
-             return;
-         }
-         NativeAbility::GetInstance().AddSliceProxy(VIEW_SYSTEM_FACTORY_RESET, systemfactoryreset);
-     }
- 
 +        {VIEW_SOUND_VIBRATION, &NativeLauncher::InitSoundAndVibrationSlice},          // 声音与震动实例化地址
 +        {VIEW_SYSTEM_VOLUME, &NativeLauncher::InitSystemVolumeSlice},                 // 系统音量
 +
 +        {VIEW_DISPLAY_BRIGHTNESS, &NativeLauncher::InitUIDisplayBrightnessSlice}, // 显示与亮度的实例化地址
 +        {VIEW_BRIGHTNESS_CONTROL, &NativeLauncher::InitBrightnessControlSlice},   // 调节亮度的实例化地址
 +        {VIEW_SCREEN_DURATION, &NativeLauncher::InitScreenDurationSlice},         // 亮屏时长实例化地址
 +
 +        {VIEW_SECONDARY_FUNCTION, &NativeLauncher::InitSecondaryFunction},
 +        {VIEW_QUICK_ACCESS,&NativeLauncher::InitQuickAccessSlice},                  //快速访问实例化地址
 +        {VIEW_FAST_TRAINING, &NativeLauncher::InitFastTrainingSlice},
 +        {VIEW_FAST_TRAINING_ATTENTION, &NativeLauncher::InitFastTrainingAttentionSlice},
 +
 +        {VIEW_MESSAGE, &NativeLauncher::InitMessageSlice},
 +
 +#if 0
 +        {VIEW_MAIN_ACTIVITY, &NativeLauncher::InitActivitySlice},
 +        {VIEW_OFFLINEVOICE, &NativeLauncher::InitOfflineVoice},
 +        {VIEW_MAIN_TEMP, &NativeLauncher::InitMainTempSlice},
 +        {VIEW_UISAMPLE, &NativeLauncher::InitUISampleSlice}
 +#endif
 +    };
 +
 +    static const ViewIdToString VIEW_MAPPER[] = {
 +        {VIEW_MAIN, "mainView"},
 +        {VIEW_SETTING, "setting"},
 +        {VIEW_APPLIST, "applist"},
 +        {VIEW_MAIN_ALARM, "mainAlarmView"},
 +        {VIEW_ALARM_POP_UP, "alarmPopUpView"},
 +        {VIEW_BLUETOOTH_EARPHONE, "mainBluetoothView"},
 +        {VIEW_CALLER_LOG, "callerLogView"},
 +        {VIEW_INCOMING_CALL, "makePhoneView"},
 +        {VIEW_BLOODOXY, "bloodOxygenView"},
 +        {VIEW_COMPASS, "mainCompassView"},
 +        {VIEW_CONNECT_PHONE, "ConnectPhoneView"},
 +        {VIEW_INDOORWALK, "IndoorWalkView"},
 +        {VIEW_SHUTDOWN_OR_REBOOT, "RebootView"}};
 +
 +    NativeLauncher::NativeLauncher() {}
 +    NativeLauncher::~NativeLauncher() {}
 +
 +    NativeLauncher &NativeLauncher::GetInstance(void)
 +    {
 +        static NativeLauncher instance;
 +        return instance;
 +    }
 +
 +    void NativeLauncher::InitNativeLauncher()
 +    {
 +        GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::VECTOR_FONT_DIR, DEFAULT_VECTOR_FONT_FILENAME);
 +        WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "NativeLauncher::InitNativeLauncher");
 +        // 初始化所有预加载slice
 +        InitBtHeadsetEvent(); // 蓝牙ct和tg适配初始化
 +        InitAllNativeSlices();
 +        CallerLogModel::GetInstance()->InitPhoneService();
 +        PresenterTask::GetInstance()->Init();
 +        PlayersModel::GetInstance()->AudioInit();
 +        ActivityModel::GetInstance()->Init();
 +        ScreenModels::GetInstance()->InitCardConfig();
 +        VocassistModel::GetInstance()->Init();
 +        HeartModel::GetInstance()->Init();
 +        BluetoothModel::GetInstance()->Init();
 +        // 初始化默认首页
 +        ScreenModels::GetInstance()->PreLoadAppimages();
 +        NativeAbility::GetInstance().SetDefaultSliceId(VIEW_MAIN);
 +    }
 +
 +    void NativeLauncher::InitAllNativeSlices(void)
 +    {
 +        uint16_t size = sizeof(SLICE_MAPPER) / sizeof(SLICE_MAPPER[0]);
 +        for (int index = 0; index < size; index++)
 +        {
 +            if ((SLICE_MAPPER[index].id >= VIEW_MAX_INTER_APP))
 +            {
 +                continue;
 +            }
 +            (this->*(SLICE_MAPPER[index].func))();
 +        }
 +        return;
 +    }
 +
 +    void NativeLauncher::InitMainSampleSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitMainSampleSlice");
 +        SliceProxy *mainViewSample = new AbilitySliceProxy<MainViewSample, MainPresenterSample>;
 +        if (mainViewSample == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainViewSample is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_MAIN, mainViewSample);
 +    }
 +
 +    void NativeLauncher::InitMainAlarmSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitMainAlarmSlice");
 +        SliceProxy *mainAlarmView = new AbilitySliceProxy<MainAlarmView, AlarmPresenter>;
 +        if (mainAlarmView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainAlarmView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_MAIN_ALARM, mainAlarmView);
 +    }
 +
 +    void NativeLauncher::InitMainTempSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitMainTempSlice");
 +        SliceProxy *mainTempView = new AbilitySliceProxy<TempMainView, TempPresenter>;
 +        if (mainTempView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainTempView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_MAIN_TEMP, mainTempView);
 +    }
 +
 +    void NativeLauncher::InitCompassSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::MainCompassView");
 +        SliceProxy *mainCompassView = new AbilitySliceProxy<MainCompassView, MainCompassPresenter>;
 +        if (mainCompassView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainCompassView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_COMPASS, mainCompassView);
 +    }
 +
 +    void NativeLauncher::InitIndoorWalkSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::IndoorWalkView");
 +        SliceProxy *indoorWalkView = new AbilitySliceProxy<IndoorWalkView, IndoorWalkPresenter>;
 +        if (indoorWalkView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "indoorWalkView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_INDOORWALK, indoorWalkView);
 +    }
 +
 +    void NativeLauncher::InitRebootSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::RebootView");
 +        SliceProxy *rebootView = new AbilitySliceProxy<RebootView, RebootPresenter>;
 +        if (rebootView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "rebootView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_SHUTDOWN_OR_REBOOT, rebootView);
 +    }
 +
 +    void NativeLauncher::InitConnectPhoneSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::ConnectPhoneView");
 +        SliceProxy *connectPhoneView = new AbilitySliceProxy<ConnectPhoneView, ConnectPhonePresenter>;
 +        if (connectPhoneView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connectPhoneView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_CONNECT_PHONE, connectPhoneView);
 +    }
 +
 +    void NativeLauncher::InitAlarmPopUpSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitAlarmPopUpSlice");
 +        SliceProxy *alarmPopUpView = new AbilitySliceProxy<AlarmPopUpView, AlarmPopUpPresenter>;
 +        if (alarmPopUpView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainAlarmView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_ALARM_POP_UP, alarmPopUpView);
 +    }
 +
 +    void NativeLauncher::InitMainBloodOxyView(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitMainBloodOxyView");
 +        SliceProxy *bloodOxygenView = new AbilitySliceProxy<BloodOxygenView, BloodOxygenPresenter>;
 +        if (bloodOxygenView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bloodOxygenView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_BLOODOXY, bloodOxygenView);
 +    }
 +
 +    void NativeLauncher::InitMainMakePhoneView(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitMainMakePhoneView");
 +        SliceProxy *makePhoneView = new AbilitySliceProxy<MainCallingView, MainCallingPresenter>;
 +        if (makePhoneView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "makePhoneView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_INCOMING_CALL, makePhoneView);
 +    }
 +
 +    void NativeLauncher::InitMainCallerLogView(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitMainCallerLogView");
 +        SliceProxy *callerLogView = new AbilitySliceProxy<CallerLogView, CallerLogPresenter>;
 +        if (callerLogView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "callerLogView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_CALLER_LOG, callerLogView);
 +    }
 +
 +    void NativeLauncher::InitActivitySlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitWeekStepSlice");
 +        SliceProxy *mainActivityView = new AbilitySliceProxy<MainActivityView, ActivityPresenter>;
 +        if (mainActivityView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainActivityView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_MAIN_ACTIVITY, mainActivityView);
 +    }
 +
 +    void NativeLauncher::InitBluetoothSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeAbility::InitBluetoothSlice");
 +        SliceProxy *mainBluetoothView = new AbilitySliceProxy<MainBluetoothView, BluetoothPresenter>;
 +        if (mainBluetoothView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainBluetoothView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_BLUETOOTH_EARPHONE, mainBluetoothView);
 +    }
 +
 +    void NativeLauncher::InitSettingSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitSettingSlice");
 +        SliceProxy *settingView = new AbilitySliceProxy<SettingView, SettingPresenter>;
 +        if (settingView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "settingView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_SETTING, settingView);
 +    }
 +
 +    void NativeLauncher::InitApplistSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitApplistSlice");
 +        SliceProxy *applistView = new AbilitySliceProxy<ApplistView, ApplistPresenter>;
 +        if (applistView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "applistView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_APPLIST, applistView);
 +    }
 +
 +    void NativeLauncher::InitOfflineVoice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitOfflineVoice");
 +        SliceProxy *offlineVoiceView = new AbilitySliceProxy<MainVocassistView, VocassistPresenter>;
 +        if (offlineVoiceView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "offlineVoiceView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_OFFLINEVOICE, offlineVoiceView);
 +    }
 +
 +    void NativeLauncher::InitUISampleSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitUISampleSlice");
 +        SliceProxy *uisampleView = new AbilitySliceProxy<UISampleView, UISamplePresenter>;
 +        if (uisampleView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uisampleView");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_UISAMPLE, uisampleView);
 +    }
 +    void NativeLauncher::InitDialSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitDialSlice");
 +        SliceProxy *dialview = new AbilitySliceProxy<DialView, DialPresenter>;
 +        if (dialview == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dialview");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_DIAL, dialview);
 +    }
 +
 +    void NativeLauncher::InitWeatherSlice(void) // 天气
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitWeatherSlice");
 +        SliceProxy *mainweather = new AbilitySliceProxy<MainWeatherView, MainWeatherPresenter>;
 +        if (mainweather == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_WEATHER, mainweather);
 +    }
 +
 +    void NativeLauncher::InitWeatherReportSlice(void) // 气象报告
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitWeatherReportSlice");
 +        SliceProxy *weatherreport = new AbilitySliceProxy<WeatherReportView, WeatherReportPresenter>;
 +        if (weatherreport == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_WEATHER_REPORT, weatherreport);
 +    }
 +
 +    void NativeLauncher::InitFutureWeatherSlice(void) // 未来天气
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitFutureWeatherSlice");
 +        SliceProxy *futureweather = new AbilitySliceProxy<FutureWeatherView, FutureWeatherPresenter>;
 +        if (futureweather == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_FUTURE_WEATHER, futureweather);
 +    }
 +
 +    void NativeLauncher::InitGetWeatherDataErrorSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitGetWeatherDataErrorSlice");
 +        SliceProxy *getweatherdataerror = new AbilitySliceProxy<GetWeatherDataErrorView, GetWeatherDataErrorPresenter>;
 +        if (getweatherdataerror == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_GET_WEATHER_DATA_ERROR, getweatherdataerror);
 +    }
 +
 +    void NativeLauncher::InitSystemSlice(void) // 系统
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitSystemSlice");
 +        SliceProxy *system = new AbilitySliceProxy<SystemView, SystemPresenter>;
 +        if (system == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "system is nullptr!");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_SYSTEM, system);
 +    }
 +
 +    void NativeLauncher::InitMessageSlice(void) // 消息中心
 +    {
 +        SliceProxy *messageview = new AbilitySliceProxy<MessageView, MessagePresenter>;
 +        if (messageview == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageView is nullptr");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_MESSAGE, messageview);
 +    }
 +
 +    void NativeLauncher::InitSoundAndVibrationSlice(void) // 声音与震动
 +    {
 +        SliceProxy *SoundAndVibration = new AbilitySliceProxy<SoundAndVibrationView, SoundAndVibrationPresenter>;
 +        if (SoundAndVibration == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_SOUND_VIBRATION, SoundAndVibration);
 +    }
 +
 +    void NativeLauncher::InitSystemVolumeSlice(void) // 系统音量
 +    {
 +        SliceProxy *systemvolume = new AbilitySliceProxy<SystemVolumeView, SystemVolumePresenter>;
 +        if (systemvolume == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_SYSTEM_VOLUME, systemvolume);
 +    }
 +
 +    // DisplayBrightness的实例化
 +    void NativeLauncher::InitUIDisplayBrightnessSlice(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitUISampleSlice");
 +        SliceProxy *uidisplaybrightnessView = new AbilitySliceProxy<DisplayBrightnessView, DisplayBrightnessPresenter>;
 +        if (uidisplaybrightnessView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uidisplaybrightnessView");
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_DISPLAY_BRIGHTNESS, uidisplaybrightnessView);
 +    }
 +
 +    void NativeLauncher::InitBrightnessControlSlice(void)
 +    {
 +        SliceProxy *brightnesscontrol = new AbilitySliceProxy<BrightnessControlView, BrightnessControlPresenter>;
 +        if (brightnesscontrol == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_BRIGHTNESS_CONTROL, brightnesscontrol);
 +    }
 +
 +    void NativeLauncher::InitScreenDurationSlice(void)
 +    {
 +        SliceProxy *ScreenDuration = new AbilitySliceProxy<ScreenDurationView, ScreenDurationPresenter>;
 +        if (ScreenDuration == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_SCREEN_DURATION, ScreenDuration);
 +    }
 +
 +    void NativeLauncher::InitSecondaryFunction(void) // 辅助功能
 +    {
 +        SliceProxy *secondaryfunction = new AbilitySliceProxy<SecondaryFunctionView, SecondaryFunctionPresenter>;
 +        if (secondaryfunction == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_SECONDARY_FUNCTION, secondaryfunction);
 +    }
 +
 +    void NativeLauncher::InitQuickAccessSlice(void) // 快速访问
 +    {
 +        SliceProxy *QuickAccess = new AbilitySliceProxy<QuickAccessView, QuickAccessPresenter>;
 +        if (QuickAccess == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_QUICK_ACCESS, QuickAccess);
 +    }
 +
 +    void NativeLauncher::InitFastTrainingSlice(void)
 +    {
 +        SliceProxy *fasttraining = new AbilitySliceProxy<FastTrainingView, FastTrainingPresenter>;
 +        if (fasttraining == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_FAST_TRAINING, fasttraining);
 +    }
 +
 +    void NativeLauncher::InitFastTrainingAttentionSlice(void)
 +    {
 +        SliceProxy *fasttrainingattention = new AbilitySliceProxy<FastTrainingAttentionView, FastTrainingAttentionPresenter>;
 +        if (fasttrainingattention == nullptr)
 +        {
 +            return;
 +        }
 +        NativeAbility::GetInstance().AddSliceProxy(VIEW_FAST_TRAINING_ATTENTION, fasttrainingattention);
 +    }
 +
 +}
index 874efe7,0000000..c9f0b3f
mode 100644,000000..100644
--- /dev/null
@@@ -1,38 -1,0 +1,53 @@@
- namespace OHOS {
- class BloodBandoffView {
- public:
-     BloodBandoffView();
-     virtual ~BloodBandoffView();
++/***
++ * @Author: Caisking 3449750381@qq.com
++ * @Date: 2023-12-13 19:33:14
++ * @LastEditors: Caisking 3449750381@qq.com
++ * @LastEditTime: 2024-01-26 18:24:46
++ * @FilePath: /FD230/code/sdk/application/wearable/nativeapp/nativeui/bloodoxygen/include/BloodBandoffView.h
++ * @Description:
++ * @
++ * @Copyright (c) 2024 by Caisking , All Rights Reserved.
++ */
 +/*
 + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
 + * Description: bloodBandoff view
 + * Author:
 + * Create: 2021-08-01
 + */
 +
 +#ifndef BLOOD_BANDOFF_VIEW_H
 +#define BLOOD_BANDOFF_VIEW_H
 +
 +#include "components/ui_label.h"
 +#include "components/ui_view_group.h"
 +#include "components/ui_image_animator.h"
++#include "components/ui_button.h"
++#include "components/ui_label_button.h"
 +#include "BaseView.h"
 +#include "View.h"
 +#include "ohos_types.h"
 +
-     UIViewGroup *CreateUIViewGroup();
-     static BloodBandoffView *GetInstance(void);
++namespace OHOS
++{
++    class BloodBandoffView
++    {
++    public:
++        BloodBandoffView();
++        virtual ~BloodBandoffView();
 +
-     UIViewGroup *GetBandoffViewGroup();
-     UIImageAnimatorView *GetImageAnimator();
- private:
-     UILabel *label;
-     UIViewGroup *group;
-     UIImageView *imageView;
-     UIImageAnimatorView *imageAnimator;
- };
- }
++        UIViewGroup *CreateUIViewGroup();
++        static BloodBandoffView *GetInstance(void);
 +
- #endif  // 血氧跳转界面
++        UIViewGroup *GetBandoffViewGroup();
++        UIImageAnimatorView *GetImageAnimator();
 +
++    private:
++        UILabel *label;
++        UILabelButton *testButton;
++        UIViewGroup *group;
++        UIImageView *imageView;
++        UIImageAnimatorView *imageAnimator;
++    };
++}
 +
++#endif // 血氧跳转界面
index f24fbd2,0000000..6fec8f0
mode 100644,000000..100644
--- /dev/null
@@@ -1,146 -1,0 +1,232 @@@
- namespace OHOS {
- // 动态显示图片设置
- static constexpr uint16_t IMAGE_SIZE = 96;
- static constexpr uint16_t IMAGE_POSITION_Y = 276;
- static constexpr uint16_t IMAGE_POSITION_X = 179;
- static constexpr uint16_t IMAGEANIMATOERVIEW_SIZE = 24;
- static constexpr uint16_t IMAGEANIMATOERVIEW_SPEED = 40;
- 
- // 标签设置
- static constexpr uint16_t LABEL_POSITION_X = 87;
- static constexpr uint16_t LABEL_POSITION_Y = 200;
- static constexpr uint16_t LABEL_POSITION_WIDTH = 288;
- static constexpr uint16_t LABEL_POSITION_HEIGHT = 50;
- 
- // 图片设置
- static constexpr uint16_t IMAGE_ENTER_POSITION_X = 131;
- static constexpr uint16_t IMAGE_ENTER_POSITION_Y = 70;
- 
- static constexpr uint16_t TITLE_LABEL_DEFAULT_HEIGHT = 30;
- static constexpr uint16_t FONT_DEFAULT_SIZE = 25;
- static constexpr uint16_t VIEW_DISTANCE_TO_LEFT_SIDE = 48;
- static constexpr uint16_t TEXT_DISTANCE_TO_LEFT_SIDE = 50;
- static constexpr uint16_t TEXT_DISTANCE_TO_TOP_SIDE = 11;
- 
- static ImageAnimatorInfo g_imageAnimatorInfo_Time[IMAGEANIMATOERVIEW_SIZE] = {
-     {PNG_COUNTDOWN_TIME_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_COUNTDOWN_TIME_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- };
- static BloodBandoffView *g_pMainView = nullptr;
- BloodBandoffView::BloodBandoffView()
 +/*
 + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
 + * Description: bloodBandoff view
 + * Author:
 + * Create: 2021-08-01
 + */
 +#include "UiConfig.h"
 +#include "wearable_log.h"
 +#include "BloodBandoffView.h"
 +#include "BloodOxygenModel.h"
 +
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::BloodBandoffView");
-     label = nullptr;
-     imageView = nullptr;
-     group = nullptr;
-     imageAnimator = nullptr;
-     g_pMainView = this;
- }
++namespace OHOS
 +{
- BloodBandoffView::~BloodBandoffView()
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::~BloodBandoffView");
-     group->RemoveAll();
-     delete label;
-     delete imageView;
-     delete group;
-     delete imageAnimator;
-     label = nullptr;
-     imageView = nullptr;
-     group = nullptr;
-     imageAnimator = nullptr;
-     g_pMainView = nullptr;
- }
++    // 动态显示图片设置
++    static constexpr uint16_t IMAGE_SIZE = 180;
++    static constexpr uint16_t IMAGE_POSITION_Y = 134;
++    static constexpr uint16_t IMAGE_POSITION_X = 150;
++    static constexpr uint16_t IMAGEANIMATOERVIEW_SIZE = 90;
++    static constexpr uint16_t IMAGEANIMATOERVIEW_SPEED = 30;
 +
- BloodBandoffView *BloodBandoffView::GetInstance(void)
- {
-     return g_pMainView;
- }
++    // 标签设置
++    static constexpr uint16_t LABEL_POSITION_X = 173;
++    static constexpr uint16_t LABEL_POSITION_Y = 52;
++    static constexpr uint16_t LABEL_POSITION_WIDTH = 120;
++    static constexpr uint16_t LABEL_POSITION_HEIGHT = 35;
 +
- UIViewGroup *BloodBandoffView::GetBandoffViewGroup()
- {
-     return group;
- }
++    // 图片设置
++    static constexpr uint16_t IMAGE_ENTER_POSITION_X = 131;
++    static constexpr uint16_t IMAGE_ENTER_POSITION_Y = 70;
 +
- UIImageAnimatorView *BloodBandoffView::GetImageAnimator()
- {
-     return imageAnimator;
- }
++    static constexpr uint16_t TITLE_LABEL_DEFAULT_HEIGHT = 30;
++    static constexpr uint16_t FONT_DEFAULT_SIZE = 30;
++    static constexpr uint16_t VIEW_DISTANCE_TO_LEFT_SIDE = 48;
++    static constexpr uint16_t TEXT_DISTANCE_TO_LEFT_SIDE = 50;
++    static constexpr uint16_t TEXT_DISTANCE_TO_TOP_SIDE = 11;
 +
- UIViewGroup *BloodBandoffView::CreateUIViewGroup()
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::CreateUIViewGroup");
-     group = new UIViewGroup();
-     if (group == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new group fail");
-         return nullptr;
++    static ImageAnimatorInfo g_imageAnimatorInfo_Time[IMAGEANIMATOERVIEW_SIZE] = {
++        {PNG_COUNTDOWN_TIME_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_30, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_31, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_32, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_33, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_34, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_35, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_36, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_37, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_38, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_39, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_40, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_41, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_42, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_43, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_44, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_45, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_46, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_47, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_48, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_49, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_50, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_51, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_52, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_53, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_54, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_55, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_56, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_57, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_58, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_59, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_60, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_61, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_62, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_63, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_64, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_65, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_66, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_67, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_68, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_69, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_70, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_71, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_72, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_73, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_74, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_75, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_76, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_77, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_78, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_79, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_80, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_81, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_82, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_83, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_84, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_85, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_86, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_87, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_88, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_COUNTDOWN_TIME_IMAGE_89, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++    };
++    static BloodBandoffView *g_pMainView = nullptr;
++    BloodBandoffView::BloodBandoffView()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::BloodBandoffView");
++        label = nullptr;
++        imageView = nullptr;
++        group = nullptr;
++        imageAnimator = nullptr;
++        g_pMainView = this;
++    }
 +
-     group->SetPosition(0, 0);
-     group->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
++    BloodBandoffView::~BloodBandoffView()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::~BloodBandoffView");
++        group->RemoveAll();
++        delete label;
++        delete imageView;
++        delete group;
++        delete imageAnimator;
++        label = nullptr;
++        imageView = nullptr;
++        group = nullptr;
++        imageAnimator = nullptr;
++        g_pMainView = nullptr;
 +    }
-     label = new UILabel();
-     if (label == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new Label fail");
-         return nullptr;
 +
-     group->Add(label);
-     label->SetPosition(LABEL_POSITION_X, LABEL_POSITION_Y, LABEL_POSITION_WIDTH, LABEL_POSITION_HEIGHT);
-     label->SetText("偏紧佩戴,保持静止");
-     label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
-     label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
++    BloodBandoffView *BloodBandoffView::GetInstance(void)
++    {
++        return g_pMainView;
 +    }
-     imageAnimator = new UIImageAnimatorView();
-     if (imageAnimator == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new UIImageAnimatorView fail");
-         return nullptr;
 +
-     imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_Time, IMAGEANIMATOERVIEW_SIZE, IMAGEANIMATOERVIEW_SPEED);
-     imageAnimator->Start();
-     imageAnimator->SetRepeat(false);
-     group->Add(imageAnimator);
++    UIViewGroup *BloodBandoffView::GetBandoffViewGroup()
++    {
++        return group;
 +    }
- 
-     return group;
- }
 +
++    UIImageAnimatorView *BloodBandoffView::GetImageAnimator()
++    {
++        return imageAnimator;
++    }
++
++    UIViewGroup *BloodBandoffView::CreateUIViewGroup()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::CreateUIViewGroup");
++        group = new UIViewGroup();
++        if (group == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new group fail");
++            return nullptr;
++        }
++        group->SetPosition(0, 0);
++        group->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
++
++        label = new UILabel();
++        if (label == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new Label fail");
++            return nullptr;
++        }
++        group->Add(label);
++        label->SetPosition(LABEL_POSITION_X, LABEL_POSITION_Y, LABEL_POSITION_WIDTH, LABEL_POSITION_HEIGHT);
++        label->SetText("正在检测");
++        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
++        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
++
++        imageAnimator = new UIImageAnimatorView();
++        if (imageAnimator == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new UIImageAnimatorView fail");
++            return nullptr;
++        }
++        imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_Time, IMAGEANIMATOERVIEW_SIZE, IMAGEANIMATOERVIEW_SPEED);
++        imageAnimator->Start();
++        imageAnimator->SetRepeat(false);
++        group->Add(imageAnimator);
++
++        if (testButton == nullptr)
++        {
++            testButton = new UILabelButton();
++        }
++        testButton->SetPosition(118, 336);    // widget's left position and top position
++        testButton->Resize(230, 80);          // widget's width and height
++        testButton->SetViewId("labelButton"); // Set style
++        testButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
++
++        // Set additional property
++        testButton->SetText("停止检测");
++        testButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26);
++        testButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
++        group->Add(testButton);
++
++#if 0
 +    imageView = new UIImageView();
 +    if (imageView == nullptr) {
 +        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new UIImageView fail");
 +        return nullptr;
 +    }
 +    imageView->SetPosition(IMAGE_ENTER_POSITION_X, IMAGE_ENTER_POSITION_Y); // 30 : offset
 +    imageView->SetSrc(PNG_BLOOD_ICON_ENTER);
 +    group->Add(imageView);
++#endif
++        return group;
++    }
 +}
index 676165c,0000000..0949112
mode 100644,000000..100644
--- /dev/null
@@@ -1,151 -1,0 +1,151 @@@
-         uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
 +/*
 + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
 + * Description: bloodOxygen view
 + * Author:
 + * Create: 2021-08-01
 + */
 +
 +#include "BloodOxygenPresenter.h"
 +#include "common/task_manager.h"
 +#include "BloodOxygenView.h"
 +#include "BloodOxygenModel.h"
 +#include "components/ui_label.h"
 +#include "BloodBandoffView.h"
 +#include "ChangeSliceListener.h"
 +
 +namespace OHOS {
 +static BloodOxygenPresenter *g_pMainView = nullptr;
 +static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
 +static constexpr uint16_t PROGRESS_VALUE_MAX = 100;
 +
 +BloodOxygenPresenter::BloodOxygenPresenter()
 +{
 +    count = PROGRESS_VALUE_MAX;
 +    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::new BloodOxygenPresenter");
 +    g_pMainView = this;
 +}
 +
 +BloodOxygenPresenter::~BloodOxygenPresenter()
 +{
 +    g_pMainView = nullptr;
 +}
 +
 +BloodOxygenPresenter* BloodOxygenPresenter::GetInstance()
 +{
 +    return g_pMainView;
 +}
 +
 +void BloodOxygenPresenter::OnStart()
 +{
 +    Presenter<BloodOxygenView>::OnStart();
 +    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::On Start ");
 +}
 +
 +void BloodOxygenPresenter::OnPause(void) {}
 +
 +void BloodOxygenPresenter::OnResume(void) {}
 +
 +void BloodOxygenPresenter::OnStop(void) {}
 +
 +bool BloodOxygenPresenter::CheckPointersValue()
 +{
 +    if (BloodOxygenView::GetInstance() == nullptr) {
 +        return false;
 +    }
 +
 +    if (BloodBandoffView::GetInstance() == nullptr) {
 +        return false;
 +    }
 +
 +    if (BloodOxygenModel::GetInstance() == nullptr) {
 +        return false;
 +    }
 +    return true;
 +}
 +
 +
 +bool BloodOxygenPresenter::OnDrag(UIView& view, const DragEvent& event)
 +{
 +    UNUSED(view);
 +    if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {
 +        BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(false);
 +        BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(true);
 +        NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
 +    }
 +    return false;
 +}
 +
 +
 +bool BloodOxygenPresenter::OnClick(UIView& view, const ClickEvent& event)
 +{
 +    UNUSED(view);
 +    UNUSED(event);
 +    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::OnClick");
 +    if (CheckPointersValue() == false) {
 +        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::Pointers is empty");
 +        return false;
 +    }
 +    BloodOxygenView::GetInstance()->GetPercent()->SetText("");
 +    BloodOxygenView::GetInstance()->GetBloodOxygenGroup()->SetVisible(false);
 +    BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(true);
 +    BloodBandoffView::GetInstance()->GetImageAnimator()->Stop();
 +    BloodBandoffView::GetInstance()->GetImageAnimator()->SetRepeat(false);
 +    BloodBandoffView::GetInstance()->GetImageAnimator()->Start();
 +    BloodOxygenModel::GetInstance()->SetBloodBandoffViewStatus(true);
 +    BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(false);
 +    return true;
 +}
 +
 +//增加按键事件
 +bool BloodOxygenPresenter::OnKeyAct(UIView& view, const KeyEvent& event)
 +{
 +    WEARABLE_LOGD("","into the view is: %s\n", typeid(view).name());
 +    uint16 keyID = event.GetKeyId();
 +    WEARABLE_LOGD("","into key! keyID %u\n",keyID);
 +    //如果是power键就返回上一级
 +    if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))
 +    {
++        //uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
 +        NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
 +    }
 +    return true;
 +}
 +void BloodOxygenPresenter::ProgressNotify(void)
 +{
 +    if (CheckPointersValue() == false) {
 +        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::Pointers is empty");
 +        return;
 +    }
 +
 +    if (BloodOxygenModel::GetInstance()->GetBloodOxygenViewStatus() == true) {
 +        count--;
 +        BloodOxygenView::GetInstance()->GetCircleProgress()->SetValue(count);
 +        if (count == PROGRESS_VALUE_MIN) {
 +            BloodOxygenView::GetInstance()->GetPercent()->SetText("98%");
 +            BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(false);
 +            count = PROGRESS_VALUE_MAX;
 +            BloodOxygenView::GetInstance()->GetCircleProgress()->SetValue(count);
 +            BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(true);
 +        }
 +    }
 +}
 +
 +void BloodOxygenPresenter::ReturnInterface()
 +{
 +    if (BloodOxygenModel::GetInstance()->GetBloodBandoffViewStatus() == true) {
 +        if (BloodBandoffView::GetInstance()->GetImageAnimator()->GetState() == false) {
 +            BloodOxygenModel::GetInstance()->SetBloodBandoffViewStatus(false);
 +            BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(true);
 +
 +            BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(false);
 +            BloodOxygenView::GetInstance()->GetBloodOxygenGroup()->SetVisible(true);
 +        }
 +    }
 +}
 +
 +void BloodOxygenPresenter::Notify(void)
 +{
 +    ProgressNotify();
 +    ReturnInterface();
 +}
 +}
index c088ef0,0000000..0646019
mode 100644,000000..100644
--- /dev/null
@@@ -1,399 -1,0 +1,417 @@@
- namespace OHOS {
- // 按钮设置
- static constexpr uint16_t TESTBUTTON_ZERO = 0;
- static constexpr uint16_t TESTBUTTON_X = 167;
- static constexpr uint16_t TESTBUTTON_Y = 360;
- 
- // 进度条参数设置
- static constexpr uint16_t CIRCLE_PROGRESS_VALUE = 100;
- static constexpr uint16_t CIRCLE_PROGRESS_RADIUS = 43;
- static constexpr uint16_t CIRCLE_PROGRESS_STARTANGLE = 360;
- static constexpr uint16_t CIRCLE_PROGRESS_ENDANGLE = 0;
- static constexpr uint16_t CIRCLE_PROGRESS_WIDTH = 10;
- static constexpr uint16_t CIRCLE_PROGRESS_POSITION_X = 10;
- static constexpr uint16_t CIRCLE_PROGRESS_POSITION_Y = 10;
- static constexpr uint16_t CIRCLE_PROGRESS_CENTER_X = 195;
- static constexpr uint16_t CIRCLE_PROGRESS_CENTER_Y = 37;
- static constexpr uint16_t CIRCLE_PROGRESS_POSITION_WIDTH = 275;
- static constexpr uint16_t CIRCLE_PROGRESS_POSITION_HEIGHT = 130;
- static constexpr uint16_t CIRCLE_PROGRESS_LEFT = 10;
- static constexpr uint16_t CIRCLE_PROGRESS_TOP = 5;
- 
- // 动态刷新设置
- static constexpr uint16_t IMAGE_SIZE = 60;
- static constexpr uint16_t IMAGE_POSITION_X = 186;
- static constexpr uint16_t IMAGE_POSITION_Y = 23;
- static constexpr uint16_t IMAGEANIMATORVIEW_SIZE = 31;
- static constexpr uint16_t IMAGEANIMATORVIEW_SPEED = 40;
- 
- // 血氧主图设置
- static constexpr uint16_t IMAGE_PROGRESS_POSITION_X = 176;
- static constexpr uint16_t IMAGE_PROGRESS_POSITION_Y = 13;
- 
- // 血氧%显示
- static constexpr uint16_t LABEL_PERCENT_POSITION_X = 258;
- static constexpr uint16_t LABEL_PERCENT_POSITION_Y = 40;
- 
- // 血氧柱状图
- static constexpr int16 VIEW_MAX_X = 415;
- static constexpr int16 VIEW_MIN_X = 35;
- static constexpr int16 VIEW_MAX_Y = 150;
- static constexpr int16 VIEW_MIN_Y = 0;
- static constexpr int16 VIEW_WIDTH = 7;
- static constexpr int16 VIEW_HEIGHT = 300;
- static constexpr uint16_t VIEW_BACKGROUND_OPA = 127;
- static constexpr uint16_t VIEW_BORDER_RADIUS = 5;
- static constexpr uint16_t BORDER_OPA = 127;
- static constexpr uint16_t BORDER_WIDTH = 20;
- 
- static constexpr uint16_t TITLE_LABEL_DEFAULT_HEIGHT = 30;
- static constexpr uint16_t FONT_DEFAULT_SIZE = 20;
- static constexpr uint16_t VIEW_DISTANCE_TO_LEFT_SIDE = 48;
- static constexpr uint16_t TEXT_DISTANCE_TO_LEFT_SIDE = 50;
- static constexpr uint16_t TEXT_DISTANCE_TO_TOP_SIDE = 11;
- static constexpr uint16_t BUTTON_LABEL_SIZE = 40;
- static constexpr uint8_t BUTTON_STYLE_BORDER_RADIUS_VALUE = 20;
- static constexpr uint32 BUTTON_STYLE_BACKGROUND_COLOR_VALUE = 0xFFFFFF;
- static constexpr uint16_t BUTTON_WIDHT2 = 120;
- static constexpr uint16_t BUTTON_HEIGHT2 = 60;
- 
- // 字体大小
- static constexpr uint16_t PERCENT_FONT_SIZE = 25;
- 
- static constexpr uint16_t MATH_ZERO = 0;
- 
- static BloodOxygenView *g_pMainView = nullptr;
- static ImageAnimatorInfo g_imageAnimatorInfo_new[31] = {
-     {PNG_BLOOD_FLOW_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-     {PNG_BLOOD_FLOW_IMAGE_30, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
- };
- 
- BloodOxygenView::BloodOxygenView()
 +/*
 + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
 + * Description: bloodOxygen view
 + * Author:
 + * Create: 2021-08-01
 + */
 +
 +#include "BloodOxygenView.h"
 +#include "BloodOxygenModel.h"
 +
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::BloodOxygenView");
-     imageViewMain = nullptr;
-     imageViewProgress = nullptr;
-     group = nullptr;
-     percent = nullptr;
-     testButton = nullptr;
-     circleProgress = nullptr;
-     imageAnimator = nullptr;
-     g_pMainView = this;
-     bloodbandoff = new BloodBandoffView();
-     if (bloodbandoff == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new BloodBandoffView fail");
++namespace OHOS
 +{
- }
- 
- BloodOxygenView::~BloodOxygenView()
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::~BloodOxygenView");
-     group->RemoveAll();
-     delete imageViewMain;
-     delete imageViewProgress;
-     delete group;
-     delete testButton;
-     delete percent;
-     delete circleProgress;
-     delete imageAnimator;
-     delete bloodbandoff;
-     imageViewMain = nullptr;
-     imageViewProgress = nullptr;
-     group = nullptr;
-     percent = nullptr;
-     testButton = nullptr;
-     circleProgress = nullptr;
-     imageAnimator = nullptr;
-     g_pMainView = nullptr;
-     bloodbandoff = nullptr;
- }
- 
- BloodOxygenView *BloodOxygenView::GetInstance(void)
- {
-     return g_pMainView;
- }
- 
- UILabel *BloodOxygenView::GetPercent()
- {
-     return percent;
- }
- 
- UIViewGroup *BloodOxygenView::GetBloodOxygenGroup()
- {
-     return group;
- }
- 
- UILabelButton *BloodOxygenView::GetTestButton()
- {
-     return testButton;
- }
++    // 按钮设置
++    static constexpr uint16_t TESTBUTTON_ZERO = 0;
++    static constexpr uint16_t TESTBUTTON_X = 118;
++    static constexpr uint16_t TESTBUTTON_Y = 336;
++
++    // 进度条参数设置
++    static constexpr uint16_t CIRCLE_PROGRESS_VALUE = 100;
++    static constexpr uint16_t CIRCLE_PROGRESS_RADIUS = 43;
++    static constexpr uint16_t CIRCLE_PROGRESS_STARTANGLE = 360;
++    static constexpr uint16_t CIRCLE_PROGRESS_ENDANGLE = 0;
++    static constexpr uint16_t CIRCLE_PROGRESS_WIDTH = 10;
++    static constexpr uint16_t CIRCLE_PROGRESS_POSITION_X = 10;
++    static constexpr uint16_t CIRCLE_PROGRESS_POSITION_Y = 10;
++    static constexpr uint16_t CIRCLE_PROGRESS_CENTER_X = 195;
++    static constexpr uint16_t CIRCLE_PROGRESS_CENTER_Y = 37;
++    static constexpr uint16_t CIRCLE_PROGRESS_POSITION_WIDTH = 275;
++    static constexpr uint16_t CIRCLE_PROGRESS_POSITION_HEIGHT = 130;
++    static constexpr uint16_t CIRCLE_PROGRESS_LEFT = 10;
++    static constexpr uint16_t CIRCLE_PROGRESS_TOP = 5;
++
++    // 动态刷新设置
++    static constexpr uint16_t IMAGE_SIZE = 60;
++    static constexpr uint16_t IMAGE_POSITION_X = 186;
++    static constexpr uint16_t IMAGE_POSITION_Y = 23;
++    static constexpr uint16_t IMAGEANIMATORVIEW_SIZE = 31;
++    static constexpr uint16_t IMAGEANIMATORVIEW_SPEED = 40;
++
++    // 血氧主图设置
++    static constexpr uint16_t IMAGE_PROGRESS_POSITION_X = 176;
++    static constexpr uint16_t IMAGE_PROGRESS_POSITION_Y = 13;
++
++    // 血氧%显示
++    static constexpr uint16_t LABEL_PERCENT_POSITION_X = 258;
++    static constexpr uint16_t LABEL_PERCENT_POSITION_Y = 40;
++
++    // 血氧柱状图
++    static constexpr int16 VIEW_MAX_X = 415;
++    static constexpr int16 VIEW_MIN_X = 35;
++    static constexpr int16 VIEW_MAX_Y = 150;
++    static constexpr int16 VIEW_MIN_Y = 0;
++    static constexpr int16 VIEW_WIDTH = 7;
++    static constexpr int16 VIEW_HEIGHT = 300;
++    static constexpr uint16_t VIEW_BACKGROUND_OPA = 127;
++    static constexpr uint16_t VIEW_BORDER_RADIUS = 5;
++    static constexpr uint16_t BORDER_OPA = 127;
++    static constexpr uint16_t BORDER_WIDTH = 20;
++
++    static constexpr uint16_t TITLE_LABEL_DEFAULT_HEIGHT = 30;
++    static constexpr uint16_t FONT_DEFAULT_SIZE = 20;
++    static constexpr uint16_t VIEW_DISTANCE_TO_LEFT_SIDE = 48;
++    static constexpr uint16_t TEXT_DISTANCE_TO_LEFT_SIDE = 50;
++    static constexpr uint16_t TEXT_DISTANCE_TO_TOP_SIDE = 11;
++    static constexpr uint16_t BUTTON_LABEL_SIZE = 26;
++    static constexpr uint8_t BUTTON_STYLE_BORDER_RADIUS_VALUE = 20;
++    static constexpr uint32 BUTTON_STYLE_BACKGROUND_COLOR_VALUE = 0xff0b1928;
++    static constexpr uint16_t BUTTON_WIDHT2 = 230;
++    static constexpr uint16_t BUTTON_HEIGHT2 = 80;
++
++    // 字体大小
++    static constexpr uint16_t PERCENT_FONT_SIZE = 25;
++
++    static constexpr uint16_t MATH_ZERO = 0;
++
++    static BloodOxygenView *g_pMainView = nullptr;
++    static ImageAnimatorInfo g_imageAnimatorInfo_new[31] = {
++        {PNG_BLOOD_FLOW_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++        {PNG_BLOOD_FLOW_IMAGE_30, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
++    };
++
++    BloodOxygenView::BloodOxygenView()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::BloodOxygenView");
++        imageViewMain = nullptr;
++        imageViewProgress = nullptr;
++        group = nullptr;
++        percent = nullptr;
++        testButton = nullptr;
++        circleProgress = nullptr;
++        imageAnimator = nullptr;
++        g_pMainView = this;
++        bloodbandoff = new BloodBandoffView();
++        if (bloodbandoff == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new BloodBandoffView fail");
++        }
 +    }
- UICircleProgress *BloodOxygenView::GetCircleProgress()
- {
-     return circleProgress;
- }
- 
- UILabelButton *BloodOxygenView::CreateAndSetUIButton(const char *title)
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUIButton");
-     UILabelButton* btn = new UILabelButton();
-     if (btn == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UILabelButton fail");
-         return nullptr;
 +
-     btn->SetPosition(TESTBUTTON_X, TESTBUTTON_Y, BUTTON_WIDHT2, BUTTON_HEIGHT2);
-     btn->SetText(title);
-     btn->SetTextColor(Color::Red());
-     btn->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BUTTON_LABEL_SIZE);
-     btn->SetAlign(TEXT_ALIGNMENT_CENTER);
-     btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::RELEASED);
-     btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED);
-     btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::INACTIVE);
-     btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED);
-     btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::PRESSED);
-     btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::INACTIVE);
-     UIView::OnClickListener* clickLeftListener = (UIView::OnClickListener*)OHOS::BloodOxygenPresenter::GetInstance();
-     if (clickLeftListener == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new clickLeftListener fail");
-         return nullptr;
-     }
-     btn->SetOnClickListener(clickLeftListener);
-     return btn;
- }
++    BloodOxygenView::~BloodOxygenView()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::~BloodOxygenView");
++        group->RemoveAll();
++        delete imageViewMain;
++        delete imageViewProgress;
++        delete group;
++        delete testButton;
++        delete percent;
++        delete circleProgress;
++        delete imageAnimator;
++        delete bloodbandoff;
++        imageViewMain = nullptr;
++        imageViewProgress = nullptr;
++        group = nullptr;
++        percent = nullptr;
++        testButton = nullptr;
++        circleProgress = nullptr;
++        imageAnimator = nullptr;
++        g_pMainView = nullptr;
++        bloodbandoff = nullptr;
 +    }
- 
- bool BloodOxygenView::SetOnDragListener()
- {
-     UIView::OnDragListener *dragListener = (UIView::OnDragListener*)OHOS::BloodOxygenPresenter::GetInstance();
-     if (dragListener == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnDragListener fail");
-         return false;
 +
-     group->SetDraggable(true);
-     group->SetTouchable(true);
-     group->SetOnDragListener(dragListener);
-     return true;
- }
++    BloodOxygenView *BloodOxygenView::GetInstance(void)
++    {
++        return g_pMainView;
 +    }
- UIView *BloodOxygenView::CreateAndSetUIView(int16 x, int16 y) const
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUIView");
-     UIView* view = new UIView();
-     if (view ==  nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new View fail");
-         return nullptr;
-     }
-     if (x > VIEW_MAX_X || x < VIEW_MIN_X) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::X error");
-         return nullptr;
-     }
-     if (y < VIEW_MIN_Y || y >VIEW_MAX_Y) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::Y error");
-         return nullptr;
 +
-     view->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
-     view->SetStyle(STYLE_BACKGROUND_OPA, VIEW_BACKGROUND_OPA); // 127 : background opacity
-     view->SetStyle(STYLE_BORDER_RADIUS, VIEW_BORDER_RADIUS); // 5 : radius value
-     view->SetStyle(STYLE_BORDER_COLOR, Color::Gray().full);
-     view->SetStyle(STYLE_BORDER_OPA, BORDER_OPA); // 127 : border opacity
-     view->SetStyle(STYLE_BORDER_WIDTH, BORDER_WIDTH); // 20 : border width
-     view->SetStyle(STYLE_PADDING_LEFT, MATH_ZERO);
-     view->SetStyle(STYLE_PADDING_RIGHT, MATH_ZERO);
-     view->SetStyle(STYLE_PADDING_TOP, MATH_ZERO);
-     view->SetStyle(STYLE_PADDING_BOTTOM, MATH_ZERO);
-     view->SetStyle(STYLE_MARGIN_LEFT, MATH_ZERO);
-     view->SetStyle(STYLE_MARGIN_RIGHT, MATH_ZERO);
-     view->SetStyle(STYLE_MARGIN_TOP, MATH_ZERO);
-     view->SetStyle(STYLE_MARGIN_BOTTOM, MATH_ZERO);
- 
-     view->SetPosition(x, VIEW_HEIGHT - y);
-     view->SetStyle(STYLE_BORDER_WIDTH, MATH_ZERO);
-     view->SetStyle(STYLE_BORDER_RADIUS, MATH_ZERO); // 2 : half width 10 : offset
-     view->Resize(VIEW_WIDTH, y);
-     return view;
- }
++    UILabel *BloodOxygenView::GetPercent()
++    {
++        return percent;
 +    }
- UICircleProgress *BloodOxygenView::CreateAndSetUICircleProgress()
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUICircleProgress");
-     UICircleProgress *circle = new UICircleProgress();
-     circle->SetPosition(CIRCLE_PROGRESS_POSITION_X, CIRCLE_PROGRESS_POSITION_Y,
-                         CIRCLE_PROGRESS_POSITION_WIDTH, CIRCLE_PROGRESS_POSITION_HEIGHT);
-     circle->SetCenterPosition(CIRCLE_PROGRESS_CENTER_X, CIRCLE_PROGRESS_CENTER_Y);
-     circle->SetRadius(CIRCLE_PROGRESS_RADIUS);
-     circle->SetValue(CIRCLE_PROGRESS_VALUE);
-     circle->SetBackgroundStyle(STYLE_LINE_WIDTH,
-                                circle->GetBackgroundStyle(STYLE_LINE_WIDTH) + CIRCLE_PROGRESS_WIDTH);
-     circle->SetForegroundStyle(STYLE_LINE_WIDTH,
-                                circle->GetForegroundStyle(STYLE_LINE_WIDTH) + CIRCLE_PROGRESS_WIDTH);
-     circle->SetStyle(STYLE_PADDING_LEFT, CIRCLE_PROGRESS_LEFT);
-     circle->SetStyle(STYLE_PADDING_TOP, CIRCLE_PROGRESS_TOP);
-     circle->SetStartAngle(CIRCLE_PROGRESS_STARTANGLE);
-     circle->SetEndAngle(CIRCLE_PROGRESS_ENDANGLE);
-     circle->SetImage(nullptr, PNG_PROGRESS_BAR_TMAGE);
-     circle->SetLineColor(Color::Black());
- 
-     return circle;
- }
- 
- bool BloodOxygenView::InitImageDisplay()
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::InitImageDisplay");
-     imageViewMain = new UIImageView();
-     if (imageViewMain == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageView fail");
-         return false;
-     }
-     imageViewMain->SetPosition(MATH_ZERO, MATH_ZERO); // 30 :  offset
-     imageViewMain->SetSrc(PNG_BLOODOXYGEN_IMAGE_PATH);
-     group->Add(imageViewMain);
- 
-     imageAnimator = new UIImageAnimatorView();
-     if (imageAnimator == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageAnimatorView fail");
-         return false;
-     }
-     imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_new, IMAGEANIMATORVIEW_SIZE, IMAGEANIMATORVIEW_SPEED);
-     imageAnimator->Start();
-     imageAnimator->SetRepeat(true);
-     group->Add(imageAnimator);
- 
-     imageViewProgress = new UIImageView();
-     if (imageViewProgress == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageView fail");
-         return false;
 +
-     imageViewProgress->SetPosition(IMAGE_PROGRESS_POSITION_X, IMAGE_PROGRESS_POSITION_Y); // 30 :  offset
-     imageViewProgress->SetSrc(PNG_PROGRESS_BAR_TMAGE);
-     group->Add(imageViewProgress);
++    UIViewGroup *BloodOxygenView::GetBloodOxygenGroup()
++    {
++        return group;
 +    }
-     return true;
- }
 +
- void BloodOxygenView::OnStart()
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStart");
-     View<BloodOxygenPresenter>::OnStart();
++    UILabelButton *BloodOxygenView::GetTestButton()
++    {
++        return testButton;
++    }
 +
-     group = new UIViewGroup();
-     if (group == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new group fail");
-         return;
++    UICircleProgress *BloodOxygenView::GetCircleProgress()
++    {
++        return circleProgress;
++    }
 +
++    UILabelButton *BloodOxygenView::CreateAndSetUIButton(const char *title)
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUIButton");
++        UILabelButton *btn = new UILabelButton();
++        if (btn == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UILabelButton fail");
++            return nullptr;
++        }
++        btn->SetPosition(TESTBUTTON_X, TESTBUTTON_Y, BUTTON_WIDHT2, BUTTON_HEIGHT2);
++        btn->SetText(title);
++        btn->SetTextColor(Color::White());
++        btn->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BUTTON_LABEL_SIZE);
++        btn->SetAlign(TEXT_ALIGNMENT_CENTER);
++        btn->SetStyle(STYLE_BACKGROUND_COLOR, 0xffCD492C);
++        btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::INACTIVE);
++#if 0
++        btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::RELEASED);
++        btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED);
++        btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::INACTIVE);
++        btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED);
++        btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::PRESSED);
++#endif
++        UIView::OnClickListener *clickLeftListener = (UIView::OnClickListener *)OHOS::BloodOxygenPresenter::GetInstance();
++        if (clickLeftListener == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new clickLeftListener fail");
++            return nullptr;
++        }
++        btn->SetOnClickListener(clickLeftListener);
++        return btn;
++    }
 +
-     group->SetPosition(MATH_ZERO, MATH_ZERO);
-     group->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
++    bool BloodOxygenView::SetOnDragListener()
++    {
++        UIView::OnDragListener *dragListener = (UIView::OnDragListener *)OHOS::BloodOxygenPresenter::GetInstance();
++        if (dragListener == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnDragListener fail");
++            return false;
++        }
++        group->SetDraggable(true);
++        group->SetTouchable(true);
++        group->SetOnDragListener(dragListener);
++        return true;
 +    }
-     //增加按键监听
-       RootView::OnKeyActListener*keyactListener = (RootView::OnKeyActListener*)OHOS::BloodOxygenPresenter::GetInstance();
-       RootView::GetInstance()->SetOnKeyActListener(keyactListener);
 +
-     if (InitImageDisplay() == false) {
-         return;
++    UIView *BloodOxygenView::CreateAndSetUIView(int16 x, int16 y) const
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUIView");
++        UIView *view = new UIView();
++        if (view == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new View fail");
++            return nullptr;
++        }
++        if (x > VIEW_MAX_X || x < VIEW_MIN_X)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::X error");
++            return nullptr;
++        }
++        if (y < VIEW_MIN_Y || y > VIEW_MAX_Y)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::Y error");
++            return nullptr;
++        }
++        view->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
++        view->SetStyle(STYLE_BACKGROUND_OPA, VIEW_BACKGROUND_OPA); // 127 : background opacity
++        view->SetStyle(STYLE_BORDER_RADIUS, VIEW_BORDER_RADIUS);   // 5 : radius value
++        view->SetStyle(STYLE_BORDER_COLOR, Color::Gray().full);
++        view->SetStyle(STYLE_BORDER_OPA, BORDER_OPA);     // 127 : border opacity
++        view->SetStyle(STYLE_BORDER_WIDTH, BORDER_WIDTH); // 20 : border width
++        view->SetStyle(STYLE_PADDING_LEFT, MATH_ZERO);
++        view->SetStyle(STYLE_PADDING_RIGHT, MATH_ZERO);
++        view->SetStyle(STYLE_PADDING_TOP, MATH_ZERO);
++        view->SetStyle(STYLE_PADDING_BOTTOM, MATH_ZERO);
++        view->SetStyle(STYLE_MARGIN_LEFT, MATH_ZERO);
++        view->SetStyle(STYLE_MARGIN_RIGHT, MATH_ZERO);
++        view->SetStyle(STYLE_MARGIN_TOP, MATH_ZERO);
++        view->SetStyle(STYLE_MARGIN_BOTTOM, MATH_ZERO);
++
++        view->SetPosition(x, VIEW_HEIGHT - y);
++        view->SetStyle(STYLE_BORDER_WIDTH, MATH_ZERO);
++        view->SetStyle(STYLE_BORDER_RADIUS, MATH_ZERO); // 2 : half width 10 : offset
++        view->Resize(VIEW_WIDTH, y);
++        return view;
++    }
 +
-     if (SetOnDragListener() == false) {
-         return;
++    UICircleProgress *BloodOxygenView::CreateAndSetUICircleProgress()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUICircleProgress");
++        UICircleProgress *circle = new UICircleProgress();
++        circle->SetPosition(CIRCLE_PROGRESS_POSITION_X, CIRCLE_PROGRESS_POSITION_Y,
++                            CIRCLE_PROGRESS_POSITION_WIDTH, CIRCLE_PROGRESS_POSITION_HEIGHT);
++        circle->SetCenterPosition(CIRCLE_PROGRESS_CENTER_X, CIRCLE_PROGRESS_CENTER_Y);
++        circle->SetRadius(CIRCLE_PROGRESS_RADIUS);
++        circle->SetValue(CIRCLE_PROGRESS_VALUE);
++        circle->SetBackgroundStyle(STYLE_LINE_WIDTH,
++                                   circle->GetBackgroundStyle(STYLE_LINE_WIDTH) + CIRCLE_PROGRESS_WIDTH);
++        circle->SetForegroundStyle(STYLE_LINE_WIDTH,
++                                   circle->GetForegroundStyle(STYLE_LINE_WIDTH) + CIRCLE_PROGRESS_WIDTH);
++        circle->SetStyle(STYLE_PADDING_LEFT, CIRCLE_PROGRESS_LEFT);
++        circle->SetStyle(STYLE_PADDING_TOP, CIRCLE_PROGRESS_TOP);
++        circle->SetStartAngle(CIRCLE_PROGRESS_STARTANGLE);
++        circle->SetEndAngle(CIRCLE_PROGRESS_ENDANGLE);
++        circle->SetImage(nullptr, PNG_PROGRESS_BAR_TMAGE);
++        circle->SetLineColor(Color::Black());
++
++        return circle;
 +    }
 +
-     circleProgress = CreateAndSetUICircleProgress();
-     if (circleProgress == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new circleProgress fail");
-         return;
++    bool BloodOxygenView::InitImageDisplay()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::InitImageDisplay");
++        imageViewMain = new UIImageView();
++        if (imageViewMain == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageView fail");
++            return false;
++        }
++        imageViewMain->SetPosition(MATH_ZERO, MATH_ZERO); // 30 :  offset
++        imageViewMain->SetSrc(PNG_BLOODOXYGEN_IMAGE_PATH);
++        group->Add(imageViewMain);
++
++        imageAnimator = new UIImageAnimatorView();
++        if (imageAnimator == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageAnimatorView fail");
++            return false;
++        }
++        imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_new, IMAGEANIMATORVIEW_SIZE, IMAGEANIMATORVIEW_SPEED);
++        imageAnimator->Start();
++        imageAnimator->SetRepeat(true);
++        group->Add(imageAnimator);
++
++        imageViewProgress = new UIImageView();
++        if (imageViewProgress == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageView fail");
++            return false;
++        }
++        imageViewProgress->SetPosition(IMAGE_PROGRESS_POSITION_X, IMAGE_PROGRESS_POSITION_Y); // 30 :  offset
++        imageViewProgress->SetSrc(PNG_PROGRESS_BAR_TMAGE);
++        group->Add(imageViewProgress);
++
++        return true;
 +    }
 +
-     group->Add(circleProgress);
++    void BloodOxygenView::OnStart()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStart");
++        View<BloodOxygenPresenter>::OnStart();
++
++        group = new UIViewGroup();
++        if (group == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new group fail");
++            return;
++        }
++        group->SetPosition(MATH_ZERO, MATH_ZERO);
++        group->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
++
++        // 增加按键监听
++        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BloodOxygenPresenter::GetInstance();
++        RootView::GetInstance()->SetOnKeyActListener(keyactListener);
++
++        if (InitImageDisplay() == false)
++        {
++            return;
++        }
++
++        if (SetOnDragListener() == false)
++        {
++            return;
++        }
++
++        circleProgress = CreateAndSetUICircleProgress();
++        if (circleProgress == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new circleProgress fail");
++            return;
++        }
++        group->Add(circleProgress);
++
++        percent = new UILabel();
++        if (percent == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new Label fail");
++            return;
++        }
++        percent->SetPosition(LABEL_PERCENT_POSITION_X, LABEL_PERCENT_POSITION_Y,
++                             VIEW_DISTANCE_TO_LEFT_SIDE, TITLE_LABEL_DEFAULT_HEIGHT);
++        percent->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
++        percent->SetText("%97");
++        percent->SetFont(DEFAULT_VECTOR_FONT_FILENAME, PERCENT_FONT_SIZE);
++        percent->SetTextColor(Color::White());
++        group->Add(percent);
++
++        testButton = CreateAndSetUIButton("开始检测");
++        if (testButton == nullptr)
++        {
++            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new Button fail");
++            return;
++        }
++        group->Add(testButton);
++
++        if (OHOS::BloodOxygenModel::GetInstance()->GetBloodOxygenViewStatus() == true)
++        {
++            testButton->SetTouchable(false);
++            percent->SetText("");
++        }
++
++        BloodBandoffView::GetInstance()->CreateUIViewGroup();
++
++        RootView::GetInstance()->Add(group);
++        RootView::GetInstance()->Add(BloodBandoffView::GetInstance()->GetBandoffViewGroup());
++        BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(false);
 +    }
-     percent = new UILabel();
-     if (percent == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new Label fail");
-         return;
 +
-     percent->SetPosition(LABEL_PERCENT_POSITION_X, LABEL_PERCENT_POSITION_Y,
-                          VIEW_DISTANCE_TO_LEFT_SIDE, TITLE_LABEL_DEFAULT_HEIGHT);
-     percent->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-     percent->SetText("%97");
-     percent->SetFont(DEFAULT_VECTOR_FONT_FILENAME, PERCENT_FONT_SIZE);
-     percent->SetTextColor(Color::Red());
-     group->Add(percent);
- 
-     testButton = CreateAndSetUIButton("测试");
-     if (testButton == nullptr) {
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new Button fail");
++    void BloodOxygenView::OnSetUpView()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnSetUpView");
++        View<BloodOxygenPresenter>::OnSetUpView();
++        Draw();
 +    }
-     group->Add(testButton);
++
++    void BloodOxygenView::OnTearDownView()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnTearDownView");
++        View<BloodOxygenPresenter>::OnTearDownView();
 +        return;
 +    }
-     if (OHOS::BloodOxygenModel::GetInstance()->GetBloodOxygenViewStatus() == true) {
-         testButton->SetTouchable(false);
-         percent->SetText("");
 +
- 
-     BloodBandoffView::GetInstance()->CreateUIViewGroup();
- 
-     RootView::GetInstance()->Add(group);
-     RootView::GetInstance()->Add(BloodBandoffView::GetInstance()->GetBandoffViewGroup());
-     BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(false);
- }
- 
- void BloodOxygenView::OnSetUpView()
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnSetUpView");
-     View<BloodOxygenPresenter>::OnSetUpView();
-     Draw();
- }
- 
- 
- void BloodOxygenView::OnTearDownView()
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnTearDownView");
-     View<BloodOxygenPresenter>::OnTearDownView();
-     return;
- }
- 
- void BloodOxygenView::OnStop()
- {
-     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStop");
-     View<BloodOxygenPresenter>::OnStop();
-     RootView::GetInstance()->RemoveAll();
-     return;
- }
++    void BloodOxygenView::OnStop()
++    {
++        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnStop");
++        View<BloodOxygenPresenter>::OnStop();
++        RootView::GetInstance()->RemoveAll();
++        return;
 +    }
 +}
index c1da733,0000000..52d572a
mode 100644,000000..100644
--- /dev/null
@@@ -1,109 -1,0 +1,109 @@@
- #include "blood/include/BloodView.h"
 +/*
 + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
 + * Description: MainViewSample
 + * Author:
 + * Create:
 + */
 +
 +#ifndef MAIN_VIEW_SAMPLE_H
 +#define MAIN_VIEW_SAMPLE_H
 +
 +#include <string>
 +#include "View.h"
 +#include "window/window.h"
 +#include "components/root_view.h"
 +#include "swipe_effect/zoom_effect.h"
 +#include "BaseView.h"
 +#include "ChangeSliceListener.h"
 +#include "font/ui_font.h"
 +#include "graphic_config.h"
 +#include "ModelListenerSample.h"
 +#include "ScreenModels.h"
 +#include "ActivityWeekView.h"
 +#include "compass/include/CompassControlView.h"
 +#include "MainClockView.h"
 +#include "PlayersView.h"
 +#include "MainPresenterSample.h"
 +#include "HeartRateView.h"
 +#include "components/ui_card_page.h"
 +#include "PullUpDownView.h"
 +#include "components/ui_cross_view.h"
 +#include "dial/include/Digital_clockView.h"
-         BloodView *bloodView{nullptr};
++#include "blood/include/BloodCardView.h"
 +#include "traing/include/TraingView.h"
 +#include "ApplistCardView.h"
 +#include "weather/include/WeatherControlView.h"
 +#include "message/include/MessageCardView.h"
 +namespace OHOS
 +{
 +    class MainPresenterSample;
 +    class MainViewSample : public View<MainPresenterSample>
 +    {
 +    public:
 +        MainViewSample();
 +        virtual ~MainViewSample();
 +        static MainViewSample *GetInstance(void);
 +        void OnStart() override;
 +        void OnSetUpView() override;
 +        void OnTearDownView() override;
 +        void OnStop() override;
 +        UICardPage *InitWatchFacePage(void);
 +        UICardPage *InitHeartRatePage(void);
 +        UICardPage *InitActivityPage(void);
 +        UICardPage *InitCompassPage(void);
 +        UICardPage *InitMusicPlayerPage(void);
 +        UICardPage *InitBloodOxygenPage(void);
 +        UICardPage *InitWeatherPage(void);
 +        UICardPage *InitTrainingPage(void);
 +        UICardPage *InitApplistPage(void);
 +        void AnimatorStart(int pageIndex);
 +        void AnimatorStop(void);
 +        uint16_t GetHorCurrentPage() const
 +        {
 +            return mainSwipeGroup->GetCurrentPageId(UISwipeView::HORIZONTAL); // 0: horizontal; 1: vertical
 +        }
 +
 +        UIView *GetMainViewGroup(void) const
 +        {
 +            return mainSwipeGroup;
 +        }
 +
 +        bool IsMainView(void);
 +        void SetDragFg(bool continFg);
 +        bool GetDragFg(void);
 +
 +    private:
 +        int16_t maxPage{0};
 +        bool continuDragFg{false};
 +        PullUpDownView *dropDownView{nullptr};
 +        /* -------------------------------------------------------------------------- */
 +        MessageCardView *messageView{nullptr};
 +        UILabel *MessageLable = nullptr;
 +        UIList *Messagelist = nullptr;
 +        IconAdapter *list1adapter_ = nullptr;
 +        List<IconItemNode *> *Messagelistdate = nullptr;
 +        /* -------------------------------------------------------------------------- */
 +        Digital_clockView *mainClockView{nullptr};
 +        ActivityWeekView *activityWeekView{nullptr};
 +        PlayersView *playersView{nullptr};
 +        CompassControlView *compassControlView{nullptr};
 +        HeartRateView *heartRateView{nullptr};
 +        Digital_clockView *dialView{nullptr};
++        BloodCardView *bloodView{nullptr};
 +        WeatherControlView *weatherControlView{nullptr};
 +        TraingView *traingView{nullptr};
 +        ApplistCardView *applistCardView{nullptr};
 +        /* -------------------------------------------------------------------------- */
 +        UICardPage *recordCard[MAX_CARD]{nullptr};
 +        bool pageStatus[MAX_CARD]{false};
 +        UICrossView *mainSwipeGroup{nullptr};
 +        ZoomEffect *callback{nullptr};
 +
 +        bool HorizontalViewInit(void);
 +        void VerticalViewInit(void);
 +        void VertViewLoad(void);
 +        void HorViewLoad(void);
 +        UICardPage *CreatePage(int32_t cardId);
 +    };
 +} // namespace OHOS
 +#endif // MAIN_VIEW_SAMPLE_H
index b4d46fb,0000000..a6a5973
mode 100644,000000..100644
--- /dev/null
@@@ -1,521 -1,0 +1,523 @@@
-         messageView->PreLoad();
 +/*
 + * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
 + * Description: MainViewSample
 + * Author:
 + * Create: 2021-10-18
 + */
 +#include "wearable_log.h"
 +#include "MainViewSample.h"
 +#include "graphic_service.h"
 +
 +namespace OHOS
 +{
 +
 +    static MainViewSample *g_pMainView = nullptr;
 +    static constexpr uint16_t MESLABLE_X_TMP = 177;
 +    static constexpr uint16_t MESLABLE_Y_TMP = 212;
 +    static constexpr uint16_t MESLABLE_WIDTH_TMP = 100;
 +    static constexpr uint16_t MESLABLE_HEIGHT_TMP = 30;
 +    static constexpr uint8_t FONT_SIZE_TMP = 24;
 +    static constexpr uint8_t PULL_MIDDLE_VIEW_OPA = 0;
 +
 +    struct MainViewMapper
 +    {
 +        CardId id;
 +        UICardPage *(MainViewSample::*func)(void);
 +    };
 +
 +    static const MainViewMapper PageMapper[] = {
 +        {NEW_DAIL, &MainViewSample::InitWatchFacePage},
 +        {HEART_RATE, &MainViewSample::InitHeartRatePage},
 +        {BloodOxygen, &MainViewSample::InitBloodOxygenPage},
 +        {TRAINING, &MainViewSample::InitTrainingPage},
 +        {COMPASS, &MainViewSample::InitCompassPage},
 +        {WEATHER, &MainViewSample::InitWeatherPage},
 +        {PLAYER, &MainViewSample::InitMusicPlayerPage},
 +#if 0
 +        {APPLIST,&MainViewSample::InitApplistPage}
 +#endif
 +    };
 +
 +    MainViewSample::MainViewSample()
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::MainViewSample");
 +        g_pMainView = this;
 +    }
 +
 +    MainViewSample::~MainViewSample()
 +    {
 +        dropDownView->ClearBackgroundBlur();
 +        messageView->ClearBackgroundBlur();
 +
 +        for (int32_t i = 0; i < maxPage; i++)
 +        {
 +            recordCard[i] = nullptr;
 +            pageStatus[i] = false;
 +        }
 +        mainSwipeGroup->RemoveAll();
 +        /* -------------------------------------------------------------------------- */
 +#if 0
 +        UIView *view = static_cast<UICrossView *>(MainViewSample::mainSwipeGroup)->GetChildrenHead();
 +        while (view != nullptr)
 +        {
 +            printf("delete\n");
 +            UIView *tempView = view;
 +            view = view->GetNextSibling();
 +            if (tempView->GetParent())
 +            {
 +                static_cast<UICardPage *>(tempView->GetParent())->Remove(tempView);
 +            }
 +            delete tempView;
 +        }
 +#endif
 +        /* -------------------------------------------------------------------------- */
 +        if (activityWeekView != nullptr)
 +        {
 +            delete activityWeekView;
 +            activityWeekView = nullptr;
 +        }
 +
 +        if (playersView != nullptr)
 +        {
 +            delete playersView;
 +            playersView = nullptr;
 +        }
 +
 +        if (heartRateView != nullptr)
 +        {
 +            delete heartRateView;
 +            heartRateView = nullptr;
 +        }
 +        if (dropDownView != nullptr)
 +        {
 +            delete dropDownView;
 +            dropDownView = nullptr;
 +        }
 +        /* -------------------------------------------------------------------------- */
 +        if (messageView != nullptr)
 +        {
 +            messageView->RemoveAll();
 +            delete messageView;
 +            messageView = nullptr;
 +        }
 +        if (MessageLable != nullptr)
 +        {
 +            delete MessageLable;
 +            MessageLable = nullptr;
 +        }
 +        if (Messagelist != nullptr)
 +        {
 +            delete Messagelist;
 +            Messagelist = nullptr;
 +        }
 +        if (list1adapter_ != nullptr)
 +        {
 +            delete list1adapter_;
 +            list1adapter_ = nullptr;
 +        }
 +        /* -------------------------------------------------------------------------- */
 +        if (compassControlView != nullptr)
 +        {
 +            delete compassControlView;
 +            compassControlView = nullptr;
 +        }
 +        /* -------------------------------------------------------------------------- */
 +        if (mainClockView != nullptr)
 +        {
 +            // mainClockView->RemoveAll();
 +            delete mainClockView;
 +            mainClockView = nullptr;
 +        }
 +        if (dialView != nullptr)
 +        {
 +            delete dialView;
 +            dialView = nullptr;
 +        }
 +        if (bloodView != nullptr)
 +        {
 +            // bloodView->RemoveAll();
 +            delete bloodView;
 +            bloodView = nullptr;
 +        }
 +        if (traingView != nullptr)
 +        {
 +            // traingView->RemoveAll();
 +            delete traingView;
 +            traingView = nullptr;
 +        }
 +        if (applistCardView != nullptr)
 +        {
 +            delete applistCardView;
 +            applistCardView = nullptr;
 +        }
 +        /* -------------------------------------------------------------------------- */
 +        if (mainSwipeGroup != nullptr)
 +        {
 +            delete mainSwipeGroup;
 +            mainSwipeGroup = nullptr;
 +        }
 +
 +        g_pMainView = nullptr;
 +    }
 +
 +    MainViewSample *MainViewSample::GetInstance(void)
 +    {
 +        return g_pMainView;
 +    }
 +
 +    void MainViewSample::OnStart()
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::OnStart");
 +        View<MainPresenterSample>::OnStart();
 +        BaseView::RootView(Color::Black().full);
 +
 +        mainSwipeGroup = new UICrossView();
 +        if (mainSwipeGroup == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainSwipeGroup new fail");
 +            return;
 +        }
 +
 +        if (callback == nullptr)
 +        {
 +            callback = new ZoomEffect();
 +            if (callback == nullptr)
 +            {
 +                delete mainSwipeGroup;
 +                mainSwipeGroup = nullptr;
 +                GRAPHIC_LOGE("SwipeCallback new fail\n");
 +                return;
 +            }
 +        }
 +
 +        HorizontalViewInit();
 +        HorViewLoad();
 +        VerticalViewInit();
 +        VertViewLoad();
 +        mainSwipeGroup->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
 +        mainSwipeGroup->SetAnimatorTime(50); // 50: animator drag time(ms);
 +        mainSwipeGroup->SetLoopState(true);
 +        mainSwipeGroup->EnableScreenCap(true);
 +        mainSwipeGroup->RegisterSwipeCallback(callback);
 +        // 卡片切换
 +        mainSwipeGroup->SetHorCurrentPage(mainClockView->GetViewIndex());
 +        SetContainerView(mainSwipeGroup);
 +    }
 +
 +    bool MainViewSample::HorizontalViewInit(void)
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::HorizontalViewInit");
 +        UISwipeView::OnSwipeListener *listener = nullptr;
 +
 +        maxPage = ScreenModels::GetInstance()->GetMaxCard();
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::HorizontalViewInit1");
 +
 +        for (int16_t i = 0; i < maxPage; i++)
 +        {
 +            recordCard[i] = CreatePage(i);
 +            if (recordCard[i] == nullptr)
 +            {
 +                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainViewSample:: recordCard %d error", i);
 +                return false;
 +            }
 +            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample:: recordCard[%d]:%p", i, recordCard[i]);
 +        }
 +
 +        listener = static_cast<UISwipeView::OnSwipeListener *>(MainPresenterSample::GetInstance());
 +        if (listener == nullptr)
 +        {
 +            return false;
 +        }
 +        MainPresenterSample::GetInstance()->setCallback(callback);
 +        mainSwipeGroup->SetOnSwipeListener(listener);
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitPage over");
 +        return true;
 +    }
 +
 +    void MainViewSample::HorViewLoad(void)
 +    {
 +        for (int16_t i = 0; i < maxPage; i++)
 +        {
 +            mainSwipeGroup->HorAdd(recordCard[i]);
 +        }
 +    }
 +
 +    void MainViewSample::VerticalViewInit(void)
 +    {
 +        dropDownView = new PullUpDownView();
 +        if (dropDownView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropDownView new fail");
 +            return;
 +        }
 +        dropDownView->PreLoad();
 +        dropDownView->SetViewId("dropDownView");
 +        dropDownView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
 +        dropDownView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
 +#if 1
 +        messageView = new MessageCardView();
 +        if (messageView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageView new fail");
 +            return;
 +        }
 +        if (MessageLable == nullptr)
 +        {
 +            MessageLable = new UILabel();
 +        }
 +        MessageLable->SetPosition(173, 52, 120, 35);
 +        MessageLable->Resize(120, 35);
 +        MessageLable->SetStyle(STYLE_TEXT_FONT, 30);
 +        MessageLable->SetStyle(STYLE_LINE_HEIGHT, 36);
 +        MessageLable->SetText("信息通知");
 +        MessageLable->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
 +        MessageLable->SetStyle(STYLE_TEXT_COLOR, Color::White().full);
 +        MessageLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
 +        messageView->Add(MessageLable);
 +        /* -------------------------------------------------------------------------- */
-         bloodView = new BloodView();
++
 +        messageView->SetViewId("messageView");
 +        messageView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
 +        messageView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
++        messageView->PreLoad();
 +        messageView->SetDraggable(false);
++        messageView->SetIntercept(true);
 +#endif
 +/* -------------------------------------------------------------------------- */
 +#if 0
 +        messageView = new UICardPage();
 +        if (messageView == nullptr)
 +        {
 +            {
 +                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageView new fail");
 +                return;
 +            }
 +        }
 +        messageView->SetPosition(0, 0);
 +        messageView->SetWidth(Screen::GetInstance().GetWidth());
 +        messageView->SetHeight(Screen::GetInstance().GetHeight());
 +        messageView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
 +        messageView->SetViewId("messageView");
 +        messageView->SetTouchable(true);
 +        messageView->SetIntercept(true);
 +        MessageLable = new UILabel();
 +        if (MessageLable == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageLable new fail");
 +            return;
 +        }
 +        MessageLable->SetPosition(MESLABLE_X_TMP, MESLABLE_Y_TMP, MESLABLE_WIDTH_TMP, MESLABLE_HEIGHT_TMP);
 +        MessageLable->SetText("无消息");
 +        MessageLable->SetAlign(TEXT_ALIGNMENT_CENTER);
 +        MessageLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_SIZE_TMP);
 +        MessageLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
 +        messageView->Add(MessageLable);
 +#endif
 +    }
 +
 +    void MainViewSample::VertViewLoad(void)
 +    {
 +        mainSwipeGroup->VerAdd(dropDownView, UICrossView::VPage::UP_PAGE);
 +        mainSwipeGroup->VerAdd(messageView, UICrossView::VPage::DOWN_PAGE);
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::PullViewLoad::Pull View Load complete");
 +    }
 +
 +    void MainViewSample::OnSetUpView()
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::OnSetUpView");
 +        View<MainPresenterSample>::OnSetUpView();
 +
 +        // show timerView
 +        Draw();
 +    }
 +
 +    void MainViewSample::OnTearDownView()
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::OnTearDownView");
 +        View<MainPresenterSample>::OnTearDownView();
 +        return;
 +    }
 +
 +    void MainViewSample::OnStop()
 +    {
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::OnStop");
 +        View<MainPresenterSample>::OnStop();
 +        container_ = nullptr;
 +
 +        messageView->RemoveAll();
 +        RootView::GetInstance()->ClearOnKeyActListener();
 +        RootView::GetInstance()->RemoveAll();
 +        return;
 +    }
 +
 +    UICardPage *MainViewSample::InitWatchFacePage(void)
 +    {
 +        mainClockView = new Digital_clockView();
 +        if (mainClockView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainClockView new fail");
 +            return nullptr;
 +        }
 +        return mainClockView;
 +    }
 +
 +    UICardPage *MainViewSample::InitHeartRatePage(void)
 +    {
 +        heartRateView = new HeartRateView();
 +        if (heartRateView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heartRateView new fail");
 +            return nullptr;
 +        }
 +        return heartRateView;
 +    }
 +
 +    UICardPage *MainViewSample::InitActivityPage(void)
 +    {
 +        activityWeekView = new ActivityWeekView();
 +        if (activityWeekView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "activityWeekView new fail");
 +            return nullptr;
 +        }
 +        return activityWeekView;
 +    }
 +    // 主界面音乐界面
 +    UICardPage *MainViewSample::InitMusicPlayerPage(void)
 +    {
 +        playersView = new PlayersView();
 +        if (playersView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView new fail");
 +            return nullptr;
 +        }
 +        return playersView;
 +    }
 +    // 主界面指南针卡片
 +    UICardPage *MainViewSample::InitCompassPage(void)
 +    {
 +        compassControlView = new CompassControlView();
 +        if (compassControlView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "compassControlView new fail");
 +            return nullptr;
 +        }
 +        return compassControlView;
 +    }
 +    // 主界面血氧卡片
 +    UICardPage *MainViewSample::InitBloodOxygenPage(void)
 +    {
++        bloodView = new BloodCardView();
 +        if (bloodView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodView new fail");
 +            return nullptr;
 +        }
 +        return bloodView;
 +    }
 +    // 主界面训练卡片
 +    UICardPage *MainViewSample::InitTrainingPage(void)
 +    {
 +        traingView = new TraingView();
 +        if (traingView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "traingView new fail");
 +            return nullptr;
 +        }
 +        return traingView;
 +    }
 +
 +    // 主界面天气卡片
 +    UICardPage *MainViewSample::InitWeatherPage(void)
 +    {
 +        weatherControlView = new WeatherControlView();
 +        if (weatherControlView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainweatherView new fail");
 +            return nullptr;
 +        }
 +        return weatherControlView;
 +    }
 +
 +    // 主界面功能列表界面
 +    UICardPage *MainViewSample::InitApplistPage(void)
 +    {
 +        applistCardView = new ApplistCardView();
 +        if (applistCardView == nullptr)
 +        {
 +            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "applistCardView new fail");
 +            return nullptr;
 +        }
 +        return applistCardView;
 +    }
 +
 +    UICardPage *MainViewSample::CreatePage(int32_t StreamId)
 +    {
 +        uint16_t i;
 +        UICardPage *view = nullptr;
 +        int32_t cardId = ScreenModels::GetInstance()->GetCardPage(StreamId);
 +        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage cardId:%d", cardId);
 +        for (i = 0; i < sizeof(PageMapper) / sizeof(PageMapper[0]); i++)
 +        {
 +            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::CreatePage PageMapper[i].id=%d, cardId=%d, StreamId=%d", PageMapper[i].id, cardId, StreamId);
 +            //("MainViewSample::CreatePage PageMapper[i].id=%d, cardId=%d, StreamId=%d\n", PageMapper[i].id, cardId, StreamId);
 +            if (PageMapper[i].id == cardId)
 +            {
 +                view = (this->*(PageMapper[i].func))();
 +                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage view:%p", view);
 +                return view;
 +            }
 +        }
 +
 +        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreatePage view error!");
 +        return nullptr;
 +    }
 +
 +    void MainViewSample::AnimatorStart(int pageIndex)
 +    {
 +        if (heartRateView != nullptr && pageIndex == ScreenModels::GetInstance()->GetCardPage(HEART_RATE))
 +        {
 +            heartRateView->HeartbeatImageAnimatorStart();
 +        }
 +        if (dialView != nullptr && pageIndex == ScreenModels::GetInstance()->GetCardPage(NEW_DAIL))
 +        {
 +            dialView->ClockAnimatorStart();
 +        }
 +    }
 +
 +    void MainViewSample::AnimatorStop(void)
 +    {
 +        if (heartRateView != nullptr)
 +        {
 +            heartRateView->HeartbeatImageAnimatorStop();
 +        }
 +        if (dialView != nullptr)
 +        {
 +            dialView->ClockAnimatorStop();
 +        }
 +    }
 +
 +    bool MainViewSample::IsMainView(void)
 +    {
 +
 +        if (mainSwipeGroup->GetCurrentPageId(0) == ScreenModels::GetInstance()->GetCardPage(NEW_DAIL) &&
 +            mainSwipeGroup->GetCurrentPageId(1) == 1)
 +        { // 0: horizontal; 1: vertical
 +            return true;
 +        }
 +        else
 +        {
 +            return false;
 +        }
 +    }
 +
 +    void MainViewSample::SetDragFg(bool continFg)
 +    {
 +        continuDragFg = continFg;
 +    }
 +
 +    bool MainViewSample::GetDragFg(void)
 +    {
 +        return continuDragFg;
 +    }
 +}
index 916b39d,0000000..bf49e5d
mode 100644,000000..100644
Binary files differ
- /*\r
-  * Copyright (c) 2020 Huawei Device Co., Ltd.\r
-  * Licensed under the Apache License, Version 2.0 (the "License");\r
-  * you may not use this file except in compliance with the License.\r
-  * You may obtain a copy of the License at\r
-  *\r
-  *     http://www.apache.org/licenses/LICENSE-2.0\r
-  *\r
-  * Unless required by applicable law or agreed to in writing, software\r
-  * distributed under the License is distributed on an "AS IS" BASIS,\r
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-  * See the License for the specific language governing permissions and\r
-  * limitations under the License.\r
-  */\r
- \r
- #include "parameter.h"\r
- #include "param_adaptor.h"\r
- #include "hal_sys_param.h"\r
- #include "sysparam_errno.h"\r
- #include "utils_file.h"\r
- #include "ohos_errno.h"\r
- #include <ctype.h>\r
- #include <securec.h>\r
- \r
- static const char OHOS_PRODUCT_TYPE[] = {"****"};\r
- static const char OHOS_MANUFACTURE[] = {"****"};\r
- static const char OHOS_BRAND[] = {"****"};\r
- static const char OHOS_MARKET_NAME[] = {"OpenHarmony 3.2"};\r
- static const char OHOS_PRODUCT_SERIES[] = {"****"};\r
- static const char OHOS_PRODUCT_MODEL[] = {"****"};\r
- static const char OHOS_SOFTWARE_MODEL[] = {"****"};\r
- static const char OHOS_HARDWARE_MODEL[] = {"****"};\r
- static const char OHOS_HARDWARE_PROFILE[] = {"aout:true,display:true"};\r
- static const char OHOS_BOOTLOADER_VERSION[] = {"bootloader"};\r
- static const char OHOS_SECURITY_PATCH_TAG[] = {"2023/03/01"};\r
- static const char OHOS_ABI_LIST[] = {"****"};\r
- static const char OHOS_SERIAL[] = {"1234567890"};  // provided by OEM.\r
- const char g_roBuildOs[] = {"OpenHarmony"};\r
- const char g_roBuildVerShow[] = {"OpenHarmony 3.2.11.9"};\r
- const int g_roFirstApiLevel = 1;\r
- const char INCREMENTAL_VERSION[] = {"version"};\r
- const char BUILD_TYPE[] = {"BUILD_TYPE"};\r
- const char BUILD_USER[] = {"BUILD_USER"};\r
- const char BUILD_HOST[] = {"BUILD_HOST"};\r
- const char BUILD_TIME[] = {"BUILD_TIME"};\r
- const char BUILD_ROOTHASH[] = {"BUILD_ROOTHASH"};\r
- \r
- #define DATA_PATH          "/user/res/"\r
- #define MAX_KEY_PATH       128\r
- \r
- static boolean IsValidChar(const char ch)\r
- {\r
-     if (islower(ch) || isdigit(ch) || (ch == '_') || (ch == '.')) {\r
-         return TRUE;\r
-     }\r
-     return FALSE;\r
- }\r
- \r
- static boolean IsValidValue(const char* value, unsigned int len)\r
- {\r
-     if ((value == NULL) || (*value == '\0') || (strlen(value) >= len)) {\r
-         return FALSE;\r
-     }\r
-     return TRUE;\r
- }\r
- \r
- static boolean IsValidKey(const char* key)\r
- {\r
-     size_t keyLen = strlen(key);\r
-     if (!IsValidValue(key, MAX_KEY_LEN)) {\r
-         return FALSE;\r
-     }\r
-     if (key[0] == '.' || key[keyLen - 1] == '.') {\r
-         return FALSE;\r
-     }\r
- \r
-     for (size_t i = 0; i < keyLen; i++) {\r
-         if (key[i] == '.') {\r
-             if (key[i - 1] == '.') {\r
-                 return FALSE;\r
-             }\r
-             continue;\r
-         }\r
-         if (!IsValidChar(key[i])) {\r
-             return FALSE;\r
-         }\r
-     }\r
- \r
-     return TRUE;\r
- }\r
- \r
- int GetSysParam(const char* key, char* value, unsigned int len)\r
- {\r
-     if (key == NULL || (value == NULL) || (len > MAX_GET_VALUE_LEN)) {\r
-         return EC_INVALID;\r
-     }\r
-     if (!IsValidKey(key)) {\r
-         return EC_FAILURE;\r
-     }\r
- \r
-     unsigned int valueLen = 0;\r
-     char* keyPath = (char *)malloc(MAX_KEY_PATH + 1);\r
-     if (keyPath == NULL) {\r
-         return EC_FAILURE;\r
-     }\r
- \r
-     if (sprintf_s(keyPath, MAX_KEY_PATH + 1, "%s%s", DATA_PATH, key) < 0) {\r
-         free(keyPath);\r
-         return EC_FAILURE;\r
-     }\r
- \r
-     if (UtilsFileStat(keyPath, &valueLen) != EC_SUCCESS) {\r
-         return SYSPARAM_NOT_FOUND;\r
-     }\r
- \r
-     if (valueLen >= len) {\r
-         return EC_INVALID;\r
-     }\r
- \r
-     int fd = UtilsFileOpen(keyPath, O_RDONLY_FS, 0);\r
-     free(keyPath);\r
-     keyPath = NULL;\r
-     if (fd < 0) {\r
-         return EC_FAILURE;\r
-     }\r
- \r
-     int ret = UtilsFileRead(fd, value, valueLen);\r
-     UtilsFileClose(fd);\r
-     fd = -1;\r
-     if (ret < 0) {\r
-         return EC_FAILURE;\r
-     }\r
-     value[valueLen] = '\0';\r
- \r
-     return valueLen;\r
- }\r
- \r
- int SetSysParam(const char* key, const char* value)\r
- {\r
-     if (!IsValidKey(key) || !IsValidValue(value, MAX_VALUE_LEN)) {\r
-         return EC_INVALID;\r
-     }\r
- \r
-     char* keyPath = (char *)malloc(MAX_KEY_PATH + 1);\r
-     if (keyPath == NULL) {\r
-         return EC_FAILURE;\r
-     }\r
-     if (sprintf_s(keyPath, MAX_KEY_PATH + 1, "%s%s", DATA_PATH, key) < 0) {\r
-         free(keyPath);\r
-         return EC_FAILURE;\r
-     }\r
- \r
-     int fd = UtilsFileOpen(keyPath, O_RDWR_FS | O_CREAT_FS | O_TRUNC_FS, 0);\r
-     free(keyPath);\r
-     keyPath = NULL;\r
-     if (fd < 0) {\r
-         return EC_FAILURE;\r
-     }\r
- \r
-     int ret = UtilsFileWrite(fd, value, strlen(value));\r
-     UtilsFileClose(fd);\r
-     fd = -1;\r
-     return (ret < 0) ? EC_FAILURE : EC_SUCCESS;\r
- }\r
- \r
- char* HalGetProductType(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_PRODUCT_TYPE) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_PRODUCT_TYPE) + 1, OHOS_PRODUCT_TYPE) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetManufacture(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_MANUFACTURE) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_MANUFACTURE) + 1, OHOS_MANUFACTURE) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetBrand(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_BRAND) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_BRAND) + 1, OHOS_BRAND) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetMarketName(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_MARKET_NAME) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_MARKET_NAME) + 1, OHOS_MARKET_NAME) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetProductSeries(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_PRODUCT_SERIES) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_PRODUCT_SERIES) + 1, OHOS_PRODUCT_SERIES) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetProductModel(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_PRODUCT_MODEL) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_PRODUCT_MODEL) + 1, OHOS_PRODUCT_MODEL) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetSoftwareModel(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_SOFTWARE_MODEL) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_SOFTWARE_MODEL) + 1, OHOS_SOFTWARE_MODEL) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetHardwareModel(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_HARDWARE_MODEL) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_HARDWARE_MODEL) + 1, OHOS_HARDWARE_MODEL) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetHardwareProfile(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_HARDWARE_PROFILE) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_HARDWARE_PROFILE) + 1, OHOS_HARDWARE_PROFILE) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetSerial(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_SERIAL) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_SERIAL) + 1, OHOS_SERIAL) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetBootloaderVersion(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_BOOTLOADER_VERSION) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_BOOTLOADER_VERSION) + 1, OHOS_BOOTLOADER_VERSION) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetSecurityPatchTag(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_SECURITY_PATCH_TAG) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_SECURITY_PATCH_TAG) + 1, OHOS_SECURITY_PATCH_TAG) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- char* HalGetAbiList(void)\r
- {\r
-     char* value = (char*)malloc(strlen(OHOS_ABI_LIST) + 1);\r
-     if (value == NULL) {\r
-         return NULL;\r
-     }\r
-     if (strcpy_s(value, strlen(OHOS_ABI_LIST) + 1, OHOS_ABI_LIST) != 0) {\r
-         free(value);\r
-         return NULL;\r
-     }\r
-     return value;\r
- }\r
- \r
- int HalGetFirstApiVersion(void)\r
- {\r
-     return g_roFirstApiLevel;\r
- }\r
+ /*
+  * Copyright (c) 2020 Huawei Device Co., Ltd.
+  * Licensed under the Apache License, Version 2.0 (the "License");
+  * you may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at
+  *
+  *     http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ #include "parameter.h"
+ #include "param_adaptor.h"
+ #include "hal_sys_param.h"
+ #include "sysparam_errno.h"
+ #include "utils_file.h"
+ #include "ohos_errno.h"
+ #include <ctype.h>
+ #include <securec.h>
+ 
+ static const char OHOS_PRODUCT_TYPE[] = {"litewearable"}; 
+ static const char OHOS_MANUFACTURE[] = {"Tenxinbona"};
+ static const char OHOS_BRAND[] = {"KUMI"};
+ static const char OHOS_MARKET_NAME[] = {"KUMI WATCH Soar"};
+ static const char OHOS_PRODUCT_SERIES[] = {"KUMI WATCH Soar"};
+ static const char OHOS_PRODUCT_MODEL[] = {"Watch Soar"};
+ static const char OHOS_SOFTWARE_MODEL[] = {"1.0.0"};
+ static const char OHOS_HARDWARE_MODEL[] = {"FD230V10"};
+ static const char OHOS_HARDWARE_PROFILE[] = {"aout:true,display:true"};
+ static const char OHOS_BOOTLOADER_VERSION[] = {"bootloader"};
+ static const char OHOS_SECURITY_PATCH_TAG[] = {"2023/03/01"};
 -static const char OHOS_ABI_LIST[] = {"riscv-liteos"};
++static const char OHOS_ABI_LIST[] = {"****"};
+ static const char OHOS_SERIAL[] = {"1234567890"};  // provided by OEM.
 -const char g_roBuildOs[] = {"OpenHarmony-3.2.11.9"};
 -const char g_roBuildVerShow[] = {"1.0.0"};
++const char g_roBuildOs[] = {"OpenHarmony"};
++const char g_roBuildVerShow[] = {"OpenHarmony 3.2.11.9"};
+ const int g_roFirstApiLevel = 1;
+ const char INCREMENTAL_VERSION[] = {"version"};
 -const char BUILD_TYPE[] = {"release"};
 -const char BUILD_USER[] = {"luozheng"};
 -const char BUILD_HOST[] = {"linux"};
 -const char BUILD_TIME[] = {"20240125"};
 -const char BUILD_ROOTHASH[] = {"default"};
++const char BUILD_TYPE[] = {"BUILD_TYPE"};
++const char BUILD_USER[] = {"BUILD_USER"};
++const char BUILD_HOST[] = {"BUILD_HOST"};
++const char BUILD_TIME[] = {"BUILD_TIME"};
++const char BUILD_ROOTHASH[] = {"BUILD_ROOTHASH"};
+ 
+ #define DATA_PATH          "/user/res/"
+ #define MAX_KEY_PATH       128
+ 
+ static boolean IsValidChar(const char ch)
+ {
+     if (islower(ch) || isdigit(ch) || (ch == '_') || (ch == '.')) {
+         return TRUE;
+     }
+     return FALSE;
+ }
+ 
+ static boolean IsValidValue(const char* value, unsigned int len)
+ {
+     if ((value == NULL) || (*value == '\0') || (strlen(value) >= len)) {
+         return FALSE;
+     }
+     return TRUE;
+ }
+ 
+ static boolean IsValidKey(const char* key)
+ {
+     size_t keyLen = strlen(key);
+     if (!IsValidValue(key, MAX_KEY_LEN)) {
+         return FALSE;
+     }
+     if (key[0] == '.' || key[keyLen - 1] == '.') {
+         return FALSE;
+     }
+ 
 -    for (int i = 0; i < keyLen; i++) {
++    for (size_t i = 0; i < keyLen; i++) {
+         if (key[i] == '.') {
+             if (key[i - 1] == '.') {
+                 return FALSE;
+             }
+             continue;
+         }
+         if (!IsValidChar(key[i])) {
+             return FALSE;
+         }
+     }
+ 
+     return TRUE;
+ }
+ 
+ int GetSysParam(const char* key, char* value, unsigned int len)
+ {
+     if (key == NULL || (value == NULL) || (len > MAX_GET_VALUE_LEN)) {
+         return EC_INVALID;
+     }
+     if (!IsValidKey(key)) {
+         return EC_FAILURE;
+     }
+ 
+     unsigned int valueLen = 0;
+     char* keyPath = (char *)malloc(MAX_KEY_PATH + 1);
+     if (keyPath == NULL) {
+         return EC_FAILURE;
+     }
+ 
+     if (sprintf_s(keyPath, MAX_KEY_PATH + 1, "%s%s", DATA_PATH, key) < 0) {
+         free(keyPath);
+         return EC_FAILURE;
+     }
+ 
+     if (UtilsFileStat(keyPath, &valueLen) != EC_SUCCESS) {
+         return SYSPARAM_NOT_FOUND;
+     }
+ 
+     if (valueLen >= len) {
+         return EC_INVALID;
+     }
+ 
+     int fd = UtilsFileOpen(keyPath, O_RDONLY_FS, 0);
+     free(keyPath);
+     keyPath = NULL;
+     if (fd < 0) {
+         return EC_FAILURE;
+     }
+ 
+     int ret = UtilsFileRead(fd, value, valueLen);
+     UtilsFileClose(fd);
+     fd = -1;
+     if (ret < 0) {
+         return EC_FAILURE;
+     }
+     value[valueLen] = '\0';
+ 
+     return valueLen;
+ }
+ 
+ int SetSysParam(const char* key, const char* value)
+ {
+     if (!IsValidKey(key) || !IsValidValue(value, MAX_VALUE_LEN)) {
+         return EC_INVALID;
+     }
+ 
+     char* keyPath = (char *)malloc(MAX_KEY_PATH + 1);
+     if (keyPath == NULL) {
+         return EC_FAILURE;
+     }
+     if (sprintf_s(keyPath, MAX_KEY_PATH + 1, "%s%s", DATA_PATH, key) < 0) {
+         free(keyPath);
+         return EC_FAILURE;
+     }
+ 
+     int fd = UtilsFileOpen(keyPath, O_RDWR_FS | O_CREAT_FS | O_TRUNC_FS, 0);
+     free(keyPath);
+     keyPath = NULL;
+     if (fd < 0) {
+         return EC_FAILURE;
+     }
+ 
+     int ret = UtilsFileWrite(fd, value, strlen(value));
+     UtilsFileClose(fd);
+     fd = -1;
+     return (ret < 0) ? EC_FAILURE : EC_SUCCESS;
+ }
+ 
+ char* HalGetProductType(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_PRODUCT_TYPE) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_PRODUCT_TYPE) + 1, OHOS_PRODUCT_TYPE) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetManufacture(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_MANUFACTURE) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_MANUFACTURE) + 1, OHOS_MANUFACTURE) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetBrand(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_BRAND) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_BRAND) + 1, OHOS_BRAND) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetMarketName(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_MARKET_NAME) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_MARKET_NAME) + 1, OHOS_MARKET_NAME) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetProductSeries(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_PRODUCT_SERIES) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_PRODUCT_SERIES) + 1, OHOS_PRODUCT_SERIES) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetProductModel(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_PRODUCT_MODEL) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_PRODUCT_MODEL) + 1, OHOS_PRODUCT_MODEL) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetSoftwareModel(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_SOFTWARE_MODEL) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_SOFTWARE_MODEL) + 1, OHOS_SOFTWARE_MODEL) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetHardwareModel(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_HARDWARE_MODEL) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_HARDWARE_MODEL) + 1, OHOS_HARDWARE_MODEL) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetHardwareProfile(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_HARDWARE_PROFILE) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_HARDWARE_PROFILE) + 1, OHOS_HARDWARE_PROFILE) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetSerial(void)
+ {
 -    unsigned char sn_buf[32] = {0};
 -    unsigned int len = 0;
 -    unsigned int ret = zh_get_sn(sn_buf,&len);
 -    char* value = (char*)malloc(strlen(sn_buf) + 1);
++    char* value = (char*)malloc(strlen(OHOS_SERIAL) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
 -    if (strcpy_s(value, strlen(sn_buf) + 1, sn_buf) != 0) {
++    if (strcpy_s(value, strlen(OHOS_SERIAL) + 1, OHOS_SERIAL) != 0) {
+         free(value);
+         return NULL;
+     }
 -    
+     return value;
+ }
+ 
+ char* HalGetBootloaderVersion(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_BOOTLOADER_VERSION) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_BOOTLOADER_VERSION) + 1, OHOS_BOOTLOADER_VERSION) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetSecurityPatchTag(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_SECURITY_PATCH_TAG) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_SECURITY_PATCH_TAG) + 1, OHOS_SECURITY_PATCH_TAG) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ char* HalGetAbiList(void)
+ {
+     char* value = (char*)malloc(strlen(OHOS_ABI_LIST) + 1);
+     if (value == NULL) {
+         return NULL;
+     }
+     if (strcpy_s(value, strlen(OHOS_ABI_LIST) + 1, OHOS_ABI_LIST) != 0) {
+         free(value);
+         return NULL;
+     }
+     return value;
+ }
+ 
+ int HalGetFirstApiVersion(void)
+ {
+     return g_roFirstApiLevel;
+ }