当前位置: 首页 > 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();}

http://www.lryc.cn/news/247759.html

相关文章:

  • Cortex-M与RISC-V区别
  • YashanDB入选2023年世界互联网大会领先科技奖成果集《科技之魅》
  • C语言基础程序设计题
  • Spring Boot实现图片上传和展示
  • 大数据-之LibrA数据库系统告警处理(ALM-37015 Gaussdb进程可用文件句柄资源不足)
  • 大一学编程怎么学?刚接触编程怎么学习,有没有中文编程开发语言工具?
  • GoWeb学习-第二天
  • 04-鸿蒙4.0学习之样式装饰器相关
  • C# 线程(1)
  • 冒泡排序以及改进方案
  • QTextEdit 是 Qt 框架中的一个类,用于显示和编辑多行文本内容的可编辑部件
  • vue+jsonp编写可导出html的模版,可通过外部改json动态更新页面内容
  • 查看各ip下的连接数
  • Linux—进程状态
  • 万宾科技可燃气体监测仪科技作用全览
  • Python与GPU编程快速入门(三)
  • praseInt 和 逻辑或连用
  • 对属于国家秘密的地理信息的获取、持有、提供、利用情况进行登记并长期保存,实行可追溯管理
  • XAER_RMERR: Fatal error occurred in the transaction branch异常解决
  • Redis面试常见问题
  • 浏览器触发下载Excel文件-Java实现
  • 每日汇评:黄金在上涨趋势恢复之前面临修正性回调的风险
  • 【开源】基于Vue.js的大学计算机课程管理平台的设计和实现
  • c++环形队列
  • 智能客服核心技术——预测会话与答案生成
  • C语言——计算Fibonacci数列
  • 【ASP.NET CORE】.NET 6.0 NET CORE MVC连接SQLSERVER数据库
  • filebeat日志收集工具
  • 一文例说嵌入式 C 程序的内聚和耦合
  • python-爬虫(可直接使用)