[pm] do not stop system apps with disabled a launcher activity
If an app has a disabled/unexported launcher activity, it is effectively
the same as not having a launcher activity. We should not stop such
system apps by default.
BUG: 286459841
Test: manual with a system app that has disabled launcher activity and
verify that it is in the `stopped=false` state after first boot
Test: also tested updating such a system app and verified that it
remains in the un-stopped state after the update is uninstalled
Merged-In: Ie865aba7325e3442c6610ef962fce3a3a65f0b70
Change-Id: Ie865aba7325e3442c6610ef962fce3a3a65f0b70
(cherry picked from commit a1c1f2e29f)
This commit is contained in:
committed by
Song Chun Fan
parent
90451b716d
commit
e9c83eae3c
@@ -4300,7 +4300,8 @@ final class InstallPackageHelper {
|
||||
// - It's an APEX or overlay package since stopped state does not affect them.
|
||||
// - It is enumerated with a <initial-package-state> tag having the stopped attribute
|
||||
// set to false
|
||||
// - It doesn't have a launcher entry which means the user doesn't have a way to unstop it
|
||||
// - It doesn't have an enabled and exported launcher activity, which means the user
|
||||
// wouldn't have a way to un-stop it
|
||||
final boolean isApexPkg = (scanFlags & SCAN_AS_APEX) != 0;
|
||||
if (mPm.mShouldStopSystemPackagesByDefault
|
||||
&& scanSystemPartition
|
||||
@@ -4326,7 +4327,11 @@ final class InstallPackageHelper {
|
||||
categories.add(Intent.CATEGORY_LAUNCHER);
|
||||
final List<ParsedActivity> activities = parsedPackage.getActivities();
|
||||
for (int indexActivity = 0; indexActivity < activities.size(); indexActivity++) {
|
||||
final List<ParsedIntentInfo> intents = activities.get(indexActivity).getIntents();
|
||||
final ParsedActivity activity = activities.get(indexActivity);
|
||||
if (!activity.isEnabled() || !activity.isExported()) {
|
||||
continue;
|
||||
}
|
||||
final List<ParsedIntentInfo> intents = activity.getIntents();
|
||||
for (int indexIntent = 0; indexIntent < intents.size(); indexIntent++) {
|
||||
final IntentFilter intentFilter = intents.get(indexIntent).getIntentFilter();
|
||||
if (intentFilter != null && intentFilter.matchCategories(categories) == null) {
|
||||
|
||||
Reference in New Issue
Block a user