android settings界面修改(添加等)

Android 7.1 添加一个设置选项 根据需求,在设置界面添加一个设置选项“USB设置” 1、packages/apps/Settings/AndroidManifest.xml 添加Activity信息 <!-- UsbDeviceSettings --> <activity android:name="Settings$UsbDeviceSettingsActivity" android:lab... 阅读详情

android版本:4.2.2

参考博客:http://blog.youkuaiyun.com/way_ping_li/article/details/18076001

相比之下代码有些不同,记录下来一是留给自己以后查阅,二是希望对想我这样初学者有所帮助,仅此而已。

/*
 * Copyright (C) 2008 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;

import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.ArrayUtils;
import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
import com.android.settings.accounts.AccountSyncSettings;
import com.android.settings.accounts.AuthenticatorHelper;
import com.android.settings.accounts.ManageAccountsSettings;
import com.android.settings.applications.InstalledAppDetails;
import com.android.settings.applications.ManageApplications;
import com.android.settings.bluetooth.BluetoothEnabler;
import com.android.settings.deviceinfo.Memory;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.vpn2.VpnSettings;
import com.android.settings.wifi.WifiEnabler;
import com.mediatek.common.featureoption.FeatureOption;


import android.annotation.SuppressLint;
//zyc,add,start,20141215
import android.app.ActionBar;
import android.app.ActionBar.Tab;  
import android.app.ActionBar.TabListener;  
import android.app.FragmentTransaction;
import android.preference.PreferenceManager; 
//zyc,add,end,20141215
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.OnAccountsUpdateListener;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.INetworkManagementService;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.Switch;
import android.widget.TextView;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.app.Activity;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;

/**
 * Top-level settings activity to handle single pane and double pane UI layout.
 */
