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

Commit 838d7255 authored by Ted Bauer's avatar Ted Bauer
Browse files

Treat undefined flags as false in resource flag processor

Relanding with fix for b/373685244. When a flag is undefined, treat it as disabled, but cache it as null.

Bug: 373685244
Test: atest PackageParserTest
Flag: EXEMPT bugfix
Change-Id: I978c837f13605d3958b176dec95565fdab1080a5
parent da5885d5
Loading
Loading
Loading
Loading
+12 −10
Original line number Original line Diff line number Diff line
@@ -25,7 +25,6 @@ import android.aconfig.nano.Aconfig.parsed_flags;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.content.res.Flags;
import android.content.res.Flags;
import android.content.res.XmlResourceParser;
import android.os.Environment;
import android.os.Environment;
import android.os.Process;
import android.os.Process;
import android.util.ArrayMap;
import android.util.ArrayMap;
@@ -247,21 +246,24 @@ public class AconfigFlags {
            negated = true;
            negated = true;
            featureFlag = featureFlag.substring(1).strip();
            featureFlag = featureFlag.substring(1).strip();
        }
        }
        final Boolean flagValue = getFlagValue(featureFlag);
        Boolean flagValue = getFlagValue(featureFlag);
        boolean shouldSkip = false;
        boolean isUndefined = false;
        if (flagValue == null) {
        if (flagValue == null) {
            Slog.w(LOG_TAG, "Skipping element " + parser.getName()
            isUndefined = true;
                    + " due to unknown feature flag " + featureFlag);
            flagValue = false;
            shouldSkip = true;
        }
        } else if (flagValue == negated) {
        boolean shouldSkip = false;
        if (flagValue == negated) {
            // Skip if flag==false && attr=="flag" OR flag==true && attr=="!flag" (negated)
            // Skip if flag==false && attr=="flag" OR flag==true && attr=="!flag" (negated)
            Slog.i(LOG_TAG, "Skipping element " + parser.getName()
                    + " behind feature flag " + featureFlag + " = " + flagValue);
            shouldSkip = true;
            shouldSkip = true;
        }
        }
        if (pkg != null && android.content.pm.Flags.includeFeatureFlagsInPackageCacher()) {
        if (pkg != null && android.content.pm.Flags.includeFeatureFlagsInPackageCacher()) {
            if (isUndefined) {
                pkg.addFeatureFlag(featureFlag, null);
            } else {
                pkg.addFeatureFlag(featureFlag, flagValue);
                pkg.addFeatureFlag(featureFlag, flagValue);
            }
            }
        }
        return shouldSkip;
        return shouldSkip;
    }
    }