开发平台基本信息
芯片: SDM450
版本: Android 9.0
kernel: msm-4.9
实现过程
- 增加锁屏图标
--- /dev/null
+++ b/frameworks/base/packages/SystemUI/res/drawable/ic_qs_lockscreen.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="64.0dp"
+ android:height="64.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M18.0,8.0l-1.0,0.0L17.0,6.0c0.0,-2.8 -2.2,-5.0 -5.0,-5.0C9.2,1.0 7.0,3.2 7.0,6.0l0.0,2.0L6.0,8.0c-1.1,0.0 -2.0,0.9 -2.0,2.0l0.0,10.0c0.0,1.1 0.9,2.0 2.0,2.0l12.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L20.0,10.0C20.0,8.9 19.1,8.0 18.0,8.0zM12.0,17.0c-1.1,0.0 -2.0,-0.9 -2.0,-2.0s0.9,-2.0 2.0,-2.0c1.1,0.0 2.0,0.9 2.0,2.0S13.1,17.0 12.0,17.0zM15.1,8.0L8.9,8.0L8.9,6.0c0.0,-1.7 1.4,-3.1 3.1,-3.1c1.7,0.0 3.1,1.4 3.1,3.1L15.1,8.0z"/>
+</vector>
+
- 增加文字描述
--- a/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -19,6 +19,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="quick_settings_lockscreen_label">锁屏</string>
<string name="app_label" msgid="4811759950673118541">"系统界面"</string>
<string name="status_bar_clear_all_button" msgid="2491321682873657397">"清除"</string>
<string name="status_bar_no_notifications_title" msgid="7812479124981107507">"无通知"</string>
--- a/frameworks/base/packages/SystemUI/res/values/strings.xml
+++ b/frameworks/base/packages/SystemUI/res/values/strings.xml
@@ -20,6 +20,8 @@
<!-- Name of the status bar as seen in the applications info settings page. [CHAR LIMIT=12] -->
<string name="app_label">System UI</string>
+ <string name="quick_settings_lockscreen_label">Lockscreen</string>
+
<!-- The text for the button in the notification window-shade that clears
all of the currently visible notifications. [CHAR LIMIT=10]-->
<string name="status_bar_clear_all_button">Clear</string>
- 整理下拉菜单列表并且增加锁屏键值
--- a/frameworks/base/packages/SystemUI/res/values/config.xml
+++ b/frameworks/base/packages/SystemUI/res/values/config.xml
@@ -109,7 +109,7 @@
<!-- The default tiles to display in QuickSettings -->
<string name="quick_settings_tiles_default" translatable="false">
- wifi,bt,dnd,flashlight,rotation,battery,cell,airplane,cast
+ eth,wifi,cell,dnd,bt,lock,hotspot
</string>
- 增加锁屏逻辑控制类
--- /dev/null
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/LockScreenTile.java
@@ -0,0 +1,112 @@
+
+package com.android.systemui.qs.tiles;
+
+
+import android.os.PowerManager;
+import android.os.SystemClock;
+import com.android.systemui.R;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.provider.Settings;
+import android.service.quicksettings.Tile;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Switch;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settingslib.wifi.AccessPoint;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.plugins.qs.DetailAdapter;
+import com.android.systemui.plugins.qs.QSIconView;
+import com.android.systemui.plugins.qs.QSTile;
+import com.android.systemui.plugins.qs.QSTile.SignalState;
+import com.android.systemui.qs.AlphaControlledSignalTileView;
+import com.android.systemui.qs.QSDetailItems;
+import com.android.systemui.qs.QSDetailItems.Item;
+import com.android.systemui.qs.QSHost;
+import com.android.systemui.qs.tileimpl.QSIconViewImpl;
+import com.android.systemui.qs.tileimpl.QSTileImpl;
+import javax.inject.Inject;
+
+public class LockScreenTile extends QSTileImpl<SignalState> {
+
+ @Inject
+ public LockScreenTile(QSHost host) {
+ super(host);
+ }
+
+ @Override
+ public SignalState newTileState() {
+ return new SignalState();
+ }
+
+ @Override
+ public void handleSetListening(boolean listening) {
+ }
+
+ @Override
+ public Intent getLongClickIntent() {
+ return new Intent("");
+ }
+
+ @Override
+ protected void handleClick() {
+ setEnabled(true);
+ }
+
+ private void setEnabled(boolean enable) {
+ if(enable){
+ final PowerManager pmr = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
+ pmr.goToSleep(SystemClock.uptimeMillis(),PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON,PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
+ }
+ }
+
+ @Override
+ protected void handleSecondaryClick() {
+
+ }
+
+ @Override
+ public CharSequence getTileLabel() {
+ return null;
+ }
+
+ @Override
+ protected void handleUpdateState(SignalState state, Object arg) {
+ state.icon = ResourceIcon.get(R.drawable.ic_qs_lockscreen);
+
+ state.value = true;
+ state.label = mContext.getString(R.string.quick_settings_lockscreen_label);
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsEvent.QS_FLASHLIGHT;
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+}
- 根据config键值加载锁屏逻辑控制类
--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java
@@ -42,6 +42,7 @@ import com.android.systemui.qs.tiles.NfcTile;
import com.android.systemui.qs.tiles.NightDisplayTile;
import com.android.systemui.qs.tiles.RotationLockTile;
import com.android.systemui.qs.tiles.UiModeNightTile;
+import com.android.systemui.qs.tiles.LockScreenTile;
import com.android.systemui.qs.tiles.UserTile;
import com.android.systemui.qs.tiles.WifiTile;
import com.android.systemui.qs.tiles.WorkModeTile;
@@ -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<LockScreenTile> mLockScreenTileProvider;
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<LockScreenTile> lockScreenTileProvider) {
mWifiTileProvider = wifiTileProvider;
mBluetoothTileProvider = bluetoothTileProvider;
mCellularTileProvider = cellularTileProvider;
@@ -117,6 +120,7 @@ public class QSFactoryImpl implements QSFactory {
mNfcTileProvider = nfcTileProvider;
mMemoryTileProvider = memoryTileProvider;
mUiModeNightTileProvider = uiModeNightTileProvider;
+ mLockScreenTileProvider = lockScreenTileProvider;
}
public void setHost(QSTileHost host) {
@@ -170,6 +174,8 @@ public class QSFactoryImpl implements QSFactory {
return mNfcTileProvider.get();
case "dark":
return mUiModeNightTileProvider.get();
+ case "lock":
+ return mLockScreenTileProvider.get();
}
// Intent tiles.