public class Settings extends PreferenceActivity
        implements ButtonBarHandler, OnAccountsUpdateListener {

    private static final String LOG_TAG = "Settings";

    private static final String META_DATA_KEY_HEADER_ID =
        "com.android.settings.TOP_LEVEL_HEADER_ID";
    private static final String META_DATA_KEY_FRAGMENT_CLASS =
        "com.android.settings.FRAGMENT_CLASS";
    private static final String META_DATA_KEY_PARENT_TITLE =
        "com.android.settings.PARENT_FRAGMENT_TITLE";
    private static final String META_DATA_KEY_PARENT_FRAGMENT_CLASS =
        "com.android.settings.PARENT_FRAGMENT_CLASS";

    private static final String EXTRA_CLEAR_UI_OPTIONS = "settings:remove_ui_options";

    private static final String SAVE_KEY_CURRENT_HEADER = "com.android.settings.CURRENT_HEADER";
    private static final String SAVE_KEY_PARENT_HEADER = "com.android.settings.PARENT_HEADER";

    private String mFragmentClass;
    private int mTopLevelHeaderId;
    private Header mFirstHeader;
    private Header mCurrentHeader;
    private Header mParentHeader;
    private boolean mInLocalHeaderSwitch;

    // Show only these settings for restricted users
    private int[] SETTINGS_FOR_RESTRICTED = {
            R.id.wireless_section,
            R.id.wifi_settings,
            R.id.bluetooth_settings,
            R.id.data_usage_settings,
            R.id.wireless_settings,
            R.id.device_section,
            R.id.sound_settings,
            R.id.display_settings,
            R.id.storage_settings,
            R.id.application_settings,
            R.id.battery_settings,
            R.id.personal_section,
            R.id.location_settings,
            R.id.security_settings,
            R.id.language_settings,
            R.id.user_settings,
            R.id.account_settings,
            R.id.account_add,
            R.id.system_section,
            R.id.date_time_settings,
            R.id.about_settings,
            R.id.accessibility_settings
    };

    private SharedPreferences mDevelopmentPreferences;
    private SharedPreferences.OnSharedPreferenceChangeListener mDevelopmentPreferencesListener;

    // TODO: Update Call Settings based on airplane mode state.

    protected HashMap<Integer, Integer> mHeaderIndexMap = new HashMap<Integer, Integer>();
    ///M: add for wifi only project tablet
    private boolean mIsWifiOnly = false;
    private AuthenticatorHelper mAuthenticatorHelper;
    private Header mLastHeader;
    private boolean mListeningToAccountUpdates;
    ///M: add for gray the imageview
    private static final int IMAGE_GRAY = 75;//30% of 0xff in transparent
    private static final int ORIGINAL_IMAGE = 255;
	
	//start by zyc 20141215  
    private int mTabFlag;  
    private static final int FLAG_TAB_WIRELESS_NETWORKS = 0;  
    private static final int FLAG_TAB_DEVICE = 1;  
    private static final int FLAG_TAB_PERSONAL = 2;  
    private static final int FLAG_TAB_SYSTEM = 3;  
	  private final TabListener mTabListener = new TabListener() {  
          
        @Override  
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {  
            // TODO Auto-generated method stub           
        }  
          
        @Override  
        public void onTabSelected(Tab tab, FragmentTransaction ft) {  
            //Log.i("lwp-log", "tab.getContentDescription().toString() = "+tab.getContentDescription().toString());  
            if (tab.getContentDescription().toString().equals(getResources().getString(R.string.header_category_wireless_networks))){  
                mTabFlag = FLAG_TAB_WIRELESS_NETWORKS;  
            }else if(tab.getContentDescription().toString().equals(getResources().getString(R.string.header_category_personal))) {  
                mTabFlag = FLAG_TAB_PERSONAL;  
            } else if (tab.getContentDescription().toString().equals(getResources().getString(R.string.header_category_system))) {  
                mTabFlag = FLAG_TAB_SYSTEM;  
            } else if (tab.getContentDescription().toString().equals(getResources().getString(R.string.header_category_device))) {  
                mTabFlag = FLAG_TAB_DEVICE;  
            }  
            //Log.i("lwp-log", "onTabSelected mTabFlag = " + mTabFlag);   
            invalidateHeaders();  
        }  
          
        @Override  
        public void onTabReselected(Tab tab, FragmentTransaction ft) {  
        }  
    };
	
	private void setupWirelessNetworks(ActionBar bar) {  
         final Tab tab = bar.newTab();  
         View view = zInflater.inflate(R.layout.tab_widget_view, null);//투ᅯ￘layout  
         ImageView dialView =  (ImageView)view.findViewById(R.id.main_activity_tab_image);//ᅪ턻  
         if(dialView != null){  
             dialView.setImageResource(R.drawable.ic_tab_wireless);  
         }  
         TextView dialText = (TextView) view.findViewById(R.id.main_activity_tab_text);  //ᅫᅣᅲᅱ
         if(dialText!=null){  
             dialText.setText(R.string.header_category_wireless_networks);  
         }  
         tab.setCustomView(view);  
         tab.setTabListener(mTabListener);  //￉│ᅱᅢᄐ¢ᅩ�
         tab.setContentDescription(R.string.header_category_wireless_networks);  
            bar.addTab(tab);  
    }
	
	private void setupDevice(ActionBar bar) {  
         final Tab tab = bar.newTab();  
         View view = zInflater.inflate(R.layout.tab_widget_view, null);  
         ImageView dialView =  (ImageView)view.findViewById(R.id.main_activity_tab_image);  
         if(dialView != null){  
             dialView.setImageResource(R.drawable.ic_tab_device);  
         }  
         TextView dialText = (TextView) view.findViewById(R.id.main_activity_tab_text);  
         if(dialText!=null){  
             dialText.setText(R.string.header_category_device);  
         }  
         tab.setCustomView(view);  
         tab.setTabListener(mTabListener);  
         tab.setContentDescription(R.string.header_category_device);  
            bar.addTab(tab);  
    }  
	
	private void setupPersonal(ActionBar bar) {  
         final Tab tab = bar.newTab();  
         View view = zInflater.inflate(R.layout.tab_widget_view, null);  
         ImageView dialView =  (ImageView)view.findViewById(R.id.main_activity_tab_image);  
         if(dialView != null){  
             dialView.setImageResource(R.drawable.ic_tab_personal);  
         }  
         TextView dialText = (TextView) view.findViewById(R.id.main_activity_tab_text);  
         if(dialText!=null){  
             dialText.setText(R.string.header_category_personal);  
         }  
         tab.setCustomView(view);  
         tab.setTabListener(mTabListener);  
         tab.setContentDescription(R.string.header_category_personal);  
            bar.addTab(tab);  
    } 
	
	private void setupSystem(ActionBar bar) {  
         final Tab tab = bar.newTab();  
         View view = zInflater.inflate(R.layout.tab_widget_view, null);  
         ImageView dialView =  (ImageView)view.findViewById(R.id.main_activity_tab_image);  
         if(dialView != null){  
             dialView.setImageResource(R.drawable.ic_tab_system);  
         }  
         TextView dialText = (TextView) view.findViewById(R.id.main_activity_tab_text);  
         if(dialText!=null){  
             dialText.setText(R.string.header_category_system);  
         }  
         tab.setCustomView(view);  
         tab.setTabListener(mTabListener);  
         tab.setContentDescription(R.string.header_category_system);  
            bar.addTab(tab);  
    }  
	private LayoutInflater zInflater; 
	//end by zyc 20141215  
	
	
    ///M: add for SIM hot swap
    private BroadcastReceiver mSiminfoReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            Log.d(LOG_TAG, "receive action=" + action);
            if (TelephonyIntents.ACTION_SIM_INFO_UPDATE.equals(action)) {
                updateSimState();
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //Log.i("lwp-log", "onCreate");  
        if (getIntent().getBooleanExtra(EXTRA_CLEAR_UI_OPTIONS, false)) {
            getWindow().setUiOptions(0);
        }
		
		//start by zyc 20141215  
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//ᅱᄌᄊ뛰캬ᅵᅧᅥ￁  
        zInflater = getLayoutInflater();  
        //mTabFlag = FLAG_TAB_WIRELESS_NETWORKS;//ᅣᆲ￈ᅬᅬᅯᅧᄒ샤ᄑ￧ᅢ₩  
        //end by zyc 20141215 

        mAuthenticatorHelper = new AuthenticatorHelper();
        mAuthenticatorHelper.updateAuthDescriptions(this);
        mAuthenticatorHelper.onAccountsUpdated(this, null);
        mDevelopmentPreferences = getSharedPreferences(DevelopmentSettings.PREF_FILE,
                Context.MODE_PRIVATE);  
      /**M: to get current mIsWifiOnly value @ {*/ 
        final ConnectivityManager cm = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
        mIsWifiOnly = (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false);
        /** @}*/
        getMetaData();
        mInLocalHeaderSwitch = true;
        super.onCreate(savedInstanceState);
        mInLocalHeaderSwitch = false;

        if (!onIsHidingHeaders() && onIsMultiPane()) {
            highlightHeader(mTopLevelHeaderId);
            // Force the title so that it doesn't get overridden by a direct launch of
            // a specific settings screen.
            setTitle(R.string.settings_label);
        }

        // Retrieve any saved state
        if (savedInstanceState != null) {
            mCurrentHeader = savedInstanceState.getParcelable(SAVE_KEY_CURRENT_HEADER);
            mParentHeader = savedInstanceState.getParcelable(SAVE_KEY_PARENT_HEADER);
        }

        // If the current header was saved, switch to it
        if (savedInstanceState != null && mCurrentHeader != null) {
            //switchToHeaderLocal(mCurrentHeader);
            showBreadCrumbs(mCurrentHeader.title, null);
        }

        if (mParentHeader != null) {
            setParentTitle(mParentHeader.title, null, new OnClickListener() {
                public void onClick(View v) {
                    switchToParent(mParentHeader.fragment);
                }
            });
        }

        // Override up navigation for multi-pane, since we handle it in the fragment breadcrumbs
        if (onIsMultiPane()) {
            getActionBar().setDisplayHomeAsUpEnabled(false);
            getActionBar().setHomeButtonEnabled(false);
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //Log.i("lwp-log", "onSaveInstanceState"); 
        // Save the current fragment, if it is the same as originally launched
        if (mCurrentHeader != null) {
            outState.putParcelable(SAVE_KEY_CURRENT_HEADER, mCurrentHeader);
        }
        if (mParentHeader != null) {
            outState.putParcelable(SAVE_KEY_PARENT_HEADER, mParentHeader);
        }
    }

	//start by zyc 20141215
	/* Set ActionBar with popup function */  
    protected void setActionBarStyle() { 
    	 //Log.i("lwp-log", "setActionBarStyle"); 
        ActionBar actionBar = this.getActionBar(); 
        if (actionBar == null){  
            return;  
        }  
       
        Log.i("lwp-log", "this.toString() = " + this.toString());  
        if ( this.toString().contains("SubSettings") || this.toString().contains("$")) {   
        	//ᄊᄐᄊᄑ￧ᅢ₩ᆪᆲᄆ↑ᅩ¬￀주￐ᄋᄉᄏ￘
            actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);  
            actionBar.setDisplayHomeAsUpEnabled(true);  
        }  
        else {  
        	//ᅭᄏᄐᄊᄑ￧ᅢ₩ᆪᆲᄆ↑ᅩ¬￀좨￞ᄋᄉᄏ￘ᄚᄡᅤᆬ
            actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP,ActionBar.DISPLAY_HOME_AS_UP);  
            actionBar.setDisplayHomeAsUpEnabled(false); 
           // getActionBar().setAlternativeTabStyle(true);  //true: ActionBarᅫ퀴ᅢᅯᅳ슈ᄇ﾿ᆪᆲfalse: ActionBarᅫ퀴ᅢᅯᅳᄊᆬᄇ﾿
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
            if(actionBar.getTabCount() == 0){  
                setupWirelessNetworks(actionBar);  
                setupDevice(actionBar);  
                setupPersonal(actionBar);  
                setupSystem(actionBar);  
            }  
            final SharedPreferences settings = PreferenceManager  
                .getDefaultSharedPreferences(this);  
            mTabFlag = settings.getInt("tab", FLAG_TAB_WIRELESS_NETWORKS); //ᄏ￱￈걔¦ᅱᅢᅫᅣᄐ 
            Log.i("lwp-log", "setActionBarStyle mTabFlag = " + mTabFlag);  
            actionBar.selectTab(actionBar.getTabAt(mTabFlag));       
        }  
    }  
	//end by zyc 20141215
    @Override
    public void onResume() {
        super.onResume();
        //Log.i("lwp-log", "onResume"); 
        mDevelopmentPreferencesListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                invalidateHeaders();
            }
        };
        mDevelopmentPreferences.registerOnSharedPreferenceChangeListener(
                mDevelopmentPreferencesListener);

        ListAdapter listAdapter = getListAdapter();
        if (listAdapter instanceof HeaderAdapter) {
            ((HeaderAdapter) listAdapter).resume();
            ///M: add for sim management
            ((HeaderAdapter) listAdapter).isSimManagementAvailable(this);
        }
		//start by zyc 20141215
		 setActionBarStyle();//￉│ᅱᅢactionbar샤￑ᅧᄑ
		//end by zyc 20141215
        invalidateHeaders();
        ///M: add for sim hot swap
        registerReceiver(mSiminfoReceiver, 
            new IntentFilter(TelephonyIntents.ACTION_SIM_INFO_UPDATE));
    }
    private void updateSimState() {
        ListAdapter listAdapter = getListAdapter();
        if (listAdapter instanceof HeaderAdapter) {
            ((HeaderAdapter) listAdapter).isSimManagementAvailable(this);
        }
        invalidateHeaders();        
    }
    @Override
    public void onPause() {
        super.onPause();
        ///M: add for sim hot swap
        //Log.i("lwp-log", "onPause"); 
        unregisterReceiver(mSiminfoReceiver);
        ListAdapter listAdapter = getListAdapter();
        if (listAdapter instanceof HeaderAdapter) {
            ((HeaderAdapter) listAdapter).pause();
        }

        //start by zyc 20141215  
        final SharedPreferences settings = PreferenceManager  
                .getDefaultSharedPreferences(this);  
        //Log.i("lwp-log", "777777777777777---setActionBarStyle mTabFlag = " + mTabFlag); 
        if ( this.toString().contains("SubSettings") || this.toString().contains("$")) {  
        	//settings.edit().putInt("tab",FLAG_TAB_WIRELESS_NETWORKS).commit();  
        }else{
        	settings.edit().putInt("tab", mTabFlag).commit();  
        }
      //end by zyc 20141215 
        
        mDevelopmentPreferences.unregisterOnSharedPreferenceChangeListener(
                mDevelopmentPreferencesListener);
        mDevelopmentPreferencesListener = null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mListeningToAccountUpdates) {
            AccountManager.get(this).removeOnAccountsUpdatedListener(this);
        }
        //zyc,add,start,20141215
        final SharedPreferences settings = PreferenceManager  
                .getDefaultSharedPreferences(this);
        settings.edit().putInt("tab",FLAG_TAB_WIRELESS_NETWORKS).commit(); 
        //zyc,add,end,20141215
    }

    private void switchToHeaderLocal(Header header) {
        mInLocalHeaderSwitch = true;
        switchToHeader(header);
        mInLocalHeaderSwitch = false;
    }

    @Override
    public void switchToHeader(Header header) {
        if (!mInLocalHeaderSwitch) {
            mCurrentHeader = null;
            mParentHeader = null;
        }
        super.switchToHeader(header);
    }

    /**
     * Switch to parent fragment and store the grand parent's info
     * @param className name of the activity wrapper for the parent fragment.
     */
    private void switchToParent(String className) {
        final ComponentName cn = new ComponentName(this, className);
        try {
            final PackageManager pm = getPackageManager();
            final ActivityInfo parentInfo = pm.getActivityInfo(cn, PackageManager.GET_META_DATA);

            if (parentInfo != null && parentInfo.metaData != null) {
                String fragmentClass = parentInfo.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);
                CharSequence fragmentTitle = parentInfo.loadLabel(pm);
                Header parentHeader = new Header();
                parentHeader.fragment = fragmentClass;
                parentHeader.title = fragmentTitle;
                mCurrentHeader = parentHeader;

                switchToHeaderLocal(parentHeader);
                highlightHeader(mTopLevelHeaderId);

                mParentHeader = new Header();
                mParentHeader.fragment
                        = parentInfo.metaData.getString(META_DATA_KEY_PARENT_FRAGMENT_CLASS);
                mParentHeader.title = parentInfo.metaData.getString(META_DATA_KEY_PARENT_TITLE);
            }
        } catch (NameNotFoundException nnfe) {
            Log.w(LOG_TAG, "Could not find parent activity : " + className);
        }
    }

    @Override
    public void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        // If it is not launched from history, then reset to top-level
        if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
            if (mFirstHeader != null && !onIsHidingHeaders() && onIsMultiPane()) {
                switchToHeaderLocal(mFirstHeader);
            }
            getListView().setSelectionFromTop(0, 0);
        }
    }

    private void highlightHeader(int id) {
        if (id != 0) {
            Integer index = mHeaderIndexMap.get(id);
            if (index != null) {
                getListView().setItemChecked(index, true);
                if (isMultiPane()) {
                    getListView().smoothScrollToPosition(index);
                }
            }
        }
    }

    @Override
    public Intent getIntent() {
        Intent superIntent = super.getIntent();
        String startingFragment = getStartingFragmentClass(superIntent);
        // This is called from super.onCreate, isMultiPane() is not yet reliable
        // Do not use onIsHidingHeaders either, which relies itself on this method
        if (startingFragment != null && !onIsMultiPane()) {
            Intent modIntent = new Intent(superIntent);
            modIntent.putExtra(EXTRA_SHOW_FRAGMENT, startingFragment);
            Bundle args = superIntent.getExtras();
            if (args != null) {
                args = new Bundle(args);
            } else {
                args = new Bundle();
            }
            args.putParcelable("intent", superIntent);
            modIntent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, superIntent.getExtras());
            return modIntent;
        }
        return superIntent;
    }

    /**
     * Checks if the component name in the intent is different from the Settings class and
     * returns the class name to load as a fragment.
     */
    protected String getStartingFragmentClass(Intent intent) {
        if (mFragmentClass != null) return mFragmentClass;

        String intentClass = intent.getComponent().getClassName();
        if (intentClass.equals(getClass().getName())) return null;

        if ("com.android.settings.ManageApplications".equals(intentClass)
                || "com.android.settings.RunningServices".equals(intentClass)
                || "com.android.settings.applications.StorageUse".equals(intentClass)) {
            // Old names of manage apps.
            intentClass = com.android.settings.applications.ManageApplications.class.getName();
        }

        return intentClass;
    }

    /**
     * Override initial header when an activity-alias is causing Settings to be launched
     * for a specific fragment encoded in the android:name parameter.
     */
    @Override
    public Header onGetInitialHeader() {
        String fragmentClass = getStartingFragmentClass(super.getIntent());
        if (fragmentClass != null) {
            Header header = new Header();
            header.fragment = fragmentClass;
            header.title = getTitle();
            header.fragmentArguments = getIntent().getExtras();
            mCurrentHeader = header;
            return header;
        }

        return mFirstHeader;
    }

    @Override
    public Intent onBuildStartFragmentIntent(String fragmentName, Bundle args,
            int titleRes, int shortTitleRes) {
        Intent intent = super.onBuildStartFragmentIntent(fragmentName, args,
                titleRes, shortTitleRes);

        // some fragments want to avoid split actionbar
        if (DataUsageSummary.class.getName().equals(fragmentName) ||
                PowerUsageSummary.class.getName().equals(fragmentName) ||
                AccountSyncSettings.class.getName().equals(fragmentName) ||
                UserDictionarySettings.class.getName().equals(fragmentName) ||
                Memory.class.getName().equals(fragmentName) ||
                ManageApplications.class.getName().equals(fragmentName) ||
                WirelessSettings.class.getName().equals(fragmentName) ||
                SoundSettings.class.getName().equals(fragmentName) ||
                PrivacySettings.class.getName().equals(fragmentName) ||
                ManageAccountsSettings.class.getName().equals(fragmentName) ||
                VpnSettings.class.getName().equals(fragmentName) ||
                SecuritySettings.class.getName().equals(fragmentName) ||
                InstalledAppDetails.class.getName().equals(fragmentName) ||
                ChooseLockGenericFragment.class.getName().equals(fragmentName) ||
                TetherSettings.class.getName().equals(fragmentName) ||
                ApnSettings.class.getName().equals(fragmentName) ||
                LocationSettings.class.getName().equals(fragmentName) ||
                ZonePicker.class.getName().equals(fragmentName)) {
            intent.putExtra(EXTRA_CLEAR_UI_OPTIONS, true);
        }

        intent.setClass(this, SubSettings.class);
        return intent;
    }

    /**
     * Populate the activity with the top-level headers.
     */
    @Override
    public void onBuildHeaders(List<Header> headers) {
    	//add by zyc 20141215
        //loadHeadersFromResource(R.xml.settings_headers, headers);
    	if (mTabFlag == FLAG_TAB_WIRELESS_NETWORKS){  
            loadHeadersFromResource(R.xml.settings_headers_wireless_networks, headers);  
        }else if(mTabFlag == FLAG_TAB_DEVICE){  
            loadHeadersFromResource(R.xml.settings_headers_device, headers);  
        }else if(mTabFlag == FLAG_TAB_PERSONAL){  
            loadHeadersFromResource(R.xml.settings_headers_personal, headers);  
        }else{  
            loadHeadersFromResource(R.xml.settings_headers_system, headers);  
        } 
      //end by zyc 20141215
       
        //start by zyc 20141215
    	/*List<Header> mHeaders = headers;
    	 if(mHeaders != null){  
             mHeaders.clear();  
             mHeaders.addAll(headers);  
         }*/
        //end by zyc 20141215 
        
        updateHeaderList(headers);
    }

    private void updateHeaderList(List<Header> target) {
        final boolean showDev = mDevelopmentPreferences.getBoolean(
                DevelopmentSettings.PREF_SHOW,
                android.os.Build.TYPE.equals("eng"));
        int i = 0;

        mHeaderIndexMap.clear();
        while (i < target.size()) {
        	//Log.d(LOG_TAG, "---------zyc target.size()="+target.size()+";i="+i);
            Header header = target.get(i);
            // Ids are integers, so downcasting
            int id = (int) header.id;
            if (id == R.id.operator_settings || id == R.id.manufacturer_settings) {
                Utils.updateHeaderToSpecificActivityFromMetaDataOrRemove(this, target, header);
            } else if (id == R.id.wifi_settings) {
                // Remove WiFi Settings if WiFi service is not available.
                if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {
                    target.remove(i);
                }
            } else if (id == R.id.bluetooth_settings) {
                // Remove Bluetooth Settings if Bluetooth service is not available.
                if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
                    target.remove(i);
                }
            /**M: add to remove sim management for wifi only project @{*/
            } else if (id == R.id.sim_settings) {
                if (mIsWifiOnly) {
                    target.remove(i);
                }
            /**@ }*/
            } else if (id == R.id.data_usage_settings) {
                // Remove data usage when kernel module not enabled
                final INetworkManagementService netManager = INetworkManagementService.Stub
                        .asInterface(ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE));
                try {
                    if (!netManager.isBandwidthControlEnabled()) {
                        target.remove(i);
                    }
                } catch (RemoteException e) {
                    // ignored
                }
            } else if (id == R.id.account_settings) {
                int headerIndex = i + 1;
                i = insertAccountsHeaders(target, headerIndex);
            } else if (id == R.id.user_settings) {
                if (!UserHandle.MU_ENABLED
                        || !UserManager.supportsMultipleUsers()
                        || Utils.isMonkeyRunning()) {
                    target.remove(i);
                }
            } else if (id == R.id.development_settings) {
                if (!showDev) {
                    target.remove(i);
                }
            } else if (id == R.id.audioprofle_settings) {
                if (!FeatureOption.MTK_AUDIO_PROFILES) {
                    target.remove(header);
                }
            } else if (id == R.id.sound_settings) {
                if (FeatureOption.MTK_AUDIO_PROFILES) {
                    target.remove(header);
              }
            } else if (id == R.id.power_settings) {
                Intent intent = new Intent("com.android.settings.SCHEDULE_POWER_ON_OFF_SETTING");
                List<ResolveInfo> apps = getPackageManager()
                        .queryIntentActivities(intent, 0);
                if (apps != null && apps.size() != 0) {
                    Log.d(LOG_TAG, "apps.size()=" + apps.size());
                } else {
                    Log.d(LOG_TAG, "apps is null or app size is 0, remove SchedulePowerOnOff");
                    target.remove(header);
                }
            }else if(id==R.id.zyc_sos){
            	Intent intent = new Intent(Intent.ACTION_PICK);
            	List<ResolveInfo> apps = getPackageManager().queryIntentActivities(intent, getPackageManager().GET_INTENT_FILTERS );
            }
            
            if (target.get(i) == header
                    && UserHandle.MU_ENABLED && UserHandle.myUserId() != 0
                    && !ArrayUtils.contains(SETTINGS_FOR_RESTRICTED, id)) {
                target.remove(i);
                //Log.d(LOG_TAG, "3333333333333333333333333333333333");
            }
           
            // Increment if the current one wasn't removed by the Utils code.
            if (target.get(i) == header) {
                // Hold on to the first header, when we need to reset to the top-level
                if (mFirstHeader == null &&
                        HeaderAdapter.getHeaderType(header) != HeaderAdapter.HEADER_TYPE_CATEGORY) {
                    mFirstHeader = header;
                }
                mHeaderIndexMap.put(id, i);
                i++;
                //Log.d(LOG_TAG, "444444444444444444444444444444444444");
            }
        }
    }

    private int insertAccountsHeaders(List<Header> target, int headerIndex) {
        String[] accountTypes = mAuthenticatorHelper.getEnabledAccountTypes();
        List<Header> accountHeaders = new ArrayList<Header>(accountTypes.length);
        for (String accountType : accountTypes) {
            CharSequence label = mAuthenticatorHelper.getLabelForType(this, accountType);
            if (label == null) {
                continue;
            }

            Account[] accounts = AccountManager.get(this).getAccountsByType(accountType);
            boolean skipToAccount = accounts.length == 1
                    && !mAuthenticatorHelper.hasAccountPreferences(accountType);
            Header accHeader = new Header();
            accHeader.title = label;
            if (accHeader.extras == null) {
                accHeader.extras = new Bundle();
            }
            if (skipToAccount) {
                accHeader.breadCrumbTitleRes = R.string.account_sync_settings_title;
                accHeader.breadCrumbShortTitleRes = R.string.account_sync_settings_title;
                accHeader.fragment = AccountSyncSettings.class.getName();
                accHeader.fragmentArguments = new Bundle();
                // Need this for the icon
                accHeader.extras.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE, accountType);
                accHeader.extras.putParcelable(AccountSyncSettings.ACCOUNT_KEY, accounts[0]);
                accHeader.fragmentArguments.putParcelable(AccountSyncSettings.ACCOUNT_KEY,
                        accounts[0]);
            } else {
                accHeader.breadCrumbTitle = label;
                accHeader.breadCrumbShortTitle = label;
                accHeader.fragment = ManageAccountsSettings.class.getName();
                accHeader.fragmentArguments = new Bundle();
                accHeader.extras.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE, accountType);
                accHeader.fragmentArguments.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE,
                        accountType);
                if (!isMultiPane()) {
                    accHeader.fragmentArguments.putString(ManageAccountsSettings.KEY_ACCOUNT_LABEL,
                            label.toString());
                }
            }
            accountHeaders.add(accHeader);
        }

        // Sort by label
        Collections.sort(accountHeaders, new Comparator<Header>() {
            @Override
            public int compare(Header h1, Header h2) {
                return h1.title.toString().compareTo(h2.title.toString());
            }
        });

        for (Header header : accountHeaders) {
            target.add(headerIndex++, header);
        }
        if (!mListeningToAccountUpdates) {
            AccountManager.get(this).addOnAccountsUpdatedListener(this, null, true);
            mListeningToAccountUpdates = true;
        }
        return headerIndex;
    }

    private void getMetaData() {
        try {
            ActivityInfo ai = getPackageManager().getActivityInfo(getComponentName(),
                    PackageManager.GET_META_DATA);
            if (ai == null || ai.metaData == null) return;
            mTopLevelHeaderId = ai.metaData.getInt(META_DATA_KEY_HEADER_ID);
            mFragmentClass = ai.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);

            // Check if it has a parent specified and create a Header object
            final int parentHeaderTitleRes = ai.metaData.getInt(META_DATA_KEY_PARENT_TITLE);
            String parentFragmentClass = ai.metaData.getString(META_DATA_KEY_PARENT_FRAGMENT_CLASS);
            if (parentFragmentClass != null) {
                mParentHeader = new Header();
                mParentHeader.fragment = parentFragmentClass;
                if (parentHeaderTitleRes != 0) {
                    mParentHeader.title = getResources().getString(parentHeaderTitleRes);
                }
            }
        } catch (NameNotFoundException nnfe) {
            // No recovery
        }
    }

    @Override
    public boolean hasNextButton() {
        return super.hasNextButton();
    }

    @Override
    public Button getNextButton() {
        return super.getNextButton();
    }

    private static class HeaderAdapter extends ArrayAdapter<Header> {
        static final int HEADER_TYPE_CATEGORY = 0;
        static final int HEADER_TYPE_NORMAL = 1;
        static final int HEADER_TYPE_SWITCH = 2;
        private static final int HEADER_TYPE_COUNT = HEADER_TYPE_SWITCH + 1;

        private final WifiEnabler mWifiEnabler;
        private final BluetoothEnabler mBluetoothEnabler;
        ///M: add for tablet feature check whether sim exist
        private boolean mIsSimEnable = false;
        private AuthenticatorHelper mAuthHelper;

        //zyc,add,start,20141215
        //private SparseArray<View> mViewCache; 
        //zyc,add,end,20141215
        private static class HeaderViewHolder {
            ImageView icon;
            TextView title;
            TextView summary;
            Switch switch_;
        }

        private LayoutInflater mInflater;

        static int getHeaderType(Header header) {
            if (header.fragment == null && header.intent == null) {
                return HEADER_TYPE_CATEGORY;
            } else if (header.id == R.id.wifi_settings || header.id == R.id.bluetooth_settings) {
                return HEADER_TYPE_SWITCH;
            } else {
                return HEADER_TYPE_NORMAL;
            }
        }

        @Override
        public int getItemViewType(int position) {
            Header header = getItem(position);
            return getHeaderType(header);
        }

        //zyc,add,start,20141215
       /* @Override
		public void notifyDataSetChanged() {
			// TODO Auto-generated method stub
			super.notifyDataSetChanged();
			mViewCache = new SparseArray<View>(getCount());  
		}*/
        //zyc,add,end,20141215
		@Override
        public boolean areAllItemsEnabled() {
            return false; // because of categories
        }

        @Override
        public boolean isEnabled(int position) {
            return getItemViewType(position) != HEADER_TYPE_CATEGORY;
        }

        @Override
        public int getViewTypeCount() {
            return HEADER_TYPE_COUNT;
        }

        @Override
        public boolean hasStableIds() {
            return true;
        }

        public HeaderAdapter(Context context, List<Header> objects,
                AuthenticatorHelper authenticatorHelper) {
            super(context, 0, objects);

            mAuthHelper = authenticatorHelper;
            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            // Temp Switches provided as placeholder until the adapter replaces these with actual
            // Switches inflated from their layouts. Must be done before adapter is set in super
            mWifiEnabler = new WifiEnabler(context, new Switch(context));
            mBluetoothEnabler = new BluetoothEnabler(context, new Switch(context));
            //zyc,add,20141215,start
            //mViewCache = new SparseArray<View>(objects.size());  
            //zyc,add,20141215,end
        }

        @SuppressLint("ResourceAsColor") @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            HeaderViewHolder holder;
            Header header = getItem(position);
            int headerType = getHeaderType(header);
            View view = null;
          //zyc,add,20141215,start
            //convertView = mViewCache.get(position);  
            //zyc,add,20141215,end
            
            if (convertView == null) {
                holder = new HeaderViewHolder();
                switch (headerType) {
                    case HEADER_TYPE_CATEGORY:
                        view = new TextView(getContext(), null,
                                android.R.attr.listSeparatorTextViewStyle);
                        holder.title = (TextView) view;
                        break;

                    case HEADER_TYPE_SWITCH:
                        view = mInflater.inflate(R.layout.preference_header_switch_item, parent,
                                false);
                        holder.icon = (ImageView) view.findViewById(R.id.icon);
                        holder.title = (TextView)
                                view.findViewById(com.android.internal.R.id.title);
                        holder.summary = (TextView)
                                view.findViewById(com.android.internal.R.id.summary);
                        holder.switch_ = (Switch) view.findViewById(R.id.switchWidget);
                        break;

                    case HEADER_TYPE_NORMAL:
                        view = mInflater.inflate(
                                R.layout.preference_header_item, parent,
                                false);
                        holder.icon = (ImageView) view.findViewById(R.id.icon);
                        holder.title = (TextView)
                                view.findViewById(com.android.internal.R.id.title);
                        holder.summary = (TextView)
                                view.findViewById(com.android.internal.R.id.summary);
                        break;
                }
                view.setTag(holder);
              //zyc,add,20141215,start
                //mViewCache.put(position, view); 
                //zyc,add,20141215,end
            } else {
                view = convertView;
                holder = (HeaderViewHolder) view.getTag();
            }

            // All view fields must be updated every time, because the view may be recycled
            switch (headerType) {
                case HEADER_TYPE_CATEGORY:
                    holder.title.setText(header.getTitle(getContext().getResources()));
                    break;

                case HEADER_TYPE_SWITCH:
                    // Would need a different treatment if the main menu had more switches
                    if (header.id == R.id.wifi_settings) {
                        mWifiEnabler.setSwitch(holder.switch_);
                    } else {
                        mBluetoothEnabler.setSwitch(holder.switch_);
                    }
                    // No break, fall through on purpose to update common fields

                    //$FALL-THROUGH$
                case HEADER_TYPE_NORMAL:
                    if (header.extras != null
                            && header.extras.containsKey(ManageAccountsSettings.KEY_ACCOUNT_TYPE)) {
                        String accType = header.extras.getString(
                                ManageAccountsSettings.KEY_ACCOUNT_TYPE);
                        ViewGroup.LayoutParams lp = holder.icon.getLayoutParams();
                        lp.width = getContext().getResources().getDimensionPixelSize(
                                R.dimen.header_icon_width);
                        lp.height = lp.width;
                        holder.icon.setLayoutParams(lp);
                        Drawable icon = mAuthHelper.getDrawableForType(getContext(), accType);
                        holder.icon.setImageDrawable(icon);
                    } else {
                        holder.icon.setImageResource(header.iconRes);
                    }
                    holder.title.setText(header.getTitle(getContext().getResources()));
                    CharSequence summary = header.getSummary(getContext().getResources());
                    if (!TextUtils.isEmpty(summary)) {
                        holder.summary.setVisibility(View.VISIBLE);
                        holder.summary.setText(summary);
                    } else {
                        holder.summary.setVisibility(View.GONE);
                    }
                    break;
            }
            // /M: add for sim management feature
            if (header.id == R.id.sim_settings) {
                handleDisableHolder(holder, view);
            } else {
                handleEnableHolder(holder, view);
            }
            
          //start by zyc 20141215 ￐￞쟈ᅭᄏᄐᄊᄑ￧ᅢ₩
            if (header.fragment == null && header.intent == null) {  
               view.setBackgroundColor(android.R.color.transparent);   
            }else if(header.id == R.id.sim_settings || header.id == R.id.audioprofle_settings || header.id == R.id.location_settings 
            		|| header.id == R.id.date_time_settings){  
                view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_top);  
            }else if(header.id == R.id.wireless_settings || header.id == R.id.application_settings || header.id == R.id.about_settings
            		||header.id ==R.id.privacy_settings){  
                view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_bottom);  
            }else {  
                view.setBackgroundResource(com.android.internal.R.drawable.easy_pref_item_center);  
            }  
            //end by zyc 20141215 
            return view;
        }
        /*
         * M: set the icon title and summary for sim management
         *@ param holder the view holder
         *@ param view the view
         */
        private void handleEnableHolder(HeaderViewHolder holder, View view) {
            if (holder.icon != null) {
                holder.icon.setEnabled(true);
                // /M: set the icon back to original alpha @{
                holder.icon.setAlpha(ORIGINAL_IMAGE);
                // /@}
            }
            if (holder.title != null) {
                holder.title.setEnabled(true);
            }
            if (holder.summary != null) {
                holder.summary.setEnabled(true);
            }
            view.setClickable(false);
        }
        /*
         * M: Disable the holder if there is no sim card 
         */
        private void handleDisableHolder(HeaderViewHolder holder, View view) {
           holder.icon.setEnabled(mIsSimEnable);
            /**M: add to gray the imageview when there is no sim card inserted @{*/ 
            holder.icon.setAlpha(mIsSimEnable ? ORIGINAL_IMAGE : IMAGE_GRAY);
            /**@}*/
            holder.title.setEnabled(mIsSimEnable);
            holder.summary.setEnabled(mIsSimEnable);
            view.setClickable(!mIsSimEnable);
        }

        public void isSimManagementAvailable(Context context) {
            int isInternetCallEnabled = android.provider.Settings.System.getInt(
                            context.getContentResolver(),
                            android.provider.Settings.System.ENABLE_INTERNET_CALL,0);
                Log.i(LOG_TAG, " isInternetCallEnabled = " + isInternetCallEnabled);
            boolean isVoipSupported = (android.net.sip.SipManager.isVoipSupported(context)) 
              && (isInternetCallEnabled != 0); 
            boolean isHasSimCards = (android.provider.Telephony.SIMInfo.getInsertedSIMCount(context) != 0); 
                Log.i(LOG_TAG, " isVoipSupported = " + isVoipSupported);
                Log.i(LOG_TAG, " isHasSimCards = " + isHasSimCards);
                mIsSimEnable = isHasSimCards || isVoipSupported;
            }
        public void resume() {
            mWifiEnabler.resume();
            mBluetoothEnabler.resume();
        }

        public void pause() {
            mWifiEnabler.pause();
            mBluetoothEnabler.pause();
        }
    }

    @Override
    public void onHeaderClick(Header header, int position) {
        boolean revert = false;
        if (header.id == R.id.account_add) {
            revert = true;
        }

        super.onHeaderClick(header, position);

        if (revert && mLastHeader != null) {
            highlightHeader((int) mLastHeader.id);
        } else {
            mLastHeader = header;
        }
    }

    @Override
    public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) {
        // Override the fragment title for Wallpaper settings
        int titleRes = pref.getTitleRes();
        if (pref.getFragment().equals(WallpaperTypeSettings.class.getName())) {
            titleRes = R.string.wallpaper_settings_fragment_title;
        } else if (pref.getFragment().equals(OwnerInfoSettings.class.getName())
                && UserHandle.myUserId() != UserHandle.USER_OWNER) {
            titleRes = R.string.user_info_settings_title;
        }
        startPreferencePanel(pref.getFragment(), pref.getExtras(), titleRes, pref.getTitle(),
                null, 0);
        return true;
    }

    public boolean shouldUpRecreateTask(Intent targetIntent) {
        return super.shouldUpRecreateTask(new Intent(this, Settings.class));
    }

    @Override
    public void setListAdapter(ListAdapter adapter) {
        if (adapter == null) {
            super.setListAdapter(null);
        } else {
            super.setListAdapter(new HeaderAdapter(this, getHeaders(), mAuthenticatorHelper));
        }
    }

    @Override
    public void onAccountsUpdated(Account[] accounts) {
        // TODO: watch for package upgrades to invalidate cache; see 7206643
        mAuthenticatorHelper.updateAuthDescriptions(this);
        mAuthenticatorHelper.onAccountsUpdated(this, accounts);
        invalidateHeaders();
    }

    /*
     * Settings subclasses for launching independently.
     */
    public static class WapPushSettings extends Settings { /* empty */ }
    public static class SimDataRoamingSettings extends Settings { /* empty */ }
    public static class BluetoothSettingsActivity extends Settings { /* empty */ }
    public static class WirelessSettingsActivity extends Settings { /* empty */ }
    public static class TetherSettingsActivity extends Settings { /* empty */ }
    public static class VpnSettingsActivity extends Settings { /* empty */ }
    public static class DateTimeSettingsActivity extends Settings { /* empty */ }
    public static class StorageSettingsActivity extends Settings { /* empty */ }
    public static class WifiSettingsActivity extends Settings { /* empty */ }
    public static class WifiP2pSettingsActivity extends Settings { /* empty */ }
    public static class InputMethodAndLanguageSettingsActivity extends Settings { /* empty */ }
    public static class InputMethodAndSubtypeEnablerActivity extends Settings { /* empty */ }
    public static class SpellCheckersSettingsActivity extends Settings { /* empty */ }
    public static class LocalePickerActivity extends Settings { /* empty */ }
    public static class UserDictionarySettingsActivity extends Settings { /* empty */ }
    public static class SoundSettingsActivity extends Settings { /* empty */ }
    ///M: add AudioProfileSettingsActivity to replace
    public static class AudioProfileSettingsActivity extends Settings { /* empty */ }
    public static class DisplaySettingsActivity extends Settings { /* empty */ }
    public static class DeviceInfoSettingsActivity extends Settings { /* empty */ }
    public static class ApplicationSettingsActivity extends Settings { /* empty */ }
    public static class ManageApplicationsActivity extends Settings { /* empty */ }
    public static class StorageUseActivity extends Settings { /* empty */ }
    public static class DevelopmentSettingsActivity extends Settings { /* empty */ }
    public static class AccessibilitySettingsActivity extends Settings { /* empty */ }
    public static class SecuritySettingsActivity extends Settings { /* empty */ }
    public static class LocationSettingsActivity extends Settings { /* empty */ }
    public static class PrivacySettingsActivity extends Settings { /* empty */ }
    public static class DockSettingsActivity extends Settings { /* empty */ }
    public static class RunningServicesActivity extends Settings { /* empty */ }
    public static class ManageAccountsSettingsActivity extends Settings { /* empty */ }
    public static class PowerUsageSummaryActivity extends Settings { /* empty */ }
    public static class AccountSyncSettingsActivity extends Settings { /* empty */ }
    public static class AccountSyncSettingsInAddAccountActivity extends Settings { /* empty */ }
    public static class CryptKeeperSettingsActivity extends Settings { /* empty */ }
    public static class DeviceAdminSettingsActivity extends Settings { /* empty */ }
    public static class DataUsageSummaryActivity extends Settings { /* empty */ }
    public static class AdvancedWifiSettingsActivity extends Settings { /* empty */ }
    public static class TextToSpeechSettingsActivity extends Settings { /* empty */ }
    public static class AndroidBeamSettingsActivity extends Settings { /* empty */ }
    public static class WifiDisplaySettingsActivity extends Settings { /* empty */ }
    public static class DreamSettingsActivity extends Settings { /* empty */ }
    /**M: Add new for settings activity @{*/
    public static class SimManagementActivity extends Settings { /* empty */ }
    public static class SimListEntranceActivity extends Settings { /* empty */ }
    public static class WifiGprsSelectorActivity extends Settings { /* empty */ }
    public static class HDMISettingsActivity extends Settings { /* empty */ }
    public static class UsbSettingsActivity extends Settings { /*empty */}    
    public static class KeyboardLayoutPickerActivity extends Settings { /* empty */ }
    public static class TetherWifiSettingsActivity extends Settings { /*empty */ }
    public static class BeamShareHistoryActivity extends Settings { /* empty */ }
    public static class NfcSettingsActivity extends Settings {/*empty */}  
    /**@}*/
}


