#endif
#include "input_app.h"
+#include "cat1_server.h"
#ifdef __cplusplus
}
#endif
int16_t currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
int16_t currentSubView = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
int screenState = uapi_get_screen_state();
+ int originalScreenState = screenState; // 保存原始屏幕状态,用于HandlePowerKey判断
// 按键事件日志
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnKeyAct: keyID=%d, keyState=%d, screenState=%d", keyID, keyState, screenState);
// 刷新息屏计时:任意按键按下时重置屏幕熄灭倒计时
if (keyState == InputDevice::STATE_PRESS) {
uapi_set_screen_on_api();
+ // 修复:在调用uapi_set_screen_on_api()后重新获取屏幕状态,确保使用最新的状态
+ screenState = uapi_get_screen_state();
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnKeyAct: After uapi_set_screen_on_api(), screenState=%d (original=%d)", screenState, originalScreenState);
}
// 分发按键事件到对应的处理函数
switch (keyID) {
case static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER):
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandlePowerKey: KEY_TYPE_POWER");
- return HandlePowerKey(keyState, currentView, currentSubView, screenState);
+ // 修复:对于电源键,传递原始屏幕状态,以便正确判断是否从息屏状态亮屏
+ return HandlePowerKey(keyState, currentView, currentSubView, originalScreenState);
case static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_FUNC):
+ // 非电源键需要亮屏才能处理
+ if (screenState != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: screen is off, ignore");
+ return true;
+ }
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC");
return HandleFuncKey(keyState, currentView, currentSubView, screenState);
case static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_VENDOR_UP):
+ // 非电源键需要亮屏才能处理
+ if (screenState != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleVendorUpKey: screen is off, ignore");
+ return true;
+ }
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleVendorUpKey: KEY_TYPE_VENDOR_UP");
return HandleVendorUpKey(keyState, currentView, currentSubView, screenState);
case static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_VENDOR_DOWN):
+ // 非电源键需要亮屏才能处理
+ if (screenState != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleVendorDownKey: screen is off, ignore");
+ return true;
+ }
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleVendorDownKey: KEY_TYPE_VENDOR_DOWN");
return HandleVendorDownKey(keyState, currentView, currentSubView, screenState);
if (screenState == 1) {
// 息屏状态下按下:亮屏(由系统自动处理)
+ // 亮屏时触发时间同步
+ restart_time_sync();
+ screenOnFromOff = true; // 标记是从息屏状态亮屏的
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HandlePowerKey: Screen on from off, trigger time sync");
return true;
+ } else {
+ // 亮屏状态下按下,清除标志位
+ screenOnFromOff = false;
}
}
powerKeyPressed = false; // 重置标志位
+ // 修复:如果是从息屏状态亮屏的,松开时不应该立即息屏
+ if (screenOnFromOff) {
+ screenOnFromOff = false; // 清除标志位
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HandlePowerKey: Release after screen on from off, keep screen on");
+ return true;
+ }
+
if (screenState == 0 && isDialogueing == false) {//对话模式下无效
// 亮屏状态下松开:息屏
const power_display_svr_api_t *display_api = power_display_svr_get_api();