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

Commit f7258237 authored by Anna Trostanetski's avatar Anna Trostanetski Committed by Android (Google) Code Review
Browse files

Merge "Read compat config from APEX"

parents c5f436ec 8e3f9658
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.internal.compat.IOverrideValidator;
import com.android.internal.compat.OverrideAllowedState;
import com.android.server.compat.config.Change;
import com.android.server.compat.config.XmlParser;
import com.android.server.pm.ApexManager;

import org.xmlpull.v1.XmlPullParserException;

@@ -45,6 +46,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.xml.datatype.DatatypeConfigurationException;
@@ -369,12 +371,18 @@ final class CompatConfig {
                Environment.getRootDirectory(), "etc", "compatconfig"));
        config.initConfigFromLib(Environment.buildPath(
                Environment.getRootDirectory(), "system_ext", "etc", "compatconfig"));

        List<ApexManager.ActiveApexInfo> apexes = ApexManager.getInstance().getActiveApexInfos();
        for (ApexManager.ActiveApexInfo apex : apexes) {
            config.initConfigFromLib(Environment.buildPath(
                    apex.apexDirectory, "etc", "compatconfig"));
        }
        return config;
    }

    void initConfigFromLib(File libraryDir) {
        if (!libraryDir.exists() || !libraryDir.isDirectory()) {
            Slog.e(TAG, "No directory " + libraryDir + ", skipping");
            Slog.d(TAG, "No directory " + libraryDir + ", skipping");
            return;
        }
        for (File f : libraryDir.listFiles()) {
+8 −4
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ public abstract class ApexManager {
     * Returns an instance of either {@link ApexManagerImpl} or {@link ApexManagerFlattenedApex}
     * depending on whether this device supports APEX, i.e. {@link ApexProperties#updatable()}
     * evaluates to {@code true}.
     * @hide
     */
    public static ApexManager getInstance() {
        return sApexManagerSingleton.get();
@@ -102,8 +103,9 @@ public abstract class ApexManager {

    /**
     * Minimal information about APEX mount points and the original APEX package they refer to.
     * @hide
     */
    static class ActiveApexInfo {
    public static class ActiveApexInfo {
        @Nullable public final String apexModuleName;
        public final File apexDirectory;
        public final File preInstalledApexPath;
@@ -130,8 +132,10 @@ public abstract class ApexManager {

    /**
     * Returns {@link ActiveApexInfo} records relative to all active APEX packages.
     *
     * @hide
     */
    abstract List<ActiveApexInfo> getActiveApexInfos();
    public abstract List<ActiveApexInfo> getActiveApexInfos();

    abstract void systemReady(Context context);

@@ -362,7 +366,7 @@ public abstract class ApexManager {
        }

        @Override
        List<ActiveApexInfo> getActiveApexInfos() {
        public List<ActiveApexInfo> getActiveApexInfos() {
            synchronized (mLock) {
                if (mActiveApexInfosCache == null) {
                    try {
@@ -798,7 +802,7 @@ public abstract class ApexManager {
     */
    private static final class ApexManagerFlattenedApex extends ApexManager {
        @Override
        List<ActiveApexInfo> getActiveApexInfos() {
        public List<ActiveApexInfo> getActiveApexInfos() {
            // There is no apexd running in case of flattened apex
            // We look up the /apex directory and identify the active APEX modules from there.
            // As "preinstalled" path, we just report /system since in the case of flattened APEX