各个界面的按键监听添加
authorluozheng <1732036298@qq.com>
Mon, 19 May 2025 09:41:33 +0000 (17:41 +0800)
committerluozheng <1732036298@qq.com>
Mon, 19 May 2025 09:41:33 +0000 (17:41 +0800)
47 files changed:
code/sdk/application/wearable/fd230/nativeabilityfwk/include/Presenter.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/add_card/src/AddCardView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/assistant/src/AssistantView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodoxygen/src/BloodDetectionView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bloodoxygen/src/BloodResultView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/bluetooth/src/MainBluetoothView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/brightnesslevel/src/BrightnessLevelView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/calendar/src/CalendarView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/classicbluetooth/src/BluetoothServiceOptionsView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/classicbluetooth/src/ClassicBlueToothView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/include/CompassCalibrationView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/include/CompassControlView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/include/CompassModel.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/include/CompassPresenter.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/include/CompassView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/include/MainCompassPresenter.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/include/MainCompassView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/src/CompassCalibrationView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/src/CompassControlView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/src/CompassModel.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/src/CompassPresenter.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/src/CompassView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/src/MainCompassPresenter.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/compass/src/MainCompassView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/countdown/src/MainCountDownView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/dnotdisturb/src/DnotDisturbView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/findphone/src/FindPhoneView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/flashlight/src/FlashlightView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/goal/src/Maingoalview.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/heartrate/src/HeartDetectionView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/heartrate/src/HeartResultView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/message/src/MessageShowView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/motionrecognition/src/MotionRecognitionView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/networkandcall/src/NetworkAndCallView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/rebootandshutdown/src/RebootAndShutdownView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/record/src/RecordingView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/respiratorytraining/src/RespiratoryTrainingView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/saveele/src/SaveBatView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/saveele/src/SaveEleView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/set_time_format/src/SetTimeFormatView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/soundandvibration/src/CallVolumeView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/soundandvibration/src/SoundAndVibrationView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/soundandvibration/src/SystemVolumeView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/stopwatch/src/MainStopWatchView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/takephotos/src/TakephotosView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/weather/src/MainWeatherView.cpp

index 76276cc..4057024 100644 (file)
@@ -51,7 +51,8 @@ public:
             RootView::GetInstance()->Add(view_->GetRootContainer());
         }
         // Reset the default key listener
-        RootView::GetInstance()->SetOnKeyActListener(KeyInputListener::GetInstance());
+        if(NativeAbility::GetInstance().GetCurSliceId() == VIEW_MAIN || NativeAbility::GetInstance().GetCurSliceId() == VIEW_APPLIST)
+            RootView::GetInstance()->SetOnKeyActListener(KeyInputListener::GetInstance());//加判断条件是解决其他界面按键监听被覆盖的问题
         UIView* backView = PageTransitionMgr::GetInstance().GetTopSlideBackImage();
         if (backView == nullptr) {
             return;
index 5498e6d..62fe5ba 100644 (file)
@@ -34,7 +34,8 @@ namespace OHOS
         SetUpListInfo();
         SetUpListView();
         SetUpToast();
-//按键监听
+        //按键监听
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 
    
index 50e4d78..ae7bbd7 100644 (file)
@@ -241,7 +241,7 @@ void AssistantView::OnStart() {
 
   InitView();
 
-  //RootView::GetInstance()->SetOnKeyActListener(presenter_);
+  RootView::GetInstance()->SetOnKeyActListener(presenter_);
   AddViewToRootContainer(AssistantScrollView[ASSISTANT_MAIN_VIEW]);
 }
 
index 76075bf..835b328 100644 (file)
@@ -163,6 +163,7 @@ namespace OHOS
 
         // 增加按键监听
         // presenter_->SetOnKeyActListener(keyactListener);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
 
     }
 
index 8d5a118..500ccff 100644 (file)
@@ -209,6 +209,7 @@ namespace OHOS
         // 增加按键监听
         // RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BloodResultPresenter::GetInstance();
         //RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 
 }
index bd59fb6..bab8aed 100644 (file)
@@ -76,7 +76,7 @@ void MainBluetoothView::OnStart()
     } else {\r
         ChangeView(unusedValue, BLUETOOTHEARPHONEVIEW);//若一个都没有连接过就进行搜索\r
     }\r
-   RootView::GetInstance()->Invalidate();\r
+    RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
     return;\r
 }\r
 \r
@@ -98,7 +98,7 @@ bool MainBluetoothView::ChangeBluetoothDeviceListView(int16_t hideView, int16_t
             return false;\r
         }\r
         container[thisView] = group;\r
-       RootView::GetInstance()->Add(container[thisView]);\r
+       AddViewToRootContainer(container[thisView]);\r
     } \r
     // else {\r
     //     // 刷新列表\r
@@ -132,7 +132,7 @@ bool MainBluetoothView::ChangeTipsFailMessageView(int16_t hideView, int16_t this
             return false;\r
         }\r
         container[thisView] = group;\r
-       RootView::GetInstance()->Add(container[thisView]);\r
+       AddViewToRootContainer(container[thisView]);\r
     }\r
     return true;\r
 }\r
@@ -154,7 +154,7 @@ bool MainBluetoothView::ChangeTipsConnFailMessageView(int16_t hideView, int16_t
             return false;\r
         }\r
         container[thisView] = group;\r
-       RootView::GetInstance()->Add(container[thisView]);\r
+       AddViewToRootContainer(container[thisView]);\r
     }\r
     if (bluetoothReconnectView == nullptr) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback bluetoothReconnectView == nullptr");\r
@@ -183,7 +183,7 @@ bool MainBluetoothView::ChangeTipsSuccMessageView(int16_t hideView, int16_t this
             return false;\r
         }\r
         container[thisView] = group;\r
-       RootView::GetInstance()->Add(container[thisView]);\r
+       AddViewToRootContainer(container[thisView]);\r
     }\r
     return true;\r
 }\r
@@ -205,7 +205,7 @@ bool MainBluetoothView::ChangeBluetoothEarPhoneView(int16_t hideView, int16_t th
             return false;\r
         }\r
         container[thisView] = group;\r
-       RootView::GetInstance()->Add(container[thisView]);\r
+       AddViewToRootContainer(container[thisView]);\r
     }\r
     // 动画开始\r
     bluetoothEarPhoneView->BtAnimatorStart();\r
@@ -230,7 +230,7 @@ bool MainBluetoothView::ChangeBluetoothEarListView(int16_t hideView, int16_t thi
             return false;\r
         }\r
         container[thisView] = group;\r
-       RootView::GetInstance()->Add(container[thisView]);\r
+       AddViewToRootContainer(container[thisView]);\r
     } \r
     // else {\r
     //     // 刷新列表\r
@@ -265,7 +265,7 @@ bool MainBluetoothView::ChangeBluetoothOptionsView(int16_t hideView, int16_t thi
             return false;\r
         }\r
         container[thisView] = group;\r
-       RootView::GetInstance()->Add(container[thisView]);\r
+       AddViewToRootContainer(container[thisView]);\r
     }\r
     return true;\r
 }\r
@@ -287,7 +287,7 @@ bool MainBluetoothView::ChangeBluetoothReconnectView(int16_t hideView, int16_t t
             return false;\r
         }\r
         container[thisView] = group;\r
-       RootView::GetInstance()->Add(container[thisView]);\r
+       AddViewToRootContainer(container[thisView]);\r
     }\r
     BluetoothModel::GetInstance()->SetTagDisconnectView(true);\r
     bluetoothReconnectView->RefreshBluetoothNameLabel();\r
index 71d08a0..bc91dd7 100644 (file)
@@ -73,8 +73,10 @@ namespace OHOS
 
         BrightnessLevelViewInit();
         // 增加按键监听
-        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BrightnessLevelPresenter::GetInstance();
+        // RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BrightnessLevelPresenter::GetInstance();
         //RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
+
 
         AddViewToRootContainer(scorllView);
     }
index 8a922b3..c9adc98 100644 (file)
@@ -394,5 +394,6 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CallingView::UIViewGroup::new group error");
             return;
         }
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 }
\ No newline at end of file
index 6522078..9b038aa 100644 (file)
@@ -432,6 +432,8 @@ namespace OHOS
         connectingScrollView->SetDraggable(false);
         BlueToothScrollView->Add(connectingScrollView);
         AddViewToRootContainer(BlueToothScrollView);
+
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 
     void BluetoothServiceOptionsView::show_connecting_view(bool data)
index 23f7e8e..90f492c 100644 (file)
@@ -307,5 +307,6 @@ namespace OHOS
         BlueToothScrollView->Add(AttentionLabel);\r
         BlueToothScrollView->Add(TradionalBlueToothToggleButton);\r
         AddViewToRootContainer(BlueToothScrollView);\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
     }\r
 }\r
index 704e60d..fb80d8d 100644 (file)
@@ -1,34 +1,37 @@
-/*\r
- * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.\r
- * Description: CompassCalibrationView.h\r
- * Author:\r
- * Create: 2022-04-02\r
- */\r
-\r
-#ifndef COMPASS_CALIBRATION_VIEW_H\r
-#define COMPASS_CALIBRATION_VIEW_H\r
-\r
-#include "components/ui_label.h"\r
-#include "View.h"\r
-#include "ohos_types.h"\r
-#include "AppGroupView.h"\r
-#include "components/ui_image_view.h"\r
-\r
-namespace OHOS {\r
-class CompassCalibrationView : public AppGroupView {\r
-public:\r
-    CompassCalibrationView();\r
-    ~CompassCalibrationView() override;\r
-\r
-    bool CreateUIViewGroup(void);\r
-    static CompassCalibrationView *GetInstance(void);\r
-    bool InitView(void *caller) override;\r
-private:\r
-    UILabel *labelOne{nullptr};\r
-    UILabel *labelTwo{nullptr};\r
-    UIImageView *imageView{nullptr};\r
-\r
-    void ClearAll(void);\r
-};\r
-}\r
+/*
+ * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.
+ * Description: CompassCalibrationView.h
+ * Author:
+ * Create: 2022-04-02
+ */
+
+#ifndef COMPASS_CALIBRATION_VIEW_H
+#define COMPASS_CALIBRATION_VIEW_H
+
+#include "components/ui_label.h"
+#include "View.h"
+#include "ohos_types.h"
+#include "AppGroupView.h"
+#include "components/ui_image_view.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_ext.h"
+
+namespace OHOS {
+class CompassCalibrationView : public AppGroupView {
+public:
+    CompassCalibrationView();
+    ~CompassCalibrationView() override;
+
+    bool CreateUIViewGroup(void);
+    static CompassCalibrationView *GetInstance(void);
+    bool InitView(void *caller) override;
+private:
+    UILabelExt *labelOne{nullptr};
+    UILabelExt *labelTwo{nullptr};
+    UIImageView *imageView{nullptr};
+    UIScrollView *scrollView{nullptr};
+
+    void ClearAll(void);
+};
+}
 #endif
