static constexpr const char *PNG_VOICE_ASSISTANT_IMAGE_27 = APP_RES_PATH "/assistant/assistant_gif/assistant_28.bin";
static constexpr const char *PNG_VOICE_ASSISTANT_IMAGE_28 = APP_RES_PATH "/assistant/assistant_gif/assistant_29.bin";
static constexpr const char *PNG_VOICE_ASSISTANT_IMAGE_29 = APP_RES_PATH "/assistant/assistant_gif/assistant_30.bin";
+ /*运动目标达成*/
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_01 = APP_RES_PATH "/Training/training_GIF/win/1.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_02 = APP_RES_PATH "/Training/training_GIF/win/2.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_03 = APP_RES_PATH "/Training/training_GIF/win/3.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_04 = APP_RES_PATH "/Training/training_GIF/win/4.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_05 = APP_RES_PATH "/Training/training_GIF/win/5.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_06 = APP_RES_PATH "/Training/training_GIF/win/6.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_07 = APP_RES_PATH "/Training/training_GIF/win/7.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_08 = APP_RES_PATH "/Training/training_GIF/win/8.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_09 = APP_RES_PATH "/Training/training_GIF/win/9.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_10 = APP_RES_PATH "/Training/training_GIF/win/10.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_11 = APP_RES_PATH "/Training/training_GIF/win/11.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_12 = APP_RES_PATH "/Training/training_GIF/win/12.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_13 = APP_RES_PATH "/Training/training_GIF/win/13.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_14 = APP_RES_PATH "/Training/training_GIF/win/14.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_15 = APP_RES_PATH "/Training/training_GIF/win/15.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_16 = APP_RES_PATH "/Training/training_GIF/win/16.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_17 = APP_RES_PATH "/Training/training_GIF/win/17.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_18 = APP_RES_PATH "/Training/training_GIF/win/18.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_19 = APP_RES_PATH "/Training/training_GIF/win/19.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_20 = APP_RES_PATH "/Training/training_GIF/win/20.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_21 = APP_RES_PATH "/Training/training_GIF/win/21.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_22 = APP_RES_PATH "/Training/training_GIF/win/22.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_23 = APP_RES_PATH "/Training/training_GIF/win/23.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_24 = APP_RES_PATH "/Training/training_GIF/win/24.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_25 = APP_RES_PATH "/Training/training_GIF/win/25.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_26 = APP_RES_PATH "/Training/training_GIF/win/26.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_27 = APP_RES_PATH "/Training/training_GIF/win/27.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_28 = APP_RES_PATH "/Training/training_GIF/win/28.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_29 = APP_RES_PATH "/Training/training_GIF/win/29.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_30 = APP_RES_PATH "/Training/training_GIF/win/30.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_31 = APP_RES_PATH "/Training/training_GIF/win/31.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_32 = APP_RES_PATH "/Training/training_GIF/win/32.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_33 = APP_RES_PATH "/Training/training_GIF/win/33.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_34 = APP_RES_PATH "/Training/training_GIF/win/34.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_35 = APP_RES_PATH "/Training/training_GIF/win/35.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_36 = APP_RES_PATH "/Training/training_GIF/win/36.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_37 = APP_RES_PATH "/Training/training_GIF/win/37.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_38 = APP_RES_PATH "/Training/training_GIF/win/38.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_39 = APP_RES_PATH "/Training/training_GIF/win/39.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_40 = APP_RES_PATH "/Training/training_GIF/win/40.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_41 = APP_RES_PATH "/Training/training_GIF/win/41.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_42 = APP_RES_PATH "/Training/training_GIF/win/42.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_43 = APP_RES_PATH "/Training/training_GIF/win/43.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_44 = APP_RES_PATH "/Training/training_GIF/win/44.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_45 = APP_RES_PATH "/Training/training_GIF/win/45.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_46 = APP_RES_PATH "/Training/training_GIF/win/46.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_47 = APP_RES_PATH "/Training/training_GIF/win/47.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_48 = APP_RES_PATH "/Training/training_GIF/win/48.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_49 = APP_RES_PATH "/Training/training_GIF/win/49.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_50 = APP_RES_PATH "/Training/training_GIF/win/50.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_51 = APP_RES_PATH "/Training/training_GIF/win/51.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_52 = APP_RES_PATH "/Training/training_GIF/win/52.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_53 = APP_RES_PATH "/Training/training_GIF/win/53.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_54 = APP_RES_PATH "/Training/training_GIF/win/54.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_55 = APP_RES_PATH "/Training/training_GIF/win/55.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_56 = APP_RES_PATH "/Training/training_GIF/win/56.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_57 = APP_RES_PATH "/Training/training_GIF/win/57.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_58 = APP_RES_PATH "/Training/training_GIF/win/58.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_59 = APP_RES_PATH "/Training/training_GIF/win/59.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_60 = APP_RES_PATH "/Training/training_GIF/win/60.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_61 = APP_RES_PATH "/Training/training_GIF/win/61.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_62 = APP_RES_PATH "/Training/training_GIF/win/62.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_63 = APP_RES_PATH "/Training/training_GIF/win/63.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_64 = APP_RES_PATH "/Training/training_GIF/win/64.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_65 = APP_RES_PATH "/Training/training_GIF/win/65.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_66 = APP_RES_PATH "/Training/training_GIF/win/66.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_67 = APP_RES_PATH "/Training/training_GIF/win/67.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_68 = APP_RES_PATH "/Training/training_GIF/win/68.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_69 = APP_RES_PATH "/Training/training_GIF/win/69.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_70 = APP_RES_PATH "/Training/training_GIF/win/70.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_71 = APP_RES_PATH "/Training/training_GIF/win/71.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_72 = APP_RES_PATH "/Training/training_GIF/win/72.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_73 = APP_RES_PATH "/Training/training_GIF/win/73.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_74 = APP_RES_PATH "/Training/training_GIF/win/74.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_75 = APP_RES_PATH "/Training/training_GIF/win/75.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_76 = APP_RES_PATH "/Training/training_GIF/win/76.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_77 = APP_RES_PATH "/Training/training_GIF/win/77.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_78 = APP_RES_PATH "/Training/training_GIF/win/78.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_79 = APP_RES_PATH "/Training/training_GIF/win/79.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_80 = APP_RES_PATH "/Training/training_GIF/win/80.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_81 = APP_RES_PATH "/Training/training_GIF/win/81.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_82 = APP_RES_PATH "/Training/training_GIF/win/82.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_83 = APP_RES_PATH "/Training/training_GIF/win/83.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_84 = APP_RES_PATH "/Training/training_GIF/win/84.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_85 = APP_RES_PATH "/Training/training_GIF/win/85.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_86 = APP_RES_PATH "/Training/training_GIF/win/86.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_87 = APP_RES_PATH "/Training/training_GIF/win/87.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_88 = APP_RES_PATH "/Training/training_GIF/win/88.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_89 = APP_RES_PATH "/Training/training_GIF/win/89.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_90 = APP_RES_PATH "/Training/training_GIF/win/90.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_91 = APP_RES_PATH "/Training/training_GIF/win/91.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_92 = APP_RES_PATH "/Training/training_GIF/win/92.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_93 = APP_RES_PATH "/Training/training_GIF/win/93.bin";
+ static constexpr const char *PNG_TRAINING_WIN_IMAGE_94 = APP_RES_PATH "/Training/training_GIF/win/94.bin";
/* -------------------------------------------------------------------------- */
static constexpr const char *PNG_ALIPAY_BIND_FAILURE = APP_RES_PATH "/alipay/ALIPAY_BIND_FAILURE.bin";
static constexpr const char *PNG_ALIPAY_BIND_SUCCESS = APP_RES_PATH "/alipay/ALIPAY_BIND_SUCCESS.bin";
static constexpr const char *PNG_APPLIST_RECORD_IMAGE = APP_LIST_PATH "/recording.bin"; // 录音
static constexpr const char *PNG_APPLIST_TRAINING_IMAGE = APP_LIST_PATH "/training.bin"; // 训练
static constexpr const char *PNG_APPLIST_TRAINING_RECORD_IMAGE = APP_LIST_PATH "/record.bin"; // 训练记录
- static constexpr const char *PNG_APPLIST_STOPWATCH_IMAGE = APP_LIST_PATH "/clock.bin"; // 秒表
- static constexpr const char *PNG_APPLIST_COUNTDOWN_IMAGE = APP_LIST_PATH "/countdown.bin"; // 计时器
+ static constexpr const char *PNG_APPLIST_STOPWATCH_IMAGE = APP_LIST_PATH "/countdown.bin"; // 秒表
+ static constexpr const char *PNG_APPLIST_COUNTDOWN_IMAGE = APP_LIST_PATH "/clock.bin"; // 计时器
static constexpr const char *PNG_APPLIST_ALIPAY_IMAGE = APP_LIST_PATH "/alipay.bin"; // 支付宝
static constexpr const char *PNG_APPLIST_FINDPHONE_IMAGE = APP_LIST_PATH "/findphone.bin"; // 查找手机
static constexpr const char *PNG_APPLIST_DISTURB_IMAGE = APP_LIST_PATH "/disturb.bin"; // 勿扰模式
OHOS::SleepModel::GetInstance().set_sleep_state(OHOS::SLEEPSTATE::WAKE);\r
// 早安提醒(关闭)\r
// AlarmEventPublish(TOPIC_EVENT_SLEEPNOTE, (uint8_t *)sleep_notify_time, 4);\r
- OHOS::SleepModel::GetInstance().ReInitData(); // 更新睡眠数据\r
+ // OHOS::SleepModel::GetInstance().ReInitData(); // 更新睡眠数据\r
SendMsgToUIService(UI_UPDATE_SLEEP_DATA, 0, nullptr, 0);\r
}\r
\r
uapi_dev_runtime_set_absolute_static_status(0); // 清零绝对静止状态\r
// uapi_dev_runtime_set_nap_monitoring_status(1);\r
// uapi_dev_runtime_set_sleep_monitoring_status(0);\r
- OHOS::SleepModel::GetInstance().ReInitData(); // 更新睡眠数据\r
+ // OHOS::SleepModel::GetInstance().ReInitData(); // 更新睡眠数据\r
set_keep_in_wear_det_mode(1); // 开启小睡佩戴监测\r
SendMsgToUIService(UI_UPDATE_SLEEP_DATA, 0, nullptr, 0);\r
do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NAP_SEDENTARY_MODE, NULL); // 算法底层切换小睡监测模式\r
node->addr[2], node->addr[3], node->addr[4], node->addr[5]); // 没有%s类型,不做返回判断
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "addrTmp %s", addrTmp);
// ClickAnimation(itemData, item);
- item->SetItemInfo(itemData, true);
item->SetViewIndex(index);
+ item->SetItemInfo(itemData, true);
item->SetPairingtatus();
return item;
}
list->SetStyle(STYLE_BORDER_RADIUS, 50);\r
list->SetDragACCLevel(5);\r
list->SetSwipeACCLevel(800);\r
- list->SetReboundSize(30);\r
+ // list->SetReboundSize(30);\r
// list->SetScrollBlankSize(30);\r
list->SetAdapter(adapterText);\r
}\r
return;\r
}\r
}\r
- newEquipmentButton->SetPosition(173, list->GetY() + list->GetHeight() + 20, 120, 40);\r
+ newEquipmentButton->SetPosition(173, 390, 120, 40);\r
newEquipmentButton->SetTextId(STR_BT_HEADSET_RESCAN); // 重新搜索\r
newEquipmentButton->SetViewId(BLUETOOTH_NEWEQUIPMENT_BUTTON);\r
newEquipmentButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
list->Resize(380, 250);\r
break;\r
}\r
- newEquipmentButton->SetY(list->GetY() + list->GetHeight() + 20);\r
+ // newEquipmentButton->SetY(list->GetY() + list->GetHeight() + 20);\r
list->RefreshList();\r
list->Invalidate();\r
- newEquipmentButton->Invalidate();\r
+ // newEquipmentButton->Invalidate();\r
}\r
}\r
\r
}\r
}\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "index = %d", GetViewIndex());\r
- List<BluetoothCaseInfo> &btConnedDevicesList_ = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
- std::list<BluetoothCaseInfo> &btScansDevicesList_ = BluetoothModel::GetInstance()->GetCase();\r
- if (GetViewIndex() == btConnedDevicesList_.Size() - 1 || GetViewIndex() == btScansDevicesList_.size() - 1)\r
+ if(!isCaseList)\r
{\r
- lineImage.SetVisible(false);\r
+ //已连接的耳机界面\r
+ List<BluetoothCaseInfo> &btConnedDevicesList_ = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
+ if (GetViewIndex() == btConnedDevicesList_.Size() - 1)\r
+ {\r
+ lineImage.SetVisible(false);\r
+ }\r
+ else\r
+ {\r
+ lineImage.SetVisible(true);\r
+ }\r
}\r
else\r
{\r
- lineImage.SetVisible(true);\r
+ //搜索出耳机的界面\r
+ std::list<BluetoothCaseInfo> &btScansDevicesList_ = BluetoothModel::GetInstance()->GetCase();\r
+ if (GetViewIndex() == btScansDevicesList_.size() - 1)\r
+ {\r
+ lineImage.SetVisible(false);\r
+ }\r
+ else\r
+ {\r
+ lineImage.SetVisible(true);\r
+ }\r
}\r
}\r
\r
return;\r
} else {\r
btScansDevicesList_.push_back(caseInfo);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "btScansDevicesList_ num = %d",btScansDevicesList_.size());\r
+ if(BluetoothEarListView::GetInstance()) //动态计算扫描出来的设备列表ui高度\r
+ GraphicService::GetInstance()->PostGraphicEvent( \r
+ std::bind(&BluetoothEarListView::RefreshBluetoothEarListView, BluetoothEarListView::GetInstance()));\r
}\r
}\r
//设置设备的信号强度\r
// }\r
// uapi_a2dp_snk_connect();\r
// a2dp_snk_connect(bdAddr);\r
- if(uapi_dev_runtime_get_bt_powerstat() && !get_ble_pair()&& (status == GAP_PAIR_PAIRED))\r
+ if(cm_custom_ble_service_on_flag() && !get_ble_pair()&& (status == GAP_PAIR_PAIRED))\r
{\r
send_pair_succ((bd_addr_t*)bdAddr);\r
// if(cm_get_A2DP_switch() || cm_get_HFP_switch())\r
uint8_t get_stcak_size();
void symbol_stack_top_uddata(char data);
void clean_stack();
+ void symbol_stack_pop(void);
private:
CalculatorModel();
CalculatorModel(const CalculatorModel &);
void show_hint_label(bool data);
void show_long_label();
+ bool string_have_dot(std::string buf);
osTimerId_t call_roll_timer=NULL;
osTimerId_t call_roll_timer_move=NULL;
UILabel *number{nullptr};
UILabelExt *hint{nullptr};
- std::string number_string="";
+ std::string number_string=" ";
UIView::OnClickListener* clickLeftListener{nullptr};
UIView:: OnDragListener* dragListener{nullptr};
}
}
+
+void CalculatorModel:: symbol_stack_pop(void)
+{
+ if(!symbolStack.empty())
+ {
+ symbolStack.pop();
+ }
+}
+
uint8_t CalculatorModel::get_stcak_size()
{
return numberStack.size();
#include "calculator/include/CalculatorModel.h"
#include "wearable_log.h"
#include <math.h>
+#include <iostream>
+#include <iomanip>
namespace OHOS {
void CalculatorView::show_long_label(void)
{
number->SetText(number_string.c_str());
+ number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
RootView::GetInstance()->Invalidate();
}
}
}
+bool CalculatorView::string_have_dot(std::string buf)
+{
+ for(int i=0;i<buf.length();i++)
+ {
+ if(buf.c_str()[i]=='.')
+ {
+ return true;
+ }
+ }
+ return false;
+}
void CalculatorView::number_text_updata_buf(const char *buf)
if(number_falg!=1)
number_string="";
+ if(buf[0]=='.' && string_have_dot(number_string))
+ {
+ return;
+ }
+
if(number_string.length()>20)
{
if(number_string.length()>12)
{
number->SetText(number_string.c_str()+number_string.length()-12);
+ number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
number_falg=1;
RootView::GetInstance()->Invalidate();
return;
}
number->SetText(number_string.c_str());
+ number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
number_falg=1;
number_string=new_buf;
number->SetText(buf);
+ number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
RootView::GetInstance()->Invalidate();
return;
double number_float=strtod(text_buf,NULL);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%lf %s",number_float,text_buf);
+ char new_buf_[64]={0};
+ sprintf_s(new_buf_,64,"%.010lf",number_float);
+ number_float=strtod(new_buf_,NULL);
+
CalculatorModel::GetInstance()->number_push_stack(number_float);
if( CalculatorModel::GetInstance()->get_stcak_size()>=2)
number_string=new_buf;
number->SetText(new_buf);
+ number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
RootView::GetInstance()->Invalidate();
char new_buf[64]={0};
- const char*text_buf=number_string.c_str();
+ char*text_buf=(char *)number_string.c_str();
double number_float=strtod(text_buf,NULL);
if(buf[0]=='C')
}
number_string=new_buf;
number->SetText(new_buf);
+ number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
RootView::GetInstance()->Invalidate();
}
else if (buf[0]=='D')
{
- number_float=0;
- sprintf_s(new_buf,16,"%.00lf",number_float);
-
- number_string=new_buf;
- number->SetText(new_buf);
- number_falg=2;
+ // number_float=0;
+ // sprintf_s(new_buf,16,"%.00lf",number_float);
+ text_buf[number_string.length()-1]='\0';
+ number_string=text_buf;
+ number->SetText(text_buf);
+ number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
+ if(number_falg==0)
+ {
+ CalculatorModel::GetInstance()->symbol_stack_pop();
+ number_falg=1;
+ }
+ else
+ {
+ number_falg=1;
+ }
+
+
RootView::GetInstance()->Invalidate();
}
char new_buf[64]={0};
const char*text_buf=number_string.c_str();
+ double number_float=0;
- double number_float=strtod(text_buf,NULL);
-
- CalculatorModel::GetInstance()->number_push_stack(number_float);
+ if(text_buf[0]>='0' && text_buf[0]<='9')
+ {
+ number_float=strtod(text_buf,NULL);
+ char new_buf_[64]={0};
+ sprintf_s(new_buf_,64,"%.010lf",number_float);
+ number_float=strtod(new_buf_,NULL);
+ CalculatorModel::GetInstance()->number_push_stack(number_float);
+ }
+
number_float =CalculatorModel::GetInstance()->calculate_stack();
+ char new_buf_[64]={0};
+ sprintf_s(new_buf_,64,"%.010lf",number_float);
+ number_float=strtod(new_buf_,NULL);
+
double number_float_=number_float;
int decimal_places = 0;
double frac;
number_string=new_buf;
number->SetText(new_buf);
+ number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
RootView::GetInstance()->Invalidate();
number->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
number->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);
number->SetRollSpeed(0);
- number->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 50);
+ number->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 50);
// Add to rootView
group->Add(number);
}
}
+#include "dial_sos_c.h"
+
/* 状态复位 */
void StatusReset(void)
{
if (GetCurrCallNum() == 0) {
g_phoneStatus = PHONE_SINGLE_STATUS;
}
+
+ if(get_falg_SOS())
+ {
+ sos_falg_add();
+ }
}
static void WatchFinishHandle(void)
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "??????????????????????");
}
g_phoneStatus = PHONE_SINGLE_STATUS;
+
+ if(get_falg_SOS())
+ {
+ sos_falg_add();
+ }
}
void CAT1_ChangeStatusScreendisplay(int lastStatus)
void CallerLogModel::SetCallStatus(bool status)
{
callStatus = status;
+ if(status)
+ sos_falg_clean();
}
bool CallerLogModel::GetCallStatus()
#include "common/key_code.h"
#include <custom_utils.h>
#include "gfx_utils/mem_check.h"
+#include "ConfigModel.h"
namespace OHOS
{
}
else
{
+ uapi_setScreenBrightness(ConfigModel::GetInstance()->GetBrightness());//滑动到手电筒设置页面需要将亮度恢复到ConfigModel中设置的亮度值
FlashlightModel::GetInstance().FlashlightStopTimer();
ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
}
#include "health_service.h"
-#include "bloodoxygen/include/BloodOxygenModel.h"
+#include <iostream>
+#include "wearable_log.h"
#include "cJSON.h"
+#include <sys/stat.h>
+#include <ctime>
+#include "kv_store.h"
#include "custom_utils.h"
#include "custom_runtime.h"
#include <fstream>
-#include <iostream>
#include <sstream>
#include <string>
#include <cstdint>
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
"mkdir HEALTH_JSON_PATH_OXYGEN is error");
return false;
+ }
+ }
+
+ return true;
+ }
+
+ /*生成bin*/
+ std::string GetBinFilePath(uint8_t type)
+ {
+ std::string currentDate = GetCurrentDate();
+ const char *healthTypePath = (type == HEALTH_TYPE_HEART) ? HEALTH_JSON_PATH_HEART : HEALTH_JSON_PATH_OXYGEN;
+
+ return healthTypePath + currentDate + ".bin";
}
- }
/* --------------------------------- json操作 --------------------------------- */
static constexpr const char *HEART_JSON_PATH = "/user/userdata/health/heart.json";
HeartModel::GetInstance()->ClearDisplayData();
BloodOxygenModel::GetInstance()->ClearDisplayData();
-/* --------------------------------- json操作 ---------------------------------
- */
-static constexpr const char *HEART_JSON_PATH =
- "/user/userdata/health/heart.json";
-static constexpr const char *BLOOD_JSON_PATH =
- "/user/userdata/health/blood.json";
-
-// 读取血氧数据
-BloodOxygenData *HealthService::ReadBloodOxygenData() {
- // 判断文件夹是否存在
- if (!CreateHealthFolder()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
- return nullptr;
- }
-
- // 读取文件
- std::ifstream inFile(BLOOD_JSON_PATH);
- if (!inFile.is_open()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open JSON file");
- return nullptr;
- }
-
- // 读取文件内容到字符串
- std::stringstream buffer;
- buffer << inFile.rdbuf();
- std::string jsonDataString = buffer.str();
- const char *jsonData = jsonDataString.c_str();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData: %s", jsonData);
-
- // 关闭文件
- inFile.close();
-
- if (jsonDataString.empty()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonDataString is empty");
- return nullptr;
- }
-
- cJSON *oxygen_root = cJSON_Parse(jsonData);
- if (oxygen_root == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "oxygen_root is empty");
- return nullptr;
- }
-
- BloodOxygenData *data = new BloodOxygenData();
-
- cJSON *value_item = cJSON_GetObjectItem(oxygen_root, "value");
- cJSON *timestamp_item = cJSON_GetObjectItem(oxygen_root, "timestamp");
-
- if (value_item && timestamp_item) {
- data->SPO2 = value_item->valueint;
- data->timestamp = timestamp_item->valuedouble;
- } else {
- // 读取的数据异常
- cJSON_Delete(oxygen_root);
- delete data;
- return nullptr;
- }
- cJSON_Delete(oxygen_root);
- return data;
-}
-// 读取心率数据
-HeartRateData *HealthService::ReadHeartRateData() {
- // 判断文件夹是否存在
- if (!CreateHealthFolder()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
- return nullptr;
- }
-
- // 读取文件
- std::ifstream inFile(HEART_JSON_PATH);
- if (!inFile.is_open()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open JSON file");
- // 创建一个默认值为 0的数据 存储到json里面 ?
- return nullptr;
- }
-
- // 读取文件内容到字符串
- std::stringstream buffer;
- buffer << inFile.rdbuf();
- std::string jsonDataString = buffer.str();
- const char *jsonData = jsonDataString.c_str();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData: %s", jsonData);
-
- // 关闭文件
- inFile.close();
-
- if (jsonDataString.empty()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonDataString is empty");
- return nullptr;
- }
-
- cJSON *heart_root = cJSON_Parse(jsonData);
- if (heart_root == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heart_root is empty");
- return nullptr;
- }
-
- HeartRateData *data = new HeartRateData();
-
- cJSON *value_item = cJSON_GetObjectItem(heart_root, "value");
- cJSON *timestamp_item = cJSON_GetObjectItem(heart_root, "timestamp");
-
- if (value_item && timestamp_item) {
- data->Heart = value_item->valueint;
- data->timestamp = timestamp_item->valuedouble;
- } else {
- // 读取的数据异常
- cJSON_Delete(heart_root);
- delete data;
- return nullptr;
- }
- cJSON_Delete(heart_root);
- return data;
-}
-// 保存血氧数据
-bool HealthService::UpdateHealthData(const BloodOxygenData &data) {
- // 判断文件夹是否存在
- if (!CreateHealthFolder()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
- return false;
- }
-
- // 判断文件是否存在 不存在即创建 并打开以输出模式
- std::ofstream outFile(BLOOD_JSON_PATH, std::ios::trunc);
- if (!outFile.is_open()) {
- // 文件创建失败
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "Failed to create or open JSON file for writing");
- return false;
- }
-
- // 创建一个 JSON 对象
- cJSON *oxygen_root = cJSON_CreateObject();
- if (oxygen_root == NULL) {
- outFile.close();
- return false;
- }
-
- cJSON_AddItemToObject(oxygen_root, "value", cJSON_CreateNumber(data.SPO2));
- cJSON_AddItemToObject(oxygen_root, "timestamp",
- cJSON_CreateNumber(data.timestamp));
-
- char *jsonData = cJSON_Print(oxygen_root);
- if (jsonData == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data");
- cJSON_free(oxygen_root);
- outFile.close();
- return false;
- }
-
- // 写入 JSON 数据到文件
- outFile << jsonData;
-
- cJSON_free(oxygen_root);
- free(jsonData);
- outFile.close();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData SPO2 JSON is ok");
-
- /* 存储bin文件[协议使用] */
- std::string binFilePath = GetBinFilePath(HEALTH_TYPE_OXYGEN);
- FILE *fp = fopen(binFilePath.c_str(), "ab+");
- if (fp == NULL) {
- return false;
- }
-
- fwrite(&data.timestamp, 4, 1, fp);
- fwrite(&data.SPO2, 1, 1, fp);
-
- fclose(fp);
-
- return true;
-}
-
-// 存储心率
-bool HealthService::UpdateHealthData(const HeartRateData &data) {
- // 判断文件夹是否存在
- if (!CreateHealthFolder()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CreateHealthFolder file");
- return false;
- }
-
- // 判断文件是否存在 不存在即创建 并打开以输出模式
- std::ofstream outFile(HEART_JSON_PATH, std::ios::trunc);
- if (!outFile.is_open()) {
- // 文件创建失败
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
- "Failed to create or open JSON file for writing");
- return false;
- }
-
- // 创建一个 JSON 对象
- cJSON *heart_root = cJSON_CreateObject();
- if (heart_root == NULL) {
- outFile.close();
- return false;
- }
-
- cJSON_AddItemToObject(heart_root, "value", cJSON_CreateNumber(data.Heart));
- cJSON_AddItemToObject(heart_root, "timestamp",
- cJSON_CreateNumber(data.timestamp));
-
- char *jsonData = cJSON_Print(heart_root);
- if (jsonData == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to generate JSON data");
- cJSON_free(heart_root);
- outFile.close();
- return false;
- }
-
- // 写入 JSON 数据到文件
- outFile << jsonData;
-
- cJSON_free(heart_root);
- free(jsonData);
- outFile.close();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHealthData Heart JSON is ok");
-
- // 写入文件到当天历史数据
- UpdateHourlyHeartRate(data.timestamp, data.Heart);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateHourlyHeartRate is ok");
-
- /* 存储bin文件[协议使用] */
- std::string binFilePath = GetBinFilePath(HEALTH_TYPE_HEART);
- FILE *fp = fopen(binFilePath.c_str(), "ab+");
- if (fp == NULL) {
- return false;
- }
-
- fwrite(&data.timestamp, 4, 1, fp);
- fwrite(&data.Heart, 1, 1, fp);
-
- fclose(fp);
-
- return true;
-}
-// 清空健康数据
-bool HealthService::CleanHealthData() {
- ClearHourlyHeartRates();
- HeartModel::GetInstance()->ClearDisplayData();
- BloodOxygenModel::GetInstance()->ClearDisplayData();
-
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CleanHealthData is ok");
- return true;
-}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CleanHealthData is ok");
+ return true;
+ }
-HealthState HealthService::GetHealthCurrent() { return healthState_; }
-void HealthService::SetHealthCurrent(HealthState healthState) {
- healthState_ = healthState;
-}
-/* ------------------------------- 心率当天历史数据处理
- * ------------------------------ */
-static constexpr const char *HEART_DATA_PATH =
- "/user/userdata/health/heart_history.bin";
-bool HealthService::LoadDailyHeartRate()
-{
- // 初始化心率数组为 0
- ClearHourlyHeartRates();
+ HealthState HealthService::GetHealthCurrent()
+ {
+ return healthState_;
+ }
+ void HealthService::SetHealthCurrent(HealthState healthState)
+ {
+ healthState_ = healthState;
+ }
+ /* ------------------------------- 心率当天历史数据处理 ------------------------------ */
+ static constexpr const char *HEART_DATA_PATH = "/user/userdata/health/heart_history.bin";
+ bool HealthService::LoadDailyHeartRate()
+ {
+ // 初始化心率数组为 0
+ ClearHourlyHeartRates();
// 获取当前时间
time_t currentTime = time(nullptr);
}
dailyHeartRates[i] = heartRate;
- // 打印心率数据
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Hour %d: Heart Rate %d", i, heartRate);
- }
-
- // 计算最大和最小心率
- int maxHeartRate = dailyHeartRates[0];
- int minHeartRate = dailyHeartRates[0];
-
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "maxHeartRate %d: minHeartRate %d", minHeartRate, maxHeartRate);
-
- for (int i = 1; i < MAX_HOURS; ++i)
- {
- if (dailyHeartRates[i] > maxHeartRate)
- {
- maxHeartRate = dailyHeartRates[i];
- }
- if ((minHeartRate == 0 && dailyHeartRates[i] != 0)||(dailyHeartRates[i] < minHeartRate && dailyHeartRates[i] != 0))
- {
- minHeartRate = dailyHeartRates[i];
- }
- }
-
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "for maxHeartRate %d: minHeartRate %d", minHeartRate, maxHeartRate);
-
- // 设置最大和最小心率
- HeartModel::GetInstance()->SetTopAndBottom(maxHeartRate, minHeartRate);
-
- file.close();
- return true; // 成功读取
- }
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "************************************************");
- }
+ // 打印心率数据
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Hour %d: Heart Rate %d", i, heartRate);
+ }
+ file.close();
+ return true; // 成功读取
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "************************************************");
+ }
// 如果不是同一天,关闭文件
file.close();
std::string GetCheckString();\r
uint16_t *GetArrayData();\r
void SetArrayData();\r
- void SetTopAndBottom(int maxheart,int minheart);\r
- void UpdateTopAndBottom(int heart);\r
+\r
private:\r
HealthAllDatas healthDatas;\r
uint16_t pretime{0};\r
currentheart = displayheart; // 更新当前心率\r
valid_counter_++; // 增加有效计数器\r
disvalid_counter_ = 0; // 清空无效计数器\r
+\r
+ // 更新最大和最小心率\r
+ displayheart_max =\r
+ (displayheart_max < displayheart ? displayheart : displayheart_max);\r
+\r
+ // 确保最小心率的第一次赋值大于50\r
+ if (displayheart_min == 0 && displayheart > MIN_DISPLAY_HEART) {\r
+ displayheart_min = displayheart; // 初始化最小心率\r
+ } else {\r
+ displayheart_min =\r
+ (displayheart_min > displayheart && displayheart > MIN_DISPLAY_HEART)\r
+ ? displayheart\r
+ : displayheart_min;\r
+ }\r
} else {\r
disvalid_counter_++; // 增加无效计数器\r
valid_counter_ = 0; // 清零有效计数器\r
"检测结果:成功 valid_counter:%d currentheart:%d",\r
valid_counter_, currentheart);\r
SetResult(HeartResult::SUCCESS); // 标记为成功检测\r
- UpdateTopAndBottom(currentheart);\r
Heart_Stop();\r
return;\r
}\r
sleepCardView->SetCurrentPage(0);
}
}
+ if (SleepModel::GetInstance().CheckSleepTime()) {
+ //通知消息更新
+ GraphicService::GetInstance()->PostGraphicEvent(
+ std::bind(&OHOS::SleepModel::UpdateSleepView, &OHOS::SleepModel::GetInstance()));
+ }
}
/*天气卡片*/
void MainPresenterSample::ResetWeatherCardView()
// 设置图标可见性
sIcon.SetVisible(!itemInfo.read);
- printf("MessageItemView itemInfo %d %s %s\r\n", itemInfo.read, itemInfo.labeltitle.c_str(), itemInfo.labeldetails.c_str(), itemInfo.labeltime.c_str());
- printf("MessageItemView size %d %d %d\r\n", label_length, item_length, time_top);
+ // printf("MessageItemView itemInfo %d %s %s\r\n", itemInfo.read, itemInfo.labeltitle.c_str(), itemInfo.labeldetails.c_str(), itemInfo.labeltime.c_str());
+ // printf("MessageItemView size %d %d %d\r\n", label_length, item_length, time_top);
}
void MessageItemView::TearDownChild()
{
#include <string>
#include "cJSON.h"
#include "wearable_log.h"
+
#include "custom_utils.h"
#include <algorithm>
+#include <chrono>
#include <cstring>
#include <dirent.h>
#include <map>
#endif
static void Notify(void *args, const Topic topic, Request *request);
- using namespace OHOS;
+using namespace OHOS;
+
+Subscriber MessageSubscirber = {
+ .identity = NULL,
+ .args = NULL,
+ .Notify = Notify,
+};
+
+void MessageSubscribeTopic(Topic topic) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "stepsubscribeTopic, topic=%u", topic);
+ BroadcastApi *broadcastApi = NULL;
+ IUnknown *api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME,
+ BROADCAST_FEATURE_NAME);
+ if (api == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "stepsubscribeTopic, GetFeatureApi failed");
+ return;
+ }
+ int result =
+ api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);
+ if (result != 0 || broadcastApi == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "stepsubscribeTopic, QueryInterface failed");
+ return;
+ }
+ broadcastApi->SubscribeTopic((IUnknown *)broadcastApi, topic,
+ &MessageSubscirber);
+ broadcastApi->Release((IUnknown *)broadcastApi);
+}
+
+void MessageUnsubscribeTopic(Topic topic) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MessageUnsubscribeTopic, topic=%u",
+ topic);
+ BroadcastApi *broadcastApi = NULL;
+ IUnknown *api = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE_NAME,
+ BROADCAST_FEATURE_NAME);
+ if (api == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "MessageUnsubscribeTopic, GetFeatureApi failed");
+ return;
+ }
+ int result =
+ api->QueryInterface(api, DEFAULT_VERSION, (void **)&broadcastApi);
+ if (result != 0 || broadcastApi == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+ "MessageUnsubscribeTopic, QueryInterface failed");
+ return;
+ }
+ broadcastApi->UnsubscribeTopic((IUnknown *)broadcastApi, topic,
+ &MessageSubscirber);
+ broadcastApi->Release((IUnknown *)broadcastApi);
+}
// 存储消息更新的定时器
static std::chrono::milliseconds updateDelay(500); // 设置更新延迟,0.5s
bool get_phone_addrss_name(char *name,const char *phone,uint8_t *sex)
{
+
+ for(int i=0;i<get_sos_number_count();i++)
+ {
+ if(addrss_strcmp((char *)phone,sos_number_data[i].number))
+ {
+ strcpy_s(name,NAME_LEN+1,sos_number_data[i].name);
+ if(sex!=NULL)
+ *sex= sos_number_data[i].sex==0 ? 1:2;
+ return true;
+ }
+ }
+
+
for(int i=0;i<addressbook_t.num;i++)
{
//if(strcmp(phone,addressbook_t.Contact_t[i].phone_number_t[0].number)==0)
recordList->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。\r
recordList->SetDragACCLevel(5);\r
recordList->SetSwipeACCLevel(800); /*设置手指抬起屏幕后的补偿距离。*/\r
- recordList->SetReboundSize(30);\r
- recordList->SetScrollBlankSize(20);\r
+ // recordList->SetReboundSize(30);\r
+ // recordList->SetScrollBlankSize(20);\r
recordList->SetIntercept(true); // 设置是否拦截输入事件。如果被截获,视图在本地处理后不会将输入事件传递给父视图。\r
recordList->SetAdapter(p_RecordingListAdapter);\r
RecordListScrollView->Add(recordList);\r
{
item = static_cast<RecordingListitemView *>(inView);
}
+ item->SetViewIndex(index);
item->SetItemInfo(itemData);
item->SetOnClickListener(itemClickListener);
- item->SetViewIndex(index);
return item;
}
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListitemView.cpp
*/
#include "record/include/RecordingListitemView.h"
+#include "record/include/RecordingModel.h"
#include "wearable_log.h"
namespace OHOS
m_recordId.SetText(itemInfo.recordId.c_str());
m_recordTotalTime.SetText(itemInfo.recordTotalTime);
m_recordTime.SetText(itemInfo.recordTime);
+ //·ÀÖ¹listÖÐÔªËØ³¬¹ý3¸öºó×îºóÒ»¸ö±»ÕÚס£¬ÇÒ½öÔÚ×îºóÒ»¸öÔªËØÉèÖÃÆä¸ß¶ÈΪ160
+ if (RecordingModel::GetInstance()->GetRecordingListNum() > 2 && GetViewIndex() == RecordingModel::GetInstance()->GetRecordingListNum() - 1)
+ {
+ SetHeight(160);
+ }
+ else
+ {
+ SetHeight(120);
+ }
}
void RecordingListitemView::SetUpChild()
void calculateHeartrateTotal(void);
void ResumeStatus();
- void RT_StartTimer(uint32_t interval);
+ void RT_StartTimer(uint64_t interval);
void RT_StopTimer(void);
int GetRespiratoryTrainingSelectTime();
#include <sstream>
#include <thread>
#include <unordered_map>
+#include <custom_runtime.h>
namespace OHOS
{
// 声明定时器变量
{
int time = RespiratoryTrainingModel::GetInstance().GetRespiratoryTrainingSelectTime();
uint64_t time_;
- switch (time_)
+ switch (time)
{
case 1:
time_ = ONE_MIN;
heartTotal = 0;
count = 0;
HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE); // 关闭心率检测
+ uapi_dev_runtime_set_respiratory_training_status(0); // 如果直接退出也要设置为0
}
/* -------------------------------------------------------------------------- */
/*定时器到期时的处理*/
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_RespiratoryTrainingView is nullptr!!");
return;
}
+ uapi_dev_runtime_set_respiratory_training_status(0); // 训练结束runtime设置为0
RespiratoryTrainingModel::GetInstance().RT_StopTimer(); // 停止定时器
RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes(); // 呼吸训练次数加1
p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop(); // 关闭呼吸动画
* @brief 开启定时器函数
* @param interval 时间间隔,单位ms
*/
- void RespiratoryTrainingModel::RT_StartTimer(uint32_t interval)
+ void RespiratoryTrainingModel::RT_StartTimer(uint64_t interval)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingModel::RT_StartTimer");
/* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
void RespiratoryTrainingPresenter::OnStart()
{
Presenter<RespiratoryTrainingView>::OnStart();
- ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
+ // ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
}
void RespiratoryTrainingPresenter::OnPause(void)
#include "respiratorytraining/include/RespiratoryTrainingModel.h"
#include "heartrate/include/HeartModel.h"
#include "vibrator_service.h"
+#include <custom_runtime.h>
+#include <custom_utils.h>
namespace OHOS
{
RespiratoryTrainingStartNote_->SetVisible(true);
RespiratoryTrainingImg_->SetVisible(true);
}
-
+ ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);//开始训练后常亮屏
+ uapi_dev_runtime_set_respiratory_training_status(1); // 训练开始runtime设置为1
StartRespiratoryTraining(); // 开始呼吸训练
HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::INITIATIVE); // 开启心率检测
RespiratoryTrainingModel::GetInstance().RT_StartTimer(RespiratoryTrainingModel::GetInstance().GetRespiratoryTrainingTime()); // 开启定时器
bool SaveSleepData(const SleepDataUI &data); // 更新睡眠数据
bool DeleteSleepData(); // 清空睡眠文件
+ bool CheckSleepTime();//对睡眠时间进行校验
+
void UpdateSleepView();
std::string GetUpdateSleepTime();
int goal_total_time = 0;
int nap_total_time = 0;
+ uint32_t sleep_update_time{0};
SLEEPSTATE sleepstate_ = SLEEPSTATE::WAKE;
int CradId = 0; // 主界面状态
{
sleep_time_str.clear();
// 获取睡眠最新时间
- uint32_t sleep_time = get_sleep_update_timestamp();
+ sleep_update_time = get_sleep_update_timestamp();
// 获取时间戳
- update_time_info(sleep_time, sleep_time_str);
+ update_time_info(sleep_update_time, sleep_time_str);
return sleep_time_str;
}
+ //校验时间更新
+ bool SleepModel::CheckSleepTime()
+ {
+ // 获取睡眠最新时间
+ if (sleep_update_time != get_sleep_update_timestamp()) {
+ return true;
+ }
+ return false;
+ }
void SleepModel::update_sleep(SLEEP_T *data)
{
if (data == nullptr)
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "sportdata->goaldegree %d",
sportdata->goaldegree);
- if (sportdata->goaldegree == 100) {
+ if (sportdata->goaldegree >= 100) { //测试
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentdata%d", currentdata);
uapi_set_screen_on_api(); // 亮屏检测
if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb()) {
ui_api_vibrate_once_func();
}
TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true);
- TraingCardView::GetInstance()->GetAnimator()->Start();
+ if (TraingCardView::GetInstance()->GetAnimator()) {
+ TraingCardView::GetInstance()->GetAnimator()->Start();
+ }
Gettagstuats = true;
}
}
group->Add(butDistance);\r
group->Add(butSteps);\r
\r
- InitLabelExt(labelDistance, 100, 390, 150, 35, "label3", STR_DISTANCE, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
- InitLabelExt(labelSteps, 100, 510, 150, 35, "label5", STR_STEP_NUMBER, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ InitRollLabel(labelDistance, 130, 390, 150, 35, "label3", STR_DISTANCE, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ InitRollLabel(labelSteps, 130, 510, 150, 35, "label5", STR_STEP_NUMBER,\r
+ DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ \r
+ labelDistance->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);\r
+ labelSteps->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);\r
+ \r
group->Add(labelDistance);\r
group->Add(labelSteps);\r
\r
}\r
// 初始化Lable\r
UIResourceTextId sportid = TraingModel::GetInstance()->GetSportEvent();\r
- InitLabelExt(labeltitle, 83, 50, 300, 35, "label1", sportid, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ InitRollLabel(labeltitle, 83, 50, 300, 35, "label1", sportid, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
group->Add(labeltitle);\r
\r
// 初始化Button\r
group->Add(butTime);\r
group->Add(butKcal);\r
\r
- InitLabelExt(labelTime, 100, 150, 150, 35, "label2", STR_DURATION, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
- InitLabelExt(labelKcal, 100, 270, 150, 35, "label4", STR_CALORIE, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ InitRollLabel(labelTime, 130, 150, 150, 35, "label2", STR_DURATION, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ InitRollLabel(labelKcal, 130, 270, 150, 35, "label4", STR_CALORIE,\r
+ DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ \r
+ labelTime->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);\r
+ labelKcal->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);\r
+\r
group->Add(labelTime);\r
group->Add(labelKcal);\r
\r
SetCaluliScrollView->SetVerticalScrollState(false); // 禁止垂直滑动
/* -------------------------------------------------------------------------- */
// 初始化Lable
- InitLabelExt(labeltitle_, 83, 50, 300, 35, "label1",STR_CALORIE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
+ InitRollLabel(labeltitle_, 83, 50, 300, 35, "label1",STR_CALORIE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
SetCaluliScrollView->Add(labeltitle_);
// 初始化UIPicker
SetMileScrollView->SetVerticalScrollState(false); // 禁止垂直滑动
/* -------------------------------------------------------------------------- */
// 初始化Lable
- InitLabelExt(labeltitle_, 83, 50, 300, 35, "label1",STR_RANGE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
+ InitRollLabel(labeltitle_, 83, 50, 300, 35, "label1",STR_RANGE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
SetMileScrollView->Add(labeltitle_);
// 初始化UIPicker
SetStepScrollView->SetVerticalScrollState(false); // 禁止垂直滑动
/* -------------------------------------------------------------------------- */
// 初始化Lable
- InitLabelExt(labeltitle_, 83, 50, 300, 35, "label1", STR_STEP_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
+ InitRollLabel(labeltitle_, 83, 50, 300, 35, "label1", STR_STEP_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
SetStepScrollView->Add(labeltitle_);
// 初始化UIPicker
SetTimeScrollView->SetVerticalScrollState(false); // 禁止垂直滑动
/* -------------------------------------------------------------------------- */
// 初始化Lable
- InitLabelExt(labeltitle_, 83, 50, 300, 35, "label1", STR_DURATION_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
+ InitRollLabel(labeltitle_, 83, 50, 300, 35, "label1", STR_DURATION_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
SetTimeScrollView->Add(labeltitle_);
// 初始化UIPicker
public UIView::OnClickListener,\r
public UIView::OnDragListener,\r
public UISwipeView::OnSwipeListener,\r
+ public RootView::OnKeyActListener,\r
public ModelListenerSample {\r
public:\r
TraingCardPresenter();\r
bool OnClick(UIView &view, const ClickEvent &event) override;\r
bool OnDrag(UIView &view, const DragEvent &event) override;\r
void OnSwipe(UISwipeView &view) override;\r
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件\r
+\r
int tag_ = 0;\r
bool opensensorstuats{false};\r
// bool OnDragEnd(UIView& view, const DragEvent& event) override;\r
// 确定达到目标\r
{BUTTONWINOK,\r
[&]() {\r
+ TraingCardView::GetInstance()->GetAnimator()->Stop();\r
TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup,\r
false);\r
- TraingCardView::GetInstance()->GetAnimator()->Stop();\r
}},\r
// 确定心率提醒\r
{BUTTONNOTE,\r
UNUSED(view);\r
return;\r
}\r
+bool TraingCardPresenter::OnKeyAct(UIView &view, const KeyEvent &event) {\r
+ /*消耗按键事件*/\r
+ return true;\r
+}\r
/* -------------------------------- 协议发起运动处理\r
* -------------------------------- */\r
\r
}\r
\r
// 仅在一般状态下允许开始运动\r
- if (cmdstate == ExerciseState::Start &&\r
- currentState == ExerciseState::General) {\r
- if (TraingCardView::GetInstance() == nullptr) {\r
- uapi_set_screen_on_api(); // 亮屏\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
- // 设置目标类型和项目有且只有一次\r
- switch (cmd->sportType) {\r
- case 0:\r
- TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING);\r
- OpenSensor(ExerciseClass::OUTDOOR);\r
- break;\r
- case 1:\r
- TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING);\r
- OpenSensor(ExerciseClass::OUTDOOR);\r
- break;\r
- case 2:\r
- TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);\r
- OpenSensor(ExerciseClass::FREE_TRAINING);\r
- break;\r
- default:\r
- break;\r
+ if (cmdstate == ExerciseState::Start) {\r
+ if ((currentState == ExerciseState::General)) {\r
+ if (TraingCardView::GetInstance() == nullptr) {\r
+ uapi_set_screen_on_api(); // 亮屏\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
+ // 设置目标类型和项目有且只有一次\r
+ switch (cmd->sportType) {\r
+ case 0:\r
+ TraingModel::GetInstance()->SetSportEvent(\r
+ STR_EXERCISE_OUTDOORWALKING);\r
+ OpenSensor(ExerciseClass::OUTDOOR);\r
+ break;\r
+ case 1:\r
+ TraingModel::GetInstance()->SetSportEvent(\r
+ STR_EXERCISE_OUTDOORRUNNING);\r
+ OpenSensor(ExerciseClass::OUTDOOR);\r
+ break;\r
+ case 2:\r
+ TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);\r
+ OpenSensor(ExerciseClass::FREE_TRAINING);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
}\r
+ reply_APP_OpenSportModeCmd(true);\r
+ handleStartState();\r
+ return true;\r
+ } else {\r
+ reply_APP_OpenSportModeCmd(false);\r
+ // return false;\r
}\r
-\r
- handleStartState();\r
- return true;\r
}\r
-\r
// 仅在运动状态为开始或继续时允许暂停\r
if (cmdstate == ExerciseState::Pause) {\r
if (currentState == ExerciseState::Start ||\r
cmd->sportType, cmd->controlmd, cmd->sportTagType,\r
cmd->sportTag);\r
\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "由于状态限制,命令未执行。\r\n");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+ "由于状态限制,命令未执行 当前状态 %d。\r\n", currentState);\r
return false; // 没有执行任何命令\r
}\r
\r
void TraingCardPresenter::handleEndState() {\r
TraingModel::GetInstance()->SetSportState(ExerciseState::End);\r
ControlSensor(ExerciseState::End);\r
+ uapi_set_screen_on_api(); // 亮屏\r
#if DATATEST\r
NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
return;\r
static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;\r
static const uint32_t CARD_PAGE_COLOR = 0xffd0d0d0;\r
\r
+// 动态刷新设置 \r
+static constexpr uint16_t IMAGE_SIZE_X = 120; \r
+static constexpr uint16_t IMAGE_SIZE_Y = 120; \r
+static constexpr uint16_t IMAGE_POSITION_X = 173; \r
+static constexpr uint16_t IMAGE_POSITION_Y = 100; \r
+static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SIZE = 94; \r
+static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SPEED = 30; \r
+\r
+static ImageAnimatorInfo g_imageAnimatorInfo_trainingwin[94] = { \r
+ {PNG_TRAINING_WIN_IMAGE_01, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_02, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_03, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_04, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_05, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_06, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_07, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_08, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_09, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_30, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_31, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_32, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_33, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_34, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_35, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_36, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_37, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_38, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_39, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_40, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_41, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_42, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_43, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_44, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_45, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_46, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_47, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_48, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_49, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_50, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_51, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_52, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_53, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_54, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_55, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_56, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_57, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_58, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_59, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_60, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_61, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_62, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_63, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_64, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_65, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_66, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_67, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_68, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_69, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_70, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_71, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_72, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_73, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_74, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_75, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_76, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_77, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_78, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_79, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_80, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_81, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_82, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_83, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_84, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_85, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_86, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_87, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_88, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_89, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_90, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_91, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_92, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_93, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+ {PNG_TRAINING_WIN_IMAGE_94, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE_X, IMAGE_SIZE_Y, IMG_SRC_FILE_PATH}, \r
+};\r
+\r
static TraingCardView *g_pTraingCardView{nullptr};\r
\r
TraingCardView::TraingCardView() {\r
}\r
\r
TraingCardView::~TraingCardView() {\r
- imageAnimator->Stop();\r
- FreeImageInfoArray(winimageInfos, winbasePath.c_str(), 94);\r
- ReleaseImageAnimatorSource(winimageAnimatorInfo, 94);\r
+\r
DeInit();\r
\r
g_pTraingCardView = nullptr;\r
}\r
swipe_->SetOnSwipeListener(onSwipeListener);\r
\r
+ RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::InitPage over");\r
}\r
\r
buttonnote_ = nullptr;\r
\r
/*动画*/\r
- delete imageAnimator;\r
- imageAnimator = nullptr;\r
+ if (imageAnimator) {\r
+ imageAnimator->Stop();\r
+ delete imageAnimator;\r
+ imageAnimator = nullptr;\r
+ }\r
\r
/*卡片*/\r
delete controlview_;\r
controlview_ = nullptr;\r
delete dataallview_;\r
dataallview_ = nullptr;\r
- // delete DetailView;\r
- // DetailView = nullptr;\r
- delete swipe_;\r
delete musicview_;\r
musicview_ = nullptr;\r
+\r
/*弹窗*/\r
delete endView;\r
endView = nullptr;\r
delete heartView;\r
heartView = nullptr;\r
\r
+ delete swipe_;\r
swipe_ = nullptr;\r
}\r
UICardPage *TraingCardView::InitControlPage(void) {\r
break;\r
}\r
case ExerciseTag::Steps:\r
+ tagString = tagString + "steps";\r
break;\r
default:\r
break;\r
getView->Add(labeltag);\r
\r
// 初始化图片数组以及动画\r
- winimageInfos = CreateImageInfoArray(winbasePath.c_str(), 94);\r
- InitImageAnimatorSource(imageAnimator, winimageAnimatorInfo, winimageInfos,\r
- 94, 173, 100, 120, 120, "imageAnimator1", 10);\r
+ if (imageAnimator == nullptr) {\r
+ imageAnimator = new UIImageAnimatorView();\r
+ if (imageAnimator == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
+ "AssistantAnswerView::new UIImageAnimatorView fail");\r
+ return;\r
+ }\r
+ }\r
+ imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_trainingwin,\r
+ DETECTION_IMAGE_ANIMATORVIEW_SIZE,\r
+ DETECTION_IMAGE_ANIMATORVIEW_SPEED);\r
+ imageAnimator->SetRepeat(true);\r
+ // imageAnimator->Start();\r
+\r
getView->Add(imageAnimator);\r
}\r
\r
\r
void TraingCardView::OnStop() {\r
View<TraingCardPresenter>::OnStop();\r
+ container_ = nullptr;\r
RootView::GetInstance()->RemoveAll();\r
return;\r
}\r
TraingMoreModel(const TraingMoreModel &);
TraingMoreModel &operator=(const TraingMoreModel &);
virtual ~TraingMoreModel();
- static const uint16_t TraingMoreListMaxNum = 7;
+ static const uint16_t TraingMoreListMaxNum = 9;
TraingMoreItem TraingMores[TraingMoreListMaxNum] = {VIEW_INVALID, STR_ICE_SPORTS, nullptr};
// std::map<int, AppViewId> TraingMoreIdToViewId;
bool btConnectStatus{false};
void TraingMoreModel::InitTraingMoreListItem()
{
- TraingMores[0] = {VIEW_TRAININGFITNESS, STR_EXERCISE_LIST, FITNESS_IMAGE};
- TraingMores[1] = {VIEW_TRAININGDANCE, STR_DANCING_LIST, DANCE_IMAGE};
- TraingMores[2] = {VIEW_TRAININGREST, STR_RECREATIONAL_LIST, REST_IMAGE};
- TraingMores[3] = {VIEW_TRAININGBALL, STR_BALL_LIST, BALL_IMAGE};
+ int index = 0;
+ TraingMores[index++] = {VIEW_TRAININGMORE, STR_TRAINING, nullptr};
+ TraingMores[index++] = {VIEW_TRAININGFITNESS, STR_EXERCISE_LIST, FITNESS_IMAGE};
+ TraingMores[index++] = {VIEW_TRAININGDANCE, STR_DANCING_LIST, DANCE_IMAGE};
+ TraingMores[index++] = {VIEW_TRAININGREST, STR_RECREATIONAL_LIST, REST_IMAGE};
+ TraingMores[index++] = {VIEW_TRAININGBALL, STR_BALL_LIST, BALL_IMAGE};
// TraingMores[4] = {VIEW_TRAININGAQUATIC, STR_WATER_LIST, SWIMMING_IMAGE};水上运动
- TraingMores[4] = {VIEW_TRAININGICE, STR_ICE_LIST, ICE_IMAGE};
- TraingMores[5] = {VIEW_TRAININGLIMIT, STR_EXTREME_LIST, LIMIT_IMAGE};
- TraingMores[6] = {VIEW_TRAININGOTHER, STR_OTHER_LIST, OTHER_IMAGE};
+ TraingMores[index++] = {VIEW_TRAININGICE, STR_ICE_LIST, ICE_IMAGE};
+ TraingMores[index++] = {VIEW_TRAININGLIMIT, STR_EXTREME_LIST, LIMIT_IMAGE};
+ TraingMores[index++] = {VIEW_TRAININGOTHER, STR_OTHER_LIST, OTHER_IMAGE};
+ TraingMores[index++] = {VIEW_INVALID, STR_TRAINING, nullptr};
}
const TraingMoreItem *TraingMoreModel::GetTraingMorelistItems() const
if(id!=VIEW_INCOMING_CALL)
make_phone_push(id);
}
- showsStackSliceId();
+ // showsStackSliceId();
/*
if (GetCurSliceId() == targetSliceId) {
return;
GraphicService::GetInstance()->PostGraphicEvent(std::bind(&Ability::PostChangeSlice, this, targetSliceId,
type, priority));
#endif
+ } else {
+ GRAPHIC_LOGE("ChangeSlice failed! targetSliceId = %u, transitionCount_ = %d",
+ targetSliceId, osal_atomic_read(&transitionCount_));
}
}
void Ability::PostChangeSlice(const uint16_t targetSliceId, TransitionType type, const uint16_t priority)
{
-
-#ifdef JS_ENABLE
- ElementName *elementName = OHOS::AbilityMsClient::GetInstance().GetTopAbility();
- if (elementName != nullptr && strcmp(elementName->bundleName, "com.huawei.launcher") != 0) {
- OHOS::AbilityMsClient::GetInstance().ForceStop(elementName->bundleName);
- targetSliceIdFromJS_ = targetSliceId;
- if (type != TransitionType::TRANSITION_INVALID) {
- osal_atomic_dec(&transitionCount_);
- }
- return;
- }
-#endif
/*
1.首先检查当前Slice是否存在,并验证transitionId的有效性。
如果当前存在一个有效的Slice,并且transitionId合法,则调用sliceTransition_的SaveCurrentSnapshot方法保存当前Slice的快照,
printf("*******************next slice id is %d*****************\r\n", targetSliceId);
#endif
// slice页面跳转,先onstop,再onstart.在一个线程同步执行绘制,不会出现闪屏现象
-
+#ifdef JS_ENABLE
+ ElementName *elementName = OHOS::AbilityMsClient::GetInstance().GetTopAbility();
+ if (elementName != nullptr && strcmp(elementName->bundleName, "com.huawei.launcher") != 0)
+ {
+ OHOS::AbilityMsClient::GetInstance().ForceStop(elementName->bundleName);
+ targetSliceIdFromJS_ = targetSliceId;
+ osal_atomic_dec(&transitionCount_);
+ return;
+ }
+#endif
/*
调用StartSlice函数以启动新的指定的Slice。
StartSlice函数内部会先检查是否存在目标Slice的Proxy,并通过Proxy创建新的实例,
#include <stdint.h>
#include <stdio.h>
#include "stdbool.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
#include "bts_le_gap.h"
#include "bts_br_gap.h"
//static char old_time_buf[64]={0};
static uint32_t ancs_msg_index =0;
-//"20240709T093253"
-/* ANCS服务通知属性响应结果回调 */
-static void ble_ancs_client_notification_attr_rsp_cbk(uint8_t client_id, uint16_t conn_id,
- ble_ancs_notification_attr_rsp_t *notify_attr_rsp, errcode_t status)
-{
- if (status == ERRCODE_BT_SUCCESS) {
- printf("[ANCSClientNotifyATTRSPCBK]conn_id:%d status:0x%x notify_uid:%lu\r\n",
- conn_id, status, notify_attr_rsp->notification_uid);
- ble_ancs_attr_rsp_t *node = (ble_ancs_attr_rsp_t *)notify_attr_rsp->attr_rsp_lst.head;
- uint16_t att_num = 1;
- char title_buf[300]={0};
- char msg_buf[300]={0};
- char app_buf[70]={0};
- while (node != NULL) {
- if (node != NULL) {
- printf("[ANCSClientNotifyATTRSPCBK]att id:%d length:%lu att_value:%s\r\n",
- node->att_id, node->att_length, node->att);
- if( node->att_id==1)
- {
- sprintf_s(title_buf,300,"%s",node->att);
- }
- if(node->att_id==3)
- {
- sprintf_s(msg_buf,300,"%s",node->att);
- }
- if(node->att_id==0)
- {
- sprintf_s(app_buf,70,"%s",node->att);
- }
- }
- node = lnext(node);
- if (att_num == notify_attr_rsp->att_num) {
- break;
- }
- att_num = att_num + 1;
- }
-
- printf("ble_ancs_client_notification_attr_rsp_cbk test\r\n");
-
-
- // if(strcmp(old_time_buf,new_msg_buf)!=0)
- // {
- // memset(old_time_buf,0,64);
- // memcpy_s(old_time_buf,64,new_msg_buf,64);
- // printf("ble_ancs_client_notification_attr_rsp_cbk test 2\r\n");
- if(is_filtration_data(app_buf))
- message_data(notify_attr_rsp->notification_uid,0,title_buf,msg_buf,0);
-
-
-
- //}
-
- } else {
- printf("[ANCSClientNotifyATTRSPCBK]conn_id:%d status:0x%x.\r\n",
- conn_id, status);
- }
+/* ANCS服务通知属性响应结果回调 */
+static void ble_ancs_client_notification_attr_rsp_cbk(uint8_t client_id, uint16_t conn_id,
+ ble_ancs_notification_attr_rsp_t *notify_attr_rsp, errcode_t status)
+{
+ if (status == ERRCODE_BT_SUCCESS) {
+ printf("[ANCSClientNotifyATTRSPCBK]conn_id:%d status:0x%x notify_uid:%lu\r\n",
+ conn_id, status, notify_attr_rsp->notification_uid);
+
+ ble_ancs_attr_rsp_t *node = (ble_ancs_attr_rsp_t *)notify_attr_rsp->attr_rsp_lst.head;
+ uint16_t att_num = 1;
+ char title_buf[300] = {0};
+ char msg_buf[300] = {0};
+ char app_buf[70] = {0};
+ time_t timestamp = 0; // 初始化时间戳
+
+ while (node != NULL) {
+ if (node != NULL) {
+ printf("[ANCSClientNotifyATTRSPCBK]att id:%d length:%lu att_value:%s\r\n",
+ node->att_id, node->att_length, node->att);
+
+ if (node->att_id == 1) {
+ sprintf_s(title_buf, 300, "%s", node->att);
+ } else if (node->att_id == 3) {
+ sprintf_s(msg_buf, 300, "%s", node->att);
+ } else if (node->att_id == 0) {
+ sprintf_s(app_buf, 70, "%s", node->att);
+ } else if (node->att_id == 5) {
+ struct tm tm = {0};
+ // 将 node->att 强制转换为 const char *
+ if (strptime((const char *)node->att, "%Y%m%dT%H%M%S", &tm) != NULL) {
+ timestamp = mktime(&tm); // 获取时间戳
+ } else {
+ printf("时间字符串解析失败: %s\r\n", node->att);
+ }
+ }
+ }
+ node = lnext(node);
+ if (att_num == notify_attr_rsp->att_num) {
+ break;
+ }
+ att_num++;
+ }
+
+ printf("ble_ancs_client_notification_attr_rsp_cbk test\r\n");
+
+ // 只有在成功解析时间戳后才进行后续操作
+ if (is_filtration_data(app_buf) && (timestamp >= subscribe_notify_creationTime)) {
+ message_data(notify_attr_rsp->notification_uid, 0, title_buf, msg_buf, 0);
+ }
+
+ } else {
+ printf("[ANCSClientNotifyATTRSPCBK]conn_id:%d status:0x%x.\r\n",
+ conn_id, status);
+ }
}
-
/* ANCS服务应用属性响应结果回调 */
static void ble_ancs_client_app_attr_rsp_cbk(uint8_t client_id, uint16_t conn_id,
ble_ancs_app_attr_rsp_t *app_attr_rsp, errcode_t status)
\r
printf("设置步数:%d %d %d %d \r\n",targetStep,ringOn,vibration,notify);\r
\r
+ set_goal_stepcount(targetStep);\r
+ \r
\r
if(ringOn &&vibration && notify)\r
set_goal_step_notification(1);\r
void reply_APP_OpenSportModeCmd(bool falg)\r
{\r
\r
- ble_data_type type_={0x01,0x06,1,1,1};\r
+ ble_data_type type_={0x01,0x0A,1,1,1};\r
char data[1]={0};\r
if(falg)\r
data[0]=1;\r
TOPIC_EVENT_MESSAGE_UPDATA, //消息更新通知
TOPIC_EVENT_SLEEPNOTE, //睡眠通知
TOPIC_EVENT_DEBUGOUTPUT,//开发调试专用窗口
+ TOPIC_EVENT_ASSISTANT_NOTE,//语音助手结束
TOPIC_END_NUM = 20000,
} TopicNum;
${CMAKE_CURRENT_SOURCE_DIR}/../../fd230app/nativeui/bluetooth/include
${CMAKE_CURRENT_SOURCE_DIR}/../../fd230app/nativelauncher/include
${CMAKE_CURRENT_SOURCE_DIR}/../../fd230app/nativeui/goal/include
+ # ${CMAKE_CURRENT_SOURCE_DIR}/../../fd230app/nativelauncher/include
${CMAKE_CURRENT_SOURCE_DIR}/../../ohos_deps
${CMAKE_CURRENT_SOURCE_DIR}/../../CustomUIComponentTool/uicomponents/
${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
set(SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/msg_center_customer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/msg_center_cmd.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/common/msg_center_common.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/alarm_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/charge_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/makephone_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/message_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/sleep_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/motion_recognition_notification.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/goal_notification.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/debug_output_notification/debug_output_notification_adapter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/debug_output_notification/debug_output_notification_itemview.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/notify/debug_output_notification/debug_output_notification.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/src/notify/goal_notification.cpp
)
else()
set(SOURCES
void sos_falg_clean(void);
+uint8_t get_falg_SOS(void);
+
+
#ifdef __cplusplus
#if __cplusplus
}
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-03-22 09:48:07
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-11 17:22:48
+ * @LastEditTime: 2024-10-09 09:54:34
* @FilePath: /FD230/code/sdk/application/wearable/service/msg_center/include/notify/pairing_notification.h
*/
#ifndef PAIRING_NOTIFICATION_H
void FreeDeviceBindingView(void);
void FreeDeviceUnBindingView(void);
void FreeDeviceUnbindingRequestGroupView(void);
- class PairingViewEventListener : public OHOS::UIView::OnClickListener
+ class PairingViewEventListener : public OHOS::UIView::OnClickListener,public RootView::OnKeyActListener
{
public:
static PairingViewEventListener &GetInstance(void);
bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event) override;
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; // Ôö¼Ó°´¼üʼþ
void SetDeviceName(char *Name);
char *GetDeviceName();
void DeviceUnBindingViewIsVisible(bool state);
{
//unused(topic);
unused(req);
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyMessageProc !");
+ // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "MsgCenterNotifyMessageProc !");
if (CheckPriority(topic)) {
NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_THREE);
NotificationManager::GetInstance()->ShowNotify(showMessageNotify, (uint16_t)topic, true);
const power_display_svr_api_t *display_api = power_display_svr_get_api();
if (display_api)
{
- int brightnessValue = ConfigModel::GetInstance()->GetBrightness();
+ int brightnessValue;
+ if(uapi_dev_runtime_get_saveele_status()) //如果是省电模式状态下退出要把亮度设置为最低
+ {
+ brightnessValue = 51;
+ }
+ else
+ {
+ brightnessValue= ConfigModel::GetInstance()->GetBrightness();
+ }
if (display_api->set_brightness(brightnessValue) != ERRCODE_SUCC)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[FindWatchViewEventListener] resume_brightness fail!");
}
FindWatchViewEventListener::GetInstance().ResumeScreenBrightness();
+ FindWatchViewEventListener::GetInstance().FindWatch_StopTimer();
}
/* ----------------------- FindWatchRingPlayerListener ---------------------- */
#define SOS_TEST_FLAG 0
-#define SOS_HFP_FALG 0
+#define SOS_HFP_FALG 1
#define DIAL_TIME 30
{
if(sos_dail_falg)
{
-
+ printf("sos dial %d\r\n",sos_dail_falg);
#if SOS_TEST_FLAG
if(1)
#else
calldial_event_sendmsg_toUI("SOS");
}
sos_dail_falg++;
- if(sos_dail_falg>=9)
+ if(sos_dail_falg>=OHOS::get_sos_number_count()*3)
{
sos_dail_falg=0;
}
#if SOS_HFP_FALG
else if(uapi_hfp_connect_state())
{
- DialCall((unsigned char *)sos_dail_buf,osal_strlen((const char*)sos_dail_buf));
+ DialCall((unsigned char *)OHOS::get_sos_number(0),osal_strlen((const char*)OHOS::get_sos_number(0)));
sos_dail_falg=1;
}
#endif
if(call_stat==2)
call_stat=1;
PhoneServiceScreenCtr(true);
- sos_falg_clean();
WatchActiveHandle();
break;
case OPERATE_PHONE_HOLD:
return false;
}
DeviceUnbindingRequestGroupView->SetVisible(false);
+ /* -------------------------------------------------------------------------- */
+ RootView::GetInstance()->ClearOnKeyActListener();
+ RootView::GetInstance()->SetOnKeyActListener(this);
+ /* -------------------------------------------------------------------------- */
RootView::GetInstance()->Add(ShutDownImageAnimatorGroupView);
}
ShutDownImageAnimatorView::GetInstance()->ShutDownImageAnimator_Start(3);
return true;
}
+ bool PairingViewEventListener::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件
+ {
+ //消耗按键事件
+ return true;
+ }
+
static UIButton *CreateButton(unsigned int x, unsigned int y, unsigned int w, unsigned int h, const char *imageSrc)
{
UIButton *button = new UIButton();
encoded_hrm[15] = ppg_s_data.green_cur;//绿灯电流\r
encoded_hrm[16] = ppg_s_data.ir_cur;//红外电流\r
\r
- if(uapi_dev_runtime_get_bt_powerstat())\r
+ if(cm_custom_ble_service_on_flag())\r
ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX);\r
\r
// ble_op_att_send_data(ATT_CHARACTERISTIC_2a37_01_VALUE_HANDLE,encoded_hrm, \\r
\r
encoded_hrm[15] = cal.R_LED;\r
encoded_hrm[16] = cal.IR_LED1;\r
- if(uapi_dev_runtime_get_bt_powerstat())\r
+ if(cm_custom_ble_service_on_flag())\r
ble_ppgtest_server_send_input_report(encoded_hrm,PPG_DATA_LEN_MAX);\r
}\r
}\r
uint8_t lock_flag_sleep;//睡眠
uint8_t lock_flag_goal;//每日目标数据 5个数据一起锁
+
+ uint8_t respiratory_training_status;//呼吸训练开始状态
} runtime_status_t;
return g_runtime.motion_recognition_status;
}
+//设置呼吸训练状态
+void uapi_dev_runtime_set_respiratory_training_status(uint8_t status)
+{
+ g_runtime.respiratory_training_status = status;
+}
+uint8_t uapi_dev_runtime_get_respiratory_training_status(void)
+{
+ return g_runtime.respiratory_training_status;
+}
+
// sleep mode flag
void uapi_sleep_mode_flag_set(uint8_t flag)
{
void uapi_dev_runtime_set_motion_recognition_status(uint8_t status);
uint8_t uapi_dev_runtime_get_motion_recognition_status(void);
+
+//呼吸训练
+void uapi_dev_runtime_set_respiratory_training_status(uint8_t status);
+uint8_t uapi_dev_runtime_get_respiratory_training_status(void);
/***************************************cat1 runtime 变量设置获取函数**************************************************/
printf("--------\n");
//此处打印比较多,需要请自行打开。
// GrallocEngines::GetInstance()->DumpMem();
-#endif
}
+
#ifndef VERSION_IOT
bool MemCheck::isBeyondTime()
{
}
return true;
}
-} // namespace OHOS
#endif
+} // namespace OHOS
+#endif
\ No newline at end of file
--- /dev/null
+#!/bin/bash
+
+# for commit in `git log sdk602patch0911...sdk602patch0626 --oneline --reverse |awk '{print $1}'`
+for commit in `git log sdk602patch0911...sdk602patch0626 --oneline --reverse |awk '{print $1}'`
+do
+count=`git show --pretty="format:" --name-only $commit |wc -l`
+if [ $count -gt 0 ]; then
+# echo $commit = $count
+git log -1 --oneline $commit
+# echo git cherry-pick $commit
+# git cherry-pick $commit
+# echo press ctrl-c to stop and any other key to continue..
+# read n
+fi
+
+done