#sms
lv_apps/sms_msg/sms_msg.c
lv_apps/upgrade/upgrade_rs.c
+#wechat
+ lv_apps/wechat/wechat_ui.c
+#primary menu data
+ lv_apps/primary_menu/primary_menu_data.c
+#health_measure
+ lv_apps/health_measure/health_heart_rate.c
+ lv_apps/health_measure/health_spo2.c
+ lv_apps/health_measure/health_temperature.c
)
set(lv_watch_font_sources
png/primary_function/icon_heart_rate.png
png/primary_function/icon_calendar.png
png/primary_function/icon_wechat.png
- png/primary_function/icon_telephone.png
+# png/primary_function/icon_telephone.png
png/primary_function/icon_blood_pressure.png
png/primary_function/icon_videocall.png
png/primary_function/icon_aiknowledge.png
/*alipay*/
"已在手机端解绑 请重新绑定",
+
+ //CHENG_MODIFY
+ "正在测量",
+ "测量完成",
+ "测量失败",
+ "未正确佩戴",
+ "请保持佩戴",
+ "当前体温",
+ "当前腕温",
+ "血氧",
+ "体温",
+
+ //CHENG_MODIFY
+
+
};
/**
/*alipay*/
"Unbind on the mobile phone, please rebind",
+
+ //CHENG_MODIFY
+ "Measuring",
+ "Measure done",
+ "Measure fail",
+ "Not wearing correctly",
+ "Please keep wearing",
+ "Body temperature",
+ "Wrist temperature",
+ "SPO2",
+ "Temperature",
+ //CHENG_MODIFY
+
+
};
#define NV_SECTION_UI_AGNSS_LEN (sizeof(nv_watch_agnss_t))
#define NV_SECTION_UI_SMSMSG_LEN (sizeof(nv_watch_sms_msg_t))
#define NV_SECTION_UI_GPS_AIDPOS_LEN (sizeof(nv_watch_gps_aidpos_t))
+//#if USE_LV_WATCH_WECHAT != 0
+#define NV_SECTION_UI_WEHAT_MSG_LEN (sizeof(nv_watch_wechat_msg_info_t))
+//#endif
#define NV_SECTION_LEN(sectionid) (sectionid ## _LEN)
/* definition of section start address */
#define NV_SECTION_UI_AGNSS_FILE "ui_agnss.nv"
#define NV_SECTION_UI_SMSMSG_FILE "ui_smsmsg.nv"
#define NV_SECTION_UI_GPS_AIDPOS_FILE "ui_gps_aidpos.nv"
+//#if USE_LV_WATCH_WECHAT != 0
+#define NV_SECTION_UI_WEHAT_MSG_FILE "ui_wechat_msg.nv"
+//#endif
#define NV_SECTION_FILE_PATH(sectionid) (sectionid ## _FILE)
extern char *UI_NV_Get_Section_path(NV_UI_SECTION_ID SectionId);
*/
uint32_t UI_NV_Get_Section_Len(NV_UI_SECTION_ID SectionId)
{
+ printf("[@CHENG_DEBUG][%s][%d]: SectionId=%d, MAX_NUM=%d\n", __FUNCTION__, __LINE__, SectionId, NV_SECTION_UI_MAX_NUM);
+
switch(SectionId) {
case NV_SECTION_UI_SETTINGS:
return(NV_SECTION_LEN(NV_SECTION_UI_SETTINGS));
case NV_SECTION_UI_GPS_AIDPOS:
return(NV_SECTION_LEN(NV_SECTION_UI_GPS_AIDPOS));
+ //#if USE_LV_WATCH_WECHAT != 0
+ case NV_SECTION_UI_WEHAT_MSG:
+ return(NV_SECTION_LEN(NV_SECTION_UI_WEHAT_MSG));
+ //#endif
+
default:
printf("SectionId wrong\n");
return(0);
case NV_SECTION_UI_GPS_AIDPOS:
return(NV_SECTION_FILE_PATH(NV_SECTION_UI_GPS_AIDPOS));
+ //#if USE_LV_WATCH_WECHAT != 0
+ case NV_SECTION_UI_WEHAT_MSG:
+ return(NV_SECTION_FILE_PATH(NV_SECTION_UI_WEHAT_MSG));
+ //#endif
+
default:
printf("SectionId wrong\n");
return(NULL);
nv_watch_agnss_t * agnss;
nv_watch_sms_msg_t * smsmsg;
nv_watch_gps_aidpos_t * gps_aidpos;
+//#if USE_LV_WATCH_WECHAT != 0
+ nv_watch_wechat_msg_info_t * wechat_msg;
+//#endif
switch(SectionId) {
case NV_SECTION_UI_SETTINGS:
memset(gps_aidpos, 0, SectionLen);
TempData = (char *)gps_aidpos;
break;
+ //#if USE_LV_WATCH_WECHAT != 0
+ case NV_SECTION_UI_WEHAT_MSG:
+ wechat_msg = lv_mem_alloc(SectionLen);
+ memset(wechat_msg, 0, SectionLen);
+ TempData = (char *)wechat_msg;
+ break;
+ //#endif
default:
TempData = NULL;
break;
ACT_ID_SETTING_UPAY_MENU, /*246: alipay menu*/
#endif
+#ifdef __MMI_WECHAT_SUPPORT__
+ ACT_ID_WECHAT_MAIN,
+ ACT_ID_WECHAT_RECORDING,
+ ACT_ID_WECHAT_SENDING,
+ //ACT_ID_WECHAT_EXPRESSION,
+ //ACT_ID_WECHAT_IMAGE,
+#endif
+#ifdef __MMI_HEALTH_MEASURE_HEART_SUPPORT__
+ ACT_ID_HEALTH_MEASURE_HEART,
+#endif
+#ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
+ ACT_ID_HEALTH_MEASURE_SPO2,
+#endif
+#ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
+ ACT_ID_HEALTH_MEASURE_TEMPERATURE,
+#endif
+
ACT_ID_MAX,
};
typedef uint8_t lv_watch_Activity_Id_t;
*default 0*/
} __packed nv_watch_voice_msg_t;
+//#if USE_LV_WATCH_WECHAT != 0
+
+#define NV_WATCH_WECHAT_NUM_MAX (20)
+#define NV_WATCH_WECHAT_DATA_FILE_NAME_MAX (LV_FS_MAX_PATH_LENGTH / 2)
+
+typedef enum
+{
+ WECHAT_MSG_TYPE_VOICE,
+ WECHAT_MSG_TYPE_TEXT,
+ WECHAT_MSG_TYPE_EXPRESSION,
+ WECHAT_MSG_TYPE_IMAGE,
+ WECHAT_MSG_TYPE_MAX,
+}__packed nv_wechat_msg_type_e;
+
+typedef struct
+{
+ //uint8_t msg_index;
+ uint8_t msg_from; // 0-slef; 1-other
+ uint8_t unread_flag; // 0-read; 1-unread
+ hal_rtc_t msg_time;
+ nv_wechat_msg_type_e msg_type;
+ uint32_t msg_data_size;
+ char msg_data_full_file_name[NV_WATCH_WECHAT_DATA_FILE_NAME_MAX];
+} __packed nv_watch_wechat_msg_item_info_t;
+
+typedef struct
+{
+ uint8_t msg_count;
+ nv_watch_wechat_msg_item_info_t msg_item[NV_WATCH_WECHAT_NUM_MAX];
+} __packed nv_watch_wechat_msg_info_t;
+//#endif
+
typedef struct
{
uint8_t autoanswerflg; // 1: auto answer enable, 0: auto answer disable
NV_SECTION_UI_AGNSS, // nv_watch_agnss_t
NV_SECTION_UI_SMSMSG, // nv_watch_sms_msg_t
NV_SECTION_UI_GPS_AIDPOS, // nv_watch_gps_aidpos_t
+//#if USE_LV_WATCH_WECHAT != 0
+ NV_SECTION_UI_WEHAT_MSG, // nv_watch_wechat_msg_info_t
+//#endif
NV_SECTION_UI_MAX_NUM
};
typedef uint8_t NV_UI_SECTION_ID;
/*alipay*/
WATCH_TEXT_ID_ALIPAY_UNBIND_TIPS, /* "已在手机端解绑 请重新绑定" "Unbind on the mobile phone, please rebind" */
+ //CHENG_MODIFY
+ WATCH_TEXT_ID_MEASURING, /*"正在测量" "Measuring"*/
+ WATCH_TEXT_ID_MEASURE_DONE, /*"测量完成" "Measure done"*/
+ WATCH_TEXT_ID_MEASURE_FAIL, /*"测量失败" "Measure fail"*/
+ WATCH_TEXT_ID_NOT_WEAR, /*"未正确佩戴" "Not wearing correctly"*/
+ WATCH_TEXT_ID_KEEP_WEAR, /*"请保持佩戴" "Please keep wearing"*/
+ WATCH_TEXT_ID_CURRENT_BODY_TEMPERATURE, // 当前体温
+ WATCH_TEXT_ID_CURRENT_WRIST_TEMPERATURE, // 当前腕温
+ WATCH_TEXT_ID_SPO2, /* "血氧" "SPO2" */
+ WATCH_TEXT_ID_TEMPERATURE, /* "体温" "Temperature" */
+
+ //CHENG_MODIFY
+
WATCH_TEXT_ID_MAX
};
typedef uint16_t watchLangTxtId_t;
/*Make the size adjustment*/
lv_coord_t w = lv_obj_get_width(list);
uint8_t pad_w = w - lv_obj_get_style_pad_left(list, LV_LIST_PART_SCROLLABLE);
+#if USE_LV_WATCH_UI_240_320
+ lv_obj_set_size(btn, pad_w, LV_VER_RES / 8 + LV_VER_RES / 8);
+#else
lv_obj_set_size(btn, pad_w, 56);
+#endif
lv_obj_t * cont = lv_cont_create(btn, NULL);
lv_obj_set_width(cont, pad_w);
lv_album_obj_ext_t * ext = album_get_ext();
if(ext->photo_cnt == 0) {
bg = lv_img_create(par, NULL);
- lv_img_set_src(bg, ICON_ALBUM_NO_PHOTO);
+ //lv_img_set_src(bg, ICON_ALBUM_NO_PHOTO);
+ lv_img_set_src(bg, ICON_COMMON_BG_WHITE);
lv_obj_t * label_nophoto = lv_label_create(bg, NULL);
lv_label_set_text_id(label_nophoto, WATCH_TEXT_ID_NOPHOTO);
- lv_obj_align(label_nophoto, NULL, LV_ALIGN_IN_BOTTOM_MID, 10, -20);
- lv_obj_add_style(label_nophoto, LV_LABEL_PART_MAIN, &lv_watch_font20_black);
+ //lv_obj_align(label_nophoto, NULL, LV_ALIGN_IN_BOTTOM_MID, 10, -20);
+ //lv_obj_add_style(label_nophoto, LV_LABEL_PART_MAIN, &lv_watch_font20_black);
+ lv_obj_add_style(label_nophoto, LV_LABEL_PART_MAIN, &lv_watch_font30_black);
+ lv_obj_align(label_nophoto, NULL, LV_ALIGN_CENTER, 0, 0);
lv_obj_set_click(label_nophoto, false);
} else {
uint8_t inner_pad = (LV_HOR_RES - lv_obj_get_width(img_back) - lv_obj_get_width(img_setting) - lv_obj_get_width(label_ph)) / 2;
lv_obj_set_style_local_pad_inner(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, inner_pad);
+ printf("[@CHENG_DEBUG][%s][%d]: w=%d, h=%d, x=%d, y=%d\n", __FUNCTION__, __LINE__,
+ lv_obj_get_width(cont), lv_obj_get_height(cont), lv_obj_get_x(cont), lv_obj_get_y(cont));
+
return bg;
}
uint8_t line = ext->photo_cnt % 3 == 0 ? ext->photo_cnt / 3 : ext->photo_cnt / 3 + 1;
ext->img_page = lv_page_create(par, NULL);
- lv_obj_set_size(ext->img_page, LV_HOR_RES, 200);
+ //lv_obj_set_size(ext->img_page, LV_HOR_RES, 200);
+ lv_obj_set_size(ext->img_page, LV_HOR_RES, LV_VER_RES - 55); //image back height
lv_obj_align(ext->img_page, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
lv_obj_add_style(ext->img_page, LV_PAGE_PART_BG, &lv_watch_style_transp);
lv_obj_add_style(ext->img_page, LV_PAGE_PART_SCROLLABLE, &lv_watch_style_transp);
while(node) {
i = node->index;
lv_img_cache_invalidate_src(node->preview_src);
- node->preview_src->header.w = 240;
- node->preview_src->header.h = 240;
+ //node->preview_src->header.w = 240;
+ //node->preview_src->header.h = 240;
+ node->preview_src->header.w = LV_HOR_RES;
+ node->preview_src->header.h = LV_VER_RES;
tab = lv_watch_tabview_add_tab(tabview);
- lv_obj_set_height(lv_page_get_scrl(tab), 240);
+ //lv_obj_set_height(lv_page_get_scrl(tab), 240);
+ lv_obj_set_height(lv_page_get_scrl(tab), LV_VER_RES);
img_view = lv_img_create(tab, NULL);
- lv_img_set_zoom(img_view, 240/node->preview_src->header.w * 256);
+ //lv_img_set_zoom(img_view, 240/node->preview_src->header.w * 256);
+ lv_obj_set_size(img_view, LV_HOR_RES, LV_VER_RES);
lv_img_set_src(img_view, node->preview_src);
lv_watch_set_free_num(img_view, i);
lv_obj_set_adv_hittest(img_view, false);
lv_obj_set_pos(lv_page_get_scrl(tab), 0, 0);
album_view_photo_opt_create(img_view);
+
+ printf("[@CHENG_DEBUG][%s][%d]: w=%d, h=%d, x=%d, y=%d\n", __FUNCTION__, __LINE__,
+ lv_obj_get_width(img_view), lv_obj_get_height(img_view), lv_obj_get_x(img_view), lv_obj_get_y(img_view));
+
if(album_ext->time_order)
node = (album_photo_info_t *)_lv_ll_get_next(photo_ll, node);
else
lv_obj_set_click(img_del, true);
lv_obj_set_adv_hittest(img_del, false);
lv_obj_set_event_cb(img_del, album_opt_delete_event_cb);
+
+#ifdef __MMI_ZHSX_SUPPORT__
+ lv_obj_set_hidden(img_share, true);
+#endif
}
static lv_obj_t * album_setting_create(lv_obj_t * activity_obj)
lv_obj_add_style(label_q, LV_LABEL_PART_MAIN, &lv_watch_font30_black);
else
lv_obj_add_style(label_q, LV_LABEL_PART_MAIN, &lv_watch_font20_black);
- lv_obj_align(label_q, img_to_del, LV_ALIGN_OUT_BOTTOM_MID, 0, 15);
+ //lv_obj_align(label_q, img_to_del, LV_ALIGN_OUT_BOTTOM_MID, 0, 15);
+ lv_obj_align(label_q, img_to_del, LV_ALIGN_OUT_BOTTOM_MID, 0, 25);
lv_obj_t * btn_cancel = lv_btn_create(bg, NULL);
lv_obj_set_size(btn_cancel, 100, 56);
lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
- lv_obj_align(btn_cancel, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 10, -10);
+ //lv_obj_align(btn_cancel, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 10, -10);
+ lv_obj_align(btn_cancel, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 10, -10 - 10);
lv_obj_set_event_cb(btn_cancel, album_cancel_btn_event_cb);
lv_watch_set_free_num(btn_cancel, num);
lv_obj_t * label_cancel = lv_label_create(btn_cancel, NULL);
lv_obj_set_style_local_radius(btn_ok, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
lv_obj_set_style_local_bg_color(btn_ok, LV_BTN_PART_MAIN, LV_STATE_PRESSED, LV_COLOR_MAKE(0xFF, 0x6F, 0x91));
lv_obj_set_style_local_radius(btn_ok, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
- lv_obj_align(btn_ok, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -10);
+ //lv_obj_align(btn_ok, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -10);
+ lv_obj_align(btn_ok, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -10 - 10);
lv_watch_set_free_num(btn_ok, num);
lv_obj_set_event_cb(btn_ok, album_ok_btn_event_cb);
lv_obj_t * label_ok = lv_label_create(btn_ok, label_cancel);
lv_obj_t * img_suc = lv_img_create(cont_bg, NULL);
lv_img_set_src(img_suc, ICON_OK);
- lv_obj_align(img_suc, NULL, LV_ALIGN_IN_TOP_MID, 0, 30);
+ //lv_obj_align(img_suc, NULL, LV_ALIGN_IN_TOP_MID, 0, 30);
+ lv_obj_align(img_suc, NULL, LV_ALIGN_IN_TOP_MID, 0, LV_VER_RES / 4);
lv_obj_t * label = lv_label_create(cont_bg, NULL);
lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font30);
if(node->index == img_num) {
lv_img_cache_invalidate_src(node->preview_src);
if(btn_num == 1) {
- node->preview_src->header.w = 240;
- node->preview_src->header.h = 240;
+ //node->preview_src->header.w = 240;
+ //node->preview_src->header.h = 240;
+ node->preview_src->header.w = LV_HOR_RES;
+ node->preview_src->header.h = LV_VER_RES;
node->selected = 0;
} else {
node->preview_src->header.w = 72;
static void album_back_event_cb(lv_obj_t * obj, lv_event_t e)
{
+ printf("[@CHENG_DEBUG][%s][%d]: event=%d\n", __FUNCTION__, __LINE__, (e - LV_EVENT_PRESSED));
+
if(LV_EVENT_CLICKED == e) {
uint8_t num = lv_obj_get_user_data(obj).user_num;
if(num == ALBUM_BACK_ORDER_SET) {
static void album_opt_delete_event_cb(lv_obj_t * obj, lv_event_t e)
{
+ printf("[@CHENG_DEBUG][%s][%d]: event=%d\n", __FUNCTION__, __LINE__, (e - LV_EVENT_PRESSED));
+
if(LV_EVENT_CLICKED == e) {
lv_album_obj_ext_t * ext = album_get_ext();
if(ext->preview_mode == 1) {
lv_obj_set_event_cb(img_ext->img_btn_next, audio_player_img_prev_signal);
else
lv_obj_set_event_cb(img_ext->img_btn_next, audio_player_img_next_signal);
- lv_obj_align(img_ext->img_btn_next, img_ext->img_btn_start_pause, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
+ //lv_obj_align(img_ext->img_btn_next, img_ext->img_btn_start_pause, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
+ lv_obj_align(img_ext->img_btn_next, img_ext->img_btn_start_pause, LV_ALIGN_OUT_RIGHT_MID, 10, 0);
lv_watch_obj_add_element(img_ext->img_btn_next);
img_ext->img_btn_prev = lv_img_create(content, img_ext->img_btn_start_pause);
lv_obj_set_event_cb(img_ext->img_btn_prev, audio_player_img_next_signal);
else
lv_obj_set_event_cb(img_ext->img_btn_prev, audio_player_img_prev_signal);
- lv_obj_align(img_ext->img_btn_prev, img_ext->img_btn_start_pause, LV_ALIGN_OUT_LEFT_MID, 0, 0);
+ //lv_obj_align(img_ext->img_btn_prev, img_ext->img_btn_start_pause, LV_ALIGN_OUT_LEFT_MID, 0, 0);
+ lv_obj_align(img_ext->img_btn_prev, img_ext->img_btn_start_pause, LV_ALIGN_OUT_LEFT_MID, -10, 0);
lv_watch_obj_add_element(img_ext->img_btn_prev);
btn = lv_btn_create(content, NULL);
lv_cont_set_layout(content, LV_LAYOUT_OFF);
lv_obj_t * img = lv_img_create(content, NULL);
- lv_img_set_src(img, ICON_AUDIO_PLAYER_BACKGROUND);
+ //lv_img_set_src(img, ICON_AUDIO_PLAYER_BACKGROUND);
+ lv_img_set_src(img, ICON_COMMON_BG_BLACK);
lv_obj_set_size(img, LV_HOR_RES, LV_VER_RES);
lv_obj_set_click(content, false);
lv_obj_set_click(img, false);
type == IMG_TYPE_HEART_RATE ||
type == IMG_TYPE_WEATHER_UV ||
type == IMG_TYPE_WEATHER_AQI ||
- type == IMG_TYPE_BLOOD_OXYGEN)
+ type == IMG_TYPE_BLOOD_OXYGEN
+ || IMG_TYPE_USER_PNG == type
+ || IMG_TYPE_HEART_RATE_IMAGE == type
+ )
return true;
else
return false;
dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x, pos.y + label_dsc->text_pos.y);
break;
case LABEL_TYPE_STEP:
- snprintf(infotxt, len, "%.5d", record.step);
+ //snprintf(infotxt, len, "%.5d", record.step);
+ snprintf(infotxt, len, "%-5d", record.step);
dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x, pos.y + label_dsc->text_pos.y);
break;
case LABEL_TYPE_BATTERY:
dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x, pos.y + label_dsc->text_pos.y);
break;
case LABEL_TYPE_HEART_RATE:
- snprintf(infotxt, len, "%.3d", health.heartrate);
+ //snprintf(infotxt, len, "%.3d", health.heartrate);
+ snprintf(infotxt, len, "%-3d", health.heartrate);
dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x, pos.y + label_dsc->text_pos.y);
break;
case LABEL_TYPE_DISTANCE:
dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x, pos.y + label_dsc->text_pos.y);
break;
case LABEL_TYPE_PRESSURE:
- snprintf(infotxt, len, "%.3d", health.pressure);
+ //snprintf(infotxt, len, "%.3d", health.pressure);
+ snprintf(infotxt, len, "%-3d", health.pressure);
dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x, pos.y + label_dsc->text_pos.y);
break;
case LABEL_TYPE_SLEEP_QUALITY:
--- /dev/null
+
+
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_watch.h"
+
+#ifdef __MMI_HEALTH_MEASURE_HEART_SUPPORT__
+
+#include <stdio.h>
+
+
+
+void heart_rate_sensor_open(void)
+{
+
+}
+
+void heart_rate_sensor_close(void)
+{
+
+}
+
+uint16 heart_rate_sensor_value_get(void)
+{
+ srand(Hal_Timer_Get_Counter());
+ uint16 value = 50 + rand() % 150;
+
+ return value;
+}
+
+BOOL heart_rate_sensor_wear_state_get(void)
+{
+ BOOL is_wear = TRUE;
+
+ return is_wear;
+}
+
+lv_heart_rate_obj_ext_t * heart_rate_get_ext(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HEALTH_MEASURE_HEART);
+ if(NULL == activity_obj)
+ {
+ return NULL;
+ }
+
+ lv_obj_t * watch_obj;
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+ if(NULL != watch_obj)
+ {
+ lv_heart_rate_obj_ext_t * ext = lv_obj_get_ext_attr(watch_obj);
+ return ext;
+ }
+ return NULL;
+}
+
+void heart_rate_display_update(void)
+{
+ lv_heart_rate_obj_ext_t * ext = heart_rate_get_ext();
+ if(NULL == ext)
+ {
+ return;
+ }
+
+ switch(ext->measure_state)
+ {
+ case STATE_HEART_RATE_MEASURING:
+ lv_obj_set_hidden(ext->img, TRUE);
+
+ lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURING);
+ lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_INFO_Y);
+
+ lv_label_set_text(ext->label_value, ext->heart_rate);
+ lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y);
+ lv_obj_set_hidden(ext->label_value, ((strlen(ext->heart_rate)) ? FALSE : TRUE));
+ break;
+
+ case STATE_HEART_RATE_MEASURE_FAIL:
+ lv_img_set_src(ext->img, ICON_HEART_RATE_MEASURE_FAIL);
+ lv_obj_set_hidden(ext->img, FALSE);
+
+ lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_FAIL);
+ lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_INFO_Y);
+
+ lv_obj_remove_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
+ lv_obj_add_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font30);
+ lv_label_set_text_id(ext->label_value, WATCH_TEXT_ID_NOT_WEAR);
+ lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y);
+ lv_obj_set_hidden(ext->label_value, FALSE);
+ break;
+
+ case STATE_HEART_RATE_MEASURE_DONE:
+ lv_img_set_src(ext->img, ICON_HEART_RATE_MEASURE_DONE);
+ lv_obj_set_hidden(ext->img, FALSE);
+
+ lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_DONE);
+ lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_INFO_Y);
+
+ lv_label_set_text(ext->label_value, ext->heart_rate);
+ lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y);
+ lv_obj_set_hidden(ext->label_value, FALSE);
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void heart_rate_measure_cycle_timeout(void * para)
+{
+ (void) para;
+
+ lv_heart_rate_obj_ext_t * ext = heart_rate_get_ext();
+ if(NULL != ext)
+ {
+ if(FALSE == heart_rate_sensor_wear_state_get())
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->total_timer_id)
+ {
+ Hal_Timer_Stop(ext->total_timer_id);
+ ext->total_timer_id = NULL;
+ }
+ if(NULL != ext->gif_info)
+ {
+ gif_close(ext->gif_info);
+ ext->gif_info = NULL;
+ }
+ lv_obj_del(ext->gif_cont);
+ ext->measure_state = STATE_HEART_RATE_MEASURE_FAIL;
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_HEART, 0);
+ }
+ else
+ {
+ uint16 value = heart_rate_sensor_value_get();
+ if(value)
+ {
+ sprintf(ext->heart_rate, "%d bpm", value);
+ }
+ //else
+ //{
+ // sprintf(ext->heart_rate, "-- bpm");
+ //}
+ ext->measure_state = STATE_HEART_RATE_MEASURING;
+ }
+ }
+
+ heart_rate_display_update();
+}
+
+static void heart_rate_measure_timeout(void * para)
+{
+ (void) para;
+
+ //sensor
+ heart_rate_sensor_close();
+
+ lv_heart_rate_obj_ext_t * ext = heart_rate_get_ext();
+ if(NULL != ext)
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->total_timer_id)
+ {
+ Hal_Timer_Stop(ext->total_timer_id);
+ ext->total_timer_id = NULL;
+ }
+ if(NULL != ext->gif_info)
+ {
+ gif_close(ext->gif_info);
+ ext->gif_info = NULL;
+ }
+ lv_obj_del(ext->gif_cont);
+ ext->measure_state = STATE_HEART_RATE_MEASURE_DONE;
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_HEART, 0);
+ }
+
+ heart_rate_display_update();
+}
+
+static void heart_rate_prepare_destory(lv_obj_t * activity_obj)
+{
+ HEART_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_HEART, 0);
+ lv_watch_png_cache_all_free();
+
+ //lv_obj_t * watch_obj = NULL;
+ //lv_watch_get_child_obj(act, lv_watch_obj_signal, &watch_obj);
+ //lv_obj_t * cont = lv_obj_get_child(watch_obj, NULL);
+
+ lv_heart_rate_obj_ext_t * ext = heart_rate_get_ext();
+ if(NULL != ext)
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->total_timer_id)
+ {
+ Hal_Timer_Stop(ext->total_timer_id);
+ ext->total_timer_id = NULL;
+ }
+ if(NULL != ext->gif_info)
+ {
+ gif_close(ext->gif_info);
+ ext->gif_info = NULL;
+ }
+
+ HEART_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ }
+}
+
+lv_obj_t * health_heart_rate_create(lv_obj_t * activity_obj)
+{
+ if(NULL == activity_obj)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_HEALTH_MEASURE_HEART;
+ activity_ext.create = heart_rate_create;
+ activity_ext.prepare_destory = heart_rate_prepare_destory;
+
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ LV_ASSERT_MEM(activity_obj);
+ if(NULL == activity_obj)
+ return NULL;
+ }
+
+ lv_obj_t * watch_obj = lv_watch_obj_create(activity_obj);
+ if(NULL == watch_obj)
+ return NULL;
+
+ lv_heart_rate_obj_ext_t * ext = lv_obj_allocate_ext_attr(watch_obj, sizeof(lv_heart_rate_obj_ext_t));
+ if(NULL == ext)
+ return NULL;
+
+ _lv_memset_00(ext->heart_rate, sizeof(ext->heart_rate));
+
+ lv_obj_t * cont = lv_cont_create(watch_obj, NULL);
+ lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES);
+ lv_obj_align(cont, watch_obj, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+ lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_set_style_local_bg_opa(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP);
+ lv_obj_set_style_local_pad_left(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0);
+ lv_obj_set_style_local_pad_right(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0);
+ //lv_cont_set_layout(cont, LV_LAYOUT_ROW_MID);
+ lv_obj_set_click(cont, false);
+ //lv_obj_set_base_dir(cont, LV_BIDI_DIR_LTR);
+ lv_watch_obj_add_element(cont);
+ ext->cont = cont;
+
+ lv_obj_t * img = lv_img_create(cont, NULL);
+ lv_img_set_src(img, ICON_HEART_RATE_MEASURE_FAIL);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 40);
+ lv_obj_set_hidden(img, true);
+ ext->img = img;
+
+ lv_obj_t * label_info = lv_label_create(cont, NULL);
+ //lv_obj_set_size(label_info, LV_HOR_RES, 30);
+ lv_obj_add_style(label_info, LV_LABEL_PART_MAIN, &lv_watch_font20);
+ lv_label_set_text_id(label_info, WATCH_TEXT_ID_MEASURING);
+ //lv_label_set_align(label_info, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_info, cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_INFO_Y);
+ lv_obj_set_click(label_info, false);
+ ext->label_info = label_info;
+
+ lv_obj_t * label_value = lv_label_create(cont, NULL);
+ //lv_obj_set_size(label_value, LV_HOR_RES, 40);
+ lv_obj_add_style(label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
+ lv_label_set_text(label_value, ext->heart_rate);
+ //lv_label_set_align(label_value, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_value, cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y);
+ lv_obj_set_click(label_value, false);
+ ext->label_value = label_value;
+
+ if(FALSE == heart_rate_sensor_wear_state_get())
+ {
+ ext->measure_state = STATE_HEART_RATE_MEASURE_FAIL;
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_HEART, 0);
+ }
+ else
+ {
+ heart_rate_sensor_open();
+
+ lv_obj_t * gif_cont = lv_cont_create(cont, NULL);
+ lv_obj_set_size(gif_cont, LV_HOR_RES, 120);
+ lv_obj_set_style_local_bg_color(gif_cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_align(gif_cont, cont, LV_ALIGN_IN_TOP_MID, 0, 40);
+ ext->gif_cont = gif_cont;
+
+ ext->gif_info = gif_open(gif_cont, ANIM_HEART_RATE_MEASURING, 0);
+ if(!ext->gif_info)
+ {
+ HEART_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: gif open fail\n", __FUNCTION__, __LINE__);
+ }
+
+ ext->total_timer_id = Hal_Timer_Start(HEALTH_HEART_MEASURE_DURATION, heart_rate_measure_timeout, NULL, FALSE);
+ ext->cycle_timer_id = Hal_Timer_Start(HEALTH_HEART_MEASURE_CYCLE, heart_rate_measure_cycle_timeout, NULL, TRUE);
+
+ ext->measure_state = STATE_HEART_RATE_MEASURING;
+ watch_set_suspend_enable(false, ACT_ID_HEALTH_MEASURE_HEART, 0);
+ }
+
+ heart_rate_display_update();
+
+ return watch_obj;
+}
+
+void health_heart_rate_create_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+ (void)btn;
+ if(LV_EVENT_CLICKED == e)
+ {
+ lv_obj_t * obj = health_heart_rate_create(NULL);
+ LV_ASSERT_MEM(obj);
+ }
+}
+
+
+#endif
--- /dev/null
+
+
+
+#ifndef __HEALTH_HEART_RATE_H__
+#define __HEALTH_HEART_RATE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lvgl.h"
+#include "lv_ex_conf.h"
+#else
+#include "../../../lvgl/lvgl.h"
+#include "../../../lv_ex_conf.h"
+#endif
+
+#ifdef __MMI_HEALTH_MEASURE_HEART_SUPPORT__
+
+
+#define __HEALTH_HEART_DEBUG__
+#ifdef __HEALTH_HEART_DEBUG__
+#define HEART_DEBUG_PRINTF(fmt, ...) printf(fmt, ##__VA_ARGS__)
+#else
+#define HEART_DEBUG_PRINTF(fmt, ...)
+#endif
+
+
+#define HEALTH_HEART_MEASURE_DURATION (1000 * 40) // 40 sec
+#define HEALTH_HEART_MEASURE_CYCLE (1000 * 1)
+
+
+#if USE_LV_WATCH_UI_240_320
+#define HEART_LABEL_INFO_X (0)
+#define HEART_LABEL_INFO_Y (180)
+#define HEART_LABEL_INFO_W (LV_HOR_RES - HEART_LABEL_INFO_X)
+#define HEART_LABEL_INFO_H (30)
+
+#define HEART_LABEL_VALUE_X (0)
+#define HEART_LABEL_VALUE_Y (220)
+#define HEART_LABEL_VALUE_W (LV_HOR_RES - HEART_LABEL_VALUE_X)
+#define HEART_LABEL_VALUE_H (50)
+
+#else
+
+#endif
+
+
+typedef enum
+{
+ STATE_HEART_RATE_MEASURE_NONE,
+ STATE_HEART_RATE_MEASURING,
+ STATE_HEART_RATE_MEASURE_DONE,
+ STATE_HEART_RATE_MEASURE_FAIL,
+ STATE_HEART_RATE_MEASURE_MAX,
+}lv_heart_rate_state_e;
+
+typedef struct {
+ lv_watch_obj_ext_t lv_watch_obj;
+ /*New data for this type */
+ gif_info_t * gif_info;
+ TIMER_ID total_timer_id, cycle_timer_id;
+ lv_obj_t * cont;
+ lv_obj_t * img;
+ lv_obj_t * label_info;
+ lv_obj_t * label_value;
+ lv_obj_t * gif_cont;
+ lv_heart_rate_state_e measure_state;
+ char heart_rate[8];
+} lv_heart_rate_obj_ext_t;
+
+
+
+void health_heart_rate_create_event_cb(lv_obj_t * btn, lv_event_t e);
+
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+
+
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_watch.h"
+
+#ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
+
+#include <stdio.h>
+
+
+
+void health_spo2_sensor_open(void)
+{
+
+}
+
+void health_spo2_sensor_close(void)
+{
+
+}
+
+uint16 health_spo2_sensor_value_get(void)
+{
+ srand(Hal_Timer_Get_Counter());
+ uint16 value = 95 + rand() % 6;
+
+ return value;
+}
+
+BOOL health_spo2_sensor_wear_state_get(void)
+{
+ BOOL is_wear = TRUE;
+
+ return is_wear;
+}
+
+lv_spo2_obj_ext_t * health_spo2_get_ext(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HEALTH_MEASURE_SPO2);
+ if(NULL == activity_obj)
+ {
+ return NULL;
+ }
+
+ lv_obj_t * watch_obj;
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+ if(NULL != watch_obj)
+ {
+ lv_spo2_obj_ext_t * ext = lv_obj_get_ext_attr(watch_obj);
+ return ext;
+ }
+ return NULL;
+}
+
+void health_spo2_display_update(void)
+{
+ lv_spo2_obj_ext_t * ext = health_spo2_get_ext();
+ if(NULL == ext)
+ {
+ return;
+ }
+
+ SPO2_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ switch(ext->measure_state)
+ {
+ case STATE_SPO2_MEASURING:
+ lv_obj_set_hidden(ext->img, TRUE);
+
+ lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURING);
+ lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_INFO_Y);
+
+ lv_label_set_text(ext->label_value, ext->spo2);
+ lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_VALUE_Y);
+ lv_obj_set_hidden(ext->label_value, ((strlen(ext->spo2)) ? FALSE : TRUE));
+ break;
+
+ case STATE_SPO2_MEASURE_FAIL:
+ lv_img_set_src(ext->img, ICON_SPO2_MEASURE_FAIL);
+ lv_obj_set_hidden(ext->img, FALSE);
+
+ lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_FAIL);
+ lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_INFO_Y);
+
+ lv_obj_remove_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
+ lv_obj_add_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font30);
+ lv_label_set_text_id(ext->label_value, WATCH_TEXT_ID_NOT_WEAR);
+ lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_VALUE_Y);
+ lv_obj_set_hidden(ext->label_value, FALSE);
+ break;
+
+ case STATE_SPO2_MEASURE_DONE:
+ lv_img_set_src(ext->img, ICON_SPO2_MEASURE_DONE);
+ lv_obj_set_hidden(ext->img, FALSE);
+
+ lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_DONE);
+ lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_INFO_Y);
+
+ lv_label_set_text(ext->label_value, ext->spo2);
+ lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_VALUE_Y);
+ lv_obj_set_hidden(ext->label_value, FALSE);
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void health_spo2_measure_cycle_timeout(void * para)
+{
+ (void) para;
+
+ lv_spo2_obj_ext_t * ext = health_spo2_get_ext();
+ if(NULL != ext)
+ {
+ if(FALSE == health_spo2_sensor_wear_state_get())
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->total_timer_id)
+ {
+ Hal_Timer_Stop(ext->total_timer_id);
+ ext->total_timer_id = NULL;
+ }
+ if(NULL != ext->gif_info)
+ {
+ gif_close(ext->gif_info);
+ ext->gif_info = NULL;
+ }
+ lv_obj_del(ext->gif_cont);
+ ext->measure_state = STATE_SPO2_MEASURE_FAIL;
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_SPO2, 0);
+ }
+ else
+ {
+ uint16 value = health_spo2_sensor_value_get();
+ if(value)
+ {
+ sprintf(ext->spo2, "%d %%", value);
+ }
+ //else
+ //{
+ // sprintf(ext->spo2, "-- %%");
+ //}
+ ext->measure_state = STATE_SPO2_MEASURING;
+ }
+ }
+
+ health_spo2_display_update();
+}
+
+static void health_spo2_measure_timeout(void * para)
+{
+ (void) para;
+
+ //sensor
+ health_spo2_sensor_close();
+
+ lv_spo2_obj_ext_t * ext = health_spo2_get_ext();
+ if(ext)
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->total_timer_id)
+ {
+ Hal_Timer_Stop(ext->total_timer_id);
+ ext->total_timer_id = NULL;
+ }
+ if(NULL != ext->gif_info)
+ {
+ gif_close(ext->gif_info);
+ ext->gif_info = NULL;
+ }
+ lv_obj_del(ext->gif_cont);
+ ext->measure_state = STATE_SPO2_MEASURE_DONE;
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_SPO2, 0);
+ }
+
+ health_spo2_display_update();
+}
+
+static void health_spo2_prepare_destory(lv_obj_t * activity_obj)
+{
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_SPO2, 0);
+ lv_watch_png_cache_all_free();
+
+ lv_spo2_obj_ext_t * ext = health_spo2_get_ext();
+ if(NULL != ext)
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->total_timer_id)
+ {
+ Hal_Timer_Stop(ext->total_timer_id);
+ ext->total_timer_id = NULL;
+ }
+ if(NULL != ext->gif_info)
+ {
+ gif_close(ext->gif_info);
+ ext->gif_info = NULL;
+ }
+
+ SPO2_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ }
+}
+
+lv_obj_t * health_spo2_create(lv_obj_t * activity_obj)
+{
+ if(NULL == activity_obj)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_HEALTH_MEASURE_SPO2;
+ activity_ext.create = health_spo2_create;
+ activity_ext.prepare_destory = health_spo2_prepare_destory;
+
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ LV_ASSERT_MEM(activity_obj);
+ if(NULL == activity_obj)
+ return NULL;
+ }
+
+ lv_obj_t * watch_obj = lv_watch_obj_create(activity_obj);
+ if(NULL == watch_obj)
+ return NULL;
+
+ lv_spo2_obj_ext_t * ext = lv_obj_allocate_ext_attr(watch_obj, sizeof(lv_spo2_obj_ext_t));
+ if(NULL == ext)
+ return NULL;
+
+ _lv_memset_00(ext->spo2, sizeof(ext->spo2));
+
+ lv_obj_t * cont = lv_cont_create(watch_obj, NULL);
+ lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES);
+ lv_obj_align(cont, watch_obj, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+ lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_set_style_local_bg_opa(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP);
+ lv_obj_set_style_local_pad_left(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0);
+ lv_obj_set_style_local_pad_right(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0);
+ //lv_cont_set_layout(cont, LV_LAYOUT_ROW_MID);
+ lv_obj_set_click(cont, false);
+ lv_watch_obj_add_element(cont);
+ ext->cont = cont;
+
+ lv_obj_t * img = lv_img_create(cont, NULL);
+ lv_img_set_src(img, ICON_SPO2_MEASURE_FAIL);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 40);
+ lv_obj_set_hidden(img, true);
+ ext->img = img;
+
+ lv_obj_t * label_info = lv_label_create(cont, NULL);
+ lv_obj_add_style(label_info, LV_LABEL_PART_MAIN, &lv_watch_font20);
+ lv_label_set_text_id(label_info, WATCH_TEXT_ID_MEASURING);
+ lv_obj_align(label_info, cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_INFO_Y);
+ lv_obj_set_click(label_info, false);
+ ext->label_info = label_info;
+
+ lv_obj_t * label_value = lv_label_create(cont, NULL);
+ lv_obj_add_style(label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
+ lv_label_set_text(label_value, ext->spo2);
+ //lv_label_set_align(label_value, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_value, cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_VALUE_Y);
+ lv_obj_set_click(label_value, false);
+ ext->label_value = label_value;
+
+ if(FALSE == health_spo2_sensor_wear_state_get())
+ {
+ ext->measure_state = STATE_SPO2_MEASURE_FAIL;
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_SPO2, 0);
+ }
+ else
+ {
+ health_spo2_sensor_open();
+
+ lv_obj_t * gif_cont = lv_cont_create(cont, NULL);
+ lv_obj_set_size(gif_cont, LV_HOR_RES, 120);
+ lv_obj_set_style_local_bg_color(gif_cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_align(gif_cont, cont, LV_ALIGN_IN_TOP_MID, 0, 20);
+ ext->gif_cont = gif_cont;
+
+ ext->gif_info = gif_open(gif_cont, ANIM_SPO2_MEASURING, 0);
+ if(!ext->gif_info)
+ {
+ SPO2_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: gif open fail\n", __FUNCTION__, __LINE__);
+ }
+
+ ext->total_timer_id = Hal_Timer_Start(HEALTH_SPO2_MEASURE_DURATION, health_spo2_measure_timeout, NULL, FALSE);
+ ext->cycle_timer_id = Hal_Timer_Start(HEALTH_SPO2_MEASURE_CYCLE, health_spo2_measure_cycle_timeout, NULL, TRUE);
+
+ ext->measure_state = STATE_SPO2_MEASURING;
+ watch_set_suspend_enable(false, ACT_ID_HEALTH_MEASURE_SPO2, 0);
+ }
+
+ health_spo2_display_update();
+
+ return watch_obj;
+}
+
+void health_spo2_create_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+ (void)btn;
+ if(LV_EVENT_CLICKED == e)
+ {
+ lv_obj_t * obj = health_spo2_create(NULL);
+ LV_ASSERT_MEM(obj);
+ }
+}
+
+
+#endif
--- /dev/null
+
+
+
+#ifndef __HEALTH_SPO2_H__
+#define __HEALTH_SPO2_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lvgl.h"
+#include "lv_ex_conf.h"
+#else
+#include "../../../lvgl/lvgl.h"
+#include "../../../lv_ex_conf.h"
+#endif
+
+#ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
+
+
+#define __HEALTH_SPO2_DEBUG__
+#ifdef __HEALTH_SPO2_DEBUG__
+#define SPO2_DEBUG_PRINTF(fmt, ...) printf(fmt, ##__VA_ARGS__)
+#else
+#define SPO2_DEBUG_PRINTF(fmt, ...)
+#endif
+
+
+#define HEALTH_SPO2_MEASURE_DURATION (1000 * 40) // 40 sec
+#define HEALTH_SPO2_MEASURE_CYCLE (1000 * 1)
+
+
+#if USE_LV_WATCH_UI_240_320
+#define SPO2_LABEL_INFO_X (0)
+#define SPO2_LABEL_INFO_Y (180)
+#define SPO2_LABEL_INFO_W (LV_HOR_RES - SPO2_LABEL_INFO_X)
+#define SPO2_LABEL_INFO_H (30)
+
+#define SPO2_LABEL_VALUE_X (0)
+#define SPO2_LABEL_VALUE_Y (220)
+#define SPO2_LABEL_VALUE_W (LV_HOR_RES - SPO2_LABEL_VALUE_X)
+#define SPO2_LABEL_VALUE_H (50)
+
+#else
+
+#endif
+
+
+typedef enum
+{
+ STATE_SPO2_MEASURE_NONE,
+ STATE_SPO2_MEASURING,
+ STATE_SPO2_MEASURE_DONE,
+ STATE_SPO2_MEASURE_FAIL,
+ STATE_SPO2_MEASURE_MAX,
+}lv_spo2_state_e;
+
+typedef struct {
+ lv_watch_obj_ext_t lv_watch_obj;
+
+ gif_info_t * gif_info;
+ TIMER_ID total_timer_id, cycle_timer_id;
+ lv_obj_t * cont;
+ lv_obj_t * img;
+ lv_obj_t * label_info;
+ lv_obj_t * label_value;
+ lv_obj_t * gif_cont;
+ lv_spo2_state_e measure_state;
+ char spo2[8];
+} lv_spo2_obj_ext_t;
+
+
+
+void health_spo2_create_event_cb(lv_obj_t * btn, lv_event_t e);
+
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+
+
+
+/*********************
+ * INCLUDES
+ *********************/
+#include "lv_watch.h"
+
+#ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
+
+#include <stdio.h>
+
+
+
+void health_temperature_sensor_open(void)
+{
+
+}
+
+void health_temperature_sensor_close(void)
+{
+
+}
+
+void health_temperature_sensor_value_get(float * body_value, float * wrist_value)
+{
+ srand(Hal_Timer_Get_Counter());
+ float value = 36.0 + rand() % 4 * 0.1;
+
+ * body_value = value;
+ * wrist_value = value - 10;
+}
+
+BOOL health_temperature_sensor_wear_state_get(void)
+{
+ BOOL is_wear = TRUE;
+
+ return is_wear;
+}
+
+lv_temperature_obj_ext_t * health_temperature_get_ext(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HEALTH_MEASURE_TEMPERATURE);
+ if(NULL == activity_obj)
+ {
+ return NULL;
+ }
+
+ lv_obj_t * watch_obj;
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+ if(NULL != watch_obj)
+ {
+ lv_temperature_obj_ext_t * ext = lv_obj_get_ext_attr(watch_obj);
+ return ext;
+ }
+ return NULL;
+}
+
+void health_temperature_display_update(void)
+{
+ lv_temperature_obj_ext_t * ext = health_temperature_get_ext();
+ if(NULL == ext)
+ {
+ return;
+ }
+
+ switch(ext->measure_state)
+ {
+ case STATE_TEMPERATURE_MEASURING:
+ lv_label_set_text_id(ext->label_prompt_info, WATCH_TEXT_ID_MEASURING);
+
+ lv_label_set_text(ext->label_body_value, ext->body_value);
+
+ lv_label_set_text(ext->label_wrist_value, ext->wrist_value);
+
+ break;
+
+ case STATE_TEMPERATURE_MEASURE_FAIL:
+ lv_label_set_text_id(ext->label_prompt_info, WATCH_TEXT_ID_MEASURE_FAIL);
+
+ lv_label_set_text_id(ext->label_body_value, WATCH_TEXT_ID_NOT_WEAR);
+ lv_label_set_text_id(ext->label_wrist_value, WATCH_TEXT_ID_NOT_WEAR);
+ break;
+
+ case STATE_TEMPERATURE_MEASURE_DONE:
+ lv_label_set_text_id(ext->label_prompt_info, WATCH_TEXT_ID_MEASURE_DONE);
+
+ lv_label_set_text(ext->label_body_value, ext->body_value);
+
+ lv_label_set_text(ext->label_wrist_value, ext->wrist_value);
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void health_temperature_measure_cycle_timeout(void * para)
+{
+ (void) para;
+
+ lv_temperature_obj_ext_t * ext = health_temperature_get_ext();
+ if(ext)
+ {
+ if(FALSE == health_temperature_sensor_wear_state_get())
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->total_timer_id)
+ {
+ Hal_Timer_Stop(ext->total_timer_id);
+ ext->total_timer_id = NULL;
+ }
+
+ ext->measure_state = STATE_TEMPERATURE_MEASURE_FAIL;
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_TEMPERATURE, 0);
+ }
+ else
+ {
+ float body_value, wrist_value;
+ health_temperature_sensor_value_get(&body_value, &wrist_value);
+ if(body_value)
+ {
+ sprintf(ext->body_value, "%.1f C", body_value);
+ }
+ if(wrist_value)
+ {
+ sprintf(ext->wrist_value, "%.1f C", wrist_value);
+ }
+
+ ext->measure_state = STATE_TEMPERATURE_MEASURING;
+ }
+ }
+
+ health_temperature_display_update();
+}
+
+static void health_temperature_measure_timeout(void * para)
+{
+ (void) para;
+
+ //sensor
+ health_temperature_sensor_close();
+
+ lv_temperature_obj_ext_t * ext = health_temperature_get_ext();
+ if(ext)
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->total_timer_id)
+ {
+ Hal_Timer_Stop(ext->total_timer_id);
+ ext->total_timer_id = NULL;
+ }
+
+ ext->measure_state = STATE_TEMPERATURE_MEASURE_DONE;
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_TEMPERATURE, 0);
+ }
+
+ health_temperature_display_update();
+}
+
+static void health_temperature_prepare_destory(lv_obj_t * activity_obj)
+{
+ TEMPERATURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_TEMPERATURE, 0);
+ lv_watch_png_cache_all_free();
+
+ //lv_obj_t * watch_obj = NULL;
+ //lv_watch_get_child_obj(act, lv_watch_obj_signal, &watch_obj);
+ //lv_obj_t * cont = lv_obj_get_child(watch_obj, NULL);
+
+ lv_temperature_obj_ext_t * ext = health_temperature_get_ext();
+ if(NULL != ext)
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->total_timer_id)
+ {
+ Hal_Timer_Stop(ext->total_timer_id);
+ ext->total_timer_id = NULL;
+ }
+
+ TEMPERATURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ }
+}
+
+lv_obj_t * health_temperature_create(lv_obj_t * activity_obj)
+{
+ if(NULL == activity_obj)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_HEALTH_MEASURE_TEMPERATURE;
+ activity_ext.create = health_temperature_create;
+ activity_ext.prepare_destory = health_temperature_prepare_destory;
+
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ LV_ASSERT_MEM(activity_obj);
+ if(NULL == activity_obj)
+ return NULL;
+ }
+
+ lv_obj_t * watch_obj = lv_watch_obj_create(activity_obj);
+ if(NULL == watch_obj)
+ return NULL;
+
+ lv_temperature_obj_ext_t * ext = lv_obj_allocate_ext_attr(watch_obj, sizeof(lv_temperature_obj_ext_t));
+ if(NULL == ext)
+ return NULL;
+
+ _lv_memset_00(ext->body_value, sizeof(ext->body_value));
+ _lv_memset_00(ext->wrist_value, sizeof(ext->wrist_value));
+
+ lv_obj_t * cont = lv_cont_create(watch_obj, NULL);
+ lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES);
+ lv_obj_align(cont, watch_obj, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+ lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_set_style_local_bg_opa(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP);
+ lv_obj_set_style_local_pad_left(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0);
+ lv_obj_set_style_local_pad_right(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0);
+ //lv_cont_set_layout(cont, LV_LAYOUT_ROW_MID);
+ lv_obj_set_click(cont, false);
+ lv_watch_obj_add_element(cont);
+
+ lv_obj_t * img = lv_img_create(cont, NULL);
+ lv_img_set_src(img, ICON_TEMPERATURE_MEASURE_BG);
+
+ lv_obj_t * label_body_info = lv_label_create(cont, NULL);
+ lv_obj_set_pos(label_body_info, TEMPERATURE_LABEL_BODY_INFO_X, TEMPERATURE_LABEL_BODY_INFO_Y);
+ lv_obj_set_size(label_body_info, TEMPERATURE_LABEL_BODY_INFO_W, TEMPERATURE_LABEL_BODY_INFO_H);
+ lv_obj_add_style(label_body_info, LV_LABEL_PART_MAIN, &lv_watch_font24_yellow);
+ lv_label_set_text_id(label_body_info, WATCH_TEXT_ID_CURRENT_BODY_TEMPERATURE);
+ lv_label_set_align(label_body_info, LV_LABEL_ALIGN_LEFT);
+ lv_obj_set_click(label_body_info, false);
+
+ ext->label_body_value = lv_label_create(cont, NULL);
+ lv_obj_set_pos(ext->label_body_value, TEMPERATURE_LABEL_BODY_VALUE_X, TEMPERATURE_LABEL_BODY_VALUE_Y);
+ //lv_obj_set_size(ext->label_body_value, TEMPERATURE_LABEL_BODY_VALUE_W, TEMPERATURE_LABEL_BODY_VALUE_H);
+ lv_obj_add_style(ext->label_body_value, LV_LABEL_PART_MAIN, &lv_watch_font24);
+ lv_label_set_text(ext->label_body_value, ext->body_value);
+ lv_label_set_align(ext->label_body_value, LV_LABEL_ALIGN_LEFT);
+ lv_obj_set_click(ext->label_body_value, false);
+
+ lv_obj_t * label_wrist_info = lv_label_create(cont, NULL);
+ lv_obj_set_pos(label_wrist_info, TEMPERATURE_LABEL_WRIST_INFO_X, TEMPERATURE_LABEL_WRIST_INFO_Y);
+ //lv_obj_set_size(label_wrist_info, TEMPERATURE_LABEL_WRIST_INFO_W, TEMPERATURE_LABEL_WRIST_INFO_H);
+ lv_obj_add_style(label_wrist_info, LV_LABEL_PART_MAIN, &lv_watch_font24_yellow);
+ lv_label_set_text_id(label_wrist_info, WATCH_TEXT_ID_CURRENT_WRIST_TEMPERATURE);
+ lv_label_set_align(label_wrist_info, LV_LABEL_ALIGN_LEFT);
+ lv_obj_set_click(label_wrist_info, false);
+
+ ext->label_wrist_value = lv_label_create(cont, NULL);
+ lv_obj_set_pos(ext->label_wrist_value, TEMPERATURE_LABEL_WRIST_VALUE_X, TEMPERATURE_LABEL_WRIST_VALUE_Y);
+ //lv_obj_set_size(ext->label_wrist_value, TEMPERATURE_LABEL_WRIST_VALUE_W, TEMPERATURE_LABEL_WRIST_VALUE_H);
+ lv_obj_add_style(ext->label_wrist_value, LV_LABEL_PART_MAIN, &lv_watch_font24);
+ lv_label_set_text(ext->label_wrist_value, ext->wrist_value);
+ lv_label_set_align(ext->label_wrist_value, LV_LABEL_ALIGN_LEFT);
+ lv_obj_set_click(ext->label_wrist_value, false);
+
+ ext->label_prompt_info = lv_label_create(cont, NULL);
+ //lv_obj_set_size(ext->label_prompt_info, LV_HOR_RES, 40);
+ lv_obj_add_style(ext->label_prompt_info, LV_LABEL_PART_MAIN, &lv_watch_font30);
+ lv_label_set_text_id(ext->label_prompt_info, WATCH_TEXT_ID_MEASURING);
+ lv_label_set_align(ext->label_prompt_info, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(ext->label_prompt_info, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -70);
+ lv_obj_set_click(ext->label_prompt_info, false);
+
+ if(FALSE == health_temperature_sensor_wear_state_get())
+ {
+ ext->measure_state = STATE_TEMPERATURE_MEASURE_FAIL;
+ watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_TEMPERATURE, 0);
+ }
+ else
+ {
+ health_temperature_sensor_open();
+
+ TEMPERATURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ ext->total_timer_id = Hal_Timer_Start(TEMPERATURE_MEASURE_DURATION, health_temperature_measure_timeout, NULL, FALSE);
+ ext->cycle_timer_id = Hal_Timer_Start(TEMPERATURE_MEASURE_CYCLE, health_temperature_measure_cycle_timeout, NULL, TRUE);
+
+ ext->measure_state = STATE_TEMPERATURE_MEASURING;
+ watch_set_suspend_enable(false, ACT_ID_HEALTH_MEASURE_TEMPERATURE, 0);
+ }
+
+ health_temperature_display_update();
+
+ return watch_obj;
+}
+
+void health_temperature_create_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+ (void)btn;
+ if(LV_EVENT_CLICKED == e)
+ {
+ lv_obj_t * obj = health_temperature_create(NULL);
+ LV_ASSERT_MEM(obj);
+ }
+}
+
+
+#endif
--- /dev/null
+
+
+
+#ifndef __HEALTH_TEMPERATURE_H__
+#define __HEALTH_TEMPERATURE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lvgl.h"
+#include "lv_ex_conf.h"
+#else
+#include "../../../lvgl/lvgl.h"
+#include "../../../lv_ex_conf.h"
+#endif
+
+#ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
+
+
+#define __HEALTH_TEMPERATURE_DEBUG__
+#ifdef __HEALTH_TEMPERATURE_DEBUG__
+#define TEMPERATURE_DEBUG_PRINTF(fmt, ...) printf(fmt, ##__VA_ARGS__)
+#else
+#define TEMPERATURE_DEBUG_PRINTF(fmt, ...)
+#endif
+
+
+#define TEMPERATURE_MEASURE_DURATION (1000 * 30) // 30 sec
+#define TEMPERATURE_MEASURE_CYCLE (1000 * 1)
+
+
+#if USE_LV_WATCH_UI_240_320
+#define TEMPERATURE_LABEL_BODY_INFO_X (75)
+#define TEMPERATURE_LABEL_BODY_INFO_Y (35)
+#define TEMPERATURE_LABEL_BODY_INFO_W (LV_HOR_RES - TEMPERATURE_LABEL_BODY_INFO_X)
+#define TEMPERATURE_LABEL_BODY_INFO_H (30)
+
+#define TEMPERATURE_LABEL_BODY_VALUE_X (80)
+#define TEMPERATURE_LABEL_BODY_VALUE_Y (75)
+#define TEMPERATURE_LABEL_BODY_VALUE_W (LV_HOR_RES - TEMPERATURE_LABEL_BODY_VALUE_X)
+#define TEMPERATURE_LABEL_BODY_VALUE_H (30)
+
+#define TEMPERATURE_LABEL_WRIST_INFO_X (75)
+#define TEMPERATURE_LABEL_WRIST_INFO_Y (115+3)
+#define TEMPERATURE_LABEL_WRIST_INFO_W (LV_HOR_RES - TEMPERATURE_LABEL_WRIST_INFO_X)
+#define TEMPERATURE_LABEL_WRIST_INFO_H (30)
+
+#define TEMPERATURE_LABEL_WRIST_VALUE_X (80)
+#define TEMPERATURE_LABEL_WRIST_VALUE_Y (160)
+#define TEMPERATURE_LABEL_WRIST_VALUE_W (LV_HOR_RES - TEMPERATURE_LABEL_WRIST_VALUE_X)
+#define TEMPERATURE_LABEL_WRIST_VALUE_H (30)
+#else
+
+#endif
+
+
+typedef enum
+{
+ STATE_TEMPERATURE_MEASURE_NONE,
+ STATE_TEMPERATURE_MEASURING,
+ STATE_TEMPERATURE_MEASURE_DONE,
+ STATE_TEMPERATURE_MEASURE_FAIL,
+ STATE_TEMPERATURE_MEASURE_MAX,
+}lv_temperature_state_e;
+
+typedef struct {
+ lv_watch_obj_ext_t lv_watch_obj;
+
+ //gif_info_t * gif_info;
+ TIMER_ID total_timer_id, cycle_timer_id;
+ lv_obj_t * label_prompt_info;
+ lv_obj_t * label_body_value;
+ lv_obj_t * label_wrist_value;
+ lv_temperature_state_e measure_state;
+ char body_value[8];
+ char wrist_value[8];
+} lv_temperature_obj_ext_t;
+
+
+
+void health_temperature_create_event_cb(lv_obj_t * btn, lv_event_t e);
+
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
lv_imgviewer_obj_ext_t * ext = imgviewer_get_ext();
if(ext->photo_cnt == 0) {
bg = lv_img_create(par, NULL);
- lv_img_set_src(bg, ICON_IMGVIEWER_NO_PHOTO);
+ //lv_img_set_src(bg, ICON_IMGVIEWER_NO_PHOTO);
+ lv_img_set_src(bg, ICON_COMMON_BG_WHITE);
lv_obj_t * label_nophoto = lv_label_create(bg, NULL);
lv_label_set_text_id(label_nophoto, WATCH_TEXT_ID_NOPHOTO);
- lv_obj_align(label_nophoto, NULL, LV_ALIGN_IN_BOTTOM_MID, 10, -20);
- lv_obj_add_style(label_nophoto, LV_LABEL_PART_MAIN, &lv_watch_font20_black);
+ //lv_obj_align(label_nophoto, NULL, LV_ALIGN_IN_BOTTOM_MID, 10, -20);
+ //lv_obj_add_style(label_nophoto, LV_LABEL_PART_MAIN, &lv_watch_font20_black);
+ lv_obj_add_style(label_nophoto, LV_LABEL_PART_MAIN, &lv_watch_font30_black);
+ lv_obj_align(label_nophoto, NULL, LV_ALIGN_CENTER, 0, 0);
lv_obj_set_click(label_nophoto, false);
} else {
lv_obj_set_event_cb(img_back, imgviewer_back_event_cb);
lv_obj_set_adv_hittest(img_back, false);
+ printf("[@CHENG_DEBUG][%s][%d]: %d, %d\n", __FUNCTION__, __LINE__, ext->photo_cnt, ext->selected_cnt);
+
if(ext->photo_cnt > 0) {
//prev
lv_obj_t * cont_prev = lv_cont_create(bg, NULL);
lv_obj_set_click(img_del, true);
lv_obj_set_adv_hittest(img_del, false);
lv_obj_set_event_cb(img_del, imgviewer_delete_event_cb);
+
+#ifdef __MMI_ZHSX_SUPPORT__
+ lv_obj_set_hidden(img_share, true);
+#endif
}
static lv_obj_t * imgviewer_setting_create(lv_obj_t * activity_obj)
num = lv_obj_get_user_data(obj).user_num;
+ #if 1 //CHENG_MODIFY
+ if(0 == num || 1 == num || 2 == num)
+ {
+ sel_value = get_value_from_btn(obj);
+ }
+
+ #else
+
if(num == 0) {
ext->height = get_value_from_btn(obj);
ext->weight = get_value_from_btn(lv_obj_get_child_back(lv_obj_get_parent(obj), obj));
ext->step = get_value_from_btn(obj);
sel_value = ext->step;
}
+ #endif
+
// printf("num = %d height = %d w = %d g = %d\n", num,ext->height, ext->weight, ext->step);
roller_create(child_obj, num, sel_value);
setting_opt_create(child_obj);
if(img_color_circle == NULL) return NULL;
lv_img_set_src(img_color_circle, ICON_COLOR_CIRCLE);
lv_obj_add_style(img_color_circle, LV_IMG_PART_MAIN, &lv_watch_image);
+#if USE_LV_WATCH_UI_240_320
+ lv_obj_set_y(img_color_circle, 30);
+#else
lv_obj_align(img_color_circle, tab, LV_ALIGN_CENTER, 0, 0);
+#endif
lv_obj_t * pedometer = lv_img_create(img_color_circle, NULL);
lv_img_set_src(pedometer, ICON_STEP_DOT);
+
+#if USE_LV_WATCH_UI_240_320
+ lv_obj_set_pos(pedometer, LV_HOR_RES / 2 - lv_obj_get_width(pedometer) / 2,
+ 120 + 100 - lv_obj_get_height(pedometer) / 2);
+#else
lv_obj_set_pos(pedometer, LV_HOR_RES / 2 - lv_obj_get_width(pedometer) / 2,
LV_VER_RES / 2 + 100 - lv_obj_get_height(pedometer) / 2);
+#endif
lv_img_set_pivot(pedometer, lv_obj_get_width(pedometer) / 2,
- (PEDOMETER_CIRCLE_R - lv_obj_get_width(pedometer) / 2 + PEDOMETER_CIRCLE_R_OFFSET));
**********************/
static watch_app_info_t * menu_app = NULL;
static uint8_t watch_menu_app_cnt = 0;
+
+#ifdef __MMI_ZHSX_SUPPORT__
+
+#include "primary_menu_data.c"
+
+//count should not greater than WATCH_APP_MAX_COUNT !!
+#define PRIMARY_MENU_COUNT (sizeof(s_primary_grid_menu) / sizeof(watch_app_info_t))
+
+#else /*__MMI_ZHSX_SUPPORT__*/
+
static watch_app_info_t app[] = {
{ ICON_SETTING, WATCH_TEXT_ID_SETTINGS, setting_create_event_cb },
{ ICON_WECHAT, WATCH_TEXT_ID_WECHAT, voice_msg_create_event_cb },
{ ICON_SMS_MSG, WATCH_TEXT_ID_SMS_MSG,sms_msg_create_event_cb},
#endif
};
+
+#endif /*__MMI_ZHSX_SUPPORT__*/
+
+
/**********************
* MACROS
**********************/
primary_set_default_menu(&launcher_info);
}
menu_app = (watch_app_info_t *)lv_mem_alloc(sizeof(watch_app_info_t) * watch_menu_app_cnt);
+#ifdef __MMI_ZHSX_SUPPORT__
+ for(i = 0; i < watch_menu_app_cnt; i++)
+ {
+ memcpy(&menu_app[i], &(s_primary_grid_menu[i]), sizeof(watch_app_info_t));
+ }
+#else
for(i = 0; i < WATCH_APP_MAX_COUNT; i++) {
if(launcher_info.menu_app_show[i] == 1) {
memcpy(&menu_app[j], &app[i], sizeof(watch_app_info_t));
j++;
}
}
+#endif
}
void primary_menu_destroy(void)
**********************/
static void primary_set_default_menu(nv_watch_launcher_t * launcher_info)
{
+#ifdef __MMI_ZHSX_SUPPORT__
+ if(PRIMARY_MENU_COUNT > WATCH_APP_MAX_COUNT)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: primary menu count %d should not greater than %d\n", __FUNCTION__, __LINE__, PRIMARY_MENU_COUNT, WATCH_APP_MAX_COUNT);
+ return;
+ }
+
+ uint8_t i = 0;
+ for(i = 0; i < PRIMARY_MENU_COUNT; i++)
+ {
+ launcher_info->menu_app_show[i] = 1;
+ }
+ watch_menu_app_cnt = PRIMARY_MENU_COUNT;
+
+#else /*__MMI_ZHSX_SUPPORT__*/
+
launcher_info->menu_app_show[APP_SETTING] = 1;
launcher_info->menu_app_show[APP_WECHAT] = 1;
launcher_info->menu_app_show[APP_PHONEBOOK] = 1;
watch_menu_app_cnt++;
}
}
+#endif /*__MMI_ZHSX_SUPPORT__*/
+
UI_NV_Write_Req(NV_SECTION_UI_LAUNCHER, 0, sizeof(nv_watch_launcher_t), (uint8_t *)launcher_info);
printf("%s: add default show app cnt %d\n", __FUNCTION__, watch_menu_app_cnt);
}
} else if(i == 3) {
lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, -30*2, -45*2);
}
+#elif USE_LV_WATCH_UI_240_320 != 0
+ if(0 == i)
+ lv_obj_align(btn, cont, LV_ALIGN_IN_TOP_LEFT, 20, 40 - 15);
+ else if(1 == i)
+ lv_obj_align(btn, cont, LV_ALIGN_IN_TOP_RIGHT, -20, 40 - 15);
+ else if(2 == i)
+ lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 20, -45 - 18);
+ else if(3 == i)
+ lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, -20, -45 - 18);
+
#else
if(i == 0) {
lv_obj_align(btn, cont, LV_ALIGN_IN_TOP_LEFT, 20, 40);
--- /dev/null
+
+
+
+#include "lv_watch.h"
+
+#if USE_LV_WATCH_PRIMARY_MENU != 0
+
+#include <stdio.h>
+
+
+#ifdef __MMI_ZHSX_SUPPORT__
+
+//count need not greater than WATCH_APP_MAX_COUNT !!
+
+static watch_app_info_t s_primary_grid_menu[] =
+{
+ { ICON_PHONEBOOK, WATCH_TEXT_ID_TELEPHONE, phonebook_create_btn_event_cb},
+#if USE_LV_WATCH_SMS_MSG != 0
+ { ICON_SMS_MSG, WATCH_TEXT_ID_SMS_MSG,sms_msg_create_event_cb},
+#endif
+ { ICON_DIALPAD, WATCH_TEXT_ID_DIALPAD, dialpad_create_event_cb },
+ { ICON_CALLLOG, WATCH_TEXT_ID_CALL_LOG, call_log_create_event_cb },
+
+#ifdef __MMI_HEALTH_MEASURE_HEART_SUPPORT__
+ { ICON_HEART_RATE, WATCH_TEXT_ID_HEART_RATE, health_heart_rate_create_event_cb},
+#endif
+#ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
+ { ICON_SPO2, WATCH_TEXT_ID_SPO2, health_spo2_create_event_cb},
+#endif
+#ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
+ { ICON_TEMPERATURE, WATCH_TEXT_ID_TEMPERATURE, health_temperature_create_event_cb},
+#endif
+#ifdef __MMI_WECHAT_SUPPORT__
+ { ICON_WECHAT, WATCH_TEXT_ID_WECHAT, wechat_create_event_cb },
+#endif
+
+ { ICON_CAMERA, WATCH_TEXT_ID_CAMERA, camera_create_btn_event_cb }, //test code
+ { ICON_ALBUM, WATCH_TEXT_ID_ALBUM, album_create_event_cb },
+#if USE_LV_WATCH_ALIPAY != 0
+ { ICON_ALIPAY, WATCH_TEXT_ID_ALIPAY, upay_create_event_cb },
+#endif
+ { ICON_VIDEOCALL, WATCH_TEXT_ID_VIDEOCALL, videocallmain_create },
+
+ { ICON_MUSIC, WATCH_TEXT_ID_AUDIO_PLAYER, audio_player_create_event_cb },
+ { ICON_ALARM, WATCH_TEXT_ID_ALARM, alarm_create_event_cb },
+ { ICON_STOPWATCH, WATCH_TEXT_ID_STOPWATCH, stopwatch_create_event_cb },
+ { ICON_TIMER, WATCH_TEXT_ID_TIMER, timer_create_event_cb },
+
+ { ICON_CALCULATOR, WATCH_TEXT_ID_CALCULATOR, calculator_create_event_cb },
+ { ICON_CALENDAR, WATCH_TEXT_ID_CALENDER, calendar_create_event_cb },
+ { ICON_SETTING, WATCH_TEXT_ID_SETTINGS, setting_create_event_cb },
+};
+
+
+#endif /*__MMI_ZHSX_SUPPORT__*/
+
+
+#endif /*USE_LV_WATCH_PRIMARY_MENU*/
if(confirm) {
lv_obj_t * label = lv_label_create(obj, NULL);
- lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font20_gray);
- lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
- lv_obj_set_click(label, false);
- lv_label_set_text_id(label, WATCH_TEXT_ID_SHUTDOWN);
- lv_obj_align(label, obj, LV_ALIGN_IN_TOP_MID, 0, 10);
-
- label = lv_label_create(obj, NULL);
- lv_obj_set_width(label, lv_obj_get_width(obj) - 40);
+ //lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font20_gray);
+ //lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+ //lv_obj_set_click(label, false);
+ //lv_label_set_text_id(label, WATCH_TEXT_ID_SHUTDOWN);
+ //lv_obj_align(label, obj, LV_ALIGN_IN_TOP_MID, 0, 10);
+
+ //label = lv_label_create(obj, NULL);
+ //lv_obj_set_width(label, lv_obj_get_width(obj) - 40);
+ lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font30);
lv_label_set_text_id(label, WATCH_TEXT_ID_CONFIRM_SHUTDOWN);
lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -40);
lv_obj_t * img = lv_img_create(obj, NULL);
lv_img_set_src(img, ICON_STOPWATCH_BACKGROUND);
+#if USE_LV_WATCH_UI_240_320
+ lv_obj_set_pos(img, 0, 40);
+#endif
lv_stopwatch_ext_t * img_ext = lv_obj_allocate_ext_attr(img, sizeof(lv_stopwatch_ext_t));
img_ext->label_hour_1 = NULL;
img_ext->label_hour_2 = NULL;
lv_arc_set_bg_angles(arc, 0, 360);
uint16_t angle_end = 270 + 360 - 360 * (timer_total - timer_remaining) / timer_total;
lv_arc_set_angles(arc, 270, angle_end);
+#if USE_LV_WATCH_UI_240_320
+ lv_obj_set_size(arc, LV_HOR_RES-10, LV_HOR_RES-10);
+#else
lv_obj_set_size(arc, LV_VER_RES-10, LV_VER_RES-10);
+#endif
lv_obj_align(arc, NULL, LV_ALIGN_CENTER, 0, 0);
lv_obj_set_style_local_line_color(arc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_CYAN);
lv_obj_set_style_local_line_width(arc, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_DPX(10));
lv_obj_t * btn_stop = lv_imgbtn_create(obj, NULL);
lv_imgbtn_set_src(btn_stop, LV_BTN_STATE_RELEASED, ICON_TIMER_STOP);
lv_imgbtn_set_src(btn_stop, LV_BTN_STATE_PRESSED, ICON_TIMER_STOP);
+#if USE_LV_WATCH_UI_240_320
+ lv_obj_align(btn_stop, NULL, LV_ALIGN_IN_BOTTOM_LEFT, LV_HOR_RES*90/360, -LV_VER_RES*40/360 - 35);
+#else
lv_obj_align(btn_stop, NULL, LV_ALIGN_IN_BOTTOM_LEFT, LV_HOR_RES*90/360, -LV_VER_RES*40/360);
+#endif
lv_obj_set_event_cb(btn_stop, timer_stop_action);
lv_watch_obj_add_element(btn_stop);
lv_imgbtn_set_src(btn_start, LV_BTN_STATE_RELEASED, ICON_TIMER_START);
lv_imgbtn_set_src(btn_start, LV_BTN_STATE_PRESSED, ICON_TIMER_START);
}
+#if USE_LV_WATCH_UI_240_320
+ lv_obj_align(btn_start, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -LV_HOR_RES*90/360, -LV_VER_RES*40/360 - 35);
+#else
lv_obj_align(btn_start, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -LV_HOR_RES*90/360, -LV_VER_RES*40/360);
+#endif
lv_obj_set_event_cb(btn_start, timer_start_action);
lv_watch_obj_add_element(btn_start);
ext->btn_start = btn_start;
lv_obj_t * btn_pause = lv_imgbtn_create(obj, NULL);
lv_imgbtn_set_src(btn_pause, LV_BTN_STATE_RELEASED, ICON_TIMER_PAUSE);
lv_imgbtn_set_src(btn_pause, LV_BTN_STATE_PRESSED, ICON_TIMER_PAUSE);
+#if USE_LV_WATCH_UI_240_320
+ lv_obj_align(btn_pause, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -LV_HOR_RES*90/360, -LV_VER_RES*40/360 - 35);
+#else
lv_obj_align(btn_pause, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -LV_HOR_RES*90/360, -LV_VER_RES*40/360);
+#endif
lv_obj_set_event_cb(btn_pause, timer_pause_action);
lv_watch_obj_add_element(btn_pause);
ext->btn_pause = btn_pause;
--- /dev/null
+
+
+
+#ifndef __WECHAT_H__
+#define __WECHAT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+* INCLUDES
+*********************/
+
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lvgl.h"
+#include "lv_watch_conf.h"
+#else
+#include "../../../lvgl/lvgl.h"
+#include "../../../lv_watch_conf.h"
+#endif
+
+#ifdef __MMI_WECHAT_SUPPORT__
+
+
+#if 0
+
+#define VOICE_MSG_AMR_HEAD_SIZE 6
+#define VOICE_MSG_EXPRESSION_WIDTH 120
+#define VOICE_MSG_EXPRESSION_HEIGHT 120
+#define VOICE_MSG_PHOTO_WIDTH 120
+#define VOICE_MSG_PHOTO_HEIGHT 120
+
+#endif
+
+#define __WECHAT_DEBUG__
+#ifdef __WECHAT_DEBUG__
+#define WECHAT_DEBUG_PRINTF(fmt, ...) printf(fmt, ##__VA_ARGS__)
+#else
+#define WECHAT_DEBUG_PRINTF(fmt, ...)
+#endif
+
+
+
+#define WECHAT_MSG_DATA_FILE_NAME_MAX (NV_WATCH_WECHAT_DATA_FILE_NAME_MAX) // (LV_FS_MAX_PATH_LENGTH / 2)
+//#define WECHAT_MSG_DATA_FILE_PATH "C:/wechat/"
+
+#define WECHAT_MSG_DATA_AMR_HEAD_SIZE (6)
+#define WECHAT_MSG_DATA_RECORD_DURATION_MAX (16) // seconds
+#define WECHAT_MSG_DATA_RECORD_SIZE_MAX (WECHAT_MSG_DATA_RECORD_DURATION_MAX * HAL_AMR_BUFSIZE_PER_SECOND + WECHAT_MSG_DATA_AMR_HEAD_SIZE)
+
+#define WECHAT_MSG_CHAT_TIME_INTERVAL (3 * 60) /*display the time of current chat msg if more than 3 mins from the previous chat msgs*/
+
+#define WECHAT_MSG_SENDING_TIME_MAX (1000 * 3) // ms
+
+
+
+typedef enum
+{
+ WECHAT_CREATED_FROM_APP,
+ WECHAT_CREATED_FROM_ALBUM,
+ WECHAT_CREATED_FROM_IMGVIEWER,
+ WECHAT_CREATED_FROM_MAX,
+}lv_wechat_created_from_e;
+
+typedef struct
+{
+ lv_watch_obj_ext_t old_ext;
+ lv_anim_t sending_anim;
+ TIMER_ID sending_timer_id, result_timer_id;
+ bool send_result;
+} lv_wechat_msg_sending_ext_t;
+
+typedef struct
+{
+ lv_watch_obj_ext_t old_ext;
+ lv_obj_t * label;
+ uint32_t file_size;
+} lv_wechat_msg_recording_ext_t;
+
+typedef struct
+{
+ lv_watch_obj_ext_t old_ext;
+ lv_obj_t * unread_img;
+ uint8_t item_index;
+} lv_wechat_msg_list_item_ext_t;
+
+typedef struct {
+ lv_page_ext_t old_ext;
+ lv_anim_t voice_playing_anim;
+ bool pressing;
+ lv_style_t style_cont;
+ lv_style_t style_label_time;
+ lv_style_t style_text;
+ lv_style_t style_label_len_other;
+ lv_style_t style_label_len_ui;
+} lv_wechat_msg_list_ext_t;
+
+typedef struct
+{
+ lv_watch_obj_ext_t old_ext;
+ lv_obj_t * cont;
+ lv_obj_t * list; // chat list
+ lv_obj_t * label_no_msg; // mo msg prompt
+ lv_obj_t * img_emo;
+ lv_obj_t * img_record; // record button
+ lv_obj_t * delete_bg; // delete msg
+
+ lv_wechat_created_from_e from; // msg from
+
+ TIMER_ID delete_timer_id;
+ MCI_EVNET_T event;
+}lv_wechat_ext_t;
+
+
+
+void wechat_chat_list_set_slide_enable(lv_watch_obj_ext_t * ext, bool enable);
+void wechat_msg_info_init(void);
+void wechat_msg_voice_item_playing_stop(lv_wechat_ext_t * ext);
+void wechat_chat_list_msg_item_style_reset(lv_wechat_ext_t * ext);
+void wechat_main_screen_refresh(void);
+void wechat_create_event_cb(lv_obj_t * btn, lv_event_t e);
+
+
+
+#if 0
+
+void voice_msg_call_end(void);
+void voice_msg_alarm_end(void);
+void voice_msg_speech_recog_end(void);
+void voice_msg_alarm_ind(void);
+
+void voice_msg_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority);
+void voice_msg_shut_down(void);
+void * voice_msg_get_ext(lv_watch_Activity_Id_t actId);
+uint32_t voice_msg_read_file_size(char * file_name);
+void * voice_msg_read_file_data(char * file_name, uint8_t msg_type, uint32_t * data_size);
+void voice_msg_fill_chat_id(app_adaptor_voice_msg_chat_id_t * id, voice_msg_contact_t * contact);
+void voice_msg_send_photo(void * buf, uint32_t size, voice_msg_contact_t * contact);
+void voice_msg_enlarge_photo(void * small_photo);
+void app_adaptor_voice_msg_handle_rcv_ind(app_adaptor_voice_msg_t * msg);
+void app_adaptor_voice_msg_handle_send_cnf(watch_app_adp_voice_msg_result_t result);
+ void * para);
+
+
+/*extern phone api*/
+bool phone_is_monitor_on(void);
+
+#endif
+
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null
+
+
+
+/*********************
+* INCLUDES
+*********************/
+#include "lv_watch.h"
+
+#ifdef __MMI_WECHAT_SUPPORT__
+
+
+
+static lv_signal_cb_t ancient_scrl_signal;
+
+static uint8_t s_wechat_msg_init_flag = 0;
+static nv_watch_wechat_msg_info_t * s_wechat_msg_info = NULL;
+static nv_watch_wechat_msg_item_info_t s_wechat_msg_item_info = {0};
+static uint8_t s_wechat_play_anim_count = 0;
+char s_wechat_selected_item_index = -1;
+
+
+
+#ifdef __WECHAT_DEBUG__
+bool mmi_protocol_action_talk(char * file_buf)
+{
+ //for debug
+
+ return true;
+}
+#endif
+
+
+void wechat_msg_info_nv_write(void)
+{
+ uint32_t nv_data_length = sizeof(nv_watch_wechat_msg_info_t);
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, NV_SECTION_UI_WEHAT_MSG);
+
+ if(nv_data_length != UI_NV_Write_Req(NV_SECTION_UI_WEHAT_MSG, 0, nv_data_length, (uint8_t *)s_wechat_msg_info))
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: NV_SECTION_UI_WEHAT_MSG write fail\n", __FUNCTION__, __LINE__);
+ }
+}
+
+void wechat_msg_info_init(void)
+{
+ if(0 == s_wechat_msg_init_flag)
+ {
+ uint32_t nv_data_length = sizeof(nv_watch_wechat_msg_info_t);
+
+ s_wechat_msg_info = (nv_watch_wechat_msg_info_t *)lv_mem_alloc(nv_data_length);
+ if(NULL == s_wechat_msg_info)
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+ return;
+ }
+ _lv_memset_00(s_wechat_msg_info, nv_data_length);
+
+ if(nv_data_length != UI_NV_Read_Req(NV_SECTION_UI_WEHAT_MSG, 0, nv_data_length, (uint8_t *)s_wechat_msg_info))
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: NV_SECTION_UI_WEHAT_MSG read fail\n", __FUNCTION__, __LINE__);
+ //lv_mem_free(s_wechat_msg_info);
+ //s_wechat_msg_info = NULL;
+ }
+
+ s_wechat_msg_init_flag = 1;
+ }
+}
+
+uint8_t wechat_msg_info_count_get(void)
+{
+ uint8_t msg_count = s_wechat_msg_info->msg_count;
+
+ return msg_count;
+}
+
+uint8_t wechat_msg_info_index_item_msg_from_get(uint8_t msg_index)
+{
+ // 0-slef; 1-other
+ uint8_t msg_from = s_wechat_msg_info->msg_item[msg_index].msg_from;
+
+ return msg_from;
+}
+
+void wechat_msg_info_index_item_get(uint8_t msg_index, nv_watch_wechat_msg_item_info_t ** msg_item)
+{
+ *msg_item = &(s_wechat_msg_info->msg_item[msg_index]);
+}
+
+void wechat_msg_info_index_item_delete(uint8_t msg_index)
+{
+ if(msg_index >= s_wechat_msg_info->msg_count)
+ return;
+
+ uint8_t i = 0;
+ uint32_t msg_item_info_size = sizeof(nv_watch_wechat_msg_item_info_t);
+
+ lv_fs_remove(s_wechat_msg_info->msg_item[msg_index].msg_data_full_file_name);
+ _lv_memset_00(&(s_wechat_msg_info->msg_item[msg_index]), msg_item_info_size);
+
+ if(msg_index < s_wechat_msg_info->msg_count - 1)
+ {
+ for(i = msg_index; i < s_wechat_msg_info->msg_count; i++)
+ {
+ _lv_memcpy(&(s_wechat_msg_info->msg_item[i]), &(s_wechat_msg_info->msg_item[i + 1]), msg_item_info_size);
+ }
+ }
+ s_wechat_msg_info->msg_count--;
+}
+
+void wechat_msg_info_new_item_add(nv_watch_wechat_msg_item_info_t * msg_item)
+{
+ uint32_t msg_item_info_size = sizeof(nv_watch_wechat_msg_item_info_t);
+
+ if(NV_WATCH_WECHAT_NUM_MAX <= s_wechat_msg_info->msg_count)
+ {
+ lv_fs_remove(s_wechat_msg_info->msg_item[0].msg_data_full_file_name);
+ _lv_memset_00(&(s_wechat_msg_info->msg_item[0]), msg_item_info_size);
+
+ uint8_t i = 0;
+ for(i = 0; i < NV_WATCH_WECHAT_NUM_MAX - 1; i++)
+ {
+ _lv_memcpy(&(s_wechat_msg_info->msg_item[i]), &(s_wechat_msg_info->msg_item[i + 1]), msg_item_info_size);
+ }
+ s_wechat_msg_info->msg_count--;
+ }
+
+ s_wechat_msg_info->msg_count++;
+ _lv_memcpy(&(s_wechat_msg_info->msg_item[s_wechat_msg_info->msg_count - 1]), msg_item, msg_item_info_size);
+}
+
+void * wechat_actId_ext_get(lv_watch_Activity_Id_t actId)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(actId);
+ if(NULL == activity_obj)
+ return NULL;
+
+ lv_obj_t * obj = NULL;
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &obj);
+ if(NULL == obj)
+ return NULL;
+
+ if(obj)
+ {
+ void * ext = lv_obj_get_ext_attr(obj);
+ return ext;
+ }
+ return NULL;
+}
+
+void wechat_actId_screen_delete(lv_watch_Activity_Id_t act_id)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(act_id);
+ if(NULL == activity_obj)
+ return NULL;
+
+ lv_watch_activity_ext_t * ext = lv_obj_get_ext_attr(activity_obj);
+ //LV_ASSERT_MEM(ext);
+ if(ext->prepare_destory)
+ {
+ ext->prepare_destory(activity_obj);
+ }
+ lv_obj_del(activity_obj);
+
+ return;
+}
+
+void wechat_common_screen_prepare_destory(lv_obj_t * activity_obj)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_watch_png_cache_all_free();
+}
+
+void wechat_prepare_destory(lv_obj_t * activity_obj)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_watch_png_cache_all_free();
+
+ wechat_msg_info_nv_write();
+
+ lv_wechat_ext_t * ext = wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ //LV_ASSERT_MEM(ext);
+ if(NULL == ext)
+ return ;
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ if(WECHAT_CREATED_FROM_ALBUM == ext->from)
+ {
+ album_photo_share_flag_reset();
+ }
+ else if(WECHAT_CREATED_FROM_IMGVIEWER == ext->from)
+ {
+ imgviewer_photo_share_flag_reset();
+ }
+
+ if(NULL != ext->delete_timer_id)
+ {
+ Hal_Timer_Stop(ext->delete_timer_id);
+ ext->delete_timer_id = NULL;
+ }
+
+ wechat_msg_voice_item_playing_stop(ext);
+ wechat_chat_list_msg_item_style_reset(ext);
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+}
+
+void wechat_chat_list_set_slide_enable(lv_watch_obj_ext_t * ext, bool enable)
+{
+ if(enable)
+ {
+ ext->slide_enable = 1; /*enable to slide to the right*/
+ }
+ else
+ {
+ ext->slide_enable = 0; /*disable to slide to the right*/
+ }
+}
+
+bool wechat_msg_voice_is_playing(void)
+{
+ bool result = false;
+
+ lv_wechat_ext_t * ext = wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL != ext && NULL != ext->list)
+ {
+ lv_wechat_msg_list_ext_t * list_page_ext = lv_obj_get_ext_attr(ext->list);
+ if(NULL != list_page_ext->voice_playing_anim.var)
+ {
+ result = true;
+ }
+ }
+
+ return result;
+}
+
+bool wechat_msg_voice_is_recording(void)
+{
+ bool result = false;
+
+ if(lv_watch_get_activity_obj(ACT_ID_WECHAT_RECORDING))
+ {
+ result = true;
+ }
+
+ return result;
+}
+
+void wechat_receive_audio_play_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: priority=%d\n", __FUNCTION__, __LINE__, priority);
+
+ if(AUDIO_CTRL_PRIORITY_5 == priority)
+ {
+
+ }
+ else if(AUDIO_CTRL_PRIORITY_5 > priority)
+ {
+ Hal_NFFS_File_Play_End();
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+ }
+}
+
+void wechat_receive_audio_play_over_cb(void *para)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ Hal_NFFS_File_Play_End();
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+}
+
+void wechat_msg_receive_from_server(nv_watch_wechat_msg_item_info_t * wechat_msg_item_info)
+{
+ wechat_msg_info_new_item_add(wechat_msg_item_info);
+
+ if(false == wechat_msg_voice_is_playing() && false == wechat_msg_voice_is_recording())
+ {
+ //prompt
+ if(AUDIO_CTRL_PRIORITY_5 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_5, wechat_receive_audio_play_audio_ctrl_callback))
+ {
+ Hal_NFFS_File_Play_Onetime(AUDIO_WECHAT_RECEIVE, (HAL_SPEAKER_GAIN)query_current_volume(), wechat_receive_audio_play_over_cb, 0);
+ }
+
+ Hal_Vibrator_Play_Onetime(NULL, 1000);
+
+ if(lv_watch_get_activity_obj(ACT_ID_WECHAT_MAIN))
+ {
+ wechat_main_screen_refresh();
+ }
+ }
+}
+
+bool wechat_msg_send_to_server(void)
+{
+ bool result = false; // true-success; false-fail
+ lv_fs_file_t file_p;
+ lv_fs_res_t res;
+ uint32_t file_size = 0, bytes_read = 0;
+ char * file_buf = NULL;
+
+ res = lv_fs_open(&file_p, s_wechat_msg_item_info.msg_data_full_file_name, LV_FS_MODE_RD);
+ if(LV_FS_RES_OK != res)
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
+ lv_fs_close(&file_p);
+
+ return false;
+ }
+
+ lv_fs_size(&file_p, &file_size);
+ file_buf = lv_mem_alloc(file_size + 1);
+ _lv_memset_00(file_buf, file_size + 1);
+ res = lv_fs_read(&file_p, file_buf, file_size, &bytes_read);
+ lv_fs_close(&file_p);
+ if(LV_FS_RES_OK != res)
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: errno=%d\n", __FUNCTION__, __LINE__, res);
+
+ result = false;
+ }
+ else
+ {
+ if(true == mmi_protocol_action_talk(file_buf))
+ {
+ wechat_msg_info_new_item_add(&s_wechat_msg_item_info);
+ result = true;
+ }
+ else
+ {
+ lv_fs_remove(s_wechat_msg_item_info.msg_data_full_file_name);
+ result = false;
+ }
+ }
+ lv_mem_free(file_buf);
+ _lv_memset_00(&s_wechat_msg_item_info, sizeof(nv_watch_wechat_msg_item_info_t));
+
+ return result;
+}
+
+void wechat_msg_item_delete_success_timer_cb(void *para)
+{
+ lv_wechat_ext_t * ext = (lv_wechat_ext_t *)para;
+
+ if(NULL != ext->delete_timer_id)
+ {
+ Hal_Timer_Stop(ext->delete_timer_id);
+ ext->delete_timer_id = NULL;
+ }
+
+ lv_obj_del(ext->delete_bg);
+ wechat_main_screen_refresh();
+}
+
+void wechat_msg_item_delete_ok_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED == e)
+ {
+ lv_wechat_ext_t * ext = (lv_wechat_ext_t *)wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL != ext && NULL != ext->delete_bg)
+ {
+ lv_obj_clean(ext->delete_bg);
+
+ //lv_obj_t * img = lv_img_create(ext->delete_bg, NULL);
+ //lv_img_set_src(img, ICON_COMMON_SUCCESS);
+ //lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, LV_VER_RES / 4);
+
+ lv_obj_t * label_prompt = lv_label_create(ext->delete_bg, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font30_black);
+ lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_DEL_SUCCESS);
+ lv_obj_align(label_prompt, ext->delete_bg, LV_ALIGN_CENTER, 0, -30);
+
+ wechat_msg_info_index_item_delete(s_wechat_selected_item_index);
+
+ ext->delete_timer_id = Hal_Timer_Start(1000 * 2, wechat_msg_item_delete_success_timer_cb, ext, false);
+ }
+ }
+}
+
+void wechat_msg_item_delete_cancel_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED == e)
+ {
+ lv_wechat_ext_t * ext = (lv_wechat_ext_t *)wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL != ext && NULL != ext->delete_bg)
+ {
+ lv_obj_del(ext->delete_bg);
+ }
+ }
+}
+
+void wechat_chat_list_msg_item_delete_create(void)
+{
+ lv_wechat_ext_t * ext = (lv_wechat_ext_t *)wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL != ext && NULL != ext->cont)
+ {
+ ext->delete_bg = lv_cont_create(ext->cont, NULL);
+
+ lv_obj_set_size(ext->delete_bg, LV_HOR_RES, LV_VER_RES);
+ lv_obj_set_style_local_bg_color(ext->delete_bg, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0xB6, 0xF7, 0xFF));
+
+ lv_obj_t * label_prompt = lv_label_create(ext->delete_bg, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font30_black);
+ lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_DEL_Q);
+ lv_obj_align(label_prompt, ext->delete_bg, LV_ALIGN_CENTER, 0, -30);
+
+ lv_obj_t * btn_cancel = lv_btn_create(ext->delete_bg, NULL);
+ lv_obj_set_size(btn_cancel, 100, 56);
+ lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0x47, 0xA6, 0xFF));
+ lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
+ lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, lv_color_make(0x47, 0xA6, 0xFF));
+ lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
+ lv_obj_align(btn_cancel, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 10, -20);
+ lv_obj_set_event_cb(btn_cancel, wechat_msg_item_delete_cancel_btn_event_cb);
+
+ lv_obj_t * label_cancel = lv_label_create(btn_cancel, NULL);
+ lv_obj_add_style(label_cancel, LV_LABEL_PART_MAIN, &lv_watch_font30);
+ lv_label_set_text_id(label_cancel, WATCH_TEXT_ID_CANCEL);
+
+ lv_obj_t * btn_ok = lv_btn_create(ext->delete_bg, btn_cancel);
+ lv_obj_set_style_local_bg_color(btn_ok, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0xFF, 0x6F, 0x91));
+ lv_obj_set_style_local_radius(btn_ok, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
+ lv_obj_set_style_local_bg_color(btn_ok, LV_BTN_PART_MAIN, LV_STATE_PRESSED, lv_color_make(0xFF, 0x6F, 0x91));
+ lv_obj_set_style_local_radius(btn_ok, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
+ lv_obj_align(btn_ok, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -20);
+ lv_obj_set_event_cb(btn_ok, wechat_msg_item_delete_ok_btn_event_cb);
+
+ lv_obj_t * label_ok = lv_label_create(btn_ok, label_cancel);
+ lv_label_set_text_id(label_ok, WATCH_TEXT_ID_OK);
+ }
+}
+
+void wechat_msg_sending_anim_cb(lv_anim_t * a)
+{
+ lv_obj_t * img = a->var;
+
+ switch(s_wechat_play_anim_count % 3)
+ {
+ case 0:
+ lv_img_set_src(img, ICON_WECHAT_SENDING_PROMPT1);
+ break;
+
+ case 1:
+ lv_img_set_src(img, ICON_WECHAT_SENDING_PROMPT2);
+ break;
+
+ case 2:
+ lv_img_set_src(img, ICON_WECHAT_SENDING_PROMPT3);
+ break;
+
+ default:
+ break;
+ }
+ s_wechat_play_anim_count++;
+}
+
+void wechat_msg_sending_result_screen_timeout(void *para)
+{
+ lv_wechat_msg_sending_ext_t * sending_ext = (lv_wechat_msg_sending_ext_t *)para;
+
+ if(NULL != sending_ext->result_timer_id)
+ {
+ Hal_Timer_Stop(sending_ext->result_timer_id);
+ sending_ext->result_timer_id = NULL;
+ }
+
+ //delete sending screen
+ lv_watch_del_interface(ACT_ID_WECHAT_SENDING);
+ //return main list screen
+ wechat_main_screen_refresh();
+}
+
+void wechat_msg_sending_screen_timeout(void *para)
+{
+ lv_wechat_msg_sending_ext_t * sending_ext = (lv_wechat_msg_sending_ext_t *)para;
+
+ if(NULL != sending_ext->sending_timer_id)
+ {
+ Hal_Timer_Stop(sending_ext->sending_timer_id);
+ sending_ext->sending_timer_id = NULL;
+ }
+
+ if(NULL != sending_ext->sending_anim.var)
+ {
+ lv_obj_t * img_bkg = lv_obj_get_parent(sending_ext->sending_anim.var);
+ lv_img_set_src(img_bkg, ((true == sending_ext->send_result) ? ICON_WECHAT_SENDING_SUCC : ICON_WECHAT_SENDING_FAILED));
+
+ lv_anim_del(sending_ext->sending_anim.var, NULL);
+ lv_obj_del(sending_ext->sending_anim.var);
+ sending_ext->sending_anim.var = NULL;
+ }
+
+ sending_ext->result_timer_id = Hal_Timer_Start(1000 * 2, wechat_msg_sending_result_screen_timeout, sending_ext, FALSE);
+}
+
+void wechat_msg_sending_screen_prepare_destory(lv_obj_t * activity_obj)
+{
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_watch_png_cache_all_free();
+
+ lv_wechat_msg_sending_ext_t * sending_ext = (lv_wechat_msg_sending_ext_t *)wechat_actId_ext_get(ACT_ID_WECHAT_SENDING);
+ if(NULL != sending_ext)
+ {
+ if(NULL != sending_ext->sending_timer_id)
+ {
+ Hal_Timer_Stop(sending_ext->sending_timer_id);
+ sending_ext->sending_timer_id = NULL;
+ }
+ if(NULL != sending_ext->result_timer_id)
+ {
+ Hal_Timer_Stop(sending_ext->result_timer_id);
+ sending_ext->result_timer_id = NULL;
+ }
+
+ if(NULL != sending_ext->sending_anim.var)
+ {
+ lv_anim_del(sending_ext->sending_anim.var, NULL);
+ sending_ext->sending_anim.var = NULL;
+ }
+ }
+}
+
+lv_obj_t * wechat_msg_sending_screen_create(lv_obj_t * activity_obj)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ if(NULL == activity_obj)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_WECHAT_SENDING;
+ activity_ext.create = wechat_msg_sending_screen_create;
+ activity_ext.prepare_destory = wechat_msg_sending_screen_prepare_destory;
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ LV_ASSERT_MEM(activity_obj);
+ }
+
+ lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+ LV_ASSERT_MEM(obj);
+
+ lv_wechat_msg_sending_ext_t * sending_ext = (lv_wechat_msg_sending_ext_t *)lv_obj_allocate_ext_attr(obj, sizeof(lv_wechat_msg_sending_ext_t));
+ LV_ASSERT_MEM(sending_ext);
+ sending_ext->send_result = wechat_msg_send_to_server();
+ sending_ext->sending_timer_id = Hal_Timer_Start(1000 * 3, wechat_msg_sending_screen_timeout, sending_ext, FALSE);
+
+ lv_obj_t * img_bkg = lv_img_create(obj, NULL);
+ lv_img_set_src(img_bkg, ICON_WECHAT_SENDING_BG);
+ lv_obj_align(img_bkg, obj, LV_ALIGN_CENTER, 0, 0);
+
+ lv_obj_t * img_sending = lv_img_create(img_bkg, NULL);
+ lv_img_set_src(img_sending, ICON_WECHAT_SENDING_PROMPT3);
+ lv_obj_align(img_sending, img_bkg, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
+
+ lv_anim_t * a = &(sending_ext->sending_anim);
+ lv_anim_init(a);
+ lv_anim_set_var(a, img_sending);
+ //lv_anim_set_exec_cb(a, (lv_anim_exec_xcb_t)wechat_msg_sending_anim_exec_cb);
+ lv_anim_set_start_cb(a, (lv_anim_ready_cb_t)wechat_msg_sending_anim_cb);
+ lv_anim_set_repeat_count(a, LV_ANIM_REPEAT_INFINITE);
+ lv_anim_set_repeat_delay(a, 500);
+ lv_anim_start(a);
+ s_wechat_play_anim_count = 0;
+
+ return obj;
+}
+
+void wechat_msg_recording_release_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: event=%d\n", __FUNCTION__, __LINE__, e);
+
+#if 0
+ if(LV_EVENT_RELEASED == e) //(LV_EVENT_CLICKED == e)
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_watch_del_interface(ACT_ID_WECHAT_RECORDING);
+ wechat_msg_sending_screen_create(NULL);
+ }
+#endif
+}
+
+void wechat_msg_recording_anim(lv_anim_t * a)
+{
+ lv_obj_t * img = a->var;
+
+ switch(s_wechat_play_anim_count % 5)
+ {
+ case 0:
+ lv_img_set_src(img, ICON_WECHAT_RECORDING1);
+ break;
+ case 1:
+ lv_img_set_src(img, ICON_WECHAT_RECORDING2);
+ break;
+ case 2:
+ lv_img_set_src(img, ICON_WECHAT_RECORDING3);
+ break;
+ case 3:
+ lv_img_set_src(img, ICON_WECHAT_RECORDING4);
+ break;
+ case 4:
+ lv_img_set_src(img, ICON_WECHAT_RECORDING5);
+ break;
+ default:
+ break;
+ }
+ s_wechat_play_anim_count++;
+
+ if(0 == (s_wechat_play_anim_count % 4))
+ {
+ lv_wechat_msg_recording_ext_t * recording_ext = (lv_wechat_msg_recording_ext_t *)wechat_actId_ext_get(ACT_ID_WECHAT_RECORDING);
+ if(NULL == recording_ext)
+ return;
+
+ int8_t count_down = WECHAT_MSG_DATA_RECORD_DURATION_MAX - s_wechat_play_anim_count / 4;
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: count down=%d\n", __FUNCTION__, __LINE__, count_down);
+
+ if(0 == count_down)
+ {
+ Hal_File_Record_Stop_Req(&(recording_ext->file_size));
+ recording_ext->file_size = 0;
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+
+ //wechat_chat_list_set_slide_enable(&ext->old_ext, true); /*reset slide_enable at the end of recording*/
+ lv_watch_del_interface(ACT_ID_WECHAT_RECORDING);
+ wechat_msg_sending_screen_create(NULL);
+ }
+ else
+ {
+ const char * content = lv_lang_get_text(WATCH_TEXT_ID_RELEASE_SENDING);
+ uint8_t len = strlen(content) + 8;
+ char * text = (char *)lv_mem_alloc(len);
+ snprintf(text, len, "%s %d", content, count_down);
+ lv_label_set_text(recording_ext->label, text);
+ lv_mem_free(text);
+ lv_obj_align(recording_ext->label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 6);
+ }
+ }
+}
+
+void wechat_msg_same_priority_task_end(void)
+{
+#if 0
+ bool wakeup = false;
+
+ if(wakeup)
+ {
+ if(0 == Hal_Pm_Get_State())
+ {
+ Hal_Pm_WakeUp();
+ watch_set_lcd_status(true);
+ }
+ else
+ {
+ watch_set_lcd_status(true);
+ watch_wakeup_time_reset();
+ }
+ }
+#endif
+}
+
+void wechat_msg_recording_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: priority=%d\n", __FUNCTION__, __LINE__, priority);
+
+ if(AUDIO_CTRL_PRIORITY_5 == priority)
+ {
+ if(false == watch_is_ready())
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ //wechat_msg_same_priority_task_end();
+ }
+ else if(AUDIO_CTRL_PRIORITY_5 > priority)
+ {
+ lv_wechat_msg_recording_ext_t * recording_ext = (lv_wechat_msg_recording_ext_t *)wechat_actId_ext_get(ACT_ID_WECHAT_RECORDING);
+ if(NULL != recording_ext)
+ {
+ Hal_File_Record_Stop_Req(&(recording_ext->file_size));
+ recording_ext->file_size = 0;
+ }
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+
+ lv_watch_del_interface(ACT_ID_WECHAT_RECORDING);
+
+ lv_wechat_ext_t * ext = wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL != ext)
+ {
+ wechat_chat_list_set_slide_enable(&ext->old_ext, false); /*prevent to slide out while recording*/
+ }
+ }
+}
+
+void wechat_msg_recording_cb(MCI_EVNET_T event , MCI_INFO_T info_type, int32_t value)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: event=%d\n", __FUNCTION__, __LINE__, event);
+
+ lv_wechat_ext_t * ext = (lv_wechat_ext_t *)wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL == ext)
+ return ;
+
+ if(0 == ext->old_ext.element_click_en)
+ {
+ /*sliding to the right, not click button*/
+ return;
+ }
+
+ wechat_chat_list_set_slide_enable(&ext->old_ext, false); /*prevent to slide out while recording*/
+
+ switch(ext->event)
+ {
+ case MCI_EVENT_EOS:
+ wechat_chat_list_set_slide_enable(&ext->old_ext, true); /*reset slide_enable at the end of recording*/
+ lv_watch_del_interface(ACT_ID_WECHAT_RECORDING);
+ wechat_msg_sending_screen_create(NULL);
+ break;
+
+ case MCI_EVENT_ERROR:
+ lv_wechat_msg_recording_ext_t * recording_ext = (lv_wechat_msg_recording_ext_t *)wechat_actId_ext_get(ACT_ID_WECHAT_RECORDING);
+ if(NULL != recording_ext)
+ {
+ Hal_File_Record_Stop_Req(&(recording_ext->file_size));
+ recording_ext->file_size = 0;
+ }
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+ lv_fs_remove(s_wechat_msg_item_info.msg_data_full_file_name);
+ lv_watch_del_interface(ACT_ID_WECHAT_RECORDING);
+ wechat_chat_list_set_slide_enable(&ext->old_ext, true); /*reset slide_enable at the end of recording*/
+ break;
+
+ case MCI_EVENT_INFO:
+ break;
+
+ default:
+ break;
+ }
+}
+
+void wechat_msg_recording_screen_create(void)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_WECHAT_RECORDING;
+ activity_ext.create = NULL;
+ activity_ext.prepare_destory = wechat_common_screen_prepare_destory;
+ lv_obj_t * activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ LV_ASSERT_MEM(activity_obj);
+
+ lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+ LV_ASSERT_MEM(obj);
+
+ lv_wechat_msg_recording_ext_t * recording_ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_wechat_msg_recording_ext_t));
+ LV_ASSERT_MEM(recording_ext);
+
+ lv_obj_t * cont = lv_cont_create(obj, NULL);
+ lv_obj_set_size(cont, lv_obj_get_width(obj), lv_obj_get_height(obj));
+ lv_obj_align(cont, obj, LV_ALIGN_CENTER, 0, 0);
+ lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(194, 252, 252));
+ lv_obj_set_click(cont, true);
+ lv_obj_set_event_cb(cont, wechat_msg_recording_release_event_cb);
+ lv_obj_add_protect(cont, LV_PROTECT_PRESS_LOST);
+
+ lv_obj_t * img = lv_img_create(cont, NULL);
+ lv_img_set_src(img, ICON_WECHAT_RECORDING1);
+ lv_obj_align(img, cont, LV_ALIGN_IN_TOP_MID, 0, 36);
+
+ recording_ext->label = lv_label_create(cont, NULL);
+ lv_obj_add_style(recording_ext->label, LV_LABEL_PART_MAIN, &lv_watch_font20_black);
+ const char * rel_snd = lv_lang_get_text(WATCH_TEXT_ID_RELEASE_SENDING);
+ uint8_t len = strlen(rel_snd) + 4;
+ char * text = (char *)lv_mem_alloc(len);
+ snprintf(text, len, "%s %d", rel_snd, WECHAT_MSG_DATA_RECORD_DURATION_MAX);
+ lv_label_set_text(recording_ext->label, text);
+ lv_mem_free(text);
+ lv_obj_align(recording_ext->label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 6);
+
+ lv_obj_t * img_release_snd = lv_img_create(cont, NULL);
+ lv_img_set_src(img_release_snd, ICON_WECHAT_RECORD_BUTTON_PRESSED);
+ lv_obj_align(img_release_snd, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -8);
+
+ lv_anim_t a;
+ lv_anim_init(&a);
+ lv_anim_set_var(&a, img);
+ lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)wechat_msg_recording_anim);
+ lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
+ lv_anim_set_time(&a, 249);
+ lv_anim_start(&a);
+ s_wechat_play_anim_count = 0;
+
+ lv_obj_t * label_warning = lv_label_create(cont, NULL);
+ lv_obj_set_style_local_text_font(label_warning, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_THEME_WATCH_NIGHT_FONT_SMALL);
+ lv_obj_set_style_local_text_color(label_warning, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED);
+ //lv_label_set_long_mode(label_warning, LV_LABEL_LONG_BREAK);
+ //lv_obj_set_width(label_warning, lv_obj_get_width(obj) * 2 / 3);
+ lv_label_set_text_id(label_warning, WATCH_TEXT_ID_SLIDE_UP_WARNING);
+ lv_label_set_align(label_warning, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_warning, cont, LV_ALIGN_IN_TOP_MID, 0, 8);
+
+ //fill info
+ _lv_memset_00(&s_wechat_msg_item_info, sizeof(nv_watch_wechat_msg_item_info_t));
+#if 0
+ //system crashed. unknown reason //20230327
+ Hal_Rtc_Gettime(&(s_wechat_msg_item_info.msg_time));
+#else
+ hal_rtc_t cur_time;
+ Hal_Rtc_Gettime(&cur_time);
+ s_wechat_msg_item_info.msg_time.tm_year = cur_time.tm_year;
+ s_wechat_msg_item_info.msg_time.tm_mon = cur_time.tm_mon;
+ s_wechat_msg_item_info.msg_time.tm_mday = cur_time.tm_mday;
+ s_wechat_msg_item_info.msg_time.tm_hour = cur_time.tm_hour;
+ s_wechat_msg_item_info.msg_time.tm_min = cur_time.tm_min;
+ s_wechat_msg_item_info.msg_time.tm_sec = cur_time.tm_sec;
+#endif
+ s_wechat_msg_item_info.msg_type = WECHAT_MSG_TYPE_VOICE;
+ sprintf(s_wechat_msg_item_info.msg_data_full_file_name, "C:/wechat_%04d%02d%02d_%02d%02d%02d", /*WECHAT_MSG_DATA_FILE_PATH, */
+ s_wechat_msg_item_info.msg_time.tm_year, s_wechat_msg_item_info.msg_time.tm_mon, s_wechat_msg_item_info.msg_time.tm_mday,
+ s_wechat_msg_item_info.msg_time.tm_hour, s_wechat_msg_item_info.msg_time.tm_min, s_wechat_msg_item_info.msg_time.tm_sec);
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_from=%d, file_name=%s\n", __FUNCTION__, __LINE__,
+ s_wechat_msg_item_info.msg_from, s_wechat_msg_item_info.msg_data_full_file_name);
+
+ //recording
+ if(AUDIO_CTRL_PRIORITY_5 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_5, wechat_msg_recording_audio_ctrl_callback))
+ {
+ Hal_File_Record_Start_Req(s_wechat_msg_item_info.msg_data_full_file_name, wechat_msg_recording_cb);
+ }
+
+ return;
+}
+
+void wechat_msg_record_button_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: event=%d\n", __FUNCTION__, __LINE__, e);
+
+ if(LV_EVENT_LONG_PRESSED == e)
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_wechat_ext_t * ext = wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL == ext)
+ return ;
+
+ if(0 == ext->old_ext.element_click_en)
+ {
+ /*sliding to the right, not click button*/
+ return;
+ }
+
+ wechat_chat_list_set_slide_enable(&ext->old_ext, false); /*prevent to slide out while recording*/
+
+ wechat_msg_voice_item_playing_stop(ext);
+ wechat_msg_recording_screen_create();
+ }
+ else if(LV_EVENT_CLICKED == e || LV_EVENT_PRESS_LOST == e)
+ {
+ if(lv_watch_get_activity_obj(ACT_ID_WECHAT_RECORDING))
+ {
+ lv_wechat_ext_t * ext = wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL == ext)
+ return ;
+
+ lv_wechat_msg_recording_ext_t * recording_ext = (lv_wechat_msg_recording_ext_t *)wechat_actId_ext_get(ACT_ID_WECHAT_RECORDING);
+ if(NULL == recording_ext)
+ return NULL;
+
+ wechat_chat_list_set_slide_enable(&ext->old_ext, true); /*reset slide_enable at the end of recording*/
+
+ lv_indev_t * indev = lv_indev_get_act();
+ if(indev)
+ {
+ lv_coord_t point_y = indev->proc.types.pointer.last_point.y;
+ lv_coord_t img_record_top = obj->coords.y1;
+ if(point_y < (img_record_top - 20))
+ {
+ /*last point is above img, consider as sliding up and cancel recording*/
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: indev_y=%d, img_y=%d\n", __FUNCTION__, __LINE__, point_y, img_record_top);
+
+ Hal_File_Record_Stop_Req(&(recording_ext->file_size));
+ recording_ext->file_size = 0;
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+ lv_fs_remove(s_wechat_msg_item_info.msg_data_full_file_name);
+ lv_watch_del_interface(ACT_ID_WECHAT_RECORDING);
+ //return main list screen
+ wechat_main_screen_refresh();
+
+ return;
+ }
+ }
+
+ Hal_File_Record_Stop_Req(&(recording_ext->file_size));
+ recording_ext->file_size = 0;
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+ lv_watch_del_interface(ACT_ID_WECHAT_RECORDING);
+ wechat_msg_sending_screen_create(NULL);
+ }
+ }
+ else if(LV_EVENT_PRESSED == e)
+ {
+ lv_wechat_ext_t * ext = wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL == ext)
+ return ;
+
+ wechat_msg_voice_item_playing_stop(ext);
+ }
+}
+
+void wechat_msg_voice_item_playing_stop(lv_wechat_ext_t * ext)
+{
+ if(NULL == ext || NULL == ext->list)
+ return;
+
+ lv_wechat_msg_list_ext_t * list_page_ext = lv_obj_get_ext_attr(ext->list);
+ if(NULL == list_page_ext)
+ return;
+
+ if(NULL != list_page_ext->voice_playing_anim.var)
+ {
+ lv_obj_t * bubble_img = lv_obj_get_parent(list_page_ext->voice_playing_anim.var);
+
+ Hal_File_Play_End();
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+
+ lv_anim_del(list_page_ext->voice_playing_anim.var, NULL);
+ list_page_ext->voice_playing_anim.var = NULL;
+
+ uint8_t msg_from = wechat_msg_info_index_item_msg_from_get(s_wechat_selected_item_index);
+ lv_img_set_src(list_page_ext->voice_playing_anim.var, (0 == msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING3 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3);
+ }
+}
+
+void wechat_chat_list_msg_item_style_reset(lv_wechat_ext_t * ext)
+{
+ if(NULL == ext || NULL == ext->list)
+ return;
+
+ lv_wechat_msg_list_ext_t * list_page_ext = lv_obj_get_ext_attr(ext->list);
+ if(NULL == list_page_ext)
+ return;
+
+ lv_style_reset(&(list_page_ext->style_cont));
+ lv_style_reset(&(list_page_ext->style_label_time));
+ lv_style_reset(&(list_page_ext->style_text));
+ lv_style_reset(&(list_page_ext->style_label_len_other));
+ lv_style_reset(&(list_page_ext->style_label_len_ui));
+}
+
+void wechat_chat_list_msg_item_time(char * time_str, hal_rtc_t * cur_time, hal_rtc_t * msg_time, hal_rtc_t * last_msg_time)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ if(0 == last_msg_time->tm_year)
+ {
+ sprintf(time_str, "%d/%d/%d %02d:%02d", msg_time->tm_year, msg_time->tm_mon, msg_time->tm_mday,
+ msg_time->tm_hour, msg_time->tm_min);
+
+ return;
+ }
+
+ uint32_t msg_sec = time_to_seconds(msg_time);
+ uint32_t last_msg_sec = time_to_seconds(last_msg_time);
+ if(msg_sec < last_msg_sec)
+ {
+ sprintf(time_str, "%d/%d/%d %02d:%02d", msg_time->tm_year, msg_time->tm_mon,
+ msg_time->tm_mday, msg_time->tm_hour, msg_time->tm_min);
+ }
+ else if(msg_sec > (last_msg_sec + WECHAT_MSG_CHAT_TIME_INTERVAL))
+ {
+ uint32_t cur_sec = time_to_seconds(cur_time);
+ if((msg_sec > cur_sec) || (msg_time->tm_year < cur_time->tm_year))
+ {
+ sprintf(time_str, "%d/%d/%d %02d:%02d", msg_time->tm_year, msg_time->tm_mon,
+ msg_time->tm_mday, msg_time->tm_hour, msg_time->tm_min);
+ }
+ else
+ {
+ uint32_t today_sec = cur_sec - cur_time->tm_hour * 3600 - cur_time->tm_min * 60 - cur_time->tm_sec;
+
+ if(msg_sec >= today_sec)
+ {
+ /*today*/
+ sprintf(time_str, "%02d:%02d", msg_time->tm_hour, msg_time->tm_min);
+ }
+ else if(msg_sec >= (today_sec - 24 * 3600))
+ {
+ /*yesterday*/
+ const char * yesterday = lv_lang_get_text(WATCH_TEXT_ID_YESTERDAY);
+
+ sprintf(time_str, "%s %02d:%02d", yesterday, msg_time->tm_hour, msg_time->tm_min);
+ }
+ else
+ {
+ uint8_t wday;
+ if(0 == cur_time->tm_wday)
+ {
+ /*today is Sunday*/
+ wday = 6;
+ }
+ else
+ {
+ wday = cur_time->tm_wday - 1;
+ }
+ /*the start of a week is monday, the end is sunday*/
+ if(msg_sec >= (today_sec - wday * 24 * 3600)) {
+ /*current week before yesterday*/
+ const char * wday_str;
+ switch(rtc_calc_weekday(msg_time))
+ {
+ case 1:
+ /*Monday*/
+ wday_str = lv_lang_get_text(WATCH_TEXT_ID_MONDAY);
+ break;
+ case 2:
+ /*Tuesday*/
+ wday_str = lv_lang_get_text(WATCH_TEXT_ID_TUESDAY);
+ break;
+ case 3:
+ /*Wednesday*/
+ wday_str = lv_lang_get_text(WATCH_TEXT_ID_WEDNESDAY);
+ break;
+ case 4:
+ /*Thursday*/
+ wday_str = lv_lang_get_text(WATCH_TEXT_ID_THURSDAY);
+ break;
+ case 5:
+ /*Friday*/
+ wday_str = lv_lang_get_text(WATCH_TEXT_ID_FRIDAY);
+ break;
+ default:
+ printf("%s: week error\n", __FUNCTION__);
+ break;
+ }
+
+ sprintf(time_str, "%s %02d:%02d", wday_str, msg_time->tm_hour, msg_time->tm_min);
+ }
+ else
+ {
+ sprintf(time_str, "%d/%d %02d:%02d", msg_time->tm_mon, msg_time->tm_mday, msg_time->tm_hour, msg_time->tm_min);
+ }
+ }
+ }
+ }
+}
+
+void wechat_chat_list_voice_item_playing_anim_cb(lv_anim_t * a)
+{
+ lv_obj_t * play_img = (lv_obj_t *)a->var;
+ uint8_t msg_from = wechat_msg_info_index_item_msg_from_get(s_wechat_selected_item_index);
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_from=%d\n", __FUNCTION__, __LINE__, msg_from);
+
+ switch(s_wechat_play_anim_count % 3)
+ {
+ case 0:
+ lv_img_set_src(play_img, ((0 == msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING1 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING1));
+ break;
+
+ case 1:
+ lv_img_set_src(play_img, ((0 == msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING2 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING2));
+ break;
+
+ case 2:
+ lv_img_set_src(play_img, ((0 == msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING3 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3));
+ break;
+
+ default:
+ break;
+ }
+ s_wechat_play_anim_count++;
+}
+
+void wechat_chat_list_voice_item_playing_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: priority=%d\n", __FUNCTION__, __LINE__, priority);
+
+ if(AUDIO_CTRL_PRIORITY_5 == priority)
+ {
+ if(false == watch_is_ready())
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ //wechat_msg_same_priority_task_end();
+ }
+ else if(AUDIO_CTRL_PRIORITY_5 > priority)
+ {
+ lv_wechat_ext_t * ext = wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL != ext)
+ {
+ wechat_chat_list_set_slide_enable(&ext->old_ext, false); /*prevent to slide out while recording*/
+ wechat_msg_voice_item_playing_stop(ext);
+ }
+ }
+}
+
+void wechat_chat_list_voice_item_play_over_cb(void * para)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ Hal_File_Play_End();
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+
+ lv_wechat_msg_list_ext_t * list_page_ext = (lv_wechat_msg_list_ext_t *)para;
+
+ if(NULL == list_page_ext || NULL == list_page_ext->voice_playing_anim.var)
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+
+ uint8_t msg_from = wechat_msg_info_index_item_msg_from_get(s_wechat_selected_item_index);
+
+ lv_anim_del(list_page_ext->voice_playing_anim.var, NULL);
+ lv_img_set_src(list_page_ext->voice_playing_anim.var, ((0 == msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING3 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3));
+ list_page_ext->voice_playing_anim.var = NULL;
+}
+
+void wechat_chat_list_voice_item_play_action(lv_wechat_msg_list_ext_t * list_page_ext, lv_obj_t * play_img, lv_obj_t * unread_img)
+{
+ //display ui
+ lv_anim_t * a = &(list_page_ext->voice_playing_anim);
+
+ lv_anim_init(a);
+ lv_anim_set_var(a, play_img);
+ lv_anim_set_start_cb(a, (lv_anim_ready_cb_t)wechat_chat_list_voice_item_playing_anim_cb);
+ lv_anim_set_repeat_count(a, LV_ANIM_REPEAT_INFINITE);
+ lv_anim_set_time(a, 400);
+ lv_anim_start(a);
+ s_wechat_play_anim_count = 1;
+
+ nv_watch_wechat_msg_item_info_t * msg_item = NULL;
+ wechat_msg_info_index_item_get(s_wechat_selected_item_index, &msg_item);
+ msg_item->unread_flag = 0;
+ if(NULL != unread_img)
+ {
+ lv_obj_del(unread_img);
+ }
+
+ //play voice
+ if(AUDIO_CTRL_PRIORITY_5 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_5, wechat_chat_list_voice_item_playing_audio_ctrl_callback))
+ {
+ Hal_File_Play_Onetime(msg_item->msg_data_full_file_name, query_current_volume(), wechat_chat_list_voice_item_play_over_cb, list_page_ext, 0);
+ }
+}
+
+void wechat_chat_list_voice_item_event_cb(lv_obj_t * img, lv_event_t e)
+{
+ lv_wechat_msg_list_item_ext_t * list_item_ext = (lv_wechat_msg_list_item_ext_t *)lv_obj_get_ext_attr(img);
+ if(NULL == list_item_ext)
+ return;
+
+ s_wechat_selected_item_index = list_item_ext->item_index;
+
+ lv_obj_t * scrl = lv_obj_get_parent(img);
+ lv_obj_t * list_page = lv_obj_get_parent(scrl);
+ //lv_obj_t * scrl = lv_page_get_scrl(list_page);
+
+ lv_wechat_msg_list_ext_t * list_page_ext = (lv_wechat_msg_list_ext_t *)lv_obj_get_ext_attr(list_page);
+ if(NULL == list_page_ext)
+ return;
+
+ if(LV_EVENT_PRESSED == e)
+ {
+ list_page_ext->pressing = true;
+ }
+ else if((LV_EVENT_LONG_PRESSED == e) && (true == list_page_ext->pressing)) // delete msg item
+ {
+ list_page_ext->pressing = false;
+
+ wechat_chat_list_msg_item_delete_create();
+ }
+ else if((LV_EVENT_CLICKED == e) && (true == list_page_ext->pressing)) // playing voice msg
+ {
+ list_page_ext->pressing = false;
+
+ lv_obj_t * play_img = lv_obj_get_child_back(img, NULL);
+ nv_watch_wechat_msg_item_info_t * msg_item = NULL;
+ wechat_msg_info_index_item_get(s_wechat_selected_item_index, &msg_item);
+
+ if(NULL != list_page_ext->voice_playing_anim.var) // exist voice playing
+ {
+ lv_obj_t * old_img = list_page_ext->voice_playing_anim.var;
+
+ //stop old item voice
+ Hal_File_Play_End();
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_5);
+
+ lv_anim_del(list_page_ext->voice_playing_anim.var, NULL);
+ lv_img_set_src(list_page_ext->voice_playing_anim.var, ((0 == msg_item->msg_from) ? ICON_WECHAT_MY_VOICE_ITEM_PLAYING3 : ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3));
+ list_page_ext->voice_playing_anim.var = NULL;
+
+ //play new item voice
+ if((play_img != old_img) && (NULL != msg_item->msg_data_full_file_name))
+ {
+ wechat_chat_list_voice_item_play_action(list_page_ext, play_img, list_item_ext->unread_img);
+ }
+ }
+ else if(NULL != msg_item->msg_data_full_file_name)
+ {
+ wechat_chat_list_voice_item_play_action(list_page_ext, play_img, list_item_ext->unread_img);
+ }
+ }
+}
+
+//display time & content
+lv_obj_t * wechat_chat_list_msg_item_add(lv_obj_t * list_page, nv_watch_wechat_msg_item_info_t * msg_item, char * time_str, uint8_t i)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_obj_t * obj = NULL;
+ lv_wechat_msg_list_ext_t * list_page_ext = lv_obj_get_ext_attr(list_page);
+ lv_obj_t * scrl = lv_page_get_scrl(list_page);
+ lv_obj_t * last_obj = lv_obj_get_child(scrl, NULL);
+ lv_coord_t obj_h = lv_obj_get_style_pad_top(scrl, LV_STATE_DEFAULT);
+
+ if(NULL != last_obj)
+ {
+ obj_h = lv_obj_get_y(last_obj) + lv_obj_get_height(last_obj) + lv_obj_get_style_pad_inner(scrl, LV_STATE_DEFAULT);
+ }
+
+ if(0 != strlen(time_str))
+ {
+ obj = lv_label_create(list_page, NULL);
+
+ //lv_obj_set_base_dir(obj, LV_BIDI_DIR_LTR);
+ lv_label_set_text(obj, time_str);
+ lv_obj_add_style(obj, LV_LABEL_PART_MAIN, &list_page_ext->style_label_time);
+ lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_MID, 0, obj_h);
+
+ last_obj = obj;
+ obj_h = lv_obj_get_y(last_obj) + lv_obj_get_height(last_obj) + lv_obj_get_style_pad_inner(scrl, LV_STATE_DEFAULT);
+ }
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_type=%d, file=%s, size=%d\n", __FUNCTION__, __LINE__,
+ msg_item->msg_type, msg_item->msg_data_full_file_name, msg_item->msg_data_size);
+
+ switch(msg_item->msg_type)
+ {
+ case WECHAT_MSG_TYPE_VOICE:
+ obj = lv_img_create(list_page, NULL);
+ lv_wechat_msg_list_item_ext_t * list_item_ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_wechat_msg_list_item_ext_t));
+ list_item_ext->item_index = i;
+ list_item_ext->unread_img = NULL;
+
+ lv_obj_t * play_img = lv_img_create(obj, NULL);
+ lv_obj_t * len_label = lv_label_create(obj, NULL);
+ uint32_t duration = 0;
+
+ if(LV_FS_RES_OK != Hal_File_Get_AudioDurationTime((const char *)msg_item->msg_data_full_file_name, &duration))
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: read file error. %s\n", __FUNCTION__, __LINE__, msg_item->msg_data_full_file_name);
+ }
+ else
+ {
+ duration = (duration + 999) / 1000;
+ }
+
+ if(0 == duration)
+ {
+ /*invalid voice*/
+ lv_img_set_src(play_img, ICON_WECHAT_VOICE_ITEM_DAMAGE);
+ lv_label_set_text(len_label, "");
+ }
+ else
+ {
+ char len_str[8] = {0};
+ sprintf(len_str, "%d S", duration);
+ lv_label_set_text(len_label, len_str);
+ }
+
+ if(0 == msg_item->msg_from) // msg from slef
+ {
+ lv_obj_add_style(len_label, LV_LABEL_PART_MAIN, &list_page_ext->style_label_len_ui);
+ lv_img_set_src(obj, ICON_WECHAT_MY_VOICE_ITEM_BG);
+ lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_RIGHT, -10, obj_h);
+ if(0 < duration)
+ {
+ lv_img_set_src(play_img, ICON_WECHAT_MY_VOICE_ITEM_PLAYING3);
+ }
+ lv_obj_align(play_img, obj, LV_ALIGN_IN_LEFT_MID, 15, 0);
+ lv_obj_align(len_label, play_img, LV_ALIGN_OUT_RIGHT_MID, 25, 0);
+ }
+ else // msg from other
+ {
+ lv_obj_add_style(len_label, LV_LABEL_PART_MAIN, &list_page_ext->style_label_len_other);
+ lv_img_set_src(obj, ICON_WECHAT_OTHER_VOICE_ITEM_BG);
+ lv_obj_align(obj, scrl, LV_ALIGN_IN_TOP_LEFT, 10, obj_h);
+ if(0 < duration)
+ {
+ lv_img_set_src(play_img, ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3);
+ }
+ lv_obj_align(play_img, obj, LV_ALIGN_IN_RIGHT_MID, -15, 0);
+ lv_obj_align(len_label, play_img, LV_ALIGN_OUT_LEFT_MID, -25, 0);
+ if(1 == msg_item->unread_flag)
+ {
+ list_item_ext->unread_img = lv_img_create(list_page, NULL);
+ lv_img_set_src(list_item_ext->unread_img, ICON_WECHAT_UNREAD_FLAG);
+ lv_obj_align(list_item_ext->unread_img, obj, LV_ALIGN_OUT_RIGHT_MID, 5, 0);
+ }
+ }
+
+ lv_obj_set_click(obj, true);
+ //lv_page_glue_obj(obj, true);
+ lv_obj_set_event_cb(obj, wechat_chat_list_voice_item_event_cb);
+ lv_obj_set_adv_hittest(obj, false);
+ lv_page_focus(list_page, obj, 0);
+ lv_page_glue_obj(obj, true);
+ lv_watch_obj_add_element(obj);
+ break;
+
+ case WECHAT_MSG_TYPE_TEXT:
+ #if 0
+ obj = lv_cont_create(list, NULL);
+ lv_obj_add_style(obj, LV_CONT_PART_MAIN, &ext->style_cont);
+ lv_cont_set_fit(obj, true);
+ #endif
+ break;
+
+ case WECHAT_MSG_TYPE_EXPRESSION:
+ case WECHAT_MSG_TYPE_IMAGE:
+ #if 0
+ obj = lv_img_create(list, NULL);
+
+ lv_watch_obj_add_element(obj);
+ #endif
+ break;
+
+ default:
+ break;
+ }
+
+ return obj;
+}
+
+lv_res_t wechat_chat_list_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
+{
+ lv_res_t res;
+
+ /* Include the ancient signal function */
+ res = ancient_scrl_signal(scrl, sign, param);
+ if(res != LV_RES_OK)
+ return res;
+
+ if(LV_SIGNAL_COORD_CHG == sign)
+ {
+ lv_obj_t * list_page = lv_obj_get_parent(scrl);
+ lv_wechat_msg_list_ext_t * list_page_ext = (lv_wechat_msg_list_ext_t *)lv_obj_get_ext_attr(list_page);
+ if(NULL == list_page_ext)
+ return;
+
+ if(true == list_page_ext->pressing)
+ {
+ list_page_ext->pressing = false;
+ }
+ }
+
+ return LV_RES_OK;
+}
+
+void wechat_chat_list_create(lv_obj_t * obj, lv_wechat_ext_t * ext)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_obj_t * list_page = lv_page_create(obj, NULL);
+ lv_wechat_msg_list_ext_t * list_page_ext = lv_obj_allocate_ext_attr(list_page, sizeof(lv_wechat_msg_list_ext_t));
+ if(NULL == ext)
+ return;
+
+ lv_obj_set_size(list_page, lv_obj_get_width(obj), lv_obj_get_height(obj) - 5 - lv_obj_get_height(ext->img_record) - 8);
+ lv_page_set_scrollbar_mode(list_page, LV_SCROLLBAR_MODE_OFF);
+ lv_obj_set_style_local_bg_opa(list_page, LV_PAGE_PART_BG, LV_STATE_DEFAULT, LV_OPA_0);
+ lv_obj_set_style_local_border_opa(list_page, LV_PAGE_PART_BG, LV_STATE_DEFAULT, LV_OPA_0);
+ lv_obj_set_style_local_outline_width(list_page, LV_PAGE_PART_BG, LV_STATE_DEFAULT, 0);
+ lv_obj_set_style_local_pad_bottom(list_page, LV_PAGE_PART_SCROLLABLE, LV_STATE_DEFAULT, 4);
+ lv_obj_set_style_local_pad_top(list_page, LV_PAGE_PART_SCROLLABLE, LV_STATE_DEFAULT, 2);
+ lv_obj_set_style_local_pad_inner(list_page, LV_PAGE_PART_SCROLLABLE, LV_STATE_DEFAULT, 8);
+ lv_obj_set_style_local_bg_color(list_page, LV_PAGE_PART_SCROLLBAR, LV_STATE_DEFAULT, lv_color_make(16, 112, 194));
+ lv_obj_set_style_local_pad_inner(list_page, LV_PAGE_PART_SCROLLBAR, LV_STATE_DEFAULT, LV_DPI / 20);
+ lv_obj_set_style_local_pad_left(list_page, LV_PAGE_PART_SCROLLBAR, LV_STATE_DEFAULT, 0);
+ lv_obj_set_style_local_pad_right(list_page, LV_PAGE_PART_SCROLLBAR, LV_STATE_DEFAULT, 0);
+ lv_obj_set_style_local_radius(list_page, LV_PAGE_PART_SCROLLBAR, LV_STATE_DEFAULT, 0);
+
+ lv_style_init(&(list_page_ext->style_label_time));
+ lv_style_copy(&(list_page_ext->style_label_time), &lv_watch_font20);
+ lv_style_set_text_color(&(list_page_ext->style_label_time), LV_STATE_DEFAULT, lv_color_make(20, 187, 242));
+
+ lv_style_init(&(list_page_ext->style_text));
+ lv_style_copy(&(list_page_ext->style_text), &lv_style_pretty);
+ lv_style_set_bg_color(&(list_page_ext->style_text), LV_STATE_DEFAULT, lv_color_make(0xFF, 0xE1, 0xE1));
+ lv_style_set_border_width(&(list_page_ext->style_text), LV_STATE_DEFAULT, 0);
+ lv_style_set_shadow_width(&(list_page_ext->style_text), LV_STATE_DEFAULT, 0);
+
+ lv_style_init(&(list_page_ext->style_label_len_other));
+ lv_style_copy(&(list_page_ext->style_label_len_other), &lv_watch_font20);
+ lv_style_set_text_color(&(list_page_ext->style_label_len_other), LV_STATE_DEFAULT, lv_color_make(202, 134, 255));
+
+ lv_style_init(&(list_page_ext->style_label_len_ui));
+ lv_style_copy(&(list_page_ext->style_label_len_ui), &lv_watch_font20);
+ lv_style_set_text_color(&(list_page_ext->style_label_len_ui), LV_STATE_DEFAULT, lv_color_make(108, 189, 5));
+
+ lv_style_init(&(list_page_ext->style_cont));
+ lv_style_set_pad_top(&(list_page_ext->style_cont), LV_STATE_DEFAULT, 8);
+ lv_style_set_pad_bottom(&(list_page_ext->style_cont), LV_STATE_DEFAULT, 8);
+ lv_style_set_pad_left(&(list_page_ext->style_cont), LV_STATE_DEFAULT, 8);
+ lv_style_set_pad_right(&(list_page_ext->style_cont), LV_STATE_DEFAULT, 8);
+
+ lv_page_set_scrl_layout(list_page, LV_LAYOUT_OFF);
+ lv_page_set_scrollable_fit2(list_page, LV_FIT_NONE, LV_FIT_TIGHT);
+
+ lv_obj_t * scrl = lv_page_get_scrollable(list_page);
+ ancient_scrl_signal = lv_obj_get_signal_cb(scrl);
+ lv_obj_set_signal_cb(scrl, wechat_chat_list_scrl_signal);
+
+ lv_watch_obj_add_element(list_page);
+ lv_watch_obj_add_element(scrl);
+
+ _lv_memset_00(&(list_page_ext->voice_playing_anim), sizeof(lv_anim_t));
+ list_page_ext->pressing = false;
+ ext->list = list_page;
+
+ uint8_t i = 0;
+ uint8_t msg_count = wechat_msg_info_count_get();
+ hal_rtc_t cur_time = {0}, last_msg_item_time = {0}, msg_time = {0};
+ //lv_wechat_msg_item_t * msg_item = (lv_wechat_msg_item_t *)_lv_ll_get_head(ext->msg_list);
+
+ Hal_Rtc_Gettime(&cur_time);
+ for(i = 0; i < msg_count; i++)
+ {
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: i=%d, msg_count=%d\n", __FUNCTION__, __LINE__, i, msg_count);
+
+ char time_str[32] = {0};
+ nv_watch_wechat_msg_item_info_t * msg_item = NULL;
+
+ wechat_msg_info_index_item_get(i, &msg_item);
+ _lv_memcpy(&msg_time, &(msg_item->msg_time), sizeof(hal_rtc_t));
+ wechat_chat_list_msg_item_time(time_str, &cur_time, &msg_time, &last_msg_item_time);
+ _lv_memcpy(&last_msg_item_time, &(msg_item->msg_time), sizeof(hal_rtc_t));
+
+ wechat_chat_list_msg_item_add(list_page, msg_item, time_str, i);
+ }
+
+ if((lv_obj_get_height(list_page) - lv_obj_get_style_pad_top(list_page, LV_LIST_PART_BG) * 2) > lv_obj_get_height(scrl))
+ {
+ lv_cont_set_layout(scrl, LV_LAYOUT_OFF);
+ }
+}
+
+void wechat_no_network_create(lv_obj_t * obj)
+{
+ lv_obj_t * img = lv_img_create(obj, NULL);
+ //lv_obj_set_size(img, lv_obj_get_width(obj), lv_obj_get_height(obj));
+ lv_img_set_src(img, ICON_WECHAT_NO_NETWORK);
+ lv_obj_align(img, obj, LV_ALIGN_CENTER, 0, 0);
+ lv_obj_set_click(img, false);
+}
+
+void wechat_main_screen_refresh(void)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_wechat_ext_t * ext = wechat_actId_ext_get(ACT_ID_WECHAT_MAIN);
+ if(NULL == ext)
+ return;
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ wechat_msg_voice_item_playing_stop(ext);
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ wechat_chat_list_msg_item_style_reset(ext);
+ if(NULL != ext->list)
+ {
+ lv_obj_del(ext->list);
+ ext->list = NULL;
+ }
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ uint8_t msg_count = wechat_msg_info_count_get();
+ if(0 == msg_count)
+ {
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_obj_set_hidden(ext->label_no_msg, false);
+ }
+ else
+ {
+
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_obj_set_hidden(ext->label_no_msg, true);
+
+ wechat_chat_list_create(ext->cont, ext);
+ }
+}
+
+lv_obj_t * wechat_create(lv_obj_t * activity_obj, lv_wechat_created_from_e from)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ if(activity_obj == NULL)
+ {
+ lv_watch_activity_ext_t activity_ext;
+
+ _lv_memset_00(&activity_ext, sizeof(lv_watch_activity_ext_t));
+ activity_ext.actId = ACT_ID_WECHAT_MAIN;
+ activity_ext.create = wechat_create; //NULL;
+ activity_ext.prepare_destory = wechat_prepare_destory;
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ LV_ASSERT_MEM(activity_obj);
+ }
+
+ lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+ if(NULL == obj)
+ return;
+ /*Allocate the tab type specific extended data*/
+ lv_wechat_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_wechat_ext_t));
+ if(NULL == ext)
+ return;
+
+#ifndef __WECHAT_DEBUG__
+ if((false == watch_modem_sim_present_check_req())
+ || (MMI_MODEM_SIGNAL_BAR_0 == watch_modem_get_signal_bar_req()))
+ {
+ wechat_no_network_create(obj);
+ return obj;
+ }
+#endif
+
+ lv_obj_t * cont = lv_cont_create(obj, NULL);
+ lv_obj_set_size(cont, lv_obj_get_width(obj), lv_obj_get_height(obj));
+ lv_obj_align(cont, obj, LV_ALIGN_CENTER, 0, 0);
+ lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(194, 252, 252));
+ lv_watch_obj_add_element(cont);
+
+ ext->cont = cont;
+ ext->list = NULL;
+ ext->from = from;
+
+ //create no msg label
+ ext->label_no_msg = lv_label_create(cont, NULL);
+ lv_obj_add_style(ext->label_no_msg, LV_LABEL_PART_MAIN, &lv_watch_font30_black);
+ lv_label_set_text_id(ext->label_no_msg, WATCH_TEXT_ID_NO_VOICE_MSG);
+ //lv_label_set_align(ext->label_no_msg, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(ext->label_no_msg, cont, LV_ALIGN_CENTER, 0, -10);
+
+ ext->img_record = lv_img_create(cont, NULL);
+ lv_img_set_src(ext->img_record, ICON_WECHAT_RECORD_BUTTON);
+ lv_obj_set_click(ext->img_record, true);
+ lv_obj_set_event_cb(ext->img_record, wechat_msg_record_button_event_cb);
+ lv_obj_set_adv_hittest(ext->img_record, false);
+ lv_watch_obj_add_element(ext->img_record);
+
+ lv_obj_align(ext->img_record, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -8);
+
+ uint8_t msg_count = wechat_msg_info_count_get();
+ if(0 == msg_count)
+ {
+ lv_obj_set_hidden(ext->label_no_msg, false);
+ }
+ else
+ {
+ lv_obj_set_hidden(ext->label_no_msg, true);
+
+ wechat_chat_list_create(cont, ext);
+ }
+
+ return obj;
+}
+
+void wechat_create_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+ (void)btn;
+ if(LV_EVENT_CLICKED == e) {
+ lv_watch_png_cache_all_free();
+ lv_obj_t * obj = wechat_create(NULL, WECHAT_CREATED_FROM_APP);
+ LV_ASSERT_MEM(obj);
+ }
+}
+
+#if 0
+void wechat_chat_list_empty_create(lv_obj_t * obj, lv_wechat_ext_t * ext)
+{
+ WECHAT_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ //create no msg label
+ ext->label_no_msg = lv_label_create(obj, NULL);
+ lv_obj_add_style(ext->label_no_msg, LV_LABEL_PART_MAIN, &lv_watch_font30_black);
+ lv_label_set_text_id(ext->label_no_msg, WATCH_TEXT_ID_NO_VOICE_MSG);
+ lv_obj_align(ext->label_no_msg, obj, LV_ALIGN_CENTER, 0, -10);
+
+ ext->img_emo = lv_img_create(obj, NULL);
+ lv_img_set_src(ext->img_emo, ICON_SEND_EMO);
+ lv_obj_set_click(ext->img_emo, true);
+ //lv_obj_set_event_cb(ext->img_emo, wechat_chat_list_send_expression_event_cb);
+ lv_obj_set_adv_hittest(ext->img_emo, false);
+ lv_watch_obj_add_element(ext->img_emo);
+
+ ext->img_record = lv_img_create(obj, NULL);
+ lv_img_set_src(ext->img_record, ICON_WECHAT_RECORD_BUTTON);
+ lv_obj_set_click(ext->img_record, true);
+ lv_obj_set_event_cb(ext->img_record, wechat_msg_record_button_event_cb);
+ lv_obj_set_adv_hittest(ext->img_record, false);
+ lv_watch_obj_add_element(ext->img_record);
+
+ lv_obj_align(ext->img_emo, obj, LV_ALIGN_IN_BOTTOM_LEFT, 14, -8);
+ lv_obj_align(ext->img_record, obj, LV_ALIGN_IN_BOTTOM_RIGHT, -14, -8);
+}
+#endif
+
+#endif
lv_style_t lv_watch_chat_list_btn_rel_style;
lv_style_t lv_watch_chat_list_btn_pr_style;
+#ifdef __MMI_ZHSX_SUPPORT__
+lv_style_t lv_watch_font22;
+lv_style_t lv_watch_font22_black;
+lv_style_t lv_watch_font22_gray;
+lv_style_t lv_watch_font22_yellow;
+lv_style_t lv_watch_font24;
+lv_style_t lv_watch_font24_black;
+lv_style_t lv_watch_font24_gray;
+lv_style_t lv_watch_font24_yellow;
+lv_style_t lv_watch_font26;
+lv_style_t lv_watch_font26_black;
+lv_style_t lv_watch_font26_gray;
+lv_style_t lv_watch_font26_yellow;
+lv_style_t lv_watch_font28;
+lv_style_t lv_watch_font28_black;
+lv_style_t lv_watch_font28_gray;
+lv_style_t lv_watch_font28_yellow;
+#endif
+
#ifdef USE_FONT_TTF
lv_font_t lv_font_ttf_20;
lv_font_t lv_font_ttf_30;
lv_font_t lv_font_ttf_12;
lv_font_t lv_font_ttf_14;
lv_font_t lv_font_ttf_40;
+#ifdef __MMI_ZHSX_SUPPORT__
+lv_font_t lv_font_ttf_22;
+lv_font_t lv_font_ttf_24;
+lv_font_t lv_font_ttf_26;
+lv_font_t lv_font_ttf_28;
+#endif
#elif defined USE_FONT_BIN
lv_font_t *lv_font_droidSansFallbackFull_20 = NULL;
lv_font_t *lv_font_droidSansFallbackFull_30_compressed = NULL;
lv_style_set_text_color(&lv_watch_font40_yellow, LV_STATE_DEFAULT, LV_COLOR_YELLOW);
lv_style_set_text_font(&lv_watch_font40_yellow, LV_STATE_DEFAULT, LV_THEME_WATCH_NIGHT_FONT_40);
+#ifdef __MMI_ZHSX_SUPPORT__
+ style_init_reset(&lv_watch_font22);
+ lv_style_set_text_color(&lv_watch_font22, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ lv_style_set_text_font(&lv_watch_font22, LV_STATE_DEFAULT, &lv_font_ttf_22);
+
+ style_init_reset(&lv_watch_font22_yellow);
+ lv_style_set_text_color(&lv_watch_font22_yellow, LV_STATE_DEFAULT, LV_COLOR_YELLOW);
+ lv_style_set_text_font(&lv_watch_font22_yellow, LV_STATE_DEFAULT, &lv_font_ttf_22);
+
+ style_init_reset(&lv_watch_font22_black);
+ lv_style_set_text_color(&lv_watch_font22_black, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_style_set_text_font(&lv_watch_font22_black, LV_STATE_DEFAULT, &lv_font_ttf_22);
+
+ style_init_reset(&lv_watch_font22_gray);
+ lv_style_set_text_color(&lv_watch_font22_gray, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ lv_style_set_text_font(&lv_watch_font22_gray, LV_STATE_DEFAULT, &lv_font_ttf_22);
+
+ style_init_reset(&lv_watch_font24);
+ lv_style_set_text_color(&lv_watch_font24, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ lv_style_set_text_font(&lv_watch_font24, LV_STATE_DEFAULT, &lv_font_ttf_24);
+
+ style_init_reset(&lv_watch_font24_yellow);
+ lv_style_set_text_color(&lv_watch_font24_yellow, LV_STATE_DEFAULT, LV_COLOR_YELLOW);
+ lv_style_set_text_font(&lv_watch_font24_yellow, LV_STATE_DEFAULT, &lv_font_ttf_24);
+
+ style_init_reset(&lv_watch_font24_black);
+ lv_style_set_text_color(&lv_watch_font24_black, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_style_set_text_font(&lv_watch_font24_black, LV_STATE_DEFAULT, &lv_font_ttf_24);
+
+ style_init_reset(&lv_watch_font24_gray);
+ lv_style_set_text_color(&lv_watch_font24_gray, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ lv_style_set_text_font(&lv_watch_font24_gray, LV_STATE_DEFAULT, &lv_font_ttf_24);
+
+ style_init_reset(&lv_watch_font26);
+ lv_style_set_text_color(&lv_watch_font26, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ lv_style_set_text_font(&lv_watch_font26, LV_STATE_DEFAULT, &lv_font_ttf_26);
+
+ style_init_reset(&lv_watch_font26_yellow);
+ lv_style_set_text_color(&lv_watch_font26_yellow, LV_STATE_DEFAULT, LV_COLOR_YELLOW);
+ lv_style_set_text_font(&lv_watch_font26_yellow, LV_STATE_DEFAULT, &lv_font_ttf_26);
+
+ style_init_reset(&lv_watch_font26_black);
+ lv_style_set_text_color(&lv_watch_font26_black, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_style_set_text_font(&lv_watch_font26_black, LV_STATE_DEFAULT, &lv_font_ttf_26);
+
+ style_init_reset(&lv_watch_font26_gray);
+ lv_style_set_text_color(&lv_watch_font26_gray, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ lv_style_set_text_font(&lv_watch_font26_gray, LV_STATE_DEFAULT, &lv_font_ttf_26);
+
+ style_init_reset(&lv_watch_font28);
+ lv_style_set_text_color(&lv_watch_font28, LV_STATE_DEFAULT, LV_COLOR_WHITE);
+ lv_style_set_text_font(&lv_watch_font28, LV_STATE_DEFAULT, &lv_font_ttf_28);
+
+ style_init_reset(&lv_watch_font28_yellow);
+ lv_style_set_text_color(&lv_watch_font28_yellow, LV_STATE_DEFAULT, LV_COLOR_YELLOW);
+ lv_style_set_text_font(&lv_watch_font28_yellow, LV_STATE_DEFAULT, &lv_font_ttf_28);
+
+ style_init_reset(&lv_watch_font28_black);
+ lv_style_set_text_color(&lv_watch_font28_black, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_style_set_text_font(&lv_watch_font28_black, LV_STATE_DEFAULT, &lv_font_ttf_28);
+
+ style_init_reset(&lv_watch_font28_gray);
+ lv_style_set_text_color(&lv_watch_font28_gray, LV_STATE_DEFAULT, LV_COLOR_GRAY);
+ lv_style_set_text_font(&lv_watch_font28_gray, LV_STATE_DEFAULT, &lv_font_ttf_28);
+#endif
+
/*lv_watch_style_transp*/
style_init_reset(&lv_watch_style_transp);
lv_style_copy(&lv_watch_style_transp, &lv_style_transp);
lv_freetype_font_init(&lv_font_ttf_12, LV_FONT_TTF, 12);
lv_freetype_font_init(&lv_font_ttf_14, LV_FONT_TTF, 14);
lv_freetype_font_init(&lv_font_ttf_40, LV_FONT_TTF, 40);
+ #ifdef __MMI_ZHSX_SUPPORT__
+ lv_freetype_font_init(&lv_font_ttf_22, LV_FONT_TTF, 22);
+ lv_freetype_font_init(&lv_font_ttf_24, LV_FONT_TTF, 24);
+ lv_freetype_font_init(&lv_font_ttf_26, LV_FONT_TTF, 26);
+ lv_freetype_font_init(&lv_font_ttf_28, LV_FONT_TTF, 28);
+ #endif
#elif defined USE_FONT_BIN
// load from font bin file from resource
lv_font_droidSansFallbackFull_20 = lv_font_load(LV_FONT_DROIDSANSFALLBACKFULL_20_BIN);
LV_FONT_DECLARE(lv_font_ttf_14)
LV_FONT_DECLARE(lv_font_ttf_40)
LV_FONT_DECLARE(lv_font_spec_symbols_ttf_20)
+#ifdef __MMI_ZHSX_SUPPORT__
+LV_FONT_DECLARE(lv_font_ttf_22)
+LV_FONT_DECLARE(lv_font_ttf_24)
+LV_FONT_DECLARE(lv_font_ttf_26)
+LV_FONT_DECLARE(lv_font_ttf_28)
+#endif
#define LV_THEME_WATCH_NIGHT_FONT_20 &lv_font_ttf_20
#define LV_THEME_WATCH_NIGHT_FONT_30 &lv_font_ttf_30
#define LV_THEME_WATCH_NIGHT_FONT_12 &lv_font_ttf_12
extern lv_style_t lv_watch_cont_opa2;
extern lv_style_t lv_watch_cb_styles;
+#ifdef __MMI_ZHSX_SUPPORT__
+extern lv_style_t lv_watch_font22;
+extern lv_style_t lv_watch_font22_black;
+extern lv_style_t lv_watch_font22_gray;
+extern lv_style_t lv_watch_font22_yellow;
+extern lv_style_t lv_watch_font24;
+extern lv_style_t lv_watch_font24_black;
+extern lv_style_t lv_watch_font24_gray;
+extern lv_style_t lv_watch_font24_yellow;
+extern lv_style_t lv_watch_font26;
+extern lv_style_t lv_watch_font26_black;
+extern lv_style_t lv_watch_font26_gray;
+extern lv_style_t lv_watch_font26_yellow;
+extern lv_style_t lv_watch_font28;
+extern lv_style_t lv_watch_font28_black;
+extern lv_style_t lv_watch_font28_gray;
+extern lv_style_t lv_watch_font28_yellow;
+#endif
+
extern lv_style_t lv_watch_image;
extern lv_style_t lv_watch_image_opa1;
extern lv_style_t lv_watch_black_tight;
/*********************
* DEFINES
*********************/
-#ifndef USE_POWER_ON_GIF
-#define USE_POWER_ON_GIF 0
-#endif
+//#ifndef USE_POWER_ON_GIF
+//#define USE_POWER_ON_GIF 0
+//#endif
/**********************
* TYPEDEFS
//init steps from nv when power on
asl_pedometer_poweron_on_init();
+#ifdef __MMI_WECHAT_SUPPORT__
+ wechat_msg_info_init();
+#endif
+
if((HAL_POWERUP_ONKEY == reason) || (HAL_POWERUP_REBOOT == reason)) {
// unknow is for soft reboot
watch_powerup_onkey_common_process();
if(activity_obj == NULL) return;
//lv_obj_set_style(activity_obj, &lv_style_plain);
- power_on_gif = gif_open(activity_obj, "R:/gif/anim_power_on.gif", 1);
+ power_on_gif = gif_open(activity_obj, ANIM_POWER_ON, 1);
/*fix: when power on, audio is very stuck when ril init*/
//printf("set AudioHAL_SetResBufCnt 20\n");
AudioHAL_SetResBufCnt(20);
- Hal_NFFS_File_Play_Onetime("R:/audio/audio_power_on.mid", (HAL_SPEAKER_GAIN)query_current_volume(), poweron_play_callback, 0);
+ Hal_NFFS_File_Play_Onetime(AUDIO_POWER_ON, (HAL_SPEAKER_GAIN)query_current_volume(), poweron_play_callback, 0);
}
if(power_on_gif->once_done) {
#include "../../product/craneg_modem/softutil/fotacomm/inc/fota_interface.h"
#endif
+#ifdef __MMI_WECHAT_SUPPORT__
+#include "lv_apps/wechat/wechat.h"
+#endif
+#ifdef __MMI_HEALTH_MEASURE_HEART_SUPPORT__
+#include "lv_apps/health_measure/health_heart_rate.h"
+#endif
+#ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
+#include "lv_apps/health_measure/health_spo2.h"
+#endif
+#ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
+#include "lv_apps/health_measure/health_temperature.h"
+#endif
+
+
+
//simware end
/*********************
LV_IMG_DECLARE(img_poweron_logo);
#define ICON_POWERON_LOGO &img_poweron_logo
+#if USE_POWER_ON_GIF
+#define ANIM_POWER_ON "R:/gif/anim_power_on.gif"
+#endif
+#define AUDIO_POWER_ON "R:/audio/audio_power_on.mid"
+
+#if USE_POWER_OFF_GIF
+#define ANIM_POWER_OFF "R:/gif/anim_power_off.gif"
+#endif
+#define AUDIO_POWER_OFF "R:/audio/audio_power_off.mid"
+
//launcher
#define ICON_BACKGROUND "R:/png/background/img_background1.png"
#if LV_WATCH_SIMULATOR_360
//primary_menu
#define ICON_SETTING "R:/png/primary_function/icon_settings.png"
#define ICON_WECHAT "R:/png/primary_function/icon_wechat.png"
-#define ICON_TELEPHONE "R:/png/primary_function/icon_telephone.png"
+#define ICON_CALLLOG "R:/png/primary_function/ICON_CALLLOG.png"
#define ICON_CAMERA "R:/png/primary_function/icon_camera.png"
#define ICON_MAKEFRIENDS "R:/png/primary_function/icon_makefriends.png"
#define ICON_DIALPAD "R:/png/primary_function/icon_dialpad.png"
#define ICON_ACTIVITY "R:/png/primary_function/icon_activity.png"
#define ICON_ALIPAY "R:/png/primary_function/icon_alipay.png"
#define ICON_SMS_MSG "R:/png/primary_function/icon_sms.png"
+#define ICON_PHONEBOOK "R:/png/primary_function/ICON_PHONEBOOK.png"
//setting
#define ICON_SETTING_DAIL_FORMAT_SWITCH "R:/png/setting/icon_setting_dail_format_switch.png"
#define ICON_SETTING_TAB_UP_GRAY "R:/png/setting/icon_setting_tab_up_gray.png"
#define ICON_NO_MESSAGE "R:/png/setting/icon_message.png"
-#if USE_POWER_OFF_GIF
-#define ANIM_POWER_OFF "R:/gif/anim_power_off.gif"
-#define AUDIO_POWER_OFF "R:/audio/audio_power_off.mid"
-#endif
+//#if USE_POWER_OFF_GIF
+//#define ANIM_POWER_OFF "R:/gif/anim_power_off.gif"
+//#define AUDIO_POWER_OFF "R:/audio/audio_power_off.mid"
+//#endif
#define AUDIO_SETTING_AUDIO_MSG "R:/audio/audio_msg.amr"
#define ICON_LONG_TOUCH_SPK "R:/png/speech_recog/icon_long_touch_spk.png"
// audio
-#define AUDIO_POWER_ON "R:/audio/audio_power_on.mid"
-#define AUDIO_POWER_OFF "R:/audio/audio_power_off.mid"
+//#define AUDIO_POWER_ON "R:/audio/audio_power_on.mid"
+//#define AUDIO_POWER_OFF "R:/audio/audio_power_off.mid"
#define AUDIO_MSG "R:/audio/audio_msg.amr"
// voice msg
+#if USE_LV_WATCH_VOICE_MSG != 0
#define ICON_EXPRESSION_TEST "R:/png/voice_msg/icon_expression_test.png"
#define ICON_BKG "R:/png/voice_msg/icon_bkg.png"
#define ICON_NONET_DEBT "R:/png/voice_msg/icon_nonet_debt.png"
#define ICON_TOUCH_SPK "R:/png/voice_msg/icon_touch_spk.png"
#define ICON_VOICE_DAMAGE "R:/png/voice_msg/icon_voice_damage.png"
#define ICON_BACK_BLUE "R:/png/voice_msg/icon_back_blue.png"
+#endif
//calculater
#define ICON_0 "R:/png/calculator/icon_0.png"
#define MESSAGE_BG1 "R:/png/sms_msg/message_bg1.png"
#define MES_SHORTMES "R:/png/sms_msg/mes_shortmes.png"
+
+#ifdef __MMI_ZHSX_SUPPORT__
+//common
+#define ICON_COMMON_BG_BLACK "R:/png/common/ICON_COMMON_BG_BLACK.png"
+#define ICON_COMMON_BG_WHITE "R:/png/common/ICON_COMMON_BG_WHITE.png"
+#define ICON_COMMON_SUCCESS "R:/png/common/ICON_COMMON_SUCCESS.png"
+
+#endif
+
+// wechat
+#ifdef __MMI_WECHAT_SUPPORT__
+#define ICON_WECHAT_NO_NETWORK "R:/png/wechat/ICON_WECHAT_NO_NETWORK.png"
+#define ICON_WECHAT_TEXT_ITEM_BG "R:/png/wechat/ICON_WECHAT_TEXT_ITEM_BG.png"
+#define ICON_WECHAT_RECORD_BUTTON "R:/png/wechat/ICON_WECHAT_RECORD_BUTTON.png"
+#define ICON_WECHAT_RECORD_BUTTON_PRESSED "R:/png/wechat/ICON_WECHAT_RECORD_BUTTON_PRESSED.png"
+#define ICON_WECHAT_MY_VOICE_ITEM_BG "R:/png/wechat/ICON_WECHAT_MY_VOICE_ITEM_BG.png"
+#define ICON_WECHAT_MY_VOICE_ITEM_PLAYING1 "R:/png/wechat/ICON_WECHAT_MY_VOICE_ITEM_PLAYING1.png"
+#define ICON_WECHAT_MY_VOICE_ITEM_PLAYING2 "R:/png/wechat/ICON_WECHAT_MY_VOICE_ITEM_PLAYING2.png"
+#define ICON_WECHAT_MY_VOICE_ITEM_PLAYING3 "R:/png/wechat/ICON_WECHAT_MY_VOICE_ITEM_PLAYING3.png"
+#define ICON_WECHAT_OTHER_VOICE_ITEM_BG "R:/png/wechat/ICON_WECHAT_OTHER_VOICE_ITEM_BG.png"
+#define ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING1 "R:/png/wechat/ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING1.png"
+#define ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING2 "R:/png/wechat/ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING2.png"
+#define ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3 "R:/png/wechat/ICON_WECHAT_OTHER_VOICE_ITEM_PLAYING3.png"
+#define ICON_WECHAT_VOICE_ITEM_DAMAGE "R:/png/wechat/ICON_WECHAT_VOICE_ITEM_DAMAGE.png"
+#define ICON_WECHAT_RECORDING1 "R:/png/wechat/ICON_WECHAT_RECORDING1.png"
+#define ICON_WECHAT_RECORDING2 "R:/png/wechat/ICON_WECHAT_RECORDING2.png"
+#define ICON_WECHAT_RECORDING3 "R:/png/wechat/ICON_WECHAT_RECORDING3.png"
+#define ICON_WECHAT_RECORDING4 "R:/png/wechat/ICON_WECHAT_RECORDING4.png"
+#define ICON_WECHAT_RECORDING5 "R:/png/wechat/ICON_WECHAT_RECORDING5.png"
+#define ICON_WECHAT_SENDING_BG "R:/png/wechat/ICON_WECHAT_SENDING_BG.png"
+#define ICON_WECHAT_SENDING_PROMPT1 "R:/png/wechat/ICON_WECHAT_SENDING_PROMPT1.png"
+#define ICON_WECHAT_SENDING_PROMPT2 "R:/png/wechat/ICON_WECHAT_SENDING_PROMPT2.png"
+#define ICON_WECHAT_SENDING_PROMPT3 "R:/png/wechat/ICON_WECHAT_SENDING_PROMPT3.png"
+#define ICON_WECHAT_SENDING_SUCC "R:/png/wechat/ICON_WECHAT_SENDING_SUCC.png"
+#define ICON_WECHAT_SENDING_FAILED "R:/png/wechat/ICON_WECHAT_SENDING_FAILED.png"
+#define ICON_WECHAT_SEND_EMO "R:/png/wechat/ICON_WECHAT_SEND_EMO.png"
+#define ICON_WECHAT_UNREAD_FLAG "R:/png/wechat/ICON_WECHAT_UNREAD_FLAG.png"
+
+#define AUDIO_WECHAT_RECEIVE "R:/audio/audio_wechat_receive.mid"
+#endif
+
+//healthy measure
+#ifdef __MMI_HEALTH_MEASURE_HEART_SUPPORT__
+#define ANIM_HEART_RATE_MEASURING "R:/gif/anim_heart_rate_measuring.gif"
+#define ICON_HEART_RATE_MEASURE_DONE "R:/png/health_measure/icon_heart_rate_measure_done.png"
+#define ICON_HEART_RATE_MEASURE_FAIL "R:/png/health_measure/icon_heart_rate_measure_fail.png"
+#endif
+#ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
+#define ICON_SPO2 "R:/png/primary_function/ICON_SPO2.png"
+#define ANIM_SPO2_MEASURING "R:/gif/anim_spo2_measuring.gif"
+#define ICON_SPO2_MEASURE_DONE "R:/png/health_measure/icon_spo2_measure_done.png"
+#define ICON_SPO2_MEASURE_FAIL "R:/png/health_measure/icon_spo2_measure_fail.png"
+#endif
+#ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
+#define ICON_TEMPERATURE "R:/png/primary_function/ICON_TEMPERATURE.png"
+#define ICON_TEMPERATURE_MEASURE_BG "R:/png/health_measure/icon_temperature_measure_bg.png"
+#endif
+
+
+
//font
#ifdef USE_FONT_TTF
/* YH2312F.ttf include 60 special symbols from FontAwesome5-Solid+Brands+Regular_simple.ttf, see lv_symbol_def.h */
-style1
-R:/png/dial_style1/style1_watch.json
-default
-R:/png/dial_default/default_watch.json
+default_digit
+R:/png/dial_default_ambient/am_digit.json
rokcket
R:/png/dial_rocket/rocket_watch.json
dolphin
R:/png/dial_dolphin/dolphin_watch.json
bear
R:/png/dial_bear/bear_watch.json
+style1
+R:/png/dial_style1/style1_watch.json
+dial_style3
+R:/png/dial_style3/dial_style3.json
+dial_style4
+R:/png/dial_style4/dial_style4.json
{
"element_pos": {
"x": 120,
- "y": 0
+ "y": 40
},
"element_cnt": 1,
"act_type": 2,
"name": "数字时钟",
"preview_img": "R:/png/dial_default_ambient/am_digit_pre.png",
"bg_img": "R:/png/dial_default_ambient/am_digit_bg.png",
- "configurable": 2,
+ "configurable": 0,
"element_ll": [
{
"element_pos": {
"x": 0,
- "y": 75
+ "y": 85
},
"element_cnt": 1,
"act_type": 1,
{
"element_pos": {
"x": 25,
- "y": 50
+ "y": 70
},
"element_cnt": 1,
"act_type": 1,
{
"element_pos": {
"x": 25,
- "y": 190
+ "y": 220
},
"element_cnt": 1,
"act_type": 5,
},
{
"element_pos": {
- "x": 115,
- "y": 190
+ "x": 110,
+ "y": 220
},
"element_cnt": 1,
"act_type": 4,
{
"element_pos": {
"x": 120,
- "y": 40
+ "y": 70
},
"element_cnt": 1,
"act_type": 1,
"img_type": 12,
"img_pos": {
"x": 44,
- "y": 95
+ "y": 100
},
"sub_img_cnt": 10,
"sub_img_ll": [
"img_type": 13,
"img_pos": {
"x": 72,
- "y": 95
+ "y": 100
},
"sub_img_cnt": 10,
"sub_img_ll": [
{
"element_pos": {
"x": 100,
- "y": 185
+ "y": 225
},
"element_cnt": 1,
"act_type": 5,
{
"element_pos": {
"x": 190,
- "y": 185
+ "y": 225
},
"element_cnt": 1,
"act_type": 4,
{
- "name": "rocket",
- "preview_img": "R:/png/dial_style1/bg.png",
+ "name": "style1",
+ "preview_img": "R:/png/dial_style1/view.png",
"bg_img": "R:/png/dial_style1/bg.png",
"configurable": 0,
"element_ll":
"label_cnt": 1,
"label_ll": [
{
- "label_type": 18,
+ "label_type": 17,
"text": "10249",
"text_color": {
"r": 255,
"label_cnt": 1,
"label_ll": [
{
- "label_type": 25,
+ "label_type": 24,
"text": "123",
"text_color": {
"r": 255,
--- /dev/null
+{
+ "name": "rocket",
+ "preview_img": "R:/png/dial_rocket/icon_dial_rocket.png",
+ "bg_img": "R:/png/dial_rocket/icon_rocket.png",
+ "configurable": 0,
+ "element_ll": [
+ {
+ "element_pos": {
+ "x": 120,
+ "y": 40
+ },
+ "element_cnt": 1,
+ "act_type": 1,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 1,
+ "element_name": "数字时钟",
+ "img_cnt": 4,
+ "img_ll": [
+ {
+ "img_type": 10,
+ "img_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 11,
+ "img_pos": {
+ "x": 50,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 12,
+ "img_pos": {
+ "x": 44,
+ "y": 95
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 13,
+ "img_pos": {
+ "x": 72,
+ "y": 95
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_rocket/icon_rocket_digital_s_9.png"
+ }
+ ]
+ }
+ ],
+ "label_cnt": 0,
+ "label_ll": [
+ {
+ "label_type": 5,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 25,
+ "y": 190
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 100,
+ "y": 185
+ },
+ "element_cnt": 1,
+ "act_type": 5,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 5,
+ "element_name": "日期",
+ "img_cnt": 0,
+ "img_ll": [
+ ],
+ "label_cnt": 4,
+ "label_ll": [
+ {
+ "label_type": 8,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "font_size": 20
+ },
+ {
+ "label_type": 10,
+ "text": "月",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 25,
+ "y": 0
+ },
+ "font_size": 20
+ },
+ {
+ "label_type": 9,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 45,
+ "y": 0
+ },
+ "font_size": 20
+ },
+ {
+ "label_type": 10,
+ "text": "日",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 70,
+ "y": 0
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 190,
+ "y": 185
+ },
+ "element_cnt": 1,
+ "act_type": 4,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 4,
+ "element_name": "星期",
+ "img_cnt": 0,
+ "img_ll": [
+ ],
+ "label_cnt": 1,
+ "label_ll": [
+ {
+ "label_type": 5,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "name": "dial_style3",
+ "preview_img": "R:/png/dial_style3/pre.png",
+ "bg_img": "R:/png/dial_style3/bg.png",
+ "configurable": 0,
+ "element_ll": [
+ {
+ "element_pos": {
+ "x": 32,
+ "y": 127
+ },
+ "element_cnt": 1,
+ "act_type": 1,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 1,
+ "element_name": "数字时钟",
+ "img_cnt": 5,
+ "img_ll": [
+ {
+ "img_type": 10,
+ "img_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style3/0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 11,
+ "img_pos": {
+ "x": 40,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style3/0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 12,
+ "img_pos": {
+ "x": 94,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style3/0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 13,
+ "img_pos": {
+ "x": 134,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style3/0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 16,
+ "img_pos": {
+ "x": 80,
+ "y": 0
+ },
+ "sub_img_cnt": 1,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style3/colon.png"
+ }
+ ]
+ }
+ ],
+ "label_cnt": 0,
+ "label_ll": [
+ {
+ "label_type": 5,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 25,
+ "y": 190
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 40,
+ "y": 35
+ },
+ "element_cnt": 1,
+ "act_type": 5,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 5,
+ "element_name": "日期",
+ "img_cnt": 0,
+ "img_ll": [
+ ],
+ "label_cnt": 3,
+ "label_ll": [
+ {
+ "label_type": 9,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "font_size": 20
+ },
+ {
+ "label_type": 10,
+ "text": "/",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 25,
+ "y": 0
+ },
+ "font_size": 20
+ },
+ {
+ "label_type": 8,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 35,
+ "y": 0
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 40,
+ "y": 60
+ },
+ "element_cnt": 1,
+ "act_type": 4,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 4,
+ "element_name": "星期",
+ "img_cnt": 0,
+ "img_ll": [
+ ],
+ "label_cnt": 1,
+ "label_ll": [
+ {
+ "label_type": 5,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 120,
+ "y": 20
+ },
+ "element_cnt": 1,
+ "act_type": 7,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 7,
+ "element_name": "卡路里",
+ "img_cnt": 2,
+ "img_ll": [
+ {
+ "img_type": 70,
+ "img_pos": {
+ "x": 30,
+ "y": 30
+ },
+ "sub_img_cnt": 1,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style3/calorie.png"
+ }
+ ]
+ },
+ {
+ "img_type": 75,
+ "img_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "sub_img_cnt": 11,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style3/calorie/0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/9.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style3/calorie/10.png"
+ }
+ ]
+ }
+ ],
+ "label_cnt": 2,
+ "label_ll": [
+ {
+ "label_type": 15,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 0,
+ "y": 50
+ },
+ "font_size": 20
+ },
+ {
+ "label_type": 16,
+ "text": "KCAL",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 0,
+ "y": 70
+ },
+ "font_size": 12
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 20,
+ "y": 210
+ },
+ "element_cnt": 1,
+ "act_type": 13,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 13,
+ "element_name": "心率",
+ "img_cnt": 2,
+ "img_ll": [
+ {
+ "img_type": 130,
+ "img_pos": {
+ "x": 30,
+ "y": 30
+ },
+ "sub_img_cnt": 1,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style3/heart.png"
+ }
+ ]
+ },
+ {
+ "img_type": 135,
+ "img_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "sub_img_cnt": 1,
+ "sub_img_ll": [
+
+ {
+ "sub_img": "R:/png/dial_style3/heart_image.png"
+ }
+ ]
+ }
+ ],
+ "label_cnt": 2,
+ "label_ll": [
+ {
+ "label_type": 24,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 55,
+ "y": 0
+ },
+ "font_size": 20
+ },
+ {
+ "label_type": 25,
+ "text": "BPM",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 60,
+ "y": 25
+ },
+ "font_size": 12
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 150,
+ "y": 230
+ },
+ "element_cnt": 1,
+ "act_type": 8,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 8,
+ "element_name": "计步",
+ "img_cnt": 1,
+ "img_ll": [
+ {
+ "img_type": 80,
+ "img_pos": {
+ "x": 10,
+ "y": 0
+ },
+ "sub_img_cnt": 1,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style3/step.png"
+ }
+ ]
+ }
+ ],
+ "label_cnt": 1,
+ "label_ll": [
+ {
+ "label_type": 17,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 0,
+ "y": 30
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "name": "dial_style4",
+ "preview_img": "R:/png/dial_style4/pre.png",
+ "bg_img": "R:/png/dial_style4/bg.png",
+ "configurable": 0,
+ "element_ll": [
+ {
+ "element_pos": {
+ "x": 0,
+ "y": 45
+ },
+ "element_cnt": 1,
+ "act_type": 1,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 1,
+ "element_name": "数字时钟",
+ "img_cnt": 4,
+ "img_ll": [
+ {
+ "img_type": 10,
+ "img_pos": {
+ "x": 5,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style4/0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 11,
+ "img_pos": {
+ "x": 57,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style4/0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 12,
+ "img_pos": {
+ "x": 131,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style4/0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 13,
+ "img_pos": {
+ "x": 183,
+ "y": 0
+ },
+ "sub_img_cnt": 10,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style4/0.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/1.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/2.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/3.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/4.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/5.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/6.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/7.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/8.png"
+ },
+ {
+ "sub_img": "R:/png/dial_style4/9.png"
+ }
+ ]
+ },
+ {
+ "img_type": 16,
+ "img_pos": {
+ "x": 109,
+ "y": 0
+ },
+ "sub_img_cnt": 1,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style4/colon.png"
+ }
+ ]
+ }
+ ],
+ "label_cnt": 0,
+ "label_ll": [
+ {
+ "label_type": 5,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 25,
+ "y": 190
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 40,
+ "y": 250
+ },
+ "element_cnt": 1,
+ "act_type": 5,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 5,
+ "element_name": "日期",
+ "img_cnt": 0,
+ "img_ll": [
+ ],
+ "label_cnt": 5,
+ "label_ll": [
+ {
+ "label_type": 7,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "font_size": 28
+ },
+ {
+ "label_type": 10,
+ "text": "-",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 65,
+ "y": 0
+ },
+ "font_size": 28
+ },
+ {
+ "label_type": 8,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 80,
+ "y": 0
+ },
+ "font_size": 28
+ },
+ {
+ "label_type": 10,
+ "text": "-",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 115,
+ "y": 0
+ },
+ "font_size": 28
+ },
+ {
+ "label_type": 9,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 130,
+ "y": 0
+ },
+ "font_size": 28
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 50,
+ "y": 215
+ },
+ "element_cnt": 1,
+ "act_type": 4,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 4,
+ "element_name": "星期",
+ "img_cnt": 0,
+ "img_ll": [
+ ],
+ "label_cnt": 1,
+ "label_ll": [
+ {
+ "label_type": 5,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "font_size": 24
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 50,
+ "y": 150
+ },
+ "element_cnt": 1,
+ "act_type": 8,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 8,
+ "element_name": "计步",
+ "img_cnt": 1,
+ "img_ll": [
+ {
+ "img_type": 80,
+ "img_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "sub_img_cnt": 1,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style4/step.png"
+ }
+ ]
+ }
+ ],
+ "label_cnt": 1,
+ "label_ll": [
+ {
+ "label_type": 17,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": -5,
+ "y": 30
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ },
+ {
+ "element_pos": {
+ "x": 120,
+ "y": 150
+ },
+ "element_cnt": 1,
+ "act_type": 15,
+ "layer": 0,
+ "element_dsc_ll": [
+ {
+ "element_type": 15,
+ "element_name": "自定义",
+ "img_cnt": 1,
+ "img_ll": [
+ {
+ "img_type": 150,
+ "img_pos": {
+ "x": 0,
+ "y": 0
+ },
+ "sub_img_cnt": 1,
+ "sub_img_ll": [
+ {
+ "sub_img": "R:/png/dial_style4/icon.png"
+ }
+ ]
+ }
+ ],
+ "label_cnt": 0,
+ "label_ll": [
+ {
+ "label_type": 5,
+ "text": "",
+ "text_color": {
+ "r": 255,
+ "g": 255,
+ "b": 255
+ },
+ "text_pos": {
+ "x": 30,
+ "y": 220
+ },
+ "font_size": 20
+ }
+ ],
+ "bar": {
+ "bar_type": 0,
+ "bar_pos": {
+ "x": 8,
+ "y": 9
+ },
+ "bar_color": {
+ "r": 77,
+ "g": 88,
+ "b": 99
+ },
+ "bar_w": 11,
+ "bar_h": 12
+ }
+ }
+ ]
+ }
+ ]
+}
#define USE_LV_WATCH_WEATHER 1
#define USE_LV_WATCH_PEDOMETER 1
#define USE_LV_WATCH_BODYINFO 1
-#define USE_LV_WATCH_RECORD 1
+#define USE_LV_WATCH_RECORD 0 //1
#define USE_LV_WATCH_PHONEBOOK 1
#define USE_LV_WATCH_PHONE 1
#define USE_LV_WATCH_SETTING 1
#define USE_LV_WATCH_DIAL_DOLPHIN 1
#define USE_LV_WATCH_DIAL_ROCKET 1
#define USE_LV_WATCH_DIAL_BEAR 1
-#define USE_LV_WATCH_MAKE_FRIENDS 1
+#define USE_LV_WATCH_MAKE_FRIENDS 0 // 1
#define USE_LV_WATCH_QRCODE 0
#define USE_LV_WATCH_QRCODE_SCAN 0
#define USE_LV_WATCH_STOPWATCH 1
#define USE_LV_WATCH_VOICE_MSG 1
#define USE_LV_WATCH_RESTART_AND_RESET 1
#define USE_LV_WATCH_CAMERA 1
-#define USE_LV_WATCH_SPEECH_RECOG 1
+#define USE_LV_WATCH_SPEECH_RECOG 0 // 1
#define USE_LV_WATCH_ALBUM 1
#define USE_LV_WATCH_ENGINEER_MODE 1
#define USE_LV_WATCH_CTA 1
#define USE_LV_WATCH_WAKE_UP_SHORT_TIME 1
+
+//CHENG_MODIFY
+#define __CHENG_DEBUG__
+
+#define __MMI_ZHSX_SUPPORT__
+
+#if 1 //def MMI_WECHAT_SUPPORT
+#define __MMI_WECHAT_SUPPORT__
+#endif
+
+#if 1 //def MMI_HEALTH_MEASURE_HEART_SUPPORT
+#define __MMI_HEALTH_MEASURE_HEART_SUPPORT__
+#endif
+
+#if 1 //def MMI_HEALTH_MEASURE_SPO2_SUPPORT
+#define __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
+#endif
+
+#if 1 //def MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT
+#define __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
+#endif
+
+//CHENG_MODIFY
+
+
#endif /*LV_WATCH_CONF_H*/
return 0;
}
-#ifndef __CHENG_DEBUG__
-#define __CHENG_DEBUG__
-#endif
int ui_init_phase2(void)
{