Merge "Retrieve direct boot aware activities." into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-06-17 22:59:16 +00:00
committed by Android (Google) Code Review

View File

@@ -93,7 +93,6 @@ import android.os.SystemClock;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.Settings.Global; import android.provider.Settings.Global;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.ArrayMap;
import android.util.ArraySet; import android.util.ArraySet;
import android.util.KeyValueListParser; import android.util.KeyValueListParser;
import android.util.Slog; import android.util.Slog;
@@ -205,6 +204,10 @@ public class AppStandbyController implements AppStandbyInternal {
*/ */
private static final long WAIT_FOR_ADMIN_DATA_TIMEOUT_MS = 10_000; private static final long WAIT_FOR_ADMIN_DATA_TIMEOUT_MS = 10_000;
private static final int HEADLESS_APP_CHECK_FLAGS =
PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
| PackageManager.GET_ACTIVITIES | PackageManager.MATCH_DISABLED_COMPONENTS;
// To name the lock for stack traces // To name the lock for stack traces
static class Lock {} static class Lock {}
@@ -234,7 +237,7 @@ public class AppStandbyController implements AppStandbyInternal {
* disabled). Presence in this map indicates that the app is a headless system app. * disabled). Presence in this map indicates that the app is a headless system app.
*/ */
@GuardedBy("mHeadlessSystemApps") @GuardedBy("mHeadlessSystemApps")
private final ArrayMap<String, Boolean> mHeadlessSystemApps = new ArrayMap<>(); private final ArraySet<String> mHeadlessSystemApps = new ArraySet<>();
private final CountDownLatch mAdminDataAvailableLatch = new CountDownLatch(1); private final CountDownLatch mAdminDataAvailableLatch = new CountDownLatch(1);
@@ -1123,7 +1126,7 @@ public class AppStandbyController implements AppStandbyInternal {
private boolean isHeadlessSystemApp(String packageName) { private boolean isHeadlessSystemApp(String packageName) {
synchronized (mHeadlessSystemApps) { synchronized (mHeadlessSystemApps) {
return mHeadlessSystemApps.containsKey(packageName); return mHeadlessSystemApps.contains(packageName);
} }
} }
@@ -1695,9 +1698,8 @@ public class AppStandbyController implements AppStandbyInternal {
return; return;
} }
try { try {
PackageInfo pi = mPackageManager.getPackageInfoAsUser(packageName, PackageInfo pi = mPackageManager.getPackageInfoAsUser(
PackageManager.GET_ACTIVITIES | PackageManager.MATCH_DISABLED_COMPONENTS, packageName, HEADLESS_APP_CHECK_FLAGS, userId);
userId);
evaluateSystemAppException(pi); evaluateSystemAppException(pi);
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
synchronized (mHeadlessSystemApps) { synchronized (mHeadlessSystemApps) {
@@ -1709,15 +1711,16 @@ public class AppStandbyController implements AppStandbyInternal {
/** Returns true if the exception status changed. */ /** Returns true if the exception status changed. */
private boolean evaluateSystemAppException(@Nullable PackageInfo pkgInfo) { private boolean evaluateSystemAppException(@Nullable PackageInfo pkgInfo) {
if (pkgInfo == null || pkgInfo.applicationInfo == null if (pkgInfo == null || pkgInfo.applicationInfo == null
|| !pkgInfo.applicationInfo.isSystemApp()) { || (!pkgInfo.applicationInfo.isSystemApp()
&& !pkgInfo.applicationInfo.isUpdatedSystemApp())) {
return false; return false;
} }
synchronized (mHeadlessSystemApps) { synchronized (mHeadlessSystemApps) {
if (pkgInfo.activities == null || pkgInfo.activities.length == 0) { if (pkgInfo.activities == null || pkgInfo.activities.length == 0) {
// Headless system app. // Headless system app.
return mHeadlessSystemApps.put(pkgInfo.packageName, true) == null; return mHeadlessSystemApps.add(pkgInfo.packageName);
} else { } else {
return mHeadlessSystemApps.remove(pkgInfo.packageName) != null; return mHeadlessSystemApps.remove(pkgInfo.packageName);
} }
} }
} }
@@ -1758,8 +1761,7 @@ public class AppStandbyController implements AppStandbyInternal {
private void loadHeadlessSystemAppCache() { private void loadHeadlessSystemAppCache() {
Slog.d(TAG, "Loading headless system app cache. appIdleEnabled=" + mAppIdleEnabled); Slog.d(TAG, "Loading headless system app cache. appIdleEnabled=" + mAppIdleEnabled);
final List<PackageInfo> packages = mPackageManager.getInstalledPackagesAsUser( final List<PackageInfo> packages = mPackageManager.getInstalledPackagesAsUser(
PackageManager.GET_ACTIVITIES | PackageManager.MATCH_DISABLED_COMPONENTS, HEADLESS_APP_CHECK_FLAGS, UserHandle.USER_SYSTEM);
UserHandle.USER_SYSTEM);
final int packageCount = packages.size(); final int packageCount = packages.size();
for (int i = 0; i < packageCount; i++) { for (int i = 0; i < packageCount; i++) {
PackageInfo pkgInfo = packages.get(i); PackageInfo pkgInfo = packages.get(i);
@@ -1868,7 +1870,7 @@ public class AppStandbyController implements AppStandbyInternal {
synchronized (mHeadlessSystemApps) { synchronized (mHeadlessSystemApps) {
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.keyAt(i)); pw.print(mHeadlessSystemApps.valueAt(i));
pw.println(","); pw.println(",");
} }
} }