GPS产测界面增加纯北斗定位模式 2394/1 2394/head sdk602patch0911
authorpenglei <1624952103@qq.com>
Thu, 25 Sep 2025 06:56:04 +0000 (14:56 +0800)
committerpenglei <1624952103@qq.com>
Thu, 25 Sep 2025 06:56:04 +0000 (14:56 +0800)
code/sdk/application/wearable/fd230app/nativeui/producttest/include/testGPS.h
code/sdk/application/wearable/fd230app/nativeui/producttest/include/testView.h
code/sdk/application/wearable/fd230app/nativeui/producttest/src/testGPS.cpp
code/sdk/application/wearable/fd230app/nativeui/producttest/src/testPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/producttest/src/testView.cpp
code/sdk/drivers/peripheral/gnss/sample/pgnss_sample/pgnss_sample.c
code/sdk/drivers/peripheral/gnss/sample/pgnss_sample/pgnss_sample.h

index 95ad12d..c96492d 100644 (file)
@@ -1,16 +1,10 @@
-/*
- * @Author: penglei 1624952103@qq.com
- * @Date: 2025-06-06 15:56:46
- * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-07-21 14:07:39
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/producttest/include/testGPS.h
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- */
 #ifndef TEST_GPS__VIEW_H
 #define TEST_GPS__VIEW_H
 
-#include "BaseView.h"
+
 #include "View.h"
+#include "components/ui_view.h"
+#include "components/ui_view_group.h"
 #include "components/ui_scroll_view.h"
 #include "components/ui_label.h"
 #include "components/ui_label_ext.h"
@@ -24,6 +18,7 @@ namespace OHOS
 {
     #define GPS_CLOSE_CANCEL_BUTTON "gps_close"
     #define GPS_OPEN_CONFIRM_BUTTON "gps_open"
+    #define BDS_OPEN_CONFIRM_BUTTON "bds_open"
 
     class testGPSView
     {
@@ -42,7 +37,7 @@ namespace OHOS
             //label
             int label_x;
             int label_y;
-            uint8_t ALIGN;
+            UITextLanguageAlignment ALIGN;
             int  Fontsize;
         
         };
@@ -68,19 +63,41 @@ namespace OHOS
         virtual ~testGPSView();
         static testGPSView *GetInstance(void);
    
-        UIScrollView *testGPSInitIView(uint8_t);
+        UIViewGroup *testGPSInitIView(uint8_t);
         void  gpsdataTimerCallBack(void);
 
         void ClearAll(void);
+
+        // 按钮状态管理函数
+        void SetGPSButtonActive(bool isActive);
+        void ToggleGPSState();  // 切换GPS开关状态
+        void SetBDSButtonActive(bool isActive);
+        void ToggleBDSState();  // 切换北斗开关状态
+        
+        // 按钮互斥控制函数
+        void SetGPSButtonEnabled(bool enabled);
+        void SetBDSButtonEnabled(bool enabled);
+        void UpdateButtonStates();  // 更新按钮状态
     private:
         UILabelButtonExt *SetTheButton_ext(ButtonConfig_ext_t &buttonconfig);//, UIView::OnTouchListener *clickListener);
         UILabel *InitLabel(LabelConfig &labelConfig);
         bool testGPSScrollViewcrollViewinit(uint8_t);
-        UIScrollView *testGPSScrollView{nullptr};
-        UIImageView *tempImage{nullptr};
+        
+        // 主容器和固定元素
+        UIViewGroup *mainContainer{nullptr};      // 主容器
+        UIScrollView *contentScrollView{nullptr};  // 可滚动内容区域
         UILabel *label_1_GPS_MSG=NULL;
         UILabel *label_1_GPS_on_or_off{nullptr};
         UILabelButtonExt*  GPSbutton[2]{nullptr};
+        UILabelButtonExt*  BDSButton{nullptr};  // 北斗按钮
+        
+        // GPS状态变量
+        bool gpsIsOn{false};  // GPS开关状态
+        bool bdsIsOn{false};  // 北斗开关状态
+        
+        // 按钮禁用状态变量
+        bool gpsButtonEnabled{true};  // GPS按钮是否可点击
+        bool bdsButtonEnabled{true};  // 北斗按钮是否可点击
 
         UILabelButtonExt* labelButton_next = nullptr;
         bool initViewStatus{false};
index 2999a25..6599908 100644 (file)
@@ -55,9 +55,7 @@ namespace OHOS
         static testView *GetInstance(void);\r
 \r
         void OnStart() override;\r
-        void OnSetUpView() override;\r
-        void OnTearDownView() override;\r
-        void OnStop() override;\r
+\r
         struct ButtonConfig\r
         {\r
             int x;\r
@@ -77,14 +75,13 @@ namespace OHOS
             const char *ViewId;\r
             const char *ImageSrc;\r
 \r
-            //label\r
+            // label\r
             int label_x;\r
             int label_y;\r
             uint8_t ALIGN;\r
-            int  Fontsize;\r
-        \r
+            int Fontsize;\r
         };\r
-        \r
+\r
         bool ChangeSystemView(int16_t thisView);\r
         bool ChangeSystemAboutView(int16_t thisView);\r
         bool ChangeLCDTESTView(int16_t thisView);\r
@@ -118,15 +115,16 @@ namespace OHOS
 \r
     private:\r
         void InitIView(void);\r
-        void initView_ext(int x,int y,int w,int h,int interval,const char *imagsrc);\r
+        void initView_ext(int x, int y, int w, int h, int interval, const char *imagsrc);\r
         void ClearAll(void);\r
         bool SetTheSystemScrollView(void);\r
         bool SetTheTitle(void);\r
         UIButton *SetTheButton(ButtonConfig &buttonconfig, UIView::OnClickListener *clickListener);\r
         UILabelButtonExt *SetTheButton_ext(ButtonConfig_ext_t &ButtonConfig_ext, UIView::OnClickListener *clickListener);\r
-       \r
+\r
         testAboutView *test_about_view;\r
         UIScrollView *SystemScrollView[30]{nullptr};\r
+        UIViewGroup *group{nullptr};\r
         UILabel *SystemLabel{nullptr}; // 标题\r
         UILabelButtonExt *SystemUpgradeButtonExt{nullptr};\r
 \r
@@ -160,16 +158,16 @@ namespace OHOS
         UILabelButtonExt *button[30]={NULL};\r
         bool initViewStatus{false};\r
     };\r
-     struct test_ext\r
+    struct test_ext\r
     {\r
-            const int16_t viewId;\r
-            char *viewid_str;\r
-            char *Labe_str;\r
-            char *viewid_str_next;\r
-            bool (testView::*func)(int16_t thisView);\r
-            bool enable_falg;\r
+        const int16_t viewId;\r
+        char *viewid_str;\r
+        char *Labe_str;\r
+        char *viewid_str_next;\r
+        bool (testView::*func)(int16_t thisView);\r
+        bool enable_falg;\r
     };\r
-     extern test_ext Test_ViewMapper_t[];\r
+    extern test_ext Test_ViewMapper_t[];\r
 \r
 } // namespace OHOS\r
 \r
index 3813dce..04dfa7c 100644 (file)
@@ -2,17 +2,20 @@
 #include "custom_utils.h"
 #include "producttest/include/testPresenter.h"
 // #include "producttest/include/testcat1.h" 
-#include "AlarmClockModel.h"
+#include "alarm/include/AlarmClockModel.h"
 #include "cmsis_os2.h"
         
 #if defined(SUPPORT_GNSS)
 
 #include "NMEA0183.h"
 #include "pgnss_sample.h"
+#include "gnss_ctl.h"
 // code/sdk/zhihui/services/gnss/inc/.h
 
 #include "producttest/include/testView.h"
 #include "producttest/include/testGPS.h"
+#include "producttest/include/testModel.h"
+#include "uicomponents/UIComponents.h"
 // #include "gnss_sample.h"
 #include "graphic_service.h"
 namespace OHOS
@@ -22,7 +25,7 @@ namespace OHOS
 
     testGPSView::testGPSView()
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::SystemAboutTheWatchView");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testGPSView::testGPSView");
         g_pSystemAboutTheWatchView = this;
     }
 
