1.解决勿扰模式内存泄漏问题 1055/5 1055/head
authorluozheng <1732036298@qq.com>
Sun, 29 Sep 2024 13:25:35 +0000 (21:25 +0800)
committerluozheng <1732036298@qq.com>
Sun, 29 Sep 2024 13:25:35 +0000 (21:25 +0800)
2.解决勿扰模式界面中label在切换成其他国语言导致字体遮盖下面的Button问题
3.勿扰模式界面添加编码器控制界面问题
4.解决勿扰模式内存泄漏问题

code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/include/DnotDisturbView.h
code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp

index 80db09b..f5f25ef 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-04-10 11:58:15
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-29 16:04:53
+ * @LastEditTime: 2024-09-29 21:04:14
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/include/DnotDisturbView.h
  */
 #ifndef DNOTDISTURB_VIEW_H
@@ -45,6 +45,7 @@ namespace OHOS
         UILabelExt *AttentionLabel{nullptr};
         UILabelButtonExt *ButtonOn;
         UILabelButtonExt *ButtonOff;
+        UIImageView *temp{nullptr};
     };
 }
 #endif
\ No newline at end of file
index 7dea6f5..0cff234 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-04-10 11:58:21
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-08-26 17:39:08
+ * @LastEditTime: 2024-09-29 21:19:46
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbView.cpp
  */
 #include "dnotdisturb/include/DnotDisturbView.h"
@@ -71,6 +71,13 @@ namespace OHOS
                 delete ButtonOff;
                 ButtonOff = nullptr;
             }
+            if (temp != nullptr)
+            {
+                delete temp;
+                temp = nullptr;
+            }
+            delete scrollView;
+            scrollView = nullptr;
         }
     }
 
@@ -89,6 +96,15 @@ namespace OHOS
             scrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
             scrollView->SetTouchable(true);
             scrollView->SetDraggable(true);
+            scrollView->SetScrollBlankSize(30);
+            scrollView->SetReboundSize(30);
+            scrollView->SetDirection(1);
+            scrollView->SetThrowDrag(true);         // 设置手指抬起屏幕后是否继续滚动。
+            scrollView->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。
+            scrollView->SetSwipeACCLevel(800);      /*设置手指抬起屏幕后的补偿距离。*/
+            FocusManager::GetInstance()->RequestFocus(scrollView);
+            FocusManager::GetInstance()->RequestFocusByDirection(FOCUS_DIRECTION_UP);
+            scrollView->SetRotateFactor(1.0);
             UIView::OnDragListener *dragListener = static_cast<UIView::OnDragListener *>(DnotDisturbPresenter::GetInstance());
             if (dragListener == nullptr)
             {
@@ -110,6 +126,7 @@ namespace OHOS
             showTitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
             showTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
             showTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+            scrollView->Add(showTitleLabel);
             /* -------------------------------------------------------------------------- */
             DnotDisturbImage = new UIImageView();
             if (DnotDisturbImage == nullptr)
@@ -125,6 +142,7 @@ namespace OHOS
             DnotDisturbImage->SetAutoEnable(false);
             DnotDisturbImage->SetResizeMode(UIImageView::FILL);
             DnotDisturbImage->SetSrc(PNG_APPLIST_DISTURB_IMAGE);
+            scrollView->Add(DnotDisturbImage);
             /* -------------------------------------------------------------------------- */
             AttentionLabel = new UILabelExt();
             if (AttentionLabel == nullptr)
@@ -136,11 +154,12 @@ namespace OHOS
             AttentionLabel->SetStyle(STYLE_TEXT_FONT, 30);
             AttentionLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
             // bool ?勿扰模式已开启是否关闭:开启勿扰模式,手表将不会发出震动与铃声,是否开启
-            AttentionLabel->SetTextId(DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled() ? STR_DISTURBNOTE_OFF : STR_DO_NOT_DISTURB_MODE); 
+            AttentionLabel->SetTextId(DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled() ? STR_DISTURBNOTE_OFF : STR_DO_NOT_DISTURB_MODE);
             AttentionLabel->SetLineBreakMode(UILabelExt::LINE_BREAK_WRAP);
             AttentionLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
             AttentionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
             AttentionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+            scrollView->Add(AttentionLabel);
             /* -------------------------------------------------------------------------- */
             ButtonOn = new UILabelButtonExt();
             if (ButtonOn == nullptr)
@@ -148,7 +167,7 @@ namespace OHOS
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::ButtonOn new fail!!");
                 return;
             }
