添加日程相关代码逻辑,待用at验证 2378/1
authorluozheng <1732036298@qq.com>
Tue, 23 Sep 2025 14:18:11 +0000 (22:18 +0800)
committerluozheng <1732036298@qq.com>
Tue, 23 Sep 2025 14:18:11 +0000 (22:18 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/include/uiservice/ui_service.h
code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api.h
code/sdk/zhihui/leiniao/imsl_ln/ln_api_schedule.c
code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp
code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.h

index d5a13b1..e944c46 100644 (file)
@@ -51,6 +51,7 @@ typedef enum {
     UI_OTA_UPDATE,
     /* -------------------------------------------------------------------------- */
     HANDLE_JUMP_OTA_VIEW, //处理跳转ota界面
+    HAND_SCHEDULE_REMINDER_NOTIFY, // 日程提醒通知
     MAX_NUM_HANDLER, 
 } UiServiceMsgId;
 
index 0dd70df..1877911 100644 (file)
@@ -85,11 +85,13 @@ typedef struct
 
 // 消息处理程序的函数原型
 static void HandleJumpOtaView(Request *request);
+static void HandScheduleReminderNotify(Request *request);
 
 
 // 消息处理程序项数组(每个消息类型对应一个处理函数,函数名以 Handle 开头)
 MsgHandlerEntry msgHandlers[] = {
     {HANDLE_JUMP_OTA_VIEW, HandleJumpOtaView},
+    {HAND_SCHEDULE_REMINDER_NOTIFY,HandScheduleReminderNotify}
 };
 /* -------------------------------------------------------------------------- */
 void ScreenTurnOn(int32_t timeout)
@@ -296,6 +298,12 @@ void HandleJumpOtaView(Request *request)
             std::bind(&OHOS::OtaModel::CheckOtaResult,OHOS::OtaModel::GetInstance(),status));
     }
 }
+
+void HandScheduleReminderNotify(Request *request)
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandleJumpOtaView msg_id = %d",request->msgId);
+    int status = *(int *)request->data;
+}
 /* -------------------------------------------------------------------------- */
 #ifdef __cplusplus
 }
index fcce80a..0bc3bcf 100644 (file)
@@ -210,12 +210,6 @@ LnCharacterConfig uapi_ln_get_character_config(void)
     return g_ln_character_config;
 }
 
