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

Commit 37d9e5fd authored by Android Build Merger (Role)'s avatar Android Build Merger (Role) Committed by Android (Google) Code Review
Browse files

Merge "Merge "Add support for returning installed apex modules in...

Merge "Merge "Add support for returning installed apex modules in getInstalledModules" into qt-dev am: 141e7b03 am: 5143b799 am: 8083728d"
parents e5f22b3a 8354a844
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -223,6 +223,7 @@ public abstract class PackageManager {

    /** @hide */
    @IntDef(flag = true, prefix = { "GET_", "MATCH_" }, value = {
            MATCH_ALL,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ModuleInfoFlags {}
+14 −10
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Slog;

import com.android.internal.R;
@@ -162,29 +161,34 @@ public class ModuleInfoProvider {
        }
    }

    List<ModuleInfo> getInstalledModules(int flags) {
    /**
     * By default, returns installed module info, including installed apex modules.
     *
     * @param flags Use {@link PackageManager#MATCH_ALL} flag to get all modules.
     */
    List<ModuleInfo> getInstalledModules(@PackageManager.ModuleInfoFlags int flags) {
        if (!mMetadataLoaded) {
            throw new IllegalStateException("Call to getInstalledModules before metadata loaded");
        }

        ArrayList<ModuleInfo> allModules = new ArrayList<>(mModuleInfo.values());
        if ((flags & PackageManager.MATCH_ALL) != 0) {
            return allModules;
            return new ArrayList<>(mModuleInfo.values());
        }

        ArraySet<String> allPackages;
        List<PackageInfo> allPackages;
        try {
            allPackages = new ArraySet<>(mPackageManager.getAllPackages());
            allPackages = mPackageManager.getInstalledPackages(
                    flags | PackageManager.MATCH_APEX, UserHandle.USER_SYSTEM).getList();
        } catch (RemoteException e) {
            Slog.w(TAG, "Unable to retrieve all package names", e);
            return Collections.emptyList();
        }

        ArrayList<ModuleInfo> installedModules = new ArrayList<>(allPackages.size());
        for (int i = allModules.size() - 1; i >= 0; --i) {
            ModuleInfo mi = allModules.get(i);
            if (allPackages.contains(mi.getPackageName())) {
                installedModules.add(mi);
        for (PackageInfo p : allPackages) {
            ModuleInfo m = mModuleInfo.get(p.packageName);
            if (m != null) {
                installedModules.add(m);
            }
        }
        return installedModules;