\ No newline at end of file
index 3dc43f2..9c776e9 100644 (file)
@@ -1,36 +1,36 @@
-/*\r
- * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.\r
- * Description: CompassControlView.h\r
- * Author:\r
- * Create: 2022-04-02\r
- */\r
-\r
-#ifndef COMPASS_CONTROL_VIEW_H\r
-#define COMPASS_CONTROL_VIEW_H\r
-\r
-#include "components/root_view.h"\r
-#include "UiConfig.h"\r
-#include "components/ui_card_page.h"\r
-#include "CompassCalibrationView.h"\r
-#include "CompassView.h"\r
-\r
-namespace OHOS {\r
-\r
-class CompassControlView : public UICardPage {\r
-public:\r
-    CompassControlView();\r
-    ~CompassControlView() override;\r
-    bool InitView(void);\r
-    void PreLoad(void) override;\r
-    void UnLoad(void) override;\r
-    void SetCalibrationView(bool flag);\r
-private:\r
-    CompassCalibrationView *compassCalibrationView{nullptr};\r
-    CompassView *compassView{nullptr};\r
-    bool viewiInitStatus{false};\r
-    bool isCalibration{false};\r
-\r
-    void ClearAll(void);\r
-};\r
-}\r
-#endif\r
+/*
+ * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.
+ * Description: CompassControlView.h
+ * Author:
+ * Create: 2022-04-02
+ */
+
+#ifndef COMPASS_CONTROL_VIEW_H
+#define COMPASS_CONTROL_VIEW_H
+
+#include "components/root_view.h"
+#include "UiConfig.h"
+#include "components/ui_card_page.h"
+#include "CompassCalibrationView.h"
+#include "CompassView.h"
+
+namespace OHOS {
+
+class CompassControlView : public UICardPage {
+public:
+    CompassControlView();
+    ~CompassControlView() override;
+    bool InitView(void);
+    void PreLoad(void) override;
+    void UnLoad(void) override;
+    void SetCalibrationView(bool flag);
+private:
+    CompassCalibrationView *compassCalibrationView{nullptr};
+    CompassView *compassView{nullptr};
+    bool viewiInitStatus{false};
+    bool isCalibration{false};
+
+    void ClearAll(void);
+};
+}
+#endif
index 80cfd2f..12f2ed5 100644 (file)
@@ -1,38 +1,35 @@
-/*\r
- * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.\r
- * Description: CompassModel.h\r
- * Author:\r
- * Create: 2022-04-02\r
- */\r
-\r
-#ifndef COMPASS_MODEL_H\r
-#define COMPASS_MODEL_H\r
-\r
-#include <cstdint>\r
-\r
-namespace OHOS {\r
-class CompassModel {\r
-public:\r
-    static CompassModel *GetInstance(void);\r
-    bool OpenCompassSensor(void);\r
-    bool CloseCompassSensor(void);\r
-    void SetCalibrationStatus(uint8_t status);\r
-    uint8_t GetCalibrationStatus(void);\r
-    void SetDisplayAngle(uint16_t angle);\r
-    uint16_t GetDisplayAngle(void);\r
-#if defined(_WIN32)\r
-#undef GetCurrentTime\r
-#endif\r
-    time_t GetCurrentTime(void);\r
-    void SetLastTime(time_t value);\r
-    time_t GetLastTime(void);\r
-\r
-private:\r
-    uint8_t calibrationStatus{1};\r
-    uint16_t displayAngle{0};\r
-    time_t lastTime{0};\r
-};\r
-}\r
-\r
-#endif\r
-\r
+/*
+ * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.
+ * Description: CompassModel.h
+ * Author:
+ * Create: 2022-04-02
+ */
+
+#ifndef COMPASS_MODEL_H
+#define COMPASS_MODEL_H
+
+#include <cstdint>
+
+namespace OHOS {
+class CompassModel {
+public:
+    static CompassModel *GetInstance(void);
+    bool OpenCompassSensor(void);
+    bool CloseCompassSensor(void);
+    void SetCalibrationStatus(uint8_t status);
+    uint8_t GetCalibrationStatus(void);
+    void SetDisplayAngle(uint16_t angle);
+    uint16_t GetDisplayAngle(void);
+    time_t GetCurrentTime(void);
+    void SetLastTime(time_t value);
+    time_t GetLastTime(void);
+
+private:
+    uint8_t calibrationStatus{1};
+    uint16_t displayAngle{0};
+    time_t lastTime{0};
+};
+}
+
+#endif
+
index 68d6877..16a4641 100644 (file)
@@ -1,46 +1,49 @@
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: CompassPresenter.h\r
- * Author:\r
- * Create: 2021-12-21\r
- */\r
-#ifndef COMPASS_PRESENTER_H\r
-#define COMPASS_PRESENTER_H\r
-\r
-#include "Presenter.h"\r
-#include "components/ui_view.h"\r
-#include "components/ui_image_view.h"\r
-#include "ohos_types.h"\r
-#include "UiConfig.h"\r
-#include "AppViewIDs.h"\r
-#include "CompassView.h"\r
-\r
-namespace OHOS {\r
-typedef struct {\r
-    uint16_t beginAngle;\r
-    uint16_t endAngle;\r
-    const char *dir;\r
-} CompassItem;\r
-\r
-class CompassView;\r
-class CompassPresenter {\r
-public:\r
-    CompassPresenter();\r
-    virtual ~CompassPresenter();\r
-\r
-    static CompassPresenter *GetInstance(void);\r
-    void DisplayAngleDir(uint16_t angle);\r
-    void DetermineToRotate(void);\r
-    void InScopeRotate(void);\r
-    void TimeCreateRandomNum(void);\r
-    void DisplayAngleRight(uint16_t angle);\r
-\r
-private:\r
-    int16_t lastRotateAngle{0};\r
-    int16_t currentRotateAngle{0};\r
-    int16_t angleDiff{0};\r
-    bool getAngleStatus{false};\r
-    bool initDisplayStatus{true};\r
-};\r
-}\r
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: CompassPresenter.h
+ * Author:
+ * Create: 2021-12-21
+ */
+#ifndef COMPASS_PRESENTER_H
+#define COMPASS_PRESENTER_H
+
+#include "Presenter.h"
+#include "components/ui_view.h"
+#include "components/ui_image_view.h"
+#include "ohos_types.h"
+#include "UiConfig.h"
+#include "AppViewIDs.h"
+#include "components/ui_label_ext.h"
+#include"ui_resource_string.h"
+#include "CompassView.h"
+
+namespace OHOS {
+typedef struct {
+    uint16_t beginAngle;
+    uint16_t endAngle;
+    const char *dir;
+    int dir_textId;//方向的textid
+} CompassItem;
+
+class CompassView;
+class CompassPresenter {
+public:
+    CompassPresenter();
+    virtual ~CompassPresenter();
+
+    static CompassPresenter *GetInstance(void);
+    void DisplayAngleDir(uint16_t angle);
+    void DetermineToRotate(void);
+    void InScopeRotate(void);
+    void TimeCreateRandomNum(void);
+    void DisplayAngleRight(uint16_t angle);
+
+private:
+    int16_t lastRotateAngle{0};     //上一次的旋转角度
+    int16_t currentRotateAngle{0};  //当前的旋转角度
+    int16_t angleDiff{0};           //角度差
+    bool getAngleStatus{false};
+    bool initDisplayStatus{true};
+};
+}
 #endif