@@ -42,60 +45,91 @@ namespace OHOS
 
     void testGPSView::ClearAll()
     {
-        if(testGPSScrollView)
+        if (GPS_TEST_timer != NULL) {
+            osTimerStop(GPS_TEST_timer);
+            osTimerDelete(GPS_TEST_timer);
+            GPS_TEST_timer = NULL;
+        }
+        
+        // 清理固定元素 - 先从父组件中移除,再删除
+        if(labelButton_next)
         {
-            testGPSScrollView->RemoveAll();
-
-            if (GPS_TEST_timer != NULL) {
-                osTimerStop(GPS_TEST_timer);
-                osTimerDelete(GPS_TEST_timer);
-                GPS_TEST_timer = NULL;
+            if(mainContainer && mainContainer->GetChildrenNumber() > 0) {
+                mainContainer->Remove(labelButton_next);
             }
-            if(labelButton_next)
-            {
-                delete labelButton_next;
-                labelButton_next=nullptr;
-            }
-            if(label_1_GPS_MSG)
-            {
-                delete label_1_GPS_MSG;
-                label_1_GPS_MSG=nullptr;
+            delete labelButton_next;
+            labelButton_next=nullptr;
+        }
+        if(label_1_GPS_MSG)
+        {
+            if(contentScrollView && contentScrollView->GetChildrenNumber() > 0) {
+                contentScrollView->Remove(label_1_GPS_MSG);
             }
-
-            if(label_1_GPS_on_or_off)
-            {
-                delete label_1_GPS_on_or_off;
-                label_1_GPS_on_or_off=nullptr;
+            delete label_1_GPS_MSG;
+            label_1_GPS_MSG=nullptr;
+        }
+        if(label_1_GPS_on_or_off)
+        {
+            if(mainContainer && mainContainer->GetChildrenNumber() > 0) {
+                mainContainer->Remove(label_1_GPS_on_or_off);
             }
-
-            if(Title)
-            {
-                delete Title;
-                Title=nullptr;
+            delete label_1_GPS_on_or_off;
+            label_1_GPS_on_or_off=nullptr;
+        }
+        if(Title)
+        {
+            if(mainContainer && mainContainer->GetChildrenNumber() > 0) {
+                mainContainer->Remove(Title);
             }
-          
-              if(GPSbutton[0])
-            {
-                delete GPSbutton[0];
-                GPSbutton[0]=nullptr;
+            delete Title;
+            Title=nullptr;
+        }
+        if(GPSbutton[0])
+        {
+            if(mainContainer && mainContainer->GetChildrenNumber() > 0) {
+                mainContainer->Remove(GPSbutton[0]);
             }
-
-            if(GPSbutton[1])
-            {
-                delete GPSbutton[1];
-                GPSbutton[1]=nullptr;
+            delete GPSbutton[0];
+            GPSbutton[0]=nullptr;
+        }
+        if(GPSbutton[1])
+        {
+            if(mainContainer && mainContainer->GetChildrenNumber() > 0) {
+                mainContainer->Remove(GPSbutton[1]);
             }
-          
-            if(tempImage)
-            {
-                delete tempImage;
-                tempImage = nullptr;
+            delete GPSbutton[1];
+            GPSbutton[1]=nullptr;
+        }
+        if(BDSButton)
+        {
+            if(mainContainer && mainContainer->GetChildrenNumber() > 0) {
+                mainContainer->Remove(BDSButton);
             }
-          
+            delete BDSButton;
+            BDSButton=nullptr;
+        }
 
-            delete testGPSScrollView;
-            testGPSScrollView=nullptr;
-       }
+        // 清理滚动内容区域
+        if(contentScrollView)
+        {
+            contentScrollView->RemoveAll();
+            // 如果contentScrollView是mainContainer的子组件,先从mainContainer中移除
+            if(mainContainer && mainContainer->GetChildrenNumber() > 0) {
+                mainContainer->Remove(contentScrollView);
+            }
+            delete contentScrollView;
+            contentScrollView=nullptr;
+        }
+        
+        // 清理主容器 - 最后清理
+        if(mainContainer)
+        {
+            mainContainer->RemoveAll();
+            // 如果mainContainer是RootView的子组件,先从RootView中移除
+            RootView::GetInstance()->Remove(mainContainer);
+            delete mainContainer;
+            mainContainer=nullptr;
+        }
     }
    
     UILabelButtonExt *testGPSView::SetTheButton_ext(ButtonConfig_ext_t &buttonconfig)
@@ -108,21 +142,222 @@ namespace OHOS
         }
         button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h);
         button->SetViewId(buttonconfig.ViewId);
+        
+        // 默认状态:蓝色背景
         button->SetStyle(STYLE_BACKGROUND_COLOR, Color::Blue().full);
-        //button->SetStyle(STYLE_BORDER_RADIUS,0);
+        button->SetStyle(STYLE_BACKGROUND_OPA, 0x80);
+        
+        // 按下状态:深灰色背景
         button->SetStyleForState(STYLE_BACKGROUND_COLOR, Color::Black().full, UIButton::PRESSED);
-        //button->SetStyleForState(STYLE_BORDER_RADIUS,0, UIButton::PRESSED);
+        button->SetStyleForState(STYLE_BACKGROUND_OPA, 0xff, UIButton::PRESSED);
+        
         button->SetTouchable(true);
-        button->SetStyle(STYLE_BACKGROUND_OPA, 0x80);
         button->SetText(buttonconfig.str);
-        button->SetAlign(TEXT_ALIGNMENT_LEFT);
-        button->SetLabelPosition(buttonconfig.label_x,buttonconfig.label_y );
+        button->SetAlign(buttonconfig.ALIGN);  // 使用配置的对齐方式
+        button->SetLabelPosition(buttonconfig.label_x, buttonconfig.label_y);
         button->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, buttonconfig.Fontsize);
-        UIView:: OnClickListener *touchListener = static_cast<UIView::OnClickListener *>(testPresenter::GetInstance());
+        
+        UIView::OnClickListener *touchListener = static_cast<UIView::OnClickListener *>(testPresenter::GetInstance());
         button->SetOnClickListener(touchListener);
 
         return button;
     }
+    
+    void testGPSView::SetGPSButtonActive(bool isActive)
+    {
+        if (GPSbutton[0] != nullptr)
+        {
+            if (isActive)
+            {
+                // 激活状态:绿色背景,文字显示"关"
+                GPSbutton[0]->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
+                GPSbutton[0]->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+                GPSbutton[0]->SetText("关");
+            }
+            else
+            {
+                // 默认状态:蓝色背景,文字显示"开"
+                GPSbutton[0]->SetStyle(STYLE_BACKGROUND_COLOR, Color::Blue().full);
+                GPSbutton[0]->SetStyle(STYLE_BACKGROUND_OPA, 0x80);
+                GPSbutton[0]->SetText("开");
+            }
+        }
+        
+        // 强制刷新界面
+        RootView::GetInstance()->Invalidate();
+    }
+    
+    void testGPSView::ToggleGPSState()
+    {
+        // 检查按钮是否被禁用
+        if (!gpsButtonEnabled) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle: Button is disabled, ignoring click");
+            return;
+        }
+        
+        // 切换GPS状态
+        gpsIsOn = !gpsIsOn;
+        
+        // 更新按钮颜色和文字
+        SetGPSButtonActive(gpsIsOn);
+        
+        // 更新按钮状态(互斥逻辑)
+        UpdateButtonStates();
+        
+        // 根据状态执行相应操作
+        if (gpsIsOn)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle: Turning ON (Button: Green '关')");
+            
+            // 检查GPS是否已经在运行
+            if (getPGnssServerStat() == 1) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle: GPS already running, skipping start");
+                return;
+            }
+            
+            gnss_start();
+        }
+        else
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle: Turning OFF (Button: Blue '开')");
+            
+            // 检查GPS是否已经停止
+            if (getPGnssServerStat() == 0) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle: GPS already stopped, skipping stop");
+                return;
+            }
+            
+            gnss_stop();
+        }
+    }
+    
+    void testGPSView::SetBDSButtonActive(bool isActive)
+    {
+        if (BDSButton != nullptr)
+        {
+            if (isActive)
+            {
+                // 激活状态:绿色背景,文字显示"关"
+                BDSButton->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
+                BDSButton->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+                BDSButton->SetText("北斗关");
+            }
+            else
+            {
+                // 默认状态:蓝色背景,文字显示"开"
+                BDSButton->SetStyle(STYLE_BACKGROUND_COLOR, Color::Blue().full);
+                BDSButton->SetStyle(STYLE_BACKGROUND_OPA, 0x80);
+                BDSButton->SetText("北斗开");
+            }
+        }
+        
+        // 强制刷新界面
+        RootView::GetInstance()->Invalidate();
+    }
+    
+    void testGPSView::ToggleBDSState()
+    {
+        // 检查按钮是否被禁用
+        if (!bdsButtonEnabled) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BDS Toggle: Button is disabled, ignoring click");
+            return;
+        }
+        
+        // 切换北斗状态
+        bdsIsOn = !bdsIsOn;
+        
+        // 更新按钮颜色和文字
+        SetBDSButtonActive(bdsIsOn);
+        
+        // 更新按钮状态(互斥逻辑)
+        UpdateButtonStates();
+        
+        // 根据状态设置北斗标志位
+        if (bdsIsOn)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BDS Toggle: Setting BDS mode flag (Button: Green '关')");
+            
+            // 设置北斗模式标志位
+            setBDSModeFlag(1);
+            gnss_start();
+        }
+        else
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BDS Toggle: Setting GPS mode flag (Button: Blue '开')");
+            
+            // 设置GPS模式标志位
+            setBDSModeFlag(0);
+            gnss_stop();
+        }
+    }
+    
+    // 按钮启用/禁用控制函数
+    void testGPSView::SetGPSButtonEnabled(bool enabled)
+    {
+        gpsButtonEnabled = enabled;
+        if (GPSbutton[0] != nullptr) {
+            GPSbutton[0]->SetTouchable(enabled);
+            if (enabled) {
+                // 启用状态:恢复正常颜色
+                if (gpsIsOn) {
+                    GPSbutton[0]->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
+                    GPSbutton[0]->SetText("关");
+                } else {
+                    GPSbutton[0]->SetStyle(STYLE_BACKGROUND_COLOR, Color::Blue().full);
+                    GPSbutton[0]->SetText("开");
+                }
+            } else {
+                // 禁用状态:灰色,保持原有文字
+                GPSbutton[0]->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full);
+                GPSbutton[0]->SetStyle(STYLE_BACKGROUND_OPA, 0x60);
+                // 不改变文字内容,保持原有的"开"或"关"
+            }
+        }
+        RootView::GetInstance()->Invalidate();
+    }
+    
+    void testGPSView::SetBDSButtonEnabled(bool enabled)
+    {
+        bdsButtonEnabled = enabled;
+        if (BDSButton != nullptr) {
+            BDSButton->SetTouchable(enabled);
+            if (enabled) {
+                // 启用状态:恢复正常颜色
+                if (bdsIsOn) {
+                    BDSButton->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);
+                    BDSButton->SetText("北斗关");
+                } else {
+                    BDSButton->SetStyle(STYLE_BACKGROUND_COLOR, Color::Blue().full);
+                    BDSButton->SetText("北斗开");
+                }
+            } else {
+                // 禁用状态:灰色,保持原有文字
+                BDSButton->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full);
+                BDSButton->SetStyle(STYLE_BACKGROUND_OPA, 0x60);
+                // 不改变文字内容,保持原有的"北斗开"或"北斗关"
+            }
+        }
+        RootView::GetInstance()->Invalidate();
+    }
+    
+    void testGPSView::UpdateButtonStates()
+    {
+        // 互斥逻辑:如果GPS开启,禁用北斗按钮;如果北斗开启,禁用GPS按钮
+        if (gpsIsOn) {
+            // GPS开启,禁用北斗按钮
+            SetBDSButtonEnabled(false);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS is ON, disabling BDS button");
+        } else if (bdsIsOn) {
+            // 北斗开启,禁用GPS按钮
+            SetGPSButtonEnabled(false);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BDS is ON, disabling GPS button");
+        } else {
+            // 两个都关闭,启用所有按钮
+            SetGPSButtonEnabled(true);
+            SetBDSButtonEnabled(true);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Both OFF, enabling all buttons");
+        }
+    }
    
      UILabel *testGPSView::InitLabel(LabelConfig &labelConfig)
     {
@@ -147,7 +382,6 @@ namespace OHOS
     void testGPSView:: gpsdataTimerCallBack(void)
     {
         if (label_1_GPS_MSG != nullptr) {
-        
             gps_data_t * gpsdata=getPGPSGlobaldata();
             gps_data_t gpsd={0};
             if (gpsdata->last_gps_time_ms>0)
@@ -175,124 +409,145 @@ namespace OHOS
     
     bool testGPSView::testGPSScrollViewcrollViewinit(uint8_t id)
     {
-
-        testGPSScrollView = new UIScrollView();
-        if (testGPSScrollView == nullptr)
+        // 创建主容器(固定布局)
+        mainContainer = new UIViewGroup();
+        if (mainContainer == nullptr)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::testGPSScrollView new fail!");
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testGPSView::mainContainer new fail!");
             return false;
         }
-        testGPSScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
-        testGPSScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
-        testGPSScrollView->SetStyle(STYLE_BORDER_RADIUS, 0);
-        testGPSScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
-        testGPSScrollView->SetStyle(STYLE_BORDER_COLOR, Color::Yellow().blue);
-        testGPSScrollView->SetScrollBlankSize(75);
-
+        mainContainer->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        mainContainer->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+        mainContainer->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+        
+        // 固定元素:标题(顶部固定)
+        Title = testAboutView::GetInstance()->init_title(165, 15, "GPS_TEST");
+        mainContainer->Add(Title);
+        
+        // 固定元素:GPS状态显示(顶部固定,居中)
         LabelConfig Config = {
-            .left = 50,
-            .top = 85,
-            .width = Screen::GetInstance().GetWidth()-80,
+            .left = (Screen::GetInstance().GetWidth() - 200) / 2,  // 居中显示
+            .top = 55,
+            .width = 200,
             .height = 35,
-            .fontSize = 20,
-            .lineHeigh = 25,
+            .fontSize = 25,  // 增大字体
+            .lineHeigh = 35,
             .text = "",
             .lineBreakMode = UILabel::LINE_BREAK_WRAP,
         };
-        label_1_GPS_MSG= InitLabel(Config);
-        if (label_1_GPS_MSG == nullptr)
+        label_1_GPS_on_or_off = InitLabel(Config);
+        if (label_1_GPS_on_or_off == nullptr)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::SystemAboutTheWatchTitle new fail!");
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testGPSView::label_1_GPS_on_or_off new fail!");
             return false;
         }
-        testGPSScrollView->Add(label_1_GPS_MSG);
-
+        label_1_GPS_on_or_off->SetAlign(TEXT_ALIGNMENT_CENTER);  // 设置文字居中对齐
+        mainContainer->Add(label_1_GPS_on_or_off);
+        
+        // 固定元素:下一页按钮(右上角固定)
+        labelButton_next = testAboutView::GetInstance()->init_button_next(320, 55, Test_ViewMapper_t[id].viewid_str_next);
+        mainContainer->Add(labelButton_next);
+        
+        // 固定元素:GPS开关按钮(左侧)
+        ButtonConfig_ext_t buttonconfig;
+        buttonconfig.x = (Screen::GetInstance().GetWidth() - 300) / 2;  // 左侧位置
+        buttonconfig.y = 100;
+        buttonconfig.w = 120;  // 调整宽度
+        buttonconfig.h = 70;   // 保持高度
+        buttonconfig.label_x = 0;   // 文字居中,不需要偏移
+        buttonconfig.label_y = 0;
+        buttonconfig.Fontsize = 30;  // 增大字体大小
+        buttonconfig.ViewId = GPS_OPEN_CONFIRM_BUTTON;
+        buttonconfig.str = "开";  // 改为"开"
+        buttonconfig.ALIGN = TEXT_ALIGNMENT_CENTER;  // 居中对齐
+        GPSbutton[0] = SetTheButton_ext(buttonconfig);
+        mainContainer->Add(GPSbutton[0]);
+        
+        // 固定元素:北斗开关按钮(右侧)
+        buttonconfig.x = (Screen::GetInstance().GetWidth() - 300) / 2 + 150;  // 右侧位置
+        buttonconfig.y = 100;
+        buttonconfig.w = 120;  // 调整宽度
+        buttonconfig.h = 70;   // 保持高度
+        buttonconfig.label_x = 0;   // 文字居中,不需要偏移
+        buttonconfig.label_y = 0;
+        buttonconfig.Fontsize = 30;  // 增大字体大小
+        buttonconfig.ViewId = BDS_OPEN_CONFIRM_BUTTON;
+        buttonconfig.str = "北斗开";  // 改为"开"
+        buttonconfig.ALIGN = TEXT_ALIGNMENT_CENTER;  // 居中对齐
+        BDSButton = SetTheButton_ext(buttonconfig);
+        mainContainer->Add(BDSButton);
+        
+        // 将第二个按钮设为空,不再使用
+        GPSbutton[1] = nullptr;
+        
+        // 确保按钮初始状态为蓝色(GPS和北斗关闭状态)
+        SetGPSButtonActive(false);
+        SetBDSButtonActive(false);
+        
+        // 初始化按钮状态(两个按钮都启用)
+        UpdateButtonStates();
+        
+        // 创建可滚动内容区域(下半部分)
+        contentScrollView = new UIScrollView();
+        if (contentScrollView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testGPSView::contentScrollView new fail!");
+            return false;
+        }
+        int scrollY = 190;  // 固定元素下方开始滚动区域
+        int scrollHeight = Screen::GetInstance().GetHeight() - scrollY;
+        contentScrollView->SetPosition(0, scrollY, Screen::GetInstance().GetWidth(), scrollHeight);
+        contentScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+        contentScrollView->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+        
+        // 优化滚动体验参数 - 完全消除惯性
+        contentScrollView->SetScrollBlankSize(100);     // 增大滚动空白区域,允许底部继续滑动
+        contentScrollView->SetReboundSize(0);           // 设置为0,消除回弹惯性
+        contentScrollView->SetDirection(1);             // 垂直滚动
+        contentScrollView->SetThrowDrag(false);         // 关闭抛掷滚动惯性
+        contentScrollView->SetMaxScrollDistance(0);     // 设置为0,消除最大滚动距离惯性
+        contentScrollView->SetSwipeACCLevel(0);         // 关闭滑动加速度补偿
+        contentScrollView->SetYScrollBarVisible(true);  // 显示滚动条
+
+        // 在可滚动区域添加GPS详细信息
         Config = {
-            .left = 50,
-            .top = 50,
-            .width = 350,
-            .height = 30,
-            .fontSize = 25,
-            .lineHeigh = 35,
+            .left = 20,
+            .top = 20,  // 相对于滚动视图的位置
+            .width = Screen::GetInstance().GetWidth()-40,
+            .height = 200,  // 足够的高度容纳GPS信息
+            .fontSize = 20,  // 增大GPS信息字体
+            .lineHeigh = 25,
             .text = "",
             .lineBreakMode = UILabel::LINE_BREAK_WRAP,
         };
-        label_1_GPS_on_or_off= InitLabel(Config);
-        if (label_1_GPS_on_or_off == nullptr)
+        label_1_GPS_MSG = InitLabel(Config);
+        if (label_1_GPS_MSG == nullptr)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::SystemAboutTheWatchTitle new fail!");
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testGPSView::label_1_GPS_MSG new fail!");
             return false;
         }
-        testGPSScrollView->Add(label_1_GPS_on_or_off);
+        contentScrollView->Add(label_1_GPS_MSG);
        
 
-        ButtonConfig_ext_t buttonconfig;
-        buttonconfig.x = 20;
-        buttonconfig.y = 400;
-        buttonconfig.w = 180;
-        buttonconfig.h = 96;
-        buttonconfig.label_x=40;
-        buttonconfig.label_y=0;
-        buttonconfig.Fontsize=30;
-        buttonconfig.ViewId=GPS_OPEN_CONFIRM_BUTTON;
-        buttonconfig.str=GPS_OPEN_CONFIRM_BUTTON;
-        buttonconfig.ALIGN=TEXT_ALIGNMENT_LEFT;
-        GPSbutton[0]=SetTheButton_ext(buttonconfig);
-        testGPSScrollView->Add( GPSbutton[0]);
-        //testcat1ScrollView->Add(button);
-
-        buttonconfig.x = 220;
-        buttonconfig.y = 400;
-        buttonconfig.w = 180;
-        buttonconfig.h = 96;
-        buttonconfig.label_x=40;
-        buttonconfig.label_y=0;
-        buttonconfig.Fontsize=30;
-        buttonconfig.ViewId=GPS_CLOSE_CANCEL_BUTTON;
-        buttonconfig.str=GPS_CLOSE_CANCEL_BUTTON;
-        buttonconfig.ALIGN=TEXT_ALIGNMENT_LEFT;
-        GPSbutton[1]=SetTheButton_ext(buttonconfig);
-        testGPSScrollView->Add( GPSbutton[1]);
+        // 为可滚动区域设置拖拽属性和监听器
+        contentScrollView->SetTouchable(true);
+        contentScrollView->SetDraggable(true);
         
-
-
-
+        // 设置拖拽监听器以支持左滑退出功能
         UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(testPresenter::GetInstance());
-        if (draglistener == nullptr)
+        if (draglistener != nullptr)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::draglistener can not be nullptr!");
-            return false;
+            contentScrollView->SetOnDragListener(draglistener);  // 恢复左滑退出功能
         }