android6.0 添加电量百分比 要完成这个功能需要修改SystemUI和Settings两部分 一、Settings添加开关——控制是否打开此功能 我选择把开关添加到display模块下diff --git a/packages/apps/Settings/res/xml/display_settings.xml b/packages/apps/Settings/res/xml/display_settings.xml 阅读详情

相关推荐

Android Settings 设置项修改

在 Android 系统上,这个权限从 API 1 就已经开始有了。通过在 app 中设置权限允许 app。意思是在 app 的目标 api 是 23 (Android 6) 或更高版本时,app 用户必须显示地通过一个权限管理页面授权 app 拥有的权限。使用Intent和打开这个权限管理页面,让用户决定是否授权给 app。在 app 中可以调用查询系统设置是否可以修改。

Zen@sz 博客 4709

Android Q 电量使用图分析 show app usage

这个界面就是packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageAdcanced.java,然后查看它加载的布局文件 @Override protected int getPreferenceScreenResId() { return R.xml.power_usage_advanced; } 布局代码如下 <PreferenceScreen xmlns...

Aaron121314的博客 1049

Android Settings定制

android\frameworks\base\packages\SettingsLib 7.0重构Settings后多出来的部分 android\frameworks\base\packages\SettingsProvider settings数据库相关 android\packages\apps\Settings Settings相关 android\frameworks\base\core\java\android\provider settings数据库字段定义相关 android\package

