packages\apps\TvSettings\Settings\src\com\android\tv\settings\device\apps\EnableDisablePreference.java
public void refresh() {
if (!UninstallPreference.canUninstall(mEntry) && canDisable()) {
setVisible(true);
系统应用和homepackage 不允许disable
homepackage一般包括 launcher和setting
private boolean canDisable() {
final HashSet<String> homePackages = getHomePackages();
PackageInfo packageInfo;
try {
packageInfo = mPackageManager.getPackageInfo(mEntry.info.packageName,
PackageManager.GET_DISABLED_COMPONENTS |
PackageManager.GET_UNINSTALLED_PACKAGES |
PackageManager.GET_SIGNATURES);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
return !(homePackages.contains(mEntry.info.packageName) ||
Utils.isSystemPackage(getContext().getResources(), mPackageManager, packageInfo));
}
private HashSet<String> getHomePackages() {
HashSet<String> homePackages = new HashSet<>();
// Get list of "home" apps and trace through any meta-data references
List<ResolveInfo> homeActivities = new ArrayList<>();
mPackageManager.getHomeActivities(homeActivities);
for (ResolveInfo ri : homeActivities) {
final String activityPkg = ri.activityInfo.packageName;
homePackages.add(activityPkg);
// Also make sure to include anything proxying for the home app
final Bundle metadata = ri.activityInfo.metaData;
if (metadata != null) {
final String metaPkg = metadata.getString(ActivityManager.META_HOME_ALTERNATE);
if (signaturesMatch(mPackageManager, metaPkg, activityPkg)) {
homePackages.add(metaPkg);
}
}
}
return homePackages;
}
frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java
@Override
public ComponentName getHomeActivities(List<ResolveInfo> allHomeCandidates) {
if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
return null;
}
return getHomeActivitiesAsUser(allHomeCandidates, UserHandle.getCallingUserId());
}
ComponentName getHomeActivitiesAsUser(List<ResolveInfo> allHomeCandidates,
int userId) {
Intent intent = getHomeIntent();
List<ResolveInfo> resolveInfos = queryIntentActivitiesInternal(intent, null,
PackageManager.GET_META_DATA, userId);
allHomeCandidates.clear();
if (resolveInfos == null) {
return null;
}
allHomeCandidates.addAll(resolveInfos);
final String packageName = mPermissionManager.getDefaultHome(userId);
if (packageName == null) {
return null;
}
int resolveInfosSize = resolveInfos.size();
for (int i = 0; i < resolveInfosSize; i++) {
ResolveInfo resolveInfo = resolveInfos.get(i);
if (resolveInfo.activityInfo != null && TextUtils.equals(
resolveInfo.activityInfo.packageName, packageName)) {
return new ComponentName(resolveInfo.activityInfo.packageName,
resolveInfo.activityInfo.name);
}
}
return null;
}