-       testGPSScrollView->SetOnDragListener(draglistener);
-
-
-        labelButton_next= testAboutView::GetInstance()->init_button_next(267,320,Test_ViewMapper_t[id].viewid_str_next);
-        testGPSScrollView->Add(labelButton_next);
         
-        Title= testAboutView::GetInstance()->init_title(165,45,"GPS_TEST");
-        testGPSScrollView->Add(Title);
-
-
-        if (tempImage == nullptr)
-        {
-            tempImage = new UIImageView();
-            if (tempImage == nullptr)
-            {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tempImage can not be nullptr!");
-                return false;
-            }
-        }
-        tempImage->SetPosition(193, GPSbutton[0]->GetY()+GPSbutton[0]->GetHeight() + 60, 40, 40);
-        testGPSScrollView->Add(tempImage);
-
-
+        // 将滚动区域添加到主容器
+        mainContainer->Add(contentScrollView);
 
-        testGPSScrollView->SetTouchable(true);
-        testGPSScrollView->SetDraggable(true);
+        // 启动GPS数据更新定时器
         uint32_t tick;
         osStatus_t retTimer;
         GPS_TEST_timer = osTimerNew((osTimerFunc_t)gpsdataTimerCallBackproc, osTimerPeriodic, NULL, NULL);
