Android 15 加入显示网速

发布于:2025-02-26 ⋅ 阅读:(12) ⋅ 点赞:(0)

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);
    }
}




网站公告

今日签到

点亮在社区的每一天
去签到