基于RK3568 Android11 移除长按电源按键弹窗的对话框中的 [关机] 和 [紧急呼救] 选项(详细分析)

news2024/11/15 18:56:12

  一般来说,与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,



frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags)

在这里插入图片描述

private void interceptPowerKeyDown(KeyEvent event, boolean interactive)

在这里插入图片描述
  通过上面的分析可以清楚知道电源按键按下后需要达到设定的超时时间后才会发送电源按键长按标志的消息,那么这个消息又会通过对应的Handler对该消息进行处理。
通过查找可以找到,还是在该文件下。

private class PolicyHandler extends Handler

在这里插入图片描述

private void powerLongPress()

在这里插入图片描述

void showGlobalActionsInternal()

在这里插入图片描述
  这里我要说一下,在调用 “showGlobalActionsInternal“ 此方法之前还调用了一个显示对话框方法 “onGlobalActionsAvailableChanged” ,这个就是小的对话框,如下。
在这里插入图片描述

frameworks/base/services/core/java/com/android/server/policy/GlobalActions.java
public void showDialog(boolean keyguardShowing, boolean deviceProvisioned)

在这里插入图片描述

frameworks/base/services/core/java/com/android/server/policy/GlobalActionsProvider.java

在这里插入图片描述

frameworks/base/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
  GlobalActionsProvider接口的实现如下:

在这里插入图片描述

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
public void showGlobalActionsMenu()

在这里插入图片描述

  那么创建并显示对话框这动作应该也是通过Handler去获取对应的 MSG_SHOW_CLOBAL_ACTIONS 标识的消息去执行的。



获取执行创建并显示对话框的源码位置

  根据前面的分析,需要通过 “MSG_SHOW_CLOBAL_ACTIONS” 这个关键词去查找,可以找到如下图:
在这里插入图片描述
在这里插入图片描述


  下面是对该执行创建并显示对话框的源码进行分析:
在这里插入图片描述
堆栈日志:
在这里插入图片描述

frameworks/base/core/java/android/os/Handler.java
public void dispatchMessage(@NonNull Message msg)
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
public void handleMessage(Message msg)

在这里插入图片描述

frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java
public void handleShowGlobalActionsMenu()
frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java
public void showGlobalActions(GlobalActionsManager manager)
frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
public void showOrHideDialog(boolean keyguardShowing, boolean isDeviceProvisioned, GlobalActionsPanelPlugin walletPlugin)
private void handleShow()
private ActionsDialog createDialog()
protected void createActionItems()


补丁:
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..17f085b21be 100644
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -614,12 +614,15 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
 
         for (int i = 0; i < defaultActions.length; i++) {
             String actionKey = defaultActions[i];
+            Log.e(TAG, "global action key " + actionKey);
             if (addedKeys.contains(actionKey)) {
                 // If we already have added this, don't add it again.
                 continue;
             }
             if (GLOBAL_ACTION_KEY_POWER.equals(actionKey)) {
-                addIfShouldShowAction(tempActions, shutdownAction);
+                // addIfShouldShowAction(tempActions, shutdownAction);
+                Exception e = new Exception("djw :createActionItems stack log");
+                e.printStackTrace(); 
             } else if (GLOBAL_ACTION_KEY_AIRPLANE.equals(actionKey)) {
                 addIfShouldShowAction(tempActions, mAirplaneModeOn);
             } else if (GLOBAL_ACTION_KEY_BUGREPORT.equals(actionKey)) {
@@ -655,7 +658,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
                     addIfShouldShowAction(tempActions, new LogoutAction());
                 }
             } else if (GLOBAL_ACTION_KEY_EMERGENCY.equals(actionKey)) {
-                addIfShouldShowAction(tempActions, new EmergencyDialerAction());
+                // addIfShouldShowAction(tempActions, new EmergencyDialerAction());
             } else {
                 Log.e(TAG, "Invalid global action key " + actionKey);
             }
diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 96d6ecbcc07..dd1ff736ff6 100644
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -57,6 +57,8 @@ import com.android.systemui.tracing.ProtoTracer;
 
 import java.util.ArrayList;
 
+import android.util.Slog;
+
 /**
  * This class takes the functions from IStatusBar that come in on
  * binder pool threads and posts messages to get them onto the main
@@ -66,6 +68,9 @@ import java.util.ArrayList;
  */
 public class CommandQueue extends IStatusBar.Stub implements CallbackController<Callbacks>,
         DisplayManager.DisplayListener {
+
+    private static final String TAG = "CommandQueue";
+
     private static final int INDEX_MASK = 0xffff;
     private static final int MSG_SHIFT  = 16;
     private static final int MSG_MASK   = 0xffff << MSG_SHIFT;
@@ -742,6 +747,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
     @Override
     public void showGlobalActionsMenu() {
         synchronized (mLock) {
+            Slog.w(TAG, "djw 9: showGlobalActionsMenu removeMessages obtainMessage");
             mHandler.removeMessages(MSG_SHOW_GLOBAL_ACTIONS);
             mHandler.obtainMessage(MSG_SHOW_GLOBAL_ACTIONS).sendToTarget();
         }
diff --git a/frameworks/base/services/core/java/com/android/server/policy/GlobalActions.java b/frameworks/base/services/core/java/com/android/server/policy/GlobalActions.java
index ecd1eabc857..3e2e146fc9b 100755
--- a/frameworks/base/services/core/java/com/android/server/policy/GlobalActions.java
+++ b/frameworks/base/services/core/java/com/android/server/policy/GlobalActions.java
@@ -26,7 +26,7 @@ import android.os.SystemProperties;
 class GlobalActions implements GlobalActionsProvider.GlobalActionsListener {
 
     private static final String TAG = "GlobalActions";
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = true;
 
     private final Context mContext;
     private final GlobalActionsProvider mGlobalActionsProvider;
@@ -66,6 +66,7 @@ class GlobalActions implements GlobalActionsProvider.GlobalActionsListener {
         mDeviceProvisioned = deviceProvisioned;
         mShowing = true;
         if (mGlobalActionsAvailable && !"box".equals(SystemProperties.get("ro.target.product","unkonw"))) {
+            Slog.d(TAG, "djw 7: showDialog mGlobalActionsProvider.showGlobalActions");
             mHandler.postDelayed(mShowTimeout, 5000);
             mGlobalActionsProvider.showGlobalActions();
         } else {
diff --git a/frameworks/base/services/core/java/com/android/server/policy/GlobalActionsProvider.java b/frameworks/base/services/core/java/com/android/server/policy/GlobalActionsProvider.java
index d414314db2b..a7b0f04ba92 100644
--- a/frameworks/base/services/core/java/com/android/server/policy/GlobalActionsProvider.java
+++ b/frameworks/base/services/core/java/com/android/server/policy/GlobalActionsProvider.java
@@ -21,7 +21,7 @@ public interface GlobalActionsProvider {
     boolean isGlobalActionsDisabled();
     /** Set the listener that will handle various global actions evetns. */
     void setGlobalActionsListener(GlobalActionsListener listener);
-    /** Show the global actions UI to the user. */
+    /** Show the global actions UI to the user. by djw -> mGlobalActionsProvider.showGlobalActions();*/
     void showGlobalActions();
 
     /** Listener to pass global actions events back to system. */
diff --git a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
index d966f36becb..82c4015630b 100755
--- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -240,7 +240,7 @@ import java.util.List;
 public class PhoneWindowManager implements WindowManagerPolicy {
     static final String TAG = "WindowManager";
     static final boolean localLOGV = false;
-    static final boolean DEBUG_INPUT = false;
+    static final boolean DEBUG_INPUT = true;    //首先打开关于输入的日志
     static final boolean DEBUG_KEYGUARD = false;
     static final boolean DEBUG_SPLASH_SCREEN = false;
     static final boolean DEBUG_WAKEUP = false;
@@ -682,6 +682,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
         }
     };
 
+    /* 被注册成监听和观察 */
     private class PolicyHandler extends Handler {
         @Override
         public void handleMessage(Message msg) {
@@ -729,6 +730,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                     finishPowerKeyPress();
                     break;
                 case MSG_POWER_LONG_PRESS:
+                    Log.d(TAG, "djw 4: PolicyHandler powerLongPress");
                     powerLongPress();
                     break;
                 case MSG_POWER_VERY_LONG_PRESS:
@@ -1016,8 +1018,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                     if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0) {
                         powerLongPress();
                     } else {
+                        Log.d(TAG, "djw 3: mHandler.sendMessageDelayed(msg,ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout())");
                         Message msg = mHandler.obtainMessage(MSG_POWER_LONG_PRESS);
+                        /* mHandler.obtainMessage(MSG_POWER_LONG_PRESS)->PolicyHandler这是一个处理者 */
                         msg.setAsynchronous(true);
+                        /* getDeviceGlobalActionKeyTimeout->mGlobalActionsKeyTimeout->com.android.internal.R.integer.config_globalActionsKeyTimeout->config.xml */
                         mHandler.sendMessageDelayed(msg,
                                 ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());
 
@@ -1308,6 +1313,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
             case LONG_PRESS_POWER_NOTHING:
                 break;
             case LONG_PRESS_POWER_GLOBAL_ACTIONS:
+                Log.d(TAG, "djw 5: LONG_PRESS_POWER_GLOBAL_ACTIONS");
                 mPowerKeyHandled = true;
                 performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
                         "Power - Long Press - Global Actions");
@@ -1530,6 +1536,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
         if (mGlobalActions == null) {
             mGlobalActions = new GlobalActions(mContext, mWindowManagerFuncs);
         }
+        Log.d(TAG, "djw 6: LONG_PRESS_POWER_GLOBAL_ACTIONS");
         final boolean keyguardShowing = isKeyguardShowingAndNotOccluded();
         mGlobalActions.showDialog(keyguardShowing, isDeviceProvisioned());
         // since it took two seconds of long press to bring this up,
@@ -3737,7 +3744,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                                                 mKeyguardDelegate.isShowing()));
 
         if (DEBUG_INPUT) {
-            Log.d(TAG, "interceptKeyTq keycode=" + keyCode
+            Log.d(TAG, "djw 1: interceptKeyTq keycode=" + keyCode
                     + " interactive=" + interactive + " keyguardActive=" + keyguardActive
                     + " policyFlags=" + Integer.toHexString(policyFlags));
         }
@@ -3978,6 +3985,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                 result &= ~ACTION_PASS_TO_USER;
                 isWakeKey = false; // wake-up will be handled separately
                 if (down) {
+                    Log.d(TAG, "djw 2: KEYCODE_POWER DOWN (down)");
                     interceptPowerKeyDown(event, interactive);
                 } else {
                     interceptPowerKeyUp(event, interactive, canceled);
diff --git a/frameworks/base/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/frameworks/base/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 39e839dfc7e..3ed8845199c 100644
--- a/frameworks/base/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -542,6 +542,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
         public void showGlobalActions() {
             if (mBar != null) {
                 try {
+                    Slog.w(TAG, "djw 8: showGlobalActionsMenu");
                     mBar.showGlobalActionsMenu();
                 } catch (RemoteException ex) {}
             }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matcha-Tts:一种基于条件流匹配的快速Tts架构笔记

MATCHA-TTS: A FAST TTS ARCHITECTURE WITH CONDITIONAL FLOW MATCHING笔记 提出问题&#xff1a; 1、合成速度慢 提出方法&#xff1a; 首先&#xff0c;提出了一种改进的编码器-解码器TTS架构&#xff0c;在解码器中使用1D CNN和Transformer的组合。这样减少了内存消耗&am…

使用tailwindcss轻松实现移动端rem适配

本示例节选自小卷全栈开发实战系列的《Vue3实战》。演示如何用tailwindcss所支持的rem体系轻松实现一个仿b站移动端头部导航栏rem适配。 友情声明 学习分享不易&#xff0c;如果小伙伴觉得有帮助&#xff0c;点赞支持下。满30赞&#xff0c;将随文附赠录屏讲解&#xff0c;感谢…

linux shell 脚本入门到实战

目录 一、shell入门简介1.1什么是shell1.2shell编程注意事项1.3第一个shell脚本helloworld 二、shell环境变量讲解2.1shell变量详解2.2shell系统变量介绍2.3shell环境变量介绍2.4shell用户环境变量介绍2.4.1自定义shell环境变量 三、shell编程流程控制语句3.1if条件语句介绍3.1…

TikTok出现“无网络连接”,具体原因与解决方法

“No network connection”&#xff01;当你信心满满下载并准备开始运营TikTok时&#xff0c;屏幕上如果提示“无互联网连接”非常难办。有很多因素可能会导致此问题&#xff0c;包括网络连接无效、应用程序故障等。接下来将为你盘点主要的原因与解决方法。 一、无网络连接的原…

C语言进阶(9)

程序的执行时有两种环境&#xff0c;一种是翻译环境&#xff0c;另一种是执行环境。程序先经过编译成为obj的后缀的文件&#xff0c;然后将文件和链接库链接起来&#xff0c;然后将形成可执行程序&#xff0c;前者时翻译环境&#xff0c;后者时执行环境。(链接库就是库函数的所…

【ComfyUI】Error occurred when executing WD14Tagger|pysssss :

解决ComfyUI的ComfyUI-WD14-Tagger插件运行报错问题 参考ONNX 运行时的 CUDA 和 cuDNN 加载错误 期刊 #56 pythongosssss/ComfyUI-WD14-标记器 (github.com) 我尝试了以下操作 转到 启动器&#xff0c; 启动CMD&#xff0c; 按回车键&#xff1a; 粘贴。卸载两个包 pip unin…

Linux之进程间通信(下)

目录 命名管道 命名管道的创建 匿名管道和命名管道的区别 命名管道的代码实现 共享内存 创建共享内存 关联共享内存 去关联共享内存 删除共享内存 共享内存特点 共享内存代码实现 IPC资源总结 命名管道 上期我们学习了匿名管道&#xff0c;匿名管道本质就是一个…

EcoVadis评估对可持续发展具体表现在哪些方面

Ecovadis认证是一项备受推崇的环保和社会责任认证&#xff0c;其优势不仅在于其权威性和公信力&#xff0c;更在于其全面而深入的评估标准&#xff0c;这个认证体系将企业划分为不同的等级&#xff0c;从入门级的银牌到最高级别的白金级&#xff0c;每个等级都有相应的评估标准…

Selenium + Python 自动化测试14(发送报告)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 上一篇我们讨论了使用HTMLTestRunner 生成HTML报告的方法。 本篇文章我们接着讲生成HTML报告是否可以自动邮件发送出去&#xff0c;提高我们测试报告的及时性&#xff0c;方便…

PCB入门笔记—绘制一个只有两个排针的PCB全流程记录—立创EDA专业版

PCB绘制入门&#x1f680; 硕士毕业之后准备进入博士阶段&#xff0c;本科阶段做的硬件&#xff0c;硕士阶段做的算法&#xff0c;然后博士阶段又要做回硬件了&#xff0c;因此也是打算补一补PCB相关的内容和知识&#xff0c;毕竟做控制的话&#xff0c;之后这也是不能躲开的必…

前端工程化-02.Yapi接口管理平台

YApi Pro-高效、易用、功能强大的可视化接口管理平台 图片中链接已失效&#xff0c;此处为新链接 选择添加接口&#xff0c;输入接口名称和接口路径。 创建成功后自动进入接口页面&#xff0c;点击编辑&#xff0c;可以编辑完善这个接口的信息。两个非常重要的信息&#xff1a…

进程waitwaitpid、线程

一、wait wait功能 1、获取子进程退出状态&#xff0c;分析子进程是否已经退出&#xff08;变成僵尸态&#xff09; 2、回收资源&#xff0c;让僵尸态子进程销毁 wait本身是一个阻塞操作&#xff0c;会使调用者阻塞 2、宏&#xff1a; &#xff08;1&#xff09;WIFEXITE…

bug的常见排查和分析思路以及相关的原因分类

作为开发人员&#xff0c;经常会收到来自用户和QA&#xff0c;领导反馈的各种问题。 为了快速问题&#xff0c;我们有时需要站在更高的角度&#xff0c;更全面的看待问题。才能更快锁定问题。 具体的bug还需要结合企业实际业务情况&#xff0c;相关的框架&#xff0c;依赖库&…

海康摄像头(测温型)桌面客户端开发分享

分享一个自己开发的用于企业特殊场景下温度监控告警的一个桌面应用。 关键功能&#xff1a; 1.支持海康摄像头&#xff1b; 2.支持多路视频预览&#xff0c;多通道画面选择预览&#xff0c;支持视频画面回放与下载&#xff1b; 3.支持自动探测摄像头功能&#xff0c;若具备…

RabbitMQ集群部署

RabbitMQ集群部署 简介 消息中间件RabbitMQ&#xff0c;一般以集群方式部署&#xff0c; 主要提供消息的接受和发送&#xff0c;实现各微服务之间的消息异步。 以下将介绍RabbitMQHA方式进行部署。 原理介绍 cookie ​ RabbitMQ底层是通过Erlang架构来实现的&#xff0c;所…

基于java五台山景点购票系统(源码+论文+部署讲解等)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台的优…

自建Gitlab和Gitlab runner并推送镜像到Harbor

1. 创建虚拟机 整体规划如下 1.1 创建3台虚拟机 系统版本Centos7.9 设置IP分别为 192.168.200.201 、192.168.200.202、 192.168.200.203 1.2 安装docker 3台虚拟机都安装docker&#xff0c;参考文章 安装docker 1.3 修改daemon.json 修改 /etc/docker/daemon.json 文件…

【数字信号处理】第3章 离散时间信号和系统的频域分析,系列的离散时间傅里叶变换,性质,定理(清华大学)

目录 第3章 离散时间信号和系统的 引言 信号和系统的分析方法有两种 模拟信号与系统的时域分析 模拟信号与系统的频域分析 离散时间信号和系统 历史回顾 3.1.1 序列的离散时间傅里叶变换 3.1.2 序列的离散时间傅里叶变换的性质 1. DTFT的周期性 2. 线性 3. 时移(位移…

守护网站心脏:HAProxy负载均衡技术详解(全网最详细)

守护网站心脏&#xff1a;HAProxy负载均衡技术详解 文章目录 **守护网站心脏&#xff1a;HAProxy负载均衡技术详解**haproxy介绍特点功能配置结论 haproxy负载均衡测试haproxy主机操作日志重定向操作 webserver1主机操作webserver2主机操作 haporxy相关配置测试backup参数测速h…

Petalinux 使用相关问题

文章目录 Petalinux 交叉编译环境Petalinux 以太网相关Petalinux 应用层写寄存器操作 Petalinux 交叉编译环境 方法一&#xff1a; 注意&#xff1a;该方法安装时会 和 Petalinux的 gcc-multilib 冲突&#xff1b; sudo apt install cmake sudo apt-get install gcc-arm-lin…