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.NetworkSpeedView
android: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.
/**
@Override
public 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();
}
@Override
protected 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();
@Override
protected 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
设置中的显示加入显示网速
<SwitchPreferenceCompat
android: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);
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey());
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
}
@Override
public 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;
}
@Override
public 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);
}
@Override
public 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);
}
}