\ No newline at end of file
index 97cd957..a139a25 100644 (file)
@@ -1,47 +1,54 @@
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: CompassView.h\r
- * Author:\r
- * Create: 2021-12-21\r
- */\r
-\r
-#ifndef COMPASS_VIEW_H\r
-#define COMPASS_VIEW_H\r
-\r
-#include "View.h"\r
-#include "components/root_view.h"\r
-#include "components/ui_label.h"\r
-#include "components/ui_image_view.h"\r
-#include "ChangeSliceListener.h"\r
-#include "UiConfig.h"\r
-#include "AppGroupView.h"\r
-#include "CompassCalibrationView.h"\r
-\r
-namespace OHOS {\r
-static constexpr float VIEW_CENTERS = 227;\r
-\r
-class CompassView : public AppGroupView {\r
-public:\r
-    CompassView();\r
-    ~CompassView() override;\r
-\r
-    void DirectionSetText(const char *text, const char *angle);\r
-    static CompassView *GetInstance(void);\r
-    void CompassStartRotate(int16_t numb);\r
-    bool InitPage(void);\r
-    bool InitView(void *caller) override;\r
-    bool GetInitViewState(void);\r
-    bool InitCompassImage(void);\r
-\r
-private:\r
-    bool LoadCompassImage(UIImageView *view, uint32_t resId);\r
-    void ClearAll(void);\r
-    UILabel *directionLabel{nullptr};\r
-    UILabel *angledLabel{nullptr};\r
-    UIImageView *backGround{nullptr};\r
-    UIImageView *rotateShaft{nullptr};\r
-    UIImageView *triangulation{nullptr};\r
-    const Vector2<float> VIEW_CENTER = {VIEW_CENTERS, VIEW_CENTERS};\r
-};\r
-}\r
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: CompassView.h
+ * Author:
+ * Create: 2021-12-21
+ */
+
+#ifndef COMPASS_VIEW_H
+#define COMPASS_VIEW_H
+
+#include "View.h"
+#include "components/root_view.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_image_view.h"
+#include "ChangeSliceListener.h"
+#include "UiConfig.h"
+#include "AppGroupView.h"
+#include "CompassCalibrationView.h"
+
+namespace OHOS {
+static constexpr float VIEW_CENTERS = 233;/*233代表分辨率为466的屏幕*/
+
+class CompassView : public AppGroupView {
+public:
+    CompassView();
+    ~CompassView() override;
+
+    void DirectionSetText(const char *text, const char *angle);
+    void DirectionSetTextId(int textId, const char *angle);
+    static CompassView *GetInstance(void);
+    void CompassStartRotate(int16_t numb);
+    bool InitPage(void);
+    bool InitView(void *caller) override;
+    bool GetInitViewState(void);
+    bool InitCompassImage(void);
+
+    bool GetResLoadStatus(void);
+    void SetResLoadStatus(bool state);
+    void PreLoadCompassImageRes(void);
+    void UnLoadCompassImageRes(void);
+private:
+    bool LoadCompassImage(UIImageView *view, uint32_t resId);
+    void ClearAll(void);
+    UILabelExt *directionLabel{nullptr};                               //方向标签
+    UILabel *angledLabel{nullptr};                                  //角度标签
+    UIImageView *backGround{nullptr};                               //背景图片
+    UIImageView *PlaceMarkerImage{nullptr};                         //放置标记图片
+    UIImageView *triangulation{nullptr};                            //三角图片
+    const Vector2<float> VIEW_CENTER = {VIEW_CENTERS, VIEW_CENTERS};//二维向量
+    bool resLoadStatus{false};
+};
+}
 #endif
\ No newline at end of file
index cd025a4..0a4b2d4 100644 (file)
@@ -1,32 +1,40 @@
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: MainCompassPresenter.h\r
- * Author:\r
- * Create: 2021-12-21\r
- */\r
-#ifndef COMPASS_MAINPRESENTER_H\r
-#define COMPASS_MAINPRESENTER_H\r
-\r
-#include "Presenter.h"\r
-#include "ModelListenerSample.h"\r
-#include "ohos_types.h"\r
-#include "UiConfig.h"\r
-#include "AppViewIDs.h"\r
-#include "MainCompassView.h"\r
-#include "CompassPresenter.h"\r
-#include "CompassModel.h"\r
-#include "CompassCalibrationView.h"\r
-\r
-namespace OHOS {\r
-class MainCompassPresenter : public Presenter<MainCompassView>, public CompassPresenter,\r
-    public ModelListenerSample, public UIView::OnDragListener {\r
-public:\r
-    MainCompassPresenter();\r
-    ~MainCompassPresenter() override;\r
-\r
-    static MainCompassPresenter *GetInstance(void);\r
-    bool OnDrag(UIView& view, const DragEvent& event) override;\r
-    void Notify() override;\r
-};\r
-}\r
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-07 09:21:47
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-27 09:42:42
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/compass/include/MainCompassPresenter.h
+ */
+#ifndef COMPASS_MAINPRESENTER_H
+#define COMPASS_MAINPRESENTER_H
+
+#include "Presenter.h"
+#include "ModelListenerSample.h"
+#include "ohos_types.h"
+#include "UiConfig.h"
+#include "AppViewIDs.h"
+#include "MainCompassView.h"
+#include "CompassPresenter.h"
+#include "CompassModel.h"
+#include "CompassCalibrationView.h"
+#include "KeyInputListener.h"
+#include "components/ui_label_ext.h"
+#include "ui_resource_string.h"
+
+namespace OHOS {
+class MainCompassPresenter : public Presenter<MainCompassView>, public CompassPresenter,
+    public RootView::OnKeyActListener,
+    public ModelListenerSample, public UIView::OnDragListener {
+public:
+    MainCompassPresenter();
+    ~MainCompassPresenter() override;
+
+    static MainCompassPresenter *GetInstance(void);
+    bool OnDrag(UIView& view, const DragEvent& event) override;
+    void Notify() override;
+    bool OnDragEnd(UIView& view, const DragEvent& event) override;
+    bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+    bool X_DRAG_FLAG{false};
+};
+}
 #endif
\ No newline at end of file
index 7ccfa71..304c8ff 100644 (file)
@@ -1,44 +1,44 @@
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: MainCompassView\r
- * Author:\r
- * Create: 2021-12-23\r
- */\r
-\r
-#ifndef MAIN_COMPASS_VIEW_H\r
-#define MAIN_COMPASS_VIEW_H\r
-\r
-#include <string>\r
-#include "View.h"\r
-#include "components/ui_label.h"\r
-#include "components/root_view.h"\r
-#include "components/ui_view_group.h"\r
-#include "components/ui_image_view.h"\r
-#include "components/ui_label_button.h"\r
-#include "ChangeSliceListener.h"\r
-#include "graphic_config.h"\r
-#include "CompassView.h"\r
-#include "CompassModel.h"\r
-#include "CompassCalibrationView.h"\r
-\r
-namespace OHOS {\r
-class MainCompassPresenter;\r
-class CompassView;\r
-class MainCompassView : public View<MainCompassPresenter> {\r
-public:\r
-    MainCompassView();\r
-    ~MainCompassView() override;\r
-\r
-    void OnStart() override;\r
-\r
-\r
-    static MainCompassView *GetInstance(void);\r
-    void SetDisplayTure(void);\r
-    void SetDisplayFalse(void);\r
-\r
-private:\r
-    CompassView *compassView{nullptr};\r
-    CompassCalibrationView *compassCalibrationView{nullptr};\r
-};\r
-} // namespace OHOS\r
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: MainCompassView
+ * Author:
+ * Create: 2021-12-23
+ */
+
+#ifndef MAIN_COMPASS_VIEW_H
+#define MAIN_COMPASS_VIEW_H
+
+#include <string>
+#include "View.h"
+#include "components/ui_label.h"
+#include "components/root_view.h"
+#include "components/ui_view_group.h"
+#include "components/ui_image_view.h"
+#include "components/ui_label_button.h"
+#include "ChangeSliceListener.h"
+#include "graphic_config.h"
+#include "compass/include/CompassView.h"
+#include "compass/include/CompassModel.h"
+#include "compass/include/CompassCalibrationView.h"
+
+namespace OHOS {
+class MainCompassPresenter;
+class CompassView;
+class MainCompassView : public View<MainCompassPresenter> {
+public:
+    MainCompassView();
+    ~MainCompassView() override;
+
+    void OnStart() override;
+
+
+    static MainCompassView *GetInstance(void);
+    void SetDisplayTure(void);
+    void SetDisplayFalse(void);
+
+private:
+    CompassView *compassView{nullptr};
+    CompassCalibrationView *compassCalibrationView{nullptr};
+};
+} // namespace OHOS
 #endif
\ No newline at end of file
index 390c0ae..248fe4f 100644 (file)
@@ -6,8 +6,9 @@
  */
 #include "UiConfig.h"
 #include "wearable_log.h"
-#include "CompassCalibrationView.h"
+#include "compass/include/CompassCalibrationView.h"
 #include "CompassModel.h"