Android 762

Android 耗电量统计原理剖析

在android系统中,耗电量排行一直是一个实用的功能 当我们点击了电池用量后,就可以到达详细信息的界面。 在这个界面中,我们可以看到对于电池使用时间的预测。 可以看到具体app的使用耗电量排行。那么系统的是怎么实现的呢? 注意右上角的“显示完整的设备用电量” 当我们点击之后,就可以看到系统完整的耗电量排行。 可以看到,Android操作系统,屏幕等系统的信息也都显示了出来。 那么这个功能...

猿氏悟语 1773

Android系统 添加动态控制SystemUI状态栏、导航栏和下拉菜单

本文介绍了如何在Android系统中添加状态栏、导航栏和下拉菜单的控制功能,主要涉及了SystemUI模块和Settings模块的修改,以及系统属性和广播的使用。这些功能可以让用户控制和调用决定是否启用显示xx。

我其实什么都不会 3221

为Android 6.0 Settings添加以太网连接选项

在本章中,我们将探讨Android 6.0版本如何允许用户在移动设备上连接到以太网网络。本章将简要介绍这个新功能的添加及其在系统架构中的位置。以太网是当今局域网络中使用最广泛的通信协议,自从1970年代由Xerox公司发明以来,它经历了从共享媒介到交换式架构的演变。最初,10BASE5和10BASE2等粗同轴电缆以太网标准被设计来支持10Mbps的传输速率,而到了1990年代,随着快速以太网标准的推出,以太网的传输速率提高到了100Mbps。

