当前位置: 首页 > news >正文

Android frameworks 开发总结之八

Quick Settings增加一項

XXX device要求在quick settings中增加一項touch panel.

  • 在/frameworks/base/packages/SystemUI/res/values/config.xml文件中的quick_settings_tiles_default string 中增加touch panel。並在String resource文件中增加顯示的title

<!-- The default tiles to display in QuickSettings --><string name="quick_settings_tiles_default" translatable="false">wifi,bt,dnd,touchpanel,flashlight,rotation,battery,cell,airplane,cast</string>
  • 在frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles 下增加TouchPanelTile.java文件.

package com.android.systemui.qs.tiles;import android.content.Intent;
import android.provider.Settings;
import android.util.Log;
import android.os.SystemProperties;import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
import com.android.systemui.qs.QSHost;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.plugins.qs.QSTile.BooleanState;import javax.inject.Inject;/**/** Quick settings tile: Touch Panel **/
public class TouchPanelTile extends QSTileImpl<BooleanState> {private static final String PERSIST_KEY_PROP_TOUCH_MODE = "persist.sys.touch_mode";private static final int TOUCH_MODE_PROPERTY_FINGER = 0;private static final int TOUCH_MODE_PROPERTY_STYLUS = 1;private static final int TOUCH_MODE_PROPERTY_GLOVE = 2;private static final String TOUCH_MODE_FINGER = "finger";private static final String TOUCH_MODE_STYLUS = "stylus";private static final String TOUCH_MODE_GLOVE = "glove";private int mTouchPanelMode = 0;private QSHost qsHost;private boolean isHandleClick = false;@Injectpublic TouchPanelTile(QSHost host) {super(host);qsHost = host;}@Overridepublic BooleanState newTileState() {return new BooleanState();}@Overrideprotected void handleClick() {mTouchPanelMode ++;   //在quick setting中點擊時調用if(mTouchPanelMode > TOUCH_MODE_PROPERTY_GLOVE){mTouchPanelMode = TOUCH_MODE_PROPERTY_FINGER;}updateTouchMode(mTouchPanelMode);isHandleClick = true;refreshState();Log.i("WKS1","TouchPanelTile -> handleClick: mTouchPanelMode = " + mTouchPanelMode);}@Overrideprotected void handleUpdateState(BooleanState state, Object arg) { //下拉quick setting時調用if (isHandleClick) {…..} else {try {String mode = SystemProperties.get(PERSIST_KEY_PROP_TOUCH_MODE);……//state.labe 設置顯示titlestate.label = mContext.getString(R.string.quick_settings_touch_panel_stylus);}Log.i("WKS1", "TouchPanelTile -> handleUpdateState: mode = " + mode);} catch (NumberFormatException e) {Log.e(TAG, "could not get touch mode", e);}}isHandleClick = false;state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_on);Log.i("WKS1","TouchPanelTile -> handleUpdateState: state.value = " + state.value);Log.i("WKS1","TouchPanelTile -> handleUpdateState: mTouchPanelMode = " + mTouchPanelMode);}@Overridepublic int getMetricsCategory() {return MetricsEvent.QS_TOUCHPANEL;}@Overridepublic Intent getLongClickIntent() { //長按顯示界面return new Intent(Settings.ACTION_DISPLAY_SETTINGS);}...@Overridepublic CharSequence getTileLabel() {if (mTouchPanelMode == TOUCH_MODE_PROPERTY_FINGER) {return mContext.getString(R.string.quick_settings_touch_panel_finger);} else if (mTouchPanelMode == TOUCH_MODE_PROPERTY_GLOVE) {return mContext.getString(R.string.quick_settings_touch_panel_glove);} else {return mContext.getString(R.string.quick_settings_touch_panel_stylus);}}private void updateTouchMode(int mode){//SystemUI 中使用SystemProperties.set提示設置失敗,使用settings數據監聽方式 Settings.System.putInt(qsHost.getContext().getContentResolver(),Settings.System.TOUCH_PANEL_MODE,mode);}
}
  • frameworks/base/proto/src/metrics_constants/metrics_constants.proto 文件中增加 MetricsEvent.QS_TOUCHPANEL

// OPEN: QS Touch Panel tile shown// ACTION: QS Touch Panel tile tapped//  SUBTYPE: 0 is off, 1 is finger, 2 is glove, 3 is stylus// CATEGORY: QUICK_SETTINGSQS_TOUCHPANEL = 1751;
  • 在frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java 文件中實現

@@ -46,6 +46,7 @@ import com.android.systemui.qs.tiles.UserTile;import com.android.systemui.qs.tiles.WifiTile;import com.android.systemui.qs.tiles.WorkModeTile;import com.android.systemui.util.leak.GarbageMonitor;
+import com.android.systemui.qs.tiles.TouchPanelTile;import javax.inject.Inject;import javax.inject.Provider;
@@ -75,6 +76,7 @@ public class QSFactoryImpl implements QSFactory {private final Provider<NfcTile> mNfcTileProvider;private final Provider<GarbageMonitor.MemoryTile> mMemoryTileProvider;private final Provider<UiModeNightTile> mUiModeNightTileProvider;
+    private final Provider<TouchPanelTile> mTouchPanelProvider;private QSTileHost mHost;@@ -97,7 +99,8 @@ public class QSFactoryImpl implements QSFactory {Provider<NightDisplayTile> nightDisplayTileProvider,Provider<NfcTile> nfcTileProvider,Provider<GarbageMonitor.MemoryTile> memoryTileProvider,
-            Provider<UiModeNightTile> uiModeNightTileProvider) {
+            Provider<UiModeNightTile> uiModeNightTileProvider,
+            Provider<TouchPanelTile> TouchPanelTileProvider) {mWifiTileProvider = wifiTileProvider;mBluetoothTileProvider = bluetoothTileProvider;mCellularTileProvider = cellularTileProvider;
@@ -117,6 +120,7 @@ public class QSFactoryImpl implements QSFactory {mNfcTileProvider = nfcTileProvider;mMemoryTileProvider = memoryTileProvider;mUiModeNightTileProvider = uiModeNightTileProvider;
+        mTouchPanelProvider = TouchPanelTileProvider;}public void setHost(QSTileHost host) {
@@ -170,6 +174,8 @@ public class QSFactoryImpl implements QSFactory {return mNfcTileProvider.get();case "dark":return mUiModeNightTileProvider.get();
+            case "touchpanel":
+                return mTouchPanelProvider.get();}

相关文章:

Android frameworks 开发总结之八

Quick Settings增加一項 XXX device要求在quick settings中增加一項touch panel. 在/frameworks/base/packages/SystemUI/res/values/config.xml文件中的quick_settings_tiles_default string 中增加touch panel。並在String resource文件中增加顯示的title <!-- The def…...

Cortex-M与RISC-V区别

环境 Cortex-M以STM32H750为代表&#xff0c;RISC-V以芯来为代表 RTOS版本为RT-Thread 4.1.1 寄存器 RISC-V 常用汇编 RISC-V 关于STORE x4, 4(sp)这种寄存器前面带数字的写法&#xff0c;其意思为将x4的值存入sp4这个地址&#xff0c;即前面的数字表示偏移的意思 反之LOA…...

YashanDB入选2023年世界互联网大会领先科技奖成果集《科技之魅》

近日&#xff0c;由深圳计算科学研究院自主研发的“崖山数据库系统YashanDB”入编2023年世界互联网大会领先科技奖成果集《科技之魅》。此次入选&#xff0c;充分彰显了YashanDB在数据库技术领域的突破性创新成果。 《科技之魅》是世界互联网大会领先科技奖的重要成果&#xff…...

C语言基础程序设计题

1.个人所得税计算 应纳税款的计算公式如下&#xff1a;收入<&#xff1d;1000元部分税率为0&#xff05;&#xff0c;2000元>&#xff1d;收入>1000元的部分税率为5&#xff05;&#xff0c;3000元>&#xff1d;收入>2000元的部分税率为10&#xff05;&#xf…...

Spring Boot实现图片上传和展示

Spring Boot实现图片上传和展示 本文将介绍如何使用Spring Boot框架搭建后端服务&#xff0c;实现接收前端上传的图片并保存到resources/images目录下。同时&#xff0c;我们还将展示如何在前端编写一个HTML页面&#xff0c;实现上传图片和从resources/images目录下获取图片并…...

大数据-之LibrA数据库系统告警处理(ALM-37015 Gaussdb进程可用文件句柄资源不足)

告警解释 操作系统环境文件句柄不足时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37015 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名 Instance 产生告警…...

大一学编程怎么学?刚接触编程怎么学习,有没有中文编程开发语言工具?

大一学编程怎么学&#xff1f;刚接触编程怎么学习&#xff0c;有没有中文编程开发语言工具&#xff1f; 1、大一刚开始学编程&#xff0c;面对复杂的代码学习非常吃力&#xff0c;很难入门。建议刚接触编程可以先学习中文编程&#xff0c;了解其中的编程逻辑&#xff0c;学编程…...

GoWeb学习-第二天

文章目录 从零开始学Go web——第二天一、安装Go语言二、建立web目录2.1 创建GO语言包目录2.2 创建Go web文件 三、编译并运行Go web应用3.1 编译并运行3.2 查看结果 从零开始学Go web——第二天 ​ 第一天我们了解了与web息息相关的HTTP协议&#xff0c;聊了聊Go与web的关系等…...

04-鸿蒙4.0学习之样式装饰器相关

04-鸿蒙4.0学习之样式装饰器 styles装饰器&#xff1a;定义组件重用样式 /*** styles装饰器&#xff1a;定义组件重用样式*/ Entry Component struct StyleUI {State message: string stylesStyles commonStyle(){.width(200).height(100).backgroundColor(Color.Gray).marg…...

C# 线程(1)

目录 1 线程与进程2 创建线程3 线程等待4 线程优先级5 前台线程与后台线程6 Lock与线程安全7 Monitor8 死锁9 线程中异常处理 1 线程与进程 进程是计算机概念&#xff0c;一个程序运用时占用的的所有计算机资源&#xff08;CPU、内存、硬盘、网络&#xff09;统称为进程。 线程…...

冒泡排序以及改进方案

冒泡排序以及改进方案 介绍&#xff1a; 冒泡排序属于一种典型的交换排序&#xff08;两两比较&#xff09;。冒泡排序就像是把一杯子里的气泡一个个往上冒一样。它不断比较相邻的元素&#xff0c;如果顺序不对就像水泡一样交换它们的位置&#xff0c;直到整个序列像水泡一样…...

QTextEdit 是 Qt 框架中的一个类,用于显示和编辑多行文本内容的可编辑部件

QTextEdit 是 Qt 框架中的一个类&#xff0c;用于显示和编辑多行文本内容的可编辑部件。 QTextEdit 提供了一个用于显示和编辑富文本&#xff08;包括格式化文本、图像和链接等&#xff09;和纯文本的文本编辑器。它支持基本的文本操作&#xff08;如复制、粘贴、撤销、重做等…...

vue+jsonp编写可导出html的模版,可通过外部改json动态更新页面内容

效果 导出后文件结果如图所示&#xff0c;点击Index.html即可查看页面&#xff0c;页面所有数据由report.json控制&#xff0c;修改report.json内容即可改变index.html展示内容 具体实现 1. 编写数据存储的json文件 在index.html所在的public页面新建report.json文件&#xff…...

查看各ip下的连接数

netstat -n | awk /^tcp/ {print $5} | awk -F: {print $1} | sort | uniq -c| sort -rn netstat -n&#xff1a;显示所有的网络连接&#xff0c;不包括任何服务名的解释。awk /^tcp/ {print $5}&#xff1a;使用awk命令过滤出tcp协议的连接&#xff0c;并打印出每个连接的第五…...

Linux—进程状态

目录 一.前言 1.1.通过系统调用获取进程标示符 1.2.通过系统调用创建进程 二.进程状态 三.Z(zombie)-僵尸进程 四.僵尸进程危害 一.前言 学习进程的状态&#xff0c;我们首先了解一下进程的基本数据 1.1.通过系统调用获取进程标示符 由getpid&#xff08;&#xff09…...

万宾科技可燃气体监测仪科技作用全览

燃气管网在运行过程中经常会遇到燃气管道泄漏的问题&#xff0c;燃气泄漏甚至会引起爆炸&#xff0c;从而威胁人民的生命和财产安全&#xff0c;因此对燃气管网进行定期巡检是十分必要的工作。但是传统的人工巡检已不能满足城市的需要&#xff0c;除了选择增加巡检人员之外&…...

Python与GPU编程快速入门(三)

3、使用Numba加速Python代码 Numba 是一个 Python 库,它使用行业标准 LLVM 编译器库在运行时将 Python 函数转换为优化的机器代码。 您可能想尝试用它来加速 CPU 上的代码。 然而,Numba还可以将Python 语言的子集转换为CUDA,这就是我们将在这里使用的。 所以我们的想法是,…...

praseInt 和 逻辑或连用

这是做项目时遇到json文件转换 的一个小坑 将json 对象中的值 由字符串(数字字符串) 转换为 数值类型&#xff0c;如果是 转换失败 &#xff0c;就返回 -1 这里的 parseInt 看起来非常简洁&#xff0c;但是存在一个小坑 transformedData[fieldsToCheck[i]] parseInt(origina…...

对属于国家秘密的地理信息的获取、持有、提供、利用情况进行登记并长期保存,实行可追溯管理

对属于国家秘密的地理信息的获取、持有、提供、利用情况进行登记并长期保存&#xff0c;实行可追溯管理 数据记录&#xff08;包括获取、持有、提供、利用、销毁等全闭环&#xff09;...

XAER_RMERR: Fatal error occurred in the transaction branch异常解决

XAER_RMERR: Fatal error occurred in the transaction branch异常解决 数据库权限问题&#xff01;&#xff01;&#xff01;不是mysql驱动问题&#xff0c;执行下面命令解决 GRANT XA_RECOVER_ADMIN ON *.* TO root% ;...

别再手动整理了!用这招自动同步思维导图到Markdown(支持ProcessOn/XMind/MindNode)

思维导图与Markdown自动化同步实战指南 每次会议结束后的文档整理是否让你头疼&#xff1f;技术文档的频繁更新是否消耗了你大量时间&#xff1f;本文将为你揭示一套零干预的自动化工作流&#xff0c;只需专注思维导图创作&#xff0c;Markdown文档会自动同步更新。告别复制粘贴…...

django基于大数据技术的医疗数据分析与研究_c1o2u99y_hxj031

前言随着信息技术的飞速发展&#xff0c;医疗领域产生的数据量呈爆炸式增长。这些数据蕴含着丰富的健康信息和疾病规律&#xff0c;但传统的数据处理方式往往只能进行简单的统计汇总&#xff0c;无法深入挖掘数据背后的关联性和趋势性规律&#xff0c;导致大量宝贵的医疗数据资…...

RK3588 USB转CAN方案实战:从CH341到PCAN的驱动适配与避坑指南

1. RK3588 USB转CAN方案背景与选型 在嵌入式开发中&#xff0c;CAN总线因其高可靠性和实时性被广泛应用于工业控制、汽车电子等领域。RK3588作为一款高性能处理器&#xff0c;原生支持2路CAN总线接口&#xff0c;但在实际项目中&#xff0c;我们经常遇到需要更多CAN通道的情况。…...

Apache APISIX Dashboard API权限绕过导致RCE(CVE-2021-45232)复现

Apache APISIX是一个动态、实时、高性能API网关&#xff0c;而Apache APISIX Dashboard是一个配套的前端面板。 Apache APISIX Dashboard 2.10.1版本前存在两个API/apisix/admin/migrate/export和/apisix/admin/migrate/import&#xff0c;他们没有经过droplet框架的权限验证&…...

程序行为的构成:规则、数据与延迟固化的艺术

程序行为的构成&#xff1a;规则、数据与延迟固化的艺术 2026-04-08 程序行为的构成&#xff1a;规则、数据与延迟固化的艺术 在软件系统中&#xff0c;程序行为并非凭空产生&#xff0c;而是规则作用于数据所产生的可观察效应。这一基本公式将程序的内在逻辑清晰地分为两个部分…...

0Ω电阻的工程应用与电流承载能力解析

1. 0Ω电阻的阻值真相作为一名硬件工程师&#xff0c;我经常遇到新手同事对0Ω电阻的阻值产生误解。实际上&#xff0c;0Ω电阻并非理想中的零阻抗&#xff0c;而是存在一定偏差范围的极小阻值电阻。根据EN60115-2国际电阻标准&#xff0c;0Ω电阻的最大允许偏差有三种规格&…...

自适应散热风扇市场洞察:2020-2025年CAGR为14.8%

一、产品定义与技术基础&#xff1a;主动式热管理的核心突破自适应散热风扇作为主动式热管理装置的核心载体&#xff0c;通过集成温度传感器、转速反馈模块与PWM控制接口&#xff0c;实现基于设备运行状态、环境温度及内部热负载的动态调节。相较于传统恒速风扇&#xff0c;其闭…...

Polars 2.0大规模清洗踩坑实录:3类隐性OOM陷阱+4步零拷贝修复法,DBA紧急封存的内部手册

第一章&#xff1a;Polars 2.0大规模清洗踩坑实录&#xff1a;3类隐性OOM陷阱4步零拷贝修复法&#xff0c;DBA紧急封存的内部手册三类隐性OOM陷阱真实复现 在处理12TB电商日志&#xff08;单文件超80GB Parquet&#xff09;时&#xff0c;Polars 2.0默认配置下静默触发OOM——非…...

2026年高性价比降AI工具:SpeedAI降AIGC率稳过审

2026年AIGC工具已经全面融入各类内容创作场景&#xff0c;降AI率、降AIGC率不再是学术圈的小众需求&#xff0c;更是论文写作、商业文案产出、自媒体内容创作、正式文稿发表等场景的核心刚需。现在市面上降AI工具种类繁多&#xff0c;但真正能做到效果稳定、不改动核心内容、操…...

用Multisim复刻经典:手把手教你搭建一个60秒倒计时器(附74LS161+4511完整仿真文件)

用Multisim复刻经典&#xff1a;手把手教你搭建一个60秒倒计时器&#xff08;附74LS1614511完整仿真文件&#xff09; 在电子工程的学习过程中&#xff0c;没有什么比亲手搭建一个实用电路更能加深理解的了。今天&#xff0c;我们将一起用Multisim这款强大的电路仿真软件&#…...