+/***
+ * @Date: 2024-08-12 10:11:33
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-08-20 14:05:51
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbModel.cpp
+ */
+/***
+ * @Date: 2024-08-12 10:11:33
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-08-20 12:09:12
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/dnotdisturb/src/DnotDisturbModel.cpp
+ */
#include "dnotdisturb/include/DnotDisturbModel.h"
#include "main/include/PullUpDownView.h"
#include "main/include/MainViewSample.h"
+#include "MainModel.h"
#include "ConfigModel.h"
namespace OHOS
{
void DnotDisturbModel::SetDoNotDisturbModeEnabled(bool enabled)
{
- // isDoNotDisturbModeEnabled = enabled;
ConfigModel::GetInstance()->SetDnotdisturb(enabled);
+ /*更新主界面配置*/
+ MainModel::GetInstance().setDialState(DialState::DO_NOT_DISTURB, enabled);
}
bool DnotDisturbModel::GetDoNotDisturbModeEnabled() const
{
- // return isDoNotDisturbModeEnabled;
return ConfigModel::GetInstance()->GetDnotdisturb();
}
/*更新主界面下拉界面配置*/
PullUpDownView::GetInstance()->UpdateDnotDisturbStatus(GetDoNotDisturbModeEnabled());
/*更新主界面配置*/
- MainViewSample::GetInstance()->DisturbIcon()->SetVisible(GetDoNotDisturbModeEnabled());
+ MainModel::GetInstance().setDialState(DialState::DO_NOT_DISTURB, GetDoNotDisturbModeEnabled());
+ MainViewSample::GetInstance()->UpdateStateShow();
}
return;
}
-\r
+/***\r
+ * @Date: 2024-06-21 09:56:18\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-08-20 10:44:15\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainModel.h\r
+ */\r
\r
#ifndef MAIN_MODEL_H\r
#define MAIN_MODEL_H\r
std::string dialFullName;\r
} DialSetting;\r
\r
+ /*表盘状态*/\r
+ enum class DialState\r
+ {\r
+ DO_NOT_DISTURB, // 勿扰\r
+ SLEEP, // 睡眠\r
+ LOCK, // 锁\r
+ INVALID // 无效状态\r
+ };\r
+ const int STATE_COUNT = 3; // 确保这里的数量与 DialState 状态数相同\r
+\r
+ struct DialStateInfo\r
+ {\r
+ DialState state;\r
+ bool active; // 是否激活\r
+ };\r
class MainModel\r
{\r
public:\r
const char *getCardNameFromMap(uint8_t cardId) const;\r
const bool GetCardInfoSet(uint8_t index) const;\r
\r
+ void setDialState(DialState state, bool value);\r
+ DialState getHighestPriorityActiveState();\r
+ bool getMessageActiveState();\r
+ void printDialStates();\r
+\r
private:\r
void InitDialSettingDefault(int Id);\r
MainModel();\r
PullUpDownView *GetPullUpView();
void SetDisturbState(bool state); /*控制勿扰状态图标*/
// UICrossView::VPage GetVerCurrentCard() const;
-
UIView *GetMainViewGroup(void) const
{
return mainSwipeGroup;
}
-
UICardPage *GetViewById(int16_t id) const
{
return recordCard[id];
}
- /*获取勿扰图标image*/
- UIImageView *DisturbIcon() const
- {
- return disturbanceicon_;
- }
void SwitchToClockPage(void)
{
if (mainClockView != nullptr)
void SetDragFg(bool continFg);
bool GetDragFg(void);
void SetPage(int16_t page);
+ void UpdateStateShow();
private:
PullUpDownView *dropDownView{nullptr};
goalControlView *GoalControlView{nullptr};
// ApplistCardView *applistCardView{nullptr};
UIButton *changebut{nullptr};
- UIImageView *disturbanceicon_{nullptr}; // 勿扰图标
+
+ UIImageView *dialstateicon_{nullptr}; // 勿扰图标
UIImageView *messageicon_{nullptr}; // 未读图标
/* -------------------------------------------------------------------------- */
UICardPage *recordCard[MAX_CARD]{nullptr};
#include "kv_store.h"\r
#include "securec.h"\r
#include "wearable_log.h"\r
-\r
+#include "ConfigModel.h"\r
+#include <array>\r
+#include <stdexcept>\r
namespace OHOS\r
{\r
static const int CARD_SETTING_VALUE_LEN = 32;\r
{MUSIC_PLAYER, PNG_SET_CARD_PLAYER, false},\r
};\r
/*维护卡片*/\r
- CardInfoSet cardInfoSet[] =\r
- {\r
- {HEART_RATE, true},\r
- {TRAINING, false},\r
- {COMPASS, true},\r
- {SLEEP, false},\r
- {BLOODOXGEN, false},\r
- {GOAL, false},\r
- {WEATHER, false},\r
- {MUSIC_PLAYER, true},\r
+ CardInfoSet cardInfoSet[] = {\r
+ {HEART_RATE, true},\r
+ {TRAINING, false},\r
+ {COMPASS, true},\r
+ {SLEEP, false},\r
+ {BLOODOXGEN, false},\r
+ {GOAL, false},\r
+ {WEATHER, false},\r
+ {MUSIC_PLAYER, true},\r
};\r
/*自定义map配置*/\r
const DialInfo dialInfoMap[] = {\r
\r
#endif\r
};\r
-\r
const CardInfo printfMap[] = {\r
{HEART_RATE, "心率卡片"},\r
{COMPASS, "指南针"},\r
{GOAL, "每日目标"},\r
{SLEEP, "睡眠"},\r
};\r
+ /*表盘显示状态map*/\r
+ std::array<DialStateInfo, STATE_COUNT> dialstateInfo = {{\r
+ {DialState::DO_NOT_DISTURB, false},\r
+ {DialState::SLEEP, false},\r
+ {DialState::LOCK, false},\r
+ }};\r
MainModel::MainModel() {}\r
-\r
MainModel::~MainModel() {}\r
-\r
MainModel &MainModel::GetInstance()\r
{\r
static MainModel instance;\r
{\r
return dialSetting;\r
}\r
+\r
+ /*\r
+ ###表盘状态###\r
+\r
+ 接口 1 设置某个项的属性为ture or false\r
+ 接口 2 获取最高优先级为ture的状态为哪一个 并且返回\r
+ 接口 3 打印状态\r
+\r
+ 管理状态:勿扰 睡眠 密码锁\r
+ */\r
+\r
+ // 接口 1: 设置某个状态的属性\r
+ void MainModel::setDialState(DialState state, bool value)\r
+ {\r
+ // 将 state 转换为整数以进行比较\r
+ int stateIndex = static_cast<int>(state);\r
+ if (stateIndex >= 0 && stateIndex < STATE_COUNT)\r
+ { // 确保 index 在有效范围\r
+ dialstateInfo[stateIndex].active = value; // 使用转换后的索引\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Set dialstateInfo[%d].active = %d", stateIndex, value);\r
+ }\r
+ else\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state %d is error", stateIndex);\r
+ }\r
+ }\r
+\r
+ // 接口 2: 获取最高优先级为 true 的状态\r
+ DialState MainModel::getHighestPriorityActiveState()\r
+ {\r
+ for (int i = STATE_COUNT - 1; i >= 0; i--)\r
+ {\r
+ if (dialstateInfo[i].active)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "high dialstateInfo[%d].active", i);\r
+ return dialstateInfo[i].state; // 返回活跃状态中优先级最高的\r
+ }\r
+ }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "no have high dialstateInfo.active");\r
+ return DialState::INVALID; // 如果没有找到活跃状态,返回无效状态\r
+ }\r
+\r
+ // 接口 3: 打印所有状态及其是否激活\r
+ void MainModel::printDialStates()\r
+ {\r
+ for (int i = 0; i < STATE_COUNT; ++i)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dialstateInfo[%d].active = %d", i, dialstateInfo[i].active);\r
+ }\r
+ }\r
+\r
+ // 未读状态判断\r
+ bool MainModel::getMessageActiveState()\r
+ {\r
+ bool unread_state = ConfigModel::GetInstance()->get_configData_bool(ConfigModel::CONFIGMODEL_ITEM_MESSAGE_UNREAD);\r
+ return unread_state;\r
+ }\r
+\r
}\r
#if 0\r
void MainModel::DeleteCardSetting(uint8_t index)\r
#include "dnotdisturb/include/DnotDisturbModel.h"
#include "weather/include/WeatherModel.h"
#include "heart_blood/health_service/health_service.h"
+#include "MainModel.h"
#if USE_OFFLINE_DIAL
#include "DialViewGroup.h"
{
PullUpDownView::GetInstance()->UpdateDnotDisturbStatus(false);
DnotDisturbModel::GetInstance().SetDoNotDisturbModeEnabled(false);
- /*更新表盘勿扰图标显示*/
- MainViewSample::GetInstance()->DisturbIcon()->SetVisible(false);
+ /*更新主界面配置*/
+ MainModel::GetInstance().setDialState(DialState::DO_NOT_DISTURB,false);
+ MainViewSample::GetInstance()->UpdateStateShow();
return true;
}
-
if (g_jumpView.count(curViewId) != 0)
{
NativeAbility::GetInstance().EnterSlice(g_jumpView[curViewId]);
extern DialInfo_1 dialInfo_1[MAX_DIALNUM_1];
namespace OHOS
{
- static constexpr const char *DISTURBICON = "user/res/users/dial_status/disturbicon.bin";
- static constexpr const char *MESSAGEICON = "user/res/users/dial_status/unread.bin";
+ static constexpr const char *DISTURBICON = "user/res/dial_state/disturbicon.bin";
+ static constexpr const char *MESSAGEICON = "user/res/dial_state/unread.bin";
+ static constexpr const char *SLEEPICON = "user/res/dial_state/sleep.bin";
+ static constexpr const char *LOCKICON = "user/res/dial_state/lock.bin";
static MainViewSample *g_pMainView = nullptr;
static constexpr uint16_t MESLABLE_X_TMP = 177;
delete MessageLable;
MessageLable = nullptr;
}
- if (disturbanceicon_ != nullptr)
+ if (dialstateicon_ != nullptr)
{
- mainClockView->Remove(disturbanceicon_);
- delete disturbanceicon_;
- disturbanceicon_ = nullptr;
+ mainClockView->Remove(dialstateicon_);
+ delete dialstateicon_;
+ dialstateicon_ = nullptr;
}
if (messageicon_ != nullptr)
{
{
return g_pMainView;
}
-
+ void MainViewSample::UpdateStateShow()
+ {
+ if (messageicon_ == nullptr || dialstateicon_ == nullptr)
+ return;
+ /*配置未读状态*/
+ messageicon_->SetVisible(MainModel::GetInstance().getMessageActiveState());
+ /*配置表盘状态*/
+ dialstateicon_->SetVisible(true);
+ switch (MainModel::GetInstance().getHighestPriorityActiveState())
+ {
+ case DialState::DO_NOT_DISTURB:
+ dialstateicon_->SetSrc(DISTURBICON);
+ break;
+ case DialState::SLEEP:
+ dialstateicon_->SetSrc(SLEEPICON);
+ break;
+ case DialState::LOCK:
+ dialstateicon_->SetSrc(LOCKICON);
+ break;
+ default:
+ dialstateicon_->SetVisible(false);
+ break;
+ }
+ }
void MainViewSample::OnStart()
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::OnStart");
SwitchToClockPage();
}
#if DIALSTATE
+
/*增加勿扰图标*/
- InitImageView(disturbanceicon_, 213, 0, 40, 40, "disturbIcon", DISTURBICON);
+ InitImageView(dialstateicon_, 213, 0, 40, 40, "disturbicon", DISTURBICON);
+ // dialstateicon_->SetVisible(false);
+
/*增加未读图标*/
InitImageView(messageicon_, 223, 446, 40, 40, "messageicon_", MESSAGEICON);
- /*获取勿扰状态*/
- bool disturb_state = ConfigModel::GetInstance()->get_configData_bool(ConfigModel::CONFIGMODEL_ITEM_DNOTDISTURB);
- disturbanceicon_->SetVisible(disturb_state);
- /*获取未读状态*/
- bool unread_state = ConfigModel::GetInstance()->get_configData_bool(ConfigModel::CONFIGMODEL_ITEM_MESSAGE_UNREAD);
- messageicon_->SetVisible(unread_state);
-
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[disturb_state:%d unread_state:%d]\r\n", disturb_state, unread_state);
+ UpdateStateShow();
- mainClockView->Add(disturbanceicon_);
+ mainClockView->Add(dialstateicon_);
mainClockView->Add(messageicon_);
#endif
SetContainerView(mainSwipeGroup);
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:2025b6ac45f5e90be559b61e6c1c2e646fd51b272c9022de680ea44721f95aa3
+size 920
--- /dev/null
+version https://git-lfs.github.com/spec/v1
+oid sha256:64e2f2f67dcd02842ae67cc94022adc8c26ee8f253054c2450bc799e29298a5f
+size 1144
--- /dev/null
+[ZoneTransfer]\r
+ZoneId=3\r
+HostUrl=about:internet\r
--- /dev/null
+[ZoneTransfer]\r
+ZoneId=3\r
+HostUrl=about:internet\r