#ifndef GRAPHIC_LITE_DIAL_BIN_PARSER_V3_H
#define GRAPHIC_LITE_DIAL_BIN_PARSER_V3_H
#include "DialBinParserManager.h"
-#include "DialTimePublisher.h"
+#include "DialModelTime.h"
#include "components/ui_abstract_progress.h"
#include "DialViewContainer.h"
-#include "DialOHDataType.h"
+#include "DialDataType.h"
#include "DialOHSliceId.h"
namespace OHOS {
bool (DialBinParserV3::*funcArray_[DIAL_BIN_PARSER_FUNC_NUM])(ContainerInterface&);
void AddToParentWithView(ContainerInterface &parent, uint8_t displayMode, UIView *view);
void AddToParentWithDialView(ContainerInterface &parent, uint8_t displayMode,
- DialView *view, DialOHDataType bindData, bool isPeriodic);
+ DialView *view, DialDataType bindData, bool isPeriodic);
struct {
uint8_t *viewType;
uint8_t dialViewCount;
FILE *file;
uint8_t curIndex;
} curViewType_;
- bool ParseTimeIntervals(FILE* fp, uint8_t cnt, DialTimePublisher::TimeChangeListener *listener);
+ bool ParseTimeIntervals(FILE* fp, uint8_t cnt, TimeChangeListener *listener);
bool ParseViewType(uint8_t *viewType, uint8_t dialViewCount, FILE *file);
bool ParseContainerSubviews(DialViewContainer *container, uint8_t num);
bool ParseOptionsSubviews(ContainerInterface &parent);
DialViewGroup* dialGroup_ = nullptr;
std::string file_;
- uint32_t dirId_ = 0xfef << 20; // 20: offset
+ const uint32_t dirId_ = 0xfef << 20; // 20: offset
uint32_t imageOffset_ = 0;
DisplayState state_ = DisplayState::NORMAL;
}; // class DialBinParserV3
#ifndef DIAL_DATA_BASE_H
#define DIAL_DATA_BASE_H
+#include "DialDataType.h"
-enum class DialDataType {
+enum class DialOldDataType {
DATA_TYPE_FLOAT_BASE = 0,
DATA_TYPE_STEPS, // 运动步数
DATA_TYPE_HEART_RATE, // 心率
DATA_TYPE_CALORIE, // 运动卡路里
DATA_TYPE_TEMPERATURE, // 温度
- DATA_TYPE_PM25, // PM2.5
+ DATA_TYPE_PM25, // PM2.5 (目前没有映射 需要增加)
DATA_TYPE_PRESSURE, // 压力
DATA_TYPE_AILTITUDE, // 海拔
DATA_TYPE_POWER, // 电量
/* ------------------------------- 在下面增加新数据类型
------------------------------- */
DATA_TYPE_CHARGE, // 充电状态
- DATA_TYPE_DIALPATH, // 表盘路径
+ DATA_TYPE_DIALPATH, // 表盘路径 (目前没有映射 需要增加,但是该项 没有使用?)
DATA_TYPE_SPO2, // 血氧
DATA_TYPE_DISTANCE, // 运动距离
DATA_TYPE_WEATHER, // 天气
DATA_TYPE_STEPS_GOAL_INT, // 运动步数百分比
DATA_TYPE_CALORIE_GOAL_INT, // 运动卡路里目标百分比
- DATA_TYPE_SWIVEL_GEAR_ONE = 0x2000, //原sdk设置为20 太小了
- DATA_TYPE_SWIVEL_GEAR_TWO,
- DATA_TYPE_SWIVEL_GEAR_THREE,
- DATA_TYPE_SWIVEL_GEAR_FOUR,
- DATA_TYPE_SWIVEL_GEAR_FIVE,
- DATA_TYPE_SWIVEL_GEAR_SIX,
-
+
DATA_TYPE_MULTI_FLOAT_BASE = 0x2fff, // 多个浮点数据类型基值
- DATA_TYPE_HOUR_MIN, // 时分
+
DATA_TYPE_TEXT_BASE = 0x4fff, // 文本数据类型基值
DATA_TYPE_WEEK_STR, // 星期(string)
DATA_TYPE_MAX = 0x6000, // 数据类型的最大值
};
+
+OHOS::DialDataType Convert2DataType(DialOldDataType dialData);
#endif
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
+ * Description: DialDataType
+ * Author:
+ * Create: 2025-02-15
+ */
+
+#ifndef DIAL_DATA_TYPE_H
+#define DIAL_DATA_TYPE_H
+
+#include <unordered_map>
+
+namespace OHOS {
+enum class DialDataType : int16_t {
+ // 起始:单个浮点数据,OH标准协议部分,禁止改动,从0开始(包括0,二进制格式为:0000,xxxx,xxxx,xxxx)
+ DATA_TYPE_FLOAT_BASE = 0,
+ CLOCK = 1, //时钟
+ CLOCK_HIGH = 2, //时钟高位
+ CLOCK_LOW = 3, //时钟低位
+ CLOCK_RATIO_12H = 4,//12小时制
+ CLOCK_RATIO_24H = 5,//24小时制
+ MINUTE_TIME = 6,//分钟
+ MINUTE_HIGH = 7,//分钟高位
+ MINUTE_LOW = 8,//分钟低位
+ MINUTE_RATIO = 9,//分钟比例
+ SECOND_TIME = 10,//秒
+ SECOND_HIGH = 11,//秒高位
+ SECOND_LOW = 12,//秒低位
+ SECOND_RATIO = 13,//秒比例
+ AM_PM = 14,//AM/PM
+ HOUR_FORMAT = 16,//小时格式
+ PREV_HOUR = 17,//上一个小时
+ NEXT_HOUR = 18,//下一个小时
+ CLOCK_ANGLE = 19,//时钟角度
+ MINUTE_ANGLE = 20,//分钟角度
+ SECOND_ANGLE = 21,//秒角度
+ MILLISECOND_ANGLE = 22,//毫秒角度
+ PREV_SECOND = 25,//上一秒
+ NEXT_SECOND = 26,//下一秒
+ PREV_2_SECONDS = 27,//上2秒
+ PREV_MINUTE = 28,//上一分钟
+ NEXT_MINUTE = 29,//下一分钟
+ DUAL_TIMEZONE_CLOCK = 30,//双时区时钟
+ DUAL_TIMEZONE_CLOCK_HIGH = 31,//双时区时钟高位
+ DUAL_TIMEZONE_CLOCK_LOW = 32,//双时区时钟低位
+ DUAL_TIMEZONE_CLOCK_RATIO_12H = 33,//双时区12小时制
+ DUAL_TIMEZONE_CLOCK_RATIO_24H = 34,//双时区24小时制
+ DUAL_TIMEZONE_MINUTE = 35,//双时区分钟
+ DUAL_TIMEZONE_MINUTE_HIGH = 36,//双时区分钟高位
+ DUAL_TIMEZONE_MINUTE_LOW = 37,//双时区分钟低位
+ DUAL_TIMEZONE_MINUTE_RATIO = 38,//双时区分钟比例
+ DUAL_TIMEZONE_AMPM = 41,//双时区AM/PM
+ SUNRISE_SUNSET_IMAGE = 50,//日出日落图片
+ SUNRISE_SUNSET_CLOCK_HIGH = 51,//日出日落时钟高位
+ SUNRISE_SUNSET_CLOCK_LOW = 52,//日出日落时钟低位
+ SUNRISE_SUNSET_MINUTE_HIGH = 53,//日出日落分钟高位
+ SUNRISE_SUNSET_MINUTE_LOW = 54,//日出日落分钟低位
+ DATE = 70,//日期
+ DATE_HIGH = 71,//日期高位
+ DATE_LOW = 72,//日期低位
+ DATE_31_DAY_RATIO = 73,//日期31天比例
+ YESTERDAY = 74,//昨天
+ YESTERDAY_DATE_HIGH = 75,//昨天日期高位
+ YESTERDAY_DATE_LOW = 76,//昨天日期低位
+ TOMORROW = 77,//明天
+ TOMORROW_DATE_HIGH = 78,//明天日期高位
+ TOMORROW_DATE_LOW = 79,//明天日期低位
+ MONTH_DATA = 80,//月份数据
+ MONTH = 81,//月份
+ WEEKDAY_DATA = 83,
+ WEEKDAY_RATIO = 84,
+ CHINESE_HOUR = 86,
+ MOON_PHASE = 87,
+ PREV_MONTH = 88,
+ NEXT_MONTH = 89,
+ SOLAR_YEAR = 240,
+ YEAR_ONES = 241,
+ YEAR_TENS = 242,
+ YEAR_HUNDREDS = 243,
+ YEAR_THOUSANDS = 244,
+ LUNAR_MONTH = 90,
+ LUNAR_DATE_HIGH = 91,
+ LUNAR_DATE_LOW = 92,
+ BATTERY = 100,
+ BATTERY_ENUM = 102,
+ BATTERY_STATUS_ENUM = 103,
+ BATTERY_LEVEL = 104,
+ CHARGING_STATUS = 105,
+ STEP_COUNT = 110,
+ STEP_ONES = 111,
+ STEP_TENS = 112,
+ STEP_HUNDREDS = 113,
+ STEP_THOUSANDS = 114,
+ STEP_TENS_OF_THOUSANDS = 115,
+ STEP_GOAL_PROGRESS = 116,
+ STEP_GOAL_PROGRESS_ENUM = 117,
+ CALORIE = 120,
+ CALORIE_RATIO = 121,
+ CALORIE_GOAL_PROGRESS_ENUM = 122,
+ HEART_RATE = 130,
+ MAX_HEART_RATE = 131,
+ MIN_HEART_RATE = 132,
+ HEART_RATE_ZONE = 133,
+ HEART_RATE_RATIO = 134,
+ STRESS_LEVEL = 140,
+ STRESS_RATIO = 141,
+ STRESS_LEVEL_TYPE = 142,
+ MODERATE_HIGH_INTENSITY_TIME = 150,
+ MODERATE_HIGH_INTENSITY_TIME_RATIO = 151,
+ STAND_COUNT = 152,
+ STAND_COUNT_RATIO = 153,
+ MAX_VO2 = 160,
+ MAX_VO2_RATIO = 161,
+ SLEEP_RATIO = 166,
+ SLEEP_GOAL_PROGRESS_ENUM = 167,
+ TEMPERATURE = 170,
+ MAX_TEMPERATURE = 171,
+ MIN_TEMPERATURE = 172,
+ CURRENT_TEMPERATURE_MINUS_1 = 173,
+ CURRENT_TEMPERATURE_PLUS_1 = 174,
+ TEMPERATURE_TYPE = 175,
+ WEATHER_TYPE = 176,
+ TEMPERATURE_RATIO = 177,
+ PRESSURE = 180,
+ PRESSURE_RATIO = 181,
+ AQI = 182,
+ AQI_LEVEL = 183,
+ AQI_RATIO = 184,
+ ALTITUDE_DATA = 191,
+ ALTITUDE_UNIT = 192,
+ ALTITUDE_RATIO = 193,
+ DISTANCE_DATA = 195,
+ DISTANCE_UNIT = 196,
+ DISTANCE_GOAL_PROGRESS = 197,
+ BLE_CONNECTION_STATUS = 210,
+ BT_CONNECTION_STATUS = 211,
+ BLOOD_OXYGEN = 220,
+ SYSTOLIC_BLOOD_PRESSURE = 221,
+ DIASTOLIC_BLOOD_PRESSURE = 222,
+ DUAL_LANGUAGE_SYSTEM = 230,
+ UNREAD_SMS_MSG = 250,
+ UNREAD_WECHAT_MSG = 251,
+ // 结束:单个浮点数据,OH标准协议部分,禁止改动,到4095结束(包括4095)
+
+
+ // 起始:单个浮点数据,私有可定制部分,从4096开始(包括4096,二进制格式为:0001,xxxx,xxxx,xxxx)
+ DATA_TYPE_FLOAT_CUSTOM_BASE = 4096,
+ PM25 = 4097, // PM2.5
+ POWER_STANDBY, // 备用电量
+ WEEK_NUM, // 星期(数字)
+ STEPS_GOAL_BOXPROGRESS,//步数目标进度条映射?
+ CALORIE_GOAL_BOXPROGRESS,//卡路里目标进度条映射?
+
+ SWIVEL_GEAR_POSITIVE = 8190, // private data, clockwise
+ SWIVEL_GEAR_NEGATIVE = 8191, // counterclockwise
+ // 结束:单个浮点数据,私有可定制部分,到8191结束(包括8191)
+
+ // 起始:文本数据,OH标准协议部分,禁止改动,从8192开始(包括8192,二进制格式为:0010,xxxx,xxxx,xxxx)
+ DATA_TYPE_TEXT_BASE = 8192,
+ AM_PM_TEXT = 8193,
+ SUNRISE_TEXT = 8210,
+ SUNSET_TEXT = 8211,
+ MOONRISE_TEXT = 8221,
+ MOONSET_TEXT = 8222,
+ DUAL_TIMEZONE_ABBR_TEXT = 8200,
+ DUAL_TIMEZONE_TIME_TEXT = 8201,
+ DUAL_TIMEZONE_AM_PM_TEXT = 8202,
+ MONTH_TEXT = 8230,
+ DATE_TEXT = 8231,
+ WEEKDAY_TEXT = 8232,
+ LUNAR_YEAR = 8240,
+ SLEEP_TEXT = 8250,
+ DISTANCE_TEXT = 8260,
+ TIDE_RISE_TIME_TEXT = 8270,
+ TIDE_FALL_TIME_TEXT = 8271,
+ // 结束:文本数据,OH标准协议部分,禁止改动,到12287结束(包括12287)
+
+ // 文本数据,私有可定制部分,从12288开始(包括12288,二进制格式为:0011,xxxx,xxxx,xxxx)
+ DATA_TYPE_TEXT_CUSTOM_BASE = 12288,
+ WEEK_STR = 12289, // 星期(string)
+ DATE_STR = 12290, // 日期(string)
+ WEATHER_STR = 12291, // 天气(string)
+ TIMESTR_STR = 12292, // 时间(string)
+ DATE_WEEK_STR = 12293, // 日期(年月日)星期(string)
+ POWER_STR = 12294, // 电量(string)
+ DATE_WEEK_MD_STR = 12295, // 星期(月日)和日期(string)
+ DATE_EN_STR = 12296, // 月份+日期 (英文)
+ WEEK_EN_STR = 12297, // 星期(英文)
+ STEPS_GOAL_STR = 12298, // 运动步数目标(string)
+ CALORIE_GOAL_STR = 12299, // 卡路里目标(string)
+ // 文本数据,私有可定制部分,到16383结束(包括16383)
+
+ // 起始:多个浮点数据,OH标准协议部分,禁止改动,从16384开始(包括16384,二进制格式为:0100,xxxx,xxxx,xxxx)
+ DATA_TYPE_MULTI_FLOAT_BASE = 16384,
+ // 结束:多个浮点数据,OH标准协议部分,禁止改动,到20479结束(包括20479)
+
+ // 起始:多个浮点数据,私有可定制部分,从20480开始(包括20480,二进制格式为:0101,xxxx,xxxx,xxxx)
+ // 结束:多个浮点数据,私有可定制部分,到24575结束(包括24575)
+
+ DATA_TYPE_MAX = 0x6000,
+}; // enum class DialDataType
+} // namespace OHOS
+
+#endif // DIAL_DATA_TYPE_H
#include <cstdint>
#include "DialView.h"
-#include "DialTimePublisher.h"
+#include "DialModelTime.h"
#include "components/ui_image_view.h"
#include "gfx_utils/graphic_math.h"
#include "components/ui_view_group.h"
RIGHT,
};
-class DialDigitalImgView : public UIImageView, public DialView, public DialTimePublisher::TimeChangeListener {
+class DialDigitalImgView : public UIImageView, public DialView, public TimeChangeListener {
public:
DialDigitalImgView();
~DialDigitalImgView() override;
+++ /dev/null
-
-#ifndef DIAL_MODEL_HourMin_H
-#define DIAL_MODEL_HourMin_H
-
-#include "DialBaseModel.h"
-#include <cstdint>
-#include <string>
-#include <vector>
-
-namespace OHOS
-{
- class DialModelHourMin : public DialBaseModel
- {
- public:
- DialModelHourMin() {}
- virtual ~DialModelHourMin() {}
- static DialModelHourMin *GetInstance()
- {
- static DialModelHourMin instance;
- return &instance;
- }
- bool GetDialFloatData(DialDataType &type, float *&out, int16_t len) override;
- void UpdateHourMin(const std::string *&dialHourMin);
-
- private:
- float dialhourmin{2};
- };
-}
-#endif
\ No newline at end of file
+++ /dev/null
-#ifndef DIAL_MODEL_PATH_H
-#define DIAL_MODEL_PATH_H
-
-#include "DialBaseModel.h"
-#include <cstdint>
-#include <string>
-
-namespace OHOS
-{
- class DialModelPath : public DialBaseModel
- {
- public:
- DialModelPath() {}
- virtual ~DialModelPath() {}
- static DialModelPath *GetInstance()
- {
- static DialModelPath instance;
- return &instance;
- }
- bool GetDialTextData(DialDataType &type, std::string *&out, int16_t &strNum) override;
- void UpdatePath(const std::string *&DialPath);
-
- private:
- std::string DialPath_ = "/user/res/dials/dog.bin";
- };
-}
-#endif
\ No newline at end of file
#define DIAL_MODEL_TIME_H
#include "DialBaseModel.h"
-#include "DialTimePublisher.h"
#include "gfx_utils/list.h"
namespace OHOS {
-class DialModelTime : public DialBaseModel, public DialTimePublisher {
+class TimeChangeListener;
+class DialModelTime : public DialBaseModel {
public:
- DialModelTime()
- {
- DialModelTime::SetPublisher(dynamic_cast<DialTimePublisher*>(this));
- }
~DialModelTime() override
{
listeners_.Clear();
}
+
static DialModelTime* GetInstance()
{
static DialModelTime instance;
return &instance;
}
+
bool GetDialFloatData(DialDataType& type, float& out) override;
- void UpdateTime() override;
- void Register(TimeChangeListener* listener) override;
- void Unregister(TimeChangeListener* listener) override;
+ void UpdateTime();
+ void Register(TimeChangeListener* listener);
+ void Unregister(TimeChangeListener* listener);
private:
+ DialModelTime() = default;
struct tm *tblock_;
uint16_t angleH_ = 0;
uint16_t angleM_ = 0;
float angleMS_ = 0;
List<TimeChangeListener*> listeners_;
};
-}
+
+class TimeChangeListener {
+public:
+ struct TimeInterval {
+ uint8_t start;
+ uint8_t end;
+ };
+ virtual void OnTimeUpdate(const struct tm &curTime) = 0;
+ void SetTimeInervals(TimeInterval *intervals, uint8_t num);
+ bool IsInTimeInterval(const struct tm &curTime);
+ TimeChangeListener(const TimeChangeListener&) = delete;
+ TimeChangeListener& operator=(const TimeChangeListener&) = delete;
+ TimeChangeListener();
+ virtual ~TimeChangeListener();
+private:
+ TimeInterval *intervals_ = nullptr;
+ uint8_t num_ = 0;
+};
+} // namespace OHOS
#endif
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialOHDataType
- * Author:
- * Create: 2025-02-15
- */
-
-#ifndef DIAL_OH_DATATYPE_H
-#define DIAL_OH_DATATYPE_H
-
-#include <unordered_map>
-#include "DialDataBase.h"
-
-namespace OHOS {
-enum class DialOHDataType : int16_t {
- CLOCK = 1,
- CLOCK_HIGH_BIT = 2,
- CLOCK_LOW_BIT = 3,
- CLOCK_RATIO_12 = 4,
- CLOCK_RATIO_24 = 5,
- MINUTES = 6,
- MINUTES_HIGH_BIT = 7,
- MINUTES_LOW_BIT = 8,
- MINUTES_RATIO = 9,
- SECONDS = 10,
- SECONDS_HIGH_BIT = 11,
- SECONDS_LOW_BIT = 12,
- SECONDS_RATIO = 13,
- AM_PM = 14,
- AMPM_TEXT = 15,
- HOUR_MODE = 16,
- PREVIOUS_HOUR = 17,
- NEXT_HOUR = 18,
- CLOCK_ANGLE = 19,
- MINUTE_ANGLE = 20,
- SECONDS_ANGLE = 21,
- MILLISECOND_ANGLE = 22,
- PREVIOUS_SECOND = 25,
- NEXT_SECOND = 26,
- PREVIOUS_SECOND_PREVIOUS_SECOND = 27,
- PREVIOUS_MINUTE = 28,
- NEXT_MINUTE = 29,
- DUAL_TIME_ZONE_CLOCK = 30,
- DUAL_TIME_ZONE_CLOCK_HIGH_BIT = 31,
- DUAL_TIME_ZONE_CLOCK_LOW_BIT = 32,
- DUAL_TIME_ZONE_CLOCK_RATIO_12 = 33,
- DUAL_TIME_ZONE_CLOCK_RATIO_24 = 34,
- DUAL_TIME_ZONE_MINUTES = 35,
- DUAL_TIME_ZONE_MINUTES_HIGH_BIT = 36,
- DUAL_TIME_ZONE_MINUTES_LOW_BIT = 37,
- DUAL_TIME_ZONE_MINUTES_RATIO = 38,
- DUAL_TIME_ZONE_ABBREVIATION_TEXT = 39,
- DUAL_TIME_ZONE_TIME_MINUTE_TEXT = 40,
- DUAL_TIME_ZONE_AMPM = 41,
- DUAL_TIME_ZONE_AM_PM_TEXT = 42,
- SUNRISE_SUNSET_PICTURE_SELECTION = 50,
- SUNRISE_SUNSET_CLOCK_HIGH_BIT = 51,
- SUNRISE_SUNSET_CLOCK_LOW_BIT = 52,
- SUNRISE_SUNSET_MINUTES_HIGH_BIT = 53,
- SUNRISE_SUNSET_MINUTES_LOW_BIT = 54,
- SUNRISE_TEXT = 55,
- SUNSET_TEXT = 56,
- MOONRISE_TEXT = 60,
- MOONSET_TEXT = 61,
- DATE = 70,
- DATE_HIGH_BIT = 71,
- DATE_LOW_BIT = 72,
- DATE_OCCUPIES_31_DAYS_RATIO = 73,
- YESTERDAY = 74,
- YESTERDAY_DATE_HIGH_BIT = 75,
- YESTERDAY_DATE_LOW_BIT = 76,
- TOMORROW = 77,
- TOMORROW_DATE_HIGH_BIT = 78,
- TOMORROW_DATE_LOW_BIT = 79,
- MONTH_DATA = 80,
- MONTH = 81,
- MONTH_TEXT = 82,
- WEEK_DATA = 83,
- WEEK_RATIO = 84,
- WEEK_TEXT = 85,
- TWELVE_DIVISIONS = 86,
- LUNAR_PHASE = 87,
- PREVIOUS_MONTH = 88,
- NEXT_MONTH = 89,
- LUNAR_MONTH = 90,
- LUNAR_DATE_HIGH_BIT = 91,
- LUNAR_DATE_LOW_BIT = 92,
- CHARGE = 100,
- CHARGE_ENUMERATION = 102,
- CHARGE_STATUS_ENUMERATION = 103,
- CHARGE_RATIO = 104,
- CHARGING_STATUS = 105,
- STEPS = 110,
- STEPS_UNIT_DIGIT = 111,
- STEPS_TENS_DIGIT = 112,
- STEPS_HUNDRED_DIGIT = 113,
- STEPS_THOUSAND_DIGIT = 114,
- STEPS_TEN_THOUSAND_DIGIT = 115,
- STEPS_TARGET_ACHIEVEMENT_RATE = 116,
- STEPS_TARGET_PROGRESS_ENUMERATION = 117,
- CALORIES = 120,
- CALORIES_RATIO = 121,
- CALORIES_TARGET_PROGRESS_ENUMERATION = 122,
- HEART_RATE = 130,
- MAXIMUM_HEART_RATE = 131,
- MINIMUM_HEART_RATE = 132,
- HEART_RATE_RANGE = 133,
- HEART_RATE_RATIO = 134,
- STRESS = 140,
- STRESS_RATIO = 141,
- STRESS_LEVEL_TYPE = 142,
- MODERATE_TO_VIGOROUS_INTENSITY_TIME = 150,
- MODERATE_TO_VIGOROUS_INTENSITY_TIME_RATIO = 151,
- STANDING_TIMES = 152,
- STANDING_TIMES_RATIO = 153,
- MAXIMUM_OXYGEN_UPTAKE = 160,
- MAXIMUM_OXYGEN_UPTAKE_RATIO = 161,
- SLEEP_TEXT = 165,
- SLEEP_RATIO = 166,
- SLEEP_TARGET_ACHIEVEMENT_RATE_ENUMERATION = 167,
- TEMPERATURE = 170,
- HIGHEST_TEMPERATURE = 171,
- LOWEST_TEMPERATURE = 172,
- CURRENT_TEMPERATURE_MINUS_ONE = 173,
- CURRENT_TEMPERATURE_PLUS_ONE = 174,
- TEMPERATURE_TYPE = 175,
- WEATHER_TYPE = 176,
- TEMPERATURE_RATIO = 177,
- ATMOSPHERIC_PRESSURE = 180,
- ATMOSPHERIC_PRESSURE_RATIO = 181,
- AIR_QUALITY_INDEX = 182,
- AIR_QUALITY_INDEX_LEVEL = 183,
- AIR_QUALITY_INDEX_RATIO = 184,
- ELEVATION = 190,
- ELEVATION_HEIGHT_DATA = 191,
- ELEVATION_HEIGHT_UNIT = 192,
- HEIGHT_RATIO = 193,
- DISTANCE_TEXT = 194,
- DISTANCE_DATA = 195,
- DISTANCE_UNIT = 196,
- DISTANCE_TARGET_PROGRESS = 197,
- HIGH_TIDE_TIME_TEXT = 200,
- LOW_TIDE_TIME_TEXT = 201,
- BLE_CONNECTION_STATUS = 210,
- BT_CONNECTION_STATUS = 211,
- BLOOD_OXYGEN = 220,
- SYSTOLIC_BLOOD_PRESSURE = 221,
- DIASTOLIC_BLOOD_PRESSURE = 222,
- DUAL_LANGUAGE_SYSTEM = 230,
- SWIVEL_GEAR_POSITIVE = (1 << 12) + 20, // private data, clockwise
- SWIVEL_GEAR_NEGATIVE, // counterclockwise
-}; // enum class DialOHDataType
-
-struct HashOHDataType {
- size_t operator()(DialOHDataType data) const
- {
- return std::hash<int16_t>()(static_cast<int16_t>(data));
- }
-};
-
-const std::unordered_map<DialOHDataType, DialDataType, HashOHDataType> g_bindDataConverter = {
- {DialOHDataType::CLOCK, DialDataType::DATA_TYPE_TIME_HOUR},
- {DialOHDataType::MINUTES, DialDataType::DATA_TYPE_TIME_MINUTE},
- {DialOHDataType::SECONDS, DialDataType::DATA_TYPE_TIME_SECOND},
- {DialOHDataType::MILLISECOND_ANGLE, DialDataType::DATA_TYPE_CLOCK_ANGLE_MS},
- {DialOHDataType::DATE, DialDataType::DATA_TYPE_TIME_DATE},
- {DialOHDataType::WEEK_DATA, DialDataType::DATA_TYPE_TIME_WEEK},
- {DialOHDataType::CHARGE, DialDataType::DATA_TYPE_POWER},
- {DialOHDataType::STEPS, DialDataType::DATA_TYPE_STEPS},
- {DialOHDataType::CALORIES, DialDataType::DATA_TYPE_CALORIE},
- {DialOHDataType::HEART_RATE, DialDataType::DATA_TYPE_HEART_RATE},
- {DialOHDataType::STRESS, DialDataType::DATA_TYPE_PRESSURE},
- {DialOHDataType::TEMPERATURE, DialDataType::DATA_TYPE_TEMPERATURE},
- {DialOHDataType::ELEVATION, DialDataType::DATA_TYPE_AILTITUDE},
- {DialOHDataType::AIR_QUALITY_INDEX, DialDataType::DATA_TYPE_PM25},
- {DialOHDataType::CLOCK_ANGLE, DialDataType::DATA_TYPE_CLOCK_ANGLE_H},
- {DialOHDataType::MINUTE_ANGLE, DialDataType::DATA_TYPE_CLOCK_ANGLE_M},
- {DialOHDataType::SECONDS_ANGLE, DialDataType::DATA_TYPE_CLOCK_ANGLE_S},
- {DialOHDataType::MONTH, DialDataType::DATA_TYPE_TIME_MONTH},
- {DialOHDataType::SWIVEL_GEAR_POSITIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_ONE},
- {DialOHDataType::SWIVEL_GEAR_POSITIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_FOUR},
- {DialOHDataType::SWIVEL_GEAR_POSITIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_SIX},
- {DialOHDataType::SWIVEL_GEAR_NEGATIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_TWO},
- {DialOHDataType::SWIVEL_GEAR_NEGATIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_THREE},
- {DialOHDataType::SWIVEL_GEAR_NEGATIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_FIVE},
-};
-} // namespace OHOS
-
-#endif // DIAL_OH_DATATYPE_H
#include <cstdint>
#include "DialView.h"
-#include "DialTimePublisher.h"
+#include "DialModelTime.h"
#include "components/ui_image_view.h"
#include "font/font_global_manager.h"
class DialOptionImgView : public UIImageView,
public DialView,
public FontGlobalManager::LangChangeListener,
- public DialTimePublisher::TimeChangeListener {
+ public TimeChangeListener {
public:
DialOptionImgView();
~DialOptionImgView() override;
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialSequenceContainer
- * Author:
- * Create: 2025-03-05
- */
-
-#ifndef DIAL_SEQUENCE_CONTAINER_H
-#define DIAL_SEQUENCE_CONTAINER_H
-#include "components/ui_view_group.h"
-#include "components/ui_image_animator.h"
-
-namespace OHOS {
-class DialSequenceContainer : public UIViewGroup, public UIImageAnimatorView::AnimatorStopListener {
-public:
- DialSequenceContainer();
- ~DialSequenceContainer() override;
- DialSequenceContainer(const DialSequenceContainer&) = delete;
- DialSequenceContainer& operator=(const DialSequenceContainer&) = delete;
- bool AddSequenceRes(uint16_t interval, bool repeat, const ImageAnimatorInfo *imgSrc, uint8_t imgNum);
- bool OnClickEvent(const ClickEvent& event) override;
- void Start();
- void Stop();
- void Pause();
- void Resume();
- void OnAnimatorStop(UIView& view) override;
-
-private:
- void UpdateCurrentView();
- UIImageAnimatorView *repeatView_ = nullptr;
- UIImageAnimatorView *nonCycleView_[3]; // 3: max seqImg num
- // if curView_ is not null, curView_ must be added into parent.
- UIImageAnimatorView *curView_ = nullptr;
- uint8_t nonCycleNum_ = 0;
- uint8_t loop_ = 0;
- bool isClick_ = false;
-}; // class DialSequenceContainer
-} // namespace OHOS
-#endif // DIAL_SEQUENCE_CONTAINER_H
\ No newline at end of file
#include "components/ui_image_animator.h"
namespace OHOS {
+struct SequenceInfo : public HeapBase {
+ long imgOffset = 0;
+ long resPos = 0;
+ uint8_t imgNum = 0;
+ FILE *fp = nullptr;
+ std::string fileName;
+ uint16_t interval = 0;
+ bool repeat = false;
+};
-class DialSequenceImgView : public UIImageAnimatorView {
+class DialSequenceImgView : public UIImageAnimatorView, public UIImageAnimatorView::AnimatorStopListener {
public:
DialSequenceImgView();
~DialSequenceImgView() override;
- bool SetSequenceRes(const ImageAnimatorInfo* imgSrc, uint8_t imgNum);
+ bool SetSequenceRes(const ImageAnimatorInfo *imgSrc, uint8_t imgNum);
+ bool SetPreviewImg();
+ bool LoadCurSeqImgs();
+ bool AddSequenceRes(const SequenceInfo ¶);
+ bool OnClickEvent(const ClickEvent &event) override;
+ void OnAnimatorStop(UIView &view) override;
private:
- ImageAnimatorInfo* imgSrc_ = nullptr;
- uint8_t imgNum_ = 0;
+ ImageAnimatorInfo *LoadImgs(const SequenceInfo ¶, uint8_t num) const;
+ void UpdateCurrentSeq();
+ struct AnimatorInfo : public HeapBase {
+ SequenceInfo info;
+ ImageAnimatorInfo *imgs = nullptr;
+ uint8_t num = 0;
+ ~AnimatorInfo()
+ {
+ if (imgs != nullptr) {
+ UIFree(imgs);
+ imgs = nullptr;
+ num = 0;
+ }
+ }
+ };
+ void SetAnimatorInfo(AnimatorInfo *info, uint8_t num);
+ static constexpr uint8_t SEQ_IMG_NUM = 3;
+ AnimatorInfo *repeatSeq_ = nullptr;
+ AnimatorInfo *nonCycleSeq_[SEQ_IMG_NUM];
+ AnimatorInfo *curSeq_ = nullptr;
+ uint8_t nonCycleNum_ = 0;
+ uint8_t loop_ = 0;
+ bool isClick_ = false;
+ uint8_t viewNum_ = 0;
+ bool isAllImgLoaded_ = false;
};
-}
+} // namespace OHOS
#endif
#include "components/ui_image_view.h"
#include "font/font_global_manager.h"
-#include "DialTimePublisher.h"
+#include "DialModelTime.h"
namespace OHOS {
class DialStaticImgView : public UIImageView,
public FontGlobalManager::LangChangeListener,
- public DialTimePublisher::TimeChangeListener {
+ public TimeChangeListener {
public:
DialStaticImgView();
~DialStaticImgView() override;
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialTimePublisher
- * Author:
- * Create: 2025-03-04
- */
-
-#ifndef DIAL_TIME_PUBLISHER_H
-#define DIAL_TIME_PUBLISHER_H
-#include <ctime>
-#include <cstdint>
-
-namespace OHOS {
-class DialTimePublisher {
-public:
- struct TimeInterval {
- uint8_t start;
- uint8_t end;
- };
- class TimeChangeListener {
- public:
- virtual void OnTimeUpdate(const struct tm &curTime) = 0;
- void SetTimeInervals(TimeInterval *intervals, uint8_t num);
- bool IsInTimeInterval(const struct tm &curTime);
- TimeChangeListener(const TimeChangeListener&) = delete;
- TimeChangeListener& operator=(const TimeChangeListener&) = delete;
- TimeChangeListener();
- virtual ~TimeChangeListener();
- private:
- TimeInterval *intervals_ = nullptr;
- uint8_t num_ = 0;
- };
-
- virtual void Register(TimeChangeListener *listener) = 0;
- virtual void Unregister(TimeChangeListener *listener) = 0;
- virtual void UpdateTime() = 0;
- static void SetPublisher(DialTimePublisher *publisher);
- static DialTimePublisher *GetPublisher();
- virtual ~DialTimePublisher() {}
-
-private:
- static DialTimePublisher *publisher_;
-}; // class DialTimePublisher
-} // namespace OHOS
-#endif // DIAL_TIME_PUBLISHER_H
\ No newline at end of file
#include <cstdint>
#include <string>
+#include "DialDataType.h"
namespace OHOS {
virtual void HandleFloatData(float data) {}
virtual void HandleFloatData(const float* data, uint16_t num) {}
virtual void HandleTextData(const std::string* data, uint16_t num) {}
+ virtual DialDataType GetDataType()
+ {
+ return type_;
+ }
+
+ virtual void SetDataType(DialDataType type)
+ {
+ type_ = type;
+ }
+
+private:
+ DialDataType type_ = DialDataType::DATA_TYPE_MAX;
};
}
#endif
#define DIAL_VIEW_GROUP_H
#include <unordered_map>
+#include <memory>
#include "DialDataBase.h"
#include "components/ui_view_group.h"
#include "components/ui_image_animator.h"
#include "DialVideoView.h"
#include "DialBinTypesV2.h"
#include "DialViewContainer.h"
-#include "DialSequenceContainer.h"
namespace OHOS {
class DialViewGroup : public UICardPage, public OnDialDataUpdateListener, public ContainerInterface {
void SetImgAnimatorState(uint8_t state);
List<UILabel*> rollingLabelList_;
List<UIImageAnimatorView*> imgAnimList_;
- List<DialSequenceContainer*> seqList_;
+ bool isSeqImgLoaded_ = false;
+ std::shared_ptr<bool> isExists_;
};
}
#endif
#include <unordered_map>
#include "DialBaseModel.h"
#include "DialDataBase.h"
-#include "DialOHDataType.h"
#include "ModelDialDataFactory.h"
namespace OHOS {
models_[static_cast<int16_t>(type)] = model;
}
- bool IsOHBindDataExist(DialOHDataType type) const;
- bool IsBindDataExist(DialDataType type) const;
bool RegisterDialDataListener(DialDataType type, OnDialDataUpdateListener* listener);
bool UnRegisterDialDataListener(DialDataType type);
bool GetDialTextData(DialDataType& type, std::string*& out, int16_t& strNum);
#include "PlayersModel.h"
#include "PlayersPresenter.h"
#include "CompassPresenter.h"
+#include "NativeRegisterManager.h"
#include "compass/include/CompassModel.h"
#include "CompassCalibrationView.h"
#include "drag_event.h"
PageTransitionMgr::GetInstance().SaveSlideBackSnapShotIfNecessary(watchFace);
watchFace->SetOpaScale(opaScale);
+ uint8_t curCardId = view_->GetHorCurrentCard();
+ UICardPage *card = view_->GetViewById(curCardId);
+ if (card != nullptr) {
+ card->OnPause();
+ }
mainPresenterState_ = MainPresenterState::PAUSE;
//进行视频表盘的暂停
void MainPresenterSample::SetTaskPeroid(CardId cardId)
{
- if (cardId == COMPASS)
- {
+ SetLastRun(0); // refresh entering card in time
+ if (cardId == COMPASS) {
SetPeriod(DEFAULT_TASK_PERIOD);
- }
- else if (cardId == WATCH_FACE)
- {
+ } else if (cardId == WATCH_FACE) {
uint32_t time;
DialSetting &setting = GetDialSetting();
- if (setting.dialFlag)
- {
- time = dynamic_cast<DialViewGroup *>(view_->GetViewById(WATCH_FACE))->GetPeriod();
- }
- else
- {
+ if (setting.dialFlag) {
+ time = dynamic_cast<DialViewGroup*>(view_->GetViewById(WATCH_FACE))->GetPeriod();
+ } else {
time = DEFAULT_TASK_PERIOD;
}
SetPeriod(time);
- }
- else if (cardId == MUSIC_PLAYER)
- {
+ } else if (cardId == MUSIC_PLAYER) {
SetPeriod(PLAYER_PERIOD);
- }
- else
- {
+ } else {
SetPeriod(MAX_PERIOD);
}
}
- void MainPresenterSample::ResetgoalCardView()
- {
- if(goalControlView::GetInstance())
- {
- auto goalSwipView = goalControlView::GetInstance()->GetGoalControlSwipView();
- if (goalSwipView->GetCurrentPage() != 0)
- {
- goalSwipView->SetCurrentPage(0);
- }
- }
- }
-
void MainPresenterSample::OnSwipe(UISwipeView &view)
{
// UNUSED(view);
}
}
}
+ /*末日目标*/
+ void MainPresenterSample::ResetgoalCardView()
+ {
+ if(goalControlView::GetInstance())
+ {
+ auto goalSwipView = goalControlView::GetInstance()->GetGoalControlSwipView();
+ if (goalSwipView->GetCurrentPage() != 0)
+ {
+ goalSwipView->SetCurrentPage(0);
+ }
+ }
+ }
/*心率卡片*/
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
+ * Description: DialDataBase
+ * Author:
+ * Create: 2025-04-08
+ */
+
+#include <unordered_map>
+#include "dial/DialDataBase.h"
+
+namespace {
+struct DataTypeHash {
+ size_t operator()(const DialOldDataType &data) const
+ {
+ return std::hash<int16_t>{}(static_cast<int16_t>(data));
+ }
+};
+
+static std::unordered_map<DialOldDataType, OHOS::DialDataType, DataTypeHash> g_data2std = {
+ {DialOldDataType::DATA_TYPE_STEPS, OHOS::DialDataType::STEP_COUNT},
+ {DialOldDataType::DATA_TYPE_HEART_RATE, OHOS::DialDataType::HEART_RATE},
+ {DialOldDataType::DATA_TYPE_POWER, OHOS::DialDataType::BATTERY},
+ {DialOldDataType::DATA_TYPE_CLOCK_ANGLE_H, OHOS::DialDataType::CLOCK_ANGLE},
+ {DialOldDataType::DATA_TYPE_CLOCK_ANGLE_M, OHOS::DialDataType::MINUTE_ANGLE},
+ {DialOldDataType::DATA_TYPE_CLOCK_ANGLE_S, OHOS::DialDataType::SECOND_ANGLE},
+ {DialOldDataType::DATA_TYPE_CLOCK_ANGLE_MS, OHOS::DialDataType::MILLISECOND_ANGLE},
+ {DialOldDataType::DATA_TYPE_TIME_SECOND, OHOS::DialDataType::SECOND_TIME},
+ {DialOldDataType::DATA_TYPE_TIME_MINUTE, OHOS::DialDataType::MINUTE_TIME},
+ {DialOldDataType::DATA_TYPE_TIME_HOUR, OHOS::DialDataType::CLOCK},
+ {DialOldDataType::DATA_TYPE_TIME_DATE, OHOS::DialDataType::DATE},
+ {DialOldDataType::DATA_TYPE_TIME_WEEK, OHOS::DialDataType::WEEKDAY_DATA},
+ {DialOldDataType::DATA_TYPE_TIME_MONTH, OHOS::DialDataType::MONTH},
+ {DialOldDataType::DATA_TYPE_TIME_YEAR, OHOS::DialDataType::SOLAR_YEAR},
+ /*适配oldtype*/
+ {DialOldDataType::DATA_TYPE_CALORIE, OHOS::DialDataType::CALORIE},
+ {DialOldDataType::DATA_TYPE_TEMPERATURE, OHOS::DialDataType::TEMPERATURE},
+ {DialOldDataType::DATA_TYPE_PM25, OHOS::DialDataType::PM25},
+ {DialOldDataType::DATA_TYPE_PRESSURE, OHOS::DialDataType::PRESSURE},
+ {DialOldDataType::DATA_TYPE_AILTITUDE, OHOS::DialDataType::ALTITUDE_DATA},
+ {DialOldDataType::DATA_TYPE_CHARGE, OHOS::DialDataType::CHARGING_STATUS},
+ {DialOldDataType::DATA_TYPE_SPO2, OHOS::DialDataType::BLOOD_OXYGEN},
+ {DialOldDataType::DATA_TYPE_DISTANCE, OHOS::DialDataType::DISTANCE_DATA},
+ {DialOldDataType::DATA_TYPE_WEATHER, OHOS::DialDataType::WEATHER_TYPE},
+ {DialOldDataType::DATA_TYPE_POWER_STANDBY, OHOS::DialDataType::POWER_STANDBY},
+ {DialOldDataType::DATA_TYPE_HOUR_TENS, OHOS::DialDataType::CLOCK_HIGH},
+ {DialOldDataType::DATA_TYPE_HOUR_UNITS, OHOS::DialDataType::CLOCK_LOW},
+ {DialOldDataType::DATA_TYPE_MINUTE_TENS, OHOS::DialDataType::MINUTE_HIGH},
+ {DialOldDataType::DATA_TYPE_MINUTE_UNITS, OHOS::DialDataType::MINUTE_LOW},
+ {DialOldDataType::DATA_TYPE_WEEK_NUM, OHOS::DialDataType::WEEK_NUM},
+ {DialOldDataType::DATA_TYPE_STEPS_GOAL, OHOS::DialDataType::STEPS_GOAL_BOXPROGRESS},
+ {DialOldDataType::DATA_TYPE_SECOND_MAPPER, OHOS::DialDataType::SECOND_RATIO},
+ {DialOldDataType::DATA_TYPE_POWER_MAPPER, OHOS::DialDataType::BATTERY_LEVEL},
+ {DialOldDataType::DATA_TYPE_CALORIE_GOAL, OHOS::DialDataType::CALORIE_GOAL_BOXPROGRESS},
+ {DialOldDataType::DATA_TYPE_STEPS_GOAL_INT, OHOS::DialDataType::STEP_GOAL_PROGRESS},
+ {DialOldDataType::DATA_TYPE_CALORIE_GOAL_INT, OHOS::DialDataType::CALORIE_RATIO},
+ {DialOldDataType::DATA_TYPE_WEEK_STR, OHOS::DialDataType::WEEK_STR},
+ {DialOldDataType::DATA_TYPE_DATE_STR, OHOS::DialDataType::DATE_STR},
+ {DialOldDataType::DATA_TYPE_WEATHER_STR, OHOS::DialDataType::WEATHER_STR},
+ {DialOldDataType::DATA_TYPE_TIMESTR_STR, OHOS::DialDataType::TIMESTR_STR},
+ {DialOldDataType::DATA_TYPE_DATE_WEEK_STR, OHOS::DialDataType::DATE_WEEK_STR},
+ {DialOldDataType::DATA_TYPE_POWER_STR, OHOS::DialDataType::POWER_STR},
+ {DialOldDataType::DATA_TYPE_DATE_WEEK_MD_STR, OHOS::DialDataType::DATE_WEEK_MD_STR},
+ {DialOldDataType::DATA_TYPE_DATE_EN_STR, OHOS::DialDataType::DATE_EN_STR},
+ {DialOldDataType::DATA_TYPE_WEEK_EN_STR, OHOS::DialDataType::WEEK_EN_STR},
+ {DialOldDataType::DATA_TYPE_STEPS_GOAL_STR, OHOS::DialDataType::STEPS_GOAL_STR},
+ {DialOldDataType::DATA_TYPE_CALORIE_GOAL_STR, OHOS::DialDataType::CALORIE_GOAL_STR},
+
+};
+}
+
+ OHOS::DialDataType Convert2DataType(DialOldDataType dialData)
+{
+ if (g_data2std.find(dialData) != g_data2std.end()) {
+ return g_data2std[dialData];
+ }
+ return OHOS::DialDataType::DATA_TYPE_MAX;
+}
\ No newline at end of file
-/*
- * @Author: penglei 1624952103@qq.com
- * @Date: 2025-05-15 11:27:16
- * @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2025-05-20 10:33:14
- * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dial/DialModelCalorie.cpp
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- */
-/***
- * @Date: 2024-07-31 18:33:13
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-08-02 18:54:18
- * @FilePath:
- * /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelCalorie.cpp
- */
-/***
- * @Date: 2024-04-15 10:55:58
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-07-31 18:36:06
- * @FilePath:
- * /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelCalorie.cpp
- */
+
/*
* Copyright (c) CompanyNameMagicTag 2023. All rights reserved.
* Description: DialModelCalorie
#include "wearable_log.h"
#include "goal/include/goalmodel.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_CALORIE,
+REGIST_DIAL_MODULE(OHOS::DialDataType::CALORIE,
OHOS::DialModelCalorie::GetInstance());
// #include "cywee_hal.h"
// 更新表盘卡路里数据
calorie_ = static_cast<float>(calorie);
if (onChangeListener_ != nullptr) {
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_CALORIE,
+ onChangeListener_->OnDialFloatDataUpdate(OHOS::DialDataType::CALORIE,
calorie_);
}
}
#include "RegisterDialModel.h"
#include "DialModelCharge.h"
#include "wearable_log.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_CHARGE, OHOS::DialModelCharge::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::CHARGING_STATUS, OHOS::DialModelCharge::GetInstance());
namespace OHOS
{
chargeStatus_ = static_cast<float>(chargeStatus);
if (onChangeListener_ != nullptr)
{
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_CHARGE, chargeStatus_);
+ onChangeListener_->OnDialFloatDataUpdate(OHOS::DialDataType::CHARGING_STATUS, chargeStatus_);
}
}
}
#include <time.h>
#include <vector>
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_DATE_EN_STR,
+REGIST_DIAL_MODULE(OHOS::DialDataType::DATE_EN_STR,
OHOS::DialModelDateEnStr::GetInstance());
namespace OHOS {
#include "wearable_log.h"
#include <vector>
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_DATE_STR, OHOS::DialModelDateStr::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::DATE_STR, OHOS::DialModelDateStr::GetInstance());
namespace OHOS
{
// CnDatedays 是一个包含星期字符串的数组
namespace OHOS
{
- REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_DATE_WEEK_MD_STR, OHOS::DialModelDateWeekMDStr::GetInstance());
+ REGIST_DIAL_MODULE(OHOS::DialDataType::DATE_WEEK_MD_STR, OHOS::DialModelDateWeekMDStr::GetInstance());
// Cnweekdays 是一个包含周字符串的数组
constexpr const char *Cnweekdays[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
dateweekmdstr = *dialDateWeekMDStr; // 更新字符串
if (onChangeListener_ != nullptr)
{
- onChangeListener_->OnDialTextDataUpdate(DialDataType::DATA_TYPE_DATE_WEEK_MD_STR, &dateweekmdstr, dateweekmdstr.size());
+ onChangeListener_->OnDialTextDataUpdate(OHOS::DialDataType::DATE_WEEK_MD_STR, &dateweekmdstr, dateweekmdstr.size());
}
}
} // namespace OHOS
\ No newline at end of file
#include <string>
#include <time.h>
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_DATE_WEEK_STR,
+REGIST_DIAL_MODULE(OHOS::DialDataType::DATE_WEEK_STR,
OHOS::DialModelDateWeekStr::GetInstance());
namespace OHOS {
dateweekstr = *dialWeekStr; // 更新字符串
if (onChangeListener_ != nullptr) {
onChangeListener_->OnDialTextDataUpdate(
- DialDataType::DATA_TYPE_DATE_WEEK_STR, &dateweekstr,
+ OHOS::DialDataType::DATE_WEEK_STR, &dateweekstr,
dateweekstr.size());
}
}
#include "RegisterDialModel.h"
#include "DialModelDistance.h"
#include "wearable_log.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_DISTANCE, OHOS::DialModelDistance::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::DISTANCE_DATA, OHOS::DialModelDistance::GetInstance());
#include "goal/include/goalmodel.h"
// #include "cywee_hal.h"
// extern "C" int cywee_get_distance_data();
if (onChangeListener_ != nullptr) {
// 通知改变监听器更新距离数据
onChangeListener_->OnDialFloatDataUpdate(
- DialDataType::DATA_TYPE_DISTANCE, distance_);
+ OHOS::DialDataType::DISTANCE_DATA, distance_);
}
}
}
#include "DialModelHeartRate.h"
#include "wearable_log.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_HEART_RATE, OHOS::DialModelHeartRate::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::HEART_RATE, OHOS::DialModelHeartRate::GetInstance());
namespace OHOS
{
heartRate_ = static_cast<float>(heartRate);
if (onChangeListener_ != nullptr)
{
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_HEART_RATE, heartRate_);
+ onChangeListener_->OnDialFloatDataUpdate(OHOS::DialDataType::HEART_RATE, heartRate_);
}
}
+++ /dev/null
-/***
- * @Date: 2024-08-08 16:15:49
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-08-08 16:28:43
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelHourMin.cpp
- */
-#include "RegisterDialModel.h"
-#include "DialModelHourMin.h"
-#include <string>
-#include <ctime>
-#include <time.h>
-#include "sys/time.h"
-#include "wearable_log.h"
-#include <vector>
-
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_HOUR_MIN, OHOS::DialModelHourMin::GetInstance());
-namespace OHOS
-{
- /*继承的虚函数 不能修改*/
- bool DialModelHourMin::GetDialFloatData(DialDataType &type, float *&out, int16_t len)
- {
- (void)type;
-
- struct tm local_time = {0};
- time_t seconds = time(nullptr);
-
- if (localtime_r(&seconds, &local_time) == nullptr)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "get localtime error!");
- return false;
- }
-
- out[0] = static_cast<float>(local_time.tm_hour);
- out[1] = static_cast<float>(local_time.tm_min);
- // printf("GetDialFloatData %f %f\r\n", out[0], out[1]);
- len = 2;
- return true;
- }
-
- void DialModelHourMin::UpdateHourMin(const std::string *&dialHourMin)
- {
- // dialdateStr_.clear();
- // dialdateStr_ = *dialHourMin; // 更新字符串
- // if (onChangeListener_ != nullptr)
- // {
- // onChangeListener_->OnDialTextDataUpdate(DialDataType::DialModelMinUnits, &dialdateStr_, dialdateStr_.size());
- // }
- }
-}
\ No newline at end of file
#include "custom_runtime.h"
// 注册模块
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_HOUR_TENS, OHOS::DialModelHourTens::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::CLOCK_HIGH, OHOS::DialModelHourTens::GetInstance());
namespace OHOS
{
#include "custom_runtime.h"
// 注册模块
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_HOUR_UNITS, OHOS::DialModelHourUnits::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::CLOCK_LOW, OHOS::DialModelHourUnits::GetInstance());
namespace OHOS
{
#include "RegisterDialModel.h"
#include "goal/include/goalmodel.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_CALORIE_GOAL,
+REGIST_DIAL_MODULE(OHOS::DialDataType::CALORIE_GOAL_BOXPROGRESS,
OHOS::DialModelKcalgoal::GetInstance());
namespace OHOS {
}
if (onChangeListener_ != nullptr) {
onChangeListener_->OnDialFloatDataUpdate(
- DialDataType::DATA_TYPE_CALORIE_GOAL, Kcalgoal_);
+ OHOS::DialDataType::CALORIE_GOAL_BOXPROGRESS, Kcalgoal_);
}
out = DialBoxProgressView::GetInstance()->ConvertToRequiredFormat(
DialBoxDataType::CALORIE_TARGET, Kcalgoal_);
}
if (onChangeListener_ != nullptr) {
onChangeListener_->OnDialFloatDataUpdate(
- DialDataType::DATA_TYPE_CALORIE_GOAL, Kcalgoal_);
+ OHOS::DialDataType::CALORIE_GOAL_BOXPROGRESS, Kcalgoal_);
}
}
} // namespace OHOS
#include "RegisterDialModel.h"
#include "goal/include/goalmodel.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_CALORIE_GOAL_STR,
+REGIST_DIAL_MODULE(OHOS::DialDataType::CALORIE_GOAL_STR,
OHOS::DialModelKcalgoalStr::GetInstance());
namespace OHOS {
if (onChangeListener_ != nullptr) {
onChangeListener_->OnDialTextDataUpdate(
- DialDataType::DATA_TYPE_CALORIE_GOAL_STR, &KcalgoalStr_,
+ OHOS::DialDataType::CALORIE_GOAL_STR, &KcalgoalStr_,
KcalgoalStr_.size());
}
}
#include "RegisterDialModel.h"
#include "goal/include/goalmodel.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_CALORIE_GOAL_INT,
+REGIST_DIAL_MODULE(OHOS::DialDataType::CALORIE_RATIO,
OHOS::DialModelKcalgoalValue::GetInstance());
namespace OHOS {
if (onChangeListener_) {
onChangeListener_->OnDialFloatDataUpdate(
- DialDataType::DATA_TYPE_CALORIE_GOAL_INT, KcalgoalValue_);
+ OHOS::DialDataType::CALORIE_RATIO, KcalgoalValue_);
}
}
} // namespace OHOS
#include "custom_runtime.h"
// 注册模块
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_MINUTE_TENS, OHOS::DialModelMinTens::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::MINUTE_HIGH, OHOS::DialModelMinTens::GetInstance());
namespace OHOS
{
#include "custom_runtime.h"
// 注册模块
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_MINUTE_UNITS, OHOS::DialModelMinUnits::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::MINUTE_LOW, OHOS::DialModelMinUnits::GetInstance());
namespace OHOS
{
+++ /dev/null
-#include "RegisterDialModel.h"
-#include "DialModelPath.h"
-#include <string>
-
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_DIALPATH, OHOS::DialModelPath::GetInstance());
-
-namespace OHOS
-{
- bool DialModelPath::GetDialTextData(DialDataType &type, std::string *&out, int16_t &strNum)
- {
- (void)type;
- out = &DialPath_;
- return true;
- }
-
- void DialModelPath::UpdatePath(const std::string *&DialPath)
- {
- DialPath_ = *DialPath;
- if (onChangeListener_ != nullptr)
- {
- onChangeListener_->OnDialTextDataUpdate(DialDataType::DATA_TYPE_HEART_RATE, &DialPath_, 0);
- }
- }
-}
// #include "battery_hal.h"
// extern uint8_t battery_get_voltage(float *voltage);
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_POWER, OHOS::DialModelPower::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::BATTERY, OHOS::DialModelPower::GetInstance());
namespace OHOS
{
}
if (onChangeListener_ != nullptr)
{
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_POWER, power_);
+ onChangeListener_->OnDialFloatDataUpdate(OHOS::DialDataType::BATTERY, power_);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[UpdatePower!]\r\n");
}
}
#include "battery_hal.h"
extern uint8_t battery_get_voltage(float *voltage);
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_POWER_MAPPER,
+REGIST_DIAL_MODULE(OHOS::DialDataType::BATTERY_LEVEL,
OHOS::DialModelPowerMapper::GetInstance());
namespace OHOS {
}
if (onChangeListener_ != nullptr) {
onChangeListener_->OnDialFloatDataUpdate(
- DialDataType::DATA_TYPE_POWER_MAPPER, powermapper_);
+ OHOS::DialDataType::BATTERY_LEVEL, powermapper_);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[UpdatePowerMapper!]\r\n");
}
}
#include "battery_hal.h"
extern uint8_t battery_get_voltage(float *voltage);
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_POWER_STANDBY,
+REGIST_DIAL_MODULE(OHOS::DialDataType::POWER_STANDBY,
OHOS::DialModelPowerStanby::GetInstance());
namespace OHOS {
}
if (onChangeListener_ != nullptr) {
onChangeListener_->OnDialFloatDataUpdate(
- DialDataType::DATA_TYPE_POWER_STANDBY, PowerStanby_);
+ OHOS::DialDataType::POWER_STANDBY, PowerStanby_);
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[UpdatePowerStanby!]\r\n");
}
}
namespace OHOS
{
- REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_POWER_STR,OHOS::DialModelPowerStr::GetInstance());
+ REGIST_DIAL_MODULE(OHOS::DialDataType::POWER_STR,OHOS::DialModelPowerStr::GetInstance());
bool DialModelPowerStr::GetDialTextData(DialDataType &type, std::string *&out, int16_t &strNum)
{
dialPowerStr_ = dialPowerStr; // 更新字符串
if (onChangeListener_ != nullptr)
{
- onChangeListener_->OnDialTextDataUpdate(DialDataType::DATA_TYPE_POWER_STR, &dialPowerStr_, 1);
+ onChangeListener_->OnDialTextDataUpdate(OHOS::DialDataType::POWER_STR, &dialPowerStr_, 1);
}
}
}
\ No newline at end of file
#include "DialModelSPO2.h"
#include "wearable_log.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_SPO2, OHOS::DialModelSPO2::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::BLOOD_OXYGEN, OHOS::DialModelSPO2::GetInstance());
namespace OHOS
{
SPO2_ = static_cast<float>(SPO2);
if (onChangeListener_ != nullptr)
{
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_SPO2, SPO2_);
+ onChangeListener_->OnDialFloatDataUpdate(OHOS::DialDataType::BLOOD_OXYGEN, SPO2_);
}
}
#include <sys/time.h>
// 注册模块
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_SECOND_MAPPER,
+REGIST_DIAL_MODULE(OHOS::DialDataType::SECOND_RATIO,
OHOS::DialModelSecondMapper::GetInstance());
namespace OHOS {
#include "RegisterDialModel.h"
#include "goal/include/goalmodel.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_STEPS_GOAL,
+REGIST_DIAL_MODULE(OHOS::DialDataType::STEPS_GOAL_BOXPROGRESS,
OHOS::DialModelStepgoal::GetInstance());
namespace OHOS {
DialBoxDataType::STEP_TARGET, stepgoal_);
}
if (onChangeListener_ != nullptr) {
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_STEPS_GOAL,
+ onChangeListener_->OnDialFloatDataUpdate(OHOS::DialDataType::STEPS_GOAL_BOXPROGRESS,
stepgoal_);
}
}
#include "RegisterDialModel.h"
#include "goal/include/goalmodel.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_STEPS_GOAL_STR,
+REGIST_DIAL_MODULE(OHOS::DialDataType::STEPS_GOAL_STR,
OHOS::DialModelStepgoalStr::GetInstance());
namespace OHOS {
if (onChangeListener_ != nullptr) {
onChangeListener_->OnDialTextDataUpdate(
- DialDataType::DATA_TYPE_STEPS_GOAL_STR, &StepgoalStr_,
+ OHOS::DialDataType::STEPS_GOAL_STR, &StepgoalStr_,
StepgoalStr_.size());
}
}
#include "RegisterDialModel.h"
#include "goal/include/goalmodel.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_STEPS_GOAL_INT,
+REGIST_DIAL_MODULE(OHOS::DialDataType::STEP_GOAL_PROGRESS,
OHOS::DialModelStepgoalValue::GetInstance());
namespace OHOS {
if (onChangeListener_ != nullptr) {
//更新百分比 实际值
onChangeListener_->OnDialFloatDataUpdate(
- DialDataType::DATA_TYPE_STEPS_GOAL_INT, stepgoalValue_);
+ OHOS::DialDataType::STEP_GOAL_PROGRESS, stepgoalValue_);
}
}
} // namespace OHOS
#include "RegisterDialModel.h"
#include "goal/include/goalmodel.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_STEPS,
+REGIST_DIAL_MODULE(OHOS::DialDataType::STEP_COUNT,
OHOS::DialModelSteps::GetInstance());
namespace OHOS {
void DialModelSteps::UpdateSteps(uint32_t steps) {
steps_ = static_cast<float>(steps);
if (onChangeListener_ != nullptr) {
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_STEPS,
+ onChangeListener_->OnDialFloatDataUpdate(OHOS::DialDataType::STEP_COUNT,
steps_);
}
}
* Create: 2023-12
*/
+#include <cmath>
#include "sys/time.h"
#include "RegisterDialModel.h"
#include "DialModelTime.h"
#define REGIST_DIAL_MODULE_WEEK(type, func) static OHOS::RegisterDialModel(REGIST_WEEK)(type, func)
#define REGIST_DIAL_MODULE_MOUNTH(type, func) static OHOS::RegisterDialModel(REGIST_MOUNTH)(type, func)
#define REGIST_DIAL_MODULE_YEAR(type, func) static OHOS::RegisterDialModel(REGIST_YEAR)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_ONE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_ONE)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_TWO(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_TWO)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_THREE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_THREE)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_FOUR(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_FOUR)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_FIVE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_FIVE)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_SIX(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_SIX)(type, func)
-
-REGIST_DIAL_MODULE_ANGLE_H(DialDataType::DATA_TYPE_CLOCK_ANGLE_H, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_ANGLE_M(DialDataType::DATA_TYPE_CLOCK_ANGLE_M, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_ANGLE_S(DialDataType::DATA_TYPE_CLOCK_ANGLE_S, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_ANGLE_MS(DialDataType::DATA_TYPE_CLOCK_ANGLE_MS, OHOS::DialModelTime::GetInstance());
-
-REGIST_DIAL_MODULE_SECOND(DialDataType::DATA_TYPE_TIME_SECOND, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_MINUTE(DialDataType::DATA_TYPE_TIME_MINUTE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_HOUR(DialDataType::DATA_TYPE_TIME_HOUR, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_DATE(DialDataType::DATA_TYPE_TIME_DATE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_WEEK(DialDataType::DATA_TYPE_TIME_WEEK, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_MOUNTH(DialDataType::DATA_TYPE_TIME_MONTH, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_YEAR(DialDataType::DATA_TYPE_TIME_YEAR, OHOS::DialModelTime::GetInstance());
-
-REGIST_DIAL_MODULE_GEAR_ONE(DialDataType::DATA_TYPE_SWIVEL_GEAR_ONE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_TWO(DialDataType::DATA_TYPE_SWIVEL_GEAR_TWO, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_THREE(DialDataType::DATA_TYPE_SWIVEL_GEAR_THREE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_FOUR(DialDataType::DATA_TYPE_SWIVEL_GEAR_FOUR, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_FIVE(DialDataType::DATA_TYPE_SWIVEL_GEAR_FIVE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_SIX(DialDataType::DATA_TYPE_SWIVEL_GEAR_SIX, OHOS::DialModelTime::GetInstance());
+#define REGIST_DIAL_MODULE_GEAR_POSITIVE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_POSITIVE)(type, func)
+#define REGIST_DIAL_MODULE_GEAR_NEGATIVE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_NEGATIVE)(type, func)
+
+REGIST_DIAL_MODULE_ANGLE_H(OHOS::DialDataType::CLOCK_ANGLE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_ANGLE_M(OHOS::DialDataType::MINUTE_ANGLE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_ANGLE_S(OHOS::DialDataType::SECOND_ANGLE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_ANGLE_MS(OHOS::DialDataType::MILLISECOND_ANGLE, OHOS::DialModelTime::GetInstance());
+
+REGIST_DIAL_MODULE_SECOND(OHOS::DialDataType::SECOND_TIME, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_MINUTE(OHOS::DialDataType::MINUTE_TIME, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_HOUR(OHOS::DialDataType::CLOCK, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_DATE(OHOS::DialDataType::DATE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_WEEK(OHOS::DialDataType::WEEKDAY_DATA, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_MOUNTH(OHOS::DialDataType::MONTH, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_YEAR(OHOS::DialDataType::SOLAR_YEAR, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_GEAR_POSITIVE(OHOS::DialDataType::SWIVEL_GEAR_POSITIVE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_GEAR_NEGATIVE(OHOS::DialDataType::SWIVEL_GEAR_NEGATIVE, OHOS::DialModelTime::GetInstance());
namespace OHOS {
static constexpr int16_t S_MS_US_TRANS = 1000; // 1000: seconds, milliseconds, microsecond transform value
static uint16_t ConvertHandValueToAngle(int32_t handValue, uint8_t range, int32_t secondHandValue, uint16_t ratio)
{
- #ifdef fd230_650
- if ((range == 0) || (ratio == 0)) {
- return 0;
- }
- /*
- * Example: calculate the angle of hour hand
- * Assume that the time is 5: 30, then range is 12, radio is 60
- * angle is [(5 * 60 + 30) / (12 * 60)] * 360
- */
- int32_t degree = (handValue * ratio + secondHandValue);
- degree = CIRCLE_IN_DEGREE_UI * degree / (static_cast<uint16_t>(range) * ratio);
-
- return static_cast<uint16_t>(degree % CIRCLE_IN_DEGREE_UI);
- #endif
-
- /* -------------------------------- 0423补丁合入 -------------------------------- */
if ((range == 0) || (ratio == 0)) {
return 0;
}
static float ConvertHandSecondValueToAngle(int32_t handValue, uint16_t range)
{
- #ifdef fd230_650
- /*
- * Example: calculate the angle of second hand without millisecond handle
- * Assume that the time is 5:30:30, then range is 60
- * angle is (30 / 60) * 360
- */
- return (static_cast<float>(handValue * CIRCLE_IN_DEGREE_UI) / range);
- #endif
- /* -------------------------------- 0423补丁合入 -------------------------------- */
/*
* Example: calculate the angle of second hand without millisecond handle
* Assume that the time is 5:30:30, then range is 60
void DialModelTime::UpdateTime()
{
-#ifdef fd230_650
-#if 0
- struct timeval tv;
- gettimeofday(&tv, NULL);
- tblock_ = localtime(&tv.tv_sec);
- int realMS = tblock_.tm_sec * S_MS_US_TRANS + tv.tv_usec / S_MS_US_TRANS;
-#else
- /*优化为更安全的localtime_r()*/
- struct timeval tv;
- gettimeofday(&tv, NULL);
- struct tm tmp={0};
- localtime_r(&tv.tv_sec, &tmp);
- int realMS = tmp.tm_sec * S_MS_US_TRANS + tv.tv_usec / S_MS_US_TRANS;
- tblock_.tm_year = tmp.tm_year;
- tblock_.tm_mon = tmp.tm_mon;
- tblock_.tm_mday = tmp.tm_mday;
- tblock_.tm_wday = tmp.tm_wday;
- tblock_.tm_hour = tmp.tm_hour;
- tblock_.tm_min = tmp.tm_min;
- tblock_.tm_sec = tmp.tm_sec;
-
- if (uapi_dev_runtime_get_time_hour_show_model() == 12)
- {
- if (tmp.tm_hour > 12)
- tblock_.tm_hour = tmp.tm_hour - 12 ;
- }
-#endif
-
- angleH_ = ConvertHandValueToAngle(tblock_.tm_hour, HALF_DAY_IN_HOUR, tblock_.tm_min, ONE_HOUR_IN_MINUTE);
- angleM_ = ConvertHandValueToAngle(tblock_.tm_min, ONE_HOUR_IN_MINUTE, tblock_.tm_sec, ONE_MINUTE_IN_SECOND);
- angleS_ = ConvertHandValueToAngle(tblock_.tm_sec, ONE_MINUTE_IN_SECOND, 0, 1);
- angleMS_ = ConvertHandSecondValueToAngle(realMS, S_MS_US_TRANS * ONE_MINUTE_IN_SECOND);
-
- #endif
-
- /* --------------------------------- 0423补丁 --------------------------------- */
struct timeval tv;
gettimeofday(&tv, nullptr);
+#ifdef _WIN32
+ time_t time = tv.tv_sec;
+ if (tblock_ == nullptr) {
+ tblock_ = new struct tm();
+ memset_s(tblock_, sizeof(struct tm), 0, sizeof(struct tm));
+ }
+ localtime_s(tblock_, &time);
+#else
tblock_ = localtime(&tv.tv_sec);
+#endif
int realMS = tblock_->tm_sec * S_MS_US_TRANS + tv.tv_usec / S_MS_US_TRANS;
angleH_ = ConvertHandValueToAngle(tblock_->tm_hour, HALF_DAY_IN_HOUR, tblock_->tm_min, ONE_HOUR_IN_MINUTE);
angleM_ = ConvertHandValueToAngle(tblock_->tm_min, ONE_HOUR_IN_MINUTE, tblock_->tm_sec, ONE_MINUTE_IN_SECOND);
angleS_ = ConvertHandValueToAngle(tblock_->tm_sec, ONE_MINUTE_IN_SECOND, 0, 1);
angleMS_ = ConvertHandSecondValueToAngle(realMS, S_MS_US_TRANS * ONE_MINUTE_IN_SECOND);
+
if (tblock_ == nullptr) {
return;
}
}
}
RootView::GetInstance()->Invalidate();
- /* -------------------------------------------------------------------------- */
}
void DialModelTime::Register(TimeChangeListener* listener)
bool DialModelTime::GetDialFloatData(DialDataType& type, float& out)
{
- #ifdef fd230_650
- UpdateTime();
-
- switch (type) {
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_H:
- out = static_cast<float>(angleH_);
- break;
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_M:
- out = static_cast<float>(angleM_);
- break;
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_S:
- out = static_cast<float>(angleS_);
- break;
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_MS:
- out = static_cast<float>(angleMS_);
- break;
- case DialDataType::DATA_TYPE_TIME_YEAR:
- out = static_cast<float>((tblock_.tm_year) + 1900);
- break;
- case DialDataType::DATA_TYPE_TIME_MONTH:
- out = static_cast<float>((tblock_.tm_mon) + 1);
- break;
- case DialDataType::DATA_TYPE_TIME_WEEK:
- out = static_cast<float>(tblock_.tm_wday);
- break;
- case DialDataType::DATA_TYPE_TIME_DATE:
- out = static_cast<float>(tblock_.tm_mday);
- break;
- case DialDataType::DATA_TYPE_TIME_HOUR:
- out = static_cast<float>(tblock_.tm_hour);
- break;
- case DialDataType::DATA_TYPE_TIME_MINUTE:
- out = static_cast<float>(tblock_.tm_min);
- break;
- case DialDataType::DATA_TYPE_TIME_SECOND:
- out = static_cast<float>(tblock_.tm_sec);
- break;
- default:
- return false;
- }
- return true;
- #endif
-
- /* --------------------------------- 0423补丁 --------------------------------- */
if (tblock_ == nullptr) {
UpdateTime();
}
switch (type) {
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_H:
+ case OHOS::DialDataType::CLOCK_ANGLE:
out = static_cast<float>(angleH_);
break;
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_M:
+ case OHOS::DialDataType::MINUTE_ANGLE:
out = static_cast<float>(angleM_);
break;
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_S:
+ case OHOS::DialDataType::SECOND_ANGLE:
out = static_cast<float>(angleS_);
break;
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_MS:
+ case OHOS::DialDataType::MILLISECOND_ANGLE:
out = static_cast<float>(angleMS_);
break;
- case DialDataType::DATA_TYPE_TIME_YEAR:
+ case OHOS::DialDataType::SOLAR_YEAR:
out = static_cast<float>(tblock_->tm_year);
break;
- case DialDataType::DATA_TYPE_TIME_MONTH:
+ case OHOS::DialDataType::MONTH:
out = static_cast<float>(tblock_->tm_mon);
break;
- case DialDataType::DATA_TYPE_TIME_WEEK:
+ case OHOS::DialDataType::WEEKDAY_DATA:
out = static_cast<float>(tblock_->tm_wday);
break;
- case DialDataType::DATA_TYPE_TIME_DATE:
+ case OHOS::DialDataType::DATE:
out = static_cast<float>(tblock_->tm_mday);
break;
- case DialDataType::DATA_TYPE_TIME_HOUR:
+ case OHOS::DialDataType::CLOCK:
out = static_cast<float>(tblock_->tm_hour);
break;
- case DialDataType::DATA_TYPE_TIME_MINUTE:
+ case OHOS::DialDataType::MINUTE_TIME:
out = static_cast<float>(tblock_->tm_min);
break;
- case DialDataType::DATA_TYPE_TIME_SECOND:
+ case OHOS::DialDataType::SECOND_TIME:
out = static_cast<float>(tblock_->tm_sec);
break;
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_TWO:
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_THREE:
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_FIVE: {
+ case DialDataType::SWIVEL_GEAR_POSITIVE: {
float coeff = 6.0f; // 6.0: coeff
float accleratedAngle = angleMS_ * coeff - floor(angleMS_ * coeff / CIRCLE_IN_DEGREE) * CIRCLE_IN_DEGREE;
- out = static_cast<float>(accleratedAngle * -1.0 + CIRCLE_IN_DEGREE);
+ out = static_cast<float>(accleratedAngle);
break;
}
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_ONE:
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_FOUR:
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_SIX: {
+ case DialDataType::SWIVEL_GEAR_NEGATIVE: {
float coeff = 6.0f; // 6.0: coeff
float accleratedAngle = angleMS_ * coeff - floor(angleMS_ * coeff / CIRCLE_IN_DEGREE) * CIRCLE_IN_DEGREE;
- out = static_cast<float>(accleratedAngle);
+ out = static_cast<float>(accleratedAngle * -1.0 + CIRCLE_IN_DEGREE);
break;
}
default:
}
return true;
}
+
+void TimeChangeListener::SetTimeInervals(TimeInterval *intervals, uint8_t num)
+{
+ if (intervals == nullptr || num == 0) {
+ return;
+ }
+ if (intervals_ != nullptr) {
+ UIFree(intervals_);
+ intervals_ = nullptr;
+ }
+ num_ = 0;
+
+ intervals_ = static_cast<TimeInterval*>(UIMalloc(sizeof(TimeInterval) * num));
+ if (intervals_ == nullptr) {
+ GRAPHIC_LOGE("failed to malloc!");
+ return;
+ }
+ num_ = num;
+ memcpy_s(intervals_, sizeof(TimeInterval) * num, intervals, sizeof(TimeInterval) * num);
+}
+
+bool TimeChangeListener::IsInTimeInterval(const struct tm &curTime)
+{
+ if (num_ == 0) { // 0-24
+ return true;
+ }
+ for (uint8_t i = 0; i < num_; ++i) {
+ if (intervals_[i].start <= curTime.tm_hour && intervals_[i].end > curTime.tm_hour) {
+ return true;
+ }
+ }
+ return false;
+}
+
+TimeChangeListener::TimeChangeListener()
+{
+ DialModelTime::GetInstance()->Register(this);
+}
+
+TimeChangeListener::~TimeChangeListener()
+{
+ if (intervals_ != nullptr) {
+ UIFree(intervals_);
+ intervals_ = nullptr;
+ }
+ num_ = 0;
+ DialModelTime::GetInstance()->Unregister(this);
+}
}
#include <time.h>
#include <vector>
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_TIMESTR_STR,
+REGIST_DIAL_MODULE(OHOS::DialDataType::TIMESTR_STR,
OHOS::DialModelTimeStr::GetInstance());
namespace OHOS {
dialTimeStr_.clear();
dialTimeStr_ = dialTimeStr; // 更新字符串
if (onChangeListener_ != nullptr) {
- onChangeListener_->OnDialTextDataUpdate(DialDataType::DATA_TYPE_TIMESTR_STR,
+ onChangeListener_->OnDialTextDataUpdate(OHOS::DialDataType::TIMESTR_STR,
&dialTimeStr_, 1);
}
}
#include "RegisterDialModel.h"
#include "DialModelWeather.h"
#include "wearable_log.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_WEATHER, OHOS::DialModelWeather::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::WEATHER_TYPE, OHOS::DialModelWeather::GetInstance());
namespace OHOS
{
Weather_ = static_cast<float>(Weather - 1);
if (onChangeListener_ != nullptr)
{
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_WEATHER, Weather_);
+ onChangeListener_->OnDialFloatDataUpdate(OHOS::DialDataType::WEATHER_TYPE, Weather_);
}
}
}
#include "sys/time.h"
#include "wearable_log.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_WEATHER_STR, OHOS::DialModelWeatherStr::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::WEATHER_STR, OHOS::DialModelWeatherStr::GetInstance());
namespace OHOS
{
dialWeatherStr_ = dialWeatherStr; // 更新字符串
if (onChangeListener_ != nullptr)
{
- onChangeListener_->OnDialTextDataUpdate(DialDataType::DATA_TYPE_WEATHER_STR, &dialWeatherStr_, 1);
+ onChangeListener_->OnDialTextDataUpdate(OHOS::DialDataType::WEATHER_STR, &dialWeatherStr_, 1);
}
}
}
\ No newline at end of file
#include <string>
#include <time.h>
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_WEEK_EN_STR,
+REGIST_DIAL_MODULE(OHOS::DialDataType::WEEK_EN_STR,
OHOS::DialModelWeekEnStr::GetInstance());
namespace OHOS {
// CnWeekEndays 是一个包含星期字符串的数组
dialWeekEnStr_.clear();
dialWeekEnStr_ = *dialWeekEnStr; // 更新字符串
if (onChangeListener_ != nullptr) {
- onChangeListener_->OnDialTextDataUpdate(DialDataType::DATA_TYPE_WEEK_EN_STR,
+ onChangeListener_->OnDialTextDataUpdate(OHOS::DialDataType::WEEK_EN_STR,
&dialWeekEnStr_,
dialWeekEnStr_.size());
}
#include <string>
#include <time.h>
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_WEEK_NUM,
+REGIST_DIAL_MODULE(OHOS::DialDataType::WEEK_NUM,
OHOS::DialModelWeekNum::GetInstance());
namespace OHOS {
#include "wearable_log.h"
#include <sstream>
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_WEEK_STR, OHOS::DialModelWeekStr::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::WEEK_STR, OHOS::DialModelWeekStr::GetInstance());
namespace OHOS
{
// Cnweekdays 是一个包含星期字符串的数组
dialWeekStr_ = *dialWeekStr; // 更新字符串
if (onChangeListener_ != nullptr)
{
- onChangeListener_->OnDialTextDataUpdate(DialDataType::DATA_TYPE_WEEK_STR, &dialWeekStr_, dialWeekStr_.size());
+ onChangeListener_->OnDialTextDataUpdate(OHOS::DialDataType::WEEK_STR, &dialWeekStr_, dialWeekStr_.size());
}
}
}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialSequenceContainer
- * Author:
- * Create: 2025-03-05
- */
-
-#include "DialSequenceContainer.h"
-
-namespace OHOS {
-DialSequenceContainer::DialSequenceContainer()
-{
- SetTouchable(true);
- SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
- memset_s(nonCycleView_, sizeof(nonCycleView_), 0, sizeof(nonCycleView_));
-}
-
-DialSequenceContainer::~DialSequenceContainer()
-{
- if (repeatView_ != nullptr) {
- delete repeatView_;
- repeatView_ = nullptr;
- }
-
- for (uint8_t i = 0; i < nonCycleNum_; ++i) {
- delete nonCycleView_[i];
- nonCycleView_[i] = nullptr;
- }
- nonCycleNum_ = 0;
- curView_ = nullptr;
-}
-
-bool DialSequenceContainer::AddSequenceRes(uint16_t interval, bool repeat,
- const ImageAnimatorInfo *imgSrc, uint8_t imgNum)
-{
- if (imgSrc == nullptr || imgNum == 0) {
- return false;
- }
-
- // add animator images to view
- if (repeat) {
- if (repeatView_ != nullptr) {
- GRAPHIC_LOGE("the repeat seq view has existed!");
- return false;
- }
- repeatView_ = new UIImageAnimatorView;
- repeatView_->SetImageAnimatorSrc(imgSrc, imgNum, interval);
- repeatView_->SetRepeat(false);
- } else {
- if (nonCycleNum_ >= sizeof(nonCycleView_) / sizeof(nonCycleView_[0])) {
- GRAPHIC_LOGE("non cycle seq views have been exceedeed!");
- return false;
- }
- nonCycleView_[nonCycleNum_] = new UIImageAnimatorView;
- nonCycleView_[nonCycleNum_]->SetImageAnimatorSrc(imgSrc, imgNum, interval);
- nonCycleView_[nonCycleNum_]->SetRepeat(false);
- ++nonCycleNum_;
- }
-
- // update rect area
- Rect rect(GetRelativeRect());
- for (uint8_t i = 0; i < imgNum; ++i) {
- rect.JoinRect(rect,
- Rect(rect.GetX(),
- rect.GetY(),
- rect.GetX() + imgSrc[i].width - 1,
- rect.GetY() + imgSrc[i].height - 1));
- }
- rect.JoinRect(rect, GetRelativeRect());
- SetPosition(rect.GetX(), rect.GetY());
- SetWidth(rect.GetWidth());
- SetHeight(rect.GetHeight());
- Invalidate();
-
- return true;
-}
-
-bool DialSequenceContainer::OnClickEvent(const ClickEvent& event)
-{
- if (curView_ == nullptr) {
- return false;
- }
- uint8_t curState = curView_->GetState();
- switch (curState) {
- case Animator::STOP: {
- if (curView_ == repeatView_) {
- isClick_ = true;
- } else {
- UpdateCurrentView();
- Start();
- }
- break;
- }
- case Animator::PAUSE: {
- return false;
- }
- case Animator::RUNNING:
- case Animator::START: {
- if (curView_ == repeatView_) {
- isClick_ = true;
- }
- break;
- }
- default: {
- GRAPHIC_LOGE("error state");
- }
- }
-
- return UIViewGroup::OnClickEvent(event);
-}
-
-void DialSequenceContainer::Start()
-{
- if (curView_ != nullptr) {
- curView_->Start();
- return;
- }
-
- UpdateCurrentView();
- if (curView_ == nullptr) {
- return;
- }
- curView_->Start();
-}
-
-void DialSequenceContainer::Stop()
-{
- if (curView_ != nullptr) {
- curView_->Stop();
- return;
- }
-
- UpdateCurrentView();
- if (curView_ == nullptr) {
- return;
- }
- curView_->Stop();
-}
-
-void DialSequenceContainer::Pause()
-{
- if (curView_ != nullptr) {
- curView_->Pause();
- return;
- }
-
- UpdateCurrentView();
- if (curView_ == nullptr) {
- return;
- }
- curView_->Pause();
-}
-
-void DialSequenceContainer::Resume()
-{
- if (curView_ != nullptr) {
- curView_->Resume();
- return;
- }
-
- UpdateCurrentView();
- if (curView_ == nullptr) {
- return;
- }
- curView_->Resume();
-}
-
-void DialSequenceContainer::OnAnimatorStop(UIView& view)
-{
- bool isClick = isClick_;
- isClick_ = false;
- bool isRepeat = (curView_ == repeatView_);
- if (isRepeat && isClick) {
- UpdateCurrentView();
- Start();
- } else if (isRepeat && !isClick) {
- Start();
- } else {
- if (repeatView_ != nullptr) {
- UpdateCurrentView();
- Start();
- }
- }
-}
-
-void DialSequenceContainer::UpdateCurrentView()
-{
- if (curView_ != nullptr) {
- if (repeatView_ != nullptr && nonCycleNum_ == 0) {
- return;
- } else if (repeatView_ == nullptr && nonCycleNum_ != 0) {
- Remove(curView_);
- curView_ = nonCycleView_[loop_];
- loop_ = (loop_ + 1) % nonCycleNum_;
- curView_->SetAnimatorStopListener(this);
- Add(curView_);
- Invalidate();
- return;
- }
-
- // both repeat and noncycle exist
- Remove(curView_);
- if (curView_ == repeatView_) {
- curView_ = nonCycleView_[loop_];
- loop_ = (loop_ + 1) % nonCycleNum_;
- } else {
- curView_ = repeatView_;
- }
- curView_->SetAnimatorStopListener(this);
- Add(curView_);
- Invalidate();
- return;
- }
-
- if (repeatView_ != nullptr) {
- curView_ = repeatView_;
- } else if (nonCycleNum_ != 0) {
- curView_ = nonCycleView_[loop_];
- loop_ = (loop_ + 1) % nonCycleNum_;
- } else {
- GRAPHIC_LOGE("sequence img has not been added!");
- return;
- }
- curView_->SetAnimatorStopListener(this);
- Add(curView_);
- Invalidate();
-}
-} // namespace OHOS
#include "DialSequenceImgView.h"
#include "securec.h"
+#include "common/graphic_utils.h"
+#include "common/image_cache_manager.h"
namespace OHOS {
+namespace {
+const uint32_t DIRID = 0xfef << 20; // 20: offset
+}
+
DialSequenceImgView::DialSequenceImgView(void)
{
+ SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+ memset_s(nonCycleSeq_, sizeof(nonCycleSeq_), 0, sizeof(nonCycleSeq_));
}
DialSequenceImgView::~DialSequenceImgView(void)
{
- if (imgSrc_ != nullptr) {
- UIFree(imgSrc_);
+ if (repeatSeq_ != nullptr) {
+ delete repeatSeq_;
+ repeatSeq_ = nullptr;
+ }
+
+ for (uint8_t i = 0; i < nonCycleNum_; ++i) {
+ delete nonCycleSeq_[i];
+ nonCycleSeq_[i] = nullptr;
}
+ nonCycleNum_ = 0;
+ loop_ = 0;
+ isClick_ = false;
+ viewNum_ = 0;
+ isAllImgLoaded_ = false;
+ curSeq_ = nullptr;
}
-bool DialSequenceImgView::SetSequenceRes(const ImageAnimatorInfo* imgSrc, uint8_t imgNum)
+bool DialSequenceImgView::SetSequenceRes(const ImageAnimatorInfo *imgSrc, uint8_t imgNum)
{
if (imgSrc == nullptr || imgNum == 0) {
return false;
}
- if (imgSrc_ != nullptr) {
- UIFree(imgSrc_);
- imgNum_ = 0;
+
+ SetImageAnimatorSrc(imgSrc, imgNum);
+ return true;
+}
+
+bool DialSequenceImgView::SetPreviewImg()
+{
+ if (curSeq_ == nullptr) {
+ UpdateCurrentSeq();
}
- uint32_t size = sizeof(ImageAnimatorInfo) * imgNum;
- imgSrc_ = static_cast<ImageAnimatorInfo*>(UIMalloc(size));
- if (imgSrc_ == nullptr) {
+ if (curSeq_ == nullptr) {
return false;
}
- if (memcpy_s(imgSrc_, size, imgSrc, size) != EOK) {
- UIFree(imgSrc_);
+ SetAnimatorInfo(curSeq_, 1);
+ isAllImgLoaded_ = false;
+ SetSrc(curSeq_->imgs[0].imageInfo);
+ SetPosition(curSeq_->imgs[0].pos.x, curSeq_->imgs[0].pos.y);
+ SetWidth(curSeq_->imgs[0].width);
+ SetHeight(curSeq_->imgs[0].height);
+ Invalidate();
+ return true;
+}
+
+bool DialSequenceImgView::LoadCurSeqImgs()
+{
+ if (curSeq_ == nullptr) {
+ UpdateCurrentSeq();
+ }
+ if (curSeq_ == nullptr) {
return false;
}
- imgNum_ = imgNum;
- SetImageAnimatorSrc(imgSrc_, imgNum_);
+ isAllImgLoaded_ = true;
+ SetAnimatorInfo(curSeq_, curSeq_->info.imgNum);
return true;
}
-}
\ No newline at end of file
+
+bool DialSequenceImgView::AddSequenceRes(const SequenceInfo ¶)
+{
+ if (viewNum_ >= SEQ_IMG_NUM) {
+ GRAPHIC_LOGE("seq num has exceeded!");
+ return false;
+ }
+
+ if (para.repeat) {
+ if (repeatSeq_ != nullptr) {
+ GRAPHIC_LOGE("the repeat seq has existed!");
+ return false;
+ }
+ repeatSeq_ = new AnimatorInfo;
+ repeatSeq_->info = para;
+ } else {
+ if (nonCycleNum_ >= SEQ_IMG_NUM) {
+ GRAPHIC_LOGE("non cycle seq have been exceedeed!");
+ return false;
+ }
+ nonCycleSeq_[nonCycleNum_] = new AnimatorInfo;
+ nonCycleSeq_[nonCycleNum_]->info = para;
+ ++nonCycleNum_;
+ }
+
+ SetTouchable(true);
+ SetAnimatorStopListener(this);
+ SetRepeat(false);
+ ++viewNum_;
+ return true;
+}
+
+bool DialSequenceImgView::OnClickEvent(const ClickEvent &event)
+{
+ if (!isAllImgLoaded_) {
+ return false;
+ }
+ if (curSeq_ == nullptr) {
+ return false;
+ }
+ uint8_t curState = GetState();
+ switch (curState) {
+ case Animator::STOP: {
+ if (curSeq_ == repeatSeq_) {
+ isClick_ = true;
+ } else {
+ UpdateCurrentSeq();
+ SetAnimatorInfo(curSeq_, curSeq_->info.imgNum);
+ Start();
+ }
+ break;
+ }
+ case Animator::PAUSE: {
+ return false;
+ }
+ case Animator::RUNNING:
+ case Animator::START: {
+ if (curSeq_ == repeatSeq_) {
+ isClick_ = true;
+ }
+ break;
+ }
+ default: {
+ GRAPHIC_LOGE("error state");
+ }
+ }
+
+ return UIImageAnimatorView::OnClickEvent(event);
+}
+
+void DialSequenceImgView::OnAnimatorStop(UIView &view)
+{
+ if (!isAllImgLoaded_) {
+ return;
+ }
+ bool isClick = isClick_;
+ isClick_ = false;
+ bool isRepeat = (curSeq_ == repeatSeq_);
+ if (isRepeat && isClick) {
+ UpdateCurrentSeq();
+ SetAnimatorInfo(curSeq_, curSeq_->info.imgNum);
+ Start();
+ } else if (isRepeat && !isClick) {
+ Start();
+ } else {
+ if (repeatSeq_ != nullptr) {
+ UpdateCurrentSeq();
+ SetAnimatorInfo(curSeq_, curSeq_->info.imgNum);
+ Start();
+ }
+ }
+}
+
+ImageAnimatorInfo *DialSequenceImgView::LoadImgs(const SequenceInfo ¶, uint8_t num) const
+{
+ if (para.fp == nullptr || num > para.imgNum) {
+ return nullptr;
+ }
+
+ long curPt = ftell(para.fp);
+ fseek(para.fp, para.resPos, SEEK_SET);
+ uint16_t *imgIdArray = static_cast<uint16_t *>(UIMalloc(sizeof(uint16_t) * num));
+ defer
+ {
+ if (imgIdArray != nullptr) {
+ UIFree(imgIdArray);
+ }
+ fseek(para.fp, curPt, SEEK_SET);
+ };
+ if (imgIdArray == nullptr) {
+ return nullptr;
+ }
+ ImageAnimatorInfo *imgInfoArray = static_cast<ImageAnimatorInfo *>(UIMalloc(num * sizeof(ImageAnimatorInfo)));
+ if (imgInfoArray == nullptr) {
+ return nullptr;
+ }
+
+ if (fread(imgIdArray, 1, sizeof(uint16_t) * num, para.fp) != sizeof(uint16_t) * num) {
+ GRAPHIC_LOGE("failed to read resId");
+ UIFree(imgInfoArray);
+ return nullptr;
+ }
+ for (uint8_t i = 0; i < num; ++i) {
+ uint32_t resId = imgIdArray[i] | DIRID;
+ ImageInfo *info =
+ ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, para.fileName, para.fp, false, para.imgOffset);
+ if (info == nullptr) {
+ GRAPHIC_LOGE("load img fail! file:%s resId:%x", para.fileName.c_str(), resId);
+ UIFree(imgInfoArray);
+ return nullptr;
+ }
+ imgInfoArray[i].imageInfo = info;
+ imgInfoArray[i].pos = {GetRelativeRect().GetX(), GetRelativeRect().GetY()};
+ imgInfoArray[i].width = info->header.width;
+ imgInfoArray[i].height = info->header.height;
+ imgInfoArray[i].imageType = IMG_SRC_IMAGE_INFO;
+ }
+ return imgInfoArray;
+}
+
+void DialSequenceImgView::UpdateCurrentSeq()
+{
+ if (curSeq_ != nullptr) {
+ if (repeatSeq_ != nullptr && nonCycleNum_ == 0) {
+ return;
+ } else if (repeatSeq_ == nullptr && nonCycleNum_ != 0) {
+ curSeq_ = nonCycleSeq_[loop_];
+ loop_ = (loop_ + 1) % nonCycleNum_;
+ return;
+ }
+
+ // both repeat and noncycle exist
+ if (curSeq_ == repeatSeq_) {
+ curSeq_ = nonCycleSeq_[loop_];
+ loop_ = (loop_ + 1) % nonCycleNum_;
+ } else {
+ curSeq_ = repeatSeq_;
+ }
+ return;
+ }
+
+ if (repeatSeq_ != nullptr) {
+ curSeq_ = repeatSeq_;
+ } else if (nonCycleNum_ != 0) {
+ curSeq_ = nonCycleSeq_[loop_];
+ loop_ = (loop_ + 1) % nonCycleNum_;
+ } else {
+ GRAPHIC_LOGE("sequence img has not been added!");
+ return;
+ }
+}
+
+void DialSequenceImgView::SetAnimatorInfo(AnimatorInfo *info, uint8_t num)
+{
+ if (info == nullptr || num == 0) {
+ GRAPHIC_LOGE("para error");
+ return;
+ }
+ if (num > info->info.imgNum) {
+ GRAPHIC_LOGE("The number of images exceeds the limit.");
+ return;
+ }
+
+ if (num == info->num && info->imgs != nullptr) {
+ SetImageAnimatorSrc(info->imgs, info->num, info->info.interval);
+ } else {
+ if (info->imgs != nullptr) {
+ UIFree(info->imgs);
+ }
+ info->num = num;
+ info->imgs = LoadImgs(info->info, info->num);
+ if (info->imgs == nullptr) {
+ return;
+ }
+ SetImageAnimatorSrc(info->imgs, info->num, info->info.interval);
+ }
+}
+} // namespace OHOS
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialTimePublisher
- * Author:
- * Create: 2025-03-04
- */
-
-#include "DialTimePublisher.h"
-#include "securec.h"
-#include "gfx_utils/mem_api.h"
-#include "gfx_utils/graphic_log.h"
-
-namespace OHOS {
-DialTimePublisher *DialTimePublisher::publisher_ = nullptr;
-
-void DialTimePublisher::TimeChangeListener::SetTimeInervals(TimeInterval *intervals, uint8_t num)
-{
- if (intervals == nullptr || num == 0) {
- return;
- }
- if (intervals_ != nullptr) {
- UIFree(intervals_);
- intervals_ = nullptr;
- }
- num_ = 0;
-
- intervals_ = static_cast<TimeInterval*>(UIMalloc(sizeof(TimeInterval) * num));
- if (intervals_ == nullptr) {
- GRAPHIC_LOGE("failed to malloc!");
- return;
- }
- num_ = num;
- memcpy_s(intervals_, sizeof(TimeInterval) * num, intervals, sizeof(TimeInterval) * num);
-}
-
-bool DialTimePublisher::TimeChangeListener::IsInTimeInterval(const struct tm &curTime)
-{
- if (num_ == 0) { // 0-24
- return true;
- }
- for (uint8_t i = 0; i < num_; ++i) {
- if (intervals_[i].start <= curTime.tm_hour && intervals_[i].end > curTime.tm_hour) {
- return true;
- }
- }
- return false;
-}
-
-DialTimePublisher::TimeChangeListener::TimeChangeListener()
-{
- if (DialTimePublisher::GetPublisher() != nullptr) {
- DialTimePublisher::GetPublisher()->Register(this);
- }
-}
-
-DialTimePublisher::TimeChangeListener::~TimeChangeListener()
-{
- if (intervals_ != nullptr) {
- UIFree(intervals_);
- intervals_ = nullptr;
- }
- num_ = 0;
- if (DialTimePublisher::GetPublisher() != nullptr) {
- DialTimePublisher::GetPublisher()->Unregister(this);
- }
-}
-
-void DialTimePublisher::SetPublisher(DialTimePublisher *publisher)
-{
- publisher_ = publisher;
-}
-
-DialTimePublisher *DialTimePublisher::GetPublisher()
-{
- return publisher_;
-}
-} // namespace OHOS
\ No newline at end of file
#include "DialViewContainer.h"
#include "DialDigitalImgView.h"
+#include "ModelDialDataFactory.h"
namespace OHOS {
DialViewContainer::~DialViewContainer()
.type = type,
.isPeriodic = isPeriodic
};
- if (type == DialDataType::DATA_TYPE_MAX) {
+ if (ModelDialDataFactory::GetInstance().GetModuleByType(type) == nullptr) {
hasInvalidBindData_ = true;
}
dialViews_.PushBack(info);
for (uint8_t i = 0; i < index; ++i) {
it = it->next_;
}
- if (it->data_.dialView != nullptr && it->data_.type == DialDataType::DATA_TYPE_MAX) {
+ if (it->data_.dialView != nullptr &&
+ ModelDialDataFactory::GetInstance().GetModuleByType(it->data_.type) == nullptr) {
return true;
}
DialViewContainer *container = dynamic_cast<DialViewContainer*>(it->data_.view);
#include "ui_screennotify.h"
#endif
#include "DialDigitalImgView.h"
+#include "common/input_device_manager.h"
+#include "DialSequenceImgView.h"
+#include "engines/gfx/lite_m_gfx_engine.h"
namespace OHOS
{
static DialVideoView *g_video = nullptr;
static constexpr const char *SLEEPICON = "user/res/dial_state/sleep.bin";
static constexpr const char *LOCKICON = "user/res/dial_state/lock.bin";
-#ifdef SUPPORT_OHOSFWK
- static void ScreenStatusNotify(ScreenStatus status)
- {
- if (g_video == nullptr)
- {
- return;
- }
- // printf("uapi_dev_runtime_get_transmitting_status() %d\n",uapi_dev_runtime_get_transmitting_status());
- // printf("ScreenStatusNotify status %d\n", status);
- // printf("ScreenStatusNotify g_video->IsPlayed() %d\n", g_video->IsPlayed());
- if (status == SCREEN_STATUS_OFF)
- {
- g_video->PausePlay();
- // printf("暂停视频\n");
- }
- else if (status == SCREEN_STATUS_ON)
- {
- if (g_video->IsPaused())
- {
- g_video->ResumePlay();
- // printf("恢复视频\n");
- }
- else if (!g_video->IsPlayed())
- {
- g_video->StartPlay();
- // printf("开始播放\n");
- }
- }
- }
-#endif
DialViewGroup::DialViewGroup(void)
{
SetTouchable(true);
SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
SetCoverable(true);
+ isExists_ = std::make_shared<bool>(true);
}
DialViewGroup::~DialViewGroup(void)
{
- if (video_ != nullptr)
- {
-#ifdef SUPPORT_OHOSFWK
- deregisterNotifyScreenStatus(ScreenStatusNotify);
-#endif
- g_video = nullptr;
- }
if (kaleidoscope_ != nullptr)
{
kaleidoscope_->ClearFocus();
periodicUpdateTypes_.Clear();
- dataTypeMap_.clear();
+ ClearViews();
ListNode<UIView *> *viewNode = dialViews_.Head();
while (viewNode != dialViews_.End())
}
dialViews_.Clear();
- period_ = DEFAULT_TASK_PERIOD;
+ rollingLabelList_.Clear();
+ imgAnimList_.Clear();
+
+ period_ = DEFAULT_TASK_PERIOD;
video_ = nullptr;
}
}
- void DialViewGroup::SetDial(std::string filePath, DisplayState state)
- {
+void DialViewGroup::SetDial(std::string filePath, DisplayState state)
+{
+ if (resPreloaded_) {
ClearDial();
resPreloaded_ = false;
- filePath_ = filePath;
- state_ = state;
}
+ filePath_ = filePath;
+ state_ = state;
+}
void DialViewGroup::UpdateStateShow()
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DialViewGroup::GetElapseTime %d", elapseTime);
}
- void DialViewGroup::ProcessData(DialDataType type, DialView *view)
- {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DialViewGroup::ProcessData type %d\r\n", type);
- int16_t value = static_cast<int16_t>(type) >> 14; // 14: bit shift
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DialViewGroup::ProcessData value %d\r\n", value);
- if (value == 0)
- { // 0: float
- float floatData = 0;
- ModelDialDataFactory::GetInstance().GetDialFloatData(type, floatData);
- view->HandleFloatData(floatData);
- }
- else if (value == 1)
- { // 1: text
- std::string *textData = nullptr;
- int16_t num = 0;
- bool ret = ModelDialDataFactory::GetInstance().GetDialTextData(type, textData, num);
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ModelDialDataFactory type %d num %d ret %d textData %s\r\n", type, num, ret,textData->c_str());
- view->HandleTextData(textData, num);
- }
- else if (value == 2)
- { // 2: multifloat
- float *floatsData = nullptr;
- int16_t num = 0;
- ModelDialDataFactory::GetInstance().GetDialFloatData(type, floatsData, num);
- view->HandleFloatData(floatsData, num);
- }
- }
-
- void DialViewGroup::DoStop(void)
- {
- SetLableAnimatorState(Animator::PAUSE);
- SetImgAnimatorState(Animator::PAUSE);
- if (video_ != nullptr && !video_->IsStopped())
- {
- video_->StopPlay();
+void DialViewGroup::ProcessData(DialDataType type, DialView* view)
+{
+ int16_t value = static_cast<int16_t>(type) >> 13; // 13: bit shift
+ if (value == 0) { // 0: float
+ float floatData = 0;
+ ModelDialDataFactory::GetInstance().GetDialFloatData(type, floatData);
+ view->HandleFloatData(floatData);
+ } else if (value == 1) { // 1: text
+ std::string* textData = nullptr;
+ int16_t num = 0;
+ if (!ModelDialDataFactory::GetInstance().GetDialTextData(type, textData, num)) {
+ std::string tmp = "";
+ view->HandleTextData(&tmp, 1);
+ return;
}
- if (kaleidoscope_ != nullptr)
- {
- kaleidoscope_->StopRotateAnimator();
- kaleidoscope_->ClearFocus();
+ view->HandleTextData(textData, num);
+ } else if (value == 2) { // 2: multifloat
+ float* floatsData = nullptr;
+ int16_t num = 0;
+ if (!ModelDialDataFactory::GetInstance().GetDialFloatData(type, floatsData, num)) {
+ float tmp = 0.0;
+ view->HandleFloatData(&tmp, 1);
+ return;
}
+ view->HandleFloatData(floatsData, num);
+ } else {
+ GRAPHIC_LOGW("invalid datatype %d", static_cast<int>(type));
}
+}
+void DialViewGroup::DoStop(void)
+{
+ SetLableAnimatorState(Animator::PAUSE);
+ SetImgAnimatorState(Animator::PAUSE);
+ if (video_ != nullptr && !video_->IsStopped()) {
+ video_->StopPlay();
+ }
+ if (kaleidoscope_ != nullptr) {
+ kaleidoscope_->StopRotateAnimator();
+ kaleidoscope_->ClearFocus();
+ }
+}
- void DialViewGroup::DoStart(void)
- {
- SetLableAnimatorState(Animator::START);
+void DialViewGroup::DoStart(void)
+{
+ SetLableAnimatorState(Animator::START);
+ if (isSeqImgLoaded_) {
SetImgAnimatorState(Animator::START);
- if (video_ != nullptr)
- {
- if (video_->IsPaused())
- {
- video_->ResumePlay();
- }
- else if (!video_->IsPlayed())
- {
- video_->StartPlay();
- }
- }
- if (kaleidoscope_ != nullptr)
- {
- kaleidoscope_->RequestFocus();
- kaleidoscope_->StartRotateAnimator();
+ }
+ if (video_ != nullptr) {
+ if (video_->IsPaused()) {
+ video_->ResumePlay();
+ } else if (!video_->IsPlayed()) {
+ video_->StartPlay();
}
}
+ if (kaleidoscope_ != nullptr) {
+ kaleidoscope_->RequestFocus();
+ kaleidoscope_->StartRotateAnimator();
+ }
+}
- void DialViewGroup::DoPause(void)
- {
- SetLableAnimatorState(Animator::PAUSE);
- SetImgAnimatorState(Animator::PAUSE);
- if (kaleidoscope_ != nullptr)
- {
- kaleidoscope_->StopRotateAnimator();
- kaleidoscope_->ClearFocus();
- }
- if (video_ != nullptr)
- {
- video_->PausePlay();
- }
+void DialViewGroup::DoPause(void)
+{
+ SetLableAnimatorState(Animator::PAUSE);
+ SetImgAnimatorState(Animator::PAUSE);
+ if (kaleidoscope_ != nullptr) {
+ kaleidoscope_->StopRotateAnimator();
+ kaleidoscope_->ClearFocus();
+ }
+ if (video_ != nullptr) {
+ video_->PausePlay();
}
+}
- void DialViewGroup::RecordSpecial(UIView *view)
- {
- if (dynamic_cast<UILabel *>(view) != nullptr)
- {
- UILabel *label = dynamic_cast<UILabel *>(view);
- uint8_t mode = label->GetLineBreakMode();
- if (mode == UILabel::LINE_BREAK_MARQUEE || mode == UILabel::LINE_BREAK_OSCILLATION)
- {
- rollingLabelList_.PushBack(label);
- }
- }
- else if (dynamic_cast<UIImageAnimatorView *>(view) != nullptr)
- {
- UIImageAnimatorView *imgAnim = dynamic_cast<UIImageAnimatorView *>(view);
- imgAnimList_.PushBack(imgAnim);
- }
- else if (dynamic_cast<UIKaleidoscopeView *>(view) != nullptr)
- {
- kaleidoscope_ = dynamic_cast<UIKaleidoscopeView *>(view);
- }
- else if (dynamic_cast<UILiteSurfaceView *>(view) != nullptr)
- {
- if (video_ != nullptr)
- {
- GRAPHIC_LOGE("Already added a video view.\n");
- return;
- }
- video_ = reinterpret_cast<DialVideoView *>(view);
- }
- else if (dynamic_cast<DialSequenceContainer *>(view) != nullptr)
- {
- DialSequenceContainer *seq = dynamic_cast<DialSequenceContainer *>(view);
- seqList_.PushBack(seq);
+void DialViewGroup::RecordSpecial(UIView *view)
+{
+ if (dynamic_cast<UILabel*>(view) != nullptr) {
+ UILabel* label = dynamic_cast<UILabel*>(view);
+ uint8_t mode = label->GetLineBreakMode();
+ if (mode == UILabel::LINE_BREAK_MARQUEE || mode == UILabel::LINE_BREAK_OSCILLATION) {
+ rollingLabelList_.PushBack(label);
+ }
+ } else if (dynamic_cast<UIImageAnimatorView*>(view) != nullptr) {
+ UIImageAnimatorView* imgAnim = dynamic_cast<UIImageAnimatorView*>(view);
+ imgAnimList_.PushBack(imgAnim);
+ } else if (dynamic_cast<UIKaleidoscopeView*>(view) != nullptr) {
+ kaleidoscope_ = dynamic_cast<UIKaleidoscopeView*>(view);
+ } else if (dynamic_cast<UILiteSurfaceView*>(view) != nullptr) {
+ if (video_ != nullptr) {
+ GRAPHIC_LOGE("Already added a video view.\n");
+ return;
}
+ video_ = reinterpret_cast<DialVideoView*>(view);
}
+}
- void DialViewGroup::RecordBindData(DialDataType type, DialView *view, bool isPeriodic)
- {
- if (dynamic_cast<UILabel *>(view) != nullptr)
- {
- UILabel *label = dynamic_cast<UILabel *>(view);
- uint8_t mode = label->GetLineBreakMode();
- if (mode == UILabel::LINE_BREAK_MARQUEE || mode == UILabel::LINE_BREAK_OSCILLATION)
- {
- rollingLabelList_.PushBack(label);
- }
+void DialViewGroup::RecordBindData(DialDataType type, DialView* view, bool isPeriodic)
+{
+ if (dynamic_cast<UILabel*>(view) != nullptr) {
+ UILabel* label = dynamic_cast<UILabel*>(view);
+ uint8_t mode = label->GetLineBreakMode();
+ if (mode == UILabel::LINE_BREAK_MARQUEE || mode == UILabel::LINE_BREAK_OSCILLATION) {
+ rollingLabelList_.PushBack(label);
}
+ }
- auto it = dataTypeMap_.find(static_cast<int16_t>(type));
- if (it != dataTypeMap_.end())
- {
- it->second->PushBack(view);
- }
- else
- {
- Views *container = new Views;
- if (container == nullptr)
- {
- GRAPHIC_LOGE("failed to alloc binddata container");
- return;
- }
- container->PushBack(view);
- dataTypeMap_.insert(std::make_pair(static_cast<int16_t>(type), container));
- viewsMemPool_.PushBack(container);
- }
- if (isPeriodic)
- {
- periodicUpdateTypes_.PushBack(type);
- }
- else
- {
- ModelDialDataFactory::GetInstance().RegisterDialDataListener(type, this);
- passiveUpdateTypes_.PushBack(type);
+ auto it = dataTypeMap_.find(static_cast<int16_t>(type));
+ if (it != dataTypeMap_.end()) {
+ it->second->PushBack(view);
+ } else {
+ Views *container = new Views;
+ if (container == nullptr) {
+ GRAPHIC_LOGE("failed to alloc binddata container");
+ return;
}
+ container->PushBack(view);
+ dataTypeMap_.insert(std::make_pair(static_cast<int16_t>(type), container));
+ viewsMemPool_.PushBack(container);
}
+ view->SetDataType(type);
+ if (isPeriodic) {
+ periodicUpdateTypes_.PushBack(type);
+ } else {
+ ModelDialDataFactory::GetInstance().RegisterDialDataListener(type, this);
+ passiveUpdateTypes_.PushBack(type);
+ }
+}
- void DialViewGroup::ClearViews()
- {
- dataTypeMap_.clear();
- for (uint16_t i = 0; i < viewsMemPool_.Size(); ++i)
- {
- delete viewsMemPool_[i];
- }
- viewsMemPool_.Clear();
+void DialViewGroup::ClearViews()
+{
+ dataTypeMap_.clear();
+ for (uint16_t i = 0; i < viewsMemPool_.Size(); ++i) {
+ delete viewsMemPool_[i];
}
+ viewsMemPool_.Clear();
+}
- void DialViewGroup::AddView(UIView *view)
- {
- if (view == nullptr)
- {
- GRAPHIC_LOGE("Parameter is nullptr.\n");
- return;
- }
- dialViews_.PushBack(view);
- Add(view);
- DialViewContainer *container = dynamic_cast<DialViewContainer *>(view);
- if (container != nullptr)
- {
- ListNode<DialViewContainer::SubView> *head = container->Begin();
- for (; head != container->End(); head = head->next_)
- {
- DialViewContainer::SubView &subView = head->data_;
- if (subView.dialView != nullptr)
- {
- RecordBindData(subView.type, subView.dialView, subView.isPeriodic);
- ProcessData(subView.type, subView.dialView);
- }
- else if (subView.view != nullptr)
- {
- RecordSpecial(subView.view);
- }
+void DialViewGroup::AddView(UIView* view)
+{
+ if (view == nullptr) {
+ GRAPHIC_LOGE("Parameter is nullptr.\n");
+ return;
+ }
+ dialViews_.PushBack(view);
+ Add(view);
+ DialViewContainer *container = dynamic_cast<DialViewContainer*>(view);
+ if (container != nullptr) {
+ ListNode<DialViewContainer::SubView> *head = container->Begin();
+ for (;head != container->End(); head = head->next_) {
+ DialViewContainer::SubView &subView = head->data_;
+ if (subView.dialView != nullptr) {
+ RecordBindData(subView.type, subView.dialView, subView.isPeriodic);
+ ProcessData(subView.type, subView.dialView);
+ } else if (subView.view != nullptr) {
+ RecordSpecial(subView.view);
}
}
- else
- {
- RecordSpecial(view);
- }
+ } else {
+ RecordSpecial(view);
}
+}
- void DialViewGroup::AddView(DialDataType type, DialView *view, bool isPeriodic)
- {
- if (view == nullptr)
- {
- GRAPHIC_LOGE("Parameter is nullptr.\n");
- return;
- }
+void DialViewGroup::AddView(DialDataType type, DialView* view, bool isPeriodic)
+{
+ if (view == nullptr) {
+ GRAPHIC_LOGE("Parameter is nullptr.\n");
+ return;
+ }
DialDigitalImgView *digital = dynamic_cast<DialDigitalImgView *>(view);
if (digital != nullptr)
{
return period_;
}
+ // 更新数据
+ void DialViewGroup::UpdateViewsByPeriodicUpdateData()
+ {
+ ListNode<DialDataType>* node = periodicUpdateTypes_.Head();
+ while (node != periodicUpdateTypes_.End()) {
+ DialDataType type = node->data_;
+ auto iter = dataTypeMap_.find(static_cast<int16_t>(type));
+ if (iter != dataTypeMap_.end()) {
+ Views *container = iter->second;
+ for (uint16_t i = 0; i < container->Size(); ++i) {
+ ProcessData(type, (*container)[i]);
+ }
+ }
+ node = node->next_;
+ }
+ if (LowPowerManager::GetInstance()->IsLiteSurfaceInRootView()) {
+ Invalidate();
+ }
+ // ota进行视频暂停
+ if (uapi_dev_runtime_get_transmitting_status() == 1 || uapi_dev_runtime_get_restore_factory_status() == 1)
+ {
+ // 暂停视频
+ DoPause();
+ }
+ else
+ {
+ // 获取视频
+ DoStart();
+ }
+ }
void DialViewGroup::OnDialFloatDataUpdate(DialDataType type, float data)
{
return false;
}
- void DialViewGroup::ScrollBegin(bool isActive)
- {
- if (isActive)
- {
- DoPause();
- }
+void DialViewGroup::ScrollBegin(bool isActive)
+{
+ if (isActive) {
+ DoPause();
}
+}
- void DialViewGroup::ScrollEnd(bool isActive)
- {
- MainPresenterSample *mainPresenter = MainPresenterSample::GetInstance();
- if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME))
- {
- return;
- }
+void DialViewGroup::ScrollEnd(bool isActive)
+{
+ MainPresenterSample* mainPresenter = MainPresenterSample::GetInstance();
+ if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME)) {
+ return;
+ }
- if (isActive)
- {
- DoStart();
+ if (isActive) {
+ DoStart();
+ } else {
+ if (video_ != nullptr && !video_->IsStopped()) {
+ video_->StopPlay();
}
- else
- {
- if (video_ != nullptr && !video_->IsStopped())
- {
- video_->StopPlay();
- }
- if (video_ != nullptr)
- {
- ClearCache();
- }
+ if (video_ != nullptr) {
+ ClearCache();
}
}
+}
- void DialViewGroup::CoverBegin(bool isCovered)
- {
- if (!isCovered)
- {
- DoPause();
- }
+void DialViewGroup::CoverBegin(bool isCovered)
+{
+ if (!isCovered) {
+ DoPause();
}
+}
- void DialViewGroup::CoverEnd(bool isCovered)
- {
- MainPresenterSample *mainPresenter = MainPresenterSample::GetInstance();
- if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME))
- {
- return;
- }
-
- if (!isCovered)
- {
- DoStart();
- }
+void DialViewGroup::CoverEnd(bool isCovered)
+{
+ MainPresenterSample* mainPresenter = MainPresenterSample::GetInstance();
+ if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME)) {
+ return;
}
- void DialViewGroup::OnActive(void)
- {
- MainPresenterSample *mainPresenter = MainPresenterSample::GetInstance();
- if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME))
- {
- return;
- }
-
+ if (!isCovered) {
DoStart();
}
+}
- void DialViewGroup::OnInactive(void)
- {
- DoStop();
+void DialViewGroup::OnActive(void)
+{
+ MainPresenterSample* mainPresenter = MainPresenterSample::GetInstance();
+ if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME)) {
+ return;
+ }
+ if (!isSeqImgLoaded_) {
+ std::weak_ptr<bool> wk = isExists_;
+ GraphicService::GetInstance()->ForceRefreshImmediately();
+ GraphicService::GetInstance()->PostGraphicEvent([this, wk]() {
+ if (wk.expired()) {
+ return;
+ }
+
+ InputDeviceManager::GetInstance()->ClearInputDeviceState();
+ ListNode<UIImageAnimatorView *> *node = imgAnimList_.Begin();
+ while (node != imgAnimList_.End()) {
+ if (node->data_ != nullptr) {
+ DialSequenceImgView *imgAnim = dynamic_cast<DialSequenceImgView *>(node->data_);
+ if (imgAnim != nullptr) {
+ imgAnim->LoadCurSeqImgs();
+ imgAnim->Start();
+ }
+ }
+ node = node->next_;
+ }
+ isSeqImgLoaded_ = true;
+ });
}
- void DialViewGroup::OnCovered(void)
- {
- MainPresenterSample *mainPresenter = MainPresenterSample::GetInstance();
- if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME))
- {
- return;
- }
+ DoStart();
+}
- DoPause();
+void DialViewGroup::OnInactive(void)
+{
+ DoStop();
+}
+
+void DialViewGroup::OnCovered(void)
+{
+ MainPresenterSample* mainPresenter = MainPresenterSample::GetInstance();
+ if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME)) {
+ return;
}
- void DialViewGroup::OnUncovered(void)
- {
- MainPresenterSample *mainPresenter = MainPresenterSample::GetInstance();
- if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME))
- {
- return;
- }
+ DoPause();
+}
- DoStart();
+void DialViewGroup::OnUncovered(void)
+{
+ MainPresenterSample* mainPresenter = MainPresenterSample::GetInstance();
+ if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME)) {
+ return;
}
- void DialViewGroup::OnPause()
- {
- DoPause();
+ DoStart();
+}
+
+void DialViewGroup::OnPause()
+{
+ DoPause();
+}
+
+MediaVideoPlay* DialViewGroup::GetVideoPlay()
+{
+ if (video_ != nullptr) {
+ return video_->GetVideoPlay();
}
+ return nullptr;
+}
- void DialViewGroup::SetLableAnimatorState(uint8_t state)
- {
- if (rollingLabelList_.IsEmpty())
- {
- return;
- }
+void DialViewGroup::SetLableAnimatorState(uint8_t state)
+{
+ if (rollingLabelList_.IsEmpty()) {
+ return;
+ }
- ListNode<UILabel *> *node = rollingLabelList_.Begin();
- while (node != rollingLabelList_.End())
- {
- if (node->data_ != nullptr)
- {
- UILabel *label = node->data_;
- label->SetAnimState(state);
- }
- node = node->next_;
+ ListNode<UILabel*>* node = rollingLabelList_.Begin();
+ while (node != rollingLabelList_.End()) {
+ if (node->data_ != nullptr) {
+ UILabel* label = node->data_;
+ label->SetAnimState(state);
}
+ node = node->next_;
}
+}
- void DialViewGroup::SetImgAnimatorState(uint8_t state)
- {
- if (imgAnimList_.IsEmpty() && seqList_.IsEmpty())
- {
- return;
- }
+void DialViewGroup::SetImgAnimatorState(uint8_t state)
+{
+ if (imgAnimList_.IsEmpty()) {
+ return;
+ }
- ListNode<UIImageAnimatorView *> *node = imgAnimList_.Begin();
- while (node != imgAnimList_.End())
- {
- if (node->data_ != nullptr)
- {
- UIImageAnimatorView *imgAnim = node->data_;
- switch (state)
- {
+ ListNode<UIImageAnimatorView*>* node = imgAnimList_.Begin();
+ while (node != imgAnimList_.End()) {
+ if (node->data_ != nullptr) {
+ UIImageAnimatorView* imgAnim = node->data_;
+ switch (state) {
case Animator::PAUSE:
imgAnim->Pause();
break;
case Animator::START:
imgAnim->Resume();
break;
- }
- }
- node = node->next_;
- }
-
- ListNode<DialSequenceContainer *> *it = seqList_.Begin();
- while (it != seqList_.End())
- {
- if (it->data_ != nullptr)
- {
- switch (state)
- {
- case Animator::PAUSE:
- it->data_->Pause();
- break;
- case Animator::START:
- it->data_->Resume();
- break;
- }
- }
- it = it->next_;
- }
- }
-
- MediaVideoPlay *DialViewGroup::GetVideoPlay()
- {
- if (video_ != nullptr)
- {
- return video_->GetVideoPlay();
- }
- return nullptr;
- }
-
- void DialViewGroup::StopDial()
- {
- DoStop();
- }
- void DialViewGroup::StartDial()
- {
- MainPresenterSample *mainPresenter = MainPresenterSample::GetInstance();
- if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME))
- {
- return;
- }
- }
-
- // 更新数据
- void DialViewGroup::UpdateViewsByPeriodicUpdateData()
- {
- ListNode<DialDataType> *node = periodicUpdateTypes_.Head();
- while (node != periodicUpdateTypes_.End())
- {
- DialDataType type = node->data_;
- auto iter = dataTypeMap_.find(static_cast<int16_t>(type));
- if (iter != dataTypeMap_.end())
- {
- Views *container = iter->second;
- for (uint16_t i = 0; i < container->Size(); ++i)
- {
- ProcessData(type, (*container)[i]);
- }
}
- node = node->next_;
- }
- if (LowPowerManager::GetInstance()->IsLiteSurfaceInRootView())
- {
- Invalidate();
- }
- // ota进行视频暂停
- if (uapi_dev_runtime_get_transmitting_status() == 1 || uapi_dev_runtime_get_restore_factory_status() == 1)
- {
- // 暂停视频
- StopDial();
- }
- else
- {
- // 获取视频
- StartDial();
}
+ node = node->next_;
}
-}
\ No newline at end of file
+}
+} // namespace OHOS
return iter->second;
}
-bool ModelDialDataFactory::IsOHBindDataExist(DialOHDataType type) const
-{
- auto it = g_bindDataConverter.find(type);
- if (it == g_bindDataConverter.end()) {
- return false;
- }
- return IsBindDataExist(it->second);
-}
-
-bool ModelDialDataFactory::IsBindDataExist(DialDataType type) const
-{
- auto it = models_.find(static_cast<int16_t>(type));
- if (it != models_.end() && it->second != nullptr) {
- return true;
- }
- return false;
-}
-
bool ModelDialDataFactory::RegisterDialDataListener(DialDataType type, OnDialDataUpdateListener* listener)
{
DialBaseModel* model = GetModuleByType(type);
#ifndef GRAPHIC_LITE_DIAL_BIN_PARSER_V3_H
#define GRAPHIC_LITE_DIAL_BIN_PARSER_V3_H
#include "DialBinParserManager.h"
-#include "DialTimePublisher.h"
+#include "DialModelTime.h"
#include "components/ui_abstract_progress.h"
#include "DialViewContainer.h"
-#include "DialOHDataType.h"
+#include "DialDataType.h"
#include "DialOHSliceId.h"
namespace OHOS {
bool (DialBinParserV3::*funcArray_[DIAL_BIN_PARSER_FUNC_NUM])(ContainerInterface&);
void AddToParentWithView(ContainerInterface &parent, uint8_t displayMode, UIView *view);
void AddToParentWithDialView(ContainerInterface &parent, uint8_t displayMode,
- DialView *view, DialOHDataType bindData, bool isPeriodic);
+ DialView *view, DialDataType bindData, bool isPeriodic);
struct {
uint8_t *viewType;
uint8_t dialViewCount;
FILE *file;
uint8_t curIndex;
} curViewType_;
- bool ParseTimeIntervals(FILE* fp, uint8_t cnt, DialTimePublisher::TimeChangeListener *listener);
+ bool ParseTimeIntervals(FILE* fp, uint8_t cnt, TimeChangeListener *listener);
bool ParseViewType(uint8_t *viewType, uint8_t dialViewCount, FILE *file);
bool ParseContainerSubviews(DialViewContainer *container, uint8_t num);
bool ParseOptionsSubviews(ContainerInterface &parent);
DialViewGroup* dialGroup_ = nullptr;
std::string file_;
- uint32_t dirId_ = 0xfef << 20; // 20: offset
+ const uint32_t dirId_ = 0xfef << 20; // 20: offset
uint32_t imageOffset_ = 0;
DisplayState state_ = DisplayState::NORMAL;
}; // class DialBinParserV3
#ifndef DIAL_DATA_BASE_H
#define DIAL_DATA_BASE_H
+#include "DialDataType.h"
-enum class DialDataType {
+enum class DialOldDataType {
DATA_TYPE_FLOAT_BASE = 0,
DATA_TYPE_STEPS,
DATA_TYPE_HEART_RATE,
DATA_TYPE_TIME_MONTH,
DATA_TYPE_TIME_YEAR,
- DATA_TYPE_SWIVEL_GEAR_ONE = 20,
- DATA_TYPE_SWIVEL_GEAR_TWO,
- DATA_TYPE_SWIVEL_GEAR_THREE,
- DATA_TYPE_SWIVEL_GEAR_FOUR,
- DATA_TYPE_SWIVEL_GEAR_FIVE,
- DATA_TYPE_SWIVEL_GEAR_SIX,
-
DATA_TYPE_TEXT_BASE = 0x2000,
DATA_TYPE_MULTI_FLOAT_BASE = 0x4000,
DATA_TYPE_MAX = 0x6000
};
+
+OHOS::DialDataType Convert2DataType(DialOldDataType dialData);
#endif
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
+ * Description: DialDataType
+ * Author:
+ * Create: 2025-02-15
+ */
+
+#ifndef DIAL_DATA_TYPE_H
+#define DIAL_DATA_TYPE_H
+
+#include <unordered_map>
+
+namespace OHOS {
+enum class DialDataType : int16_t {
+ // 起始:单个浮点数据,OH标准协议部分,禁止改动,从0开始(包括0,二进制格式为:0000,xxxx,xxxx,xxxx)
+ DATA_TYPE_FLOAT_BASE = 0,
+ CLOCK = 1,
+ CLOCK_HIGH = 2,
+ CLOCK_LOW = 3,
+ CLOCK_RATIO_12H = 4,
+ CLOCK_RATIO_24H = 5,
+ MINUTE_TIME = 6,
+ MINUTE_HIGH = 7,
+ MINUTE_LOW = 8,
+ MINUTE_RATIO = 9,
+ SECOND_TIME = 10,
+ SECOND_HIGH = 11,
+ SECOND_LOW = 12,
+ SECOND_RATIO = 13,
+ AM_PM = 14,
+ HOUR_FORMAT = 16,
+ PREV_HOUR = 17,
+ NEXT_HOUR = 18,
+ CLOCK_ANGLE = 19,
+ MINUTE_ANGLE = 20,
+ SECOND_ANGLE = 21,
+ MILLISECOND_ANGLE = 22,
+ PREV_SECOND = 25,
+ NEXT_SECOND = 26,
+ PREV_2_SECONDS = 27,
+ PREV_MINUTE = 28,
+ NEXT_MINUTE = 29,
+ DUAL_TIMEZONE_CLOCK = 30,
+ DUAL_TIMEZONE_CLOCK_HIGH = 31,
+ DUAL_TIMEZONE_CLOCK_LOW = 32,
+ DUAL_TIMEZONE_CLOCK_RATIO_12H = 33,
+ DUAL_TIMEZONE_CLOCK_RATIO_24H = 34,
+ DUAL_TIMEZONE_MINUTE = 35,
+ DUAL_TIMEZONE_MINUTE_HIGH = 36,
+ DUAL_TIMEZONE_MINUTE_LOW = 37,
+ DUAL_TIMEZONE_MINUTE_RATIO = 38,
+ DUAL_TIMEZONE_AMPM = 41,
+ SUNRISE_SUNSET_IMAGE = 50,
+ SUNRISE_SUNSET_CLOCK_HIGH = 51,
+ SUNRISE_SUNSET_CLOCK_LOW = 52,
+ SUNRISE_SUNSET_MINUTE_HIGH = 53,
+ SUNRISE_SUNSET_MINUTE_LOW = 54,
+ DATE = 70,
+ DATE_HIGH = 71,
+ DATE_LOW = 72,
+ DATE_31_DAY_RATIO = 73,
+ YESTERDAY = 74,
+ YESTERDAY_DATE_HIGH = 75,
+ YESTERDAY_DATE_LOW = 76,
+ TOMORROW = 77,
+ TOMORROW_DATE_HIGH = 78,
+ TOMORROW_DATE_LOW = 79,
+ MONTH_DATA = 80,
+ MONTH = 81,
+ WEEKDAY_DATA = 83,
+ WEEKDAY_RATIO = 84,
+ CHINESE_HOUR = 86,
+ MOON_PHASE = 87,
+ PREV_MONTH = 88,
+ NEXT_MONTH = 89,
+ SOLAR_YEAR = 240,
+ YEAR_ONES = 241,
+ YEAR_TENS = 242,
+ YEAR_HUNDREDS = 243,
+ YEAR_THOUSANDS = 244,
+ LUNAR_MONTH = 90,
+ LUNAR_DATE_HIGH = 91,
+ LUNAR_DATE_LOW = 92,
+ BATTERY = 100,
+ BATTERY_ENUM = 102,
+ BATTERY_STATUS_ENUM = 103,
+ BATTERY_LEVEL = 104,
+ CHARGING_STATUS = 105,
+ STEP_COUNT = 110,
+ STEP_ONES = 111,
+ STEP_TENS = 112,
+ STEP_HUNDREDS = 113,
+ STEP_THOUSANDS = 114,
+ STEP_TENS_OF_THOUSANDS = 115,
+ STEP_GOAL_PROGRESS = 116,
+ STEP_GOAL_PROGRESS_ENUM = 117,
+ CALORIE = 120,
+ CALORIE_RATIO = 121,
+ CALORIE_GOAL_PROGRESS_ENUM = 122,
+ HEART_RATE = 130,
+ MAX_HEART_RATE = 131,
+ MIN_HEART_RATE = 132,
+ HEART_RATE_ZONE = 133,
+ HEART_RATE_RATIO = 134,
+ STRESS_LEVEL = 140,
+ STRESS_RATIO = 141,
+ STRESS_LEVEL_TYPE = 142,
+ MODERATE_HIGH_INTENSITY_TIME = 150,
+ MODERATE_HIGH_INTENSITY_TIME_RATIO = 151,
+ STAND_COUNT = 152,
+ STAND_COUNT_RATIO = 153,
+ MAX_VO2 = 160,
+ MAX_VO2_RATIO = 161,
+ SLEEP_RATIO = 166,
+ SLEEP_GOAL_PROGRESS_ENUM = 167,
+ TEMPERATURE = 170,
+ MAX_TEMPERATURE = 171,
+ MIN_TEMPERATURE = 172,
+ CURRENT_TEMPERATURE_MINUS_1 = 173,
+ CURRENT_TEMPERATURE_PLUS_1 = 174,
+ TEMPERATURE_TYPE = 175,
+ WEATHER_TYPE = 176,
+ TEMPERATURE_RATIO = 177,
+ PRESSURE = 180,
+ PRESSURE_RATIO = 181,
+ AQI = 182,
+ AQI_LEVEL = 183,
+ AQI_RATIO = 184,
+ ALTITUDE_DATA = 191,
+ ALTITUDE_UNIT = 192,
+ ALTITUDE_RATIO = 193,
+ DISTANCE_DATA = 195,
+ DISTANCE_UNIT = 196,
+ DISTANCE_GOAL_PROGRESS = 197,
+ BLE_CONNECTION_STATUS = 210,
+ BT_CONNECTION_STATUS = 211,
+ BLOOD_OXYGEN = 220,
+ SYSTOLIC_BLOOD_PRESSURE = 221,
+ DIASTOLIC_BLOOD_PRESSURE = 222,
+ DUAL_LANGUAGE_SYSTEM = 230,
+ UNREAD_SMS_MSG = 250,
+ UNREAD_WECHAT_MSG = 251,
+ // 结束:单个浮点数据,OH标准协议部分,禁止改动,到4095结束(包括4095)
+
+ // 起始:单个浮点数据,私有可定制部分,从4096开始(包括4096,二进制格式为:0001,xxxx,xxxx,xxxx)
+ SWIVEL_GEAR_POSITIVE = 8190, // private data, clockwise
+ SWIVEL_GEAR_NEGATIVE = 8191, // counterclockwise
+ // 结束:单个浮点数据,私有可定制部分,到8191结束(包括8191)
+
+ // 起始:文本数据,OH标准协议部分,禁止改动,从8192开始(包括8192,二进制格式为:0010,xxxx,xxxx,xxxx)
+ DATA_TYPE_TEXT_BASE = 8192,
+ AM_PM_TEXT = 8193,
+ SUNRISE_TEXT = 8210,
+ SUNSET_TEXT = 8211,
+ MOONRISE_TEXT = 8221,
+ MOONSET_TEXT = 8222,
+ DUAL_TIMEZONE_ABBR_TEXT = 8200,
+ DUAL_TIMEZONE_TIME_TEXT = 8201,
+ DUAL_TIMEZONE_AM_PM_TEXT = 8202,
+ MONTH_TEXT = 8230,
+ DATE_TEXT = 8231,
+ WEEKDAY_TEXT = 8232,
+ LUNAR_YEAR = 8240,
+ SLEEP_TEXT = 8250,
+ DISTANCE_TEXT = 8260,
+ TIDE_RISE_TIME_TEXT = 8270,
+ TIDE_FALL_TIME_TEXT = 8271,
+ // 结束:文本数据,OH标准协议部分,禁止改动,到12287结束(包括12287)
+
+ // 文本数据,私有可定制部分,从12288开始(包括12288,二进制格式为:0011,xxxx,xxxx,xxxx)
+ // 文本数据,私有可定制部分,到16383结束(包括16383)
+
+ // 起始:多个浮点数据,OH标准协议部分,禁止改动,从16384开始(包括16384,二进制格式为:0100,xxxx,xxxx,xxxx)
+ DATA_TYPE_MULTI_FLOAT_BASE = 16384,
+ // 结束:多个浮点数据,OH标准协议部分,禁止改动,到20479结束(包括20479)
+
+ // 起始:多个浮点数据,私有可定制部分,从20480开始(包括20480,二进制格式为:0101,xxxx,xxxx,xxxx)
+ // 结束:多个浮点数据,私有可定制部分,到24575结束(包括24575)
+
+ DATA_TYPE_MAX = 0x6000,
+}; // enum class DialDataType
+} // namespace OHOS
+
+#endif // DIAL_DATA_TYPE_H
#include <cstdint>
#include "DialView.h"
-#include "DialTimePublisher.h"
+#include "DialModelTime.h"
#include "components/ui_image_view.h"
#include "gfx_utils/graphic_math.h"
#include "components/ui_view_group.h"
RIGHT,
};
-class DialDigitalImgView : public UIImageView, public DialView, public DialTimePublisher::TimeChangeListener {
+class DialDigitalImgView : public UIImageView, public DialView, public TimeChangeListener {
public:
DialDigitalImgView();
~DialDigitalImgView() override;
#define DIAL_MODEL_TIME_H
#include "DialBaseModel.h"
-#include "DialTimePublisher.h"
#include "gfx_utils/list.h"
namespace OHOS {
-class DialModelTime : public DialBaseModel, public DialTimePublisher {
+class TimeChangeListener;
+class DialModelTime : public DialBaseModel {
public:
- DialModelTime()
- {
- DialModelTime::SetPublisher(dynamic_cast<DialTimePublisher*>(this));
- }
~DialModelTime() override
{
listeners_.Clear();
}
+
static DialModelTime* GetInstance()
{
static DialModelTime instance;
return &instance;
}
+
bool GetDialFloatData(DialDataType& type, float& out) override;
- void UpdateTime() override;
- void Register(TimeChangeListener* listener) override;
- void Unregister(TimeChangeListener* listener) override;
+ void UpdateTime();
+ void Register(TimeChangeListener* listener);
+ void Unregister(TimeChangeListener* listener);
private:
+ DialModelTime() = default;
struct tm *tblock_;
uint16_t angleH_ = 0;
uint16_t angleM_ = 0;
float angleMS_ = 0;
List<TimeChangeListener*> listeners_;
};
-}
+
+class TimeChangeListener {
+public:
+ struct TimeInterval {
+ uint8_t start;
+ uint8_t end;
+ };
+ virtual void OnTimeUpdate(const struct tm &curTime) = 0;
+ void SetTimeInervals(TimeInterval *intervals, uint8_t num);
+ bool IsInTimeInterval(const struct tm &curTime);
+ TimeChangeListener(const TimeChangeListener&) = delete;
+ TimeChangeListener& operator=(const TimeChangeListener&) = delete;
+ TimeChangeListener();
+ virtual ~TimeChangeListener();
+private:
+ TimeInterval *intervals_ = nullptr;
+ uint8_t num_ = 0;
+};
+} // namespace OHOS
#endif
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialOHDataType
- * Author:
- * Create: 2025-02-15
- */
-
-#ifndef DIAL_OH_DATATYPE_H
-#define DIAL_OH_DATATYPE_H
-
-#include <unordered_map>
-#include "DialDataBase.h"
-
-namespace OHOS {
-enum class DialOHDataType : int16_t {
- CLOCK = 1,
- CLOCK_HIGH_BIT = 2,
- CLOCK_LOW_BIT = 3,
- CLOCK_RATIO_12 = 4,
- CLOCK_RATIO_24 = 5,
- MINUTES = 6,
- MINUTES_HIGH_BIT = 7,
- MINUTES_LOW_BIT = 8,
- MINUTES_RATIO = 9,
- SECONDS = 10,
- SECONDS_HIGH_BIT = 11,
- SECONDS_LOW_BIT = 12,
- SECONDS_RATIO = 13,
- AM_PM = 14,
- AMPM_TEXT = 15,
- HOUR_MODE = 16,
- PREVIOUS_HOUR = 17,
- NEXT_HOUR = 18,
- CLOCK_ANGLE = 19,
- MINUTE_ANGLE = 20,
- SECONDS_ANGLE = 21,
- MILLISECOND_ANGLE = 22,
- PREVIOUS_SECOND = 25,
- NEXT_SECOND = 26,
- PREVIOUS_SECOND_PREVIOUS_SECOND = 27,
- PREVIOUS_MINUTE = 28,
- NEXT_MINUTE = 29,
- DUAL_TIME_ZONE_CLOCK = 30,
- DUAL_TIME_ZONE_CLOCK_HIGH_BIT = 31,
- DUAL_TIME_ZONE_CLOCK_LOW_BIT = 32,
- DUAL_TIME_ZONE_CLOCK_RATIO_12 = 33,
- DUAL_TIME_ZONE_CLOCK_RATIO_24 = 34,
- DUAL_TIME_ZONE_MINUTES = 35,
- DUAL_TIME_ZONE_MINUTES_HIGH_BIT = 36,
- DUAL_TIME_ZONE_MINUTES_LOW_BIT = 37,
- DUAL_TIME_ZONE_MINUTES_RATIO = 38,
- DUAL_TIME_ZONE_ABBREVIATION_TEXT = 39,
- DUAL_TIME_ZONE_TIME_MINUTE_TEXT = 40,
- DUAL_TIME_ZONE_AMPM = 41,
- DUAL_TIME_ZONE_AM_PM_TEXT = 42,
- SUNRISE_SUNSET_PICTURE_SELECTION = 50,
- SUNRISE_SUNSET_CLOCK_HIGH_BIT = 51,
- SUNRISE_SUNSET_CLOCK_LOW_BIT = 52,
- SUNRISE_SUNSET_MINUTES_HIGH_BIT = 53,
- SUNRISE_SUNSET_MINUTES_LOW_BIT = 54,
- SUNRISE_TEXT = 55,
- SUNSET_TEXT = 56,
- MOONRISE_TEXT = 60,
- MOONSET_TEXT = 61,
- DATE = 70,
- DATE_HIGH_BIT = 71,
- DATE_LOW_BIT = 72,
- DATE_OCCUPIES_31_DAYS_RATIO = 73,
- YESTERDAY = 74,
- YESTERDAY_DATE_HIGH_BIT = 75,
- YESTERDAY_DATE_LOW_BIT = 76,
- TOMORROW = 77,
- TOMORROW_DATE_HIGH_BIT = 78,
- TOMORROW_DATE_LOW_BIT = 79,
- MONTH_DATA = 80,
- MONTH = 81,
- MONTH_TEXT = 82,
- WEEK_DATA = 83,
- WEEK_RATIO = 84,
- WEEK_TEXT = 85,
- TWELVE_DIVISIONS = 86,
- LUNAR_PHASE = 87,
- PREVIOUS_MONTH = 88,
- NEXT_MONTH = 89,
- LUNAR_MONTH = 90,
- LUNAR_DATE_HIGH_BIT = 91,
- LUNAR_DATE_LOW_BIT = 92,
- CHARGE = 100,
- CHARGE_ENUMERATION = 102,
- CHARGE_STATUS_ENUMERATION = 103,
- CHARGE_RATIO = 104,
- CHARGING_STATUS = 105,
- STEPS = 110,
- STEPS_UNIT_DIGIT = 111,
- STEPS_TENS_DIGIT = 112,
- STEPS_HUNDRED_DIGIT = 113,
- STEPS_THOUSAND_DIGIT = 114,
- STEPS_TEN_THOUSAND_DIGIT = 115,
- STEPS_TARGET_ACHIEVEMENT_RATE = 116,
- STEPS_TARGET_PROGRESS_ENUMERATION = 117,
- CALORIES = 120,
- CALORIES_RATIO = 121,
- CALORIES_TARGET_PROGRESS_ENUMERATION = 122,
- HEART_RATE = 130,
- MAXIMUM_HEART_RATE = 131,
- MINIMUM_HEART_RATE = 132,
- HEART_RATE_RANGE = 133,
- HEART_RATE_RATIO = 134,
- STRESS = 140,
- STRESS_RATIO = 141,
- STRESS_LEVEL_TYPE = 142,
- MODERATE_TO_VIGOROUS_INTENSITY_TIME = 150,
- MODERATE_TO_VIGOROUS_INTENSITY_TIME_RATIO = 151,
- STANDING_TIMES = 152,
- STANDING_TIMES_RATIO = 153,
- MAXIMUM_OXYGEN_UPTAKE = 160,
- MAXIMUM_OXYGEN_UPTAKE_RATIO = 161,
- SLEEP_TEXT = 165,
- SLEEP_RATIO = 166,
- SLEEP_TARGET_ACHIEVEMENT_RATE_ENUMERATION = 167,
- TEMPERATURE = 170,
- HIGHEST_TEMPERATURE = 171,
- LOWEST_TEMPERATURE = 172,
- CURRENT_TEMPERATURE_MINUS_ONE = 173,
- CURRENT_TEMPERATURE_PLUS_ONE = 174,
- TEMPERATURE_TYPE = 175,
- WEATHER_TYPE = 176,
- TEMPERATURE_RATIO = 177,
- ATMOSPHERIC_PRESSURE = 180,
- ATMOSPHERIC_PRESSURE_RATIO = 181,
- AIR_QUALITY_INDEX = 182,
- AIR_QUALITY_INDEX_LEVEL = 183,
- AIR_QUALITY_INDEX_RATIO = 184,
- ELEVATION = 190,
- ELEVATION_HEIGHT_DATA = 191,
- ELEVATION_HEIGHT_UNIT = 192,
- HEIGHT_RATIO = 193,
- DISTANCE_TEXT = 194,
- DISTANCE_DATA = 195,
- DISTANCE_UNIT = 196,
- DISTANCE_TARGET_PROGRESS = 197,
- HIGH_TIDE_TIME_TEXT = 200,
- LOW_TIDE_TIME_TEXT = 201,
- BLE_CONNECTION_STATUS = 210,
- BT_CONNECTION_STATUS = 211,
- BLOOD_OXYGEN = 220,
- SYSTOLIC_BLOOD_PRESSURE = 221,
- DIASTOLIC_BLOOD_PRESSURE = 222,
- DUAL_LANGUAGE_SYSTEM = 230,
- SWIVEL_GEAR_POSITIVE = (1 << 12) + 20, // private data, clockwise
- SWIVEL_GEAR_NEGATIVE, // counterclockwise
-}; // enum class DialOHDataType
-
-struct HashOHDataType {
- size_t operator()(DialOHDataType data) const
- {
- return std::hash<int16_t>()(static_cast<int16_t>(data));
- }
-};
-
-const std::unordered_map<DialOHDataType, DialDataType, HashOHDataType> g_bindDataConverter = {
- {DialOHDataType::CLOCK, DialDataType::DATA_TYPE_TIME_HOUR},
- {DialOHDataType::MINUTES, DialDataType::DATA_TYPE_TIME_MINUTE},
- {DialOHDataType::SECONDS, DialDataType::DATA_TYPE_TIME_SECOND},
- {DialOHDataType::MILLISECOND_ANGLE, DialDataType::DATA_TYPE_CLOCK_ANGLE_MS},
- {DialOHDataType::DATE, DialDataType::DATA_TYPE_TIME_DATE},
- {DialOHDataType::WEEK_DATA, DialDataType::DATA_TYPE_TIME_WEEK},
- {DialOHDataType::CHARGE, DialDataType::DATA_TYPE_POWER},
- {DialOHDataType::STEPS, DialDataType::DATA_TYPE_STEPS},
- {DialOHDataType::CALORIES, DialDataType::DATA_TYPE_CALORIE},
- {DialOHDataType::HEART_RATE, DialDataType::DATA_TYPE_HEART_RATE},
- {DialOHDataType::STRESS, DialDataType::DATA_TYPE_PRESSURE},
- {DialOHDataType::TEMPERATURE, DialDataType::DATA_TYPE_TEMPERATURE},
- {DialOHDataType::ELEVATION, DialDataType::DATA_TYPE_AILTITUDE},
- {DialOHDataType::AIR_QUALITY_INDEX, DialDataType::DATA_TYPE_PM25},
- {DialOHDataType::CLOCK_ANGLE, DialDataType::DATA_TYPE_CLOCK_ANGLE_H},
- {DialOHDataType::MINUTE_ANGLE, DialDataType::DATA_TYPE_CLOCK_ANGLE_M},
- {DialOHDataType::SECONDS_ANGLE, DialDataType::DATA_TYPE_CLOCK_ANGLE_S},
- {DialOHDataType::MONTH, DialDataType::DATA_TYPE_TIME_MONTH},
- {DialOHDataType::SWIVEL_GEAR_POSITIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_ONE},
- {DialOHDataType::SWIVEL_GEAR_POSITIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_FOUR},
- {DialOHDataType::SWIVEL_GEAR_POSITIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_SIX},
- {DialOHDataType::SWIVEL_GEAR_NEGATIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_TWO},
- {DialOHDataType::SWIVEL_GEAR_NEGATIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_THREE},
- {DialOHDataType::SWIVEL_GEAR_NEGATIVE, DialDataType::DATA_TYPE_SWIVEL_GEAR_FIVE},
-};
-} // namespace OHOS
-
-#endif // DIAL_OH_DATATYPE_H
#include <cstdint>
#include "DialView.h"
-#include "DialTimePublisher.h"
+#include "DialModelTime.h"
#include "components/ui_image_view.h"
#include "font/font_global_manager.h"
class DialOptionImgView : public UIImageView,
public DialView,
public FontGlobalManager::LangChangeListener,
- public DialTimePublisher::TimeChangeListener {
+ public TimeChangeListener {
public:
DialOptionImgView();
~DialOptionImgView() override;
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialSequenceContainer
- * Author:
- * Create: 2025-03-05
- */
-
-#ifndef DIAL_SEQUENCE_CONTAINER_H
-#define DIAL_SEQUENCE_CONTAINER_H
-#include "components/ui_view_group.h"
-#include "components/ui_image_animator.h"
-
-namespace OHOS {
-class DialSequenceContainer : public UIViewGroup, public UIImageAnimatorView::AnimatorStopListener {
-public:
- DialSequenceContainer();
- ~DialSequenceContainer() override;
- DialSequenceContainer(const DialSequenceContainer&) = delete;
- DialSequenceContainer& operator=(const DialSequenceContainer&) = delete;
- bool AddSequenceRes(uint16_t interval, bool repeat, const ImageAnimatorInfo *imgSrc, uint8_t imgNum);
- bool OnClickEvent(const ClickEvent& event) override;
- void Start();
- void Stop();
- void Pause();
- void Resume();
- void OnAnimatorStop(UIView& view) override;
-
-private:
- void UpdateCurrentView();
- UIImageAnimatorView *repeatView_ = nullptr;
- UIImageAnimatorView *nonCycleView_[3]; // 3: max seqImg num
- // if curView_ is not null, curView_ must be added into parent.
- UIImageAnimatorView *curView_ = nullptr;
- uint8_t nonCycleNum_ = 0;
- uint8_t loop_ = 0;
- bool isClick_ = false;
-}; // class DialSequenceContainer
-} // namespace OHOS
-#endif // DIAL_SEQUENCE_CONTAINER_H
\ No newline at end of file
#include "components/ui_image_animator.h"
namespace OHOS {
+struct SequenceInfo : public HeapBase {
+ long imgOffset = 0;
+ long resPos = 0;
+ uint8_t imgNum = 0;
+ FILE *fp = nullptr;
+ std::string fileName;
+ uint16_t interval = 0;
+ bool repeat = false;
+};
-class DialSequenceImgView : public UIImageAnimatorView {
+class DialSequenceImgView : public UIImageAnimatorView, public UIImageAnimatorView::AnimatorStopListener {
public:
DialSequenceImgView();
~DialSequenceImgView() override;
- bool SetSequenceRes(const ImageAnimatorInfo* imgSrc, uint8_t imgNum);
+ bool SetSequenceRes(const ImageAnimatorInfo *imgSrc, uint8_t imgNum);
+ bool SetPreviewImg();
+ bool LoadCurSeqImgs();
+ bool AddSequenceRes(const SequenceInfo ¶);
+ bool OnClickEvent(const ClickEvent &event) override;
+ void OnAnimatorStop(UIView &view) override;
private:
- ImageAnimatorInfo* imgSrc_ = nullptr;
- uint8_t imgNum_ = 0;
+ ImageAnimatorInfo *LoadImgs(const SequenceInfo ¶, uint8_t num) const;
+ void UpdateCurrentSeq();
+ struct AnimatorInfo : public HeapBase {
+ SequenceInfo info;
+ ImageAnimatorInfo *imgs = nullptr;
+ uint8_t num = 0;
+ ~AnimatorInfo()
+ {
+ if (imgs != nullptr) {
+ UIFree(imgs);
+ imgs = nullptr;
+ num = 0;
+ }
+ }
+ };
+ void SetAnimatorInfo(AnimatorInfo *info, uint8_t num);
+ static constexpr uint8_t SEQ_IMG_NUM = 3;
+ AnimatorInfo *repeatSeq_ = nullptr;
+ AnimatorInfo *nonCycleSeq_[SEQ_IMG_NUM];
+ AnimatorInfo *curSeq_ = nullptr;
+ uint8_t nonCycleNum_ = 0;
+ uint8_t loop_ = 0;
+ bool isClick_ = false;
+ uint8_t viewNum_ = 0;
+ bool isAllImgLoaded_ = false;
};
-}
+} // namespace OHOS
#endif
#include "components/ui_image_view.h"
#include "font/font_global_manager.h"
-#include "DialTimePublisher.h"
+#include "DialModelTime.h"
namespace OHOS {
class DialStaticImgView : public UIImageView,
public FontGlobalManager::LangChangeListener,
- public DialTimePublisher::TimeChangeListener {
+ public TimeChangeListener {
public:
DialStaticImgView();
~DialStaticImgView() override;
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialTimePublisher
- * Author:
- * Create: 2025-03-04
- */
-
-#ifndef DIAL_TIME_PUBLISHER_H
-#define DIAL_TIME_PUBLISHER_H
-#include <ctime>
-#include <cstdint>
-
-namespace OHOS {
-class DialTimePublisher {
-public:
- struct TimeInterval {
- uint8_t start;
- uint8_t end;
- };
- class TimeChangeListener {
- public:
- virtual void OnTimeUpdate(const struct tm &curTime) = 0;
- void SetTimeInervals(TimeInterval *intervals, uint8_t num);
- bool IsInTimeInterval(const struct tm &curTime);
- TimeChangeListener(const TimeChangeListener&) = delete;
- TimeChangeListener& operator=(const TimeChangeListener&) = delete;
- TimeChangeListener();
- virtual ~TimeChangeListener();
- private:
- TimeInterval *intervals_ = nullptr;
- uint8_t num_ = 0;
- };
-
- virtual void Register(TimeChangeListener *listener) = 0;
- virtual void Unregister(TimeChangeListener *listener) = 0;
- virtual void UpdateTime() = 0;
- static void SetPublisher(DialTimePublisher *publisher);
- static DialTimePublisher *GetPublisher();
- virtual ~DialTimePublisher() {}
-
-private:
- static DialTimePublisher *publisher_;
-}; // class DialTimePublisher
-} // namespace OHOS
-#endif // DIAL_TIME_PUBLISHER_H
\ No newline at end of file
#include <cstdint>
#include <string>
+#include "DialDataType.h"
namespace OHOS {
virtual void HandleFloatData(float data) {}
virtual void HandleFloatData(const float* data, uint16_t num) {}
virtual void HandleTextData(const std::string* data, uint16_t num) {}
+ virtual DialDataType GetDataType()
+ {
+ return type_;
+ }
+
+ virtual void SetDataType(DialDataType type)
+ {
+ type_ = type;
+ }
+
+private:
+ DialDataType type_ = DialDataType::DATA_TYPE_MAX;
};
}
#endif
#define DIAL_VIEW_GROUP_H
#include <unordered_map>
+#include <memory>
#include "DialDataBase.h"
#include "components/ui_view_group.h"
#include "components/ui_image_animator.h"
#include "DialVideoView.h"
#include "DialBinTypesV2.h"
#include "DialViewContainer.h"
-#include "DialSequenceContainer.h"
namespace OHOS {
class DialViewGroup : public UICardPage, public OnDialDataUpdateListener, public ContainerInterface {
void SetImgAnimatorState(uint8_t state);
List<UILabel*> rollingLabelList_;
List<UIImageAnimatorView*> imgAnimList_;
- List<DialSequenceContainer*> seqList_;
+ bool isSeqImgLoaded_ = false;
+ std::shared_ptr<bool> isExists_;
};
}
#endif
#include <unordered_map>
#include "DialBaseModel.h"
#include "DialDataBase.h"
-#include "DialOHDataType.h"
#include "ModelDialDataFactory.h"
namespace OHOS {
models_[static_cast<int16_t>(type)] = model;
}
- bool IsOHBindDataExist(DialOHDataType type) const;
- bool IsBindDataExist(DialDataType type) const;
bool RegisterDialDataListener(DialDataType type, OnDialDataUpdateListener* listener);
bool UnRegisterDialDataListener(DialDataType type);
bool GetDialTextData(DialDataType& type, std::string*& out, int16_t& strNum);
void MainPresenterSample::SetTaskPeroid(CardId cardId)
{
- SetLastRun(0);
+ SetLastRun(0); // refresh entering card in time
if (cardId == COMPASS) {
SetPeriod(DEFAULT_TASK_PERIOD);
} else if (cardId == WATCH_FACE) {
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
+ * Description: DialDataBase
+ * Author:
+ * Create: 2025-04-08
+ */
+
+#include <unordered_map>
+#include "dial/DialDataBase.h"
+
+namespace {
+struct DataTypeHash {
+ size_t operator()(const DialOldDataType &data) const
+ {
+ return std::hash<int16_t>{}(static_cast<int16_t>(data));
+ }
+};
+
+static std::unordered_map<DialOldDataType, OHOS::DialDataType, DataTypeHash> g_data2std = {
+ {DialOldDataType::DATA_TYPE_STEPS, OHOS::DialDataType::STEP_COUNT},
+ {DialOldDataType::DATA_TYPE_HEART_RATE, OHOS::DialDataType::HEART_RATE},
+ {DialOldDataType::DATA_TYPE_POWER, OHOS::DialDataType::BATTERY},
+ {DialOldDataType::DATA_TYPE_CLOCK_ANGLE_H, OHOS::DialDataType::CLOCK_ANGLE},
+ {DialOldDataType::DATA_TYPE_CLOCK_ANGLE_M, OHOS::DialDataType::MINUTE_ANGLE},
+ {DialOldDataType::DATA_TYPE_CLOCK_ANGLE_S, OHOS::DialDataType::SECOND_ANGLE},
+ {DialOldDataType::DATA_TYPE_CLOCK_ANGLE_MS, OHOS::DialDataType::MILLISECOND_ANGLE},
+ {DialOldDataType::DATA_TYPE_TIME_SECOND, OHOS::DialDataType::SECOND_TIME},
+ {DialOldDataType::DATA_TYPE_TIME_MINUTE, OHOS::DialDataType::MINUTE_TIME},
+ {DialOldDataType::DATA_TYPE_TIME_HOUR, OHOS::DialDataType::CLOCK},
+ {DialOldDataType::DATA_TYPE_TIME_DATE, OHOS::DialDataType::DATE},
+ {DialOldDataType::DATA_TYPE_TIME_WEEK, OHOS::DialDataType::WEEKDAY_DATA},
+ {DialOldDataType::DATA_TYPE_TIME_MONTH, OHOS::DialDataType::MONTH},
+ {DialOldDataType::DATA_TYPE_TIME_YEAR, OHOS::DialDataType::SOLAR_YEAR},
+};
+}
+
+ OHOS::DialDataType Convert2DataType(DialOldDataType dialData)
+{
+ if (g_data2std.find(dialData) != g_data2std.end()) {
+ return g_data2std[dialData];
+ }
+ return OHOS::DialDataType::DATA_TYPE_MAX;
+}
\ No newline at end of file
#include "RegisterDialModel.h"
#include "DialModelHeartRate.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_HEART_RATE, OHOS::DialModelHeartRate::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::HEART_RATE, OHOS::DialModelHeartRate::GetInstance());
namespace OHOS {
bool DialModelHeartRate::GetDialFloatData(DialDataType& type, float& out)
{
heartRate_ = static_cast<float>(heartRate);
if (onChangeListener_ != nullptr) {
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_HEART_RATE, heartRate_);
+ onChangeListener_->OnDialFloatDataUpdate(DialDataType::HEART_RATE, heartRate_);
}
}
}
#include "RegisterDialModel.h"
#include "DialModelPower.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_POWER, OHOS::DialModelPower::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::BATTERY, OHOS::DialModelPower::GetInstance());
namespace OHOS {
bool DialModelPower::GetDialFloatData(DialDataType& type, float& out)
#include "RegisterDialModel.h"
#include "DialModelSteps.h"
-REGIST_DIAL_MODULE(DialDataType::DATA_TYPE_STEPS, OHOS::DialModelSteps::GetInstance());
+REGIST_DIAL_MODULE(OHOS::DialDataType::STEP_COUNT, OHOS::DialModelSteps::GetInstance());
namespace OHOS {
bool DialModelSteps::GetDialFloatData(DialDataType& type, float& out)
{
steps_ = static_cast<float>(steps);
if (onChangeListener_ != nullptr) {
- onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_STEPS, steps_);
+ onChangeListener_->OnDialFloatDataUpdate(DialDataType::STEP_COUNT, steps_);
}
}
}
* Create: 2023-12
*/
+#include <cmath>
#include "sys/time.h"
#include "RegisterDialModel.h"
#include "DialModelTime.h"
#define REGIST_DIAL_MODULE_WEEK(type, func) static OHOS::RegisterDialModel(REGIST_WEEK)(type, func)
#define REGIST_DIAL_MODULE_MOUNTH(type, func) static OHOS::RegisterDialModel(REGIST_MOUNTH)(type, func)
#define REGIST_DIAL_MODULE_YEAR(type, func) static OHOS::RegisterDialModel(REGIST_YEAR)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_ONE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_ONE)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_TWO(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_TWO)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_THREE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_THREE)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_FOUR(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_FOUR)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_FIVE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_FIVE)(type, func)
-#define REGIST_DIAL_MODULE_GEAR_SIX(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_SIX)(type, func)
-
-REGIST_DIAL_MODULE_ANGLE_H(DialDataType::DATA_TYPE_CLOCK_ANGLE_H, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_ANGLE_M(DialDataType::DATA_TYPE_CLOCK_ANGLE_M, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_ANGLE_S(DialDataType::DATA_TYPE_CLOCK_ANGLE_S, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_ANGLE_MS(DialDataType::DATA_TYPE_CLOCK_ANGLE_MS, OHOS::DialModelTime::GetInstance());
-
-REGIST_DIAL_MODULE_SECOND(DialDataType::DATA_TYPE_TIME_SECOND, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_MINUTE(DialDataType::DATA_TYPE_TIME_MINUTE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_HOUR(DialDataType::DATA_TYPE_TIME_HOUR, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_DATE(DialDataType::DATA_TYPE_TIME_DATE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_WEEK(DialDataType::DATA_TYPE_TIME_WEEK, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_MOUNTH(DialDataType::DATA_TYPE_TIME_MONTH, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_YEAR(DialDataType::DATA_TYPE_TIME_YEAR, OHOS::DialModelTime::GetInstance());
-
-REGIST_DIAL_MODULE_GEAR_ONE(DialDataType::DATA_TYPE_SWIVEL_GEAR_ONE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_TWO(DialDataType::DATA_TYPE_SWIVEL_GEAR_TWO, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_THREE(DialDataType::DATA_TYPE_SWIVEL_GEAR_THREE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_FOUR(DialDataType::DATA_TYPE_SWIVEL_GEAR_FOUR, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_FIVE(DialDataType::DATA_TYPE_SWIVEL_GEAR_FIVE, OHOS::DialModelTime::GetInstance());
-REGIST_DIAL_MODULE_GEAR_SIX(DialDataType::DATA_TYPE_SWIVEL_GEAR_SIX, OHOS::DialModelTime::GetInstance());
+#define REGIST_DIAL_MODULE_GEAR_POSITIVE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_POSITIVE)(type, func)
+#define REGIST_DIAL_MODULE_GEAR_NEGATIVE(type, func) static OHOS::RegisterDialModel(REGIST_GEAR_NEGATIVE)(type, func)
+
+REGIST_DIAL_MODULE_ANGLE_H(OHOS::DialDataType::CLOCK_ANGLE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_ANGLE_M(OHOS::DialDataType::MINUTE_ANGLE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_ANGLE_S(OHOS::DialDataType::SECOND_ANGLE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_ANGLE_MS(OHOS::DialDataType::MILLISECOND_ANGLE, OHOS::DialModelTime::GetInstance());
+
+REGIST_DIAL_MODULE_SECOND(OHOS::DialDataType::SECOND_TIME, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_MINUTE(OHOS::DialDataType::MINUTE_TIME, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_HOUR(OHOS::DialDataType::CLOCK, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_DATE(OHOS::DialDataType::DATE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_WEEK(OHOS::DialDataType::WEEKDAY_DATA, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_MOUNTH(OHOS::DialDataType::MONTH, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_YEAR(OHOS::DialDataType::SOLAR_YEAR, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_GEAR_POSITIVE(OHOS::DialDataType::SWIVEL_GEAR_POSITIVE, OHOS::DialModelTime::GetInstance());
+REGIST_DIAL_MODULE_GEAR_NEGATIVE(OHOS::DialDataType::SWIVEL_GEAR_NEGATIVE, OHOS::DialModelTime::GetInstance());
namespace OHOS {
static constexpr int16_t S_MS_US_TRANS = 1000; // 1000: seconds, milliseconds, microsecond transform value
{
struct timeval tv;
gettimeofday(&tv, nullptr);
+#ifdef _WIN32
+ time_t time = tv.tv_sec;
+ if (tblock_ == nullptr) {
+ tblock_ = new struct tm();
+ memset_s(tblock_, sizeof(struct tm), 0, sizeof(struct tm));
+ }
+ localtime_s(tblock_, &time);
+#else
tblock_ = localtime(&tv.tv_sec);
+#endif
int realMS = tblock_->tm_sec * S_MS_US_TRANS + tv.tv_usec / S_MS_US_TRANS;
angleH_ = ConvertHandValueToAngle(tblock_->tm_hour, HALF_DAY_IN_HOUR, tblock_->tm_min, ONE_HOUR_IN_MINUTE);
angleM_ = ConvertHandValueToAngle(tblock_->tm_min, ONE_HOUR_IN_MINUTE, tblock_->tm_sec, ONE_MINUTE_IN_SECOND);
angleS_ = ConvertHandValueToAngle(tblock_->tm_sec, ONE_MINUTE_IN_SECOND, 0, 1);
angleMS_ = ConvertHandSecondValueToAngle(realMS, S_MS_US_TRANS * ONE_MINUTE_IN_SECOND);
-
+
if (tblock_ == nullptr) {
return;
}
}
switch (type) {
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_H:
+ case DialDataType::CLOCK_ANGLE:
out = static_cast<float>(angleH_);
break;
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_M:
+ case DialDataType::MINUTE_ANGLE:
out = static_cast<float>(angleM_);
break;
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_S:
+ case DialDataType::SECOND_ANGLE:
out = static_cast<float>(angleS_);
break;
- case DialDataType::DATA_TYPE_CLOCK_ANGLE_MS:
+ case DialDataType::MILLISECOND_ANGLE:
out = static_cast<float>(angleMS_);
break;
- case DialDataType::DATA_TYPE_TIME_YEAR:
- out = static_cast<float>(tblock_->tm_year);
+ case DialDataType::SOLAR_YEAR:
+ out = static_cast<float>(tblock_->tm_year + 1900); // 1900: since 1900
break;
- case DialDataType::DATA_TYPE_TIME_MONTH:
+ case DialDataType::MONTH:
out = static_cast<float>(tblock_->tm_mon);
break;
- case DialDataType::DATA_TYPE_TIME_WEEK:
+ case DialDataType::WEEKDAY_DATA:
out = static_cast<float>(tblock_->tm_wday);
break;
- case DialDataType::DATA_TYPE_TIME_DATE:
+ case DialDataType::DATE:
out = static_cast<float>(tblock_->tm_mday);
break;
- case DialDataType::DATA_TYPE_TIME_HOUR:
+ case DialDataType::CLOCK:
out = static_cast<float>(tblock_->tm_hour);
break;
- case DialDataType::DATA_TYPE_TIME_MINUTE:
+ case DialDataType::MINUTE_TIME:
out = static_cast<float>(tblock_->tm_min);
break;
- case DialDataType::DATA_TYPE_TIME_SECOND:
+ case DialDataType::SECOND_TIME:
out = static_cast<float>(tblock_->tm_sec);
break;
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_TWO:
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_THREE:
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_FIVE: {
+ case DialDataType::SWIVEL_GEAR_POSITIVE: {
float coeff = 6.0f; // 6.0: coeff
float accleratedAngle = angleMS_ * coeff - floor(angleMS_ * coeff / CIRCLE_IN_DEGREE) * CIRCLE_IN_DEGREE;
- out = static_cast<float>(accleratedAngle * -1.0 + CIRCLE_IN_DEGREE);
+ out = static_cast<float>(accleratedAngle);
break;
}
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_ONE:
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_FOUR:
- case DialDataType::DATA_TYPE_SWIVEL_GEAR_SIX: {
+ case DialDataType::SWIVEL_GEAR_NEGATIVE: {
float coeff = 6.0f; // 6.0: coeff
float accleratedAngle = angleMS_ * coeff - floor(angleMS_ * coeff / CIRCLE_IN_DEGREE) * CIRCLE_IN_DEGREE;
- out = static_cast<float>(accleratedAngle);
+ out = static_cast<float>(accleratedAngle * -1.0 + CIRCLE_IN_DEGREE);
break;
}
default:
}
return true;
}
+
+void TimeChangeListener::SetTimeInervals(TimeInterval *intervals, uint8_t num)
+{
+ if (intervals == nullptr || num == 0) {
+ return;
+ }
+ if (intervals_ != nullptr) {
+ UIFree(intervals_);
+ intervals_ = nullptr;
+ }
+ num_ = 0;
+
+ intervals_ = static_cast<TimeInterval*>(UIMalloc(sizeof(TimeInterval) * num));
+ if (intervals_ == nullptr) {
+ GRAPHIC_LOGE("failed to malloc!");
+ return;
+ }
+ num_ = num;
+ memcpy_s(intervals_, sizeof(TimeInterval) * num, intervals, sizeof(TimeInterval) * num);
+}
+
+bool TimeChangeListener::IsInTimeInterval(const struct tm &curTime)
+{
+ if (num_ == 0) { // 0-24
+ return true;
+ }
+ for (uint8_t i = 0; i < num_; ++i) {
+ if (intervals_[i].start <= curTime.tm_hour && intervals_[i].end > curTime.tm_hour) {
+ return true;
+ }
+ }
+ return false;
+}
+
+TimeChangeListener::TimeChangeListener()
+{
+ DialModelTime::GetInstance()->Register(this);
+}
+
+TimeChangeListener::~TimeChangeListener()
+{
+ if (intervals_ != nullptr) {
+ UIFree(intervals_);
+ intervals_ = nullptr;
+ }
+ num_ = 0;
+ DialModelTime::GetInstance()->Unregister(this);
+}
}
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialSequenceContainer
- * Author:
- * Create: 2025-03-05
- */
-
-#include "DialSequenceContainer.h"
-
-namespace OHOS {
-DialSequenceContainer::DialSequenceContainer()
-{
- SetTouchable(true);
- SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
- memset_s(nonCycleView_, sizeof(nonCycleView_), 0, sizeof(nonCycleView_));
-}
-
-DialSequenceContainer::~DialSequenceContainer()
-{
- if (repeatView_ != nullptr) {
- delete repeatView_;
- repeatView_ = nullptr;
- }
-
- for (uint8_t i = 0; i < nonCycleNum_; ++i) {
- delete nonCycleView_[i];
- nonCycleView_[i] = nullptr;
- }
- nonCycleNum_ = 0;
- curView_ = nullptr;
-}
-
-bool DialSequenceContainer::AddSequenceRes(uint16_t interval, bool repeat,
- const ImageAnimatorInfo *imgSrc, uint8_t imgNum)
-{
- if (imgSrc == nullptr || imgNum == 0) {
- return false;
- }
-
- // add animator images to view
- if (repeat) {
- if (repeatView_ != nullptr) {
- GRAPHIC_LOGE("the repeat seq view has existed!");
- return false;
- }
- repeatView_ = new UIImageAnimatorView;
- repeatView_->SetImageAnimatorSrc(imgSrc, imgNum, interval);
- repeatView_->SetRepeat(false);
- } else {
- if (nonCycleNum_ >= sizeof(nonCycleView_) / sizeof(nonCycleView_[0])) {
- GRAPHIC_LOGE("non cycle seq views have been exceedeed!");
- return false;
- }
- nonCycleView_[nonCycleNum_] = new UIImageAnimatorView;
- nonCycleView_[nonCycleNum_]->SetImageAnimatorSrc(imgSrc, imgNum, interval);
- nonCycleView_[nonCycleNum_]->SetRepeat(false);
- ++nonCycleNum_;
- }
-
- // update rect area
- Rect rect(GetRelativeRect());
- for (uint8_t i = 0; i < imgNum; ++i) {
- rect.JoinRect(rect,
- Rect(rect.GetX(),
- rect.GetY(),
- rect.GetX() + imgSrc[i].width - 1,
- rect.GetY() + imgSrc[i].height - 1));
- }
- rect.JoinRect(rect, GetRelativeRect());
- SetPosition(rect.GetX(), rect.GetY());
- SetWidth(rect.GetWidth());
- SetHeight(rect.GetHeight());
- Invalidate();
-
- return true;
-}
-
-bool DialSequenceContainer::OnClickEvent(const ClickEvent& event)
-{
- if (curView_ == nullptr) {
- return false;
- }
- uint8_t curState = curView_->GetState();
- switch (curState) {
- case Animator::STOP: {
- if (curView_ == repeatView_) {
- isClick_ = true;
- } else {
- UpdateCurrentView();
- Start();
- }
- break;
- }
- case Animator::PAUSE: {
- return false;
- }
- case Animator::RUNNING:
- case Animator::START: {
- if (curView_ == repeatView_) {
- isClick_ = true;
- }
- break;
- }
- default: {
- GRAPHIC_LOGE("error state");
- }
- }
-
- return UIViewGroup::OnClickEvent(event);
-}
-
-void DialSequenceContainer::Start()
-{
- if (curView_ != nullptr) {
- curView_->Start();
- return;
- }
-
- UpdateCurrentView();
- if (curView_ == nullptr) {
- return;
- }
- curView_->Start();
-}
-
-void DialSequenceContainer::Stop()
-{
- if (curView_ != nullptr) {
- curView_->Stop();
- return;
- }
-
- UpdateCurrentView();
- if (curView_ == nullptr) {
- return;
- }
- curView_->Stop();
-}
-
-void DialSequenceContainer::Pause()
-{
- if (curView_ != nullptr) {
- curView_->Pause();
- return;
- }
-
- UpdateCurrentView();
- if (curView_ == nullptr) {
- return;
- }
- curView_->Pause();
-}
-
-void DialSequenceContainer::Resume()
-{
- if (curView_ != nullptr) {
- curView_->Resume();
- return;
- }
-
- UpdateCurrentView();
- if (curView_ == nullptr) {
- return;
- }
- curView_->Resume();
-}
-
-void DialSequenceContainer::OnAnimatorStop(UIView& view)
-{
- bool isClick = isClick_;
- isClick_ = false;
- bool isRepeat = (curView_ == repeatView_);
- if (isRepeat && isClick) {
- UpdateCurrentView();
- Start();
- } else if (isRepeat && !isClick) {
- Start();
- } else {
- if (repeatView_ != nullptr) {
- UpdateCurrentView();
- Start();
- }
- }
-}
-
-void DialSequenceContainer::UpdateCurrentView()
-{
- if (curView_ != nullptr) {
- if (repeatView_ != nullptr && nonCycleNum_ == 0) {
- return;
- } else if (repeatView_ == nullptr && nonCycleNum_ != 0) {
- Remove(curView_);
- curView_ = nonCycleView_[loop_];
- loop_ = (loop_ + 1) % nonCycleNum_;
- curView_->SetAnimatorStopListener(this);
- Add(curView_);
- Invalidate();
- return;
- }
-
- // both repeat and noncycle exist
- Remove(curView_);
- if (curView_ == repeatView_) {
- curView_ = nonCycleView_[loop_];
- loop_ = (loop_ + 1) % nonCycleNum_;
- } else {
- curView_ = repeatView_;
- }
- curView_->SetAnimatorStopListener(this);
- Add(curView_);
- Invalidate();
- return;
- }
-
- if (repeatView_ != nullptr) {
- curView_ = repeatView_;
- } else if (nonCycleNum_ != 0) {
- curView_ = nonCycleView_[loop_];
- loop_ = (loop_ + 1) % nonCycleNum_;
- } else {
- GRAPHIC_LOGE("sequence img has not been added!");
- return;
- }
- curView_->SetAnimatorStopListener(this);
- Add(curView_);
- Invalidate();
-}
-} // namespace OHOS
#include "DialSequenceImgView.h"
#include "securec.h"
+#include "common/graphic_utils.h"
+#include "common/image_cache_manager.h"
namespace OHOS {
+namespace {
+const uint32_t DIRID = 0xfef << 20; // 20: offset
+}
+
DialSequenceImgView::DialSequenceImgView(void)
{
+ SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+ memset_s(nonCycleSeq_, sizeof(nonCycleSeq_), 0, sizeof(nonCycleSeq_));
}
DialSequenceImgView::~DialSequenceImgView(void)
{
- if (imgSrc_ != nullptr) {
- UIFree(imgSrc_);
+ if (repeatSeq_ != nullptr) {
+ delete repeatSeq_;
+ repeatSeq_ = nullptr;
+ }
+
+ for (uint8_t i = 0; i < nonCycleNum_; ++i) {
+ delete nonCycleSeq_[i];
+ nonCycleSeq_[i] = nullptr;
}
+ nonCycleNum_ = 0;
+ loop_ = 0;
+ isClick_ = false;
+ viewNum_ = 0;
+ isAllImgLoaded_ = false;
+ curSeq_ = nullptr;
}
-bool DialSequenceImgView::SetSequenceRes(const ImageAnimatorInfo* imgSrc, uint8_t imgNum)
+bool DialSequenceImgView::SetSequenceRes(const ImageAnimatorInfo *imgSrc, uint8_t imgNum)
{
if (imgSrc == nullptr || imgNum == 0) {
return false;
}
- if (imgSrc_ != nullptr) {
- UIFree(imgSrc_);
- imgNum_ = 0;
+
+ SetImageAnimatorSrc(imgSrc, imgNum);
+ return true;
+}
+
+bool DialSequenceImgView::SetPreviewImg()
+{
+ if (curSeq_ == nullptr) {
+ UpdateCurrentSeq();
}
- uint32_t size = sizeof(ImageAnimatorInfo) * imgNum;
- imgSrc_ = static_cast<ImageAnimatorInfo*>(UIMalloc(size));
- if (imgSrc_ == nullptr) {
+ if (curSeq_ == nullptr) {
return false;
}
- if (memcpy_s(imgSrc_, size, imgSrc, size) != EOK) {
- UIFree(imgSrc_);
+ SetAnimatorInfo(curSeq_, 1);
+ isAllImgLoaded_ = false;
+ SetSrc(curSeq_->imgs[0].imageInfo);
+ SetPosition(curSeq_->imgs[0].pos.x, curSeq_->imgs[0].pos.y);
+ SetWidth(curSeq_->imgs[0].width);
+ SetHeight(curSeq_->imgs[0].height);
+ Invalidate();
+ return true;
+}
+
+bool DialSequenceImgView::LoadCurSeqImgs()
+{
+ if (curSeq_ == nullptr) {
+ UpdateCurrentSeq();
+ }
+ if (curSeq_ == nullptr) {
return false;
}
- imgNum_ = imgNum;
- SetImageAnimatorSrc(imgSrc_, imgNum_);
+ isAllImgLoaded_ = true;
+ SetAnimatorInfo(curSeq_, curSeq_->info.imgNum);
return true;
}
-}
\ No newline at end of file
+
+bool DialSequenceImgView::AddSequenceRes(const SequenceInfo ¶)
+{
+ if (viewNum_ >= SEQ_IMG_NUM) {
+ GRAPHIC_LOGE("seq num has exceeded!");
+ return false;
+ }
+
+ if (para.repeat) {
+ if (repeatSeq_ != nullptr) {
+ GRAPHIC_LOGE("the repeat seq has existed!");
+ return false;
+ }
+ repeatSeq_ = new AnimatorInfo;
+ repeatSeq_->info = para;
+ } else {
+ if (nonCycleNum_ >= SEQ_IMG_NUM) {
+ GRAPHIC_LOGE("non cycle seq have been exceedeed!");
+ return false;
+ }
+ nonCycleSeq_[nonCycleNum_] = new AnimatorInfo;
+ nonCycleSeq_[nonCycleNum_]->info = para;
+ ++nonCycleNum_;
+ }
+
+ SetTouchable(true);
+ SetAnimatorStopListener(this);
+ SetRepeat(false);
+ ++viewNum_;
+ return true;
+}
+
+bool DialSequenceImgView::OnClickEvent(const ClickEvent &event)
+{
+ if (!isAllImgLoaded_) {
+ return false;
+ }
+ if (curSeq_ == nullptr) {
+ return false;
+ }
+ uint8_t curState = GetState();
+ switch (curState) {
+ case Animator::STOP: {
+ if (curSeq_ == repeatSeq_) {
+ isClick_ = true;
+ } else {
+ UpdateCurrentSeq();
+ SetAnimatorInfo(curSeq_, curSeq_->info.imgNum);
+ Start();
+ }
+ break;
+ }
+ case Animator::PAUSE: {
+ return false;
+ }
+ case Animator::RUNNING:
+ case Animator::START: {
+ if (curSeq_ == repeatSeq_) {
+ isClick_ = true;
+ }
+ break;
+ }
+ default: {
+ GRAPHIC_LOGE("error state");
+ }
+ }
+
+ return UIImageAnimatorView::OnClickEvent(event);
+}
+
+void DialSequenceImgView::OnAnimatorStop(UIView &view)
+{
+ if (!isAllImgLoaded_) {
+ return;
+ }
+ bool isClick = isClick_;
+ isClick_ = false;
+ bool isRepeat = (curSeq_ == repeatSeq_);
+ if (isRepeat && isClick) {
+ UpdateCurrentSeq();
+ SetAnimatorInfo(curSeq_, curSeq_->info.imgNum);
+ Start();
+ } else if (isRepeat && !isClick) {
+ Start();
+ } else {
+ if (repeatSeq_ != nullptr) {
+ UpdateCurrentSeq();
+ SetAnimatorInfo(curSeq_, curSeq_->info.imgNum);
+ Start();
+ }
+ }
+}
+
+ImageAnimatorInfo *DialSequenceImgView::LoadImgs(const SequenceInfo ¶, uint8_t num) const
+{
+ if (para.fp == nullptr || num > para.imgNum) {
+ return nullptr;
+ }
+
+ long curPt = ftell(para.fp);
+ fseek(para.fp, para.resPos, SEEK_SET);
+ uint16_t *imgIdArray = static_cast<uint16_t *>(UIMalloc(sizeof(uint16_t) * num));
+ defer
+ {
+ if (imgIdArray != nullptr) {
+ UIFree(imgIdArray);
+ }
+ fseek(para.fp, curPt, SEEK_SET);
+ };
+ if (imgIdArray == nullptr) {
+ return nullptr;
+ }
+ ImageAnimatorInfo *imgInfoArray = static_cast<ImageAnimatorInfo *>(UIMalloc(num * sizeof(ImageAnimatorInfo)));
+ if (imgInfoArray == nullptr) {
+ return nullptr;
+ }
+
+ if (fread(imgIdArray, 1, sizeof(uint16_t) * num, para.fp) != sizeof(uint16_t) * num) {
+ GRAPHIC_LOGE("failed to read resId");
+ UIFree(imgInfoArray);
+ return nullptr;
+ }
+ for (uint8_t i = 0; i < num; ++i) {
+ uint32_t resId = imgIdArray[i] | DIRID;
+ ImageInfo *info =
+ ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, para.fileName, para.fp, false, para.imgOffset);
+ if (info == nullptr) {
+ GRAPHIC_LOGE("load img fail! file:%s resId:%x", para.fileName.c_str(), resId);
+ UIFree(imgInfoArray);
+ return nullptr;
+ }
+ imgInfoArray[i].imageInfo = info;
+ imgInfoArray[i].pos = {GetRelativeRect().GetX(), GetRelativeRect().GetY()};
+ imgInfoArray[i].width = info->header.width;
+ imgInfoArray[i].height = info->header.height;
+ imgInfoArray[i].imageType = IMG_SRC_IMAGE_INFO;
+ }
+ return imgInfoArray;
+}
+
+void DialSequenceImgView::UpdateCurrentSeq()
+{
+ if (curSeq_ != nullptr) {
+ if (repeatSeq_ != nullptr && nonCycleNum_ == 0) {
+ return;
+ } else if (repeatSeq_ == nullptr && nonCycleNum_ != 0) {
+ curSeq_ = nonCycleSeq_[loop_];
+ loop_ = (loop_ + 1) % nonCycleNum_;
+ return;
+ }
+
+ // both repeat and noncycle exist
+ if (curSeq_ == repeatSeq_) {
+ curSeq_ = nonCycleSeq_[loop_];
+ loop_ = (loop_ + 1) % nonCycleNum_;
+ } else {
+ curSeq_ = repeatSeq_;
+ }
+ return;
+ }
+
+ if (repeatSeq_ != nullptr) {
+ curSeq_ = repeatSeq_;
+ } else if (nonCycleNum_ != 0) {
+ curSeq_ = nonCycleSeq_[loop_];
+ loop_ = (loop_ + 1) % nonCycleNum_;
+ } else {
+ GRAPHIC_LOGE("sequence img has not been added!");
+ return;
+ }
+}
+
+void DialSequenceImgView::SetAnimatorInfo(AnimatorInfo *info, uint8_t num)
+{
+ if (info == nullptr || num == 0) {
+ GRAPHIC_LOGE("para error");
+ return;
+ }
+ if (num > info->info.imgNum) {
+ GRAPHIC_LOGE("The number of images exceeds the limit.");
+ return;
+ }
+
+ if (num == info->num && info->imgs != nullptr) {
+ SetImageAnimatorSrc(info->imgs, info->num, info->info.interval);
+ } else {
+ if (info->imgs != nullptr) {
+ UIFree(info->imgs);
+ }
+ info->num = num;
+ info->imgs = LoadImgs(info->info, info->num);
+ if (info->imgs == nullptr) {
+ return;
+ }
+ SetImageAnimatorSrc(info->imgs, info->num, info->info.interval);
+ }
+}
+} // namespace OHOS
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) CompanyNameMagicTag 2025. All rights reserved.
- * Description: DialTimePublisher
- * Author:
- * Create: 2025-03-04
- */
-
-#include "DialTimePublisher.h"
-#include "securec.h"
-#include "gfx_utils/mem_api.h"
-#include "gfx_utils/graphic_log.h"
-
-namespace OHOS {
-DialTimePublisher *DialTimePublisher::publisher_ = nullptr;
-
-void DialTimePublisher::TimeChangeListener::SetTimeInervals(TimeInterval *intervals, uint8_t num)
-{
- if (intervals == nullptr || num == 0) {
- return;
- }
- if (intervals_ != nullptr) {
- UIFree(intervals_);
- intervals_ = nullptr;
- }
- num_ = 0;
-
- intervals_ = static_cast<TimeInterval*>(UIMalloc(sizeof(TimeInterval) * num));
- if (intervals_ == nullptr) {
- GRAPHIC_LOGE("failed to malloc!");
- return;
- }
- num_ = num;
- memcpy_s(intervals_, sizeof(TimeInterval) * num, intervals, sizeof(TimeInterval) * num);
-}
-
-bool DialTimePublisher::TimeChangeListener::IsInTimeInterval(const struct tm &curTime)
-{
- if (num_ == 0) { // 0-24
- return true;
- }
- for (uint8_t i = 0; i < num_; ++i) {
- if (intervals_[i].start <= curTime.tm_hour && intervals_[i].end > curTime.tm_hour) {
- return true;
- }
- }
- return false;
-}
-
-DialTimePublisher::TimeChangeListener::TimeChangeListener()
-{
- if (DialTimePublisher::GetPublisher() != nullptr) {
- DialTimePublisher::GetPublisher()->Register(this);
- }
-}
-
-DialTimePublisher::TimeChangeListener::~TimeChangeListener()
-{
- if (intervals_ != nullptr) {
- UIFree(intervals_);
- intervals_ = nullptr;
- }
- num_ = 0;
- if (DialTimePublisher::GetPublisher() != nullptr) {
- DialTimePublisher::GetPublisher()->Unregister(this);
- }
-}
-
-void DialTimePublisher::SetPublisher(DialTimePublisher *publisher)
-{
- publisher_ = publisher;
-}
-
-DialTimePublisher *DialTimePublisher::GetPublisher()
-{
- return publisher_;
-}
-} // namespace OHOS
\ No newline at end of file
#include "DialViewContainer.h"
#include "DialDigitalImgView.h"
+#include "ModelDialDataFactory.h"
namespace OHOS {
DialViewContainer::~DialViewContainer()
.type = type,
.isPeriodic = isPeriodic
};
- if (type == DialDataType::DATA_TYPE_MAX) {
+ if (ModelDialDataFactory::GetInstance().GetModuleByType(type) == nullptr) {
hasInvalidBindData_ = true;
}
dialViews_.PushBack(info);
for (uint8_t i = 0; i < index; ++i) {
it = it->next_;
}
- if (it->data_.dialView != nullptr && it->data_.type == DialDataType::DATA_TYPE_MAX) {
+ if (it->data_.dialView != nullptr &&
+ ModelDialDataFactory::GetInstance().GetModuleByType(it->data_.type) == nullptr) {
return true;
}
DialViewContainer *container = dynamic_cast<DialViewContainer*>(it->data_.view);
#endif
#include "MainPresenterSample.h"
#include "DialDigitalImgView.h"
+#include "common/input_device_manager.h"
+#include "DialSequenceImgView.h"
+#include "engines/gfx/lite_m_gfx_engine.h"
namespace OHOS {
DialViewGroup::DialViewGroup(void)
SetTouchable(true);
SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
SetCoverable(true);
+ isExists_ = std::make_shared<bool>(true);
}
DialViewGroup::~DialViewGroup(void)
rollingLabelList_.Clear();
imgAnimList_.Clear();
- seqList_.Clear();
period_ = DEFAULT_TASK_PERIOD;
void DialViewGroup::SetDial(std::string filePath, DisplayState state)
{
- ClearDial();
- resPreloaded_ = false;
+ if (resPreloaded_) {
+ ClearDial();
+ resPreloaded_ = false;
+ }
filePath_ = filePath;
state_ = state;
}
} else if (value == 1) { // 1: text
std::string* textData = nullptr;
int16_t num = 0;
- ModelDialDataFactory::GetInstance().GetDialTextData(type, textData, num);
+ if (!ModelDialDataFactory::GetInstance().GetDialTextData(type, textData, num)) {
+ std::string tmp = "";
+ view->HandleTextData(&tmp, 1);
+ return;
+ }
view->HandleTextData(textData, num);
} else if (value == 2) { // 2: multifloat
float* floatsData = nullptr;
int16_t num = 0;
- ModelDialDataFactory::GetInstance().GetDialFloatData(type, floatsData, num);
+ if (!ModelDialDataFactory::GetInstance().GetDialFloatData(type, floatsData, num)) {
+ float tmp = 0.0;
+ view->HandleFloatData(&tmp, 1);
+ return;
+ }
view->HandleFloatData(floatsData, num);
+ } else {
+ GRAPHIC_LOGW("invalid datatype %d", static_cast<int>(type));
}
}
void DialViewGroup::DoStop(void)
void DialViewGroup::DoStart(void)
{
SetLableAnimatorState(Animator::START);
- SetImgAnimatorState(Animator::START);
+ if (isSeqImgLoaded_) {
+ SetImgAnimatorState(Animator::START);
+ }
if (video_ != nullptr) {
if (video_->IsPaused()) {
video_->ResumePlay();
return;
}
video_ = reinterpret_cast<DialVideoView*>(view);
- } else if (dynamic_cast<DialSequenceContainer*>(view) != nullptr) {
- DialSequenceContainer *seq = dynamic_cast<DialSequenceContainer*>(view);
- seqList_.PushBack(seq);
}
}
dataTypeMap_.insert(std::make_pair(static_cast<int16_t>(type), container));
viewsMemPool_.PushBack(container);
}
+ view->SetDataType(type);
if (isPeriodic) {
periodicUpdateTypes_.PushBack(type);
} else {
if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != MainPresenterState::RESUME)) {
return;
}
+ if (!isSeqImgLoaded_) {
+ std::weak_ptr<bool> wk = isExists_;
+ GraphicService::GetInstance()->ForceRefreshImmediately();
+ GraphicService::GetInstance()->PostGraphicEvent([this, wk]() {
+ if (wk.expired()) {
+ return;
+ }
+
+ InputDeviceManager::GetInstance()->ClearInputDeviceState();
+ ListNode<UIImageAnimatorView *> *node = imgAnimList_.Begin();
+ while (node != imgAnimList_.End()) {
+ if (node->data_ != nullptr) {
+ DialSequenceImgView *imgAnim = dynamic_cast<DialSequenceImgView *>(node->data_);
+ if (imgAnim != nullptr) {
+ imgAnim->LoadCurSeqImgs();
+ imgAnim->Start();
+ }
+ }
+ node = node->next_;
+ }
+ isSeqImgLoaded_ = true;
+ });
+ }
DoStart();
}
void DialViewGroup::SetImgAnimatorState(uint8_t state)
{
- if (imgAnimList_.IsEmpty() && seqList_.IsEmpty()) {
+ if (imgAnimList_.IsEmpty()) {
return;
}
}
node = node->next_;
}
-
- ListNode<DialSequenceContainer*>* it = seqList_.Begin();
- while (it != seqList_.End()) {
- if (it->data_ != nullptr) {
- switch (state) {
- case Animator::PAUSE:
- it->data_->Pause();
- break;
- case Animator::START:
- it->data_->Resume();
- break;
- }
- }
- it = it->next_;
- }
}
} // namespace OHOS
return iter->second;
}
-bool ModelDialDataFactory::IsOHBindDataExist(DialOHDataType type) const
-{
- auto it = g_bindDataConverter.find(type);
- if (it == g_bindDataConverter.end()) {
- return false;
- }
- return IsBindDataExist(it->second);
-}
-
-bool ModelDialDataFactory::IsBindDataExist(DialDataType type) const
-{
- auto it = models_.find(static_cast<int16_t>(type));
- if (it != models_.end() && it->second != nullptr) {
- return true;
- }
- return false;
-}
-
bool ModelDialDataFactory::RegisterDialDataListener(DialDataType type, OnDialDataUpdateListener* listener)
{
DialBaseModel* model = GetModuleByType(type);
-<MSG_LOG><MSG STRUCTURE="diag_log_msg2" NAME="Invalid param! file: %p, readSize: %u. @DialBinParser.cpp(60),ERROR" ID="0xb8d001e2" />
- <MSG STRUCTURE="diag_log_msg1" NAME="UIMalloc fail! size: %u. @DialBinParser.cpp(65),ERROR" ID="0xb8d0020a" />
- <MSG STRUCTURE="diag_log_msg1" NAME="fread fail! readSize: %u. @DialBinParser.cpp(71),ERROR" ID="0xb8d0023a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Get dial preview fail, param error! @DialBinParser.cpp(80),ERROR" ID="0xb8d00282" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(87),ERROR" ID="0xb8d002ba" />
- <MSG STRUCTURE="diag_log_msg0" NAME="file fseek 0 failed! @DialBinParser.cpp(95),ERROR" ID="0xb8d002fa" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(101),ERROR" ID="0xb8d0032a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="memcpy_s dial name fail! @DialBinParser.cpp(110),ERROR" ID="0xb8d00372" />
- <MSG STRUCTURE="diag_log_msg0" NAME="memcpy_s dial description fail! @DialBinParser.cpp(117),ERROR" ID="0xb8d003aa" />
- <MSG STRUCTURE="diag_log_msg0" NAME="fp is nullptr! @DialBinParser.cpp(161),ERROR" ID="0xb8d0050a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="update dial param error! @DialBinParser.cpp(165),ERROR" ID="0xb8d0052a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parse dial header fail, allom header mem fail! @DialBinParser.cpp(174),ERROR" ID="0xb8d00572" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial header fail, param error! @DialBinParser.cpp(183),ERROR" ID="0xb8d005ba" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(190),ERROR" ID="0xb8d005f2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="file fseek 0 failed! @DialBinParser.cpp(199),ERROR" ID="0xb8d0063a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(205),ERROR" ID="0xb8d0066a" />
- <MSG STRUCTURE="diag_log_msg2" NAME="capability %u not support state %d! @DialBinParser.cpp(214),ERROR" ID="0xb8d006b2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(235),ERROR" ID="0xb8d0075a" />
- <MSG STRUCTURE="diag_log_msg1" NAME="parser dial view fail, view type id is %d! @DialBinParser.cpp(243),ERROR" ID="0xb8d0079a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial static image fail, file is nullptr! @DialBinParser.cpp(257),ERROR" ID="0xb8d0080a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(269),ERROR" ID="0xb8d0086a" />
- <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file:%s resId:%x @DialBinParser.cpp(280),ERROR" ID="0xb8d008c2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial sequence image fail, file is nullptr! @DialBinParser.cpp(302),ERROR" ID="0xb8d00972" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(315),ERROR" ID="0xb8d009da" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(321),ERROR" ID="0xb8d00a0a" />
- <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file:%s resId:%x @DialBinParser.cpp(339),ERROR" ID="0xb8d00a9a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial sequence image fail, file is nullptr! @DialBinParser.cpp(370),ERROR" ID="0xb8d00b92" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(383),ERROR" ID="0xb8d00bfa" />
- <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file:%s resId:%x @DialBinParser.cpp(395),ERROR" ID="0xb8d00c5a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(423),ERROR" ID="0xb8d00d3a" />
+<MSG_LOG><MSG STRUCTURE="diag_log_msg2" NAME="Invalid param! file: %p, readSize: %u. @DialBinParser.cpp(61),ERROR" ID="0xb8d001ea" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="UIMalloc fail! size: %u. @DialBinParser.cpp(66),ERROR" ID="0xb8d00212" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="fread fail! readSize: %u. @DialBinParser.cpp(72),ERROR" ID="0xb8d00242" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Get dial preview fail, param error! @DialBinParser.cpp(81),ERROR" ID="0xb8d0028a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(88),ERROR" ID="0xb8d002c2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="file fseek 0 failed! @DialBinParser.cpp(96),ERROR" ID="0xb8d00302" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(102),ERROR" ID="0xb8d00332" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="memcpy_s dial name fail! @DialBinParser.cpp(111),ERROR" ID="0xb8d0037a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="memcpy_s dial description fail! @DialBinParser.cpp(118),ERROR" ID="0xb8d003b2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="fp is nullptr! @DialBinParser.cpp(162),ERROR" ID="0xb8d00512" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="update dial param error! @DialBinParser.cpp(166),ERROR" ID="0xb8d00532" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parse dial header fail, allom header mem fail! @DialBinParser.cpp(175),ERROR" ID="0xb8d0057a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial header fail, param error! @DialBinParser.cpp(184),ERROR" ID="0xb8d005c2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(191),ERROR" ID="0xb8d005fa" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="file fseek 0 failed! @DialBinParser.cpp(200),ERROR" ID="0xb8d00642" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(206),ERROR" ID="0xb8d00672" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="capability %u not support state %d! @DialBinParser.cpp(215),ERROR" ID="0xb8d006ba" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(236),ERROR" ID="0xb8d00762" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="parser dial view fail, view type id is %d! @DialBinParser.cpp(244),ERROR" ID="0xb8d007a2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial static image fail, file is nullptr! @DialBinParser.cpp(258),ERROR" ID="0xb8d00812" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(270),ERROR" ID="0xb8d00872" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file:%s resId:%x @DialBinParser.cpp(281),ERROR" ID="0xb8d008ca" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial sequence image fail, file is nullptr! @DialBinParser.cpp(303),ERROR" ID="0xb8d0097a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(316),ERROR" ID="0xb8d009e2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="failed to add sequence! @DialBinParser.cpp(333),ERROR" ID="0xb8d00a6a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="failed to load imgs! @DialBinParser.cpp(339),ERROR" ID="0xb8d00a9a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial sequence image fail, file is nullptr! @DialBinParser.cpp(362),ERROR" ID="0xb8d00b52" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(375),ERROR" ID="0xb8d00bba" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file:%s resId:%x @DialBinParser.cpp(387),ERROR" ID="0xb8d00c1a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(416),ERROR" ID="0xb8d00d02" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(430),ERROR" ID="0xb8d00d72" />
<MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(437),ERROR" ID="0xb8d00daa" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(444),ERROR" ID="0xb8d00de2" />
- <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file:%s resId:%x @DialBinParser.cpp(458),ERROR" ID="0xb8d00e52" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(501),ERROR" ID="0xb8d00faa" />
- <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file: %s resId: %x @DialBinParser.cpp(541),ERROR" ID="0xb8d010ea" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(571),ERROR" ID="0xb8d011da" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(585),ERROR" ID="0xb8d0124a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(626),ERROR" ID="0xb8d01392" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(638),ERROR" ID="0xb8d013f2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="param error! @DialBinParser.cpp(678),ERROR" ID="0xb8d01532" />
- <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file: %s resId: %x @DialBinParser.cpp(688),ERROR" ID="0xb8d01582" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(702),ERROR" ID="0xb8d015f2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(717),ERROR" ID="0xb8d0166a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(730),ERROR" ID="0xb8d016d2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(767),ERROR" ID="0xb8d017fa" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(780),ERROR" ID="0xb8d01862" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(823),ERROR" ID="0xb8d019ba" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(836),ERROR" ID="0xb8d01a22" />
- <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file: %s resId: %x @DialBinParser.cpp(849),ERROR" ID="0xb8d01a8a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(869),ERROR" ID="0xb8d01b2a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(882),ERROR" ID="0xb8d01b92" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(906),ERROR" ID="0xb8d01c52" />
- <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(919),ERROR" ID="0xb8d01cba" />
- <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file: %s resId: %x @DialBinParser.cpp(935),ERROR" ID="0xb8d01d3a" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file:%s resId:%x @DialBinParser.cpp(451),ERROR" ID="0xb8d00e1a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(495),ERROR" ID="0xb8d00f7a" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file: %s resId: %x @DialBinParser.cpp(535),ERROR" ID="0xb8d010ba" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(566),ERROR" ID="0xb8d011b2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(580),ERROR" ID="0xb8d01222" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(621),ERROR" ID="0xb8d0136a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(633),ERROR" ID="0xb8d013ca" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="param error! @DialBinParser.cpp(673),ERROR" ID="0xb8d0150a" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file: %s resId: %x @DialBinParser.cpp(683),ERROR" ID="0xb8d0155a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(697),ERROR" ID="0xb8d015ca" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(712),ERROR" ID="0xb8d01642" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(725),ERROR" ID="0xb8d016aa" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(762),ERROR" ID="0xb8d017d2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(775),ERROR" ID="0xb8d0183a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(818),ERROR" ID="0xb8d01992" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(831),ERROR" ID="0xb8d019fa" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file: %s resId: %x @DialBinParser.cpp(844),ERROR" ID="0xb8d01a62" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(864),ERROR" ID="0xb8d01b02" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(877),ERROR" ID="0xb8d01b6a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Parser dial option image fail, file is nullptr! @DialBinParser.cpp(901),ERROR" ID="0xb8d01c2a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="malloc or read fail! @DialBinParser.cpp(914),ERROR" ID="0xb8d01c92" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="load img fail! file: %s resId: %x @DialBinParser.cpp(930),ERROR" ID="0xb8d01d12" />
</MSG_LOG>
\ No newline at end of file
<MSG STRUCTURE="diag_log_msg0" NAME="unsupported color format @display_vau.c(365),ERROR" ID="0xcb200b6a" />
<MSG STRUCTURE="diag_log_msg0" NAME="Blend type of each image must be same when blitting them together. @display_vau.c(422),ERROR" ID="0xcb200d32" />
<MSG STRUCTURE="diag_log_msg0" NAME="ConvertVGUImg2VauSurface failed @display_vau.c(426),ERROR" ID="0xcb200d52" />
- <MSG STRUCTURE="diag_log_msg1" NAME="uapi_vau_compose failure, ret = 0x%x! @display_vau.c(477),ERROR" ID="0xcb200eea" />
- <MSG STRUCTURE="diag_log_msg14" NAME="src[%d] w:%u h:%u str:%u fmt:%d cmp:%d rect:[%d,%d,%u,%u] outRect:[%d,%d,%u,%u] @display_vau.c(484),ERROR" ID="0xcb200f22" />
- <MSG STRUCTURE="diag_log_msg0" NAME="DispMalloc for dstSurface failed! @display_vau.c(541),ERROR" ID="0xcb2010ea" />
- <MSG STRUCTURE="diag_log_msg0" NAME="1st render error!!!! @display_vau.c(556),ERROR" ID="0xcb201162" />
- <MSG STRUCTURE="diag_log_msg0" NAME="2nd render error!!!! @display_vau.c(580),ERROR" ID="0xcb201222" />
- <MSG STRUCTURE="diag_log_msg0" NAME="invalid cmd num: 0. @display_vau.c(596),ERROR" ID="0xcb2012a2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="VGUPathAppendData with invalid path. @display_vau.c(601),ERROR" ID="0xcb2012ca" />
- <MSG STRUCTURE="diag_log_msg0" NAME="invalid cmd num: 0. @display_vau.c(617),ERROR" ID="0xcb20134a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="VGUPathAppendData with invalid path. @display_vau.c(622),ERROR" ID="0xcb201372" />
- <MSG STRUCTURE="diag_log_msg2" NAME="%s: %d memcpy_s failed @display_vau.c(631),ERROR" ID="0xcb2013ba" />
- <MSG STRUCTURE="diag_log_msg2" NAME="%s: %d memcpy_s for cmd failed. @display_vau.c(641),ERROR" ID="0xcb20140a" />
- <MSG STRUCTURE="diag_log_msg2" NAME="%s: %d memcpy_s failed @display_vau.c(651),ERROR" ID="0xcb20145a" />
- <MSG STRUCTURE="diag_log_msg1" NAME="Invalid gradient type: %d @display_vau.c(720),ERROR" ID="0xcb201682" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Invalid VGUFillRule. @display_vau.c(738),ERROR" ID="0xcb201712" />
- <MSG STRUCTURE="diag_log_msg0" NAME="HandlePaintStyle failed. @display_vau.c(743),ERROR" ID="0xcb20173a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Invalid Cap Style! @display_vau.c(763),ERROR" ID="0xcb2017da" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Invalid Join Style! @display_vau.c(784),ERROR" ID="0xcb201882" />
- <MSG STRUCTURE="diag_log_msg0" NAME="HandlePaintStyle failed. @display_vau.c(798),ERROR" ID="0xcb2018f2" />
- <MSG STRUCTURE="diag_log_msg1" NAME="uapi_vau_render failure, ret = 0x%x! @display_vau.c(981),ERROR" ID="0xcb201eaa" />
- <MSG STRUCTURE="diag_log_msg1" NAME="uapi_vau_render failure, ret = 0x%x! @display_vau.c(1048),ERROR" ID="0xcb2020c2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="RenderPath with invalid path. @display_vau.c(1185),ERROR" ID="0xcb20250a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="One of fill and stroke in path attr should be set! @display_vau.c(1190),ERROR" ID="0xcb202532" />
- <MSG STRUCTURE="diag_log_msg1" NAME="[%d] DispMalloc for tmpTarget1 failed @display_vau.c(1222),ERROR" ID="0xcb202632" />
- <MSG STRUCTURE="diag_log_msg1" NAME="[%d] DispMalloc for tmpTarget2 failed @display_vau.c(1230),ERROR" ID="0xcb202672" />
- <MSG STRUCTURE="diag_log_msg1" NAME="[%d] RenderPathInternal failed @display_vau.c(1237),ERROR" ID="0xcb2026aa" />
- <MSG STRUCTURE="diag_log_msg1" NAME="[%d] RenderPatternInternal failed @display_vau.c(1242),ERROR" ID="0xcb2026d2" />
- <MSG STRUCTURE="diag_log_msg1" NAME="[%d] BlendToSurface failed @display_vau.c(1247),ERROR" ID="0xcb2026fa" />
- <MSG STRUCTURE="diag_log_msg1" NAME="[%d] BlendToSurface failed @display_vau.c(1252),ERROR" ID="0xcb202722" />
- <MSG STRUCTURE="diag_log_msg1" NAME="[%d] RenderPathInternal failed @display_vau.c(1279),ERROR" ID="0xcb2027fa" />
- <MSG STRUCTURE="diag_log_msg1" NAME="[%d] BlendImgToSurface failed @display_vau.c(1283),ERROR" ID="0xcb20281a" />
- <MSG STRUCTURE="diag_log_msg1" NAME="g_hdlLast %lld has not been destroyed, destroy now. @display_vau.c(1329),ERROR" ID="0xcb20298a" />
- <MSG STRUCTURE="diag_log_msg1" NAME="uapi_vau_submit failure, ret = 0x%x! @display_vau.c(1336),ERROR" ID="0xcb2029c2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="gFuncs is null @display_vau.c(1348),ERROR" ID="0xcb202a22" />
- <MSG STRUCTURE="diag_log_msg0" NAME="memset_s gFuncs failed @display_vau.c(1354),ERROR" ID="0xcb202a52" />
- <MSG STRUCTURE="diag_log_msg0" NAME="VGU initializes successfully @display_vau.c(1373),INFO" ID="0xcb202aed" />
- <MSG STRUCTURE="diag_log_msg0" NAME="VGU uninitializes successfully @display_vau.c(1382),INFO" ID="0xcb202b35" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="uapi_vau_compose failure, ret = 0x%x! @display_vau.c(472),ERROR" ID="0xcb200ec2" />
+ <MSG STRUCTURE="diag_log_msg14" NAME="src[%d] w:%u h:%u str:%u fmt:%d cmp:%d rect:[%d,%d,%u,%u] outRect:[%d,%d,%u,%u] @display_vau.c(479),ERROR" ID="0xcb200efa" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="DispMalloc for dstSurface failed! @display_vau.c(536),ERROR" ID="0xcb2010c2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="1st render error!!!! @display_vau.c(551),ERROR" ID="0xcb20113a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="2nd render error!!!! @display_vau.c(575),ERROR" ID="0xcb2011fa" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="invalid cmd num: 0. @display_vau.c(591),ERROR" ID="0xcb20127a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="VGUPathAppendData with invalid path. @display_vau.c(596),ERROR" ID="0xcb2012a2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="invalid cmd num: 0. @display_vau.c(612),ERROR" ID="0xcb201322" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="VGUPathAppendData with invalid path. @display_vau.c(617),ERROR" ID="0xcb20134a" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="%s: %d memcpy_s failed @display_vau.c(626),ERROR" ID="0xcb201392" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="%s: %d memcpy_s for cmd failed. @display_vau.c(636),ERROR" ID="0xcb2013e2" />
+ <MSG STRUCTURE="diag_log_msg2" NAME="%s: %d memcpy_s failed @display_vau.c(646),ERROR" ID="0xcb201432" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="Invalid gradient type: %d @display_vau.c(715),ERROR" ID="0xcb20165a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Invalid VGUFillRule. @display_vau.c(733),ERROR" ID="0xcb2016ea" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="HandlePaintStyle failed. @display_vau.c(738),ERROR" ID="0xcb201712" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Invalid Cap Style! @display_vau.c(758),ERROR" ID="0xcb2017b2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Invalid Join Style! @display_vau.c(779),ERROR" ID="0xcb20185a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="HandlePaintStyle failed. @display_vau.c(793),ERROR" ID="0xcb2018ca" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="uapi_vau_render failure, ret = 0x%x! @display_vau.c(976),ERROR" ID="0xcb201e82" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="uapi_vau_render failure, ret = 0x%x! @display_vau.c(1043),ERROR" ID="0xcb20209a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="RenderPath with invalid path. @display_vau.c(1175),ERROR" ID="0xcb2024ba" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="One of fill and stroke in path attr should be set! @display_vau.c(1180),ERROR" ID="0xcb2024e2" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="[%d] DispMalloc for tmpTarget1 failed @display_vau.c(1212),ERROR" ID="0xcb2025e2" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="[%d] DispMalloc for tmpTarget2 failed @display_vau.c(1220),ERROR" ID="0xcb202622" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="[%d] RenderPathInternal failed @display_vau.c(1227),ERROR" ID="0xcb20265a" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="[%d] RenderPatternInternal failed @display_vau.c(1232),ERROR" ID="0xcb202682" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="[%d] BlendToSurface failed @display_vau.c(1237),ERROR" ID="0xcb2026aa" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="[%d] BlendToSurface failed @display_vau.c(1242),ERROR" ID="0xcb2026d2" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="[%d] RenderPathInternal failed @display_vau.c(1269),ERROR" ID="0xcb2027aa" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="[%d] BlendImgToSurface failed @display_vau.c(1273),ERROR" ID="0xcb2027ca" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="g_hdlLast %lld has not been destroyed, destroy now. @display_vau.c(1319),ERROR" ID="0xcb20293a" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="uapi_vau_submit failure, ret = 0x%x! @display_vau.c(1326),ERROR" ID="0xcb202972" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="gFuncs is null @display_vau.c(1338),ERROR" ID="0xcb2029d2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="memset_s gFuncs failed @display_vau.c(1344),ERROR" ID="0xcb202a02" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="VGU initializes successfully @display_vau.c(1363),INFO" ID="0xcb202a9d" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="VGU uninitializes successfully @display_vau.c(1372),INFO" ID="0xcb202ae5" />
</MSG_LOG>
\ No newline at end of file
<MSG STRUCTURE="diag_log_msg0" NAME="CreateImageNode failed! @image_cache_manager.cpp(598),ERROR" ID="0xcb1e12b2" />
<MSG STRUCTURE="diag_log_msg1" NAME="Res file is not loaded: %s @image_cache_manager.cpp(655),ERROR" ID="0xcb1e147a" />
<MSG STRUCTURE="diag_log_msg0" NAME="Res file is not loaded. @image_cache_manager.cpp(683),ERROR" ID="0xcb1e155a" />
- <MSG STRUCTURE="diag_log_msg1" NAME="Res file is not loaded: %s @image_cache_manager.cpp(710),ERROR" ID="0xcb1e1632" />
- <MSG STRUCTURE="diag_log_msg0" NAME="Res file is not loaded. @image_cache_manager.cpp(725),ERROR" ID="0xcb1e16aa" />
+ <MSG STRUCTURE="diag_log_msg1" NAME="Res file is not loaded: %s @image_cache_manager.cpp(710),WARNING" ID="0xcb1e1633" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="Res file is not loaded. @image_cache_manager.cpp(725),WARNING" ID="0xcb1e16ab" />
</MSG_LOG>
\ No newline at end of file
<MSG STRUCTURE="diag_log_msg0" NAME="InitInnerPath failed. @kaleidoscope_utils.cpp(266),ERROR" ID="0xcb440852" />
<MSG STRUCTURE="diag_log_msg0" NAME="InitPartialInfo failed. @kaleidoscope_utils.cpp(274),ERROR" ID="0xcb440892" />
<MSG STRUCTURE="diag_log_msg0" NAME="ConstructPartial failed. UpdateImageInfoIfNecessary failed. @kaleidoscope_utils.cpp(352),ERROR" ID="0xcb440b02" />
- <MSG STRUCTURE="diag_log_msg0" NAME="kaleidoscopeInfo_ or partialInfo_ is nullptr. @kaleidoscope_utils.cpp(452),ERROR" ID="0xcb440e22" />
- <MSG STRUCTURE="diag_log_msg0" NAME="kaleidoscopeInfo_ or kaleidoscopeInfo_->info.data is nullptr. @kaleidoscope_utils.cpp(475),ERROR" ID="0xcb440eda" />
- <MSG STRUCTURE="diag_log_msg0" NAME="ConstructPartial failed. @kaleidoscope_utils.cpp(482),ERROR" ID="0xcb440f12" />
- <MSG STRUCTURE="diag_log_msg0" NAME="UpdateKaleidoscopeImgInfo failed, because isInternalMem_ is false. @kaleidoscope_utils.cpp(491),ERROR" ID="0xcb440f5a" />
- <MSG STRUCTURE="diag_log_msg0" NAME="UpdateKaleidoscopeImgInfo failed, because addr is nullptr. @kaleidoscope_utils.cpp(496),ERROR" ID="0xcb440f82" />
- <MSG STRUCTURE="diag_log_msg0" NAME="UpdateKaleidoscopeImgInfo failed, because kaleidoscopeInfo_ is nullptr. @kaleidoscope_utils.cpp(501),ERROR" ID="0xcb440faa" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="kaleidoscopeInfo_ or partialInfo_ is nullptr. @kaleidoscope_utils.cpp(453),ERROR" ID="0xcb440e2a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="kaleidoscopeInfo_ or kaleidoscopeInfo_->info.data is nullptr. @kaleidoscope_utils.cpp(476),ERROR" ID="0xcb440ee2" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="ConstructPartial failed. @kaleidoscope_utils.cpp(483),ERROR" ID="0xcb440f1a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="UpdateKaleidoscopeImgInfo failed, because isInternalMem_ is false. @kaleidoscope_utils.cpp(492),ERROR" ID="0xcb440f62" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="UpdateKaleidoscopeImgInfo failed, because addr is nullptr. @kaleidoscope_utils.cpp(497),ERROR" ID="0xcb440f8a" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="UpdateKaleidoscopeImgInfo failed, because kaleidoscopeInfo_ is nullptr. @kaleidoscope_utils.cpp(502),ERROR" ID="0xcb440fb2" />
</MSG_LOG>
\ No newline at end of file
<MSG_LOG><MSG STRUCTURE="diag_log_msg0" NAME="Vertical current view is nullptr! @ui_cross_view.cpp(115),DBG" ID="0xcb4e039e" />
<MSG STRUCTURE="diag_log_msg1" NAME="vBlankIndex_ is invalid: %d, or vBlankView is nullptr @ui_cross_view.cpp(119),DBG" ID="0xcb4e03be" />
<MSG STRUCTURE="diag_log_msg0" NAME="Horizontal current view is nullptr! @ui_cross_view.cpp(150),DBG" ID="0xcb4e04b6" />
- <MSG STRUCTURE="diag_log_msg0" NAME="horizontal current container is nullptr. @ui_cross_view.cpp(538),ERROR" ID="0xcb4e10d2" />
- <MSG STRUCTURE="diag_log_msg0" NAME="horizontal current page is nullptr or it is not coverable. @ui_cross_view.cpp(543),ERROR" ID="0xcb4e10fa" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="horizontal current container is nullptr. @ui_cross_view.cpp(539),ERROR" ID="0xcb4e10da" />
+ <MSG STRUCTURE="diag_log_msg0" NAME="horizontal current page is nullptr or it is not coverable. @ui_cross_view.cpp(544),ERROR" ID="0xcb4e1102" />
</MSG_LOG>
\ No newline at end of file
VIDEOCARD_CPP,
DIALBINPARSERV3_CPP,
DIALTIMEPUBLISHER_CPP,
- DIALSEQUENCECONTAINER_CPP,
WATCHINTERFACE_CPP,
+ DIALMODELTIME_CPP,
FILE_ID_MAX = 1024,
} log_file_list_enum_gui_t;
#endif
return UI_SPHERE_VIEW;\r
}\r
\r
- void Add(UIView* child) override;\r
- void Remove(UIView* child) override;\r
+ /**\r
+ * @brief Adds a child view.\r
+ *\r
+ * @param view Indicates the pointer to the child view to add.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
+ void Add(UIView* view) override;\r
+\r
+ /**\r
+ * @brief Inserts a new child view behind the current one.\r
+ *\r
+ * @param prevView Indicates the pointer to the current child view, previous to the new child view to insert.\r
+ * @param insertView Indicates the pointer to the new child view to insert.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
void Insert(UIView* prevView, UIView* insertView) override;\r
+\r
+ /**\r
+ * @brief Removes a child view.\r
+ *\r
+ * @param view Indicates the pointer to the child view to remove.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
+ void Remove(UIView* view) override;\r
+\r
+ /**\r
+ * @brief Sets the number of rows to be displayed.\r
+ *\r
+ * @param numberOfRow Number of rows.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
void SetNumberOfRow(uint8_t numberOfRow);\r
- void SetSphereCameraPosition(const Vector2<float>& position);\r
- void SetSphereCameraDistance(int16_t distance);\r
+\r
+ /**\r
+ * @brief Get the number of rows to be displayed.\r
+ *\r
+ * @return Number of rows.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
uint8_t GetNumberOfRow()\r
{\r
return numberOfRow_;\r
}\r
\r
+ class ChildStateListener : public HeapBase {\r
+ public:\r
+ /**\r
+ * @brief Callback function when the status of a child control changes.\r
+ *\r
+ * @param view Object of the child control whose state changes.\r
+ * @param rowAngle Rotation angle of the child control in the current row direction.\r
+ * @param colAngle Rotation angle of the child control in the current column direction.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
+ virtual bool StateChange(UIView& view, float rowAngle, float colAngle)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ virtual ~ChildStateListener() {}\r
+ };\r
+\r
+ /**\r
+ * @brief Listens for the change of the angle status of the child control.\r
+ *\r
+ * @param Object of class ChildStateListener.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
+ void SetChildStateListener(ChildStateListener* listener)\r
+ {\r
+ listener_ = listener;\r
+ }\r
+\r
+ /**\r
+ * @brief Updates the angle of the current spherical rotation.\r
+ * @param angle Indicates The angle of movement.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
+ void UpdateItemAngle(float angle);\r
+\r
+ /**\r
+ * @brief Sets the height for the view.\r
+ * @param height Indicates the height to set.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
+ void SetHeight(int16_t height) override;\r
+\r
+ /**\r
+ * @brief Sets the width for the view.\r
+ * @param width Indicates the width to set.\r
+ * @since 1.0\r
+ * @version 1.0\r
+ */\r
+ void SetWidth(int16_t width) override;\r
+\r
+ /**\r
+ * @brief Set sensitivity factor.\r
+ * Drag distance will be converted to angle, and will multiply by this factor.\r
+ */\r
void SetSensitivityFactor(float sensitivity)\r
{\r
sensitivityFactor_ = sensitivity;\r
}\r
\r
+ /**\r
+ * @brief Get sensitivity factor. Default value is 1.0.\r
+ */\r
float GetSensitivityFactor()\r
{\r
return sensitivityFactor_;\r
}\r
\r
+ void SetSphereCameraPosition(const Vector2<float>& position);\r
+ void SetSphereCameraDistance(int16_t distance);\r
#if ENABLE_ROTATE_INPUT\r
bool OnRotateStartEvent(const RotateEvent& event) override;\r
-\r
bool OnRotateEvent(const RotateEvent& event) override;\r
-\r
bool OnRotateEndEvent(const RotateEvent& event) override;\r
#endif\r
-\r
- void UpdateItemAngle(float angle);\r
bool OnDragStartEvent(const DragEvent& event) override;\r
bool OnDragEvent(const DragEvent& event) override;\r
bool OnDragEndEvent(const DragEvent& event) override;\r
- void SetHeight(int16_t height) override;\r
- void SetWidth(int16_t width) override;\r
-\r
protected:\r
bool DragXInner(int16_t distance) override;\r
bool DragYInner(int16_t distance) override\r
void TransformItemGroup();\r
\r
Animator dragAnim_;\r
+ ChildStateListener* listener_ = nullptr;\r
DragAnimatorCallback dragCallback_;\r
uint8_t numberOfRow_ = 1;\r
bool needRefreshSphere_ = false;\r
*/\r
void GpuResetEnd(void);\r
\r
+ void ForceRefreshImmediately();\r
+\r
static void NativeMainThread(void* args);\r
static void RtcEventThread(void* args);\r
\r
isGpuReseting = false;\r
}\r
\r
+void GraphicService::ForceRefreshImmediately()\r
+{\r
+ using namespace OHOS;\r
+ if (GraphicService::GetInstance()->GetGraphicTaskTriggeredCount() <= 0) {\r
+ osal_atomic_inc(&graphicTaskTriggeredCount_);\r
+ GraphicEventHandler::GetInstance()->PostGraphicEvent([] {\r
+ if (GraphicService::GetInstance()->IsScreenOn() && isJsTaskFinished_) {\r
+ TaskManager::GetInstance()->TaskHandler();\r
+ LiteMGfxEngine::GetInstance()->SyncHwDraw();\r
+ } else {\r
+ GRAPHIC_LOGW("ignore redundant task when screen is off or js task is not finished");\r
+ }\r
+ GraphicService::GetInstance()->DecreaseTriggerCount();\r
+ });\r
+ return;\r
+ }\r
+ GraphicEventHandler::GetInstance()->PostGraphicEvent([]() {\r
+ if (GraphicService::GetInstance()->IsScreenOn() && isJsTaskFinished_) {\r
+ LiteMGfxEngine::GetInstance()->SyncHwDraw();\r
+ }\r
+ });\r
+}\r
+\r
void GraphicService::EnableAsyncMode(bool enable)\r
{\r
OHOS::LiteMGfxEngine::GetInstance()->EnableAsyncMode(enable);\r
\r
namespace OHOS {\r
static constexpr uint8_t STEP_SIZE = 10;\r
-\r
UITestSphereView::UITestSphereView()\r
{\r
}\r
\r
+const UIView* UITestSphereView::GetTestView()\r
+{\r
+ return container_;\r
+}\r
+\r
void UITestSphereView::SetUp()\r
{\r
container_ = new UIViewGroup();\r
sphereView_ = new UISphereView(8); // 8: Setting the Number of Displayed Lines.\r
sphereView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
sphereView_->SetThrowDrag(true);\r
+ if (listener_ == nullptr) {\r
+ listener_ = new UITestSphereView::StateListener();\r
+ sphereView_->SetChildStateListener(listener_);\r
+ }\r
sphereView_->RequestFocus();\r
container_->Add(sphereView_);\r
for (uint8_t i = 0; i < 24; i++) { // 24: item number.\r
addItemBt_ = nullptr;\r
updateCameraDistance = nullptr;\r
removeItemBt_ = nullptr;\r
+ if (listener_ != nullptr) {\r
+ delete listener_;\r
+ listener_ = nullptr;\r
+ }\r
}\r
\r
void UITestSphereView::SetUpLabelButton()\r
controlGroup_->Add(updateCameraDistance);\r
}\r
\r
-const UIView* UITestSphereView::GetTestView()\r
-{\r
- return container_;\r
-}\r
-\r
bool UITestSphereView::OnClick(UIView& view, const ClickEvent& event)\r
{\r
int16_t x = sphereView_->GetX();\r
const UIView* GetTestView() override;\r
bool OnClick(UIView& view, const ClickEvent& event) override;\r
private:\r
+ class StateListener : public UISphereView::ChildStateListener {\r
+ public:\r
+ bool StateChange(UIView& view, float rowAngle, float colAngle) override\r
+ {\r
+ if (FloatMore(rowAngle, 90.0f) && FloatLess(rowAngle, 270.0f)) { // 90 270: angle range\r
+ view.SetStyle(STYLE_IMAGE_OPA, OPA_OPAQUE >> 1);\r
+ } else {\r
+ view.SetStyle(STYLE_IMAGE_OPA, OPA_OPAQUE);\r
+ }\r
+ return true;\r
+ }\r
+ };\r
+\r
void SetUpLabelButton();\r
UIViewGroup* container_ = nullptr;\r
UISphereView* sphereView_ = nullptr;\r
UILabelButton* addItemBt_ = nullptr;\r
UILabelButton* removeItemBt_ = nullptr;\r
UILabelButton* updateCameraDistance = nullptr;\r
+ StateListener* listener_ = nullptr;\r
};\r
}\r
#endif
\ No newline at end of file