Android需求1

您所在的位置:网站首页 vb中菜单怎么添加一二级菜单 Android需求1

Android需求1

2024-07-15 22:30| 来源: 网络整理| 查看: 265

Android目录文件

V500/android/packages/apps/Setting/AndroidManifest.xml ==> 系统的各种权限

作为一名软件开发工程师,曾经对于如何确认当前activity的详细信息非常想知道,后来学会了一个命令:

adb shell dumpsys activity | grep -i foc

可以方便的查看当前activity的详细信息。

V501设置修改 1.Setting默认配置相关属性修改 1)手机中涉及到“设备名称”统一修改:

设置-关于手机-设备名称 蓝牙、WIFI热点、WIFI同步等

Right:

进入/V500/android/vendor/mediatek/proprietary/packages/apps/SettingsProvider$中 的 SettingsProvider\res\values\defaults.xml

修改 xml 内容

%1$s

内容改为 TINNO

2).setting-display-Font size

将默认的default改为samll

Right: 进入配置数据库中:/V500/android/vendor/mediatek/proprietary/packages/apps/SettingsProvider\src\com\android\providers\settings/DatabaseHelper.java在 loadSystemSettings()方法中添加: loadSetting(stmt, Settings.System.FONT_SCALE, 0.85f); 3).setting-display-Screen timeout

配置默认值为:5 minutes

Right:

xml修改

进入 /V500/android/vendor/mediatek/proprietary/packages/apps/SettingsProvider$ 中 的 SettingsProvider\res\values\defaults.xml

60000//自动关闭屏幕时间60秒,可以通过设置为非常大的值来达到不息屏的目的

将 60000 改为 300000

4).Location:

配置定位默认打开(如果打开则配置默认关闭)

Right:

进入 /V500/android/vendor/mediatek/proprietary/packages/apps/SettingsProvider$ 中 的 SettingsProvider\res\values\defaults.xml

false //GPS定位 关

将false改为true

将3 ,

将 3 更改为 0

5).Auto rotate screen

配置自动旋转默认打开

Right: 进入 /V500/android/vendor/mediatek/proprietary/packages/apps/SettingsProvider$ 中 的 SettingsProvider\res\values\defaults.xmlfalse //自动旋转 关 将 false改为 true 6).language

默认 语言修改为除英语以外的其他语言

Right:

进入配置数据库中:/V500/android/vendor/mediatek/proprietary/packages/apps/SettingsProvider$

在 SettingsProvider/res/values/defaults.xml 中定义默认值字符串,如下所示。其中第一个语言会作 为默认语言被选中,它会覆盖掉 PRODUCT_LOCALES 中的配置的默认语言。第一个语言不使用en-US

zh-Hans-CN,fr-FR,en-US,es-ES

将上面配置的默认值字符串加载到设置数据库中,配置项在 System表中,所以需要在文件路径 \v501\android\vendor\mediatek\proprietary\packages\apps\SettingsProvider\src\com\android\providers\settings/DatabaseHelper.java 的 loadSystemSettings 方 法中添加如下代码:

loadStringSetting(stmt, Settings.System.SYSTEM_LOCALES, R.string.system_locales); 2.在Settings下创建菜单并实现简单功能

实现功能: 在Settings下面新增自定义一级菜单,放在一级菜单末尾; 自定义一级菜单能跳转到自定义的二级菜单; 二级菜单中至少包含3个不同的Preference; Preference应该对点击或者长按有自定的反馈(比如能有Dialog或者Toast等)

资料:https://juejin.cn/post/6956851213476298788

在V500/android/vendor/mediatek/proprietary/packages/apps/MtkSettings中的配置文件 AndroidManifest.xml中找到主启动类,并找到主布局文件

Settings 布局文件主界面 路径 V500/android/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/layout 中的 settings_homepage_container.xml

