--- /dev/null
+#ifndef FIND_PHONE_VIEW_H
+#define FIND_PHONE_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include "components/ui_view_group.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_label_button_ext.h"
+namespace OHOS
+{
+ static constexpr int FINDPHONE_IMAGE_ANIMATOR_VIEW_X = 173;
+ static constexpr int FINDPHONE_IMAGE_ANIMATOR_VIEW_Y = 140;
+ static constexpr int FINDPHONE_IMAGE_ANIMATOR_VIEW_W = 120;
+ static constexpr int FINDPHONE_IMAGE_ANIMATOR_VIEW_H = 120;
+ static constexpr int FINDPHONE_IMAGE_ANIMATOR_VIEW_TIMEOFUPDATE = 100;
+ static constexpr int FINDPHONE_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 50; // 图片帧数
+
+ class FindPhonePresenter;
+ class FindPhoneView : public View<FindPhonePresenter>
+ {
+ public:
+ FindPhoneView();
+ virtual ~FindPhoneView();
+ static FindPhoneView *GetInstance(void);
+
+ void OnStart() override;
+ void OnSetUpView() override;
+ void OnTearDownView() override;
+ void OnStop() override;
+
+ private:
+ void FindPhoneViewInit(void);
+ void ClearAll();
+ const char **CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages);
+ void FreeImagePathsArray(const char **imagePaths, const int numImages);
+ UIViewGroup *FindPhoneGroupView = nullptr;
+ UILabelExt *FindPhoneTitleLabel = nullptr;
+ UILabelExt *FindPhoneLabel = nullptr;
+ UIImageAnimatorView *FindPhoneImageAnimator = nullptr;
+ UILabelButtonExt *FindPhoneLabelButton = nullptr;
+ const char **FindPhonePathsArray{nullptr};
+ ImageAnimatorInfo FindPhoneImageInfo[FINDPHONE_IMAGE_ANIMATOR_VIEW_NUM_FRAMES];
+ bool viewInitStatus{false};
+ };
+} // namespace OHOS
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-27 10:47:40
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-27 14:44:52
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/findphone/src/FindPhonePresenter.cpp
+ */
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "findphone/include/FindPhonePresenter.h"
+#include "common/key_code.h"
+#include <custom_utils.h>
+namespace OHOS
+{
+ // 当前Presenter属性实例化的内存指针
+ static FindPhonePresenter *g_pFindPhonePresenter = nullptr;
+
+ FindPhonePresenter::FindPhonePresenter()
+ {
+ g_pFindPhonePresenter = this;
+ }
+
+ FindPhonePresenter::~FindPhonePresenter()
+ {
+ g_pFindPhonePresenter = nullptr;
+ }
+
+ FindPhonePresenter *FindPhonePresenter::GetInstance()
+ {
+ return g_pFindPhonePresenter;
+ }
+
+ void FindPhonePresenter::OnStart()
+ {
+ Presenter<FindPhoneView>::OnStart();
+ }
+
+ void FindPhonePresenter::OnPause(void)
+ {
+ Presenter<FindPhoneView>::OnPause();
+ }
+
+ void FindPhonePresenter::OnResume(void)
+ {
+ Presenter<FindPhoneView>::OnResume();
+ }
+
+ void FindPhonePresenter::OnStop(void)
+ {
+ Presenter<FindPhoneView>::OnStop();
+ }
+
+ bool FindPhonePresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ UNUSED(event);
+ if (strcmp(view.GetViewId(), FINDPHONE_LABELBUTTON) == 0)
+ {
+ //发送指令停止震动
+ uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+ NativeAbility::GetInstance().ChangeSlice(preSlice);
+ }
+ return true;
+ }
+
+ bool FindPhonePresenter::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件
+ {
+ UNUSED(view);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FindPhonePresenter::OnKeyAct");
+ unsigned short keyID = event.GetKeyId();
+ unsigned short keyState = event.GetState();
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
+ {
+ //发送指令停止震动
+ uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+ NativeAbility::GetInstance().ChangeSlice(preSlice);
+ }
+ return true;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-03-27 10:47:46
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-03-27 14:34:02
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/findphone/src/FindPhoneView.cpp
+ */
+#include "findphone/include/FindPhoneView.h"
+#include "findphone/include/FindPhonePresenter.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+
+ static FindPhoneView *g_pFindPhoneView{nullptr};
+
+ FindPhoneView::FindPhoneView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FindPhoneView::FindPhoneView");
+ g_pFindPhoneView = this;
+ }
+
+ FindPhoneView::~FindPhoneView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FindPhoneView::~FindPhoneView");
+ ClearAll();
+ g_pFindPhoneView = nullptr;
+ }
+
+ FindPhoneView *FindPhoneView::GetInstance()
+ {
+ return g_pFindPhoneView;
+ }
+
+ void FindPhoneView::ClearAll()
+ {
+ if (viewInitStatus == true)
+ {
+ FindPhoneGroupView->RemoveAll();
+
+ delete FindPhoneTitleLabel;
+ FindPhoneTitleLabel = nullptr;
+
+ FindPhoneImageAnimator->Stop();
+ delete FindPhoneImageAnimator;
+ FindPhoneImageAnimator = nullptr;
+ FreeImagePathsArray(FindPhonePathsArray, FINDPHONE_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
+
+ delete FindPhoneLabel;
+ FindPhoneLabel = nullptr;
+
+ delete FindPhoneLabelButton;
+ FindPhoneLabelButton = nullptr;
+
+ delete FindPhoneGroupView;
+ FindPhoneGroupView = nullptr;
+ }
+ }
+
+ const char **FindPhoneView::CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages)
+ {
+ const char **imagePaths = new const char *[numImages];
+ char buffer[256];
+ for (int i = 0; i < numImages; i++)
+ {
+ snprintf(buffer, sizeof(buffer), "%s%d.%s", basePath, i + 1, fileExtension);
+ imagePaths[i] = strdup(buffer);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " imagePaths[%d] = %s", i, imagePaths[i]);
+ }
+ return imagePaths;
+ }
+
+ /*
+ * @brief: 释放图片路径数组指针
+ * @param {char} imagePaths 图片路径数组
+ * @param {int} numImages 图片数量
+ */
+ void FindPhoneView::FreeImagePathsArray(const char **imagePaths, const int numImages)
+ {
+ for (int i = 0; i < numImages; i++)
+ {
+ delete imagePaths[i];
+ imagePaths[i] = nullptr;
+ }
+ }
+
+ void FindPhoneView::FindPhoneViewInit(void)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FindPhoneView::FindPhoneViewInit");
+ if (FindPhoneGroupView == nullptr)
+ {
+ /* --------------------------- FindPhoneGroupView --------------------------- */
+ FindPhoneGroupView = new UIViewGroup();
+ if (FindPhoneGroupView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[FindPhoneViewInit] FindPhoneGroupView new fail!!");
+ return;
+ }
+ FindPhoneGroupView->SetPosition(0, 0, 466, 466);
+ FindPhoneGroupView->SetStyle(STYLE_BACKGROUND_OPA, 0);
+ /* --------------------------- FindPhoneTitleLabel -------------------------- */
+ FindPhoneTitleLabel = new UILabelExt();
+ if (FindPhoneTitleLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[FindPhoneViewInit] FindPhoneTitleLabel new fail!!");
+ return;
+ }
+ FindPhoneTitleLabel->SetPosition(133, 51, 200, 40);
+ FindPhoneTitleLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ FindPhoneTitleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ FindPhoneTitleLabel->SetText("查找手机");
+ FindPhoneTitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+ FindPhoneTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ FindPhoneTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* ----------------------- FindPhoneImageAnimator ---------------------- */
+ FindPhonePathsArray = CreateImagePathsArray("/user/res/findphone/", "bin", FINDPHONE_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
+ if (FindPhoneImageAnimator == nullptr)
+ {
+ FindPhoneImageAnimator = new UIImageAnimatorView();
+ if (FindPhoneImageAnimator == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateDeviceUnBindingView] FindPhoneImageAnimator new fail");
+ return;
+ }
+ for (uint8_t i = 0; i < FINDPHONE_IMAGE_ANIMATOR_VIEW_NUM_FRAMES; i++)
+ {
+ FindPhoneImageInfo[i].imagePath = (FindPhonePathsArray[i]);
+ FindPhoneImageInfo[i].imageType = IMG_SRC_FILE_PATH;
+ FindPhoneImageInfo[i].pos.x = FINDPHONE_IMAGE_ANIMATOR_VIEW_X;
+ FindPhoneImageInfo[i].pos.y = FINDPHONE_IMAGE_ANIMATOR_VIEW_Y;
+ FindPhoneImageInfo[i].width = FINDPHONE_IMAGE_ANIMATOR_VIEW_W;
+ FindPhoneImageInfo[i].height = FINDPHONE_IMAGE_ANIMATOR_VIEW_H;
+ }
+ FindPhoneImageAnimator->SetPosition(FINDPHONE_IMAGE_ANIMATOR_VIEW_X, FINDPHONE_IMAGE_ANIMATOR_VIEW_Y, FINDPHONE_IMAGE_ANIMATOR_VIEW_W, FINDPHONE_IMAGE_ANIMATOR_VIEW_H);
+ FindPhoneImageAnimator->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ FindPhoneImageAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+ FindPhoneImageAnimator->SetImageAnimatorSrc(FindPhoneImageInfo, FINDPHONE_IMAGE_ANIMATOR_VIEW_NUM_FRAMES, FINDPHONE_IMAGE_ANIMATOR_VIEW_TIMEOFUPDATE);
+ FindPhoneImageAnimator->SetRepeat(true);
+ FindPhoneImageAnimator->Start();
+ }
+ /* ----------------------------- FindPhoneLabel ----------------------------- */
+ FindPhoneLabel = new UILabelExt();
+ if (FindPhoneLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateDeviceUnBindingView] FindPhoneLabel new fail");
+ return;
+ }
+ FindPhoneLabel->SetPosition(33, 270, 400, 40);
+ FindPhoneLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ FindPhoneLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ FindPhoneLabel->SetText("手机正在响铃/震动");
+ FindPhoneLabel->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+ FindPhoneLabel->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+ FindPhoneLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ FindPhoneLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* -------------------------- FindPhoneLabelButton -------------------------- */
+ FindPhoneLabelButton = new UILabelButtonExt();
+ if (FindPhoneLabelButton == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateDeviceUnBindingView] FindPhoneLabelButton new fail");
+ return;
+ }
+ FindPhoneLabelButton->SetPosition(0, 366, 466, 100);
+ FindPhoneLabelButton->SetViewId(FINDPHONE_LABELBUTTON);
+ const char *ImgSrc = "/user/res/466x100button.bin";
+ FindPhoneLabelButton->SetImageSrc(ImgSrc, ImgSrc);
+ FindPhoneLabelButton->SetText("停止");
+ FindPhoneLabelButton->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));
+ FindPhoneLabelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ FindPhoneLabelButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+ UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(FindPhonePresenter::GetInstance());
+ FindPhoneLabelButton->SetOnClickListener(clickListener);
+ /* ----------------------------------- Add ---------------------------------- */
+ FindPhoneGroupView->Add(FindPhoneTitleLabel);
+ FindPhoneGroupView->Add(FindPhoneImageAnimator);
+ FindPhoneGroupView->Add(FindPhoneLabel);
+ FindPhoneGroupView->Add(FindPhoneLabelButton);
+ }
+ viewInitStatus = true;
+ }
+
+ void FindPhoneView::OnStart()
+ {
+ View<FindPhonePresenter>::OnStart();
+ FindPhoneViewInit();
+
+ // 增加按键监听
+ RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::FindPhonePresenter::GetInstance();
+ RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+ }
+
+ void FindPhoneView::OnSetUpView()
+ {
+ View<FindPhonePresenter>::OnSetUpView();
+ RootView::GetInstance()->Add(FindPhoneGroupView);
+ Draw();
+ }
+
+ void FindPhoneView::OnTearDownView()
+ {
+ View<FindPhonePresenter>::OnTearDownView();
+ return;
+ }
+
+ void FindPhoneView::OnStop()
+ {
+ View<FindPhonePresenter>::OnStop();
+ RootView::GetInstance()->RemoveAll();
+ RootView::GetInstance()->ClearOnKeyActListener();
+ return;
+ }
+}
\ No newline at end of file