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>
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;
@Inject
public TouchPanelTile(QSHost host) {
super(host);
qsHost = host;
}
@Override
public BooleanState newTileState() {
return new BooleanState();
}
@Override
protected 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);
}
@Override
protected void handleUpdateState(BooleanState state, Object arg) { //下拉quick setting時調用
if (isHandleClick) {
…..
} else {
try {
String mode = SystemProperties.get(PERSIST_KEY_PROP_TOUCH_MODE);
……
//state.labe 設置顯示title
state.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);
}
@Override
public int getMetricsCategory() {
return MetricsEvent.QS_TOUCHPANEL;
}
@Override
public Intent getLongClickIntent() { //長按顯示界面
return new Intent(Settings.ACTION_DISPLAY_SETTINGS);
}
...
@Override
public 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_SETTINGS
QS_TOUCHPANEL = 1751;
@@ -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();
}
原文地址:https://blog.csdn.net/Leif_dong/article/details/134597364
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_#ID#.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。