Merge "Update condition to elevate a sync adapter to ACTIVE." into tm-dev

This commit is contained in:
Varun Shah
2022-04-19 15:20:38 +00:00
committed by Android (Google) Code Review

View File

@@ -385,6 +385,22 @@ public class AppStandbyController
*/ */
private final Map<String, String> mAppStandbyProperties = new ArrayMap<>(); private final Map<String, String> mAppStandbyProperties = new ArrayMap<>();
/**
* List of app-ids of system packages, populated on boot, when system services are ready.
*/
private final ArrayList<Integer> mSystemPackagesAppIds = new ArrayList<>();
/**
* PackageManager flags to query for all system packages, including those that are disabled
* and hidden.
*/
private static final int SYSTEM_PACKAGE_FLAGS = PackageManager.MATCH_UNINSTALLED_PACKAGES
| PackageManager.MATCH_SYSTEM_ONLY
| PackageManager.MATCH_ANY_USER
| PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
| PackageManager.MATCH_DIRECT_BOOT_AWARE
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
/** /**
* Whether we should allow apps into the * Whether we should allow apps into the
* {@link android.app.usage.UsageStatsManager#STANDBY_BUCKET_RESTRICTED} bucket or not. * {@link android.app.usage.UsageStatsManager#STANDBY_BUCKET_RESTRICTED} bucket or not.
@@ -585,6 +601,14 @@ public class AppStandbyController
if (mPendingOneTimeCheckIdleStates) { if (mPendingOneTimeCheckIdleStates) {
postOneTimeCheckIdleStates(); postOneTimeCheckIdleStates();
} }
// Populate list of system packages and their app-ids.
final List<ApplicationInfo> systemApps = mPackageManager.getInstalledApplications(
SYSTEM_PACKAGE_FLAGS);
for (int i = 0, size = systemApps.size(); i < size; i++) {
final ApplicationInfo appInfo = systemApps.get(i);
mSystemPackagesAppIds.add(UserHandle.getAppId(appInfo.uid));
}
} else if (phase == PHASE_BOOT_COMPLETED) { } else if (phase == PHASE_BOOT_COMPLETED) {
setChargingState(mInjector.isCharging()); setChargingState(mInjector.isCharging());
@@ -602,17 +626,18 @@ public class AppStandbyController
// Get sync adapters for the authority // Get sync adapters for the authority
String[] packages = ContentResolver.getSyncAdapterPackagesForAuthorityAsUser( String[] packages = ContentResolver.getSyncAdapterPackagesForAuthorityAsUser(
authority, userId); authority, userId);
final PackageManagerInternal pmi = mInjector.getPackageManagerInternal();
final long elapsedRealtime = mInjector.elapsedRealtime(); final long elapsedRealtime = mInjector.elapsedRealtime();
for (String packageName: packages) { for (String packageName : packages) {
// Only force the sync adapters to active if the provider is not in the same package and // Don't force the sync adapter to active if the provider is in the same APK.
// the sync adapter is a system package. if (packageName.equals(providerPkgName)) {
try {
PackageInfo pi = mPackageManager.getPackageInfoAsUser(
packageName, PackageManager.MATCH_SYSTEM_ONLY, userId);
if (pi == null || pi.applicationInfo == null) {
continue; continue;
} }
if (!packageName.equals(providerPkgName)) {
final int appId = UserHandle.getAppId(pmi.getPackageUid(packageName, 0, userId));
// Elevate the sync adapter to active if it's a system app or
// is a non-system app and shares its app id with a system app.
if (mSystemPackagesAppIds.contains(appId)) {
final List<UserHandle> linkedProfiles = getCrossProfileTargets(packageName, final List<UserHandle> linkedProfiles = getCrossProfileTargets(packageName,
userId); userId);
synchronized (mAppIdleLock) { synchronized (mAppIdleLock) {
@@ -621,9 +646,6 @@ public class AppStandbyController
elapsedRealtime, mSyncAdapterTimeoutMillis, linkedProfiles); elapsedRealtime, mSyncAdapterTimeoutMillis, linkedProfiles);
} }
} }
} catch (PackageManager.NameNotFoundException e) {
// Shouldn't happen
}
} }
} }
@@ -2190,7 +2212,18 @@ public class AppStandbyController
for (int i = mHeadlessSystemApps.size() - 1; i >= 0; --i) { for (int i = mHeadlessSystemApps.size() - 1; i >= 0; --i) {
pw.print(" "); pw.print(" ");
pw.print(mHeadlessSystemApps.valueAt(i)); pw.print(mHeadlessSystemApps.valueAt(i));
pw.println(","); if (i != 0) pw.println(",");
}
}
pw.println("]");
pw.println();
pw.println("mSystemPackagesAppIds=[");
synchronized (mSystemPackagesAppIds) {
for (int i = mSystemPackagesAppIds.size() - 1; i >= 0; --i) {
pw.print(" ");
pw.print(mSystemPackagesAppIds.get(i));
if (i != 0) pw.println(",");
} }
} }
pw.println("]"); pw.println("]");