1、frameworks\base\core\java\android\provider\Settings.java
加入新的api
public static final class Global extends NameValueTable {/// AW CODE: [feat] support systemui show network speed./*** switch of network speed.* @hide*/public static final String NETWORK_SPEED_ENABLED = "network_speed_enabled";/// AW: add end.
2、frameworks\base\packages\SettingsProvider\res\values\defaults.xml
frameworks中把显示网速功能设置为false
<bool name="def_enable_network_speed">false</bool>
3、frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
第一次把显示网速给默认关闭
private void loadGlobalSettings(SQLiteDatabase db) {SQLiteStatement stmt = null;final Resources res = mContext.getResources();try {stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"+ " VALUES(?,?);");/// AW CODE: [feat] support systemui show network speed.loadBooleanSetting(stmt, Settings.Global.NETWORK_SPEED_ENABLED,R.bool.def_enable_network_speed);/// AW: add end.// --- Previously in 'system'
4、 frameworks\base\packages\SystemUI\res\layout\system_icons.xml
在systemui中加入显示网速的字体
android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingBottom="@dimen/status_bar_icons_padding_bottom"android:paddingTop="@dimen/status_bar_icons_padding_top"android:paddingStart="@dimen/status_bar_icons_padding_start"android:paddingEnd="@dimen/status_bar_icons_padding_end"android:gravity="center_vertical"><!-- /// AW CODE: [feat] support systemui show network speed.--><com.android.systemui.util.NetworkSpeedViewandroid:id="@+id/network_speed"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_vertical|end"android:autoSizeTextType="uniform"android:autoSizeMinTextSize="6dp"android:autoSizeMaxTextSize="10dp"android:includeFontPadding="false"android:layout_marginEnd="4dp"android:textColor="#ffffff"/><!-- /// AW: add end -->
5、frameworks\base\packages\SystemUI\res\values-sw600dp\dimens.xml
修改上面的间距
<dimen name="status_bar_icons_padding_bottom">0dp</dimen><dimen name="status_bar_icons_padding_top">0dp</dimen>
6、frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\PhoneStatusBarView.java
加入显示网速定义
private float mFontScale;/// AW CODE: [feat] support systemui show network speed.private DarkReceiver mNetworkSpeed;/// AW: add end./**
@Overridepublic void onFinishInflate() {super.onFinishInflate();mBattery = findViewById(R.id.battery);mClock = findViewById(R.id.clock);mCutoutSpace = findViewById(R.id.cutout_space_view);/// AW CODE: [feat] support systemui show network speed.mNetworkSpeed = findViewById(R.id.network_speed);/// AW: add end.updateResources();}
@Overrideprotected void onAttachedToWindow() {super.onAttachedToWindow();// Always have Battery meters in the status bar observe the dark/light modes.Dependency.get(DarkIconDispatcher.class).addDarkReceiver(mBattery);Dependency.get(DarkIconDispatcher.class).addDarkReceiver(mClock);/// AW CODE: [feat] support systemui show network speed.Dependency.get(DarkIconDispatcher.class).addDarkReceiver(mNetworkSpeed);/// AW: add end.if (updateDisplayParameters()) {updateLayoutForCutout();
@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();Dependency.get(DarkIconDispatcher.class).removeDarkReceiver(mBattery);Dependency.get(DarkIconDispatcher.class).removeDarkReceiver(mClock);/// AW CODE: [feat] support systemui show network speed.Dependency.get(DarkIconDispatcher.class).removeDarkReceiver(mNetworkSpeed);/// AW: add end.mDisplayCutout = null;}
7、packages\apps\Settings\res\values\strings.xml
设置中加入翻译
<string name="bv_display_network_speed">"Show real time network speed"</string>
8、packages\apps\Settings\res\xml\display_settings.xml
设置中的显示加入显示网速
<SwitchPreferenceCompatandroid:key="network_speed"android:title="@string/bv_display_network_speed"settings:controller="com.android.settings.display.NetworkSpeedPreferenceController"settings:keywords="@string/bv_display_network_speed" />
9、packages\apps\Settings\src\com\android\settings\display\NetworkSpeedPreferenceController.java
显示网速的点击
/** Copyright (C) 2018 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package com.android.settings.display;import android.content.Context;
import android.content.ContentResolver;
import android.hardware.display.ColorDisplayManager;
import android.hardware.display.NightDisplayListener;import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import android.provider.Settings;import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
import androidx.preference.SwitchPreferenceCompat;
import android.util.Log;public class NetworkSpeedPreferenceController extends TogglePreferenceController {private SwitchPreferenceCompat mPreference;static final int SETTING_VALUE_OFF = 0;static final int SETTING_VALUE_ON = 1;public NetworkSpeedPreferenceController(Context context, String key) {super(context, key);}@Overridepublic void displayPreference(PreferenceScreen screen) {super.displayPreference(screen);mPreference = screen.findPreference(getPreferenceKey());}@Overridepublic int getAvailabilityStatus() {return AVAILABLE;}@Overridepublic boolean isChecked() {final ContentResolver cr = mContext.getContentResolver();final boolean enabled = Settings.Global.getInt(cr,Settings.Global.NETWORK_SPEED_ENABLED , SETTING_VALUE_OFF)!= SETTING_VALUE_OFF;return enabled;}@Overridepublic boolean setChecked(boolean isChecked) {writeSimulateColorSpace(isChecked);return true;}private void writeSimulateColorSpace(boolean bool) {Log.d("NetworkSpeedView","updateNetWorkSpeedIcon s ------" + bool );final ContentResolver cr = mContext.getContentResolver();Settings.Global.putInt(cr,"network_speed_enabled", bool ? SETTING_VALUE_ON : SETTING_VALUE_OFF);}@Overridepublic int getSliceHighlightMenuRes() {// not needed since it's not sliceable// return NO_RES;return R.string.menu_key_display;}public void onActivated(boolean activated) {updateState(mPreference);}
}