-        tick =2000;// osMs2Tick(1000);
+        tick = 2000;
         retTimer = osTimerStart(GPS_TEST_timer, tick);
         if (retTimer != osOK && GPS_TEST_timer != NULL) {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer);
@@ -303,13 +558,14 @@ namespace OHOS
         return true;
     }
 
-    UIScrollView *testGPSView::testGPSInitIView(uint8_t id)
+    UIViewGroup *testGPSView::testGPSInitIView(uint8_t id)
     {
         if (!testGPSScrollViewcrollViewinit(id))
         {
             return nullptr;
         }
-        return testGPSScrollView;
+        // 返回主容器(包含固定元素和可滚动区域)
+        return mainContainer;
     }
 }
 
index 4937657..7db69b8 100644 (file)
@@ -164,17 +164,40 @@ namespace OHOS
         {\r
             return true;\r
         }\r
+        \r
+        // 放宽的左滑退出限制条件\r
         if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)\r
         {\r
-            for (int i = 1; i < MAX_TESTVIEWID; i++)\r
+            // 获取拖拽的起始点和结束点\r
+            Point startPoint = event.GetStartPoint();\r
+            Point endPoint = event.GetLastPoint();\r
+            \r
+            // 计算拖拽距离和速度\r
+            int dragDistance = endPoint.x - startPoint.x;\r
+            int dragHeight = abs(endPoint.y - startPoint.y);\r
+            \r
+            // 放宽的退出条件:\r
+            // 1. 水平拖拽距离大于80像素(从150降低到80)\r
+            // 2. 垂直偏移不超过80像素(从50放宽到80)\r
+            // 3. 起始点在屏幕左侧50%区域内(从30%放宽到50%)\r
+            // 4. 水平拖拽距离大于垂直偏移的2倍(从3倍降低到2倍)\r
+            int screenWidth = Screen::GetInstance().GetWidth();\r
+            \r
+            if (dragDistance > 80 &&                           // 最小拖拽距离80像素\r
+                dragHeight < 80 &&                             // 垂直偏移不超过80像素\r
+                startPoint.x < screenWidth * 0.5 &&           // 起始点在左侧50%区域\r
+                dragDistance > dragHeight * 2)                 // 水平距离是垂直距离的2倍以上\r
             {\r
-                if (p_SystemView->GetSystemScrollView(i))\r
+                for (int i = 1; i < MAX_TESTVIEWID; i++)\r
                 {\r
-                    p_SystemView->ChangeView(i, TESTVIEW);\r
-                    break;\r
+                    if (p_SystemView->GetSystemScrollView(i))\r
+                    {\r
+                        p_SystemView->ChangeView(i, TESTVIEW);\r
+                        break;\r
+                    }\r
                 }\r
+                return true;\r
             }\r
-            return true;\r
         }\r
         return false;\r
     }\r
@@ -376,16 +399,25 @@ namespace OHOS
         #if defined(SUPPORT_GNSS)\r
         if (strcmp(view.GetViewId(), GPS_OPEN_CONFIRM_BUTTON) == 0)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS On OnClick");\r
-            gnss_start();\r
-           \r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle Button OnClick");\r
+            \r
+            // 切换GPS开关状态\r
+            testGPSView* gpsView = testGPSView::GetInstance();\r
+            if (gpsView != nullptr)\r
+            {\r
+                gpsView->ToggleGPSState();\r
+            }\r
         }\r
-\r
-\r
-        if (strcmp(view.GetViewId(), GPS_CLOSE_CANCEL_BUTTON) == 0)\r
+        else if (strcmp(view.GetViewId(), BDS_OPEN_CONFIRM_BUTTON) == 0)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS On OnClick");\r
-            gnss_stop();\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BDS Toggle Button OnClick");\r
+            \r
+            // 切换北斗开关状态\r
+            testGPSView* gpsView = testGPSView::GetInstance();\r
+            if (gpsView != nullptr)\r
+            {\r
+                gpsView->ToggleBDSState();\r
+            }\r
         }\r
         #endif\r
         return false;\r
index b3c1bd2..ece6d4e 100644 (file)
@@ -1,5 +1,8 @@
 #include "producttest/include/testView.h"\r
 #include "producttest/include/testPresenter.h"\r
+#include "producttest/include/testModel.h"\r
+#include "components/ui_label_button.h"\r
+#include "components/root_view.h"\r
 #include "power_display_service.h"\r
 #include "wearable_log.h"\r
 #ifdef SUPPORT_CAT1_SERVICE\r
@@ -37,47 +40,45 @@ namespace OHOS
     static testView *g_pSystemView{nullptr};\r
 \r
     // 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与MainStopWatchView类中的特定成员函数指针进行了绑定。\r
