monkey测试关机/重启问题分析(二)

news/2025/1/11 15:42:23/

systemui关机dialog相关

1、systemui下拉关机按钮
通过Android 布局分析工具发现
请添加图片描述
请添加图片描述

按钮布局
base/packages/SystemUI/res-keyguard/layout/footer_actions.xml
按钮初始化和点击事件
frameworks/base/packages/SystemUI/src/com/android/systemui/qs/FooterActionsController.kt

private val powerMenuLite: View = view.findViewById(R.id.pm_lite)
...
powerMenuLite.setOnClickListener(onClickListener)
...private val onClickListener = View.OnClickListener { v ->// Don't do anything if the tap looks suspicious.if (!visible || falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {return@OnClickListener}if (v === settingsButtonContainer) {if (!deviceProvisionedController.isCurrentUserSetup) {// If user isn't setup just unlock the device and dump them back at SUW.activityStarter.postQSRunnableDismissingKeyguard {}return@OnClickListener}metricsLogger.action(MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH)startSettingsActivity()} else if (v === powerMenuLite) {uiEventLogger.log(GlobalActionsDialogLite.GlobalActionsEvent.GA_OPEN_QS)globalActionsDialog?.showOrHideDialog(false, true, v)}}

GlobalActionsDialogLite
globalActionsDialog?.showOrHideDialog(false, true, v)
到这里,就定位到按钮点击跳出关机dialog的地方
2、GlobalActionsDialogLite
frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
showOrHideDialog

    public void showOrHideDialog(boolean keyguardShowing, boolean isDeviceProvisioned,@Nullable View view) {mKeyguardShowing = keyguardShowing;mDeviceProvisioned = isDeviceProvisioned;if (mDialog != null && mDialog.isShowing()) {// In order to force global actions to hide on the same affordance press, we must// register a call to onGlobalActionsShown() first to prevent the default actions// menu from showing. This will be followed by a subsequent call to// onGlobalActionsHidden() on dismiss()mWindowManagerFuncs.onGlobalActionsShown();mDialog.dismiss();mDialog = null;} else {handleShow(view);}}

3、点击事件
从代码看,这是一个adapter适配器

        public void onClickItem(int position) {Action item = mAdapter.getItem(position);if (!(item instanceof SilentModeTriStateAction)) {if (mDialog != null) {// don't dismiss the dialog if we're opening the power options menuif (!(item instanceof PowerOptionsAction)) {// Usually clicking an item shuts down the phone, locks, or starts an// activity. We don't want to animate back into the power button when that// happens, so we disable the dialog animation before dismissing.mDialogLaunchAnimator.disableAllCurrentDialogsExitAnimations();mDialog.dismiss();}} else {Log.w(TAG, "Action clicked while mDialog is null.");}item.onPress();}}

4、item.onPress()
GlobalActionsDialogLite内部有很多内部类,继承实现了onPress接口,对应真正的点击事件。

关机按钮的实现类如下

    @VisibleForTestingfinal class ShutDownAction extends SinglePressAction implements LongPressAction {ShutDownAction() {super(R.drawable.ic_lock_power_off,R.string.global_action_power_off);}......@Overridepublic void onPress() {mUiEventLogger.log(GlobalActionsEvent.GA_SHUTDOWN_PRESS);// shutdown by making sure radio and power are handled accordingly.mWindowManagerFuncs.shutdown();}}

5、GlobalActionsComponent
frameworks/base/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java

    @Overridepublic void shutdown() {/*Skip Monkey Test*/if (ActivityManager.isUserAMonkey()) {Log.d(TAG, "Cannot shut down during monkey test");return;}/* @} */try {mBarService.shutdown();} catch (RemoteException e) {}}

mBarService.shutdown();最终走到frameworks/base/services/core/java/com/android/server/statusbar/StatusBarManagerService.java


http://www.ppmy.cn/news/262096.html

相关文章

为什么说程序员和产品经理一定要学一学PMP

要回答为什么说程序员和产品经理一定要学一学PMP?我们得先看一下PMP包含的学习内容。PMP新版考纲备考参考资料绝大多数涉及IT项目的敏捷管理理念。主要来源于PMI推荐的10本参考书: 《敏捷实践指南(Agile Practice Guide)》 《项目…

K8s in Action 阅读笔记——【12】Securing the Kubernetes API server

K8s in Action 阅读笔记——【12】Securing the Kubernetes API server 12.1 Understanding authentication 在上一章中,我们提到API服务器可以配置一个或多个认证插件(授权插件也是同样的情况)。当API服务器接收到一个请求时,它…

AI绘画MidJourney 酷炫艺术风格效果,总有一款你喜欢

文 / 高扬 今天六一儿童节,祝各位大朋友节日快乐。 这次以儿童为主题,看看MidJourney的绘画风格,在这里,我使用的默认V5.1版本。 图画场景是一个男孩和一个女孩在田野玩耍,对应的英文是:A boy and a girl a…

协众信息 UI设计初学者容易犯的排版细节

UI界面的排版看似很简单,但是如果细节没做好,你的界面就会乱,并降低质量。特别是UI设计初学者,有些排版一定要注意好,如果你的UI界面感觉乱,那么这排版细节一定要避免。   01.忽略内容而设计   如果…

外贸跨境商城app,多语言,多货币,跨境电商系统开发

外贸跨境商城app是一种在线购物平台,专门为海外买家提供跨境电商服务。用户可以在该app上浏览和购买来自全球各地的商品,以及与卖家进行沟通和交流。这些商品可能包括服装、鞋子、家居用品、电子产品等等,价格也跨越了各个层次。外贸跨境商城…

大力智能台灯与飞利浦台灯 智能调光功能体验

目前市面上绝大部分智能台灯几乎都宣称有自动调光功能,即台灯随环境光变化自动调节LED光的亮度,或者台灯在固定环境光下,一旦开启了自动调光模式LED灯将自动调光至一个最适合读写作业的亮度; 下面对比体验了大力台灯T6 和 飞利浦…

降噪 or HiFi ?飞利浦Fidelio T1 :“我全都要!”

众所周知,在TWS耳机中降噪似乎成了通勤、商旅的标配,出色的降噪满足了打工人隔绝喧闹的需求,但隔绝喧闹之后,好像耳机的全部精力都用于抵御噪音,音质属实拉跨。当然,也不是没有音质好的TWS,像某…

重现CD情怀——飞利浦复古桌面音响臻选上市

都市快生活的背景下,不断迭代而出的音响为大众生活点缀了新的格调,然而五花八门的设计让音乐爱好者严重审美疲劳。简约、复古相比于常规的音响设计,更符合现代音乐发烧友对心底那份声音情怀的追求——对CD时代纯粹声音的情怀追求。拥有百年历…