MTK平台 MtkSettings添加memory一级菜单显示内存信息

发布时间 2023-05-24 17:34:09作者: 一颗苹果!!

1.矢量图 用Androidstudio画的 vendor\mediatek\proprietary\packages\apps\MtkSettings\res\drawable\ic_settings_memory_test.xml

<vector android:autoMirrored="true" android:height="24dp"
    android:tint="#FFFFFF" android:viewportHeight="24"
    android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="@android:color/white" android:pathData="M15,9L9,9v6h6L15,9zM13,13h-2v-2h2v2zM21,11L21,9h-2L19,7c0,-1.1 -0.9,-2 -2,-2h-2L15,3h-2v2h-2L11,3L9,3v2L7,5c-1.1,0 -2,0.9 -2,2v2L3,9v2h2v2L3,13v2h2v2c0,1.1 0.9,2 2,2h2v2h2v-2h2v2h2v-2h2c1.1,0 2,-0.9 2,-2v-2h2v-2h-2v-2h2zM17,17L7,17L7,7h10v10z"/>
</vector>

2. 新增vendor\mediatek\proprietary\packages\apps\MtkSettings\res\drawable\ic_homepage_memory.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <com.android.settingslib.widget.AdaptiveIconShapeDrawable
            android:width="@dimen/dashboard_tile_image_size"
            android:height="@dimen/dashboard_tile_image_size"
            android:color="#7B68EE" />
    </item>

    <item
    android:width="28dp"
    android:height="28dp"
    android:start="4dp"
    android:top="4dp"
    android:drawable="@drawable/ic_settings_memory_test" />
</layer-list>
3. 修改 vendor\mediatek\proprietary\packages\apps\MtkSettings\res\xml\top_level_settings.xml
<Preference
        android:key="top_level_storage"
        android:title="@string/storage_settings"
        android:summary="@string/summary_placeholder"
        android:icon="@drawable/ic_homepage_storage"
        android:order="-60"
        android:fragment="com.android.settings.deviceinfo.StorageSettings"
        settings:controller="com.android.settings.deviceinfo.TopLevelStoragePreferenceController" />

    <Preference
        android:key="top_level_memory"
        android:title="@string/memory_settings_title"
        android:summary="@string/summary_placeholder"
        android:icon="@drawable/ic_homepage_memory"
        android:order="-55"
        android:fragment="com.android.settings.applications.ProcessStatsSummary"
        settings:controller="com.android.settings.deviceinfo.TopLevelMemoryPreferenceController" />

    <Preference
        android:key="top_level_privacy"
        android:title="@string/privacy_dashboard_title"
        android:summary="@string/privacy_dashboard_summary"
        android:icon="@drawable/ic_homepage_privacy"
        android:order="-50"
        android:fragment="com.android.settings.privacy.PrivacyDashboardFragment"
        settings:controller="com.android.settings.privacy.TopLevelPrivacyPreferenceController" />

注意这里的order 顺序递增即可
4. 新增文件vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\deviceinfo\TopLevelMemoryPreferenceController.java
package com.android.settings.deviceinfo;

import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.storage.StorageManager;
import android.text.format.Formatter;
import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.applications.ProcStatsData;
import com.android.settings.applications.ProcStatsData.MemInfo;
import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
import com.android.settingslib.deviceinfo.PrivateStorageInfo;
import com.android.settingslib.utils.ThreadUtils;
import android.text.format.Formatter.BytesResult;

import java.io.File;
import java.text.NumberFormat;

public class TopLevelMemoryPreferenceController extends BasePreferenceController {
    private final ActivityManager mActivityManager;
    private final MemoryInfo mMemoryInfo;

    public TopLevelMemoryPreferenceController(Context context, String preferenceKey) {
        super(context, preferenceKey);
        mActivityManager = mContext.getSystemService(ActivityManager.class);
        mMemoryInfo = new MemoryInfo();
    }

    @Override
    public int getAvailabilityStatus() {
        return AVAILABLE;
    }

    @Override
    protected void refreshSummary(Preference preference) {
        if (preference == null) {
            return;
        }
        ThreadUtils.postOnBackgroundThread(() -> {
            mActivityManager.getMemoryInfo(mMemoryInfo);
            final long totalMemory = mMemoryInfo.totalMem;
            final long availMemory = mMemoryInfo.availMem;
            final long usedMemory = totalMemory - availMemory;
            ThreadUtils.postOnMainThread(() -> {
                final String usedMemoryStr = Formatter.formatFileSize(mContext, usedMemory);
                final String availMemoryStr = Formatter.formatFileSize(mContext, availMemory);
                preference.setSummary(mContext.getString(R.string.memory_summary, usedMemoryStr, availMemoryStr));
            });
        });
    }
}