#637手表,遥控拍照,APP先退出会导致手表卡死机(必现)
authorCaisking <3449750381@qq.com>
Wed, 11 Sep 2024 08:33:48 +0000 (16:33 +0800)
committerCaisking <3449750381@qq.com>
Wed, 11 Sep 2024 08:33:48 +0000 (16:33 +0800)
code/sdk/application/wearable/fd230app/nativeui/takephotos/src/TakephotosModel.cpp
code/sdk/application/wearable/fd230app/nativeui/takephotos/src/TakephotosPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/takephotos/src/TakephotosView.cpp

index 195e97e..a999520 100644 (file)
@@ -98,9 +98,9 @@ extern "C"
         // 退出拍照
         if (request->msgId == TOPIC_EVENT_CANCEL_CMAERA)
         {
-            TakephotosModel::GetInstance()->SetPopStaust(PopupPhoto::CreamPopup);
             NativeAbility::GetInstance().Back();
             cameraSend(3);
+            TakephotosModel::GetInstance()->SetPopStaust(PopupPhoto::CreamPopup);
         }
     }
 #ifdef __cplusplus
index 0c839ce..86d2f3c 100644 (file)
@@ -77,10 +77,14 @@ namespace OHOS
         if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
             (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
         {
+            
             NativeAbility::GetInstance().Back();
+
             /*如果是拍照界面需要发送拍照结束的消息*/
             if (TakephotosModel::GetInstance()->GetPopStaust() == PopupPhoto::TakePopup)
             {
+                //设置状态为 cream
+                TakephotosModel::GetInstance()->SetPopStaust(PopupPhoto::CreamPopup);
                 cameraSend(3);
             }
         }
index 79eea09..8813516 100644 (file)
  * @Date: 2024-08-29 19:34:29
  * @LastEditors: Caisking 3449750381@qq.com
  * @LastEditTime: 2024-08-30 19:46:48
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/takephotos/src/TakephotosView.cpp
+ * @FilePath:
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/takephotos/src/TakephotosView.cpp
  */
 
 #include "takephotos/include/TakephotosView.h"
 #include "takephotos/include/TakephotosModel.h"
 
-#include "common/image_cache_manager.h"
 #include "UiConfig.h"
-#include "ui_resource_image.h"
-#include <ui_scroll_view.h>
+#include "common/image_cache_manager.h"
 #include "components/ui_button.h"
+#include "ui_resource_image.h"
 #include "uicomponents/UIComponents.h"
-#include "UiConfig.h"
-namespace OHOS
-{
-    static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;
-
-    static TakephotosView *g_pTakephotosView{nullptr};
-
-    TakephotosView::TakephotosView()
-    {
-        g_pTakephotosView = this;
-    }
-
-    TakephotosView::~TakephotosView()
-    {
-        // DeInit();
-        PopupPhoto staust = TakephotosModel::GetInstance()->GetPopStaust();
-        if (staust == PopupPhoto::CreamPopup)
-        {
-            creamAnimator->Stop();
-            FreeImageInfoArray(creamimageInfos, creambasePath.c_str(), 50);
-        }
-        else
-        {
-            smileAnimator->Stop();
-            FreeImageInfoArray(smileimageInfos, smilebasePath.c_str(), 50);
-        }
-        ReleaseImageAnimatorSource(smileimageAnimatorInfo, 50);
-        ReleaseImageAnimatorSource(creamimageAnimatorInfo, 50);
-        UIViewGroup *tmpGroup = dynamic_cast<UIViewGroup *>(container_);
-        UIViewGroup::RemoveAndDeleteAllRecursively(tmpGroup);
-
-        g_pTakephotosView = nullptr;
-    }
-
-    TakephotosView *TakephotosView::GetInstance()
-    {
-        return g_pTakephotosView;
-    }
-
-    /* InitView:初始化界面*/
-    void TakephotosView ::InitView()
-    {
-        if (container_ == nullptr)
-        {
-            container_ = new UIScrollView();
-            container_->SetPosition(0, 0, 466, 466);
-            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
-        }
-        PopupPhoto staust = TakephotosModel::GetInstance()->GetPopStaust();
-        SetPopupViewStatus(staust, true);
-    }
-
-    /* DeInit:删除组件 */
-    void TakephotosView::DeInit()
-    {
-        creamView->RemoveAll();
-        takeView->RemoveAll();
-
-        delete labeltitle_;
-        labeltitle_ = nullptr;
-
-        delete labelnote_;
-        labelnote_ = nullptr;
-
-        delete labeltake_;
-        labeltake_ = nullptr;
-
-        delete labelclick_;
-        labelclick_ = nullptr;
-
-        delete buttontake;
-        buttontake = nullptr;
-
-        delete buttongo;
-        buttongo = nullptr;
-
-        smileAnimator->Stop();
-        delete smileAnimator;
-        smileAnimator = nullptr;
-
-        creamAnimator->Stop();
-        delete creamAnimator;
-        creamAnimator = nullptr;
-
-        delete creamView;
-        creamView = nullptr;
-
-        delete takeView;
-        takeView = nullptr;
-    }
-
-    void TakephotosView::PreLoad(void)
-    {
-        if (!viewiInitStatus)
-        {
-            InitView();
-            viewiInitStatus = true;
-        }
-    }
-    /*显示拍照界面*/
-    void TakephotosView::ShowCreamView()
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowcreamView start");
-        creamView = new UIScrollView();
-        if (creamView == nullptr)
-        {
-            return;
-        }
-        creamView->SetPosition(0, 0);
-        creamView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
-        creamView->SetScrollBlankSize(20);
-        creamView->SetReboundSize(50);
-        creamView->SetDirection(1);
-        /*初始化label*/
-        InitLabelExt(labeltitle_, 83, 50, 300, 35, "labletitle", STR_REMOTE_SHOOTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
-
-        // 设置标签的位置和大小
-        labelnote_ = new UILabel();
-        labelnote_->SetPosition(53, 250);
-        labelnote_->Resize(360, 200);
-        // 设置标签的视图 ID
-        labelnote_->SetViewId("labelTake");
-        // 设置标签的样式
-        labelnote_->SetStyle(STYLE_TEXT_FONT, 30);
-        labelnote_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
-        // 设置标签的文本和其他属性
-        labelnote_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-        labelnote_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
-        SetLabelId(labelnote_, STR_TACK);
-
-        /*初始化image*/
-        // InitImageView(imageTake, 174, 120, 118, 120, "image", RECOED_IMAGE);
-        /*初始化按键*/
-        InitButtonExt(buttongo, 0, 366, 466, 100, BUTTONGO, STR_KONW, 30);
-        buttongo->SetImageSrc(PNG_466x100BUTTON_IMAGE, PNG_466x100BUTTON_IMAGE);
-        buttongo->SetOnClickListener(static_cast<UIView::OnClickListener *>(TakephotosPresenter::GetInstance()));
-
-        // 初始化图片数组以及动画
-        creamimageInfos = CreateImageInfoArray(creambasePath.c_str(), 50);
-        InitImageAnimatorSource(creamAnimator, creamimageAnimatorInfo, creamimageInfos, 50, 163, 103, 140, 140, "imageAnimator", 100);
-
-        creamView->Add(creamAnimator);
-        creamView->Add(labeltitle_);
-        creamView->Add(labelnote_);
-        creamView->Add(buttongo);
-
-        // RootView::GetInstance()->Add(creamView);
-        container_->Add(creamView);
-
-        creamView->SetDraggable(true);
-        creamView->SetTouchable(true);
-
-        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TakephotosPresenter::GetInstance());
-        if (draglistener == nullptr)
-        {
-            return;
-        }
-        creamView->SetOnDragListener(draglistener);
-
-        creamView->SetVisible(false); // 界面隐藏
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowcreamView end");
-    }
-    /*遥控拍照界面*/
-    void TakephotosView::ShowTakeView()
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowTakeView start");
-        takeView = new UIScrollView();
-        if (takeView == nullptr)
-        {
-            return;
-        }
-        takeView->SetPosition(0, 0);
-        takeView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
-        takeView->SetScrollBlankSize(20);
-        takeView->SetReboundSize(50);
-        takeView->SetDirection(1);
-
-        /*初始化label*/
-        InitLabelExt(labeltake_, 83, 50, 300, 35, "labletitle", STR_REMOTE_SHOOTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitLabelExt(labelclick_, 53, 278, 360, 70, "labelclick_", STR_TACKNUM, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        UpdateLabel(labelclick_, 0, STR_TACKNUM); // 初始化为0
-
-        /*初始化按键*/
-        InitButtonExt(buttontake, 93, 330, 280, 90, BUTTONTAKE, STR_CLICK, 26);
-        buttontake->SetStyle(STYLE_BACKGROUND_COLOR, 0xff4fc34c); // 设置按键颜色
-        buttontake->SetOnClickListener(static_cast<UIView::OnClickListener *>(TakephotosPresenter::GetInstance()));
-
-        // 初始化图片数组以及动画 {修改为统一动画}
-        smileimageInfos = CreateImageInfoArray(smilebasePath.c_str(), 50);
-        InitImageAnimatorSource(smileAnimator, smileimageAnimatorInfo, smileimageInfos, 50, 163, 140, 140, 140, "imageAnimator", 100);
-
-        takeView->Add(smileAnimator);
-        takeView->Add(labeltake_);
-        takeView->Add(labelclick_);
-        takeView->Add(buttontake);
-
-        // RootView::GetInstance()->Add(takeView);
-        container_->Add(takeView);
-
-        takeView->SetDraggable(true);
-        takeView->SetTouchable(true);
-
-        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TakephotosPresenter::GetInstance());
-        if (draglistener == nullptr)
-        {
-            return;
-        }
-        takeView->SetOnDragListener(draglistener);
-
-        takeView->SetVisible(false); // 界面隐藏
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowTakeView end");
-    }
-    /*控制显示界面*/
-    void TakephotosView::SetPopupViewStatus(PopupPhoto view, bool status)
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPopupViewStatus %d", view);
-
-        if (view == PopupPhoto::CreamPopup)
-        {
-            creamView->SetVisible(true);
-            takeView->SetVisible(false);
-
-            creamAnimator->Start();
-            smileAnimator->Stop();
-        }
-        else if (view == PopupPhoto::TakePopup)
-        {
-            takeView->SetVisible(true);
-            creamView->SetVisible(false);
-
-            smileAnimator->Start();
-            creamAnimator->Stop();
-        }
-    }
-
-    void TakephotosView::OnStart()
-    {
-        container_ = new UIScrollView();
-        container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
-        container_->SetOnDragListener(presenter_);
-        container_->SetTouchable(true);
-        container_->SetDraggable(true);
-
-        ShowCreamView();
-        ShowTakeView();
-        PreLoad();
-
-        SetContainerView(container_);
-
-        RootView::GetInstance()->SetOnKeyActListener(presenter_);
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TakephotosView OnStart is ok");
-    }
-
-    UILabel *TakephotosView::GetClileLabel()
-    {
-        return labelclick_;
-    }
-    void TakephotosView::Updatenum(int num)
-    {
-        if (smileAnimator->GetState() == true && labelclick_ != nullptr)
-        {
-            UpdateLabel(labelclick_, num, STR_TACKNUM);
-            labelclick_->Invalidate();
-        }
-    }
-    void TakephotosView::OnSetUpView()
-    {
-        View<TakephotosPresenter>::OnSetUpView();
-        Draw();
-    }
-
-    void TakephotosView::OnTearDownView()
-    {
-        View<TakephotosPresenter>::OnTearDownView();
-        return;
-    }
-
-    void TakephotosView::OnStop()
-    {
-        View<TakephotosPresenter>::OnStop();
-        if (container_ != nullptr)
-        {
-            container_->RemoveAll();
-            delete container_;
-            container_ = nullptr;
-        }
-        RootView::GetInstance()->RemoveAll();
-        return;
-    }
+#include <ui_scroll_view.h>
+namespace OHOS {
+static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;
+
+static TakephotosView *g_pTakephotosView{nullptr};
+
+TakephotosView::TakephotosView() { g_pTakephotosView = this; }
+
+TakephotosView::~TakephotosView() {
+  // DeInit();
+  if (creamimageInfos != nullptr)
+    FreeImageInfoArray(creamimageInfos, creambasePath.c_str(), 50);
+  if (smileimageInfos != nullptr)
+    FreeImageInfoArray(smileimageInfos, smilebasePath.c_str(), 50);
+
+  creamAnimator->Stop();
+  smileAnimator->Stop();
+  ReleaseImageAnimatorSource(smileimageAnimatorInfo, 50);
+  ReleaseImageAnimatorSource(creamimageAnimatorInfo, 50);
+
+  UIViewGroup *tmpGroup = dynamic_cast<UIViewGroup *>(container_);
+  UIViewGroup::RemoveAndDeleteAllRecursively(tmpGroup);
+
+  g_pTakephotosView = nullptr;
+}
+
+TakephotosView *TakephotosView::GetInstance() { return g_pTakephotosView; }
+
+/* InitView:初始化界面*/
+void TakephotosView ::InitView() {
+  if (container_ == nullptr) {
+    container_ = new UIScrollView();
+    container_->SetPosition(0, 0, 466, 466);
+    container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
+  }
+  //设置进入弹窗
+  PopupPhoto staust = TakephotosModel::GetInstance()->GetPopStaust();
+  SetPopupViewStatus(staust, true);
+}
+
+/* DeInit:删除组件 */
+void TakephotosView::DeInit() {
+  creamView->RemoveAll();
+  takeView->RemoveAll();
+
+  delete labeltitle_;
+  labeltitle_ = nullptr;
+
+  delete labelnote_;
+  labelnote_ = nullptr;
+
+  delete labeltake_;
+  labeltake_ = nullptr;
+
+  delete labelclick_;
+  labelclick_ = nullptr;
+
+  delete buttontake;
+  buttontake = nullptr;
+
+  delete buttongo;
+  buttongo = nullptr;
+
+  smileAnimator->Stop();
+  delete smileAnimator;
+  smileAnimator = nullptr;
+
+  creamAnimator->Stop();
+  delete creamAnimator;
+  creamAnimator = nullptr;
+
+  delete creamView;
+  creamView = nullptr;
+
+  delete takeView;
+  takeView = nullptr;
+}
+
+void TakephotosView::PreLoad(void) {
+  if (!viewiInitStatus) {
+    InitView();
+    viewiInitStatus = true;
+  }
+}
+/*显示拍照界面*/
+void TakephotosView::ShowCreamView() {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowcreamView start");
+  creamView = new UIScrollView();
+  if (creamView == nullptr) {
+    return;
+  }
+  creamView->SetPosition(0, 0);
+  creamView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
+  creamView->SetScrollBlankSize(20);
+  creamView->SetReboundSize(50);
+  creamView->SetDirection(1);
+  /*初始化label*/
+  InitLabelExt(labeltitle_, 83, 50, 300, 35, "labletitle", STR_REMOTE_SHOOTING,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+  // 设置标签的位置和大小
+  labelnote_ = new UILabel();
+  labelnote_->SetPosition(53, 250);
+  labelnote_->Resize(360, 200);
+  // 设置标签的视图 ID
+  labelnote_->SetViewId("labelTake");
+  // 设置标签的样式
+  labelnote_->SetStyle(STYLE_TEXT_FONT, 30);
+  labelnote_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+  // 设置标签的文本和其他属性
+  labelnote_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+  labelnote_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+  SetLabelId(labelnote_, STR_TACK);
+
+  /*初始化image*/
+  // InitImageView(imageTake, 174, 120, 118, 120, "image", RECOED_IMAGE);
+  /*初始化按键*/
+  InitButtonExt(buttongo, 0, 366, 466, 100, BUTTONGO, STR_KONW, 30);
+  buttongo->SetImageSrc(PNG_466x100BUTTON_IMAGE, PNG_466x100BUTTON_IMAGE);
+  buttongo->SetOnClickListener(static_cast<UIView::OnClickListener *>(
+      TakephotosPresenter::GetInstance()));
+
+  // 初始化图片数组以及动画
+  creamimageInfos = CreateImageInfoArray(creambasePath.c_str(), 50);
+  InitImageAnimatorSource(creamAnimator, creamimageAnimatorInfo,
+                          creamimageInfos, 50, 163, 103, 140, 140,
+                          "imageAnimator", 100);
+
+  creamView->Add(creamAnimator);
+  creamView->Add(labeltitle_);
+  creamView->Add(labelnote_);
+  creamView->Add(buttongo);
+
+  // RootView::GetInstance()->Add(creamView);
+  container_->Add(creamView);
+
+  creamView->SetDraggable(true);
+  creamView->SetTouchable(true);
+
+  UIView::OnDragListener *draglistener =
+      static_cast<UIView::OnDragListener *>(TakephotosPresenter::GetInstance());
+  if (draglistener == nullptr) {
+    return;
+  }
+  creamView->SetOnDragListener(draglistener);
+
+  creamView->SetVisible(false); // 界面隐藏
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowcreamView end");
+}
+/*遥控拍照界面*/
+void TakephotosView::ShowTakeView() {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowTakeView start");
+  takeView = new UIScrollView();
+  if (takeView == nullptr) {
+    return;
+  }
+  takeView->SetPosition(0, 0);
+  takeView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
+  takeView->SetScrollBlankSize(20);
+  takeView->SetReboundSize(50);
+  takeView->SetDirection(1);
+
+  /*初始化label*/
+  InitLabelExt(labeltake_, 83, 50, 300, 35, "labletitle", STR_REMOTE_SHOOTING,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabelExt(labelclick_, 53, 278, 360, 70, "labelclick_", STR_TACKNUM,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  UpdateLabel(labelclick_, 0, STR_TACKNUM); // 初始化为0
+
+  /*初始化按键*/
+  InitButtonExt(buttontake, 93, 330, 280, 90, BUTTONTAKE, STR_CLICK, 26);
+  buttontake->SetStyle(STYLE_BACKGROUND_COLOR, 0xff4fc34c); // 设置按键颜色
+  buttontake->SetOnClickListener(static_cast<UIView::OnClickListener *>(
+      TakephotosPresenter::GetInstance()));
+
+  // 初始化图片数组以及动画 {修改为统一动画}
+  smileimageInfos = CreateImageInfoArray(smilebasePath.c_str(), 50);
+  InitImageAnimatorSource(smileAnimator, smileimageAnimatorInfo,
+                          smileimageInfos, 50, 163, 140, 140, 140,
+                          "imageAnimator", 100);
+
+  takeView->Add(smileAnimator);
+  takeView->Add(labeltake_);
+  takeView->Add(labelclick_);
+  takeView->Add(buttontake);
+
+  // RootView::GetInstance()->Add(takeView);
+  container_->Add(takeView);
+
+  takeView->SetDraggable(true);
+  takeView->SetTouchable(true);
+
+  UIView::OnDragListener *draglistener =
+      static_cast<UIView::OnDragListener *>(TakephotosPresenter::GetInstance());
+  if (draglistener == nullptr) {
+    return;
+  }
+  takeView->SetOnDragListener(draglistener);
+
+  takeView->SetVisible(false); // 界面隐藏
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowTakeView end");
+}
+/*控制显示界面*/
+void TakephotosView::SetPopupViewStatus(PopupPhoto view, bool status) {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPopupViewStatus %d", view);
+
+  if (view == PopupPhoto::CreamPopup) {
+    creamView->SetVisible(true);
+    takeView->SetVisible(false);
+
+    creamAnimator->Start();
+    smileAnimator->Stop();
+  } else if (view == PopupPhoto::TakePopup) {
+    takeView->SetVisible(true);
+    creamView->SetVisible(false);
+
+    smileAnimator->Start();
+    creamAnimator->Stop();
+  }
+}
+
+void TakephotosView::OnStart() {
+  container_ = new UIScrollView();
+  container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),
+                          Screen::GetInstance().GetHeight());
+  container_->SetOnDragListener(presenter_);
+  container_->SetTouchable(true);
+  container_->SetDraggable(true);
+
+  ShowCreamView();
+  ShowTakeView();
+  PreLoad();
+
+  SetContainerView(container_);
+
+  RootView::GetInstance()->SetOnKeyActListener(presenter_);
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TakephotosView OnStart is ok");
+}
+
+UILabel *TakephotosView::GetClileLabel() { return labelclick_; }
+void TakephotosView::Updatenum(int num) {
+  if (smileAnimator->GetState() == true && labelclick_ != nullptr) {
+    UpdateLabel(labelclick_, num, STR_TACKNUM);
+    labelclick_->Invalidate();
+  }
+}
+void TakephotosView::OnSetUpView() {
+  View<TakephotosPresenter>::OnSetUpView();
+  Draw();
+}
+
+void TakephotosView::OnTearDownView() {
+  View<TakephotosPresenter>::OnTearDownView();
+  return;
+}
+
+void TakephotosView::OnStop() {
+  View<TakephotosPresenter>::OnStop();
+  if (container_ != nullptr) {
+    container_->RemoveAll();
+    delete container_;
+    container_ = nullptr;
+  }
+  RootView::GetInstance()->RemoveAll();
+  return;
 }
+} // namespace OHOS