fix(launcher): M6.24 App内按电源键锁屏时序(松开边沿误判唤醒) — 推卡验收
This commit is contained in:
1 parent
b89b91c9c4
commit
b5da7d7151
2 files changed
+27
-16
No files matched your search
@@ -2004,22 +2004,33 @@ static int launch_app_chain(struct app *a, const char *chain)
|
||||
memcpy(save_pow, kp_power.cur, sizeof save_pow);
|
||||
memcpy(save_keys, kp_keys.cur, sizeof save_keys);
|
||||
app_last_input = now_ms();
|
||||
/* M6.24 bug:App 前台单按电源息屏后,同一次按压的**松开**边沿被误判为唤醒——
|
||||
* watchdog 在松开边沿执行 wd_panel_off(背光 0),下一圈本循环 read_brightness()
|
||||
* ==0 置 app_panel_manual_off=1,而 save_* 基线仍是「按下」态,于是这次「松开」
|
||||
* 被 key_edge 捕获,再命中 manual_off → meow_panel_on + 锁屏 overlay → 用户看到
|
||||
* 「黑一下又自动亮 PIN;再按才真正熄屏」。修法=唤醒必须来自**新的按压**:要求
|
||||
* 当前确有键按下(cur 任一 bit),松散开边沿(无键按住)不唤醒。 */
|
||||
if (meow_auto_slept || app_panel_manual_off) {
|
||||
logmsg("screen-off (app): key wake (auto=%d manual=%d)",
|
||||
meow_auto_slept, app_panel_manual_off);
|
||||
meow_panel_on();
|
||||
meow_auto_slept = 0;
|
||||
app_panel_manual_off = 0;
|
||||
fb_pan_buf0_force();
|
||||
/* M2.x 锁屏:App 前台唤醒后若需锁屏 → SIGSTOP 叠加锁屏页;解锁/SIGCONT 回应用。
|
||||
* §310:叠加期 App 崩溃(LR==LCK_OVERLAY_RET_DIED)→ 回收僵尸走统一退出路径
|
||||
* (launcher 不崩、run_menu 重绘主屏),同 run_app_notif_overlay 的 died 分支。 */
|
||||
if (lck_wake_should_lock()) {
|
||||
int lr2 = run_app_lock_overlay(a, pid);
|
||||
if (lr2 != 0) {
|
||||
reap_wait(pid, &status);
|
||||
ams_status_valid = 1;
|
||||
break;
|
||||
int any_down = 0;
|
||||
for (int w = 0; w < KEYBUF_WORDS; w++)
|
||||
if (kp_power.cur[w] || kp_keys.cur[w]) { any_down = 1; break; }
|
||||
if (any_down) {
|
||||
logmsg("screen-off (app): key wake (auto=%d manual=%d)",
|
||||
meow_auto_slept, app_panel_manual_off);
|
||||
meow_panel_on();
|
||||
meow_auto_slept = 0;
|
||||
app_panel_manual_off = 0;
|
||||
fb_pan_buf0_force();
|
||||
/* M2.x 锁屏:App 前台唤醒后若需锁屏 → SIGSTOP 叠加锁屏页;解锁/SIGCONT 回应用。
|
||||
* §310:叠加期 App 崩溃(LR==LCK_OVERLAY_RET_DIED)→ 回收僵尸走统一退出路径
|
||||
* (launcher 不崩、run_menu 重绘主屏),同 run_app_notif_overlay 的 died 分支。 */
|
||||
if (lck_wake_should_lock()) {
|
||||
int lr2 = run_app_lock_overlay(a, pid);
|
||||
if (lr2 != 0) {
|
||||
reap_wait(pid, &status);
|
||||
ams_status_valid = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user