辅助功能添加
author罗正yun <1732036298@qq.com>
Tue, 23 Jan 2024 11:15:22 +0000 (19:15 +0800)
committer罗正yun <1732036298@qq.com>
Tue, 23 Jan 2024 11:15:22 +0000 (19:15 +0800)
26 files changed:
code/sdk/application/wearable/nativeapp/CMakeLists.txt
code/sdk/application/wearable/nativeapp/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/nativeapp/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/nativeapp/nativelauncher/include/UiConfig.h
code/sdk/application/wearable/nativeapp/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingAttentionPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingAttentionView.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingView.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/QuickAccessPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/QuickAccessView.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/SecondaryFunctionPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/SecondaryFunctionView.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingAttentionPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingAttentionView.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingView.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/QuickAccessPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/QuickAccessView.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/SecondaryFunctionPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/SecondaryFunctionView.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/settings/src/SettingModel.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/FastTrainingAttentionVector.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/NEW_DEVICE.bin [deleted file]
code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/NEW_device.bin [new file with mode: 0644]
code/sdk/open_source/openharmony/base/startup/syspara_lite/src/hal_sys_param.c

index c417247..048429a 100755 (executable)
@@ -221,6 +221,7 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/system/src/SystemFactoryResetPresenter.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           
@@ -230,6 +231,7 @@ set(SOURCES
     ${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
@@ -238,7 +240,17 @@ set(SOURCES
     ${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
index cc5c74a..ae9a2b6 100755 (executable)
@@ -55,6 +55,10 @@ typedef enum : uint16_t
     VIEW_DISPLAY_BRIGHTNESS,     // 屏幕与亮度
     VIEW_BRIGHTNESS_CONTROL,     // 亮度调节
     VIEW_SCREEN_DURATION,        // 亮屏时长
+    VIEW_SECONDARY_FUNCTION,     // 辅助功能
+    VIEW_QUICK_ACCESS,           // 快速访问
+    VIEW_FAST_TRAINING,          // 快速训练
+    VIEW_FAST_TRAINING_ATTENTION,// 快速训练项目选择超出提示
     /* ---------------------------------- 测试界面 ---------------------------------- */
     VIEW_MESSAGE, // 信息通知
     /* -------------------------------------------------------------------------- */
index beb6b22..f83153d 100755 (executable)
@@ -60,8 +60,14 @@ namespace OHOS
         void InitMessageSlice(void);
         /* -------------------------------------------------------------------------- */
         void InitUIDisplayBrightnessSlice(void);
-        void InitBrightnessControlSlice(void);      
-        void InitScreenDurationSlice(void);    
+        void InitBrightnessControlSlice(void);
+        void InitScreenDurationSlice(void);
+        /* -------------------------------------------------------------------------- */
+        void InitSecondaryFunction(void);
+        void InitQuickAccessSlice(void);  
+        void InitFastTrainingSlice(void);
+        void InitFastTrainingAttentionSlice(void);
+
     private:
         void InitAllNativeSlices(void);
 
index 27aa05f..f261847 100755 (executable)
@@ -207,19 +207,20 @@ namespace OHOS
     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_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_FAST_TRAINING_ATTENTION_IMAGE = APP_RES_PATH "/FastTrainingAttentionVector.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";
     /* -------------------------------- 已删除的不必要图片 ------------------------------- */
index 6c46629..bda871f 100755 (executable)
 #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"
@@ -142,6 +151,11 @@ namespace OHOS
         {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
@@ -562,4 +576,45 @@ namespace OHOS
         }
         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);
+    }
+
 }
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingAttentionPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingAttentionPresenter.h
new file mode 100644 (file)
index 0000000..27a4238
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef FAST_TRAINING_ATTENTION_PRESENTER_H\r
+#define FAST_TRAINING_ATTENTION_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+\r
+#include "FastTrainingAttentionView.h"\r
+\r
+namespace OHOS\r
+{\r
+    class FastTrainingAttentionView;\r
+\r
+    class FastTrainingAttentionPresenter : public Presenter<FastTrainingAttentionView>,\r
+                                           public UIView::OnClickListener\r
+    {\r
+    public:\r
+        FastTrainingAttentionPresenter();\r
+        virtual ~FastTrainingAttentionPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+\r
+        static FastTrainingAttentionPresenter *GetInstance();\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif // FastTrainingAttention_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingAttentionView.h b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingAttentionView.h
new file mode 100644 (file)
index 0000000..df1f7c2
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef FAST_TRAINING_ATTENTION_VIEW_H\r
+#define FAST_TRAINING_ATTENTION_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_label_button.h"\r
+namespace OHOS\r
+{\r
+    static const char *LABELBUTTON = "FastTrainingAttentionLabelButton";\r
+    class FastTrainingAttentionPresenter;\r
+    class FastTrainingAttentionView : public View<FastTrainingAttentionPresenter>\r
+    {\r
+\r
+    public:\r
+        FastTrainingAttentionView();\r
+        virtual ~FastTrainingAttentionView();\r
+        static FastTrainingAttentionView *GetInstance(void);\r
+\r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+\r
+    private:\r
+        UIView::OnDragListener *draglistener{nullptr};\r
+\r
+        void InitView(void);\r
+        void DeInitView(void);\r
+\r
+        UIViewGroup *container_ = nullptr;\r
+        UIScrollView *scrollView1_ = nullptr;\r
+        UILabel *label15_ = nullptr;\r
+        UIImageView *image7_ = nullptr;\r
+        UILabel *label16_ = nullptr;\r
+        UILabelButton *FastTrainingAttentionLabelButton = nullptr;\r
+    };\r
+} // namespace OHOS\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingPresenter.h
new file mode 100644 (file)
index 0000000..bb88c0f
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef FAST_TRAINING_PRESENTER_H\r
+#define FAST_TRAINING_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "FastTrainingView.h"\r
+#include "components/ui_checkbox.h"\r
+namespace OHOS\r
+{\r
+    class FastTrainingView;\r
+\r
+    class FastTrainingPresenter : public Presenter<FastTrainingView>,\r
+                                  public UIView::OnClickListener,\r
+                                  public UIView::OnDragListener,\r
+                                  public UICheckBox::OnChangeListener\r
+    {\r
+    public:\r
+        FastTrainingPresenter();\r
+        virtual ~FastTrainingPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+\r
+        static FastTrainingPresenter *GetInstance();\r
+        void setCheckbox(UICheckBox *checkBox1, UICheckBox *checkBox2, UICheckBox *checkBox3, UICheckBox *checkBox4, UICheckBox *checkBox5, UICheckBox *checkBox6)\r
+        {\r
+            m_checkBox1 = checkBox1;\r
+            m_checkBox2 = checkBox2;\r
+            m_checkBox3 = checkBox3;\r
+            m_checkBox4 = checkBox4;\r
+            m_checkBox5 = checkBox5;\r
+            m_checkBox6 = checkBox6;\r
+        }\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+        bool OnChange(UICheckBox::UICheckBoxState state) override;\r
+\r
+    private:\r
+        static int CheckBoxSelectCount;\r
+        UICheckBox *m_checkBox1 = nullptr;\r
+        UICheckBox *m_checkBox2 = nullptr;\r
+        UICheckBox *m_checkBox3 = nullptr;\r
+        UICheckBox *m_checkBox4 = nullptr;\r
+        UICheckBox *m_checkBox5 = nullptr;\r
+        UICheckBox *m_checkBox6 = nullptr;\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingView.h b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/FastTrainingView.h
new file mode 100644 (file)
index 0000000..193e980
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef FAST_TRAINING_VIEW_H\r
+#define FAST_TRAINING_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_checkbox.h"\r
+\r
+namespace OHOS\r
+{\r
+    static const char *CHECKBOX1 = "checkBox1";\r
+    static const char *CHECKBOX2 = "checkBox2";\r
+    static const char *CHECKBOX3 = "checkBox3";\r
+    static const char *CHECKBOX4 = "checkBox4";\r
+    static const char *CHECKBOX5 = "checkBox5";\r
+    static const char *CHECKBOX6 = "checkBox6";\r
+    class FastTrainingPresenter;\r
+    class FastTrainingView : public View<FastTrainingPresenter>\r
+    {\r
+\r
+    public:\r
+        FastTrainingView();\r
+        virtual ~FastTrainingView();\r
+        static FastTrainingView *GetInstance(void);\r
+\r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+\r
+    private:\r
+        void InitView(void);\r
+        void DeInitView(void);\r
+        void InitImageLabelCheckbox(UIImageView *image, int image_x, int image_y, int image_w, int image_h,\r
+                                     UILabel *label, int label_x, int label_y, const char *labelText,\r
+                                     UICheckBox *checkbox, int check_x, int check_y, int check_w, int check_h, const char *checkboxID,\r
+                                     UICheckBox::OnChangeListener *ChangeListener, UIScrollView *scrollView);\r
+\r
+    private:\r
+        UIView::OnDragListener *draglistener{nullptr};\r
+\r
+    private:\r
+        UIViewGroup *container_ = nullptr;\r
+        UIScrollView *scrollView = nullptr;\r
+        UIImageView *image5_ = nullptr;\r
+        UIImageView *image6_ = nullptr;\r
+        UIImageView *image1 = nullptr;\r
+        UIImageView *image2 = nullptr;\r
+        UIImageView *image3 = nullptr;\r
+        UIImageView *image4 = nullptr;\r
+        UIImageView *image5 = nullptr;\r
+        UIImageView *image6 = nullptr;\r
+        UILabel *label = nullptr;\r
+        UILabel *label1 = nullptr;\r
+        UILabel *label2 = nullptr;\r
+        UILabel *label3 = nullptr;\r
+        UILabel *label4 = nullptr;\r
+        UILabel *label5 = nullptr;\r
+        UILabel *label6 = nullptr;\r
+        UICheckBox *checkBox1 = nullptr;\r
+        UICheckBox *checkBox2 = nullptr;\r
+        UICheckBox *checkBox3 = nullptr;\r
+        UICheckBox *checkBox4 = nullptr;\r
+        UICheckBox *checkBox5 = nullptr;\r
+        UICheckBox *checkBox6 = nullptr;\r
+        UICheckBox::OnChangeListener *ChangeListener1 = nullptr;\r
+        UICheckBox::OnChangeListener *ChangeListener2 = nullptr;\r
+        UICheckBox::OnChangeListener *ChangeListener3 = nullptr;\r
+        UICheckBox::OnChangeListener *ChangeListener4 = nullptr;\r
+        UICheckBox::OnChangeListener *ChangeListener5 = nullptr;\r
+        UICheckBox::OnChangeListener *ChangeListener6 = nullptr;\r
+    };\r
+} // namespace OHOS\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/QuickAccessPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/QuickAccessPresenter.h
new file mode 100644 (file)
index 0000000..100e173
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef QUICK_ACCESS_PRESENTER_H\r
+#define QUICK_ACCESS_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+ \r
+#include "QuickAccessView.h"\r
+ \r
+namespace OHOS\r
+{\r
+    class QuickAccessView;\r
+       \r
+    class QuickAccessPresenter : public Presenter<QuickAccessView>,\r
+                                 public UIView::OnClickListener,\r
+                                 public UIView::OnDragListener\r
+    {\r
+    public:\r
+        QuickAccessPresenter();\r
+        virtual ~QuickAccessPresenter();\r
+ \r
+        void OnStart() override;  \r
+        void OnPause() override;  \r
+        void OnResume() override; \r
+        void OnStop() override;   \r
+ \r
+        static QuickAccessPresenter *GetInstance();     \r
+ \r
+    private:\r
+        //因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override; \r
+        bool OnDrag(UIView &view, const DragEvent &event) override;   \r
+    };\r
+} //namespace OHOS\r
+\r
+\r
+\r
+\r
+\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/QuickAccessView.h b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/QuickAccessView.h
new file mode 100644 (file)
index 0000000..4a9dc39
--- /dev/null
@@ -0,0 +1,51 @@
+#ifndef QUICK_ACCESS_VIEW_H\r
+#define QUICK_ACCESS_VIEW_H\r
+\r
+#include "BaseView.h"\r
+#include "View.h"\r
+\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_checkbox.h"\r
+namespace OHOS\r
+{\r
+    static const char *HEART_RATE_DETECTION = "HeartRateDetectionCheckBox";     //心率检测\r
+    static const char *BLOOD_OXYGEN_MONITOR = "BloodOxygenMonitoringCheckBox";  //血氧检测\r
+\r
+    class QuickAccessPresenter;\r
+    class QuickAccessView : public View<QuickAccessPresenter>\r
+    {\r
+\r
+    public:\r
+        QuickAccessView();\r
+        virtual ~QuickAccessView();\r
+        static QuickAccessView *GetInstance(void);\r
+\r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+\r
+    private:\r
+        void InitView(void);\r
+        void DeInitView(void);\r
+\r
+    private:\r
+        UIViewGroup *container_ = nullptr;\r
+        UIScrollView *QuickAccessScrollView = nullptr;\r
+        UIImageView *image1 = nullptr;\r
+        UILabel *QuickAccessLabel = nullptr;\r
+        UIImageView *image2 = nullptr;\r
+        UILabel *label = nullptr;\r
+        UIImageView *HeartRateDetectionImage = nullptr;\r
+        UICheckBox *HeartRateDetectionCheckBox = nullptr;\r
+        UILabel *HeartRateDetectionLabel = nullptr;\r
+        UIImageView *BloodOxygenMonitoringImage = nullptr;\r
+        UICheckBox *BloodOxygenMonitoringCheckBox = nullptr;\r
+        UILabel *BloodOxygenMonitoringLabel = nullptr;\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/SecondaryFunctionPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/SecondaryFunctionPresenter.h
new file mode 100644 (file)
index 0000000..9e110bf
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef SECONDARY_FUNCTION_PRESENTER_H\r
+#define SECONDARY_FUNCTION_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+\r
+#include "SecondaryFunctionView.h"\r
+\r
+namespace OHOS\r
+{\r
+    class SecondaryFunctionView;\r
+\r
+    class SecondaryFunctionPresenter : public Presenter<SecondaryFunctionView>,\r
+                                       public UIView::OnClickListener,\r
+                                       public UIView::OnDragListener\r
+    {\r
+    public:\r
+        SecondaryFunctionPresenter();\r
+        virtual ~SecondaryFunctionPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+\r
+        static SecondaryFunctionPresenter *GetInstance();\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+    };\r
+} // namespace OHOS\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/SecondaryFunctionView.h b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/include/SecondaryFunctionView.h
new file mode 100644 (file)
index 0000000..5fe1c76
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef SECONDARY_FUNCTION_VIEW_H\r
+#define SECONDARY_FUNCTION_VIEW_H\r
+/*辅助功能*/\r
+#include "BaseView.h"\r
+#include "View.h"\r
+\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_image_view.h"\r
+namespace OHOS\r
+{\r
+    static const char * SECONDARY_FUNCTION_BUTTON1ID = "SECONDARY_FUNCTION_BUTTON1";\r
+    static const char * SECONDARY_FUNCTION_BUTTON2ID = "SECONDARY_FUNCTION_BUTTON2";\r
+    class SecondaryFunctionPresenter;\r
+    class SecondaryFunctionView : public View<SecondaryFunctionPresenter>\r
+    {\r
+\r
+    public:\r
+        SecondaryFunctionView();\r
+        virtual ~SecondaryFunctionView();\r
+        static SecondaryFunctionView *GetInstance(void);\r
+\r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+\r
+    private:\r
+        void InitView(void);\r
+        void DeInitView(void);\r
+\r
+    private:\r
+        UIViewGroup *container_ = nullptr;\r
+        UILabel *label1_ = nullptr;\r
+        UIButton *SECONDARY_FUNCTION_BUTTON1 = nullptr;\r
+        UIImageView *image3_ = nullptr;\r
+        UILabel *label2_ = nullptr;\r
+        UIButton *SECONDARY_FUNCTION_BUTTON2 = nullptr;\r
+        UIImageView *image4_ = nullptr;\r
+        UILabel *label4_ = nullptr;\r
+    };\r
+} // namespace OHOS\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingAttentionPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingAttentionPresenter.cpp
new file mode 100644 (file)
index 0000000..744b85a
--- /dev/null
@@ -0,0 +1,63 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include "secondaryfunction/include/FastTrainingAttentionPresenter.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static FastTrainingAttentionPresenter *g_pFastTrainingAttentionPresenter = nullptr;\r
+\r
+    FastTrainingAttentionPresenter::FastTrainingAttentionPresenter()\r
+    {\r
+\r
+        g_pFastTrainingAttentionPresenter = this;\r
+    }\r
+\r
+    FastTrainingAttentionPresenter::~FastTrainingAttentionPresenter()\r
+    {\r
+\r
+        g_pFastTrainingAttentionPresenter = nullptr;\r
+    }\r
+\r
+    FastTrainingAttentionPresenter *FastTrainingAttentionPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pFastTrainingAttentionPresenter;\r
+    }\r
+\r
+    void FastTrainingAttentionPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<FastTrainingAttentionView>::OnStart();\r
+    }\r
+\r
+    void FastTrainingAttentionPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<FastTrainingAttentionView>::OnPause();\r
+    }\r
+\r
+    void FastTrainingAttentionPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<FastTrainingAttentionView>::OnResume();\r
+    }\r
+\r
+    void FastTrainingAttentionPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<FastTrainingAttentionView>::OnStop();\r
+    }\r
+    \r
+    bool FastTrainingAttentionPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), LABELBUTTON) == 0)\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_FAST_TRAINING);\r
+        }\r
+        return true;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingAttentionView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingAttentionView.cpp
new file mode 100644 (file)
index 0000000..b636311
--- /dev/null
@@ -0,0 +1,193 @@
+#include "secondaryfunction/include/FastTrainingAttentionView.h"\r
+#include "secondaryfunction/include/FastTrainingAttentionPresenter.h"\r
+#include "UiConfig.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    static FastTrainingAttentionView *g_pFastTrainingAttentionView{nullptr};\r
+\r
+    FastTrainingAttentionView::FastTrainingAttentionView()\r
+    {\r
+\r
+        g_pFastTrainingAttentionView = this;\r
+    }\r
+\r
+    FastTrainingAttentionView::~FastTrainingAttentionView()\r
+    {\r
+        DeInitView();\r
+        g_pFastTrainingAttentionView = nullptr;\r
+    }\r
+\r
+    FastTrainingAttentionView *FastTrainingAttentionView::GetInstance()\r
+    {\r
+\r
+        return g_pFastTrainingAttentionView;\r
+    }\r
+\r
+    void FastTrainingAttentionView::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+        }\r
+\r
+        // Add ScrollView to App\r
+        if (scrollView1_ == nullptr)\r
+        {\r
+            scrollView1_ = new UIScrollView();\r
+        }\r
+        scrollView1_->SetPosition(0, 0);\r
+        scrollView1_->Resize(466, 466);\r
+        scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+\r
+        // Set additional property\r
+\r
+        // Add to rootView\r
+        container_->Add(scrollView1_);\r
+        scrollView1_->SetVisible(true);\r
+\r
+        // Add Label to App\r
+        if (label15_ == nullptr)\r
+        {\r
+            label15_ = new UILabel();\r
+        }\r
+        label15_->SetPosition(203, 52);\r
+        label15_->Resize(200, 60);\r
+        label15_->SetStyle(STYLE_TEXT_FONT, 30);\r
+        label15_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+\r
+        // Set additional property\r
+        label15_->SetText("注意");\r
+        label15_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label15_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label15_->SetRollSpeed(0);\r
+        label15_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+\r
+        // Add to scrollView1\r
+        scrollView1_->Add(label15_);\r
+        label15_->SetVisible(true);\r
+\r
+        // Add ImageView to App\r
+        if (image7_ == nullptr)\r
+        {\r
+            image7_ = new UIImageView();\r
+        }\r
+        image7_->SetPosition(193, 121);\r
+        image7_->Resize(80, 80);\r
+        image7_->SetSrc(PNG_FAST_TRAINING_ATTENTION_IMAGE);\r
+\r
+        // Add to scrollView1\r
+        scrollView1_->Add(image7_);\r
+        image7_->SetVisible(true);\r
+\r
+        // Add Label to App\r
+        if (label16_ == nullptr)\r
+        {\r
+            label16_ = new UILabel();\r
+        }\r
+        label16_->SetPosition(128, 228);\r
+        label16_->Resize(200, 60);\r
+        label16_->SetStyle(STYLE_TEXT_FONT, 30);\r
+        label16_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+\r
+        // Set additional property\r
+        label16_->SetText("最多只能选三个");\r
+        label16_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label16_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label16_->SetRollSpeed(0);\r
+        label16_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+\r
+        // Add to scrollView1\r
+        scrollView1_->Add(label16_);\r
+        label16_->SetVisible(true);\r
+\r
+        // Add LabelButtonExt to App\r
+        if (FastTrainingAttentionLabelButton == nullptr)\r
+        {\r
+            FastTrainingAttentionLabelButton = new UILabelButton();\r
+        }\r
+        FastTrainingAttentionLabelButton->SetPosition(0, 366);\r
+        FastTrainingAttentionLabelButton->Resize(466, 100);\r
+        FastTrainingAttentionLabelButton->SetViewId(LABELBUTTON);\r
+        char *labelButton1triggeredImgSrc = nullptr;\r
+        FastTrainingAttentionLabelButton->SetImageSrc("/user/res/NEW_device.bin", nullptr);\r
+        FastTrainingAttentionLabelButton->SetText("知道了");\r
+        FastTrainingAttentionLabelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        FastTrainingAttentionLabelButton->SetStyleForState(STYLE_BORDER_COLOR, 0xffffffff, UIButton::PRESSED);\r
+        FastTrainingAttentionLabelButton->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED);\r
+\r
+        // Add the CallBack about events\r
+        UIView::OnClickListener *labelButton1Click = static_cast<UIView::OnClickListener *>(FastTrainingAttentionPresenter::GetInstance());\r
+        FastTrainingAttentionLabelButton->SetOnClickListener(labelButton1Click);\r
+        // Add to scrollView1\r
+        scrollView1_->Add(FastTrainingAttentionLabelButton);\r
+        FastTrainingAttentionLabelButton->SetVisible(true);\r
+    }\r
+\r
+    void FastTrainingAttentionView::DeInitView()\r
+    {\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll();\r
+        }\r
+        if (scrollView1_ != nullptr)\r
+        {\r
+            delete scrollView1_;\r
+            scrollView1_ = nullptr;\r
+        }\r
+        if (label15_ != nullptr)\r
+        {\r
+            delete label15_;\r
+            label15_ = nullptr;\r
+        }\r
+        if (image7_ != nullptr)\r
+        {\r
+            delete image7_;\r
+            image7_ = nullptr;\r
+        }\r
+        if (label16_ != nullptr)\r
+        {\r
+            delete label16_;\r
+            label16_ = nullptr;\r
+        }\r
+        if (FastTrainingAttentionLabelButton != nullptr)\r
+        {\r
+            delete FastTrainingAttentionLabelButton;\r
+            FastTrainingAttentionLabelButton = nullptr;\r
+        }\r
+        delete container_;\r
+        container_ = nullptr;\r
+    }\r
+\r
+    void FastTrainingAttentionView::OnStart()\r
+    {\r
+        View<FastTrainingAttentionPresenter>::OnStart();\r
+        InitView();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void FastTrainingAttentionView::OnSetUpView()\r
+    {\r
+\r
+        View<FastTrainingAttentionPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void FastTrainingAttentionView::OnTearDownView()\r
+    {\r
+\r
+        View<FastTrainingAttentionPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void FastTrainingAttentionView::OnStop()\r
+    {\r
+\r
+        View<FastTrainingAttentionPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingPresenter.cpp
new file mode 100644 (file)
index 0000000..a1a0d8f
--- /dev/null
@@ -0,0 +1,92 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+#include "graphic_math.h"\r
+#include "string.h"\r
+#include "secondaryfunction/include/FastTrainingPresenter.h"\r
+#include "secondaryfunction/include/FastTrainingPresenter.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static FastTrainingPresenter *g_pFastTrainingPresenter = nullptr;\r
+    int FastTrainingPresenter::CheckBoxSelectCount = 0; // 复选框选中数量\r
+    FastTrainingPresenter::FastTrainingPresenter()\r
+    {\r
+\r
+        g_pFastTrainingPresenter = this;\r
+    }\r
+\r
+    FastTrainingPresenter::~FastTrainingPresenter()\r
+    {\r
+\r
+        g_pFastTrainingPresenter = nullptr;\r
+    }\r
+\r
+    FastTrainingPresenter *FastTrainingPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pFastTrainingPresenter;\r
+    }\r
+\r
+    void FastTrainingPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<FastTrainingView>::OnStart();\r
+    }\r
+\r
+    void FastTrainingPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<FastTrainingView>::OnPause();\r
+    }\r
+\r
+    void FastTrainingPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<FastTrainingView>::OnResume();\r
+    }\r
+\r
+    void FastTrainingPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<FastTrainingView>::OnStop();\r
+    }\r
+\r
+    bool FastTrainingPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+            (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_SECONDARY_FUNCTION);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    bool FastTrainingPresenter::OnChange(UICheckBox::UICheckBoxState state)\r
+    {\r
+        if (state == UICheckBox::UICheckBoxState::SELECTED)\r
+        {\r
+            CheckBoxSelectCount += 1;\r
+            printf("CheckBoxSelectCount:%d\n", CheckBoxSelectCount);\r
+        }\r
+        else\r
+        {\r
+            CheckBoxSelectCount -= 1;\r
+            printf("CheckBoxSelectCount:%d\n", CheckBoxSelectCount);\r
+        }\r
+        if (CheckBoxSelectCount > 3)\r
+        {\r
+            CheckBoxSelectCount = 0;//->测试用的到时候需要改因为复选框选中的状态需要被保存\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_FAST_TRAINING_ATTENTION);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    bool FastTrainingPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        UNUSED(view);\r
+        UNUSED(event);\r
+        return true;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/FastTrainingView.cpp
new file mode 100644 (file)
index 0000000..9f4eb8a
--- /dev/null
@@ -0,0 +1,235 @@
+#include "secondaryfunction/include/FastTrainingView.h"\r
+#include "secondaryfunction/include/FastTrainingPresenter.h"\r
+#include "UiConfig.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    static FastTrainingView *g_pFastTrainingView{nullptr};\r
+\r
+    FastTrainingView::FastTrainingView()\r
+    {\r
+\r
+        g_pFastTrainingView = this;\r
+    }\r
+\r
+    FastTrainingView::~FastTrainingView()\r
+    {\r
+        DeInitView();\r
+        g_pFastTrainingView = nullptr;\r
+    }\r
+\r
+    FastTrainingView *FastTrainingView::GetInstance()\r
+    {\r
+\r
+        return g_pFastTrainingView;\r
+    }\r
+    void FastTrainingView::InitImageLabelCheckbox(UIImageView *image, int image_x, int image_y, int image_w, int image_h,\r
+                                                  UILabel *label, int label_x, int label_y, const char *labelText,\r
+                                                  UICheckBox *checkbox, int check_x, int check_y, int check_w, int check_h, const char *checkboxID,\r
+                                                  UICheckBox::OnChangeListener *ChangeListener, UIScrollView *scrollView)\r
+    {\r
+        image = new UIImageView();\r
+        image->SetPosition(image_x, image_y);\r
+        image->Resize(image_w, image_h);\r
+        image->SetStyle(STYLE_BORDER_RADIUS, 50);\r
+        image->SetSrc(PNG_SETTING_BACKGROUND_IMAGE);\r
+        scrollView->Add(image);\r
+        image->SetVisible(true);\r
+        /* -------------------------------------------------------------------------- */\r
+        label = new UILabel();\r
+        label->SetPosition(label_x, label_y);\r
+        label->SetStyle(STYLE_TEXT_FONT, 30);\r
+        label->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        // Set additional property\r
+        label->SetText(labelText);\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        scrollView->Add(label);\r
+        label->SetVisible(true);\r
+        /* -------------------------------------------------------------------------- */\r
+        checkbox = new UICheckBox();\r
+        checkbox->SetPosition(check_x, check_y);\r
+        checkbox->Resize(check_w, check_h);\r
+        checkbox->SetViewId(checkboxID);\r
+        checkbox->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+        checkbox->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        checkbox->SetImages(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_OFF_IMAGE);\r
+        ChangeListener = static_cast<UICheckBox::OnChangeListener *>(FastTrainingPresenter::GetInstance());\r
+        checkbox->SetOnChangeListener(ChangeListener);\r
+        scrollView->Add(checkbox);\r
+        checkbox->SetVisible(true);\r
+    }\r
+\r
+    void FastTrainingView::InitView()\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+            draglistener = static_cast<UIView::OnDragListener *>(FastTrainingPresenter::GetInstance());\r
+            if (draglistener == nullptr)\r
+            {\r
+                return;\r
+            }\r
+            container_->SetOnDragListener(draglistener);\r
+            container_->SetTouchable(true);\r
+            container_->SetDraggable(true);\r
+        }\r
+        // Add ScrollView to App\r
+        if (scrollView == nullptr)\r
+        {\r
+            scrollView = new UIScrollView();\r
+        }\r
+        scrollView->SetPosition(0, 0);\r
+        scrollView->Resize(466, 466);\r
+        scrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        container_->Add(scrollView);\r
+        scrollView->SetVisible(true);\r
+        // Add Label to App\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        label->SetPosition(173, 52);\r
+        label->Resize(200, 60);\r
+        label->SetViewId("label9");\r
+        label->SetStyle(STYLE_TEXT_FONT, 30);\r
+        label->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        // Set additional property\r
+        label->SetText("快速训练");\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(0);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        // Add to scrollView1\r
+        scrollView->Add(label);\r
+        label->SetVisible(true);\r
+        /* -------------------------------------------------------------------------- */\r
+        InitImageLabelCheckbox(image1, 43, 120, 380, 100, label1, 90, 153, "骑行", checkBox1, 343, 148, 50, 50, "checkBox1", ChangeListener1, scrollView);\r
+        /* -------------------------------------------------------------------------- */\r
+        InitImageLabelCheckbox(image2, 43, 240, 380, 100, label2, 90, 273, "户外跑步", checkBox2, 343, 268, 50, 50, "checkBox2", ChangeListener2, scrollView);\r
+        /* -------------------------------------------------------------------------- */\r
+        InitImageLabelCheckbox(image3, 43, 360, 380, 100, label3, 90, 393, "健走", checkBox3, 343, 388, 50, 50, "checkBox3", ChangeListener3, scrollView);\r
+        /* -------------------------------------------------------------------------- */\r
+        InitImageLabelCheckbox(image4, 43, 480, 380, 100, label4, 90, 513, "登山", checkBox4, 343, 508, 50, 50, "checkBox4", ChangeListener4, scrollView);\r
+        /* -------------------------------------------------------------------------- */\r
+        InitImageLabelCheckbox(image5, 43, 600, 380, 100, label5, 90, 633, "跳绳", checkBox5, 343, 628, 50, 50, "checkBox5", ChangeListener6, scrollView);\r
+        /* -------------------------------------------------------------------------- */\r
+        InitImageLabelCheckbox(image6, 43, 720, 380, 100, label6, 90, 753, "乒乓球", checkBox6, 343, 748, 50, 50, "checkBox6", ChangeListener6, scrollView);\r
+        /* -------------------------------------------------------------------------- */\r
+        FastTrainingPresenter::GetInstance()->setCheckbox(checkBox1, checkBox2, checkBox3, checkBox4, checkBox5, checkBox6);\r
+        /* -------------------------------------------------------------------------- */\r
+        // Add ImageView to App\r
+        if (image5_ == nullptr)\r
+        {\r
+            image5_ = new UIImageView();\r
+        }\r
+        image5_->SetPosition(183, 790);\r
+        image5_->Resize(100, 100);\r
+        scrollView->Add(image5_);\r
+        image5_->SetVisible(true);\r
+        // Add ImageView to App\r
+        if (image6_ == nullptr)\r
+        {\r
+            image6_ = new UIImageView();\r
+        }\r
+        image6_->SetPosition(183, 19);\r
+        image6_->Resize(100, 100);\r
+        scrollView->Add(image6_);\r
+        image6_->SetVisible(true);\r
+    }\r
+    void FastTrainingView::DeInitView()\r
+    {\r
+        container_->RemoveAll();\r
+        delete scrollView;\r
+        scrollView = nullptr;\r
+        delete image5_;\r
+        image5_ = nullptr;\r
+        delete image6_;\r
+        image6_ = nullptr;\r
+        delete image1;\r
+        image1 = nullptr;\r
+        delete image2;\r
+        image2 = nullptr;\r
+        delete image3;\r
+        image3 = nullptr;\r
+        delete image4;\r
+        image4 = nullptr;\r
+        delete image5;\r
+        image5 = nullptr;\r
+        delete image6;\r
+        image6 = nullptr;\r
+        delete label;\r
+        label = nullptr;\r
+        delete label1;\r
+        label1 = nullptr;\r
+        delete label2;\r
+        label2 = nullptr;\r
+        delete label3;\r
+        label3 = nullptr;\r
+        delete label4;\r
+        label4 = nullptr;\r
+        delete label5;\r
+        label5 = nullptr;\r
+        delete label6;\r
+        label6 = nullptr;\r
+        delete checkBox1;\r
+        checkBox1 = nullptr;\r
+        delete checkBox2;\r
+        checkBox2 = nullptr;\r
+        delete checkBox3;\r
+        checkBox3 = nullptr;\r
+        delete checkBox4;\r
+        checkBox4 = nullptr;\r
+        delete checkBox5;\r
+        checkBox5 = nullptr;\r
+        delete checkBox6;\r
+        checkBox6 = nullptr;\r
+        delete container_;\r
+        delete ChangeListener1;\r
+        ChangeListener1 = nullptr;\r
+        delete ChangeListener2;\r
+        ChangeListener2 = nullptr;\r
+        delete ChangeListener3;\r
+        ChangeListener3 = nullptr;\r
+        delete ChangeListener4;\r
+        ChangeListener4 = nullptr;\r
+        delete ChangeListener5;\r
+        ChangeListener5 = nullptr;\r
+        delete ChangeListener6;\r
+        ChangeListener6 = nullptr;\r
+        container_ = nullptr;\r
+    }\r
+    void FastTrainingView::OnStart()\r
+    {\r
+        View<FastTrainingPresenter>::OnStart();\r
+        InitView();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void FastTrainingView::OnSetUpView()\r
+    {\r
+\r
+        View<FastTrainingPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void FastTrainingView::OnTearDownView()\r
+    {\r
+\r
+        View<FastTrainingPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void FastTrainingView::OnStop()\r
+    {\r
+\r
+        View<FastTrainingPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/QuickAccessPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/QuickAccessPresenter.cpp
new file mode 100644 (file)
index 0000000..c2b25c1
--- /dev/null
@@ -0,0 +1,84 @@
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+#include "graphic_math.h"\r
+#include "string.h"\r
+\r
+#include "secondaryfunction/include/QuickAccessPresenter.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static QuickAccessPresenter *g_pQuickAccessPresenter = nullptr;\r
+\r
+    QuickAccessPresenter::QuickAccessPresenter()\r
+    {\r
+\r
+        g_pQuickAccessPresenter = this;\r
+    }\r
+\r
+    QuickAccessPresenter::~QuickAccessPresenter()\r
+    {\r
+\r
+        g_pQuickAccessPresenter = nullptr;\r
+    }\r
+\r
+    QuickAccessPresenter *QuickAccessPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pQuickAccessPresenter;\r
+    }\r
+\r
+    void QuickAccessPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<QuickAccessView>::OnStart();\r
+    }\r
+\r
+    void QuickAccessPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<QuickAccessView>::OnPause();\r
+    }\r
+\r
+    void QuickAccessPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<QuickAccessView>::OnResume();\r
+    }\r
+\r
+    void QuickAccessPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<QuickAccessView>::OnStop();\r
+    }\r
+\r
+    bool QuickAccessPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+        UNUSED(view);\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+            (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_SECONDARY_FUNCTION);\r
+            return true;\r
+        }\r
+        return false;\r
+    }\r
+\r
+    bool QuickAccessPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        UNUSED(event);\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), HEART_RATE_DETECTION) == 0)\r
+        {\r
+            \r
+            return true;\r
+        }\r
+        else if(strcmp(view.GetViewId(), BLOOD_OXYGEN_MONITOR) == 0)\r
+        {\r
+            \r
+            return true;\r
+        }\r
+        return false;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/QuickAccessView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/QuickAccessView.cpp
new file mode 100644 (file)
index 0000000..d2c7e2f
--- /dev/null
@@ -0,0 +1,322 @@
+#include "UiConfig.h"\r
+\r
+#include "secondaryfunction/include/QuickAccessView.h"\r
+#include "secondaryfunction/include/QuickAccessPresenter.h"\r
+namespace OHOS\r
+{\r
+\r
+    static QuickAccessView *g_pQuickAccessView{nullptr};\r
+\r
+    QuickAccessView::QuickAccessView()\r
+    {\r
+\r
+        g_pQuickAccessView = this;\r
+    }\r
+\r
+    QuickAccessView::~QuickAccessView()\r
+    {\r
+        DeInitView();\r
+        g_pQuickAccessView = nullptr;\r
+    }\r
+\r
+    QuickAccessView *QuickAccessView::GetInstance()\r
+    {\r
+\r
+        return g_pQuickAccessView;\r
+    }\r
+\r
+    void QuickAccessView::InitView(void)\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+            UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(QuickAccessPresenter::GetInstance());\r
+            if (draglistener == nullptr)\r
+            {\r
+                return;\r
+            }\r
+            container_->SetOnDragListener(draglistener);\r
+            container_->SetTouchable(true);\r
+            container_->SetDraggable(true);\r
+        }\r
+        /***********************************************************************************************************/\r
+        // Add QuickAccessScrollView to App\r
+        if (QuickAccessScrollView == nullptr)\r
+        {\r
+            QuickAccessScrollView = new UIScrollView();\r
+        }\r
+        QuickAccessScrollView->SetPosition(0, 0);\r
+        QuickAccessScrollView->Resize(466, 466);\r
+        QuickAccessScrollView->SetViewId("QuickAccessScrollView");\r
+        QuickAccessScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        // Add to rootView\r
+        container_->Add(QuickAccessScrollView);\r
+        QuickAccessScrollView->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add Label to App\r
+        if (QuickAccessLabel == nullptr)\r
+        {\r
+            QuickAccessLabel = new UILabel();\r
+        }\r
+        QuickAccessLabel->SetPosition(173, 52);\r
+        QuickAccessLabel->Resize(120, 35);\r
+        QuickAccessLabel->SetViewId("QuickAccessLabel");\r
+        QuickAccessLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+        QuickAccessLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        // Set additional property\r
+        QuickAccessLabel->SetText("快速访问");\r
+        QuickAccessLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        QuickAccessLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        QuickAccessLabel->SetRollSpeed(6);\r
+        QuickAccessLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        // Add to scrollView3\r
+        QuickAccessScrollView->Add(QuickAccessLabel);\r
+        QuickAccessLabel->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add Label to App\r
+        if (label == nullptr)\r
+        {\r
+            label = new UILabel();\r
+        }\r
+        label->SetPosition(86, 126);\r
+        label->Resize(286, 60);\r
+        label->SetViewId("label");\r
+        label->SetStyle(STYLE_TEXT_FONT, 26);\r
+        label->SetStyle(STYLE_LINE_HEIGHT, 30);\r
+        // Set additional property\r
+        label->SetText("此功能可设置右下方按钮\n快速访问的APP");\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetTextColor(Color::GetColorFromRGBA(0xbb, 0xbb, 0xbb, 0xff));\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(6);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26);\r
+        // Add to scrollView3\r
+        QuickAccessScrollView->Add(label);\r
+        label->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add ImageView to App\r
+        if (HeartRateDetectionImage == nullptr)\r
+        {\r
+            HeartRateDetectionImage = new UIImageView();\r
+        }\r
+        HeartRateDetectionImage->SetPosition(43, 220);                 // widget's left position and top position\r
+        HeartRateDetectionImage->Resize(380, 100);                     // widget's width and height\r
+        HeartRateDetectionImage->SetViewId("HeartRateDetectionImage"); // Set style\r
+        HeartRateDetectionImage->SetStyle(STYLE_BORDER_RADIUS, 50);\r
+        HeartRateDetectionImage->SetSrc(PNG_SETTING_BACKGROUND_IMAGE);\r
+        // Add to scrollView3\r
+        QuickAccessScrollView->Add(HeartRateDetectionImage);\r
+        HeartRateDetectionImage->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add Label to App\r
+        if (HeartRateDetectionLabel == nullptr)\r
+        {\r
+            HeartRateDetectionLabel = new UILabel();\r
+        }\r
+        HeartRateDetectionLabel->SetPosition(103, 253);\r
+        HeartRateDetectionLabel->Resize(120, 35);\r
+        HeartRateDetectionLabel->SetViewId("HeartRateDetectionLabel");\r
+        HeartRateDetectionLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+        HeartRateDetectionLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        // Set additional property\r
+        HeartRateDetectionLabel->SetText("心率监测");\r
+        HeartRateDetectionLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        HeartRateDetectionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        HeartRateDetectionLabel->SetRollSpeed(6);\r
+        HeartRateDetectionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        // Add to scrollView3\r
+        QuickAccessScrollView->Add(HeartRateDetectionLabel);\r
+        HeartRateDetectionLabel->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add CheckBox to App\r
+        if (HeartRateDetectionCheckBox == nullptr)\r
+        {\r
+            HeartRateDetectionCheckBox = new UICheckBox();\r
+        }\r
+        HeartRateDetectionCheckBox->SetPosition(343, 250);\r
+        HeartRateDetectionCheckBox->Resize(40, 40);\r
+        HeartRateDetectionCheckBox->SetViewId(HEART_RATE_DETECTION);\r
+        HeartRateDetectionCheckBox->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+        HeartRateDetectionCheckBox->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        // Set additional property\r
+        HeartRateDetectionCheckBox->SetImages(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_OFF_IMAGE);\r
+        // Add the CallBack about events\r
+        UIView::OnClickListener *HeartRateDetectionCheckBoxClick = static_cast<UIView::OnClickListener *>(QuickAccessPresenter::GetInstance());\r
+        HeartRateDetectionCheckBox->SetOnClickListener(HeartRateDetectionCheckBoxClick);\r
+        // Add to scrollView3\r
+        QuickAccessScrollView->Add(HeartRateDetectionCheckBox);\r
+        HeartRateDetectionCheckBox->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add ImageView to App\r
+        if (BloodOxygenMonitoringImage == nullptr)\r
+        {\r
+            BloodOxygenMonitoringImage = new UIImageView();\r
+        }\r
+        BloodOxygenMonitoringImage->SetPosition(43, 340);\r
+        BloodOxygenMonitoringImage->Resize(380, 100);\r
+        BloodOxygenMonitoringImage->SetViewId("BloodOxygenMonitoringImage");\r
+        BloodOxygenMonitoringImage->SetStyle(STYLE_BORDER_RADIUS, 50);\r
+        // Set additional property\r
+        BloodOxygenMonitoringImage->SetSrc(PNG_SETTING_BACKGROUND_IMAGE);\r
+        // Add to scrollView3\r
+        QuickAccessScrollView->Add(BloodOxygenMonitoringImage);\r
+        BloodOxygenMonitoringImage->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add CheckBox to App\r
+        if (BloodOxygenMonitoringCheckBox == nullptr)\r
+        {\r
+            BloodOxygenMonitoringCheckBox = new UICheckBox();\r
+        }\r
+        BloodOxygenMonitoringCheckBox->SetPosition(343, 370);\r
+        BloodOxygenMonitoringCheckBox->Resize(50, 50);\r
+        BloodOxygenMonitoringCheckBox->SetViewId(BLOOD_OXYGEN_MONITOR);\r
+        BloodOxygenMonitoringCheckBox->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+        BloodOxygenMonitoringCheckBox->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        BloodOxygenMonitoringCheckBox->SetImages(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_OFF_IMAGE);\r
+        // Add the CallBack about events\r
+        UIView::OnClickListener *BloodOxygenMonitoringCheckBoxClick = static_cast<UIView::OnClickListener *>(QuickAccessPresenter::GetInstance());\r
+        BloodOxygenMonitoringCheckBox->SetOnClickListener(BloodOxygenMonitoringCheckBoxClick);\r
+        // Add to scrollView3\r
+        QuickAccessScrollView->Add(BloodOxygenMonitoringCheckBox);\r
+        BloodOxygenMonitoringCheckBox->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add Label to App\r
+        if (BloodOxygenMonitoringLabel == nullptr)\r
+        {\r
+            BloodOxygenMonitoringLabel = new UILabel();\r
+        }\r
+        BloodOxygenMonitoringLabel->SetPosition(103, 373);\r
+        BloodOxygenMonitoringLabel->Resize(120, 35);\r
+        BloodOxygenMonitoringLabel->SetViewId("BloodOxygenMonitoringLabel");\r
+        BloodOxygenMonitoringLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+        BloodOxygenMonitoringLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        // Set additional property\r
+        BloodOxygenMonitoringLabel->SetText("血氧监测");\r
+        BloodOxygenMonitoringLabel->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        BloodOxygenMonitoringLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        BloodOxygenMonitoringLabel->SetRollSpeed(6);\r
+        BloodOxygenMonitoringLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        // Add to scrollView3\r
+        QuickAccessScrollView->Add(BloodOxygenMonitoringLabel);\r
+        BloodOxygenMonitoringLabel->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add ImageView to App\r
+        if (image1 == nullptr)\r
+        {\r
+            image1 = new UIImageView();\r
+        }\r
+        image1->SetPosition(183, 23);\r
+        image1->Resize(100, 100);\r
+        image1->SetViewId("image1");\r
+\r
+        QuickAccessScrollView->Add(image1);\r
+        image1->SetVisible(true);\r
+        /***********************************************************************************************************/\r
+        // Add ImageView to App\r
+        if (image2 == nullptr)\r
+        {\r
+            image2 = new UIImageView();\r
+        }\r
+        image2->SetPosition(183, 423);\r
+        image2->Resize(100, 100);\r
+        image2->SetViewId("image2");\r
+        QuickAccessScrollView->Add(image2);\r
+        image2->SetVisible(true);\r
+    }\r
+\r
+    void QuickAccessView::DeInitView(void)\r
+    {\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll();\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+        if (QuickAccessScrollView != nullptr)\r
+        {\r
+            delete QuickAccessScrollView;\r
+            QuickAccessScrollView = nullptr;\r
+        }\r
+        if (image1 != nullptr)\r
+        {\r
+            delete image1;\r
+            image1 = nullptr;\r
+        }\r
+        if (QuickAccessLabel != nullptr)\r
+        {\r
+            delete QuickAccessLabel;\r
+            QuickAccessLabel = nullptr;\r
+        }\r
+        if (image2 != nullptr)\r
+        {\r
+            delete image2;\r
+            image2 = nullptr;\r
+        }\r
+        if (label != nullptr)\r
+        {\r
+            delete label;\r
+            label = nullptr;\r
+        }\r
+        if (HeartRateDetectionImage != nullptr)\r
+        {\r
+            delete HeartRateDetectionImage;\r
+            HeartRateDetectionImage = nullptr;\r
+        }\r
+        if (HeartRateDetectionCheckBox != nullptr)\r
+        {\r
+            delete HeartRateDetectionCheckBox;\r
+            HeartRateDetectionCheckBox = nullptr;\r
+        }\r
+        if (HeartRateDetectionLabel != nullptr)\r
+        {\r
+            delete HeartRateDetectionLabel;\r
+            HeartRateDetectionLabel = nullptr;\r
+        }\r
+        if (BloodOxygenMonitoringImage != nullptr)\r
+        {\r
+            delete BloodOxygenMonitoringImage;\r
+            BloodOxygenMonitoringImage = nullptr;\r
+        }\r
+        if (BloodOxygenMonitoringCheckBox != nullptr)\r
+        {\r
+            delete BloodOxygenMonitoringCheckBox;\r
+            BloodOxygenMonitoringCheckBox = nullptr;\r
+        }\r
+        if (BloodOxygenMonitoringLabel != nullptr)\r
+        {\r
+            delete BloodOxygenMonitoringLabel;\r
+            BloodOxygenMonitoringLabel = nullptr;\r
+        }\r
+    }\r
+\r
+    void QuickAccessView::OnStart()\r
+    {\r
+        View<QuickAccessPresenter>::OnStart();\r
+        InitView();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void QuickAccessView::OnSetUpView()\r
+    {\r
+\r
+        View<QuickAccessPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void QuickAccessView::OnTearDownView()\r
+    {\r
+\r
+        View<QuickAccessPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void QuickAccessView::OnStop()\r
+    {\r
+\r
+        View<QuickAccessPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/SecondaryFunctionPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/SecondaryFunctionPresenter.cpp
new file mode 100644 (file)
index 0000000..5a36922
--- /dev/null
@@ -0,0 +1,85 @@
+\r
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+\r
+#include "secondaryfunction/include/SecondaryFunctionPresenter.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    // 当前Presenter属性实例化的内存指针\r
+    static SecondaryFunctionPresenter *g_pSecondaryFunctionPresenter = nullptr;\r
+\r
+    SecondaryFunctionPresenter::SecondaryFunctionPresenter()\r
+    {\r
+\r
+        g_pSecondaryFunctionPresenter = this;\r
+    }\r
+\r
+    SecondaryFunctionPresenter::~SecondaryFunctionPresenter()\r
+    {\r
+\r
+        g_pSecondaryFunctionPresenter = nullptr;\r
+    }\r
+\r
+    SecondaryFunctionPresenter *SecondaryFunctionPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pSecondaryFunctionPresenter;\r
+    }\r
+\r
+    void SecondaryFunctionPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<SecondaryFunctionView>::OnStart();\r
+    }\r
+\r
+    void SecondaryFunctionPresenter::OnPause(void)\r
+    {\r
+\r
+        Presenter<SecondaryFunctionView>::OnPause();\r
+    }\r
+\r
+    void SecondaryFunctionPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<SecondaryFunctionView>::OnResume();\r
+    }\r
+\r
+    void SecondaryFunctionPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<SecondaryFunctionView>::OnStop();\r
+    }\r
+\r
+    bool SecondaryFunctionPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+        UNUSED(view);\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
+            (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+        {\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_SETTING);\r
+            return true;\r
+        }\r
+        return false;\r
+    }\r
+\r
+    bool SecondaryFunctionPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+\r
+        // 根据控件id查找是哪个控件触发了点击回调\r
+        if (strcmp(view.GetViewId(), SECONDARY_FUNCTION_BUTTON1ID) == 0)\r
+        {\r
+            \r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_QUICK_ACCESS);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), SECONDARY_FUNCTION_BUTTON2ID) == 0)\r
+        {\r
+            \r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_FAST_TRAINING);\r
+            return true;\r
+        }\r
+        return false;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/SecondaryFunctionView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/secondaryfunction/src/SecondaryFunctionView.cpp
new file mode 100644 (file)
index 0000000..7912a13
--- /dev/null
@@ -0,0 +1,237 @@
+#include "secondaryfunction/include/SecondaryFunctionView.h"\r
+#include "secondaryfunction/include/SecondaryFunctionPresenter.h"\r
+\r
+#include "UiConfig.h"\r
+namespace OHOS\r
+{\r
+\r
+    static SecondaryFunctionView *g_pSecondaryFunctionView{nullptr};\r
+\r
+    SecondaryFunctionView::SecondaryFunctionView()\r
+    {\r
+\r
+        g_pSecondaryFunctionView = this;\r
+    }\r
+\r
+    SecondaryFunctionView::~SecondaryFunctionView()\r
+    {\r
+        DeInitView();\r
+        g_pSecondaryFunctionView = nullptr;\r
+    }\r
+\r
+    SecondaryFunctionView *SecondaryFunctionView::GetInstance()\r
+    {\r
+\r
+        return g_pSecondaryFunctionView;\r
+    }\r
+\r
+    void SecondaryFunctionView::InitView(void)\r
+    {\r
+        if (container_ == nullptr)\r
+        {\r
+            container_ = new UIViewGroup();\r
+            container_->SetPosition(0, 0, 466, 466);\r
+            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+            UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(SecondaryFunctionPresenter::GetInstance());\r
+            if (draglistener == nullptr)\r
+            {\r
+                return;\r
+            }\r
+            container_->SetOnDragListener(draglistener);\r
+            container_->SetTouchable(true);\r
+            container_->SetDraggable(true);\r
+        }\r
+        // Add Label to App\r
+        if (label1_ == nullptr)\r
+        {\r
+            label1_ = new UILabel();\r
+        }\r
+        label1_->SetPosition(172, 52);\r
+        label1_->SetStyle(STYLE_TEXT_FONT, 30);\r
+        label1_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        label1_->SetText("辅助功能");\r
+        label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        container_->Add(label1_);\r
+        label1_->SetVisible(true);\r
+\r
+        // Add Button to App\r
+        if (SECONDARY_FUNCTION_BUTTON1 == nullptr)\r
+        {\r
+            SECONDARY_FUNCTION_BUTTON1 = new UIButton();\r
+        }\r
+        SECONDARY_FUNCTION_BUTTON1->SetPosition(43, 120);\r
+        SECONDARY_FUNCTION_BUTTON1->Resize(380, 100);\r
+        SECONDARY_FUNCTION_BUTTON1->SetViewId(SECONDARY_FUNCTION_BUTTON1ID);\r
+        SECONDARY_FUNCTION_BUTTON1->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+        SECONDARY_FUNCTION_BUTTON1->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+        SECONDARY_FUNCTION_BUTTON1->SetStyle(STYLE_BORDER_OPA, 0x00);\r
+        SECONDARY_FUNCTION_BUTTON1->SetStyle(STYLE_BORDER_COLOR, 0xffffffff);\r
+        SECONDARY_FUNCTION_BUTTON1->SetImageSrc(PNG_SETTING_BACKGROUND_IMAGE, nullptr);\r
+        SECONDARY_FUNCTION_BUTTON1->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xfffafafa, UIButton::PRESSED);\r
+        SECONDARY_FUNCTION_BUTTON1->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+        SECONDARY_FUNCTION_BUTTON1->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+        SECONDARY_FUNCTION_BUTTON1->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED);\r
+        // Add the CallBack about events\r
+        UIView::OnClickListener *button1Click = static_cast<UIView::OnClickListener *>(SecondaryFunctionPresenter::GetInstance());\r
+        SECONDARY_FUNCTION_BUTTON1->SetOnClickListener(button1Click);\r
+        // Add to rootView\r
+        container_->Add(SECONDARY_FUNCTION_BUTTON1);\r
+        SECONDARY_FUNCTION_BUTTON1->SetVisible(true);\r
+\r
+        // Add Label to App\r
+        if (label2_ == nullptr)\r
+        {\r
+            label2_ = new UILabel();\r
+        }\r
+        label2_->SetPosition(90, 153);\r
+        label2_->SetStyle(STYLE_TEXT_FONT, 30);\r
+        label2_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        // Set additional property\r
+        label2_->SetText("快速访问");\r
+        label2_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label2_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label2_->SetRollSpeed(0);\r
+        label2_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        // Add to rootView\r
+        container_->Add(label2_);\r
+        label2_->SetVisible(true);\r
+\r
+        // Add ImageView to App\r
+        if (image3_ == nullptr)\r
+        {\r
+            image3_ = new UIImageView();\r
+        }\r
+        image3_->SetPosition(369, 157);\r
+        image3_->SetSrc(PNG_SETTING_NEXT_IMAGE);\r
+        // Add to rootView\r
+        container_->Add(image3_);\r
+        image3_->SetVisible(true);\r
+\r
+        // Add Button to App\r
+        if (SECONDARY_FUNCTION_BUTTON2 == nullptr)\r
+        {\r
+            SECONDARY_FUNCTION_BUTTON2 = new UIButton();\r
+        }\r
+        SECONDARY_FUNCTION_BUTTON2->SetPosition(43, 240);\r
+        SECONDARY_FUNCTION_BUTTON2->Resize(380, 100);\r
+        SECONDARY_FUNCTION_BUTTON2->SetViewId(SECONDARY_FUNCTION_BUTTON2ID);\r
+        SECONDARY_FUNCTION_BUTTON2->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+        SECONDARY_FUNCTION_BUTTON2->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+        SECONDARY_FUNCTION_BUTTON2->SetStyle(STYLE_BORDER_OPA, 0x00);\r
+        SECONDARY_FUNCTION_BUTTON2->SetStyle(STYLE_BORDER_COLOR, 0xffffffff);\r
+        SECONDARY_FUNCTION_BUTTON2->SetImageSrc(PNG_SETTING_BACKGROUND_IMAGE, nullptr);\r
+        SECONDARY_FUNCTION_BUTTON2->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+        SECONDARY_FUNCTION_BUTTON2->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED);\r
+        // Add the CallBack about events\r
+        UIView::OnClickListener *button2Click = static_cast<UIView::OnClickListener *>(SecondaryFunctionPresenter::GetInstance());\r
+        SECONDARY_FUNCTION_BUTTON2->SetOnClickListener(button2Click);\r
+        // Add to rootView\r
+        container_->Add(SECONDARY_FUNCTION_BUTTON2);\r
+        SECONDARY_FUNCTION_BUTTON2->SetVisible(true);\r
+        // Add Label to App\r
+        if (label4_ == nullptr)\r
+        {\r
+            label4_ = new UILabel();\r
+        }\r
+        label4_->SetPosition(90, 273);\r
+        label4_->SetStyle(STYLE_TEXT_FONT, 30);\r
+        label4_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+\r
+        // Set additional property\r
+        label4_->SetText("快速训练");\r
+        label4_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label4_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label4_->SetRollSpeed(0);\r
+        label4_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        // Add to rootView\r
+        container_->Add(label4_);\r
+        label4_->SetVisible(true);\r
+\r
+        // Add ImageView to App\r
+        if (image4_ == nullptr)\r
+        {\r
+            image4_ = new UIImageView();\r
+        }\r
+        image4_->SetPosition(369, 277);\r
+        image4_->SetSrc(PNG_SETTING_NEXT_IMAGE);\r
+        // Add to rootView\r
+        container_->Add(image4_);\r
+        image4_->SetVisible(true);\r
+    }\r
+    void SecondaryFunctionView::DeInitView(void)\r
+    {\r
+        if (container_ != nullptr)\r
+        {\r
+            container_->RemoveAll();\r
+        }\r
+        if (label1_ != nullptr)\r
+        {\r
+            delete label1_;\r
+            label1_ = nullptr;\r
+        }\r
+        if (SECONDARY_FUNCTION_BUTTON1 != nullptr)\r
+        {\r
+            delete SECONDARY_FUNCTION_BUTTON1;\r
+            SECONDARY_FUNCTION_BUTTON1 = nullptr;\r
+        }\r
+        if (image3_ != nullptr)\r
+        {\r
+            delete image3_;\r
+            image3_ = nullptr;\r
+        }\r
+        if (label2_ != nullptr)\r
+        {\r
+            delete label2_;\r
+            label2_ = nullptr;\r
+        }\r
+        if (SECONDARY_FUNCTION_BUTTON2 != nullptr)\r
+        {\r
+            delete SECONDARY_FUNCTION_BUTTON2;\r
+            SECONDARY_FUNCTION_BUTTON2 = nullptr;\r
+        }\r
+        if (image4_ != nullptr)\r
+        {\r
+            delete image4_;\r
+            image4_ = nullptr;\r
+        }\r
+        if (label4_ != nullptr)\r
+        {\r
+            delete label4_;\r
+            label4_ = nullptr;\r
+        }\r
+        delete container_;\r
+        container_ = nullptr;\r
+    }\r
+\r
+    void SecondaryFunctionView::OnStart()\r
+    {\r
+        View<SecondaryFunctionPresenter>::OnStart();\r
+        InitView();\r
+        RootView::GetInstance()->Add(container_);\r
+    }\r
+\r
+    void SecondaryFunctionView::OnSetUpView()\r
+    {\r
+\r
+        View<SecondaryFunctionPresenter>::OnSetUpView();\r
+        Draw();\r
+    }\r
+\r
+    void SecondaryFunctionView::OnTearDownView()\r
+    {\r
+\r
+        View<SecondaryFunctionPresenter>::OnTearDownView();\r
+        return;\r
+    }\r
+\r
+    void SecondaryFunctionView::OnStop()\r
+    {\r
+\r
+        View<SecondaryFunctionPresenter>::OnStop();\r
+        RootView::GetInstance()->RemoveAll();\r
+        return;\r
+    }\r
+\r
+}
\ No newline at end of file
index 93a5ff5..3dda499 100755 (executable)
@@ -31,7 +31,7 @@ namespace OHOS
         settingIdToViewId.insert(std::pair<SettingIndex, AppViewId>(SETTING_ITEM_ZERO, VIEW_DISPLAY_BRIGHTNESS));
         settingIdToViewId.insert(std::pair<SettingIndex, AppViewId>(SETTING_ITEM_ONE, VIEW_BLUETOOTH_EARPHONE));
         settingIdToViewId.insert(std::pair<SettingIndex, AppViewId>(SETTING_ITEM_TWO, VIEW_SOUND_VIBRATION));
