#include "thunderbird/include/ThunderBirdMainView.h"
#include "thunderbird/include/ThunderBirdBlueView.h"
#include "thunderbird/include/ThunderBirdPresenter.h"
+ #include "thunderbird/include/ThunderBirdAdjustView.h"
#include "bluetooth/BluetoothModel.h"
#include "wearable_log.h"
#include <sys/time.h>
m_simStatus(0), m_cat1PowerStatus(0), m_signalStrength(0),
m_networkStatus(0), m_networkType(0),
m_hasNetwork(false), m_networkStatusChanged(false),
+ m_cat1RestartInProgress(false),
+ m_bootTime(0),
+ m_lastCat1RestartTime(0),
m_storyModeTimeoutTimer(nullptr)
{
// 初始化时加载提醒数据
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "目前绑定状态 %s", temp);
+ // 记录开机时间
+ time(&m_bootTime);
+
uapi_setScreenDuration(30000);//自动息屏30秒
Readlocalconfig();
{
if(get_is_ln_get_device_network_success())
{
+ //如果ws连接上了但还是没网
+ if (m_networkType == 0 && !m_cat1RestartInProgress)
+ {
+ // 如果无网络,跳转到网络连接中界面
+ ThunderBirdMainView *mainView = ThunderBirdMainView::GetInstance();
+ if (mainView != nullptr)
+ {
+ int16_t currentView = mainView->GetCurrentView();
+ mainView->ChangeView(currentView, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING);
+ }
+ m_cat1RestartInProgress = true;
+ return;
+ }
if (init_falg == false)
{
- //发送获取绑定用户ID
+ //发送获取绑定用户ID,异步执行,避免阻塞UI线程
+ GraphicService::GetInstance()->PostGraphicEvent([]() {
do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_GET_USER_ID, NULL, 0);
+ });
cat1_gettime();
if( ThunderBirdGuideView::GetInstance() != nullptr)
{
ThunderBirdGuideView::GetInstance()->OnWsConnected();
}
- // 网络连接成功,调用HTTP服务获取设备Token
- // 获取一下OTA 是否有最新版本
-
- // 需要是绑定状态才更新
- // if(bind_status == true)
- // {
- // OTA检查异步执行,避免阻塞状态回调(特别是在连网状态下,HTTP请求会阻塞)
- // 直接发送命令到后台线程执行,结果通过 push_ota_status 回调通知
do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_IS_CAT1_OTA_UPGRADE, NULL, 0);
- // }
- // }
- //未绑定状态,联网隐藏网络断开提醒
- // if(bind_status == false)
- // {
- // ThunderBirdMainView *view = ThunderBirdMainView::GetInstance();
- // if (view) {
- // int16_t currentView = view->GetCurrentView();
- // int16_t currentSubView = view->GetCurrentSubView();
-
- // // 检查是否在对话界面
- // if (currentView == THUNDERBIRD_DIALOGUEVIEW && (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING || currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING)) {
- // // 检查是否是在对话模式进入时因为WebSocket未连接而显示的提醒
- // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
- // ThunderBirdPresenter *presenter = ThunderBirdPresenter::GetInstance();
- // if (presenter && presenter->isDialogueing) {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[定时器] WebSocket连接成功,隐藏网络断开提醒,进入对话模式");
- // // 隐藏提醒界面
- // if(ThunderBirdReminderView::GetInstance())
- // {
- // ThunderBirdReminderView::GetInstance()->HideAll();
- // }
- // // 如果在对话界面,初始化音频
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[定时器] WebSocket连接成功,在对话界面,初始化音频");
- // }
- // }
- // }
- // }
#if JUHEPINGTAI
uapi_init_all_websocket_servers();
uapi_start_all_websocket_servers(0); // 连接服务器
#endif
-
-
//上报一次耳机状态
if(ln_bt_report_earphone_connection_status() != 0)
{
ThunderBirdModel::GetInstance()->OnExitDialogueMode();
}
+ // 检查是否是网络连接中界面,6秒后自动跳转到状态界面
+ else if (currentView == THUNDERBIRD_ADJUSTVIEW &&
+ currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "网络连接中界面6秒定时器到时,自动跳转到状态界面");
+ // 重置Cat1重启标志位
+ m_cat1RestartInProgress = false;
+ // 跳转到对话状态界面
+ view->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+ }
// 检查是否是绑定成功界面,需要跳转到对话界面
else if (currentView == THUNDERBIRD_ADJUSTVIEW &&
currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_BIND_SUCCESS) {
m_cat1PowerStatus = uapi_dev_runtime_get_cat1_powerstat(); // CAT1电源状态
m_signalStrength = cat1_api_runtime_get_cat1_signal_bars(); // 信号强度 (旧接口,保留兼容性)
m_networkStatus = uapi_dev_runtime_get_cat1_networkstat(); // 网络连接状态
- // m_networkType = uapi_dev_runtime_get_cat1_networtype(); // 网络类型
+ m_networkType = cat1_api_runtime_get_cat1_networktype(); // 网络类型
// 更新网络连接标志位:m_networkStatus == 1表示有网络连接
m_hasNetwork = (m_networkStatus == 1);
int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
int currentSubView = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
- // 如果当前在对话界面,需要先打断语音并退出对话模式
+
+ // 如果当前在对话界面,需要先打断语音并退出对话模式,然后跳转到发呆中界面
if (currentView == THUNDERBIRD_DIALOGUEVIEW &&
(currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING ||
currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleScheduleReminder: 在对话界面,先打断语音并退出对话模式");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleScheduleReminder: 在对话界面,先打断语音并退出对话模式,跳转到发呆中界面");
// 打断语音播放
AI_ForceInterrupt();
ln_ws_send_voice_chat_interrupt("日程提醒");
ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 关闭屏幕常亮
ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
ThunderBirdModel::GetInstance()->OnExitDialogueMode();
- // 退出到状态界面
- // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
ThunderBirdDialogueView::GetInstance()->DialogueFirst = true;
- // 更新当前视图和子视图
- // currentView = THUNDERBIRD_DIALOGUEVIEW;
- // currentSubView = ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW;
+ // 退出到发呆中界面(状态界面)
+ ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_REMINDERVIEW, ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER);
}
- // 如果当前在哄睡界面,需要先打断语音并退出哄睡模式
+ // 如果当前在故事界面,需要先打断语音并退出故事模式,然后跳转到发呆中界面
else if (currentView == THUNDERBIRD_LULLABYVIEW &&
currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleScheduleReminder: 在哄睡界面,先打断语音并退出哄睡模式");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleScheduleReminder: 在故事界面,先打断语音并退出故事模式,跳转到发呆中界面");
// 打断语音播放
AI_ForceInterrupt();
ln_ws_send_voice_chat_interrupt("日程提醒");
} else {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "启用VAD失败: %d", vad_ret);
}
- // 退出到对话状态界面
- // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
- // 更新当前视图和子视图
- // currentView = THUNDERBIRD_DIALOGUEVIEW;
- // currentSubView = ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW;
+ // 退出到发呆中界面(状态界面)
+ ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_REMINDERVIEW, ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER);
}
// 蓝牙界面(搜索/连接过程)强制停止、上报,并跳转提醒
ThunderBirdReminderView::GetInstance()->IsIcon(false);
}
}
- //如果当前界面是事项提醒界面,则不进行切换,防止返回原任务进入循环
- else if(currentView != THUNDERBIRD_REMINDERVIEW && currentSubView != ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER)
+ // 如果已经从对话界面或故事界面退出到状态界面,则不立即跳转到提醒界面,等待下载和播放完成
+ // 下载和播放会在 ln_parse_schedule_reminder 中异步进行
+ else if (currentView != THUNDERBIRD_REMINDERVIEW && currentSubView != ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER)
{
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_REMINDERVIEW, ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER);
ThunderBirdReminderView::GetInstance()->IsIcon(false);