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

Commit 19e9cae3 authored by Kweku Adams's avatar Kweku Adams Committed by Android (Google) Code Review
Browse files

Merge "Change the package cache to a SparseArrayMap."

parents cd80ee16 fccaf824
Loading
Loading
Loading
Loading
+20 −17
Original line number Diff line number Diff line
@@ -721,15 +721,17 @@ class Agent {

    @GuardedBy("mLock")
    void distributeBasicIncomeLocked(int batteryLevel) {
        final List<InstalledPackageInfo> pkgs = mIrs.getInstalledPackages();
        final SparseArrayMap<String, InstalledPackageInfo> pkgs = mIrs.getInstalledPackages();

        final long now = getCurrentTimeMillis();
        for (int i = 0; i < pkgs.size(); ++i) {
            final InstalledPackageInfo pkgInfo = pkgs.get(i);
        for (int uIdx = pkgs.numMaps() - 1; uIdx >= 0; --uIdx) {
            final int userId = pkgs.keyAt(uIdx);

            for (int pIdx = pkgs.numElementsForKeyAt(uIdx) - 1; pIdx >= 0; --pIdx) {
                final InstalledPackageInfo pkgInfo = pkgs.valueAt(uIdx, pIdx);
                if (!shouldGiveCredits(pkgInfo)) {
                    continue;
                }
            final int userId = UserHandle.getUserId(pkgInfo.uid);
                final String pkgName = pkgInfo.packageName;
                final Ledger ledger = mScribe.getLedgerLocked(userId, pkgName);
                final long minBalance = mIrs.getMinBalanceLocked(userId, pkgName);
@@ -743,6 +745,7 @@ class Agent {
                }
            }
        }
    }

    /** Give each app an initial balance. */
    @GuardedBy("mLock")
+20 −24
Original line number Diff line number Diff line
@@ -136,7 +136,7 @@ public class InternalResourceService extends SystemService {

    @NonNull
    @GuardedBy("mLock")
    private final List<InstalledPackageInfo> mPkgCache = new ArrayList<>();
    private final SparseArrayMap<String, InstalledPackageInfo> mPkgCache = new SparseArrayMap<>();

    /** Cached mapping of UIDs (for all users) to a list of packages in the UID. */
    @GuardedBy("mLock")
@@ -343,7 +343,7 @@ public class InternalResourceService extends SystemService {
    }

    @NonNull
    List<InstalledPackageInfo> getInstalledPackages() {
    SparseArrayMap<String, InstalledPackageInfo> getInstalledPackages() {
        synchronized (mLock) {
            return mPkgCache;
        }
@@ -354,11 +354,13 @@ public class InternalResourceService extends SystemService {
    List<InstalledPackageInfo> getInstalledPackages(final int userId) {
        final List<InstalledPackageInfo> userPkgs = new ArrayList<>();
        synchronized (mLock) {
            for (int i = 0; i < mPkgCache.size(); ++i) {
                final InstalledPackageInfo packageInfo = mPkgCache.get(i);
                if (UserHandle.getUserId(packageInfo.uid) == userId) {
                    userPkgs.add(packageInfo);
            final int uIdx = mPkgCache.indexOfKey(userId);
            if (uIdx < 0) {
                return userPkgs;
            }
            for (int p = mPkgCache.numElementsForKeyAt(uIdx) - 1; p >= 0; --p) {
                final InstalledPackageInfo packageInfo = mPkgCache.valueAt(uIdx, p);
                userPkgs.add(packageInfo);
            }
        }
        return userPkgs;
@@ -511,7 +513,7 @@ public class InternalResourceService extends SystemService {
            mPackageToUidCache.add(userId, pkgName, uid);
        }
        synchronized (mLock) {
            mPkgCache.add(new InstalledPackageInfo(packageInfo));
            mPkgCache.add(userId, pkgName, new InstalledPackageInfo(packageInfo));
            mUidToPackageCache.add(uid, pkgName);
            // TODO: only do this when the user first launches the app (app leaves stopped state)
            mAgent.grantBirthrightLocked(userId, pkgName);
@@ -532,14 +534,7 @@ public class InternalResourceService extends SystemService {
        synchronized (mLock) {
            mUidToPackageCache.remove(uid, pkgName);
            mVipOverrides.delete(userId, pkgName);
            for (int i = 0; i < mPkgCache.size(); ++i) {
                final InstalledPackageInfo pkgInfo = mPkgCache.get(i);
                if (UserHandle.getUserId(pkgInfo.uid) == userId
                        && pkgName.equals(pkgInfo.packageName)) {
                    mPkgCache.remove(i);
                    break;
                }
            }
            mPkgCache.delete(userId, pkgName);
            mAgent.onPackageRemovedLocked(userId, pkgName);
        }
    }
@@ -560,7 +555,8 @@ public class InternalResourceService extends SystemService {
            final List<PackageInfo> pkgs =
                    mPackageManager.getInstalledPackagesAsUser(PACKAGE_QUERY_FLAGS, userId);
            for (int i = pkgs.size() - 1; i >= 0; --i) {
                mPkgCache.add(new InstalledPackageInfo(pkgs.get(i)));
                final InstalledPackageInfo ipo = new InstalledPackageInfo(pkgs.get(i));
                mPkgCache.add(userId, ipo.packageName, ipo);
            }
            mAgent.grantBirthrightsLocked(userId);
        }
@@ -570,15 +566,15 @@ public class InternalResourceService extends SystemService {
        synchronized (mLock) {
            mVipOverrides.delete(userId);
            ArrayList<String> removedPkgs = new ArrayList<>();
            for (int i = mPkgCache.size() - 1; i >= 0; --i) {
                final InstalledPackageInfo pkgInfo = mPkgCache.get(i);
                if (UserHandle.getUserId(pkgInfo.uid) == userId) {
            final int uIdx = mPkgCache.indexOfKey(userId);
            if (uIdx >= 0) {
                for (int p = mPkgCache.numElementsForKeyAt(uIdx) - 1; p >= 0; --p) {
                    final InstalledPackageInfo pkgInfo = mPkgCache.valueAt(uIdx, p);
                    removedPkgs.add(pkgInfo.packageName);
                    mUidToPackageCache.remove(pkgInfo.uid);
                    mPkgCache.remove(i);
                    break;
                }
            }
            mPkgCache.delete(userId);
            mAgent.onUserRemovedLocked(userId, removedPkgs);
        }
    }
@@ -727,7 +723,8 @@ public class InternalResourceService extends SystemService {
            final List<PackageInfo> pkgs =
                    mPackageManager.getInstalledPackagesAsUser(PACKAGE_QUERY_FLAGS, userId);
            for (int i = pkgs.size() - 1; i >= 0; --i) {
                mPkgCache.add(new InstalledPackageInfo(pkgs.get(i)));
                final InstalledPackageInfo ipo = new InstalledPackageInfo(pkgs.get(i));
                mPkgCache.add(userId, ipo.packageName, ipo);
            }
        }
    }
@@ -1185,7 +1182,6 @@ public class InternalResourceService extends SystemService {
            // User setting should override DeviceConfig setting.
            // NOTE: There's currently no way for a user to reset the value (via UI), so if a user
            // manually toggles TARE via UI, we'll always defer to the user's current setting
            // TODO: add a "reset" value if the user toggle is an issue
            final boolean isTareEnabledDC = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TARE,
                    KEY_DC_ENABLE_TARE, Settings.Global.DEFAULT_ENABLE_TARE == 1);
            final boolean isTareEnabled = Settings.Global.getInt(mContentResolver,
+14 −10
Original line number Diff line number Diff line
@@ -216,11 +216,14 @@ public class Scribe {
        mRemainingConsumableCakes = 0;

        final SparseArray<ArraySet<String>> installedPackagesPerUser = new SparseArray<>();
        final List<InstalledPackageInfo> installedPackages = mIrs.getInstalledPackages();
        for (int i = 0; i < installedPackages.size(); ++i) {
            final InstalledPackageInfo packageInfo = installedPackages.get(i);
        final SparseArrayMap<String, InstalledPackageInfo> installedPackages =
                mIrs.getInstalledPackages();
        for (int uIdx = installedPackages.numMaps() - 1; uIdx >= 0; --uIdx) {
            final int userId = installedPackages.keyAt(uIdx);

            for (int pIdx = installedPackages.numElementsForKeyAt(uIdx) - 1; pIdx >= 0; --pIdx) {
                final InstalledPackageInfo packageInfo = installedPackages.valueAt(uIdx, pIdx);
                if (packageInfo.uid != InstalledPackageInfo.NO_UID) {
                final int userId = UserHandle.getUserId(packageInfo.uid);
                    ArraySet<String> pkgsForUser = installedPackagesPerUser.get(userId);
                    if (pkgsForUser == null) {
                        pkgsForUser = new ArraySet<>();
@@ -229,6 +232,7 @@ public class Scribe {
                    pkgsForUser.add(packageInfo.packageName);
                }
            }
        }

        final List<Analyst.Report> reports = new ArrayList<>();
        try (FileInputStream fis = mStateFile.openRead()) {
+3 −2
Original line number Diff line number Diff line
@@ -68,7 +68,8 @@ public class ScribeTest {
    private MockitoSession mMockingSession;
    private Scribe mScribeUnderTest;
    private File mTestFileDir;
    private final List<InstalledPackageInfo> mInstalledPackages = new ArrayList<>();
    private final SparseArrayMap<String, InstalledPackageInfo> mInstalledPackages =
            new SparseArrayMap<>();
    private final List<Analyst.Report> mReports = new ArrayList<>();

    @Mock
@@ -455,6 +456,6 @@ public class ScribeTest {
        ApplicationInfo applicationInfo = new ApplicationInfo();
        applicationInfo.uid = UserHandle.getUid(userId, Math.abs(pkgName.hashCode()));
        pkgInfo.applicationInfo = applicationInfo;
        mInstalledPackages.add(new InstalledPackageInfo(pkgInfo));
        mInstalledPackages.add(userId, pkgName, new InstalledPackageInfo(pkgInfo));
    }
}