-        test_ext Test_ViewMapper_t[] = {\r
-        {TESTVIEW,"","","",&testView::ChangeSystemAboutView,false},//占位,空的\r
-        {VISON,"AboutTheWatchButton","Verison","AboutTheWatchButton_next",&testView::ChangeSystemAboutView,true},\r
-        {LCD,"LCDButton","LCD","LCDButton_next",&testView::ChangeLCDTESTView,true},\r
-        {TP,"TPButton","TP","TPButton_next", &testView::ChangeTPTESTView,true},\r
-        {MAGETIC,"MAGETICButton","Magetic","MAGETICButton_next", &testView::ChangeMGTESTView,true},\r
-        {LUMINANCE,"luminanceButton","luminance","luminanceButton_next", &testView::ChangLUMTESTView,true},\r
-        {CHARG,"chargingButton","bat&charger","chargingButton_next",&testView::ChangchargingTESTView,true},\r
-        {SPEAK,"speakButton","speak","speakButton_next" ,&testView::ChangspeakTESTView,true},\r
-\r
-        {MOTOR,"motorButton","motor","motorButton_next" ,&testView::ChangmotorTESTView,true},\r
-    #ifdef SUPPORT_CAT1_SERVICE\r
-        {CAT1,"cat1button","CAT1", "cat1button_next",&testView::ChangeCAT1TESTView,true},\r
-    #endif\r
-        {BUTTON,"buttonbutton","button" ,"buttonbutton_next",&testView::ChangKEYTESTView,true},\r
-        {MICROPHONE,"microphonebutton","microphone", "microphonebutton_next",&testView::ChangeMPTESTView,true},\r
-        {HRSENSON,"hrsensonbutton","hrsensor", "hrsensonbutton_next",&testView::ChangeHRTESTView,true},\r
-        {GSENSON,"gsensonbutton","gsensor","gsensonbutton_next" ,&testView::ChangeGTESTView,true},\r
+    test_ext Test_ViewMapper_t[] = {\r
+        {TESTVIEW, "", "", "", &testView::ChangeSystemAboutView, false}, // 占位,空的\r
+        {VISON, "AboutTheWatchButton", "Verison", "AboutTheWatchButton_next", &testView::ChangeSystemAboutView, true},\r
+        {LCD, "LCDButton", "LCD", "LCDButton_next", &testView::ChangeLCDTESTView, true},\r
+        {TP, "TPButton", "TP", "TPButton_next", &testView::ChangeTPTESTView, true},\r
+        {MAGETIC, "MAGETICButton", "Magetic", "MAGETICButton_next", &testView::ChangeMGTESTView, true},\r
+        {LUMINANCE, "luminanceButton", "luminance", "luminanceButton_next", &testView::ChangLUMTESTView, true},\r
+        {CHARG, "chargingButton", "bat&charger", "chargingButton_next", &testView::ChangchargingTESTView, true},\r
+        {SPEAK, "speakButton", "speak", "speakButton_next", &testView::ChangspeakTESTView, true},\r
+        {MOTOR, "motorButton", "motor", "motorButton_next", &testView::ChangmotorTESTView, true},\r
+#ifdef SUPPORT_CAT1_SERVICE\r
+        {CAT1, "cat1button", "CAT1", "cat1button_next", &testView::ChangeCAT1TESTView, true},\r
+#endif\r
+        {BUTTON, "buttonbutton", "Button", "buttonbutton_next", &testView::ChangKEYTESTView, true},\r
+        {MICROPHONE, "microphonebutton", "microphone", "microphonebutton_next", &testView::ChangeMPTESTView, true},\r
+        {HRSENSON, "hrsensonbutton", "hrsensor", "hrsensonbutton_next", &testView::ChangeHRTESTView, true},\r
+        {GSENSON, "gsensonbutton", "gsensor", "gsensonbutton_next", &testView::ChangeGTESTView, true},\r
+        {BTTEST, "BTbutton", "BT", "BTbutton_next", &testView::ChangeBTTESTView, true},\r
+        {SEChipTest, "SEChipTestbutton", "SEChipTest", "SEChipTestbutton_next", &testView::ChangeSEChipTESTView, true},\r
+        // {PingTest, "PingTestbutton", "PingTest", "PingTestbutton_next", &testView::ChangePingTESTView, true},\r
 #if defined(SUPPORT_GNSS)\r
-        {GPSTEST,"GPSTestbutton","GPSTest","GPSTestbutton_next" ,&testView::ChangeGPSTESTView,true},\r
+        {GPSTEST, "GPSTestbutton", "GPSTest", "GPSTestbutton_next", &testView::ChangeGPSTESTView, true},\r
 #endif\r
-        {BTTEST,"BTbutton","BT" ,"BTbutton_next",&testView::ChangeBTTESTView,true},\r
-        {SEChipTest,"SEChipTestbutton","SEChipTest","SEChipTestbutton_next" ,&testView::ChangeSEChipTESTView,true},\r
-        {PingTest,"PingTestbutton","PingTest","PingTestbutton_next" ,&testView::ChangePingTESTView,true},\r
-#if defined(ENABLE_LQBP002TA)\r
-        {PRESSURETEST,"pressureTestbutton","pressureTest","pressureTestbutton_next" ,&testView::ChangepressureTestTESTView,true},\r
+#ifdef ENABLE_LQBP002TA\r
+        {PRESSURETEST, "pressureTestbutton", "pressureTest", "pressureTestbutton_next", &testView::ChangepressureTestTESTView, true},\r
+#endif\r
+#ifdef AGINGTEST\r
+        {OLDTEST, "oldtestbutton", "aging", "oldtestexit", &testView::ChangeoldTESTView, true},\r
+#endif\r
+        {DEEPSLEEP, "deepsleep", "DeepSleepCurrent", "xxxxxxxxx", &testView::ChangeoldTESTView, true},\r
+        {shutdown, "shutdown", "shutdown", "xxxxxxxxx", &testView::ChangeoldTESTView, true},\r
+        {RESET, "reset", "reset", "xxxxxxxxx", &testView::ChangeoldTESTView, true},\r
+        {FACTORYRESE, "FactoryReset", "FactoryReset", "xxxxxxxxx", &testView::ChangeoldTESTView, true},\r
+#ifdef SUPPORT_A5133_SERVICE\r
+        {RF5133, "RF5133", "RF5133", "xxxxxxxxx", &testView::ChangeA5133TESTView, true},\r
 #endif\r
-// #if defined(ENABLE_GYRO)\r
-//         {GYROTEST,"gyroTestbutton","gyroTest","gyroTestbutton_next" ,&testView::ChangegyroTestTESTView,true},\r
-// #endif\r
-        {OLDTEST,"oldtestbutton","aging" ,"oldtestexit",&testView::ChangeoldTESTView,true},\r
-        {DEEPSLEEP,"deepsleep","DeepSleepCurrent","xxxxxxxxx" ,&testView::ChangeoldTESTView,true},\r
-        {shutdown,"shutdown","shutdown", "xxxxxxxxx",&testView::ChangeoldTESTView,true},\r
-        {RESET,"reset","reset", "xxxxxxxxx",&testView::ChangeoldTESTView,true},\r
-        {FACTORYRESE,"FactoryReset","FactoryReset","xxxxxxxxx", &testView::ChangeoldTESTView,true},\r
-    #ifdef SUPPORT_A5133_SERVICE\r
-        {RF5133,"RF5133","RF5133", "xxxxxxxxx",&testView::ChangeA5133TESTView,true},\r
-    #endif\r
 \r
     };\r
-    \r
+\r
     testView::testView()\r
     {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testView::testView");\r
@@ -98,111 +99,125 @@ namespace OHOS
 \r
     void testView::ClearAll()\r
     {\r
-        if (initViewStatus == true)\r
+        if (group)\r
         {\r
-            SystemScrollView[TESTVIEW]->RemoveAll();\r
-            int funcSize = sizeof(Test_ViewMapper_t) / sizeof(Test_ViewMapper_t[TESTVIEW]);\r
-            for (int i = 0; i < funcSize; i++)\r
+            group->RemoveAll();\r
+            delete group;\r
+            group = nullptr;\r
+            if (SystemScrollView[TESTVIEW])\r
             {\r
-                if(button[i])\r
+                SystemScrollView[TESTVIEW]->RemoveAll();\r
+                delete SystemScrollView[TESTVIEW];\r
+                SystemScrollView[TESTVIEW] = nullptr;\r
+                delete SystemLabel;\r
+                SystemLabel = nullptr;\r
+                int funcSize = sizeof(Test_ViewMapper_t) / sizeof(Test_ViewMapper_t[TESTVIEW]);\r
+                for (int i = 0; i < funcSize; i++)\r
                 {\r
-                    delete button[i];\r
-                    button[i]=NULL;\r
+                    if (button[i])\r
+                    {\r
+                        delete button[i];\r
+                        button[i] = NULL;\r
+                    }\r
                 }\r
             }\r
-            if(test_about_view)\r
-            {\r
-                delete test_about_view;  //1\r
-                test_about_view = nullptr;\r
-            }\r
-            \r
-            if(test_LCD_view)\r
-            {\r
-            delete test_LCD_view;  //2\r
+        }\r
+        if (test_about_view)\r
+        {\r
+            delete test_about_view; // 1\r
+            test_about_view = nullptr;\r
+        }\r
+\r
+        if (test_LCD_view)\r
+        {\r
+            delete test_LCD_view; // 2\r
             test_LCD_view = nullptr;\r
-            }\r
-            if(test_TP_view)\r
-            {\r
-            delete test_TP_view; //3\r
+        }\r
+        if (test_TP_view)\r
+        {\r
+            delete test_TP_view; // 3\r
             test_TP_view = nullptr;\r
-            }\r
-            if(test_lum_view)\r
-            {\r
-            delete test_lum_view;//4\r
+        }\r
+        if (test_lum_view)\r
+        {\r
+            delete test_lum_view; // 4\r
             test_lum_view = nullptr;\r
-            }\r
-            if(test_charging_view)\r
-            {\r
-            delete test_charging_view;//5\r
+        }\r
+        if (test_charging_view)\r
+        {\r
+            delete test_charging_view; // 5\r
             test_charging_view = nullptr;\r
-            }\r
-            if(test_speak_view)\r
-            {\r
-            delete test_speak_view;//6\r
+        }\r
+        if (test_speak_view)\r
+        {\r
+            delete test_speak_view; // 6\r
             test_speak_view = nullptr;\r
-            }\r
-            if(test_motor_view)\r
-            {\r
-            delete test_motor_view;//7\r
+        }\r
+        if (test_motor_view)\r
+        {\r
+            delete test_motor_view; // 7\r
             test_motor_view = nullptr;\r
-            }\r
+        }\r
 #ifdef SUPPORT_CAT1_SERVICE\r
-            if(test_cat1_view)\r
-            {\r
-            delete test_cat1_view;//8\r
+        if (test_cat1_view)\r
+        {\r
+            delete test_cat1_view; // 8\r
             test_cat1_view = nullptr;\r
-            }\r
+        }\r
 #endif\r
 \r
-            if(test_KEY_view)\r
-            {\r
-            delete test_KEY_view;//9\r
+        if (test_KEY_view)\r
+        {\r
+            delete test_KEY_view; // 9\r
             test_KEY_view = nullptr;\r
-            }\r
-            if(test_MG_view)\r
-            {\r
-            delete test_MG_view;//10\r
+        }\r
+        if (test_MG_view)\r
+        {\r
+            delete test_MG_view; // 10\r
             test_MG_view = nullptr;\r
-            }\r
-            if(test_hr_view)\r
-            {\r
-            delete test_hr_view;//11\r
+        }\r
+        if (test_hr_view)\r
+        {\r
+            delete test_hr_view; // 11\r
             test_hr_view = nullptr;\r
-            }\r
-            if(test_MP_view)\r
-            {\r
-            delete test_MP_view;//12\r
+        }\r
+        if (test_MP_view)\r
+        {\r
+            delete test_MP_view; // 12\r
             test_MP_view = nullptr;\r
-            }\r
-            if(test_G_view)\r
-            {\r
-            delete test_G_view;//13\r
-            test_G_view= nullptr;\r
-            }\r
+        }\r
+        if (test_G_view)\r
+        {\r
+            delete test_G_view; // 13\r
+            test_G_view = nullptr;\r
+        }\r
 #ifdef SUPPORT_A5133_SERVICE\r
-            if(test_A5133_view)\r
-            {\r
-            delete test_A5133_view;//13\r
-            test_A5133_view= nullptr;\r
-            }\r
+        if (test_A5133_view)\r
+        {\r
+            delete test_A5133_view; // 13\r
+            test_A5133_view = nullptr;\r
+        }\r
 #endif\r
-            // delete test_G_view;//13\r
-            // test_G_view= nullptr;\r
+        // delete test_G_view;//13\r
+        // test_G_view= nullptr;\r
 \r
-            delete SystemLabel;\r
-            SystemLabel = nullptr;\r
-            if(SystemScrollView[TESTVIEW])\r
-            {\r
-                delete SystemScrollView[TESTVIEW];\r
-                SystemScrollView[TESTVIEW] = nullptr;\r
-            }\r
-            for(int i=1;i<13;i++)\r
-            {\r
-                if(SystemScrollView[i])\r
-                SystemScrollView[i] = nullptr;   \r
-            }\r
-           \r
+        for (int i = 1; i < 13; i++)\r
+        {\r
+            if (SystemScrollView[i])\r
+                SystemScrollView[i] = nullptr;\r
+        }\r
+        if (test_Ping_view)\r
+        {\r
+            delete test_Ping_view; // PingTest\r
+            test_Ping_view = nullptr;\r
+        }\r
+#ifdef SUPPORT_GNSS\r
+        if (test_GPS_view)\r
+        {\r
+            delete test_GPS_view; // GPS\r
+            test_GPS_view = nullptr;\r
         }\r
+#endif\r
     }\r
 \r
     /// @brief 设置SystemScrollView\r
@@ -315,33 +330,30 @@ namespace OHOS
         buttonconfig.w = w;\r
         buttonconfig.h = h;\r
 \r
-        int len =sizeof(Test_ViewMapper_t)/sizeof(Test_ViewMapper_t[0]);\r
+        int len = sizeof(Test_ViewMapper_t) / sizeof(Test_ViewMapper_t[0]);\r
 \r
-        for(int i=1;i<len;i++)\r
+        for (int i = 1; i < len; i++)\r
         {\r
-            buttonconfig.str=Test_ViewMapper_t[i].Labe_str;\r
+            buttonconfig.str = Test_ViewMapper_t[i].Labe_str;\r
             buttonconfig.ViewId = Test_ViewMapper_t[i].viewid_str;\r
             buttonconfig.ImageSrc = imagsrc;\r
-            buttonconfig.label_x=40;\r
-            buttonconfig.label_y=0;\r
-            buttonconfig.Fontsize=30;\r
-            buttonconfig.ALIGN=TEXT_ALIGNMENT_LEFT;\r
+            buttonconfig.label_x = 40;\r
+            buttonconfig.label_y = 0;\r
+            buttonconfig.Fontsize = 30;\r
+            buttonconfig.ALIGN = TEXT_ALIGNMENT_LEFT;\r
             button[i] = SetTheButton_ext(buttonconfig, clickListener);\r
-            buttonconfig.y+=interval;\r
-\r
+            buttonconfig.y += interval;\r
         }\r
         /* -------------------------------------------------------------------------- */\r
-       \r
     }\r
 \r
-    \r
     // 0.跳转到系统视图,其他视图都市通过这个视图跳转\r
     bool testView::ChangeSystemView(int16_t thisView)\r
     {\r
         if (SystemScrollView[thisView] == nullptr)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeSystemView");\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -359,7 +371,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_about_view->SystemAbouTheWatchtInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -376,7 +388,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_LCD_view->testLCDInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -393,12 +405,12 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_TP_view->testTPInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
 \r
-     bool testView::ChangeMGTESTView(int16_t thisView)\r
+    bool testView::ChangeMGTESTView(int16_t thisView)\r
     {\r
         if (SystemScrollView[thisView] == nullptr)\r
         {\r
@@ -410,7 +422,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_MG_view->testmagicInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -427,11 +439,11 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_lum_view->testLUMInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
-    \r
+\r
     bool testView::ChangchargingTESTView(int16_t thisView)\r
     {\r
         if (SystemScrollView[thisView] == nullptr)\r
@@ -444,7 +456,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_charging_view->testCHANINGInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -461,7 +473,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_speak_view->testSPEAKInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -478,14 +490,14 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_motor_view->testMOTORInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
 \r
-     bool testView::ChangeCAT1TESTView(int16_t thisView)\r
+    bool testView::ChangeCAT1TESTView(int16_t thisView)\r
     {\r
-        #ifdef SUPPORT_CAT1_SERVICE\r
+#ifdef SUPPORT_CAT1_SERVICE\r
         if (SystemScrollView[thisView] == nullptr)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeCAT1TESTView");\r
@@ -496,9 +508,9 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_cat1_view->testcat1InitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
-        #endif\r
+#endif\r
         return true;\r
     }\r
 \r
@@ -514,7 +526,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_KEY_view->testBUTTONInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -531,7 +543,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_MP_view->testmicrophoneInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -548,12 +560,11 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_hr_view->testhrsensonInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
 \r
-    \r
     bool testView::ChangeGTESTView(int16_t thisView)\r
     {\r
         if (SystemScrollView[thisView] == nullptr)\r
@@ -566,14 +577,14 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_G_view->testGSENSONInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
-  \r
 \r
-     bool testView::ChangeoldTESTView(int16_t thisView)\r
+    bool testView::ChangeoldTESTView(int16_t thisView)\r
     {\r
+#ifdef AGINGTEST\r
         if (SystemScrollView[thisView] == nullptr)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeoldTESTView");\r
@@ -584,12 +595,11 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_old_view->testoldInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
+#endif\r
         return true;\r
-       \r
     }\r
-   \r
 \r
     bool testView::ChangeBTTESTView(int16_t thisView)\r
     {\r
@@ -603,12 +613,11 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_BT_view->testBTInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
 \r
-    \r
     bool testView::ChangeSEChipTESTView(int16_t thisView)\r
     {\r
         if (SystemScrollView[thisView] == nullptr)\r
@@ -621,7 +630,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_SEChip_view->SEChipInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -630,7 +639,7 @@ namespace OHOS
     {\r
         if (SystemScrollView[thisView] == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeSEChipTESTView");\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::ChangePingTESTView");\r
             test_Ping_view = new testPingView();\r
             if (test_Ping_view == nullptr)\r
             {\r
@@ -638,7 +647,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_Ping_view->testPingInitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -656,15 +665,15 @@ namespace OHOS
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: new scrollView[%d] fail", thisView);\r
                 return false;\r
             }\r
-            SystemScrollView[thisView] = test_GPS_view->testGPSInitIView((uint8_t)thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            SystemScrollView[thisView] = static_cast<UIScrollView*>(test_GPS_view->testGPSInitIView((uint8_t)thisView));\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
 \r
         return true;\r
     }\r
 #endif\r
-#if defined(ENABLE_LQBP002TA)\r
-     bool testView::ChangepressureTestTESTView(int16_t thisView)\r
+#ifdef ENABLE_LQBP002TA\r
+    bool testView::ChangepressureTestTESTView(int16_t thisView)\r
     {\r
 \r
         if (SystemScrollView[thisView] == nullptr)\r
@@ -677,33 +686,11 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_pressure_view->testpressureInitIView((uint8_t)thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
-        }\r
-\r
-\r
-        return true;\r
-    }\r
-#endif\r
-#if defined(ENABLE_GYRO)\r
-    bool testView::ChangegyroTestTESTView(int16_t thisView)\r
-    {\r
-\r
-        if (SystemScrollView[thisView] == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeSEChipTESTView");\r
-            test_gyro_view = new testgyroView();\r
-            if (test_gyro_view == nullptr)\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: new scrollView[%d] fail", thisView);\r
-                return false;\r
-            }\r
-            SystemScrollView[thisView] = test_gyro_view->testgyroInitIView((uint8_t)thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
 \r
         return true;\r
     }\r
-\r
 #endif\r
 #ifdef SUPPORT_A5133_SERVICE\r
     bool testView::ChangeA5133TESTView(int16_t thisView)\r
@@ -718,7 +705,7 @@ namespace OHOS
                 return false;\r
             }\r
             SystemScrollView[thisView] = test_A5133_view->testA5133InitIView(thisView);\r
-            RootView::GetInstance()->Add(SystemScrollView[thisView]);\r
+            group->Add(SystemScrollView[thisView]);\r
         }\r
         return true;\r
     }\r
@@ -735,7 +722,7 @@ namespace OHOS
 \r
     /* -------------------------------------------------------------------------- */\r
     // 1.MainStopWatchViewMapper:结构体定义了一个将视图ID映射到特定成员函数指针的映射表。\r
-  \r
+\r
     // 3.根据传入的interface参数执行相应视图ID关联的成员函数。\r
     bool testView::ClickFunc(int16_t interface)\r
     {\r
@@ -763,226 +750,215 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: SystemViewId Overstep ones bounds");\r
             return;\r
         }\r
-        SystemScrollView[hideView]->SetVisible(false);\r
+        if (SystemScrollView[hideView] != nullptr)\r
+        {\r
+            SystemScrollView[hideView]->SetVisible(false);\r
+        }\r
+        else\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: SystemScrollView[%d] is nullptr", hideView);\r
+        }\r
         ClickFunc(showView);\r
-        SystemScrollView[showView]->SetVisible(true);\r
-        Draw();\r
-        if(hideView!=0)\r
+        if (SystemScrollView[showView] != nullptr)\r
+        {\r
+            SystemScrollView[showView]->SetVisible(true);\r
+        }\r
+        else\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: SystemScrollView[%d] is nullptr", showView);\r
+        }\r
+        if (hideView != 0)\r
         {\r
-           switch (hideView)\r
-           {\r
+            switch (hideView)\r
+            {\r
             case VISON:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_about_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_about_view;\r
                 test_about_view = nullptr;\r
-                SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case LCD:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_LCD_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_LCD_view;\r
                 test_LCD_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case TP:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_TP_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_TP_view;\r
                 test_TP_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;   \r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case MAGETIC:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_MG_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_MG_view;\r
                 test_MG_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case LUMINANCE:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_lum_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_lum_view;\r
                 test_lum_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case CHARG:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_charging_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_charging_view;\r
                 test_charging_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
 \r
             case SPEAK:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_speak_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_speak_view;\r
                 test_speak_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case MOTOR:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_motor_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_motor_view;\r
                 test_motor_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
 #ifdef SUPPORT_CAT1_SERVICE\r
-             case CAT1:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_cat1_view;  \r
+            case CAT1:\r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_cat1_view;\r
                 test_cat1_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
 #endif\r
-             case BUTTON:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_KEY_view;  \r
+            case BUTTON:\r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_KEY_view;\r
                 test_KEY_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case MICROPHONE:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_MP_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_MP_view;\r
                 test_MP_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case HRSENSON:\r
-                 RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_hr_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_hr_view;\r
                 test_hr_view = nullptr;\r
-                 SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case GSENSON:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_G_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_G_view;\r
                 test_G_view = nullptr;\r
-                SystemScrollView[hideView]=nullptr;\r
-            break;\r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
             case OLDTEST:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_old_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_old_view;\r
                 test_old_view = nullptr;\r
-                SystemScrollView[hideView]=nullptr;\r
+                SystemScrollView[hideView] = nullptr;\r
                 break;\r
             case BTTEST:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_BT_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_BT_view;\r
                 test_BT_view = nullptr;\r
-                SystemScrollView[hideView]=nullptr;\r
+                SystemScrollView[hideView] = nullptr;\r
                 break;\r
             case SEChipTest:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_SEChip_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_SEChip_view;\r
                 test_SEChip_view = nullptr;\r
-                SystemScrollView[hideView]=nullptr;\r
-                break;\r
-            case PingTest:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_Ping_view;  \r
-                test_Ping_view = nullptr;\r
-                SystemScrollView[hideView]=nullptr;\r
+                SystemScrollView[hideView] = nullptr;\r
                 break;\r
+            // case PingTest:\r
+            //     group->Remove(SystemScrollView[hideView]);\r
+            //     delete test_Ping_view;\r
+            //     test_Ping_view = nullptr;\r
+            //     SystemScrollView[hideView] = nullptr;\r
+            //     break;\r
 #if defined(SUPPORT_GNSS)\r
             case GPSTEST:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_GPS_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_GPS_view;\r
                 test_GPS_view = nullptr;\r
-                SystemScrollView[hideView]=nullptr;\r
-                break; \r
+                SystemScrollView[hideView] = nullptr;\r
+                break;\r
 #endif\r
 #ifdef SUPPORT_A5133_SERVICE\r
             case RF5133:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_A5133_view;  \r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_A5133_view;\r
                 test_A5133_view = nullptr;\r
-                SystemScrollView[hideView]=nullptr;\r
+                SystemScrollView[hideView] = nullptr;\r
                 break;\r
 #endif\r
 #if defined(ENABLE_LQBP002TA)\r
-             case PRESSURETEST:\r
-                RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-                delete test_pressure_view;  \r
+            case PRESSURETEST:\r
+                group->Remove(SystemScrollView[hideView]);\r
+                delete test_pressure_view;\r
                 test_pressure_view = nullptr;\r
-                SystemScrollView[hideView]=nullptr;\r
+                SystemScrollView[hideView] = nullptr;\r
                 break;\r
 #endif\r
-// #if defined(ENABLE_GYRO)\r
-//              case GYROTEST:\r
-//                 RootView::GetInstance()->Remove(SystemScrollView[hideView]);\r
-//                 delete test_gyro_view;  \r
-//                 test_gyro_view = nullptr;\r
-//                 SystemScrollView[hideView]=nullptr;\r
-//                 break;\r
-// #endif\r
-\r
-           default:\r
-            break;\r
-           }\r
-        }\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "change>>>>>>>>>>>hideView %d > showView %d >>>",hideView,showView);\r
-       \r
+            default:\r
+                break;\r
+            }\r
+        }\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "change>>>>>>>>>>>hideView %d > showView %d >>>", hideView, showView);\r
     }\r
     /* -------------------------------------------------------------------------- */\r
 \r
     void testView::OnStart()\r
     {\r
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnStart>>>>>>>>>>>>>");\r
-        View<testPresenter>::OnStart();\r
-        //InitIView();\r
-        initView_ext(43,120,380,100,120,"/user/res/SETTING_NEXT.bin");\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnStart>>>>>>>>>>>>>");\r
+\r
+        if (group == nullptr)\r
+        {\r
+            group = new UIViewGroup();\r
+            if (group == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WatchQRCodeView::WatchQRCodeGroupView new fail!");\r
+            }\r
+        }\r
+        group->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        group->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        group->SetTouchable(true);\r
+        group->SetDraggable(true);\r
+\r
+        // InitIView();\r
+        initView_ext(43, 120, 380, 100, 120, "/user/res/SETTING_NEXT.bin");\r
         const power_display_svr_api_t *display_api = power_display_svr_get_api();\r
         if (display_api->get_screen_state() != SCREEN_ON)\r
-         {   \r
-               display_api->turn_on_screen();  \r
-         }  \r
+        {\r
+            display_api->turn_on_screen();\r
+        }\r
         display_api->set_auto_timeout_function(false);\r
 \r
         uint8_t cnt = pm_veto_get_id_cnt(PM_ID_P_TEST);\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cnt : %d\n",cnt);\r
-        if (cnt == 0) \r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cnt : %d\n", cnt);\r
+        if (cnt == 0)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_pm_add_sleep_veto(PM_ID_P_TEST);");\r
             uapi_pm_add_sleep_veto(PM_ID_P_TEST);\r
         }\r
 \r
-        uapi_set4GCapability(true);\r
+        if (!uapi_dev_runtime_get_factory_test_status_flag())\r
+            uapi_set4GCapability(true);\r
 \r
         start_custom_ble_service();\r
-    }\r
 \r