+#include "ui_resource_string.h"
 
 namespace OHOS {
 // 标签设置
@@ -40,17 +41,24 @@ CompassCalibrationView::~CompassCalibrationView()
 void CompassCalibrationView::ClearAll(void)
 {
     RemoveAll();
-    if (labelOne != nullptr) {
-        delete labelOne;
-        labelOne = nullptr;
-    }
-    if (imageView != nullptr) {
-        delete imageView;
-        imageView = nullptr;
-    }
-    if (labelTwo != nullptr) {
-        delete labelTwo;
-        labelTwo = nullptr;
+    if(scrollView!=nullptr)
+    {
+        scrollView->RemoveAll();
+        if (labelOne != nullptr) {
+            delete labelOne;
+            labelOne = nullptr;
+        }
+        if (imageView != nullptr) {
+            delete imageView;
+            imageView = nullptr;
+        }
+        if (labelTwo != nullptr) {
+            delete labelTwo;
+            labelTwo = nullptr;
+        }
+        scrollView->ClearFocus();
+        delete scrollView;
+        scrollView = nullptr;
     }
 }
 
@@ -62,47 +70,77 @@ CompassCalibrationView *CompassCalibrationView::GetInstance(void)
 bool CompassCalibrationView::CreateUIViewGroup(void)
 {
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CompassCalibrationView::CreateUIViewGroup");
-    imageView = new UIImageView();
-    if (imageView == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CompassCalibrationView::new UIImageView fail");
-        return false;
+    if (scrollView == nullptr)
+    {
+        scrollView = new UIScrollView();
+        if (scrollView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail");
+            return false;
+        }
     }
-    imageView->SetPosition(0, 0);
-    imageView->SetSrc(COMPASS_CALIBRATE_IMAGE);
-
-    labelOne = new UILabel();
-    if (labelOne == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CompassCalibrationView::new labelOne fail");
-        ClearAll();
-        return false;
+    scrollView->SetPosition(0, 0, 466, 466);
+    scrollView->SetScrollBlankSize(50);
+    scrollView->SetReboundSize(35);
+    scrollView->SetThrowDrag(true);
+    scrollView->SetMaxScrollDistance(1000);
+    scrollView->SetDirection(UIScrollView::VERTICAL);
+    scrollView->RequestFocus();
+    scrollView->SetRotateFactor(1.0);
+    /* -------------------------------------------------------------------------- */
+    if (labelOne == nullptr) 
+    {
+        labelOne = new UILabelExt();
+        if (labelOne == nullptr) 
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CompassCalibrationView::new labelOne fail");
+            ClearAll();
+            return false;
+        }
     }
-
-    labelOne->SetPosition(LABEL_POSITION_X, LABEL_POSITION_Y, LABEL_POSITION_WIDTH, LABEL_POSITION_HEIGHT);
-    labelOne->SetText("请按图示");
-    labelOne->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
+    labelOne->SetPosition(83, 50,300,35);        
+    labelOne->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+    labelOne->SetStyle(STYLE_TEXT_FONT, 30);
+    labelOne->SetStyle(STYLE_LINE_HEIGHT, 35);
+    labelOne->SetTextId(STR_CALIBRATE_COMPASS);
+    labelOne->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
     labelOne->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-    labelOne->SetStyle(STYLE_TEXT_OPA, OPA_OPAQUE);
-    labelOne->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
-    labelOne->SetStyle(STYLE_TEXT_COLOR, Color::White().full);
-
-    labelTwo = new UILabel();
-    if (labelTwo == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CompassCalibrationView::new labelTwo fail");
-        ClearAll();
-        return false;
+    labelOne->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+    /* -------------------------------------------------------------------------- */
+    if (imageView == nullptr) {
+        imageView = new UIImageView();
+        if (imageView == nullptr) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CompassCalibrationView::new UIImageView fail");
+            return false;
+        }
     }
-
-    labelTwo->SetPosition(LABEL_POSITION_X1, LABEL_POSITION_Y1, LABEL_POSITION_WIDTH1, LABEL_POSITION_HEIGHT1);
-    labelTwo->SetText("旋转手表进行校准");
-    labelTwo->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
+    imageView->SetPosition(78, 140,310,120);
+    imageView->SetSrc(COMPASS_CALIBRATE_IMAGE);
+    /* -------------------------------- labelTwo -------------------------------- */
+    if (labelTwo == nullptr) 
+    {
+        labelTwo = new UILabelExt();
+        if (labelTwo == nullptr) 
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CompassCalibrationView::new labelTwo fail");
+            ClearAll();
+            return false;
+        }
+    }
+    labelTwo->SetPosition(53, 300,360,70);        
+    labelTwo->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+    labelTwo->SetStyle(STYLE_TEXT_FONT, 30);
+    labelTwo->SetStyle(STYLE_LINE_HEIGHT, 35);
+    labelTwo->SetTextId(STR_CALIBRATE_COMPASS_NOTE);
+    labelTwo->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+    labelTwo->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));
     labelTwo->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-    labelTwo->SetStyle(STYLE_TEXT_OPA, OPA_OPAQUE);
-    labelTwo->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
-    labelTwo->SetStyle(STYLE_TEXT_COLOR, Color::White().full);
+    labelTwo->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
 
-    Add(imageView);
-    Add(labelOne);
-    Add(labelTwo);
+    scrollView->Add(imageView);
+    scrollView->Add(labelOne);
+    scrollView->Add(labelTwo);
+    Add(scrollView);
     SetDraggable(false);
     SetTouchable(false);
     initViewStatus = true;
index 546dd33..49f0e15 100644 (file)
@@ -1,11 +1,13 @@
 /*
- * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.
- * Description: CompassControlView.cpp
- * Author:
- * Create: 2022-04-02
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-12 11:44:23
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 11:48:01
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/compass/src/CompassControlView.cpp
  */
-#include "CompassControlView.h"
-#include "CompassModel.h"
+#include "compass/include/CompassControlView.h"
+#include "compass/include/CompassModel.h"
+#include "wearable_log.h"
 
 namespace OHOS {
 CompassControlView::CompassControlView()
@@ -70,9 +72,9 @@ bool CompassControlView::InitView(void)
 
 void CompassControlView::SetCalibrationView(bool flag)
 {
-    if (flag == isCalibration) {
-        return;
-    }
+    // if (flag == isCalibration) {
+    //     return;
+    // }
 
     if (flag) {
         compassCalibrationView->SetVisible(true);
@@ -85,14 +87,23 @@ void CompassControlView::SetCalibrationView(bool flag)
 
 void CompassControlView::PreLoad(void)
 {
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CompassControlView::PreLoad");
     if (!viewiInitStatus) {
         InitView();
         viewiInitStatus = true;
     }
+    if( compassView != nullptr) 
+    {
+        compassView->PreLoadCompassImageRes();
+    }
 }
 
 void CompassControlView::UnLoad(void)
 {
-    // Compass's usage scenes is complicated, so we do not release it's resources inner slice.
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CompassControlView::UnLoad");
+    if( compassView != nullptr) 
+    {
+        compassView->UnLoadCompassImageRes();
+    }
 }
 }
index e9ff3f5..ee4c99b 100644 (file)
@@ -6,12 +6,15 @@
  */
 
 #include <sys/time.h>
-#include "CompassModel.h"
+#include "compass/include/CompassModel.h"
 #include <ctime>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
+#ifdef MAG_MMC5603
+#include "mag_service.h"
+#endif
 
 using namespace OHOS;
 
@@ -26,24 +29,50 @@ CompassModel *CompassModel::GetInstance(void)
     return &instance;
 }
 
+/*
+ * @brief 设置校准状态 
+*/
 void CompassModel::SetCalibrationStatus(uint8_t status)
 {
+
     calibrationStatus = status;
 }
 
+/*
+ * @brief 获取校准状态
+ * @param  void
+ * @return 如果校准精度小于3,返回<b>1</b>,否则返回<b>0</b>
+*/
 uint8_t CompassModel::GetCalibrationStatus(void)
 {
+    #ifdef MAG_MMC5603
+    if( mag_service_get_iAccuracy() < 3)
+        return 1;
+    else 
+        return 0;
+    #else
     return 0;
+    #endif
 }
 
+/* 
+ * @brief 设置显示的角度,通常表示为从地磁北方向到设备当前朝向的角度。
+*/
 void CompassModel::SetDisplayAngle(uint16_t angle)
 {
+    #ifdef MAG_MMC5603
+    displayAngle = (int16_t)mag_service_get_fAzimuth();
+    #else
     displayAngle += angle;
     if (displayAngle > 359) {
         displayAngle = 0;
     }
+    #endif
 }
 
+/*
+ * @brief 获取显示角度 
+*/
 uint16_t CompassModel::GetDisplayAngle(void)
 {
     return displayAngle;
@@ -66,13 +95,29 @@ time_t CompassModel::GetCurrentTime(void)
     return tv.tv_sec;
 }
 
+/*
+ * @brief 打开指南针传感器 
+ * @param void
+ * @return 如果指南针传感器打开成功则返回true,否则返回false
+*/
 bool CompassModel::OpenCompassSensor(void)
 {
+    #ifdef MAG_MMC5603
+    do_mag_service_check_msg(MAG_SERVICE_CMD_START_CHECK);
+    #endif
     return true;
 }
 
+/*
+ * @brief 关闭指南针传感器 
+ * @param void
+ * @return 如果指南针传感器关闭成功则返回true,否则返回false
+*/
 bool CompassModel::CloseCompassSensor(void)
 {
+    #ifdef MAG_MMC5603
+    do_mag_service_check_msg(MAG_SERVICE_CMD_STOP_CHECK);
+    #endif
     return true;
 }
 }
index 4a48b54..9b8c4b8 100644 (file)
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: CompassPresenter.cpp\r
- * Author:\r
- * Create: 2021-12-21\r
- */\r
-#include "CompassView.h"\r
-#include "CompassPresenter.h"\r
-#include "CompassModel.h"\r
-#include "graphic_service.h"\r
-\r
-namespace OHOS {\r
-static constexpr int16_t RIGHT_NORTH_DOWN_23 = 23;\r
-static constexpr int16_t RIGHT_EASTNORTH_UP_68 = 68;\r
-static constexpr int16_t RIGHT_WESTNORTH_UP_338 = 338;\r
-static constexpr int16_t RIGHT_SOUTH_UP_203 = 203;\r
-static constexpr int16_t RIGHT_EASTSOUTH_UP_158 = 158;\r
-static constexpr int16_t RIGHT_WESTSOUTH_UP_248 = 248;\r
-static constexpr int16_t RIGHT_WEST_UP_293 = 293;\r
-static constexpr int16_t RIGHT_EAST_UP_113 = 113;\r
-static constexpr int16_t RIGHT_MAX_ANGLE_360 = 360;\r
-static constexpr int16_t RIGHT_HALF_ANGLE_180 = 180;\r
-static constexpr int16_t RIGHT_ROTATION_INTERVAL = 2;\r
-static constexpr int16_t DIRECTION_COUNT = 7;\r
-static constexpr int16_t LEFT_NORTH_DOWN_23 = -23;\r
-static constexpr int16_t LEFT_EASTNORTH_DOWN_337 = -337;\r
-static constexpr int16_t LEFT_WESTNORTH_DOWN_68 = -68;\r
-static constexpr int16_t LEFT_SOUTH_DOWN_202 = -202;\r
-static constexpr int16_t LEFT_EASTSOUTH_DOWN_247 = -247;\r
-static constexpr int16_t LEFT_WESTSOUTH_DOWN_157 = -157;\r
-static constexpr int16_t LEFT_WEST_DOWN_113 = -113;\r
-static constexpr int16_t LEFT_EAST_DOWN_292 = -292;\r
-static constexpr int16_t RIGHT_MIN_ANGLE_360 = -360;\r
-static constexpr int16_t LEFT_HALF_ANGLE_180 = -180;\r
-static constexpr int16_t LEFT_ROTATION_INTERVAL = -2;\r
-\r
-static constexpr const char *NORTH_DIRECTION =  (char *)"北";\r
-static constexpr const char *SOUTH_DIRECTION =  (char *)"南";\r
-static constexpr const char *WEST_DIRECTION =  (char *)"西";\r
-static constexpr const char *EAST_DIRECTION =  (char *)"东";\r
-static constexpr const char *WESTNORTH_DIRECTION =  (char *)"西北";\r
-static constexpr const char *WESTSOUTH_DIRECTION =  (char *)"西南";\r
-static constexpr const char *EASTSOUTH_DIRECTION =  (char *)"东南";\r
-static constexpr const char *EASTNORTH_DIRECTION =  (char *)"东北";\r
-\r
-const CompassItem g_compassList[] = {\r
-    {RIGHT_NORTH_DOWN_23, RIGHT_EASTNORTH_UP_68, EASTNORTH_DIRECTION},\r
-    {RIGHT_EASTNORTH_UP_68, RIGHT_EAST_UP_113, EAST_DIRECTION},\r
-    {RIGHT_EAST_UP_113, RIGHT_EASTSOUTH_UP_158, EASTSOUTH_DIRECTION},\r
-    {RIGHT_EASTSOUTH_UP_158, RIGHT_SOUTH_UP_203, SOUTH_DIRECTION},\r
-    {RIGHT_SOUTH_UP_203, RIGHT_WESTSOUTH_UP_248, WESTSOUTH_DIRECTION},\r
-    {RIGHT_WESTSOUTH_UP_248, RIGHT_WEST_UP_293, WEST_DIRECTION},\r
-    {RIGHT_WEST_UP_293, RIGHT_WESTNORTH_UP_338, WESTNORTH_DIRECTION}\r
-};\r
-\r
-static CompassPresenter *g_pMainView = nullptr;\r
-\r
-CompassPresenter::CompassPresenter()\r
-{\r
-    g_pMainView = this;\r
-}\r
-\r
-CompassPresenter::~CompassPresenter()\r
-{\r
-    g_pMainView = nullptr;\r
-}\r
-\r
-CompassPresenter* CompassPresenter::GetInstance(void)\r
-{\r
-    return g_pMainView;\r
-}\r
-\r
-void CompassPresenter::DisplayAngleRight(uint16_t angle)\r
-{\r
-    if ((angle >= RIGHT_WESTNORTH_UP_338) || (angle >= 0 && angle < RIGHT_NORTH_DOWN_23)) {\r
-        CompassView::GetInstance()->DirectionSetText(NORTH_DIRECTION, (std::to_string(angle) + "°").c_str());\r
-    }\r
-    for (int i = 0; i < DIRECTION_COUNT; i++) {\r
-        if ((angle >= g_compassList[i].beginAngle) && (angle < g_compassList[i].endAngle)) {\r
-            CompassView::GetInstance()->DirectionSetText(g_compassList[i].dir, (std::to_string(angle) + "°").c_str());\r
-        }\r
-    }\r
-}\r
-\r
-void CompassPresenter::DisplayAngleDir(uint16_t angle)\r
-{\r
-    if (CompassView::GetInstance() == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DisplayAngleDir]CompassView::GetInstance() is nullptr");\r
-        return;\r
-    }\r
-    if (angle >= 0 && angle <= RIGHT_MAX_ANGLE_360) {\r
-        DisplayAngleRight(angle);\r
-    }\r
-}\r
-\r
-\r
-void CompassPresenter::InScopeRotate(void)\r
-{\r
-    angleDiff = lastRotateAngle - currentRotateAngle;\r
-    if (angleDiff > LEFT_HALF_ANGLE_180 && angleDiff < RIGHT_HALF_ANGLE_180) {\r
-        if (lastRotateAngle < currentRotateAngle) {\r
-            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);\r
-            if (angleDiff <= LEFT_ROTATION_INTERVAL) {\r
-                lastRotateAngle+=RIGHT_ROTATION_INTERVAL;\r
-            } else {\r
-                lastRotateAngle++;\r
-            }\r
-        } else if (lastRotateAngle != currentRotateAngle) {\r
-            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);\r
-            if (angleDiff >= RIGHT_ROTATION_INTERVAL) {\r
-                lastRotateAngle-=RIGHT_ROTATION_INTERVAL;\r
-            } else {\r
-                lastRotateAngle--;\r
-            }\r
-        }\r
-    } else {\r
-        if (lastRotateAngle < currentRotateAngle) {\r
-            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);\r
-            if (angleDiff <= LEFT_ROTATION_INTERVAL) {\r
-                lastRotateAngle-=RIGHT_ROTATION_INTERVAL;\r
-            } else {\r
-                lastRotateAngle--;\r
-            }\r
-            if (lastRotateAngle <= 0) {\r
-                lastRotateAngle = RIGHT_MAX_ANGLE_360;\r
-            }\r
-        } else if (lastRotateAngle != currentRotateAngle) {\r
-            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);\r
-            if (angleDiff >= RIGHT_ROTATION_INTERVAL) {\r
-                lastRotateAngle+=RIGHT_ROTATION_INTERVAL;\r
-            } else {\r
-                lastRotateAngle++;\r
-            }\r
-            if (lastRotateAngle >= RIGHT_MAX_ANGLE_360) {\r
-                lastRotateAngle = 0;\r
-            }\r
-        }\r
-    }\r
-}\r
-\r
-void CompassPresenter::DetermineToRotate(void)\r
-{\r
-    if (CompassView::GetInstance()  == nullptr) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DetermineToRotate]CompassView::GetInstance() is nullptr");\r
-        return;\r
-    }\r
-    bool initState = CompassView::GetInstance()->GetInitViewState();\r
-    if (initState) {\r
-        if (initDisplayStatus) {\r
-            currentRotateAngle = CompassModel::GetInstance()->GetDisplayAngle();\r
-            lastRotateAngle = currentRotateAngle;\r
-            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);\r
-            DisplayAngleDir(currentRotateAngle);\r
-            initDisplayStatus = false;\r
-        } else {\r
-            if (!getAngleStatus) {\r
-                currentRotateAngle = CompassModel::GetInstance()->GetDisplayAngle();\r
-            }\r
-            InScopeRotate();\r
-            getAngleStatus = true;\r
-            if (lastRotateAngle == currentRotateAngle) {\r
-                CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);\r
-                DisplayAngleDir(currentRotateAngle);\r
-                getAngleStatus = false;\r
-            }\r
-        }\r
-    }\r
-    CompassModel::GetInstance()->SetDisplayAngle(1);\r
-}\r
-\r
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: CompassPresenter.cpp
+ * Author:
+ * Create: 2021-12-21
+ */
+#include "compass/include/CompassView.h"
+#include "compass/include/CompassPresenter.h"
+#include "compass/include/CompassModel.h"
+#include "graphic_service.h"
+#include "gfx_utils/mem_check.h"
+#include "ui_resource_string.h"
+namespace OHOS {
+static constexpr int16_t RIGHT_NORTH_DOWN_23 = 23;
+static constexpr int16_t RIGHT_EASTNORTH_UP_68 = 68;
+static constexpr int16_t RIGHT_WESTNORTH_UP_338 = 338;
+static constexpr int16_t RIGHT_SOUTH_UP_203 = 203;
+static constexpr int16_t RIGHT_EASTSOUTH_UP_158 = 158;
+static constexpr int16_t RIGHT_WESTSOUTH_UP_248 = 248;
+static constexpr int16_t RIGHT_WEST_UP_293 = 293;
+static constexpr int16_t RIGHT_EAST_UP_113 = 113;
+static constexpr int16_t RIGHT_MAX_ANGLE_360 = 360;
+static constexpr int16_t RIGHT_HALF_ANGLE_180 = 180;
+static constexpr int16_t RIGHT_ROTATION_INTERVAL = 2;
+static constexpr int16_t DIRECTION_COUNT = 7;
+static constexpr int16_t LEFT_NORTH_DOWN_23 = -23;
+static constexpr int16_t LEFT_EASTNORTH_DOWN_337 = -337;
+static constexpr int16_t LEFT_WESTNORTH_DOWN_68 = -68;
+static constexpr int16_t LEFT_SOUTH_DOWN_202 = -202;
+static constexpr int16_t LEFT_EASTSOUTH_DOWN_247 = -247;
+static constexpr int16_t LEFT_WESTSOUTH_DOWN_157 = -157;
+static constexpr int16_t LEFT_WEST_DOWN_113 = -113;
+static constexpr int16_t LEFT_EAST_DOWN_292 = -292;
+static constexpr int16_t RIGHT_MIN_ANGLE_360 = -360;
+static constexpr int16_t LEFT_HALF_ANGLE_180 = -180;
+static constexpr int16_t LEFT_ROTATION_INTERVAL = -2;
+
+static constexpr const char *NORTH_DIRECTION =  (char *)"北";
+static constexpr const char *SOUTH_DIRECTION =  (char *)"南";
+static constexpr const char *WEST_DIRECTION =  (char *)"西";
+static constexpr const char *EAST_DIRECTION =  (char *)"东";
+static constexpr const char *WESTNORTH_DIRECTION =  (char *)"西北";
+static constexpr const char *WESTSOUTH_DIRECTION =  (char *)"西南";
+static constexpr const char *EASTSOUTH_DIRECTION =  (char *)"东南";
+static constexpr const char *EASTNORTH_DIRECTION =  (char *)"东北";
+
+static constexpr const int NORTH_DIRECTION_TEXTID =  STR_NORTH;//北
+static constexpr const int SOUTH_DIRECTION_TEXTID =  STR_SOUTH;//南
+static constexpr const int WEST_DIRECTION_TEXTID =  STR_WEST;//西
+static constexpr const int EAST_DIRECTION_TEXTID =  STR_EAST;//东
+static constexpr const int WESTNORTH_DIRECTION_TEXTID =  STR_NORTHWEST;//西北
+static constexpr const int WESTSOUTH_DIRECTION_TEXTID =  STR_SOUTHWEST;//西南
+static constexpr const int EASTSOUTH_DIRECTION_TEXTID =  STR_SOUTHEAST;//西南
+static constexpr const int EASTNORTH_DIRECTION_TEXTID =  STR_NORTHEAST;//东北
+
+const CompassItem g_compassList[] = {
+    {RIGHT_NORTH_DOWN_23, RIGHT_EASTNORTH_UP_68, EASTNORTH_DIRECTION,EASTNORTH_DIRECTION_TEXTID},
+    {RIGHT_EASTNORTH_UP_68, RIGHT_EAST_UP_113, EAST_DIRECTION,EAST_DIRECTION_TEXTID},
+    {RIGHT_EAST_UP_113, RIGHT_EASTSOUTH_UP_158, EASTSOUTH_DIRECTION,EASTSOUTH_DIRECTION_TEXTID},
+    {RIGHT_EASTSOUTH_UP_158, RIGHT_SOUTH_UP_203, SOUTH_DIRECTION,SOUTH_DIRECTION_TEXTID},
+    {RIGHT_SOUTH_UP_203, RIGHT_WESTSOUTH_UP_248, WESTSOUTH_DIRECTION,WESTSOUTH_DIRECTION_TEXTID},
+    {RIGHT_WESTSOUTH_UP_248, RIGHT_WEST_UP_293, WEST_DIRECTION,WEST_DIRECTION_TEXTID},
+    {RIGHT_WEST_UP_293, RIGHT_WESTNORTH_UP_338, WESTNORTH_DIRECTION,WESTNORTH_DIRECTION_TEXTID}
+};
+
+static CompassPresenter *g_pMainView = nullptr;
+
+CompassPresenter::CompassPresenter()
+{
+    g_pMainView = this;
+#ifdef MEM_CHECK
+        MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
+}
+
+CompassPresenter::~CompassPresenter()
+{
+    g_pMainView = nullptr;
+#ifdef MEM_CHECK
+        MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
+}
+
+CompassPresenter* CompassPresenter::GetInstance(void)
+{
+    return g_pMainView;
+}
+//显示指南针的角度
+
+/*
+ * @brief 根据传入的角度值 angle 来更新指南针的显示方向
+ * @param angle 角度值 
+*/
+void CompassPresenter::DisplayAngleRight(uint16_t angle)
+{
+    if ((angle >= RIGHT_WESTNORTH_UP_338) || (angle >= 0 && angle < RIGHT_NORTH_DOWN_23)) {
+        //CompassView::GetInstance()->DirectionSetText(NORTH_DIRECTION, ("~" + std::to_string(angle) + "°").c_str());
+        // CompassView::GetInstance()->DirectionSetText(NORTH_DIRECTION, (std::to_string(angle) + "°").c_str());
+        CompassView::GetInstance()->DirectionSetTextId(NORTH_DIRECTION_TEXTID, (std::to_string(angle) + "°").c_str());
+    }
+    for (int i = 0; i < DIRECTION_COUNT; i++) {
+        if ((angle >= g_compassList[i].beginAngle) && (angle < g_compassList[i].endAngle)) {
+            // CompassView::GetInstance()->DirectionSetText(g_compassList[i].dir, ("~" + std::to_string(angle) + "°").c_str());
+            // CompassView::GetInstance()->DirectionSetText(g_compassList[i].dir, (std::to_string(angle) + "°").c_str());
+            CompassView::GetInstance()->DirectionSetTextId(g_compassList[i].dir_textId, (std::to_string(angle) + "°").c_str());
+        }
+    }
+}
+
+/*
+ * @brief 校验 CompassView 的实例是否存在,并确定传入的角度值是否有效
+*/
+void CompassPresenter::DisplayAngleDir(uint16_t angle)
+{
+    if (CompassView::GetInstance() == nullptr) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DisplayAngleDir]CompassView::GetInstance() is nullptr");
+        return;
+    }
+    if (angle >= 0 && angle <= RIGHT_MAX_ANGLE_360) {
+        DisplayAngleRight(angle);
+    }
+}
+
+/*
+ * @brief 根据上一次和当前的旋转角度来判断如何旋转指南针,使其指向正确的方向
+*/
+void CompassPresenter::InScopeRotate(void)
+{
+    angleDiff = lastRotateAngle - currentRotateAngle;
+    if (angleDiff > LEFT_HALF_ANGLE_180 && angleDiff < RIGHT_HALF_ANGLE_180) {
+        if (lastRotateAngle < currentRotateAngle) {
+            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);
+            if (angleDiff <= LEFT_ROTATION_INTERVAL) {
+                lastRotateAngle+=RIGHT_ROTATION_INTERVAL;
+            } else {
+                lastRotateAngle++;
+            }
+        } else if (lastRotateAngle != currentRotateAngle) {
+            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);
+            if (angleDiff >= RIGHT_ROTATION_INTERVAL) {
+                lastRotateAngle-=RIGHT_ROTATION_INTERVAL;
+            } else {
+                lastRotateAngle--;
+            }
+        }
+    } else {
+        if (lastRotateAngle < currentRotateAngle) {
+            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);
+            if (angleDiff <= LEFT_ROTATION_INTERVAL) {
+                lastRotateAngle-=RIGHT_ROTATION_INTERVAL;
+            } else {
+                lastRotateAngle--;
+            }
+            if (lastRotateAngle <= 0) {
+                lastRotateAngle = RIGHT_MAX_ANGLE_360;
+            }
+        } else if (lastRotateAngle != currentRotateAngle) {
+            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);
+            if (angleDiff >= RIGHT_ROTATION_INTERVAL) {
+                lastRotateAngle+=RIGHT_ROTATION_INTERVAL;
+            } else {
+                lastRotateAngle++;
+            }
+            if (lastRotateAngle >= RIGHT_MAX_ANGLE_360) {
+                lastRotateAngle = 0;
+            }
+        }
+    }
+}
+
+/*
+ * @brief 在指南针视图初始化的情况下,根据旋转角度的变化来执行指南针的旋转操作,并在需要的时候更新显示的角度和方向。
+*/
+void CompassPresenter::DetermineToRotate(void)
+{
+    if (CompassView::GetInstance()  == nullptr) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DetermineToRotate]CompassView::GetInstance() is nullptr");
+        return;
+    }
+    bool initState = CompassView::GetInstance()->GetInitViewState();
+    if (initState == true) {
+        if (initDisplayStatus == true) {
+            currentRotateAngle = CompassModel::GetInstance()->GetDisplayAngle();
+            lastRotateAngle = currentRotateAngle;
+            CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);
+            DisplayAngleDir(currentRotateAngle);
+            initDisplayStatus = false;
+        } else {
+            if (getAngleStatus == false) {
+                currentRotateAngle = CompassModel::GetInstance()->GetDisplayAngle();
+            }
+            InScopeRotate();
+            getAngleStatus = true;
+            if (lastRotateAngle == currentRotateAngle) {
+                CompassView::GetInstance()->CompassStartRotate(lastRotateAngle);
+                DisplayAngleDir(currentRotateAngle);
+                getAngleStatus = false;
+            }
+        }
+    }
+    GraphicService::GetInstance()->PostGraphicEvent(std::bind(&CompassModel::SetDisplayAngle,
+                                                              CompassModel::GetInstance(), 1));//将任务发布到异步线程
+}
+
 }