-/* 获取日程提醒信息 */
-ScheduleReminder uapi_ln_get_schedule_reminder(void)
-{
-    return g_schedule_reminder;
-}
-
 /* 自适应申请HttpClient缓冲(保证header>=2048),失败则逐步扩容重试 */
 HTTPC_RESULT ln_http_prepare_auto(HttpClientData *clientData, int header_size, int resp_size)
 {
index a2b2b88..bb8c58f 100644 (file)
@@ -206,8 +206,6 @@ void uapi_ln_set_device_bound(int val);
 const char *uapi_ln_get_user_id(void);
 /* 获取设备角色配置 */
 LnCharacterConfig uapi_ln_get_character_config(void);
-/* 获取日程提醒信息 */
-ScheduleReminder uapi_ln_get_schedule_reminder(void);
 
 /* ============================== 共享全局状态(跨文件) ============================== */
 extern char *g_device_token;
index 343da38..5b4fe5c 100644 (file)
@@ -10,23 +10,57 @@ ScheduleReminderConfig g_schedule_reminder_config = {0};
 // 动态字符串工具
 static char *ln_strdup_s(const char *src)
 {
-    if (src == NULL) src = "";
+    if (src == NULL)
+        src = "";
     size_t len = strlen(src);
     char *p = (char *)malloc(len + 1);
-    if (!p) return NULL;
+    if (!p)
+        return NULL;
     memcpy(p, src, len + 1);
     return p;
 }
 
 static void ln_assign_dup(char **dst, const char *src)
 {
-    if (!dst) return;
+    if (!dst)
+        return;
     char *newp = ln_strdup_s(src);
-    if (!newp) return;
-    if (*dst) free(*dst);
+    if (!newp)
+        return;
+    if (*dst)
+        free(*dst);
     *dst = newp;
 }
 
+// 在 ln_api_schedule.c
+void ln_clear_schedule_reminder(void)
+{
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SCHEDULE_REMINDER] clear schedule reminder\n");
+    if (g_schedule_reminder.deviceId)
+    {
+        free(g_schedule_reminder.deviceId);
+        g_schedule_reminder.deviceId = NULL;
+    }
+    if (g_schedule_reminder.scheduleName)
+    {
+        free(g_schedule_reminder.scheduleName);
+        g_schedule_reminder.scheduleName = NULL;
+    }
+    if (g_schedule_reminder.reminderContent)
+    {
+        free(g_schedule_reminder.reminderContent);
+        g_schedule_reminder.reminderContent = NULL;
+    }
+    if (g_schedule_reminder.reminderAudioUrl)
+    {
+        free(g_schedule_reminder.reminderAudioUrl);
+        g_schedule_reminder.reminderAudioUrl = NULL;
+    }
+    g_schedule_reminder.scheduleId = 0;
+    g_schedule_reminder.enableVoice = 0;
+    g_schedule_reminder.enableVibration = 0;
+}
+
 /* 解析日程提醒信息 */
 void ln_parse_schedule_reminder(const char *json_buf, int json_len)
 {
@@ -110,9 +144,34 @@ void ln_parse_schedule_reminder(const char *json_buf, int json_len)
     printf("  enableVoice: %d\n", g_schedule_reminder.enableVoice);
     printf("  enableVibration: %d\n", g_schedule_reminder.enableVibration);
 
+    // 推送文本和日程提醒内容数据给ui
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[SCHEDULE_REMINDER] push text and schedule reminder content to ui\n");
+    push_schedule_reminder_notification(g_schedule_reminder.scheduleName,g_schedule_reminder.reminderContent);
+
+    // 震动
+    if (g_schedule_reminder.enableVibration)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[JSON_PARSE] vibration:执行震动\n");
+    }
+    else
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[JSON_PARSE] vibration:不执行震动\n");
+    }
+
+    // 下载音频并播放
+    if (g_schedule_reminder.reminderAudioUrl)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[JSON_PARSE] download audio:执行下载\n");
+    }
+    else
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[JSON_PARSE] download audio:不执行下载\n");
+    }
+
     // 清理资源
     cJSON_Delete(root);
     free(text);
+    ln_clear_schedule_reminder();
 }
 
 /* 解析日程提醒配置JSON并保存到全局结构体 */
index f0d126f..60592dd 100644 (file)
@@ -44,7 +44,7 @@ int get_is_ln_get_device_token_success(void)
 void push_ota_status(int status)
 {
     int data = status;
-    SendMsgToUIService(HANDLE_JUMP_OTA_VIEW, status, &data, sizeof(data));
+    SendMsgToUIService(HANDLE_JUMP_OTA_VIEW, 0, &data, sizeof(data));
 }
 
 // 获取OTA升级进度
@@ -60,6 +60,21 @@ void do_restore_factory_setting(void)
 {
     OHOS::ThunderBirdModel::GetInstance()->restore_factory_settings();
 }
+
+// 推送日程提醒通知
+void push_schedule_reminder_notification(const char *title, const char *content)
+{
+    // 打开屏幕,避免通知被遮挡(如需要)
+    ScreenTurnOn(5);
+
+    // 组装简易数据载荷:标题+内容(若 UI 端需要更复杂结构,可定义专用 struct)
+    // 这里直接传两段以'\n'拼接的字符串给 UI,UI 再自行拆分。
+    char payload[384] = {0};
+    printf("title:%s,content%s",title,content);
+    snprintf(payload, sizeof(payload) - 1, "%s\n%s", title, content);
+    SendMsgToUIService(HAND_SCHEDULE_REMINDER_NOTIFY, 0,(void *)payload, (int32_t)strlen(payload));
+}
+
 #ifdef __cplusplus
 };
 #endif
\ No newline at end of file
index f72ab62..ee3cba1 100644 (file)
@@ -40,6 +40,8 @@ void push_ota_progress(int progress);
 
 //恢复出厂操作
 void do_restore_factory_setting(void);
+// 推送日程提醒通知
+void push_schedule_reminder_notification(const char *title, const char *content);
 
 #ifdef __cplusplus
 }