主界面布局中主要包含三部分:两个FrameLayout,一个顶部快捷搜索栏。其中Id为main_content的FrameLayout就是用来显示主设置内容的,即Settings的一级菜单项界面。

设置页面的 xml文件 V500/android/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml中的的 top_level_settings.xml ==> 一级菜单布局文件

...

其中:

key:该配置项的主键title:配置项的标题summary:概要标题下面的文字icon:前面的图标order:用来做排序,值越小则排行越靠前fragment:点击该item要跳转的界面,对应的xml是二级菜单controller:该item的控制器,控制他的内容展示,是否可用,也可以控制它的点击事件

二级菜单:参考资料:https://blog.csdn.net/weixin_42339486/article/details/104312453

Right:

一级菜单:

在 V500/android/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml中的 top_level_settings.xml中,添加以下代码:

二级菜单:

在一级菜单中添加一个 Fragment --> CustomsizeFragment,代码如下:

编写 CustomsizeFragment代码

在 MtkSettings/src/com/android/settings包下新建一个 customsize包,并创建 CustomsizeFragment.java

在这里插入图片描述

package com.android.settings.customize; import android.content.Context; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.R; public class CustomizeFragment extends DashboardFragment{ private static final String TAG = "CustomizeFragment"; @Override public int getMetricsCategory() { return 0; } @Override protected String getLogTag() { return TAG; } @Override protected int getPreferenceScreenResId() { return R.xml.customize_settings; } }

创建 二级菜单 xml文件 customize_settings,在 MtkSettings/res/xml/包下,新建 customsize_settings.xml

为二级菜单设置点击事件, 在二级菜单的 fragment 方法中进行监听事件 CustomsizeFragment.java

package com.android.settings.customize; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import androidx.preference.Preference; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.R; public class CustomizeFragment extends DashboardFragment implements Preference.OnPreferenceClickListener { private static final String TAG = "CustomizeFragment"; private Context mContext; private Preference name; private Preference group; private Preference version; @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { super.onCreatePreferences(savedInstanceState, rootKey); addPreferencesFromResource(R.xml.customize_settings); name = findPreference("customize_name_summary"); group = findPreference("customize_group_summary"); version = findPreference("customize_version_summary"); name.setOnPreferenceClickListener(this); group.setOnPreferenceClickListener(this); version.setOnPreferenceClickListener(this); } @Override protected int getPreferenceScreenResId() { return 0; } @Override public void onAttach(Context context) { super.onAttach(context); mContext = context; } @Override public int getMetricsCategory() { return 0; } @Override protected String getLogTag() { return TAG; } @Override public boolean onPreferenceClick(Preference preference) { Log.e(TAG, "onPreferenceClick: " + preference.getKey() ); switch (preference.getKey()){ case "customize_name_summary": Toast.makeText(mContext, "TINNO", Toast.LENGTH_SHORT).show(); break; case "customize_group_summary": Toast.makeText(mContext, "南昌", Toast.LENGTH_SHORT).show(); break; case "customize_version_summary": Toast.makeText(mContext, "版本为 1.0", Toast.LENGTH_SHORT).show(); break; } return false; } } 3.修改systemui中的quick setting(通知栏下拉后展示的 icon 列表)

两个要求: 一.在quick setting界面增加一个tile(icon)

二.修改quick setting 快捷设置的排序

资料:

在 config.xml中添加选项:

在 android/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml文件中,两个标签中:一个是默认的QS要显示的选项,一个是点击了编辑之后,所有的选项

wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,test wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,test,location,hotspot,inversion,saver,work,cast,night

创建自定义的 Tile,Tile的加载流程

Tile中方法

handleClick() 短按

getLongClickIntent() 长按

handleUpdateState() 更新状态

handleSecondaryClick() 点击开关label显示详情页

getToggleState() 若返回null详情页不显示switch开关。

getSettingsIntent() 跟长按的intent一样进入设置对应的界面。若返回null详情页不显示详细信息。