weixin_31688273的博客 528

电池详情获取应用运行时间

1. 电池用量时间一直为0 2. 源码跟踪 2.1 字符串位置 &amp;lt;string name=&quot;battery_detail_foreground&quot; msgid=&quot;3350401514602032183&quot;&amp;gt;&quot;在前台运行时&quot;&amp;lt;/string&amp;gt; &amp;lt;string name=&

苏法迪的专栏 938

pi/4QPSK调制解调原理

文章目录1. π/4\pi/4π/4QPSK 信号的调制原理2. 匹配滤波器与成形滤波器 1. π/4\pi/4π/4QPSK 信号的调制原理 减小相位突变量的QPSK由偏置键控QPSK(OK-QPSK)和 π/4\pi/4π/4偏置的QPSK( π/4\pi/4π/4QPSK)。由于 π/4\pi/4π/4QPSK是用差分相位编码产生的(因此也叫做 π/4\pi/4π/4DQPSK),能有效地进行差分解调和鉴频器解调,在一些不易提取相干载波的场合很有用。 在常规的QPSK中,输入数据经过串/并变换后,分成

gemengxia的博客 2万+

Android中App耗电量统计

相关文件及目录如下: packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageSummary.java packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageDetail.java packages/apps/Settings/sr

yu8fei的专栏 8194

