summaryrefslogtreecommitdiff
path: root/apex
diff options
context:
space:
mode:
authorKweku Adams <kwekua@google.com>2020-06-16 11:59:37 -0700
committerKweku Adams <kwekua@google.com>2020-06-17 11:12:41 -0700
commitf197eef1086dab24fbd17c6af6c1a22c2eb27c9b (patch)
treeb62af38cf2da9240821a3f59b05147448b87eb80 /apex
parente0ba6d9dffc533e4c175d693e54f55290a8141de (diff)
Retrieve direct boot aware activities.
Immediately on boot (before a user is unlocked), PackageManager only returns components that are direct boot aware. If we don't specify that direct boot unaware components be returned as well, then ASC will think all system apps are headless. Also switching the cache from an ArrayMap to an ArraySet because there's no need for the boolean value. Bug: 155761007 Test: manually verify that apps with launcher activities aren't in the headless app list Test: atest CtsUsageStatsTestCases:UsageStatsTest Test: atest FrameworksServicesTests:AppIdleHistoryTests Test: atest FrameworksServicesTests:AppStandbyControllerTests Change-Id: Ieec648226d0d5a32197647af286c2cd4c167dd8b
Diffstat (limited to 'apex')
-rw-r--r--apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java26
1 files changed, 14 insertions, 12 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
index 062108757349..5712f9358f82 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
@@ -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(",");
}
}