(1) 动作的监听响应:

在handleClick() 方法里处理点击事件;打开/关闭的动画也在这里调用;部分开关需要重写handleSecondaryClick() 方法,例如Wi-Fi和蓝牙开关,在handleSecondaryClick() 方法里打开详情页面;还有开关需要重写handleLongClick() ,例如反色和热点开关,在这里打开询问是否要隐藏的对话框;在setListening() 方法里添加回调监听,接受action和注册广播等。

(2) 状态的管理:

状态管理通过一个由Host提供的looper来进行。

每个快捷开关在handleUpdateState()中更新状态。回调影响状态要通过快捷开关的工作looper调用refreshState() 来触发另一个状态更新。

状态类有三种,State类以及继承自State类的BooleanState类和SignalState类。需要判断开关与否的状态的快捷开关继承QSTile, 包括飞行模式、反色、手电筒、热点、定位、自动旋转、蓝牙和屏幕投射开关等;还需要判断连接等状态的快捷开关继承QSTile,例如Wi-Fi和移动数据网络开关;其他直接继承QSTile。

(3) 另外,Wi-Fi和蓝牙开关需要重写supportsDualTargets() 方法和getDetailAdapter() 方法。因为这两个开关是绘制在一排两个开关的布局上而且需要显示详情页面。

QSTile:快速设置Tile的基类,快速设置都继承自这个类。Tile通过重载handleUpdateState方法来更新状态。如果监听到状态变化,或者点击事件需要更新状态,使用refreshState来更新State。QSTileHost: Host的实现,管理Tile 状态的变化。它包含各种Tile的Control类,用来设置和监听Tile。State: Tile的状态,包含图标,名称等信息。H:继承自Handler, 通过looper跑在QSTileHost的线程里。用来处理Tile的各种事件。Tunable: 接口,配置变化的回调。QSTileHost实现这个接口。TunerSercice:用来监听各种配置变化。

资料: https://blog.csdn.net/kongbaidepao/article/details/84031724

Right:

新增一个 tile

进入 V501_TEST/android/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/tileimpl中 的 QSFactoryImpl.java类,在 createTileInternal()方法中 添加一个 case

private QSTileImpl createTileInternal(String tileSpec){ ……; switch(tileSpec){ ……; /* 新增一个Tile */ case "test": return mFlashlightTileProvider.get(); } }

在 V501_TEST/android/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/ 中的 QSTileHost.java类中,在 loadTileSpecs()方法中将该 tile 添加到列表中:

