android 下拉狀態列(SystemUI)常見修改記錄
- 摘要:下拉狀態列:1.下拉狀態列的亮度條:frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.javamBrightnessView對應佈局檔案:quick_settings_brightness_dialog.xml2.滑動亮度條後過渡到桌面的亮度條frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phon
-
下拉狀態列:
1.下拉狀態列的亮度條:
frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
mBrightnessView
對應佈局檔案:quick_settings_brightness_dialog.xml
2.滑動亮度條後過渡到桌面的亮度條
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
protected void inflateStatusBarWindow(Context context) { mStatusBarWindow = (StatusBarWindowView) View.inflate(context, R.layout.super_status_bar, null); }
mStatusBarWindow
對應佈局檔案:super_status_bar.xml
佈局檔案中對應項:<includelayout="@layout/brightness_mirror" />
3.亮度條中的滑動條樣式修改
frameworks/base/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
佈局檔案:status_bar_toggle_slider.xml
4.下拉狀態列的圖示塊
有兩處
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/***Tile.java
對應的Vector向量圖檔案命名為ic_qs_xxx.xml
AirplaneModeTile:飛航模式,預設有動畫的。用圖片替換要把動畫在程式碼中註釋掉。
BatteryTile:電池。用BatteryMeterDrawable自定義view畫出來的。
BluetoothTile:藍芽
CastTile:投射
CellularTile:移動資料網路,無sim卡
ColorInversionTile:反色
DataSaverTile:流量節省程式
DataUsageDetailView:預設沒顯示,資料使用細節
DndTile:勿擾donot disturb
FlashlightTile:手電筒
HotspotTile:熱點
IntentTile:預設沒顯示,不知道長啥樣
LocationTile:位置資訊
RotationLockTile:自動旋轉,縱向
ScreenShotTile:截圖
UserDetailItemView:預設沒顯示,不知道長啥樣
UserDetailView:預設沒顯示,不知道長啥樣
UserTile:預設沒顯示,不知道長啥樣
WifiTile:Wlan
WorkModeTile:預設沒顯示,不知道長啥樣
還有MTK的
/frameworks/base/packages/SystemUI/src/com/mediatek/systemui/qs/tiles/***Tile.java
HotKnotTile
ApnSettingsTile
DualSimSettingsTile
MobileDataTile
QsIconWrapper
SimDataConnectionTile
5.增刪下拉狀態列的圖示塊
frameworks/base/packages/SystemUI/res/values/config.xml中修改
<!--The default tiles to display in QuickSettings --> <!--M: add hotknot tile --> <stringname="quick_settings_tiles_default" translatable="false"> wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotknot,screenshot </string>
6.WLAN圖示塊點選後訊號強度
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java
private static final int[] ICONS = { R.drawable.ic_qs_wifi_full_0, R.drawable.ic_qs_wifi_full_1, R.drawable.ic_qs_wifi_full_2, R.drawable.ic_qs_wifi_full_3, R.drawable.ic_qs_wifi_full_4, };
7.修改手機訊號強度圖
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java
static final int[][] QS_TELEPHONY_SIGNAL_STRENGTH = { { R.drawable.ic_qs_signal_0, R.drawable.ic_qs_signal_1, R.drawable.ic_qs_signal_2, R.drawable.ic_qs_signal_3, R.drawable.ic_qs_signal_4 }, { R.drawable.ic_qs_signal_full_0, R.drawable.ic_qs_signal_full_1, R.drawable.ic_qs_signal_full_2, R.drawable.ic_qs_signal_full_3, R.drawable.ic_qs_signal_full_4 } };
8.單條通知欄ui修改
修改兩個位置:
位置1:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
protectedvoid onFinishInflate() {}中
修改下面兩句
mBackgroundNormal.setCustomBackground
mBackgroundDimmed.setCustomBackground
同時讓下面兩個方法為空
privatevoid updateOutlineAlpha() {}
publicvoid setFakeShadowIntensity(float shadowIntensity, floatoutlineAlpha, int shadowYEnd,
intoutlineTranslation) {}
位置2:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
這個是個ViewGroup,它在onDraw裡面還畫了次背景。需要幹掉這個背景。
讓下面這個方法為空。
privatevoid updateBackground() {}
protectedvoid onDraw(Canvas canvas) {}中登出掉下面這句
canvas.drawRect(0,mCurrentBounds.top, getWidth(), mCurrentBounds.bottom,mBackgroundPaint);
修改後效果:
9.多條通知欄的背景修改
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView
預設背景就是當前介面截圖加了個黑色透明度。
這個要謹改,因為會影響到按下power鍵喚醒螢幕時候的鎖屏。如果把背景設成黑色,可能power鍵喚醒屏幕後,多條通知欄的背景是黑的。
10.刪除修改顯示佈局邊界,GPU呈現模式分析,Nearby
GPU呈現模式分析,顯示佈局邊界都是packages/apps/Settings中的
在AndroidManifest.xml中可以找到
<service android:name=".qstile.DevelopmentTiles$ShowLayout" android:label="@string/debug_layout" android:icon="@drawable/tile_icon_show_layout" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" android:enabled="false"> <intent-filter> <action android:name="android.service.quicksettings.action.QS_TILE" /> </intent-filter> </service> <service android:name=".qstile.DevelopmentTiles$GPUProfiling" android:label="@string/track_frame_time" android:icon="@drawable/tile_icon_graphics" android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" android:enabled="false"> <intent-filter> <action android:name="android.service.quicksettings.action.QS_TILE" /> </intent-filter> </service>
label對應的string在framework/base/packages/SettingsLib中
icon對應的drawable在packages/apps/Settings中
packages/apps/Settings/src/com/android/settings/qstile/DevelopmentTiles.java
Nearby是谷歌的玩意,修改的話也能修改,就是加判定在TileQueryHelper.java中修改,當然上面的
GPU呈現模式分析,顯示佈局邊界也可以這麼修改。只不過不建議用這種方式修改。
刪除這三個東西:
frameworks/base/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java
中
private class QueryTilesTask extends AsyncTask<Collection<QSTile<?>>, Void, Collection<TileInfo>> {} doInBackground{}中 List<ResolveInfo> services = pm.queryIntentServicesAsUser( new Intent(TileService.ACTION_QS_TILE), 0, ActivityManager.getCurrentUser()); 這句修改為 //lqp //List<ResolveInfo> services = pm.queryIntentServicesAsUser( // new Intent(TileService.ACTION_QS_TILE), 0, ActivityManager.getCurrentUser()); List<ResolveInfo> services = new ArrayList<ResolveInfo>();
11.為原生android下拉狀態列新增自動調節亮度開關
alps/device/mediatek/mt6735/bird.mk
alps/frameworks/base/packages/SystemUI/bird/res/layout/ui_icon_qs_brightness_dialog.xml
alps/frameworks/base/packages/SystemUI/bird/res/values-zh-rCN/strings.xml
alps/frameworks/base/packages/SystemUI/bird/res/values/strings.xml
alps/frameworks/base/packages/SystemUI/bird/src/com/bird/systemui/BirdFeatureOption.java
alps/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
alps/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
.../base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
alps/packages/apps/Settings/src/com/android/settings/DisplaySettings.java
三個地方需要同步,設定中的顯示DisplaySettings.下拉狀態列的圖示處QSPanel,點選滑條後的PhoneStatusBar。
如何同步? 使用觀察者模式。
在Switch進行操作後需要變更Settings.System.SCREEN_BRIGHTNESS_MODE值。在值變化後Switch控制元件狀態需要同步變化。
QSPanel.java中程式碼:
//liuqipeng add 20170619 BUG #26165 import android.widget.CompoundButton; import android.widget.ToggleButton; import android.widget.Switch; import android.provider.Settings; import android.widget.CompoundButton.OnCheckedChangeListener; import android.database.ContentObserver; import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE; import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL; //liuqipeng end 20170619 public QSPanel(Context context, AttributeSet attrs) { //liuqipeng add 20170619 BUG #26165 if(BirdFeatureOption.BIRD_SHOW_AUTO_BRIGHT_SWITCH){ View mAutoBrightRl=findViewById(R.id.auto_bright_rl); mAutoBrightRl.setVisibility(View.VISIBLE); Switch mAutoBright=(Switch)findViewById(R.id.auto_bright_switch); int brightnessMode = Settings.System.getInt(context.getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); mAutoBright.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL); mAutoBright.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Settings.System.putInt(context.getContentResolver(), SCREEN_BRIGHTNESS_MODE, isChecked ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : SCREEN_BRIGHTNESS_MODE_MANUAL); } }); ContentObserver BrightnessMode = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); int brightnessMode = Settings.System.getInt(context.getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); mAutoBright.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL); } }; context.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE),true, BrightnessMode); } } //liuqipeng end 20170619