【JESD79-5之】11 IDD, IDDQ, IPP规格参数和测试条件(IDD, IDDQ, IPP Specification Parameters and Test conditions)

【代码】【JESD79-5之】11 IDD, IDDQ, IPP规格参数和测试条件(IDD, IDDQ, IPP Specification Parameters and Test conditions)

m0_61126667的博客 4857

运动目标成像必学:5分钟搞懂keystone变换原理与避坑指南

本文深入浅出地解析了雷达信号处理中的Keystone变换原理,它是解决运动目标距离徙动问题的关键技术。文章通过直观比喻和简化公式,阐述了该变换如何通过变量代换实现距离与慢时间的解耦合,将倾斜轨迹“掰直”,从而提升成像与检测性能。同时,文中重点指出了实际应用中关于大速度场景、插值误差、多目标处理及高阶运动补偿等关键避坑点,为工程实践提供了宝贵指南。

ios99的博客 403

Android需求1 -- 修改Settings的默认显示和添加一二级菜单和在quick setting中添加一个tile

Android目录文件 V500/android/packages/apps/Setting/AndroidManifest.xml ==> 系统的各种权限 ​ V501设置修改 1.Setting默认配置相关属性修改 1)手机中涉及到“设备名称”统一修改: 设置-关于手机-设备名称 蓝牙、WIFI热点、WIFI同步等 进入v501\android\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\sett

