本文虽基于AOSP 11,但部分修改可能会涉及MTK平台相关代码,其他未涉及的代码修改均使用AOSP 11代码为例子。
作者其他文章
- AOSP | Android 9 控制导航栏的隐藏与显示
- AOSP | Android 11 Settings 开发(01) 环境搭建
- AOSP | Android 9 Framework 修改记录(持续更新)
- AOSP | Android 9 由壁纸切换带来的手机主题变更及问题出现)
- AOSP | Android 9 过滤Recents
- AOSP | Android 9 APP源码移植到系统源码中进行编译
- 后端 | 沙箱环境下实现支付宝网站支付
- 前端 | vue-echarts渲染时视图模糊的解决办法
1、Settings一级菜单删除/隐藏/屏蔽(以Settings - Network为例)
packages\apps\Settings\res\xml\top_level_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="top_level_settings">
<!-- hidden menu. -->
<!--
<Preference
android:key="top_level_network"
android:title="@string/network_dashboard_title"
android:summary="@string/summary_placeholder"
android:icon="@drawable/ic_homepage_network"
android:order="-120"
android:fragment="com.android.settings.network.NetworkDashboardFragment"
settings:controller="com.android.settings.network.TopLevelNetworkEntryPreferenceController"/>
-->
</PreferenceScreen>
2-1、Settings二级菜单删除/隐藏/屏蔽(以Settings - System - Gesture为例, 第一种方法修改xml文件)
packages\apps\Settings\res\xml\system_dashboard_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="system_dashboard_screen"
android:title="@string/header_category_system"
settings:initialExpandedChildrenCount="4">
<!-- Hidden menu -->
<!--
<Preference
android:key="gesture_settings"
android:title="@string/gesture_preference_title"
android:icon="@drawable/ic_settings_gestures"
android:order="-250"
android:fragment="com.android.settings.gestures.GestureSettings"
settings:controller="com.android.settings.gestures.GesturesSettingPreferenceController"/>
-->
</PreferenceScreen>
2-2、Settings二级菜单删除/隐藏/屏蔽(以Settings - System - Gesture为例, 第二种方法修改java文件)
packages\apps\Settings\src\com\android\settings\system\SystemDashboardFragment.java
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
final PreferenceScreen screen = getPreferenceScreen();
+ /// M: modify by wayhoi, hidden menu. @{
+ // if you unknow the key of preference
+ int preferenceCount = screen.getPreferenceCount();
+ for (int i = 0; i < preferenceCount; i++) {
+ //get the key of preference
+ Preference preference = screen.getPreference(i);
+ Log.v("wayhoi", preference.getKey().toString());
+ }
+
+ // hidden the target menu
+ String key = "gesture_settings";
+ Preference getturePref = screen.findPreference(key);
+ if (getturePref != null) {
+ screen.removePreference(getturePref);
+ }
+ /// }
}
3、Settings - System 取消折叠子菜单
packages\apps\Settings\src\com\android\settings\system\SystemDashboardFragment.java
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
final PreferenceScreen screen = getPreferenceScreen();
// We do not want to display an advanced button if only one setting is hidden
/// M: modify by wayhoi, unfoldable options
- if (getVisiblePreferenceCount(screen) == screen.getInitialExpandedChildrenCount() + 1) {
+ //if (getVisiblePreferenceCount(screen) == screen.getInitialExpandedChildrenCount() + 1) {
screen.setInitialExpandedChildrenCount(Integer.MAX_VALUE);
- }
+ //}
showRestrictionDialog();
}
4、Settings - Display - Wallpaper 隐藏动态壁纸、壁纸选项
packages\apps\Settings\src\com\android\settings\wallpaper\WallpaperTypePreferenceContoller.java
private void populateWallpaperTypes() {
// Search for activities that satisfy the ACTION_SET_WALLPAPER action
final Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
final PackageManager pm = mContext.getPackageManager();
final List<ResolveInfo> rList = pm.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
removeUselessExistingPreference(rList);
mScreen.setOrderingAsAdded(false);
// Add Preference items for each of the matching activities
for (ResolveInfo info : rList) {
final String packageName = info.activityInfo.packageName;
+ /// M: modify by wayhoi, hidden live-wallpaper & wallpaper @{
+ if (packageName.equals("com.android.wallpaper.livepicker")
+ || packageName.equals("com.android.wallpaperpicker")) {
+ continue;
+ }
+ /// }
Preference pref = mScreen.findPreference(packageName);
if (pref == null) {
pref = new Preference(mScreen.getContext());
}
final Intent prefIntent = new Intent(intent).addFlags(
Intent.FLAG_ACTIVITY_FORWARD_RESULT);
prefIntent.setComponent(new ComponentName(packageName, info.activityInfo.name));
pref.setIntent(prefIntent);
pref.setKey(packageName);
CharSequence label = info.loadLabel(pm);
if (label == null) {
label = packageName;
}
pref.setTitle(label);
pref.setIcon(info.loadIcon(pm));
mScreen.addPreference(pref);
}
}
5、Recents过滤
packages/apps/Launcher3/quickstep/src/com/android/quickstep/RecentTasksList.java
TaskLoadResult loadTasksInBackground(int numTasks, int requestId, boolean loadKeysOnly) {
int currentUserId = Process.myUserHandle().getIdentifier();
List<ActivityManager.RecentTaskInfo> rawTasks =
mActivityManagerWrapper.getRecentTasks(numTasks, currentUserId);
+ /// M: modify by wayhoi, remove settings in recents list. @{
+ if (rawTasks.size() > 0) {
+ for (int i = 0; i < rawTasks.size(); i++) {
+ if (rawTasks.get(i).topActivity != null
+ && rawTasks.get(i).topActivity.getPackageName()
+ .equals("com.android.settings")) {
+ rawTasks.remove(i);
+ break;
+ } else if (rawTasks.get(i).baseActivity != null
+ && rawTasks.get(i).baseActivity.getPackageName()
+ .equals("com.android.settings")) {
+ rawTasks.remove(i);
+ break;
+ }
+ }
+ }
+ /// }
// The raw tasks are given in most-recent to least-recent order, we need to reverse it
Collections.reverse(rawTasks);
……
return allTasks;
}
6、修复已连接Wi-Fi,但显示无网络连接
packages/modules/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java
private boolean getIsCaptivePortalCheckEnabled() {
String symbol = CAPTIVE_PORTAL_MODE;
int defaultValue = CAPTIVE_PORTAL_MODE_PROMPT;
int mode = mDependencies.getSetting(mContext, symbol, defaultValue);
+ /// M: modify by wayhoi, fix connected but no internet. @{
+ //return mode != CAPTIVE_PORTAL_MODE_IGNORE;
+ return false;
+ /// }
}