-    void testView::OnSetUpView()\r
-    {\r
-        View<testPresenter>::OnSetUpView();\r
         if (SystemScrollView[TESTVIEW] == nullptr)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: OnSetUpView  has nullptr");\r
             return;\r
         }\r
-        \r
         SystemScrollView[TESTVIEW]->Add(SystemLabel);\r
-\r
-        int len =sizeof(Test_ViewMapper_t)/sizeof(Test_ViewMapper_t[0]);\r
-\r
-        for(int i=0;i<len;i++)\r
+        int len = sizeof(Test_ViewMapper_t) / sizeof(Test_ViewMapper_t[0]);\r
+        for (int i = 0; i < len; i++)\r
         {\r
-         SystemScrollView[TESTVIEW]->Add(button[i]);\r
+            SystemScrollView[TESTVIEW]->Add(button[i]);\r
         }\r
-       \r
-        // SystemScrollView[SYSTEMVIEW]->Add(SuperviseButton);\r
-        // SystemScrollView[SYSTEMVIEW]->Add(SystemLanguageButton);\r
-        // SystemScrollView[SYSTEMVIEW]->Add(FactoryResetButton);\r
-        // SystemScrollView[SYSTEMVIEW]->Add(SystemUpgradeButtonExt);\r
-\r
-        RootView::GetInstance()->Add(SystemScrollView[TESTVIEW]);\r
-        Draw();\r
-    }\r
-\r
-    void testView::OnTearDownView()\r
-    {\r
-\r
-        View<testPresenter>::OnTearDownView();\r
-        return;\r
-    }\r
-\r
-    void testView::OnStop()\r
-    {\r
-\r
-        View<testPresenter>::OnStop();\r
-        RootView::GetInstance()->RemoveAll();\r
-        return;\r
+        group->Add(SystemScrollView[TESTVIEW]);\r
+        RootView::GetInstance()->Add(group);\r
     }\r
 }
