From: Caisking Date: Sat, 13 Sep 2025 09:51:09 +0000 (+0800) Subject: 增加下载星历UI X-Git-Tag: leiniao_debug_1.0.0_20250922_020716~88^2~5 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=14116d7041ac5d9dd7c5fd71e811ce5bdb6d7ba9;p=mirrors%2FFD230.git 增加下载星历UI --- diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/AppViewIDs.h b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/AppViewIDs.h index 3082cb721..24edf3aa2 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/AppViewIDs.h +++ b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/AppViewIDs.h @@ -87,6 +87,7 @@ typedef enum : uint16_t VIEW_SAVEELE, // 省电模式 VIEW_SAVEBAT, // 省电模式界面 VIEW_TAKEPHOTOS, // 拍照界面 + VIEW_EPHEMERIS_DOWNLOAD, // 下载星历 VIEW_SLEEP, // 睡眠界面 VIEW_SET_CARD, // 卡片管理 VIEW_ADD_CARD, // 添加卡片 diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/ui_resource_string.h b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/ui_resource_string.h index f29fee73e..51aba65f9 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/ui_resource_string.h +++ b/code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/ui_resource_string.h @@ -1,15 +1,15 @@ -/* -* Copyright (c) xxxxxxxx Technologies Co., Ltd. 2021-2021. All rights reserved. -* Description: language -* Author: Graphic develop team -* Create: 2021-07-06 -*/ - -#ifndef UI_RESOURCE_STRING_H -#define UI_RESOURCE_STRING_H -#include -namespace OHOS { -enum UIResourceTextId : uint16_t { +/* +* Copyright (c) xxxxxxxx Technologies Co., Ltd. 2021-2021. All rights reserved. +* Description: language +* Author: Graphic develop team +* Create: 2021-07-06 +*/ + +#ifndef UI_RESOURCE_STRING_H +#define UI_RESOURCE_STRING_H +#include +namespace OHOS { +enum UIResourceTextId : uint16_t { STR_EXERCISE_OUTDOORWALKING = 0, STR_EXERCISE_OUTDOORRUNNING = 1, STR_EXERCISE_OUTDOORBIKING = 2, @@ -733,10 +733,11 @@ enum UIResourceTextId : uint16_t { STR_REGISTER_TIME = 720, STR_CHECKIN_GPS = 721, STR_WORKSYNC = 722, - STR_MAX_ID = 723, + STR_EPHEMERIS_DOWNLOAD = 723, + STR_MAX_ID = 724, }; // UIResourceTextId - -enum FontLanguageId : uint8_t { + +enum FontLanguageId : uint8_t { LANGUAGE_ID_AR, LANGUAGE_ID_AZ, LANGUAGE_ID_CS, diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadModel.h new file mode 100644 index 000000000..319d643b9 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadModel.h @@ -0,0 +1,35 @@ +#ifndef EPHEMERIS_DOWNLOAD_MODEL_H +#define EPHEMERIS_DOWNLOAD_MODEL_H + + +#include +#include + +namespace OHOS +{ + class EphemerisDownloadModel + { + public: + static EphemerisDownloadModel &GetInstance() { + static EphemerisDownloadModel model; + return model; + } + EphemerisDownloadModel(); + ~EphemerisDownloadModel(); + // 下载星历相关方法 + void DownloadEphemeris(); + bool GetEphemerisDownloadStatus(); + std::string GetEphemerisValidityPeriod(); + void SetEphemerisDownloadStatus(bool status); + void SetEphemerisValidityPeriod(const std::string &period); + + private: + + // 星历相关状态 + bool ephemerisDownloading{false}; + bool ephemerisDownloaded{false}; + std::string ephemerisValidityPeriod; + }; + +} // OHOS +#endif diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadPresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadPresenter.h new file mode 100644 index 000000000..3aa651386 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadPresenter.h @@ -0,0 +1,31 @@ +#ifndef EPHEMERIS_DOWNLOAD_PRESENTER_H +#define EPHEMERIS_DOWNLOAD_PRESENTER_H + +#include "components/ui_view.h" +#include "key/include/KeyInputListener.h" +#include "Presenter.h" +#include "ephemeris_download/include/EphemerisDownloadModel.h" +#include "ephemeris_download/include/EphemerisDownloadView.h" + +namespace OHOS +{ + class EphemerisDownloadModel; + class EphemerisDownloadView; + class EphemerisDownloadPresenter : public Presenter, + public UIView::OnClickListener, + public RootView::OnKeyActListener, + public UIView::OnDragListener + { + public: + EphemerisDownloadPresenter(); + ~EphemerisDownloadPresenter(); + EphemerisDownloadPresenter(const EphemerisDownloadPresenter &) = delete; + EphemerisDownloadPresenter &operator=(const EphemerisDownloadPresenter &) = delete; + void OnResume() override; + bool OnClick(UIView &view, const ClickEvent &event) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; + }; + +} // OHOS +#endif diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadView.h new file mode 100644 index 000000000..16cfb1cc8 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/include/EphemerisDownloadView.h @@ -0,0 +1,38 @@ +#ifndef EPHEMERIS_DOWNLOAD_VIEW_H +#define EPHEMERIS_DOWNLOAD_VIEW_H + +#include "components/ui_button.h" +#include "components/ui_label.h" +#include "components/ui_view.h" +#include "components/ui_view_group.h" +#include "View.h" +#include "components/ui_image_view.h" +#include "components/ui_label_ext.h" +#include "components/ui_label_button_ext.h" +#include "ephemeris_download/include/EphemerisDownloadModel.h" + +namespace OHOS { +class EphemerisDownloadPresenter; +class EphemerisDownloadView : public View { +public: + EphemerisDownloadView(); + ~EphemerisDownloadView() override; + EphemerisDownloadView(const EphemerisDownloadView &) = delete; + EphemerisDownloadView &operator=(const EphemerisDownloadView &) = delete; + + void OnStart() override; + bool EphemerisDownloadInit(); + void OnClick(UIView &view); + +private: + UILabelExt labelTitle_; + UILabelExt labelStatus_; + UILabelExt labelValidity_; + UILabelButtonExt btnDownload_; + UILabelButtonExt btnBack_; + UIImageView statusImage_; + UILabelExt labelNote_; +}; + +} // OHOS +#endif diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadModel.cpp new file mode 100644 index 000000000..5d74ffc33 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadModel.cpp @@ -0,0 +1,60 @@ +#include "ephemeris_download/include/EphemerisDownloadModel.h" + +#include "custom_runtime.h" +#include "custom_utils.h" + +#include "wearable_log.h" + +namespace OHOS { + +EphemerisDownloadModel::EphemerisDownloadModel() {} + +EphemerisDownloadModel::~EphemerisDownloadModel() {} + + + +void EphemerisDownloadModel::DownloadEphemeris() { + if (ephemerisDownloading) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "星历正在下载中,请勿重复操作"); + return; + } + + ephemerisDownloading = true; + ephemerisDownloaded = false; + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "开始下载星历..."); + + // 模拟下载过程(假接口) + // 在实际实现中,这里应该调用真正的下载接口 + + // 模拟下载完成 + ephemerisDownloading = false; + ephemerisDownloaded = true; + + // 设置有效期(模拟7天有效期) + time_t now = time(0); + time_t validUntil = now + (7 * 24 * 60 * 60); // 7天后 + char buffer[32]; + strftime(buffer, sizeof(buffer), "%Y-%m-%d", localtime(&validUntil)); + ephemerisValidityPeriod = std::string(buffer); + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "星历下载完成,有效期至: %s", ephemerisValidityPeriod.c_str()); +} + +bool EphemerisDownloadModel::GetEphemerisDownloadStatus() { + return ephemerisDownloaded; +} + +std::string EphemerisDownloadModel::GetEphemerisValidityPeriod() { + return ephemerisValidityPeriod; +} + +void EphemerisDownloadModel::SetEphemerisDownloadStatus(bool status) { + ephemerisDownloaded = status; +} + +void EphemerisDownloadModel::SetEphemerisValidityPeriod(const std::string &period) { + ephemerisValidityPeriod = period; +} + +} // namespace OHOS diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadPresenter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadPresenter.cpp new file mode 100644 index 000000000..5705c3301 --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadPresenter.cpp @@ -0,0 +1,58 @@ +#include "ephemeris_download/include/EphemerisDownloadPresenter.h" +#include "ephemeris_download/include/EphemerisDownloadModel.h" +#include "ephemeris_download/include/EphemerisDownloadView.h" + +#include "key/include/KeyInputListener.h" +#include "common/key_code.h" +#include "custom_utils.h" + +#include "AppViewIDs.h" +#include "NativeAbility.h" + +#include "NativeRegisterManager.h" + +namespace OHOS { +REGIST_SLICE(VIEW_EPHEMERIS_DOWNLOAD, EphemerisDownloadView, EphemerisDownloadPresenter); + +EphemerisDownloadPresenter::EphemerisDownloadPresenter() { + Attach(&EphemerisDownloadModel::GetInstance()); +} + +EphemerisDownloadPresenter::~EphemerisDownloadPresenter() { + +} + +void EphemerisDownloadPresenter::OnResume() { + RootView::GetInstance()->SetOnKeyActListener(this); +} + +bool EphemerisDownloadPresenter::OnClick(UIView &view, const ClickEvent &event) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "EphemerisDownloadPresenter::OnClick"); + view_->OnClick(view); + return true; +} + +bool EphemerisDownloadPresenter::OnDrag(UIView &view, const DragEvent &event) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "EphemerisDownloadPresenter::OnDrag"); + UNUSED(view); + if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && + (event.GetDeltaX() > X_DRAG_OFFSET) && + (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) { + NativeAbility::GetInstance().Back(); + } + return true; +} + +bool EphemerisDownloadPresenter::OnKeyAct(UIView &view, const KeyEvent &event) { + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && + keyState == 1 && uapi_get_screen_state() == 0) { + // 回退 + NativeAbility::GetInstance().Back(); + } + return true; +} + +} // namespace OHOS diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadView.cpp new file mode 100644 index 000000000..bedef180c --- /dev/null +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/ephemeris_download/src/EphemerisDownloadView.cpp @@ -0,0 +1,104 @@ +#include "ephemeris_download/include/EphemerisDownloadView.h" +#include "ephemeris_download/include/EphemerisDownloadModel.h" +#include "ephemeris_download/include/EphemerisDownloadPresenter.h" + +#include "UiConfig.h" +#include "ui_resource_string.h" +#include "components/ui_scroll_view.h" +#include "wearable_log.h" + +namespace OHOS { + +EphemerisDownloadView::EphemerisDownloadView() {} + +EphemerisDownloadView::~EphemerisDownloadView() {} + +void EphemerisDownloadView::OnStart() { + if (!EphemerisDownloadInit()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "EphemerisDownloadView::EphemerisDownloadInit fail"); + } + + GetRootContainer()->SetDraggable(true); + GetRootContainer()->SetPosition(0, 0, 466, 466); + GetRootContainer()->SetOnDragListener(presenter_); + + GetRootContainer()->SetTouchable(true); +} + +bool EphemerisDownloadView::EphemerisDownloadInit() { + // 初始化标题 + labelTitle_.SetPosition(83, 50, 300, 60); + labelTitle_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + labelTitle_.SetText("下载星历"); + labelTitle_.SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); + labelTitle_.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + AddViewToRootContainer(&labelTitle_); + + // 初始化状态标签 + labelStatus_.SetPosition(90, 120, 200, 40); + labelStatus_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 24); + labelStatus_.SetText("未下载"); + labelStatus_.SetTextColor(Color::Yellow()); + AddViewToRootContainer(&labelStatus_); + + // 初始化有效期标签 + labelValidity_.SetPosition(90, 170, 300, 40); + labelValidity_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20); + labelValidity_.SetText("有效期: 无"); + labelValidity_.SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); + AddViewToRootContainer(&labelValidity_); + + // 初始化下载按钮 + btnDownload_.SetPosition(50, 250, 300, 60); + btnDownload_.SetText("下载"); + btnDownload_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 24); + btnDownload_.SetOnClickListener(presenter_); + AddViewToRootContainer(&btnDownload_); + + // 初始化返回按钮 + btnBack_.SetPosition(50, 350, 300, 60); + btnBack_.SetText("返回"); + btnBack_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 24); + btnBack_.SetOnClickListener(presenter_); + AddViewToRootContainer(&btnBack_); + + // 初始化说明标签 + labelNote_.SetPosition(53, 420, 360, 40); + labelNote_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 18); + labelNote_.SetText("星历数据用于提高GPS定位精度"); + labelNote_.SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x5f)); + AddViewToRootContainer(&labelNote_); + + return true; +} + +void EphemerisDownloadView::OnClick(UIView &view) { + const UILabelButtonExt *ptr = dynamic_cast(&view); + if (ptr == nullptr) { + return; + } + + if (ptr->GetViewId() == "downloadButton") { + EphemerisDownloadModel::GetInstance().DownloadEphemeris(); + // 更新状态 + bool isDownloaded = EphemerisDownloadModel::GetInstance().GetEphemerisDownloadStatus(); + if (isDownloaded) { + labelStatus_.SetText("已下载"); + labelStatus_.SetTextColor(Color::Green()); + } else { + labelStatus_.SetText("未下载"); + labelStatus_.SetTextColor(Color::Yellow()); + } + + // 更新有效期 + std::string validity = EphemerisDownloadModel::GetInstance().GetEphemerisValidityPeriod(); + if (validity.empty()) { + labelValidity_.SetText("有效期: 无"); + } else { + std::string text = "有效期: " + validity; + labelValidity_.SetText(text.c_str()); + } + } +} + +} // namespace OHOS diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/include/SettingModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/include/SettingModel.h index c8a4cd819..f5030e4bf 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/include/SettingModel.h +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/include/SettingModel.h @@ -11,6 +11,7 @@ #include #include +#include #include "AppViewIDs.h" #include "components/ui_label_ext.h" #include "UiConfig.h" diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/src/SettingItemView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/src/SettingItemView.cpp index b3a3a316e..1639678f6 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/src/SettingItemView.cpp +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/src/SettingItemView.cpp @@ -60,11 +60,14 @@ namespace OHOS Icon.SetSrc(itemInfo.icon); settingLabelExt.SetVisible(true); settingLabelExt.SetPosition(SETTINGLABELEXT_X, SETTINGLABELEXT_Y, SETTINGLABELEXT_W, SETTINGLABELEXT_H); - if(itemInfo.textId != STR_SCREEN_OFF_DISPLAY){ - settingLabelExt.SetTextId(itemInfo.textId); + if(itemInfo.textId == STR_SCREEN_OFF_DISPLAY){ + settingLabelExt.SetText("息屏表盘"); + } + else if(itemInfo.textId == STR_EPHEMERIS_DOWNLOAD){ + settingLabelExt.SetText("星历下载"); } else{ - settingLabelExt.SetText("息屏表盘"); + settingLabelExt.SetTextId(itemInfo.textId); } settingLabelExt.SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER); settingLabelButtonExt.SetVisible(true); @@ -86,11 +89,17 @@ namespace OHOS SetHeight(120); } settingLabelExt.SetPosition(SETTINGLABELEXT_X2, SETTINGLABELEXT_Y2, SETTINGLABELEXT_W2, SETTINGLABELEXT_H2); - if(itemInfo.textId != STR_SCREEN_OFF_DISPLAY){ + if(itemInfo.textId == STR_SCREEN_OFF_DISPLAY){ + settingLabelExt.SetText("息屏表盘"); + } + else if(itemInfo.textId == STR_EPHEMERIS_DOWNLOAD){ + settingLabelExt.SetText("星历下载"); + } + else{ settingLabelExt.SetTextId(itemInfo.textId); } else{ - settingLabelExt.SetText("息屏表盘"); + settingLabelExt.SetTextId(itemInfo.textId); } settingLabelExt.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); settingLabelButtonExt.SetVisible(false); diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/src/SettingModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/src/SettingModel.cpp index e6d9cc013..c661010e2 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/src/SettingModel.cpp +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/settings/src/SettingModel.cpp @@ -14,6 +14,8 @@ #include "phoneservice/include/PhoneService.h" #include "bluetooth/include/BluetoothModel.h" #include "player/include/MusicPlayerSourceView.h" +#include +#include extern "C" { #include "custom_runtime.h" @@ -45,6 +47,7 @@ namespace OHOS settings[index++] = {VIEW_ADD_CARD, PNG_SETTINGS_CARDSET_IMAGE, STR_CARD_MANAGEMENT, true}; settings[index++] = {VIEW_SET_DIAL_STYLE, PNG_SETTINGS_CHANGEDIAL_IMAGE, STR_DIAL_BROWSING_SPECIAL_EFFECTS, true}; settings[index++] = {VIEW_SAVEELE, PNG_SETTINGS_SAVEELE_IMAGE, STR_POWER_SAVE_MODE, true}; + settings[index++] = {VIEW_EPHEMERIS_DOWNLOAD, PNG_SETTINGS_NETWORKANDCALL, STR_EPHEMERIS_DOWNLOAD, true}; settings[index++] = {VIEW_SYSTEM, PNG_SETTINGS_SYSTEM, STR_SYSTEM, true}; settings[index++] = {VIEW_INVALID, nullptr, STR_MAX_ID, false}; usedLen = index;