From cb5e6ce2335154ea5eba762b402cd17e87a672f6 Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Tue, 18 Nov 2025 11:34:15 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E6=8C=89=E9=94=AE=E6=93=8D?= =?utf8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../thunderbird/src/ThunderBirdPresenter.cpp | 37 ++++++++++++++++++- .../chips/brandy/exception/chip_system_time.c | 5 ++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp index 04bb03e31..ea2e408d7 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp @@ -35,6 +35,7 @@ #endif #include "input_app.h" +#include "cat1_server.h" #ifdef __cplusplus } #endif @@ -125,6 +126,7 @@ namespace OHOS 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); @@ -132,23 +134,42 @@ namespace OHOS // 刷新息屏计时:任意按键按下时重置屏幕熄灭倒计时 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(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(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(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(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); @@ -230,7 +251,14 @@ namespace OHOS 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; } } @@ -243,6 +271,13 @@ namespace OHOS 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(); diff --git a/code/sdk/middleware/chips/brandy/exception/chip_system_time.c b/code/sdk/middleware/chips/brandy/exception/chip_system_time.c index e3ce9be13..0b8100c24 100644 --- a/code/sdk/middleware/chips/brandy/exception/chip_system_time.c +++ b/code/sdk/middleware/chips/brandy/exception/chip_system_time.c @@ -126,7 +126,10 @@ uint32_t sync_time_utc(uint32_t timestamp, uint32_t timezone_quarters) uapi_set_timezone(timezone_quarters); struct timeval tv = {0}; struct timezone tzone = {0}; - tv.tv_sec = seconds; + // 修复:将UTC时间戳转换为本地时间戳 + // settimeofday的tv.tv_sec应该是本地时间(UTC时间 + 时区偏移) + // 参考 cat1_porting.c 和 ppp_api.c 的实现 + tv.tv_sec = seconds + timezone_quarters * MINUTES_PER_QUARTER * SECONDS_PER_MINUTE; tv.tv_usec = 0; tzone.tz_dsttime = 0; tzone.tz_minuteswest = timezone_quarters * MINUTES_PER_QUARTER; -- 2.17.1