qq_45146250的博客 3155

UE5.5 PCGFrameWork程序化内容生成实战指南

本文是UE5.5 PCGFrameWork程序化内容生成的实战指南。详细介绍了从点云采样、DynamicMesh几何生成到子图与蓝图扩展的核心工作流。通过实战案例演示如何利用该框架高效构建丰富的程序化场景,为技术美术、独立开发者及爱好者提供从入门到进阶的系统性指引。

tea88的博客 920

Android O添加Settings设置项的方法

前言 我们在进行日常的开发中,经常会涉及到对系统应用Settings的修改,这里讲一下如何在设置项主菜单界面添加一个自定义设置项。 Settings主界面 我们等下要在这个页面再添加一个自定义设置项。 代码修改步骤 在/src/com/android/settings/Settings.java添加入口Activity: // /src/com/android/settings/Settings.java public class Settings extends SettingsActivity {

刘峰的博客 2381

攻克TypeError: Cannot read properties of undefined (reading ‘NormalModule‘)的四种实战策略

本文详细解析了`TypeError: Cannot read properties of undefined (reading 'NormalModule')`错误的四种实战解决策略。从版本一致性检查、包管理器优化到依赖替换和构建环境配置,帮助开发者快速定位和解决Webpack构建过程中的常见问题,提升开发效率。

