${CMAKE_CURRENT_SOURCE_DIR}/nativeui/respiratorytraining/src/RespiratoryTrainingCompletedView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp
+ #呼吸训练
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/themestyle/src/ThemeStyleModel.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/themestyle/src/ThemeStylePresenter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/themestyle/src/ThemeStyleView.cpp
+
#声音与震动
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationPresenter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationView.cpp
VIEW_INDOORWALK, // 室内步行
VIEW_SHUTDOWN_OR_REBOOT, // 关机或重启界面
VIEW_WEATHER, // 天气
- VIEW_GOAL, //每日目标
+ VIEW_GOAL, // 每日目标
VIEW_SYSTEM, // 系统
VIEW_SOUND_VIBRATION, // 声音与震动
VIEW_SYSTEM_VOLUME, // 系统音量
VIEW_NETWORKANDCALL, // 网络与通话
VIEW_MOTION_RECOGNITION, // 运动识别
VIEW_SYSTEM_UPDATE, // 系统更新
- VIEW_WATCH_QR_CODE, //手表二维码
- VIEW_RESPIRATORY_TRAINING, //呼吸训练
-
+ VIEW_WATCH_QR_CODE, // 手表二维码
+ VIEW_RESPIRATORY_TRAINING, // 呼吸训练
+ VIEW_THEME_STYLE, // 主题样式
+
/* ----------------------------------- 录音 ----------------------------------- */
VIEW_RECORD,
/* ---------------------------------- 界面 ---------------------------------- */
void InitSystemUpdateSlice(void);
void InitWatchQRCodeSlice(void);
void InitRespiratoryTrainingSlice(void);
+ void InitThemeStyleSlice(void);
/* --------------------------------界面------------------------------------ */
void InitRotateSlice(void);
void InitBloodSlice(void);
#include "respiratorytraining/include/RespiratoryTrainingPresenter.h"
#include "respiratorytraining/include/RespiratoryTrainingView.h"
+
+#include "themestyle/include/ThemeStyleView.h"
+#include "themestyle/include/ThemeStylePresenter.h"
/* -------------------------------------------------------------------------- */
#include "traing/include/TraingView.h"
#include "traing/include/TraingPresenter.h"
{VIEW_SYSTEM_UPDATE, &NativeLauncher::InitSystemUpdateSlice}, // 系统更新界面
{VIEW_WATCH_QR_CODE, &NativeLauncher::InitWatchQRCodeSlice}, // 手表二维码界面
{VIEW_RESPIRATORY_TRAINING, &NativeLauncher::InitRespiratoryTrainingSlice}, // 呼吸训练界面
+ {VIEW_THEME_STYLE, &NativeLauncher::InitThemeStyleSlice}, // 主题样式界面
// {VIEW_SECONDARY_FUNCTION, &NativeLauncher::InitSecondaryFunction},
// {VIEW_FAST_TRAINING, &NativeLauncher::InitFastTrainingSlice},
}
NativeAbility::GetInstance().AddSliceProxy(VIEW_RESPIRATORY_TRAINING, respiratorytraining);
}
+
+ /*主题样式*/
+ void NativeLauncher::InitThemeStyleSlice(void)
+ {
+ SliceProxy *ThemeStyle = new AbilitySliceProxy<ThemeStyleView, ThemeStylePresenter>;
+ if (ThemeStyle == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThemeStyle");
+ return;
+ }
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_THEME_STYLE, ThemeStyle);
+ }
/* -------------------------------------------------------------------------- */
void NativeLauncher::InitSetDesktopSlice(void)
{
{VIEW_MAIN_STOPWATCH, PNG_APPLIST_STOPWATCH_IMAGE, PNG_APPLIST_STOPWATCH_IMAGE, "秒表", STR_STOPWATCH, nullptr},
{VIEW_MAIN_COUNTDOWN, PNG_APPLIST_COUNTDOWN_IMAGE, PNG_APPLIST_COUNTDOWN_IMAGE, "计时器", STR_TIMER, nullptr},
{VIEW_FIND_PHONE, PNG_APPLIST_FINDPHONE_IMAGE, PNG_APPLIST_FINDPHONE_IMAGE, "查找手机", STR_FIND_PHONE, nullptr},
- {VIEW_SET_DESKTOP, PNG_APPLIST_THEME_IMAGE, PNG_APPLIST_THEME_IMAGE, "显示方式", STR_DISPLAY_MODE, nullptr},
+ {VIEW_THEME_STYLE, PNG_APPLIST_THEME_IMAGE, PNG_APPLIST_THEME_IMAGE, "显示方式", STR_DISPLAY_MODE, nullptr},
{VIEW_SET_CARD, PNG_APPLIST_CARDSET_IMAGE, PNG_APPLIST_CARDSET_IMAGE, "卡片管理", STR_CARD_MANAGEMENT, nullptr},
{VIEW_SET_DIAL, PNG_APPLIST_CHANGEDIAL_IMAGE, PNG_APPLIST_CHANGEDIAL_IMAGE, "更换表盘", STR_WATCH_FACE, nullptr},
{VIEW_CLASSIC_BLUETOOTH, PNG_APPLIST_BLUETOOTH_IMAGE, PNG_APPLIST_BLUETOOTH_IMAGE, "蓝牙", STR_BLUETOOTH, nullptr},
if (mcu_pms_is_screen_on())
{
PressAlarmNotify();
- NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN, TransitionType::TRANSITION_ZOOM);
+ //NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN, TransitionType::TRANSITION_ZOOM);
}
}
else // 如果当前页面是主表盘,如果屏幕亮起,则先处理闹钟通知再切换到用户配置的快捷卡片
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-03-28 11:50:42
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-13 19:52:52
+ * @LastEditTime: 2024-06-14 18:42:57
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/rebootdevice/src/RebootModel.cpp
*/
if (display_api->get_screen_state() == SCREEN_ON)
{
// 切换到主题样式界面
- NativeAbility::GetInstance().EnterSlice(VIEW_SET_DESKTOP);
+ NativeAbility::GetInstance().EnterSlice(VIEW_THEME_STYLE);
//NativeAbility::GetInstance().ChangeSlice(VIEW_SET_DESKTOP);
}
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-02-18 09:09:13
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-04-25 09:12:06
+ * @LastEditTime: 2024-06-14 18:43:36
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/settings/src/SettingModel.cpp
*/
#include "SettingModel.h"
settings[index++] = {VIEW_NETWORKANDCALL, PNG_SETTINGS_NETWORKANDCALL, STR_NETWORKANDCALL, true};
settings[index++] = {VIEW_CLASSIC_BLUETOOTH, PNG_SETTINGS_BLUETOOTH, STR_BLUETOOTH, true};
settings[index++] = {VIEW_SOUND_VIBRATION, PNG_SETTINGS_SOUND_VIBRATION, STR_SOUND_AND_VIBRATION, true};
- settings[index++] = {VIEW_SET_DESKTOP, PNG_SETTINGS_DISPLAY_MODE, STR_DISPLAY_MODE, true};
+ settings[index++] = {VIEW_THEME_STYLE, PNG_SETTINGS_DISPLAY_MODE, STR_DISPLAY_MODE, true};
settings[index++] = {VIEW_MOTION_RECOGNITION, PNG_SETTINGS_MOTION_RECOGNITION, STR_MOTION_RECOGNITION, true};
settings[index++] = {VIEW_SYSTEM, PNG_SETTINGS_SYSTEM, STR_SYSTEM, true};
settings[index++] = {VIEW_SHUTDOWN_OR_REBOOT, PNG_SETTINGS_SHUTDOWN_AND_RESTART, STR_SHUTDOWN_AND_RESTART, true};
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-14 09:40:13
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-14 18:28:15
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleModel.h
+ */
+#ifndef SET_THEMESTYLE_MODEL_H
+#define SET_THEMESTYLE_MODEL_H
+
+#include <cstdint>
+#include <map>
+#include <iostream>
+#include <unordered_map>
+#include "AppViewIDs.h"
+#include "UiConfig.h"
+
+namespace OHOS
+{
+ static constexpr const char *THEMESTYLE_KEY = "applist_style";
+ static constexpr const char *THEMESTYLE_VALUE_LIST = "list";
+ static constexpr const char *THEMESTYLE_VALUE_HEXAGONS = "hexagons";
+
+ typedef enum : uint16_t
+ {
+ APPLIST_STYLE, // 列表显示
+ HEXAGONS_STYLE, // 蜂窝显示
+ MAX_THEME_STYLE,
+ } ThemeStyle;
+
+ // 映射[枚举值]->[显示样式值}的关系
+ const std::map<ThemeStyle, std::string> ThemeStyleMap = {
+ {ThemeStyle::APPLIST_STYLE, THEMESTYLE_VALUE_LIST},
+ {ThemeStyle::HEXAGONS_STYLE, THEMESTYLE_VALUE_HEXAGONS},
+ // 在此处添加更多的映射关系
+ };
+
+ // 映射[显示样式值]->[枚举值]的关系
+ const std::unordered_map<std::string, ThemeStyle> ReverseThemeStyleMap = {
+ {THEMESTYLE_VALUE_LIST, ThemeStyle::APPLIST_STYLE},
+ {THEMESTYLE_VALUE_HEXAGONS, ThemeStyle::HEXAGONS_STYLE},
+ // 在此处添加更多的映射关系
+ };
+
+ class ThemeStyleModel
+ {
+ public:
+ static ThemeStyleModel &GetInstance(void);
+ ThemeStyle GetAppListDisplayStyle(void);
+ void SetAppListDisplayStyle(ThemeStyle style);
+ uint16_t GetSelectThemeStyleId(void);
+ void SetSelectThemeStyleId(uint16_t Id);
+
+ private:
+ ThemeStyleModel();
+ virtual ~ThemeStyleModel();
+ ThemeStyleModel(const ThemeStyleModel &) = delete;
+ ThemeStyleModel &operator=(const ThemeStyleModel &) = delete;
+ uint16_t ThemeStyleId;
+ };
+}
+
+#endif // SET_DESKTOP_MODEL_H
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-14 09:40:13
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-14 18:12:38
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStylePresenter.h
+ */
+
+#ifndef SET_THEMESTYLE_PRESENTER_H
+#define SET_THEMESTYLE_PRESENTER_H
+
+#include "View.h"
+#include "Presenter.h"
+#include "components/ui_view.h"
+namespace OHOS
+{
+ class ThemeStyleView;
+ class ThemeStyleModel;
+ class ThemeStylePresenter : public Presenter<ThemeStyleView>,
+ public UIView::OnClickListener,
+ public RootView::OnKeyActListener,
+ public UIView::OnDragListener
+ {
+ public:
+ ThemeStylePresenter();
+ ~ThemeStylePresenter() override;
+ static ThemeStylePresenter *GetInstance();
+
+ bool GetListStyleState(void);
+ bool GetHexagonsStyleState(void);
+
+ void OnStart() override;
+ void OnPause() override;
+ void OnResume() override;
+ void OnStop() override;
+
+ private:
+ bool OnClick(UIView &view, const ClickEvent &event) override;
+ bool OnDrag(UIView &view, const DragEvent &event) override;
+ bool OnDragEnd(UIView &view, const DragEvent &event) override;
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+
+ bool X_DRAG_FLAG{false};
+ };
+}
+
+#endif // SET_THEMESTYLE_PRESENTER_H
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-14 09:40:13
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-14 18:38:50
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/include/ThemeStyleView.h
+ */
+
+#ifndef SET_THEMESTYLE_VIEW_H
+#define SET_THEMESTYLE_VIEW_H
+
+#include "View.h"
+#include "components/ui_view_group.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_image_view.h"
+#include "components/ui_toggle_button.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+#include "window/window.h"
+#include "BaseView.h"
+#include "ChangeSliceListener.h"
+#include "UiConfig.h"
+#include "themestyle/include/ThemeStyleModel.h"
+
+namespace OHOS
+{
+ static constexpr const uint16_t MAX_STYLE = MAX_THEME_STYLE;
+ static constexpr char *THEME_STYLE_LIST = "themestyleList"; // 列表
+ static constexpr char *THEME_STYLE_HEXAGONS = "themestyleHexagons"; // 蜂窝
+ static constexpr char *THEMESTYLEVIEWEXIT = "ThemeStyleViewExit"; // exit
+
+ static constexpr char *THEMESTYLE_LIST_IMAGEPATH = "/user/res/themestyle/list.bin";
+ static constexpr char *THEMESTYLE_HEXAGONS_IMAGEPATH = "/user/res/themestyle/hexagons.bin";
+
+ class ThemeStylePresenter;
+ class ThemeStyleView : public View<ThemeStylePresenter>
+ {
+ public:
+ struct LabelButtonConfig
+ {
+ int16_t left;
+ int16_t top;
+ int16_t width;
+ int16_t height;
+ int16_t fontSize;
+ int16_t lineHeigh;
+ const char *viewId;
+ int16_t textId;
+ };
+
+ struct ImageConfig
+ {
+ int16_t x;
+ int16_t y;
+ int16_t w;
+ int16_t h;
+ const char *src;
+ };
+
+ ThemeStyleView();
+ ~ThemeStyleView() override;
+ static ThemeStyleView *GetInstance();
+ void UpdateSelectedStyle();
+
+ void OnStart() override;
+ void OnSetUpView() override;
+ void OnTearDownView() override;
+ void OnStop() override;
+
+ private:
+ bool CreateThemeStyleScrollView(void);
+ bool CreateThemeStyleLabelView(void);
+ bool CreateThemeStyleLabelButtonView(void);
+ bool CreateThemeStyleImageView(void);
+ UILabelButtonExt *ThemeStyleLabelButtonViewInit(LabelButtonConfig &labelbuttonconfig);
+ UIImageView *ThemeStyleImageViewInit(ImageConfig &imageconfig);
+ void ThemeStyleViewInit(void);
+ void ClearAll(void);
+ UIScrollView *scrollView{nullptr};
+ UILabelExt *titleText;
+ UILabelButtonExt *ThemeStyleLabelButton[MAX_STYLE]{nullptr};
+ UIImageView *ThemeStyleImage[MAX_STYLE]{nullptr};
+ UILabelButtonExt *ExitLabelButton{nullptr};
+ };
+}
+#endif // SET_THEMESTYLE_VIEW_H
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-07 09:21:47
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-14 19:14:47
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/set_desktop/src/ThemeStyleModel.cpp
+ */
+
+#include "themestyle/include/ThemeStyleModel.h"
+#include "kv_store.h"
+#include "securec.h"
+#include "wearable_log.h"
+namespace OHOS
+{
+ static const int STYLE_VALUE_LEN = 32;
+ ThemeStyleModel::ThemeStyleModel() {}
+ ThemeStyleModel::~ThemeStyleModel() {}
+
+ ThemeStyleModel &ThemeStyleModel::GetInstance()
+ {
+ static ThemeStyleModel instance;
+ return instance;
+ }
+
+ /// @brief 获取applist的显示样式
+ /// @param void
+ /// @return 主题样式
+ ThemeStyle ThemeStyleModel::GetAppListDisplayStyle()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleModel::GetAppListDisplayStyle");
+
+ char temp[STYLE_VALUE_LEN] = {0};
+ (void)UtilsGetValue(THEMESTYLE_KEY, temp, STYLE_VALUE_LEN); // 从文件系统或缓存中获取与指定键匹配的值。
+
+ // 检查是否存在对应的样式选项
+ auto it = ReverseThemeStyleMap.find(std::string(temp));
+ if (it != ReverseThemeStyleMap.end())
+ {
+ return it->second;
+ }
+ else
+ {
+ // 默认返回列表显示
+ return ThemeStyle::APPLIST_STYLE;
+ }
+ }
+
+ /// @brief 设置applist的显示样式
+ /// @param style 要设置的风格样式
+ void ThemeStyleModel::SetAppListDisplayStyle(ThemeStyle style)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleModel::SetAppListDisplayStyle");
+
+ // 检查是否存在对应的样式选项
+ if (ThemeStyleMap.find(style) != ThemeStyleMap.end())
+ {
+ // 根据映射设置显示样式值
+ (void)UtilsSetValue(THEMESTYLE_KEY, ThemeStyleMap.at(style).c_str());
+ SetSelectThemeStyleId(style);
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetAppListDisplayStyle fail!!");
+ }
+ }
+
+ //获取选中的样式Id
+ uint16_t ThemeStyleModel::GetSelectThemeStyleId(void)
+ {
+ return ThemeStyleId;
+ }
+
+ //设置选中的样式Id
+ void ThemeStyleModel::SetSelectThemeStyleId(uint16_t Id)
+ {
+ ThemeStyleId = Id;
+ }
+
+}
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-04-08 16:43:48
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-14 19:14:53
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/set_desktop/src/ThemeStylePresenter.cpp
+ */
+
+#include "themestyle/include/ThemeStyleView.h"
+#include "themestyle/include/ThemeStyleModel.h"
+#include "themestyle/include/ThemeStylePresenter.h"
+#include "common/key_code.h"
+#include <custom_utils.h>
+
+namespace OHOS
+{
+
+ static ThemeStylePresenter *g_pThemeStylePresenter = nullptr;
+
+ ThemeStylePresenter::ThemeStylePresenter()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStylePresenter::ThemeStylePresenter");
+ g_pThemeStylePresenter = this;
+ }
+
+ ThemeStylePresenter::~ThemeStylePresenter()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStylePresenter::~ThemeStylePresenter");
+ g_pThemeStylePresenter = nullptr;
+ }
+
+ ThemeStylePresenter *ThemeStylePresenter::GetInstance()
+ {
+ return g_pThemeStylePresenter;
+ }
+
+ void ThemeStylePresenter::OnStart()
+ {
+ Presenter<ThemeStyleView>::OnStart();
+ }
+
+ void ThemeStylePresenter::OnPause()
+ {
+ Presenter<ThemeStyleView>::OnPause();
+ }
+
+ void ThemeStylePresenter::OnResume(void)
+ {
+ Presenter<ThemeStyleView>::OnResume();
+ }
+
+ void ThemeStylePresenter::OnStop(void)
+ {
+ Presenter<ThemeStyleView>::OnStop();
+ }
+
+ bool ThemeStylePresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ UNUSED(event);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStylePresenter::OnClick");
+ UILabelButtonExt *LabelButtonExt = dynamic_cast<UILabelButtonExt *>(&view);
+ std::string viewId = LabelButtonExt->GetViewId();
+ if (viewId == THEMESTYLEVIEWEXIT)
+ {
+ NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ return true;
+ }
+ /* -------------------------------------------------------------------------- */
+ if (viewId == THEME_STYLE_LIST)
+ {
+ ThemeStyleModel::GetInstance().SetAppListDisplayStyle(ThemeStyle::APPLIST_STYLE);
+ }
+ else if (viewId == THEME_STYLE_HEXAGONS)
+ {
+ ThemeStyleModel::GetInstance().SetAppListDisplayStyle(ThemeStyle::HEXAGONS_STYLE);
+ }
+ LabelButtonExt->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE);
+ LabelButtonExt->Invalidate();
+ uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+ if (preSlice == VIEW_APPLIST)
+ {
+ NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ }
+ else
+ {
+ NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+ NativeAbility::GetInstance().ClearSliceIdStack();
+ }
+
+ return true;
+ }
+
+ bool ThemeStylePresenter::OnDrag(UIView &view, const DragEvent &event)
+ {
+ UNUSED(view);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnDrag");
+ if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动
+ {
+ ThemeStylePresenter::X_DRAG_FLAG = true;
+ }
+ return true;
+ }
+
+ bool ThemeStylePresenter::OnDragEnd(UIView &view, const DragEvent &event)
+ {
+ UNUSED(view);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnDragEnd");
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && ThemeStylePresenter::X_DRAG_FLAG)
+ {
+ NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ ThemeStylePresenter::X_DRAG_FLAG = false;
+ }
+ return true;
+ }
+
+ bool ThemeStylePresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStylePresenter::OnKeyAct");
+ uint16 keyID = event.GetKeyId();
+ uint16 keyState = event.GetState();
+ // 如果是power键就返回上一级
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
+ {
+ NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ }
+ return true;
+ }
+
+ // 获取当前主题是否是蜂窝
+ bool ThemeStylePresenter::GetHexagonsStyleState(void)
+ {
+ return (ThemeStyleModel::GetInstance().GetAppListDisplayStyle() == ThemeStyle::HEXAGONS_STYLE);
+ }
+
+ // 获取当前主题是否是列表
+ bool ThemeStylePresenter::GetListStyleState(void)
+ {
+ return (ThemeStyleModel::GetInstance().GetAppListDisplayStyle() == ThemeStyle::APPLIST_STYLE);
+ }
+
+}
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-14 09:40:20
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-14 18:41:37
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/themestyle/src/ThemeStyleView.cpp
+ */
+
+#include <string>
+#include "themestyle/include/ThemeStyleView.h"
+#include "themestyle/include/ThemeStylePresenter.h"
+#include "language/font/ui_resource_string.h"
+
+namespace OHOS
+{
+ static ThemeStyleView *g_pThemeStyleView{nullptr};
+ static constexpr uint16 SCROLLBLANKSIZE = 75;
+ static constexpr uint16 REBOUNDSIZE = 35;
+ ThemeStyleView::ThemeStyleView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::ThemeStyleView");
+ g_pThemeStyleView = this;
+ }
+
+ ThemeStyleView::~ThemeStyleView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::~ThemeStyleView");
+ g_pThemeStyleView = nullptr;
+ }
+
+ ThemeStyleView *ThemeStyleView::GetInstance()
+ {
+ return g_pThemeStyleView;
+ }
+
+ void ThemeStyleView::ClearAll(void)
+ {
+ if (scrollView != nullptr)
+ {
+ scrollView->RemoveAll();
+
+ delete titleText;
+ titleText = nullptr;
+
+ for (int i = 0; i < MAX_STYLE; i++)
+ {
+ delete ThemeStyleLabelButton[i];
+ ThemeStyleLabelButton[i] = nullptr;
+
+ delete ThemeStyleImage[i];
+ ThemeStyleImage[i] = nullptr;
+ }
+
+ delete ExitLabelButton;
+ ExitLabelButton = nullptr;
+
+ delete scrollView;
+ scrollView = nullptr;
+ }
+ }
+
+ // 设置按键监听
+ static void SetKeyActListener()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");
+ RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::ThemeStylePresenter::GetInstance();
+ RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+ }
+
+ UILabelButtonExt *ThemeStyleView::ThemeStyleLabelButtonViewInit(LabelButtonConfig &labelbuttonconfig)
+ {
+ UILabelButtonExt *labelButton = new UILabelButtonExt();
+ if (labelButton == nullptr)
+ {
+ return nullptr;
+ }
+ labelButton->SetPosition(labelbuttonconfig.left, labelbuttonconfig.top);
+ labelButton->Resize(labelbuttonconfig.width, labelbuttonconfig.height);
+ labelButton->SetViewId(labelbuttonconfig.viewId);
+ labelButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+ labelButton->SetImagePosition(300, 30);
+ labelButton->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);
+ labelButton->SetTextId(labelbuttonconfig.textId);
+ labelButton->SetAlign(TEXT_ALIGNMENT_LEFT);
+ labelButton->SetLabelPosition(100, 0);
+ labelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelbuttonconfig.fontSize);
+ labelButton->SetStyle(STYLE_LINE_HEIGHT, labelbuttonconfig.lineHeigh);
+ labelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);
+ labelButton->SetStyleForState(STYLE_BORDER_COLOR, 0xffffffff, UIButton::PRESSED);
+ labelButton->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED);
+ labelButton->SetOnClickListener(presenter_);
+
+ return labelButton;
+ }
+
+ UIImageView *ThemeStyleView::ThemeStyleImageViewInit(ImageConfig &imageconfig)
+ {
+ UIImageView *Image = new UIImageView();
+ if (Image == nullptr)
+ {
+ return nullptr;
+ }
+ Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h);
+ Image->SetSrc(imageconfig.src);
+ return Image;
+ }
+
+ bool ThemeStyleView::CreateThemeStyleScrollView(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::InitThemeStyleScrollView");
+ scrollView = new UIScrollView();
+ if (scrollView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail!");
+ return false;
+ }
+ scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+ scrollView->SetScrollBlankSize(SCROLLBLANKSIZE);
+ scrollView->SetReboundSize(REBOUNDSIZE);
+ scrollView->SetHorizontalScrollState(false);
+ scrollView->SetTouchable(true);
+ scrollView->SetDraggable(true);
+ container_->Add(scrollView);
+
+ return true;
+ }
+
+ bool ThemeStyleView::CreateThemeStyleLabelView(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::InitThemeStyleLabelView");
+ titleText = new UILabelExt();
+ if (titleText == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleText new fail!");
+ return false;
+ }
+ titleText->SetPosition(83, 52, 300, 35);
+ titleText->SetTextId(STR_DISPLAY_MODE); // 显示方式
+ titleText->SetStyle(STYLE_TEXT_FONT, 30);
+ titleText->SetStyle(STYLE_LINE_HEIGHT, 35);
+ titleText->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+ titleText->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ titleText->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ scrollView->Add(titleText);
+
+ return true;
+ }
+
+ bool ThemeStyleView::CreateThemeStyleLabelButtonView(void)
+ {
+ LabelButtonConfig labelbuttonconfig = {
+ .left = 43,
+ .top = 120,
+ .width = 380,
+ .height = 100,
+ .fontSize = 30,
+ .lineHeigh = 35,
+ .viewId = THEME_STYLE_LIST,
+ .textId = STR_LIST_DISPLAY,
+ };
+
+ int top = 120;
+ const char *viewId[MAX_STYLE] = {THEME_STYLE_LIST, THEME_STYLE_HEXAGONS};
+ uint16_t textId[MAX_STYLE] = {STR_LIST_DISPLAY, STR_CELLULAR_DISPLAY};
+ for (int i = 0; i < MAX_STYLE; i++)
+ {
+ labelbuttonconfig.top = top + 120 * i;
+ labelbuttonconfig.viewId = viewId[i];
+ labelbuttonconfig.textId = textId[i];
+ ThemeStyleLabelButton[i] = ThemeStyleLabelButtonViewInit(labelbuttonconfig);
+ if (ThemeStyleLabelButton[i] == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThemeStyleLabelButton[%d] is nullptr", i);
+ return false;
+ }
+ scrollView->Add(ThemeStyleLabelButton[i]);
+ }
+ /* -------------------------------------------------------------------------- */
+ ExitLabelButton = new UILabelButtonExt();
+ if (ExitLabelButton == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ExitLabelButton is nullptr");
+ return false;
+ }
+ ExitLabelButton->SetPosition(labelbuttonconfig.left, labelbuttonconfig.top + 120);
+ ExitLabelButton->Resize(labelbuttonconfig.width, labelbuttonconfig.height);
+ ExitLabelButton->SetViewId(THEMESTYLEVIEWEXIT);
+ ExitLabelButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+ ExitLabelButton->SetTextId(STR_CLOSE);
+ ExitLabelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ ExitLabelButton->SetStyle(STYLE_LINE_HEIGHT, labelbuttonconfig.lineHeigh);
+ ExitLabelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);
+ ExitLabelButton->SetStyleForState(STYLE_BORDER_COLOR, 0xffffffff, UIButton::PRESSED);
+ ExitLabelButton->SetStyleForState(STYLE_BORDER_OPA, 0x00, UIButton::PRESSED);
+ ExitLabelButton->SetOnClickListener(presenter_);
+ scrollView->Add(ExitLabelButton);
+
+ return true;
+ }
+
+ bool ThemeStyleView::CreateThemeStyleImageView(void)
+ {
+ ImageConfig imageconfig = {
+ .x = 83,
+ .y = 150,
+ .w = 40,
+ .h = 40,
+ .src = THEMESTYLE_LIST_IMAGEPATH,
+ };
+ int y = 150;
+ const char *src[MAX_STYLE] = {THEMESTYLE_LIST_IMAGEPATH, THEMESTYLE_HEXAGONS_IMAGEPATH};
+ for (int i = 0; i < MAX_STYLE; i++)
+ {
+ imageconfig.y = y + 120 * i;
+ imageconfig.src = src[i];
+ ThemeStyleImage[i] = ThemeStyleImageViewInit(imageconfig);
+ if (ThemeStyleImage[i] == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThemeStyleImage[%d] is nullptr", i);
+ return false;
+ }
+ scrollView->Add(ThemeStyleImage[i]);
+ }
+
+ return true;
+ }
+
+ void ThemeStyleView::ThemeStyleViewInit(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::ThemeStyleViewInit");
+ if (!CreateThemeStyleScrollView() || !CreateThemeStyleLabelView() ||
+ !CreateThemeStyleLabelButtonView() || !CreateThemeStyleImageView())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::ThemeStyleViewInit fail!!");
+ return;
+ }
+ UpdateSelectedStyle();
+ }
+
+ void ThemeStyleView::OnStart()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnStart");
+ View<ThemeStylePresenter>::OnStart();
+ SetContainerView(new UIViewGroup());
+ container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+ container_->SetOnDragListener(presenter_);
+ container_->SetTouchable(true);
+ container_->SetDraggable(true);
+
+ ThemeStyleViewInit();
+ SetKeyActListener();
+ }
+
+ void ThemeStyleView::OnSetUpView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnSetUpView");
+ View<ThemeStylePresenter>::OnSetUpView();
+ Draw();
+ }
+
+ void ThemeStyleView::OnTearDownView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnTearDownView");
+ View<ThemeStylePresenter>::OnTearDownView();
+ }
+
+ void ThemeStyleView::OnStop()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::OnStop");
+ View<ThemeStylePresenter>::OnStop();
+ RootView::GetInstance()->ClearOnKeyActListener();
+ if (container_ != nullptr)
+ {
+ container_->RemoveAll();
+ delete container_;
+ container_ = nullptr;
+ }
+ ClearAll();
+ }
+
+ //更新按钮的选中状态
+ void ThemeStyleView::UpdateSelectedStyle(void)
+ {
+ for (int i = 0; i < MAX_STYLE; i++)
+ {
+ if (i == ThemeStyleModel::GetInstance().GetSelectThemeStyleId())
+ {
+ ThemeStyleLabelButton[i]->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE);
+ }
+ else
+ {
+ ThemeStyleLabelButton[i]->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);
+ }
+ ThemeStyleLabelButton[i]->Invalidate();
+ }
+ }
+}
return false; // 返回false表示无前一个slice,退回到默认slice
}
}
+
+ void ClearSliceIdStack(void)
+ {
+ while(!backStack_.empty())
+ {
+ backStack_.pop();
+ }
+ }
+
protected:
Ability() = default;
virtual ~Ability() = default;
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:5807bc7196ad96d976c0b3d21846c365e5682646e5ee7f1b97905216f6a01b04
+size 1144
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:67f69deef89552e906c10a65a4444040ac7f6179db8bd9fba85c34cf77efc147
+size 1144
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:9455c97c5c82fdf90230323c804897098a4b98f4e7db20e078b314e8e9726135
+size 1144