Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01cdd77f authored by Jeffrey Huang's avatar Jeffrey Huang Committed by Android (Google) Code Review
Browse files

Merge "Fix apex package retrieval on boot"

parents f8d12f17 bca0140d
Loading
Loading
Loading
Loading
+38 −19
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -194,16 +195,13 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
                int numRecords = 0;
                // Add in all the apps for every user/profile.
                for (UserHandle userHandle : users) {
                    List<PackageInfo> pi =
                            pm.getInstalledPackagesAsUser(PackageManager.MATCH_UNINSTALLED_PACKAGES
                                            | PackageManager.MATCH_ANY_USER
                                            | PackageManager.MATCH_APEX,
                                    userHandle.getIdentifier());
                    for (int j = 0; j < pi.size(); j++) {
                        if (pi.get(j).applicationInfo != null) {
                    List<PackageInfo> packagesPlusApex = getAllPackagesWithApex(pm, userHandle);
                    for (int j = 0; j < packagesPlusApex.size(); j++) {
                        if (packagesPlusApex.get(j).applicationInfo != null) {
                            String installer;
                            try {
                                installer = pm.getInstallerPackageName(pi.get(j).packageName);
                                installer = pm.getInstallerPackageName(
                                        packagesPlusApex.get(j).packageName);
                            } catch (IllegalArgumentException e) {
                                installer = "";
                            }
@@ -213,17 +211,18 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
                                            | APPLICATION_INFO_FIELD_ID);
                            output.write(ProtoOutputStream.FIELD_TYPE_INT32
                                            | ProtoOutputStream.FIELD_COUNT_SINGLE | UID_FIELD_ID,
                                            pi.get(j).applicationInfo.uid);
                                    packagesPlusApex.get(j).applicationInfo.uid);
                            output.write(ProtoOutputStream.FIELD_TYPE_INT64
                                            | ProtoOutputStream.FIELD_COUNT_SINGLE
                                            | VERSION_FIELD_ID, pi.get(j).getLongVersionCode());
                                            | VERSION_FIELD_ID,
                                    packagesPlusApex.get(j).getLongVersionCode());
                            output.write(ProtoOutputStream.FIELD_TYPE_STRING
                                            | ProtoOutputStream.FIELD_COUNT_SINGLE
                                            | VERSION_STRING_FIELD_ID,
                                            pi.get(j).versionName);
                                    packagesPlusApex.get(j).versionName);
                            output.write(ProtoOutputStream.FIELD_TYPE_STRING
                                    | ProtoOutputStream.FIELD_COUNT_SINGLE
                                            | PACKAGE_NAME_FIELD_ID, pi.get(j).packageName);
                                    | PACKAGE_NAME_FIELD_ID, packagesPlusApex.get(j).packageName);
                            output.write(ProtoOutputStream.FIELD_TYPE_STRING
                                            | ProtoOutputStream.FIELD_COUNT_SINGLE
                                            | INSTALLER_FIELD_ID,
@@ -245,6 +244,26 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
        });
    }

    private static List<PackageInfo> getAllPackagesWithApex(PackageManager pm,
            UserHandle userHandle) {
        // We want all the uninstalled packages because uninstalled package uids can still be logged
        // to statsd.
        List<PackageInfo> allPackages = new ArrayList<>(
                pm.getInstalledPackagesAsUser(PackageManager.MATCH_UNINSTALLED_PACKAGES
                                | PackageManager.MATCH_ANY_USER,
                        userHandle.getIdentifier()));
        // We make a second query to package manager for the apex modules because package manager
        // returns both installed and uninstalled apexes with
        // PackageManager.MATCH_UNINSTALLED_PACKAGES flag. We only want active apexes because
        // inactive apexes can conflict with active ones.
        for (PackageInfo packageInfo : pm.getInstalledPackages(PackageManager.MATCH_APEX)) {
            if (packageInfo.isApex) {
                allPackages.add(packageInfo);
            }
        }
        return allPackages;
    }

    private static class WakelockThread extends Thread {
        private final PowerManager.WakeLock mWl;
        private final Runnable mRunnable;