一、首先在config.xml中配置快捷设置开关面板要显示的tile
<string name="quick_settings_tiles_all" translatable="false">wifi,data,bt,sound,rotation,networkmode,airplane,flashlight,location,screenshot,hotspot,nfc</string>
二、创建对应的Tile类
在./app/src/main/java/com/android/systemui/qs/tiles/目录中,有原生的相关Tile类,其中设置相关图标样式,开关逻辑。
各Tile类均继承了QSTile抽象类,重写handleClick()、getLongClickIntent()、handleUpdateState()等方法。
三、app/src/main/java/com/android/systemui/statusbar/phone/QSTileHost.java文件中会根据config中的配置加载相应的Tile,createTile(String tileSpec)函数。
public QSTile createTile(String tileSpec) {
if (tileSpec.equals("wifi"))
return new WifiTile(mHost);
else if (tileSpec.equals("bt"))
return new BluetoothTile(mHost);
else if (tileSpec.equals("cell"))
return new CellularTile(mHost);
else if (tileSpec.equals("dnd"))
return new DndTile(mHost);
else if (tileSpec.equals("inversion"))
return new ColorInversionTile(mHost);
else if (tileSpec.equals("airplane"))
return new AirplaneModeTile(mHost);
else if (tileSpec.equals("work"))
return new WorkModeTile(mHost);
else if (tileSpec.equals("rotation"))
return new RotationLockTile(mHost);
else if (tileSpec.equals("flashlight"))
return new FlashlightTile(mHost);
else if (tileSpec.equals("location"))
return new LocationTile(mHost);
else if (tileSpec.equals("cast"))
return new CastTile(mHost);
else if (tileSpec.equals("hotspot"))
return new HotspotTile(mHost);
else if (tileSpec.equals("user"))
return new UserTile(mHost);
else if (tileSpec.equals("battery"))
return new BatterySaverTile(mHost);
else if (tileSpec.equals("saver"))
return new DataSaverTile(mHost);
else if (tileSpec.equals("night"))
return new NightDisplayTile(mHost);
else if (tileSpec.equals("nfc"))
return new NfcTile(mHost);// Intent tiles.
else if (tileSpec.startsWith(IntentTile.PREFIX))
return IntentTile.create(mHost, tileSpec);
else if (tileSpec.startsWith(CustomTile.PREFIX))
return CustomTile.create(mHost, tileSpec);
else {
Log.w(TAG, "Bad tile spec: " + tileSpec);
return null;
}
}
@Override
public QSTileView createTileView(QSTile tile, boolean collapsedView) {
Context context = new ContextThemeWrapper(mHost.getContext(), R.style.qs_theme);
QSIconView icon = tile.createTileView(context);
if (collapsedView) {
return new QSTileBaseView(context, icon, collapsedView);
} else {
return new com.android.systemui.qs.tileimpl.QSTileView(context, icon);
}
}