栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android Q - Settings 添加一级菜单

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android Q - Settings 添加一级菜单

Android Q - Settings页面添加二级选项_感觉不怎么会的博客-CSDN博客

本次修改基本同上一篇文章,在一级菜单中的最后添加 OTG 选项,简单记录下。

文件清单,依旧位于 packages/apps/Settings :

  • res/xml/top_level_settings.xml
  • res/xml/otg_settings.xml
  • src/com/android/settings/otg/OTGPreferenceController.java
  • src/com/android/settings/otg/OTGSettingFragment.java
  • src/com/android/settings/otg/TopLevelOTGPreferenceController.java

下面简单说明。

1、修改布局文件

路径:res/xml/top_level_settings.xml

说明:这个文件就是打开 Settings 应用的首页

...
    

路径:res/xml/otg_settings.xml

说明:进入 OTG 菜单后的布局文件,领导只说需要一个开关选项,功能实现可仿照上一篇文章实现。




    
    

 2、功能实现

路径:src/com/android/settings/otg/TopLevelOTGPreferenceController.java
说明:菜单选项

package com.android.settings.otg;
import android.content.Context;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
public class TopLevelOTGPreferenceController extends BasePreferenceController {
    public TopLevelOTGPreferenceController(Context context, String preferenceKey) {
        super(context, preferenceKey);
    }
    @Override
    public int getAvailabilityStatus() {
        return AVAILABLE;
    }
    @Override
    public CharSequence getSummary() {
        return mContext.getString(R.string.settings_otg_text);
    }
}

路径:src/com/android/settings/otg/OTGSettingFragment.java

说明:这个就是点击一级菜单后进入的页面,加载二级页面。(有的参数不太清楚怎么添加,清楚之后再更新)


package com.android.settings.otg;
import static com.android.settings.network.MobilePlanPreferenceController.MANAGE_MOBILE_PLAN_DIALOG_ID;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
import android.provider.SearchIndexableResource;
import android.util.Log;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.FeatureFlags;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.development.featureflags.FeatureFlagPersistent;
import com.android.settings.network.MobilePlanPreferenceController.MobilePlanPreferenceHost;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.wifi.WifiMasterSwitchPreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable;
import com.android.settings.deviceinfo.BuildNumberPreferenceController;
import com.android.settings.otg.OTGPreferenceController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@SearchIndexable
public class OTGSettingFragment extends DashboardFragment {
    private static final String TAG = "OTGDashboardFrag";
    public static final String ARG_SHOW_EXPAND_BUTTON = "showExpandButton";
    public static final String EXTRA_SHOW_AWARE_DISABLED = "show_aware_dialog_disabled";
    private static final int COUNT_INVALID = -1;
    private Fragment mFragment;
    
    private AlertDialog mMobilePlanDialog;
    
    private int mChildrenCount = COUNT_INVALID;
    @Override
    public int getMetricsCategory() {
        //应该是这种格式的 SettingsEnums.SETTINGS_NETWORK_CATEGORY;
        //但是我不知道如何添加,暂时默认这个数值吧~
        return 9232;
    }
    @Override
    protected String getLogTag() {
        return TAG;
    }
    @Override
    protected int getPreferenceScreenResId() {
        return R.xml.otg_settings;
    }
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        
        Bundle args = getArguments();
        if (args != null) {
            if (!args.getBoolean(ARG_SHOW_EXPAND_BUTTON, true)) {
                mChildrenCount = Integer.MAX_VALUE;
            }
        }
        use(OTGPreferenceController.class).setFragment(this);
    }
    @Override
    protected List createPreferenceControllers(Context context) {
        return buildPreferenceControllers(context, getSettingsLifecycle(),
                this );
    }
    private static List buildPreferenceControllers(Context context,
                                                                                 Lifecycle lifecycle, Fragment fragment) {
        final List controllers = new ArrayList<>();
        return controllers;
    }
}

路径:src/com/android/settings/otg/OTGPreferenceController.java

说明:这个基本同上一篇文章中的以太网开关控制一样,甚至比之前写的更少。


package com.android.settings.otg;
import android.os.Bundle;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.text.TextUtils;
import android.util.Log;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.utils.ThreadPool;
import com.android.settings.utils.ReflectUtil;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class OTGPreferenceController extends TogglePreferenceController {
    private static final String TAG = "OTGPreferenceController";
    public OTGPreferenceController(Context context, String key) {
        super(context, key);
    }
    private Fragment mFragment;
    private SwitchPreference mOTGPreference;
    private SharedPreferences mSharedPreference;
    @Override
    public boolean handlePreferenceTreeClick(Preference preference) {
        android.util.Log.d(TAG, "handlePreferenceTreeClick: 測試" + preference.getKey());
        changeState(!isChecked());
        return false;
    }
    @Override
    @AvailabilityStatus
    public int getAvailabilityStatus() {
        return AVAILABLE;
    }
    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        android.util.Log.d(TAG, "displayPreference: " );
        if (isAvailable()) {
            mOTGPreference = screen.findPreference(getPreferenceKey());
            if (isChecked())
                mOTGPreference.setSummary(mContext.getString(R.string.settings_eth_open));
            else
                mOTGPreference.setSummary(mContext.getString(R.string.settings_eth_close));
            mOTGPreference.setChecked(isChecked());
        }
    }
    public void init(DashboardFragment fragment) {
        final Context context = fragment.getContext();
    }
    public void setFragment(Fragment hostFragment) {
        mFragment = hostFragment;
    }
    @Override
    public boolean setChecked(boolean isChecked) {
        android.util.Log.d(TAG, "setChecked: " + isChecked);
        return false;
    }
    public void changeState(boolean state) {
        android.util.Log.d(TAG, "changeState to be = " + state);
        if (state) {
            mOTGPreference.setSummary(mContext.getString(R.string.settings_eth_open));
            mOTGPreference.setChecked(true);
            ReflectUtil.setProperty("persist.flyscale.otg", "1");
        } else {
            mOTGPreference.setSummary(mContext.getString(R.string.settings_eth_close));
            mOTGPreference.setChecked(false);
            ReflectUtil.setProperty("persist.flyscale.otg", "0");
        }
        android.util.Log.d(TAG, "changeState: currentState is = " + isChecked());
    }
    @Override
    public boolean isChecked() {
        return TextUtils.equals(ReflectUtil.getProperty("persist.flyscale.otg", "0"), "1");
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/865548.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号