1,应用disable 流程
根据项目需求,最近研究了下app 被禁用的流程
每一个button 对应ActionButtonsPreference
frameworks/base/packages/SettingsLib/ActionButtonsPreference/src/com/android/settingslib/widget/ActionButtonsPreference.java
这里面有api 可以控制图标,可见,和是否可以点击
packages/apps/Settings/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
控制 按钮的实现功能,打开,卸载,停止等
其中handleDisableable 根据系统白名单判断应用是否可以停止
@VisibleForTesting
boolean handleDisableable() {
boolean disableable = false;
// Try to prevent the user from bricking their phone
// by not allowing disabling of apps signed with the
// system cert and any launcher app in the system.
if (mHomePackages.contains(mAppEntry.info.packageName)
|| isSystemPackage(mActivity.getResources(), mPm, mPackageInfo)) {
// Disable button for core system applications.
mButtonsPref.setButton2Text(R.string.disable_text)
.setButton2Icon(R.drawable.ic_settings_disable);
} else if (mAppEntry.info.enabled && !isDisabledUntilUsed()) {
mButtonsPref.setButton2Text(R.string.disable_text)
.setButton2Icon(R.drawable.ic_settings_disable);
//读取系统enable 的package list
disableable = !mApplicationFeatureProvider.getKeepEnabledPackages()
.contains(mAppEntry.info.packageName);
} else {
mButtonsPref.setButton2Text(R.string.enable_text)
.setButton2Icon(R.drawable.ic_settings_enable);
disableable = true;
}
return disableable;
}
读取列表的地方在
packages/apps/Settings/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
如果我们需要默认就不能diable 只需要在getKeepEnabledPackages 方法最后加上对应包名即可
keepEnabledPackages.add("xxx.xx.xxx");
2,未完待续