一般来说,与Android按键窗口事件相关的基本是与frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
这个文件有关。
因此先打开与输入相关的日志,如下:
然后重新编译烧录后查看打印的日志可以看到如下信息:
WindowManager: interceptKeyTq keycode=26 interactive=true keyguardActive=false policyFlags=22000000
而 “keycode=26” 这个键值可以通过frameworks/native/include/android/keycodes.h这个文件中的122行中找到,如下: AKEYCODE_POWER = 26,
通过上面的分析可以清楚知道电源按键按下后需要达到设定的超时时间后才会发送电源按键长按标志的消息,那么这个消息又会通过对应的Handler对该消息进行处理。
通过查找可以找到,还是在该文件下。
这里我要说一下,在调用 “showGlobalActionsInternal“ 此方法之前还调用了一个显示对话框方法 “onGlobalActionsAvailableChanged” ,这个就是小的对话框,如下。
那么创建并显示对话框这动作应该也是通过Handler去获取对应的 MSG_SHOW_CLOBAL_ACTIONS 标识的消息去执行的。
获取执行创建并显示对话框的源码位置
根据前面的分析,需要通过 “MSG_SHOW_CLOBAL_ACTIONS” 这个关键词去查找,可以找到如下图:
下面是对该执行创建并显示对话框的源码进行分析:
堆栈日志:
补丁:
commit d545ddbd31eb876971725e6a2818b44a8fd15a53
Author: dengjiawen <141147155@qq.com>
Date: Sat Aug 10 14:03:48 2024 +0800
移除长按POWER健弹出的对话框中的[关机]和[紧急呼救]选项
diff --git a/frameworks/base/core/res/res/values/config.xml b/frameworks/base/core/res/res/values/config.xml
index c1e3026ee45..f7c5764e0b3 100644
--- a/frameworks/base/core/res/res/values/config.xml
+++ b/frameworks/base/core/res/res/values/config.xml
@@ -2251,7 +2251,7 @@
<dimen name="config_viewMaxFlingVelocity">8000dp</dimen>
<!-- Amount of time in ms the user needs to press the relevant key to bring up the
- global actions dialog -->
+ global actions dialog 长按按键时长-->
<integer name="config_globalActionsKeyTimeout">500</integer>
<!-- Amount of time in ms the user needs to press the relevant keys to trigger the
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index ff25439a5f9