\ No newline at end of file
index ad76147..2b39f55 100644 (file)
@@ -53,6 +53,9 @@ static int g_is_pgnss_logon=0;
 static int g_pgnss_stopflag=0;\r
 static int g_cold_start_pgnss_stopflag = 0;\r
 \r
+/**北斗定位标志位*/\r
+static int g_bds_mode_flag=0;  // 0=GPS模式, 1=北斗模式\r
+\r
 static char *pgnss_log = NULL;\r
 \r
 static int32_t QryVersion(tiot_handle handle)\r
@@ -104,6 +107,8 @@ const uint8_t CFG_TRK_LPW_DISABLE[] = {0x03, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06,
 const uint8_t CFG_ACQ_LPW_DISABLE[] = {0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00};\r
 const uint8_t CFG_ANTIJAM_ENABLE[] = {0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x06, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00};\r
 \r
+const uint8_t CFG_BDS_MODE[] = {0x03,0x00,0x08 ,0x00 ,0x00 ,0x00 ,0x08 ,0x00 ,0x00 ,0x00 ,0x04 ,0x00 ,0x04 ,0x00 ,0x00 ,0x00};\r
+\r
 // 普通GNSS冷启动配置函数实现\r
 int32_t CfgColdStartFixModeGpsNmeaAll(tiot_handle handle)\r
 {\r
@@ -114,11 +119,26 @@ int32_t CfgColdStartFixModeGpsNmeaAll(tiot_handle handle)
         return 0;\r
     }\r
 \r
-    // 配置使能的GNSS星座:GPS\r
-    ret = tiot_service_write(handle, cfgFixModeAllCmd, sizeof(cfgFixModeAllCmd));\r
-    if (ret < 0) {\r
-        printf("\nerror: cfgFixModeAllCmd error: %d\r\n", ret);\r
-        return 0;\r
+    // 根据北斗标志位选择星座配置\r
+    if(g_bds_mode_flag)\r
+    {\r
+        // 北斗模式:配置北斗星座\r
+        ret = tiot_service_write(handle, CFG_BDS_MODE, sizeof(CFG_BDS_MODE));\r
+        if (ret < 0) {\r
+            printf("\nerror: CFG_BDS_MODE error: %d\r\n", ret);\r
+            return 0;\r
+        }\r
+        printf("BDS constellation configured\r\n");\r
+    }\r
+    else\r
+    {\r
+        // GPS模式:配置GPS星座\r
+        ret = tiot_service_write(handle, cfgFixModeAllCmd, sizeof(cfgFixModeAllCmd));\r
+        if (ret < 0) {\r
+            printf("\nerror: cfgFixModeAllCmd error: %d\r\n", ret);\r
+            return 0;\r
+        }\r
+        printf("GPS constellation configured\r\n");\r
     }\r
 \r
     // 配置上报NMEA类型:PNT/ZDA/VTG/RMC/GSV/GSA/GLL/GGA\r
@@ -146,10 +166,77 @@ int32_t CfgColdStartFixModeGpsNmeaAll(tiot_handle handle)
         return 0;\r
     }\r
     \r
-    printf("Cold start mode configured successfully\r\n");\r
+    printf("Cold start mode configured successfully (Mode: %s)\r\n", g_bds_mode_flag ? "BDS" : "GPS");\r
     return 1;\r
 }\r
 \r