-            ButtonOn->SetPosition(256, 320, 120, 120);
+            ButtonOn->SetPosition(256, AttentionLabel->GetY() + AttentionLabel->GetHeight() + 20, 120, 120);
             ButtonOn->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
             ButtonOn->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
             const char *ButtonOnImgSrc = "/user/res/SYSTEM_CheckOn.bin";
@@ -156,8 +175,8 @@ namespace OHOS
             ButtonOn->SetImagePosition(10, 10);
             ButtonOn->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);
             ButtonOn->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
-            UIView::OnClickListener *labelButtonClick1 = static_cast<UIView::OnClickListener *>(DnotDisturbPresenter::GetInstance());
-            ButtonOn->SetOnClickListener(labelButtonClick1);
+            ButtonOn->SetOnClickListener(presenter_);
+            scrollView->Add(ButtonOn);
             /* -------------------------------------------------------------------------- */
             ButtonOff = new UILabelButtonExt();
             if (ButtonOff == nullptr)
@@ -165,7 +184,7 @@ namespace OHOS
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DnotDisturbView::ButtonOff new fail!!");
                 return;
             }
-            ButtonOff->SetPosition(111, 320, 120, 120);
+            ButtonOff->SetPosition(111, AttentionLabel->GetY() + AttentionLabel->GetHeight() + 20, 120, 120);
             ButtonOff->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
             ButtonOff->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
             const char *ButtonOffImgSrc = "/user/res/SYSTEM_CheckOff.bin";
@@ -173,8 +192,24 @@ namespace OHOS
             ButtonOff->SetImagePosition(10, 10);
             ButtonOff->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);
             ButtonOff->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
-            UIView::OnClickListener *labelButtonClick2 = static_cast<UIView::OnClickListener *>(DnotDisturbPresenter::GetInstance());
-            ButtonOff->SetOnClickListener(labelButtonClick2);
+            ButtonOff->SetOnClickListener(presenter_);
+            scrollView->Add(ButtonOff);
+            /* -------------------------------------------------------------------------- */
+            if ((ButtonOff->GetY() + ButtonOff->GetHeight() > Screen::GetInstance().GetHeight()))
+            {
+                if (temp == nullptr)
+                {
+                    temp = new UIImageView();
+                    if (temp == nullptr)
+                    {
+                        return;
+                    }
+
+                    temp->SetPosition(43, ButtonOff->GetY() + ButtonOff->GetHeight(), 380, 40);
+                    temp->SetVisible(false);
+                    scrollView->Add(temp);
+                }
+            }
         }
     }
 
@@ -211,23 +246,28 @@ namespace OHOS
     void DnotDisturbView::OnStart()
     {
         View<DnotDisturbPresenter>::OnStart();
+        SetContainerView(new UIViewGroup());
+        if (GetContainer() == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "container_ new fail!!");
+            return;
+        }
+        container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        container_->SetTouchable(true);
+        container_->SetDraggable(true);
+
         DnotDisturbViewInit();
 
-        // 增加按键监听
-        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::DnotDisturbPresenter::GetInstance();
-        RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);
     }
 
     void DnotDisturbView::OnSetUpView()
     {
         View<DnotDisturbPresenter>::OnSetUpView();
-        scrollView->Add(showTitleLabel);
-        scrollView->Add(DnotDisturbImage);
-        scrollView->Add(AttentionLabel);
-        scrollView->Add(ButtonOn);
-        scrollView->Add(ButtonOff);
-        RootView::GetInstance()->Add(scrollView);
-        container_ = scrollView;
+        if (scrollView)
+        {
+            container_->Add(scrollView);
+        }
         Draw();
     }
 
@@ -240,8 +280,13 @@ namespace OHOS
 
     void DnotDisturbView::OnStop()
     {
-
         View<DnotDisturbPresenter>::OnStop();
+        if (container_ != nullptr)
+        {
+            container_->RemoveAll();
+            delete container_;
+            container_ = nullptr;
+        }
         RootView::GetInstance()->RemoveAll();
         RootView::GetInstance()->ClearOnKeyActListener();
         ClearAll();