-        settingIdToViewId.insert(std::pair<SettingIndex, AppViewId>(SETTING_ITEM_THREE, VIEW_SYSTEM));
+        settingIdToViewId.insert(std::pair<SettingIndex, AppViewId>(SETTING_ITEM_THREE, VIEW_SECONDARY_FUNCTION));
         settingIdToViewId.insert(std::pair<SettingIndex, AppViewId>(SETTING_ITEM_FOUR, VIEW_SYSTEM));
         settingIdToViewId.insert(std::pair<SettingIndex, AppViewId>(SETTING_ITEM_FIVE, VIEW_SHUTDOWN_OR_REBOOT));
     }
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/FastTrainingAttentionVector.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/FastTrainingAttentionVector.bin
new file mode 100644 (file)
index 0000000..b8120b8
Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/FastTrainingAttentionVector.bin differ
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/NEW_DEVICE.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/NEW_DEVICE.bin
deleted file mode 100644 (file)
index 437402a..0000000
Binary files a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/NEW_DEVICE.bin and /dev/null differ
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/NEW_device.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/NEW_device.bin
new file mode 100644 (file)
index 0000000..b3180e9
Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/NEW_device.bin differ
index 0cda4a9..14051ee 100755 (executable)
@@ -282,14 +282,18 @@ char* HalGetHardwareProfile(void)
 
 char* HalGetSerial(void)
 {
-    char* value = (char*)malloc(strlen(OHOS_SERIAL) + 1);
+    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);
     if (value == NULL) {
         return NULL;
     }
-    if (strcpy_s(value, strlen(OHOS_SERIAL) + 1, OHOS_SERIAL) != 0) {
+    if (strcpy_s(value, strlen(sn_buf) + 1, sn_buf) != 0) {
         free(value);
         return NULL;
     }
+    
     return value;
 }