protected static List loadTileSpecs(Context context, String tileList) { final Resources res = context.getResources(); if (TextUtils.isEmpty(tileList)) { tileList = res.getString(R.string.quick_settings_tiles); if (DEBUG) Log.d(TAG, "Loaded tile specs from config: " + tileList); } else { if (DEBUG) Log.d(TAG, "Loaded tile specs from setting: " + tileList); } final ArrayList tiles = new ArrayList(); boolean addedDefault = false; Set addedSpecs = new ArraySet(); for (String tile : tileList.split(",")) { tile = tile.trim(); if (tile.isEmpty()) continue; if (tile.equals("default")) { if (!addedDefault) { List defaultSpecs = getDefaultSpecs(context); for (String spec : defaultSpecs) { if (!addedSpecs.contains(spec)) { tiles.add(spec); addedSpecs.add(spec); } } addedDefault = true; } } else { if (!addedSpecs.contains(tile)) { tiles.add(tile); addedSpecs.add(tile); } } } /* reset gerrit:4885000 start */ // TODO(b/174753536): Move it into the config file. // Only do the below hacking when at least one of the below tiles exist // --InternetTile // --WiFiTile // --CellularTIle if (tiles.contains("internet") || tiles.contains("wifi") || tiles.contains("cell")) { if (SystemUIApplication.SETTINGS_PROVIDER_MODEL) { if (!tiles.contains("internet")) { if (tiles.contains("wifi")) { // Replace the WiFi with Internet, and remove the Cell tiles.set(tiles.indexOf("wifi"), "internet"); tiles.remove("cell"); } else if (tiles.contains("cell")) { // Replace the Cell with Internet tiles.set(tiles.indexOf("cell"), "internet"); } } else { tiles.remove("wifi"); tiles.remove("cell"); } } else { if (tiles.contains("internet")) { tiles.set(tiles.indexOf("internet"), "wifi"); tiles.add("cell"); } } } // 新增一个 Tile tiles.add("test"); /* reset gerrit:4885000 end */ return tiles; }

修改 Tile的顺序

连接手机 进入 cmd,删除系统默认的xml ,命令为:

adb shell settings delete secure sysui_qs_tiles

查看系统默认的xml,命令为:

adb shell settings get secure sysui_qs_tiles

进入 overlay目录下的 config.xml文件 ,路径如下:

/V501_TEST/android/vendor/tinno/product/v500/cat/overlay/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values$目录下的 config.xml文件,修改 quick_settings_tiles_default的顺序内容

flashlight,rotation,wifi,bt,dnd,headset,battery,custom(com.google.android.gms/.nearby.sharing.SharingTileService),cell, airplane,cast,brightness,screenrecord

自定义 Tile

自定义一个Tile,类名为 WXCustomTile.java类,用来定义自定义快捷图标

路径为 : /V501_TEST/android/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/tiles/下

package com.android.systemui.qs.tiles; import android.content.Context; import android.os.Looper; import androidx.annotation.Nullable; import android.content.Intent; import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QSTile.BooleanState; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import android.util.Log; import android.os.Handler; import javax.inject.Inject; import com.android.systemui.plugins.statusbar.StatusBarStateController; import android.view.View; import com.android.systemui.dagger.qualifiers.Main; public class WXCustomTile extends QSTileImpl{ private static final String TAG = "WXCustomTile"; @Inject public WXCustomTile( QSHost host, @Background Looper backgroundLooper, @Main Handler mainHandler, FalsingManager falsingManager, MetricsLogger metricsLogger, StatusBarStateController statusBarStateController, ActivityStarter activityStarter, QSLogger qsLogger ) { super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger, statusBarStateController, activityStarter, qsLogger); } @Override public BooleanState newTileState(){ return new BooleanState(); } @Override protected void handleClick(@Nullable View view){ Log.d("cxr", "MyTile handleClick set new state : "); //setEnable(true); } // private void setEnable(boolean b){ // if(b){ // PowerManager pw = mContext.getSystemService(Context.POWER_SERVICE); // pw.goToSleep(SystemClock.uptimeMillis()); // } // } @Override public void handleUpdateState(BooleanState state, Object arg){ state.icon = ResourceIcon.get(R.drawable.ic_qs_custom); state.label = mContext.getString(R.string.custom_tile); } @Override public int getMetricsCategory(){ return 0; } @Override public Intent getLongClickIntent(){ return null; } @Override public CharSequence getTileLabel(){ return null; } }

在 drawble包中加入一个图标,命名为 ic_qs_custom

在 values/strings.xml中 添加一条语句,命名为 custom_tile

下一步

在 overlay中进行添加一个选项 , 为 custom

路径为 :/V501_TEST/android/vendor/tinno/product/v500/cat/overlay/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml

wifi,bt,dnd,flashlight,rotation,headset,battery,custom(com.google.android.gms/.nearby.sharing.SharingTileService), cell,airplane,cast,brightness,screenrecord,custom lashlight,rotation,wifi,cell,battery,dnd,bt,airplane,location,hotspot,inversion,saver,dark,work,cast,night,brightness, fheadset,screenrecord,custom

在 QSFactoryImpl类中调用xml中的选项,

路径如下:/V501_TEST/android/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/qs/tileimpl/

在 构造函数中 添加自定义的Tile

@Inject public QSFactoryImpl( ... ... /* 新增自定义Tile */ private final Provider mWXCustomTileProvider;) { ... ... /* 新增自定义Tile */ mWXCustomTileProvider = wxCustomTileProvider; }

并在 createTileInternal()方法中,调用该方法

private QSTileImpl createTileInternal(String tileSpec) { ... ... // Stock tiles. switch (tileSpec) { .... .... /* 新增一个Tile */ case "custom": return mWXCustomTileProvider.get(); } ... }

完整代码如下:

/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use mHost 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.systemui.qs.tileimpl; import android.content.Context; import android.os.Build; import android.os.SystemProperties; import android.util.Log; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.plugins.qs.QSFactory; import com.android.systemui.plugins.qs.QSIconView; import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.qs.QSTileView; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.external.CustomTile; import com.android.systemui.qs.tiles.AdaptiveBrightnessTile; import com.android.systemui.qs.tiles.AirplaneModeTile; import com.android.systemui.qs.tiles.AlarmTile; import com.android.systemui.qs.tiles.BatterySaverTile; import com.android.systemui.qs.tiles.BluetoothTile; import com.android.systemui.qs.tiles.CameraToggleTile; import com.android.systemui.qs.tiles.CastTile; import com.android.systemui.qs.tiles.CellularTile; import com.android.systemui.qs.tiles.ColorInversionTile; import com.android.systemui.qs.tiles.DataSaverTile; import com.android.systemui.qs.tiles.DeviceControlsTile; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.qs.tiles.FlashlightTile; import com.android.systemui.qs.tiles.HeadsetTile; import com.android.systemui.qs.tiles.HotspotTile; import com.android.systemui.qs.tiles.InternetTile; import com.android.systemui.qs.tiles.LocationTile; import com.android.systemui.qs.tiles.MicrophoneToggleTile; import com.android.systemui.qs.tiles.NfcTile; import com.android.systemui.qs.tiles.NightDisplayTile; import com.android.systemui.qs.tiles.QuickAccessWalletTile; import com.android.systemui.qs.tiles.ReduceBrightColorsTile; import com.android.systemui.qs.tiles.RotationLockTile; import com.android.systemui.qs.tiles.ScreenRecordTile; import com.android.systemui.qs.tiles.UiModeNightTile; import com.android.systemui.qs.tiles.UserTile; import com.android.systemui.qs.tiles.WXCustomTile; import com.android.systemui.qs.tiles.WifiTile; import com.android.systemui.qs.tiles.WorkModeTile; import com.android.systemui.util.leak.GarbageMonitor; import com.cat.feature.CatGeneralFeature; /// M: add plugin in quicksetting @{ import com.mediatek.systemui.ext.IQuickSettingsPlugin; /// add plugin in quicksetting @} /// M: Add extra tiles in quicksetting @{ import com.mediatek.systemui.ext.OpSystemUICustomizationFactoryBase; import com.mediatek.systemui.statusbar.util.SIMHelper; ///@} import javax.inject.Inject; import javax.inject.Provider; import dagger.Lazy; @SysUISingleton public class QSFactoryImpl implements QSFactory { private static final String TAG = "QSFactory"; private final Provider mWifiTileProvider; private final Provider mInternetTileProvider; private final Provider mBluetoothTileProvider; private final Provider mCellularTileProvider; private final Provider mDndTileProvider; private final Provider mColorInversionTileProvider; private final Provider mAirplaneModeTileProvider; private final Provider mWorkModeTileProvider; private final Provider mRotationLockTileProvider; private final Provider mFlashlightTileProvider; private final Provider mLocationTileProvider; private final Provider mCastTileProvider; private final Provider mHotspotTileProvider; private final Provider mUserTileProvider; private final Provider mBatterySaverTileProvider; private final Provider mDataSaverTileProvider; private final Provider mNightDisplayTileProvider; private final Provider mNfcTileProvider; private final Provider mMemoryTileProvider; private final Provider mUiModeNightTileProvider; private final Provider mScreenRecordTileProvider; private final Provider mReduceBrightColorsTileProvider; private final Provider mCameraToggleTileProvider; private final Provider mMicrophoneToggleTileProvider; private final Provider mDeviceControlsTileProvider; private final Provider mAlarmTileProvider; private final Provider mQuickAccessWalletTileProvider; private final Provider mAdaptiveBrightnessTileProvider; private final Provider mHeadsetTileProvider;// add by xiao.liang for VFABAE-1017 at 2022.5.13 private final Lazy mQsHostLazy; private final Provider mCustomTileBuilderProvider; /* 新增自定义Tile */ private final Provider mWXCustomTileProvider; @Inject public QSFactoryImpl( Lazy qsHostLazy, Provider customTileBuilderProvider, Provider wifiTileProvider, Provider internetTileProvider, Provider bluetoothTileProvider, Provider cellularTileProvider, Provider dndTileProvider, Provider colorInversionTileProvider, Provider airplaneModeTileProvider, Provider workModeTileProvider, Provider rotationLockTileProvider, Provider flashlightTileProvider, Provider locationTileProvider, Provider castTileProvider, Provider hotspotTileProvider, Provider userTileProvider, Provider batterySaverTileProvider, Provider dataSaverTileProvider, Provider nightDisplayTileProvider, Provider nfcTileProvider, Provider memoryTileProvider, Provider uiModeNightTileProvider, Provider screenRecordTileProvider, Provider reduceBrightColorsTileProvider, Provider cameraToggleTileProvider, Provider microphoneToggleTileProvider, Provider deviceControlsTileProvider, Provider alarmTileProvider, Provider quickAccessWalletTileProvider, Provider adaptiveBrightnessTileProvider, /* 新增自定义Tile */ Provider wxCustomTileProvider, Provider headsetTileProvider/*add by xiao.liang for VFABAE-1017 at 2022.5.13*/) { mQsHostLazy = qsHostLazy; mCustomTileBuilderProvider = customTileBuilderProvider; mWifiTileProvider = wifiTileProvider; mInternetTileProvider = internetTileProvider; mBluetoothTileProvider = bluetoothTileProvider; mCellularTileProvider = cellularTileProvider; mDndTileProvider = dndTileProvider; mColorInversionTileProvider = colorInversionTileProvider; mAirplaneModeTileProvider = airplaneModeTileProvider; mWorkModeTileProvider = workModeTileProvider; mRotationLockTileProvider = rotationLockTileProvider; mFlashlightTileProvider = flashlightTileProvider; mLocationTileProvider = locationTileProvider; mCastTileProvider = castTileProvider; mHotspotTileProvider = hotspotTileProvider; mUserTileProvider = userTileProvider; mBatterySaverTileProvider = batterySaverTileProvider; mDataSaverTileProvider = dataSaverTileProvider; mNightDisplayTileProvider = nightDisplayTileProvider; mNfcTileProvider = nfcTileProvider; mMemoryTileProvider = memoryTileProvider; mUiModeNightTileProvider = uiModeNightTileProvider; mScreenRecordTileProvider = screenRecordTileProvider; mReduceBrightColorsTileProvider = reduceBrightColorsTileProvider; mCameraToggleTileProvider = cameraToggleTileProvider; mMicrophoneToggleTileProvider = microphoneToggleTileProvider; mDeviceControlsTileProvider = deviceControlsTileProvider; mAlarmTileProvider = alarmTileProvider; mQuickAccessWalletTileProvider = quickAccessWalletTileProvider; mAdaptiveBrightnessTileProvider = adaptiveBrightnessTileProvider; /* 新增自定义Tile */ mWXCustomTileProvider = wxCustomTileProvider; mHeadsetTileProvider = headsetTileProvider;// add by xiao.liang for VFABAE-1017 at 2022.5.13 } public QSTile createTile(String tileSpec) { QSTileImpl tile = createTileInternal(tileSpec); if (tile != null) { tile.initialize(); tile.postStale(); // Tile was just created, must be stale. } return tile; } private QSTileImpl createTileInternal(String tileSpec) { /// M: Add extra tiles in quicksetting @{ Context context = mQsHostLazy.get().getContext(); IQuickSettingsPlugin quickSettingsPlugin = OpSystemUICustomizationFactoryBase .getOpFactory(context).makeQuickSettings(context); /// @} // M: [ALPS06389351] For monkeyTest of camera, don't show cameratoggle // by commend if (SystemProperties.getBoolean("persist.disable_cameratoggle", false) && "cameratoggle".equals(tileSpec)) { return null; } // Stock tiles. switch (tileSpec) { case "wifi": return mWifiTileProvider.get(); case "internet": return mInternetTileProvider.get(); case "bt": return mBluetoothTileProvider.get(); case "cell": return mCellularTileProvider.get(); case "dnd": return mDndTileProvider.get(); case "inversion": return mColorInversionTileProvider.get(); case "airplane": return mAirplaneModeTileProvider.get(); case "work": return mWorkModeTileProvider.get(); case "rotation": return mRotationLockTileProvider.get(); case "flashlight": return mFlashlightTileProvider.get(); case "location": return mLocationTileProvider.get(); case "cast": return mCastTileProvider.get(); case "hotspot": return mHotspotTileProvider.get(); case "user": return mUserTileProvider.get(); case "battery": return mBatterySaverTileProvider.get(); case "saver": return mDataSaverTileProvider.get(); case "night": return mNightDisplayTileProvider.get(); case "nfc": return mNfcTileProvider.get(); case "dark": return mUiModeNightTileProvider.get(); case "screenrecord": return mScreenRecordTileProvider.get(); case "reduce_brightness": return mReduceBrightColorsTileProvider.get(); case "cameratoggle": return mCameraToggleTileProvider.get(); case "mictoggle": return mMicrophoneToggleTileProvider.get(); case "controls": return mDeviceControlsTileProvider.get(); case "alarm": return mAlarmTileProvider.get(); case "wallet": return mQuickAccessWalletTileProvider.get(); // feng.zhang add by VFABAE-658 start date20220506 case "brightness": return mAdaptiveBrightnessTileProvider.get(); // feng.zhang add by VFABAE-658 end /* 新增一个Tile */ case "custom": return mWXCustomTileProvider.get(); /* 新增一个Tile */ case "test": return mFlashlightTileProvider.get(); } // add by xiao.liang for VFABAE-1017 at 2022.5.13 begin if (CatGeneralFeature.CAT_GENERAL_FEATURE_WATER_DETECT && "headset".equals(tileSpec)) { return mHeadsetTileProvider.get(); } // add by xiao.liang for VFABAE-1017 at 2022.5.13 end // Custom tiles if (tileSpec.startsWith(CustomTile.PREFIX)) { return CustomTile.create( mCustomTileBuilderProvider.get(), tileSpec, mQsHostLazy.get().getUserContext()); } // Debug tiles. if (Build.IS_DEBUGGABLE) { if (tileSpec.equals(GarbageMonitor.MemoryTile.TILE_SPEC)) { return mMemoryTileProvider.get(); } } // Broken tiles. Log.w(TAG, "No stock tile spec: " + tileSpec); return null; } @Override public QSTileView createTileView(Context context, QSTile tile, boolean collapsedView) { QSIconView icon = tile.createTileView(context); return new QSTileViewImpl(context, icon, collapsedView); } }

在apk刷入之前,需要先将系统原本的xml文件删除,在进行刷入,否则会出现效果无法显示

adb shell settings delete secure sysui_qs_tiles


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3