\ No newline at end of file
index 0a87fd1..1f76a77 100644 (file)
@@ -7,21 +7,32 @@
 #include <string>
 #include "common/image_cache_manager.h"
 #include "ui_resource_image.h"
-#include "CompassView.h"
-#include "MainCompassView.h"
-
+#include "compass/include/CompassView.h"
+#include "compass/include/MainCompassView.h"
+#include "compass/include/CompassPresenter.h"
+#include "ui_resource_string.h"
 namespace OHOS {
-static constexpr int16_t POINT_CENTER_IMAGE_X = 150;
-static constexpr int16_t POINT_CENTER_IMAGE_Y = 150;
-static constexpr int16_t TRIANGULATION_X = 210;
+static constexpr int16_t COMPASSVIEW_W = 466;
+static constexpr int16_t COMPASSVIEW_H = 466;
+static constexpr int16_t POINT_CENTER_IMAGE_X = 192;
+static constexpr int16_t POINT_CENTER_IMAGE_Y = 282;
+static constexpr int16_t TRIANGULATION_X = 221;
 static constexpr int16_t TRIANGULATION_Y = 0;
-static constexpr int16_t DIRECTIONLABEL_X = 160;
-static constexpr int16_t DIRECTIONLABEL_Y = 215;
-static constexpr int16_t FONT_TEXT_SIZE = 25;
-static constexpr int16_t ANGLEDLABEL_X = 215;
-static constexpr int16_t ANGLEDLABEL_Y = 215;
-static constexpr int16_t TEXT_WIDTH = 90;
-static constexpr int16_t TEXT_HEIGHT = 35;
+
+static constexpr int16_t DIRECTIONLABEL_X = 83;
+static constexpr int16_t DIRECTIONLABEL_Y = 161;
+static constexpr int16_t DIRECTIONLABEL_TEXT_WIDTH = 300;
+static constexpr int16_t DIRECTIONLABEL_TEXT_HEIGH = 76;
+static constexpr int16_t DIRECTIONLABEL_FONT_TEXT_SIZE = 65;
+static constexpr int16_t DIRECTIONLABEL_STYLE_LINE_HEIGHT = 76;
+
+static constexpr int16_t ANGLEDLABEL_X = 83;
+static constexpr int16_t ANGLEDLABEL_Y = 240;
+static constexpr int16_t ANGLEDLABEL_TEXT_WIDTH = 300;
+static constexpr int16_t ANGLEDLABEL_TEXT_HEIGHT = 76;
+static constexpr int16_t ANGLEDLABEL_FONT_TEXT_SIZE = 65;
+static constexpr int16_t ANGLEDLABEL_STYLE_LINE_HEIGHT = 76;
+
 static constexpr int16_t RANDOM_NUMBER_720 = 720;
 static constexpr int16_t RANDOM_NUMBER_360 = 360;
 static constexpr int16_t DELAYING_NUMS = 2000;
@@ -44,6 +55,7 @@ CompassView::~CompassView()
 void CompassView::ClearAll(void)
 {
     RemoveAll();
+    UnLoadCompassImageRes();
     if (directionLabel != nullptr) {
         delete directionLabel;
         directionLabel= nullptr;
@@ -56,22 +68,34 @@ void CompassView::ClearAll(void)
         delete backGround;
         backGround = nullptr;
     }
-    if (rotateShaft != nullptr) {
-        delete rotateShaft;
-        rotateShaft = nullptr;
+       if(PlaceMarkerImage != nullptr)
+    {
+        delete PlaceMarkerImage;
+        PlaceMarkerImage = nullptr;
     }
     if (triangulation != nullptr) {
         delete triangulation;
         triangulation = nullptr;
     }
 }
-
+//方向和角度设置
 void CompassView::DirectionSetText(const char *text, const char *angle)
 {
     directionLabel->SetText(text);
     angledLabel->SetText(angle);
 }
+void CompassView::DirectionSetTextId(int textId, const char *angle)
+{
+    if(directionLabel && angledLabel) 
+    {
+        directionLabel->SetTextId(textId);
+        directionLabel->Invalidate();
 
+        angledLabel->SetText(angle);
+        angledLabel->Invalidate();
+    }
+}
+//加载指南针图片
 bool CompassView::LoadCompassImage(UIImageView *view, uint32_t resId)
 {
     std::string file = COMPASS_IAMGES;
@@ -84,7 +108,51 @@ bool CompassView::LoadCompassImage(UIImageView *view, uint32_t resId)
     view->SetSrc(image);
     return true;
 }
-
+bool CompassView::GetResLoadStatus(void)
+{
+    return resLoadStatus;
+}
+void CompassView::SetResLoadStatus(bool state)
+{
+    resLoadStatus = state;
+}
+/*预加载指南针图片资源*/
+void CompassView::PreLoadCompassImageRes(void)
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CompassView::PreLoadCompassImageRes");
+    if(!GetResLoadStatus()){
+        if (LoadCompassImage(backGround, COMPASS_COMPASS0) == false) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], triangulation load fail", __LINE__);
+            return;
+        }
+        if (LoadCompassImage(PlaceMarkerImage, COMPASS_COMPASS1) == false) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], PlaceMarkerImage load fail", __LINE__);
+            return;
+        }
+        if (LoadCompassImage(triangulation, COMPASS_COMPASS2) == false) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "triangulation load fail");
+            return ;
+        }
+        SetResLoadStatus(true);
+    }
+}
+/*卸载指南针图片资源*/
+void CompassView::UnLoadCompassImageRes(void)
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CompassView::UnLoadCompassImageRes");
+    if(GetResLoadStatus())
+    {
+        ImageInfo* image = nullptr;
+        backGround->SetSrc(image);
+        PlaceMarkerImage->SetSrc(image);
+        triangulation->SetSrc(image);
+        ImageCacheManager::GetInstance().UnloadOneInMultiRes(COMPASS_COMPASS0,COMPASS_IAMGES);
+        ImageCacheManager::GetInstance().UnloadOneInMultiRes(COMPASS_COMPASS1,COMPASS_IAMGES);
+        ImageCacheManager::GetInstance().UnloadOneInMultiRes(COMPASS_COMPASS2,COMPASS_IAMGES);
+        SetResLoadStatus(false);
+    }
+}
+//初始化指南针图片
 bool CompassView::InitCompassImage(void)
 {
     backGround = new UIImageView();
@@ -94,19 +162,19 @@ bool CompassView::InitCompassImage(void)
     }
     backGround->SetPosition(0, 0);
 