weixin_42523670的博客 242

多智能体强化学习MASAC算法:从原理到PyTorch实战详解

深度强化学习通过智能体与环境的交互试错来学习最优策略,是解决复杂序列决策问题的核心技术。其核心原理在于利用价值函数或策略梯度来最大化累积奖励,在机器人控制、游戏AI等领域展现出巨大技术价值。当面对多个智能体需要协同或竞争的复杂动态环境时,单智能体算法因环境非平稳性而面临挑战,多智能体强化学习应运而生。Multi-Agent Soft Actor-Critic (MASAC) 算法融合了SAC的稳定高效与中心化训练去中心化执行的范式,通过维护中心化Critic网络和独立策略网络,有效解决了多智能体协作中的信用

weixin_30080745的博客 327

Settings.apk修改

下面是Settings应用的截图:    可以看出这是很典型的使用了Fragment后的界面,设置里面有WIFI、蓝牙、显示、存储、应用等众多功能。左边的每一项,对应着右边的一个设置界面, Fragment有四个子类: DialogFragment, ListFragment, PreferenceFragment, WebViewFragment。很明显,Settings用的是

u010823818的博客 9213

【OpenClaw企业级智能体实战】第24篇:一人公司实战——用Agent Teams同时管理产品、运营、销售(附16个Agent配置方案+全流程指令模板)

当AI智能体从“单一工具”进化为“协同团队”,“一人公司”已从商业概念变为落地现实。2025年中国超1200万个体创业者采用OPC模式,靠AI团队突破人力边界。本文基于OpenClaw Agent Teams框架,拆解“1总指挥+15执行者”的三层AI组织架构,提供覆盖产品、运营、销售全业务的16个Agent分工矩阵、可直接复制的部署代码、通信配置方案与全流程指令模板。通过虚拟案例验证:单人+AI团队可实现月入26万的商业闭环,AI承担90%标准化工作,人力成本降低75000元/月,ROI超3200%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 942

Android Settings剖析与修改

  原文地址: http://blog.youkuaiyun.com/wangjinyu501/article/details/22077803 下面是Seeings应用的截图:   可以看出这是很典型的使用了Fragment后的界面,设置里面有WIFI、蓝牙、显示、存储、应用等众多功能。左边的每一项,对应着右边的一个设置界面,Fragment有四个子类:DialogFrag

bboyliaoye 3万+

2025年开源气象大模型的实现原理与实践指南

气象大模型在人工智能时代实现了革命性突破,通过深度学习技术以更低的计算成本达到甚至超越传统数值天气预报的精度。开源气象大模型的出现使得全球研究者和机构都能参与气象AI的创新。本文详细解析了开源气象大模型的实现原理,包括核心架构、数据准备、训练方法和实际预测流程,并提供了实践指南。核心架构主要采用Transformer、图神经网络和扩散模型,处理多模态数据融合和时空联合建模。数据体系构建涉及数据来源、预处理和增强策略。模型训练关键技术包括损失函数设计、分布式训练优化和训练过程监控。微调与领域适应策略包括迁移学

专注AI大模型,软件混淆,授权 1181

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android Settings开发之修改

版本:1.0   日期:2014.3.20  2014.3.25   版权:© 2014 kince 转载注明出处                下面是Seeings应用的截图:   可以看出这是很典型的使用了Fragment后的界面,设置里面有WIFI、蓝牙、显示、存储、应用等众多功能。左边的每一项,对应着右边的一个设置界面,Fragment有四个子类:

A=X+Y+Z 5369

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android 设置开放隐性启动Intent

*要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-XbaDYIjE-1713198966757)]《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84123026的博客 1131

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android13 原生以太网实现设置静态IP

首先需要实现android13设置静态IP的功能,就要对android13以太网架构变化大致理解,谷歌把以太网相关的功能进行模块化,提取到packages/modules/Connectivity/目录,导致之前的实现需要调整,本文主要从2大块进行阐述,分别为framework与原生Settings。 本文涉及功能点主要有如下几点: 1.设置IP的方式分为DHCP和静态两种 2.IP地址的设置 3.子网掩码设置 4.DNS设置 5.网关设置 6.代理设置

CGTAIHYQ的博客 1万+

Android 9 导航栏添加截图按钮

Android 系统底部导航栏(HOME\BACK)位置添加截图按钮,系统设置界面添加截图开关主要修改工程有SystemUI 和 Settings注意:不同的ANDROID SDK源码存在部分差异,流程是相同的,仅供参考!

501846585_QQAndroid_java 900

Android11 开发者模式添加文件管理项跳转

本文介绍了在Android平台SPR11开发者模式中添加文件管理入口的实现方法。主要步骤包括:1) 隐藏原生启动器中的文件管理入口;2) 在系统设置中添加相关字符串资源;3) 在开发者模式布局文件中添加preference项;4) 创建FilemanagerPreferenceController类实现跳转逻辑。该控制器通过处理点击事件启动com.android.documentsui/files.FilesActivity组件,并加入点击频率限制功能。实现后,文件管理功能仅在开发者模式下可用确保系统安全性

weixin_56663189的博客 684

android 修改记录

Settings system 里添加字段并且在SettingProvider里初始化 frameworks/base/core/java/android/provider/Settings.java 最好在system表里其他字段的附近加 public static final String DEFAULT_ISQCHATING = "isQchating"; public stati...

393
上一篇: 自己写的一个简单的蓝牙聊天程序
下一篇: ImageView简单实例
android_xc
博客等级 码龄12年 15粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值