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