-    if (!LoadCompassImage(backGround, COMPASS_COMPASS0)) {
+    if (LoadCompassImage(backGround, COMPASS_COMPASS0) == false) {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], triangulation load fail", __LINE__);
         return false;
     }
 
-    rotateShaft = new UIImageView();
-    if (rotateShaft == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], rotateShaft new fail", __LINE__);
+    PlaceMarkerImage = new UIImageView();
+    if (PlaceMarkerImage == nullptr) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], PlaceMarkerImage new fail", __LINE__);
         return false;
     }
-    rotateShaft->SetPosition(POINT_CENTER_IMAGE_X, POINT_CENTER_IMAGE_Y);
-    if (!LoadCompassImage(rotateShaft, COMPASS_COMPASS1)) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], rotateShaft load fail", __LINE__);
+    PlaceMarkerImage->SetPosition(POINT_CENTER_IMAGE_X, POINT_CENTER_IMAGE_Y);
+    if (LoadCompassImage(PlaceMarkerImage, COMPASS_COMPASS1) == false) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d], PlaceMarkerImage load fail", __LINE__);
         return false;
     }
 
@@ -116,35 +184,42 @@ bool CompassView::InitCompassImage(void)
         return false;
     }
     triangulation->SetPosition(TRIANGULATION_X, TRIANGULATION_Y);