+// 北斗定位配置函数 - 简化版本,只配置必要的北斗参数\r
+int32_t CfgBDSMode(tiot_handle handle)\r
+{\r
+    // 配置北斗模式\r
+    int32_t ret = tiot_service_write(handle, CFG_BDS_MODE, sizeof(CFG_BDS_MODE));\r
+    if (ret < 0) {\r
+        printf("\nerror: CFG_BDS_MODE error: %d\r\n", ret);\r
+        return 0;\r
+    }\r
+    \r
+    // 配置启动模式:冷启动模式\r
+    ret = tiot_service_write(handle, cfgColdStartCmd, sizeof(cfgColdStartCmd));\r
+    if (ret < 0) {\r
+        printf("\nerror: cfgColdStartCmd error: %d\r\n", ret);\r
+        return 0;\r
+    }\r
+    \r
+    printf("BDS mode configured successfully (minimal config)\r\n");\r
+    return 1;\r
+}\r
+\r
+// // 北斗定位配置函数 - 完整版本(如果需要更多配置选项)\r
+// int32_t CfgBDSModeFull(tiot_handle handle)\r
+// {\r
+//     // 配置北斗模式\r
+//     int32_t ret = tiot_service_write(handle, CFG_BDS_MODE, sizeof(CFG_BDS_MODE));\r
+//     if (ret < 0) {\r
+//         printf("\nerror: CFG_BDS_MODE error: %d\r\n", ret);\r
+//         return 0;\r
+//     }\r
+    \r
+//     // 配置启动模式:冷启动模式\r
+//     ret = tiot_service_write(handle, cfgColdStartCmd, sizeof(cfgColdStartCmd));\r
+//     if (ret < 0) {\r
+//         printf("\nerror: cfgColdStartCmd error: %d\r\n", ret);\r
+//         return 0;\r
+//     }\r
+\r
+//     // 配置上报NMEA类型:PNT/ZDA/VTG/RMC/GSV/GSA/GLL/GGA\r
+//     ret = tiot_service_write(handle, cfgNmeaAllCmd, sizeof(cfgNmeaAllCmd));\r
+//     if (ret < 0) {\r
+//         printf("\nerror: cfgNmeaAllCmd error: %d\r\n", ret);\r
+//         return 0;\r
+//     }\r
+\r
+//     ret = tiot_service_write(handle, CFG_TRK_LPW_DISABLE, sizeof(CFG_TRK_LPW_DISABLE));\r
+//     if (ret < 0) {\r
+//         printf("\nerror: CFG_TRK_LPW_DISABLE error: %d\r\n", ret);\r
+//         return 0;\r
+//     }\r
+\r
+//     ret = tiot_service_write(handle, CFG_ACQ_LPW_DISABLE, sizeof(CFG_ACQ_LPW_DISABLE));\r
+//     if (ret < 0) {\r
+//         printf("\nerror: CFG_ACQ_LPW_DISABLE error: %d\r\n", ret);\r
+//         return 0;\r
+//     }\r
+\r
+//     ret = tiot_service_write(handle, CFG_ANTIJAM_ENABLE, sizeof(CFG_ANTIJAM_ENABLE));\r
+//     if (ret < 0) {\r
+//         printf("\nerror: CFG_ANTIJAM_ENABLE error: %d\r\n", ret);\r
+//         return 0;\r
+//     }\r
+    \r
+//     printf("BDS mode configured successfully (full config)\r\n");\r
+//     return 1;\r
+// }\r
+\r
 // 修改后的PGNSS配置函数,支持降级到普通GNSS\r
 int32_t InjectPgnssWithFallbackToColdStart(tiot_handle handle)\r
 {\r
@@ -260,10 +347,10 @@ static void ListenGnssData(tiot_handle handle)
     // 写日志\r
     for (;;) {  // 写日志条件\r
 \r
-        if (i >= LISTEN_DATA_MAX_LINES) {\r
-            printf("\r\ncnt enough\r\n");\r
-            break;\r
-        }\r
+        // if (i >= LISTEN_DATA_MAX_LINES) {\r
+        //     printf("\r\ncnt enough\r\n");\r
+        //     break;\r
+        // }\r
         if (g_pgnss_stopflag == 1)\r
         {\r
             break;\r
@@ -459,7 +546,7 @@ void PGnssServerStartColdStart(void)
 void PGnssServerStart(void)\r
 {\r
     //未绑定直接冷启动\r
-    if(cm_getisFirstTimeStart())\r
+    if(cm_getisFirstTimeStart() || g_bds_mode_flag)\r
     {\r
         printf("PGnssServerStartColdStart \n");\r
         PGnssServerStartColdStart();\r
@@ -602,3 +689,15 @@ void PGnssServerStart(void)
     }\r
 \r
 }\r
+\r
+// 北斗标志位接口\r
+void setBDSModeFlag(int flag)\r
+{\r
+    g_bds_mode_flag = flag;\r
+    printf("BDS mode flag set to: %d\r\n", flag);\r
+}\r
+\r
+int getBDSModeFlag(void)\r
+{\r
+    return g_bds_mode_flag;\r
+}\r
index 37d7d51..ea2268f 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: penglei 1624952103@qq.com\r
  * @Date: 2025-07-11 16:41:59\r
  * @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2025-07-18 17:39:28\r
+ * @LastEditTime: 2025-09-25 14:37:39\r
  * @FilePath: /FD230/code/sdk/drivers/peripheral/gnss/sample/pgnss_sample/pgnss_sample.h\r
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
  */\r
@@ -20,6 +20,10 @@ extern "C" {
 void PGnssServerStart(void);\r
 void PGnssServerStop(void);\r
 int getPGnssServerStat(void);\r
+\r
+// 北斗标志位接口\r
+void setBDSModeFlag(int flag);\r
+int getBDSModeFlag(void);\r
 #ifdef __cplusplus\r
 }\r
 #endif /* __cplusplus */\r