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

Commit 01662793 authored by Mohammad Samiul Islam's avatar Mohammad Samiul Islam Committed by android-build-merger
Browse files

Merge "Add support for returning installed apex modules in getInstalledModules" into qt-dev

am: 141e7b03

Change-Id: I3cf4cbecbd8e3a7e136978b36f62ad287d94f209
parents 4dd40277 141e7b03
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;