-    if (!LoadCompassImage(triangulation, COMPASS_COMPASS2)) {
+    if (LoadCompassImage(triangulation, COMPASS_COMPASS2) == false) {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "triangulation load fail");
         return false;
     }
+    
+    SetResLoadStatus(true);
+
     return true;
 }
-
+//初始化页面
 bool CompassView::InitPage(void)
-{
-    if (!InitCompassImage()) {
+{ 
+    if (InitCompassImage() == false) {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitCompassImage fail");
         ClearAll();
         return false;
     }
 
-    directionLabel = new UILabel();
+    directionLabel = new UILabelExt();
     if (directionLabel == nullptr) {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "directionLabel new fail");
         ClearAll();
         return false;
     }
     directionLabel->SetPosition(DIRECTIONLABEL_X, DIRECTIONLABEL_Y);
-    directionLabel->Resize(TEXT_WIDTH, TEXT_HEIGHT);
-    directionLabel->SetText("北");
-    directionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_TEXT_SIZE);
+    directionLabel->Resize(DIRECTIONLABEL_TEXT_WIDTH, DIRECTIONLABEL_TEXT_HEIGH);
+    directionLabel->SetTextId(STR_NORTH);
+    directionLabel->SetStyle(STYLE_TEXT_FONT, DIRECTIONLABEL_FONT_TEXT_SIZE);
+    directionLabel->SetStyle(STYLE_LINE_HEIGHT, DIRECTIONLABEL_STYLE_LINE_HEIGHT);
+    directionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, DIRECTIONLABEL_FONT_TEXT_SIZE);
+    directionLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+    directionLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff)); 
     directionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-    directionLabel->SetStyle(STYLE_TEXT_OPA, OPA_OPAQUE);
-    directionLabel->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
-    directionLabel->SetStyle(STYLE_TEXT_COLOR, Color::White().full);
+    // directionLabel->SetStyle(STYLE_TEXT_OPA, OPA_OPAQUE);
+    // directionLabel->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+    // directionLabel->SetStyle(STYLE_TEXT_COLOR, Color::White().full);
 
     angledLabel = new UILabel();
     if (angledLabel == nullptr) {
@@ -152,17 +227,20 @@ bool CompassView::InitPage(void)
         ClearAll();
         return false;
     }
-    angledLabel->SetPosition(ANGLEDLABEL_X, ANGLEDLABEL_Y);
-    angledLabel->Resize(TEXT_WIDTH, TEXT_HEIGHT);
+    angledLabel->SetPosition(ANGLEDLABEL_X, ANGLEDLABEL_Y); 
+    angledLabel->Resize(ANGLEDLABEL_TEXT_WIDTH, ANGLEDLABEL_TEXT_HEIGHT);
     angledLabel->SetText("0°");
-    angledLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_TEXT_SIZE);
+    angledLabel->SetStyle(STYLE_TEXT_FONT, ANGLEDLABEL_FONT_TEXT_SIZE);
+    angledLabel->SetStyle(STYLE_LINE_HEIGHT, ANGLEDLABEL_STYLE_LINE_HEIGHT);
+    angledLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, ANGLEDLABEL_FONT_TEXT_SIZE);
+    angledLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
     angledLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
     angledLabel->SetStyle(STYLE_TEXT_OPA, OPA_OPAQUE);
     angledLabel->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
     angledLabel->SetStyle(STYLE_TEXT_COLOR, Color::White().full);
 
     Add(backGround);
-    Add(rotateShaft);
+    //Add(PlaceMarkerImage);
     Add(triangulation);
     Add(directionLabel);
     Add(angledLabel);
@@ -172,11 +250,11 @@ bool CompassView::InitPage(void)
     return true;
 }
 
-
+//初始化视图为可拖拽,可触摸
 bool CompassView::InitView(void *caller)
 {
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CompassView InitView %p", caller);
-    if (!InitPage()) {
+    if (InitPage() == false) {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitPage fail");
         return false;
     }
@@ -194,7 +272,7 @@ CompassView *CompassView::GetInstance(void)
 {
     return g_pCompassView;
 }
-
+//背景图片逆时针旋转numb度
 void CompassView::CompassStartRotate(int16_t numb)
 {
     if (backGround == nullptr) {
index 85eb0a2..d4ec6c6 100644 (file)
@@ -1,12 +1,18 @@
 /*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: MainCompassPresenter.cpp
- * Author:
- * Create: 2021-12-21
- */
-#include "CompassView.h"
-#include "MainCompassPresenter.h"
-#include "MainCompassView.h"
+* @Author: luozheng 1732036298@qq.com
+* @Date: 2024-03-14 15:02:03
+* @LastEditors: luozheng 1732036298@qq.com
+* @LastEditTime: 2024-10-28 18:25:42
+* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/compass/src/MainCompassPresenter.cpp
+*/
+
+#include "compass/include/CompassView.h"
+#include "compass/include/MainCompassPresenter.h"
+#include "compass/include/MainCompassView.h"
+#include "wearable_log.h"
+#include "common/key_code.h"
+#include "custom_utils.h"
+#include "UiConfig.h"
 #include "NativeRegisterManager.h"
 #include "ui_resource_string.h"
 
@@ -19,11 +25,13 @@ static MainCompassPresenter *g_pMainView = nullptr;
 
 MainCompassPresenter::MainCompassPresenter()
 {
+    ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
     g_pMainView = this;
 }
 
 MainCompassPresenter::~MainCompassPresenter()
 {
+    ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
     g_pMainView = nullptr;
 }
 
@@ -33,11 +41,37 @@ MainCompassPresenter* MainCompassPresenter::GetInstance()
     return g_pMainView;
 }
 
-bool MainCompassPresenter::OnDrag(UIView& view, const DragEvent& event)
+bool MainCompassPresenter::OnDrag(UIView &view, const DragEvent &event)
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainCompassPresenter::OnDrag");
+    UNUSED(view);
+    if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动
+    {
+        MainCompassPresenter::X_DRAG_FLAG = true;
+    }
+    return true;
+}
+
+bool MainCompassPresenter::OnDragEnd(UIView& view, const DragEvent& event)
 {
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainCompassPresenter::OnDragEnd");
     UNUSED(view);
-    if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {
-        NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+    if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && MainCompassPresenter::X_DRAG_FLAG)
+    {
+        NativeAbility::GetInstance().Back();
+    }
+    return true;
+}
+
+bool MainCompassPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainCompassPresenter::OnKeyAct");
+    uint16_t keyID = event.GetKeyId();
+    uint16_t keyState = event.GetState();
+    // 如果是power键就返回上一级
+    if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)
+    {
+        NativeAbility::GetInstance().Back();
     }
     return true;
 }
index 16d8338..211ec13 100644 (file)
@@ -5,8 +5,9 @@
  * Create: 2021-12-23
  */
 
-#include "MainCompassView.h"
-#include "MainCompassPresenter.h"
+#include "compass/include/MainCompassView.h"
+#include "compass/include/MainCompassPresenter.h"
+#include "compass/include/CompassModel.h"
 
 namespace OHOS {
 static constexpr int16_t TWO_HOUR_SECOND = 7200;
@@ -20,6 +21,7 @@ MainCompassView::MainCompassView()
 MainCompassView::~MainCompassView()
 {
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainCompassView::~MainCompassView");
+    CompassModel::GetInstance()->CloseCompassSensor();
     delete compassView;
     compassView = nullptr;
     delete compassCalibrationView;
@@ -102,6 +104,10 @@ void MainCompassView::OnStart()
         compassCalibrationView->SetVisible(false);
     }
     CompassModel::GetInstance()->OpenCompassSensor();
+
+    // 增加按键监听
+    RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::MainCompassPresenter::GetInstance();
+    RootView::GetInstance()->SetOnKeyActListener(keyactListener);
 }
 
 
index 42617ac..c34600f 100644 (file)
@@ -430,6 +430,7 @@ namespace OHOS
         {\r
             ChangeView(COUNTDOWN_MAX, MAIN_COUNTDOWN); // 如果倒计时的timer已经结束,则跳转到主界面\r
         }\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
         /* -------------------------------------------------------------------------- */\r
     }\r
 }
\ No newline at end of file
index bf74133..39118c5 100644 (file)
@@ -252,5 +252,6 @@ namespace OHOS
         {
             AddViewToRootContainer(scrollView);
         }
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 }
\ No newline at end of file
index ea029b8..7b6c542 100644 (file)
@@ -285,6 +285,7 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phone is not connected");
             FindPhoneViewInit_BlueToothDisConnected();
         }
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
         return;
     }
 }
\ No newline at end of file
index 10c19ea..30aa9d4 100644 (file)
@@ -61,6 +61,7 @@ namespace OHOS
             AddViewToRootContainer(group);
         }
         InitSwipeData();
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 
     void FlashlightView::DeinitSwipeData()
index 9e52ac7..54e370b 100644 (file)
@@ -135,6 +135,7 @@ namespace OHOS
         /* --------------------------------- 添加按键监听 --------------------------------- */
         // RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::MaingoalPresenter::GetInstance();
         //RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
         /* -------------------------------------------------------------------------- */
     }
 
index c6aa90d..935818d 100644 (file)
@@ -141,7 +141,7 @@ namespace OHOS
         GetRootContainer()->SetDraggable(true);
         GetRootContainer()->SetTouchable(true);
         GetRootContainer()->SetOnDragListener(presenter_);     
-        //RootView::GetInstance()->SetOnKeyActListener(presenter_);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
 
         if (imageAnimator != nullptr)
         {
index 0f85238..e467e17 100644 (file)
@@ -197,7 +197,7 @@ namespace OHOS
         GetRootContainer()->SetDraggable(true);
         GetRootContainer()->SetTouchable(true);
         GetRootContainer()->SetOnDragListener(presenter_);     
-        //RootView::GetInstance()->SetOnKeyActListener(presenter_);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
     
 }
index f103b59..29be8ad 100644 (file)
@@ -275,6 +275,7 @@ namespace OHOS
         UpdateShowConfig();
 
         AddViewToRootContainer(scrollView_);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
 
     }
    
index cd6134a..41e5a6f 100644 (file)
@@ -186,6 +186,7 @@ namespace OHOS
         scrollView->Add(MotionRecognitionToggleButton);
         scrollView->Add(note);
         AddViewToRootContainer(scrollView);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 
 
index 32a6b8e..e32c11c 100644 (file)
@@ -237,7 +237,7 @@ namespace OHOS
         NetworkAndCallScrollView[NETWORKANDCALLVIEW]->Add(MobileData_toggleButton);
         NetworkAndCallScrollView[NETWORKANDCALLVIEW]->Add(note);
         AddViewToRootContainer(NetworkAndCallScrollView[NETWORKANDCALLVIEW]);
-        //RootView::GetInstance()->SetOnKeyActListener(presenter_);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 
 
index ee24848..78b0b77 100644 (file)
@@ -385,7 +385,7 @@ namespace OHOS
             viewInitStatus = true;
         }
 
-        //RootView::GetInstance()->SetOnKeyActListener(presenter_);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
         return;
     }
   
index 6e21815..f0a0a89 100644 (file)
@@ -455,6 +455,7 @@ namespace OHOS
     void RecordingView::OnStart()\r
     {\r
         RecordingViewInit();\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
         return;\r
     }\r
 }
\ No newline at end of file
index 99a6a41..4c1a273 100644 (file)
@@ -576,6 +576,7 @@ namespace OHOS
         RootView::GetInstance()->SetDraggable(true);
         RootView::GetInstance()->SetTouchable(true);
         RootView::GetInstance()->SetOnDragListener(presenter_);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
  
         RespiratoryTrainingViewInit();
     }
index dab7179..734c4e1 100644 (file)
@@ -845,7 +845,7 @@ namespace OHOS
 \r
         Draw();\r
 \r
-        //GetRootContainer()->SetOnKeyActListener(presenter_);\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
     }\r
 \r
     \r
index 7452402..6556815 100644 (file)
@@ -143,6 +143,7 @@ void SaveEleView::OnStart() {
 \r
   AddViewToRootContainer(scrollview_);\r
   InitView();\r
+  RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
   \r
 }\r
 \r
index e1d50d8..9ad5f3c 100644 (file)
@@ -45,6 +45,7 @@ namespace OHOS
         }\r
 \r
         DisplayDataOrNoScreen();\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
     }\r
 \r
     void ScheduleView::OnStop()\r
index f163dcb..abb5ca5 100644 (file)
@@ -30,6 +30,7 @@ void SetTimeFormatView::OnStart() {
   GetRootContainer()->SetOnDragListener(presenter_);
 
   GetRootContainer()->SetTouchable(true);
+  RootView::GetInstance()->SetOnKeyActListener(presenter_);
 }
 
 bool SetTimeFormatView::SetTimeFormatInit() {
index cf6910a..7db2953 100644 (file)
@@ -80,6 +80,7 @@ namespace OHOS
         }\r
         UpdateCallVolumeSliderValue();\r
         AddViewToRootContainer(CallVolumeScrollView);\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
 \r
         return;\r
     }\r
index e3b7621..e40f3f0 100644 (file)
@@ -340,6 +340,7 @@ namespace OHOS
         GetRootContainer()->SetTouchable(true);\r
         GetRootContainer()->SetDraggable(true);\r
         GetRootContainer()->SetOnDragListener(presenter_);\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
 \r
         if (!initViewStatus)\r
         {\r
index 541b566..5efcec4 100644 (file)
@@ -83,6 +83,7 @@ namespace OHOS
         GetRootContainer()->SetTouchable(true);\r
         GetRootContainer()->SetDraggable(true);\r
         GetRootContainer()->SetOnDragListener(presenter_);\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
 \r
         if (!initViewStatus)\r
         {\r
index 547ddf7..1f39e56 100644 (file)
@@ -413,5 +413,6 @@ namespace OHOS
         scrollView[MAIN_STOPWATCH]->Add(ResetOrMarkbutton);\r
         group->Add(scrollView[MAIN_STOPWATCH]);\r
         AddViewToRootContainer(group);\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
     }\r
 }
\ No newline at end of file
index e27ee4f..cf1586c 100644 (file)
@@ -341,6 +341,7 @@ namespace OHOS
     PreLoad();
 
     AddViewToRootContainer(scrollview_);
+    RootView::GetInstance()->SetOnKeyActListener(presenter_);
 
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TakephotosView OnStart is ok");
   }
index 591a505..16b80cf 100644 (file)
@@ -152,6 +152,7 @@ namespace OHOS
             weatherSwipeViewList->SetOnSwipeListener(presenter_);\r
         }\r
         UpdateMainWeatherViewVisibility();\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
     }\r
 \r
     WeatherView *MainWeatherView::GetWeatherView(void)\r