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

Commit 94a53223 authored by Jeremy Meyer's avatar Jeremy Meyer
Browse files

Update how flag read only status is passed to aapt2

Now in addition to name:ro we also support name:READ_ONLY and
name:READ_WRITE

Test: Automatic
Bug: atest 344979955
Flag: EXEMPT Aconfig not supported on host tools
Change-Id: I0b581ac250f36b209d5151d0caa0a5c3c2d311cc
parent 7832229f
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -137,22 +137,25 @@ bool ParseFeatureFlagsParameter(StringPiece arg, android::IDiagnostics* diag,
      diag->Error(android::DiagMessage() << "No name given for one or more flags in: " << arg);
      return false;
    }

    std::vector<std::string> name_parts = util::Split(flag_name, ':');
    if (name_parts.size() > 2) {
      diag->Error(android::DiagMessage()
                  << "Invalid feature flag and optional value '" << flag_and_value
                  << "'. Must be in the format 'flag_name[:ro][=true|false]");
                  << "'. Must be in the format 'flag_name[:READ_ONLY|READ_WRITE][=true|false]");
      return false;
    }
    flag_name = name_parts[0];
    bool read_only = false;
    if (name_parts.size() == 2) {
      if (name_parts[1] == "ro") {
      if (name_parts[1] == "ro" || name_parts[1] == "READ_ONLY") {
        read_only = true;
      } else if (name_parts[1] == "READ_WRITE") {
        read_only = false;
      } else {
        diag->Error(android::DiagMessage()
                    << "Invalid feature flag and optional value '" << flag_and_value
                    << "'. Must be in the format 'flag_name[:ro][=true|false]");
                    << "'. Must be in the format 'flag_name[:READ_ONLY|READ_WRITE][=true|false]");
        return false;
      }
    }
+4 −4
Original line number Diff line number Diff line
@@ -383,7 +383,7 @@ TEST(UtilTest, ParseFeatureFlagsParameter_InvalidValue) {
TEST(UtilTest, ParseFeatureFlagsParameter_DuplicateFlag) {
  auto diagnostics = test::ContextBuilder().Build()->GetDiagnostics();
  FeatureFlagValues feature_flag_values;
  ASSERT_TRUE(ParseFeatureFlagsParameter("foo=true,bar=true,foo:ro=false", diagnostics,
  ASSERT_TRUE(ParseFeatureFlagsParameter("foo=true,bar:READ_WRITE=true,foo:ro=false", diagnostics,
                                         &feature_flag_values));
  EXPECT_THAT(
      feature_flag_values,
@@ -394,11 +394,11 @@ TEST(UtilTest, ParseFeatureFlagsParameter_DuplicateFlag) {
TEST(UtilTest, ParseFeatureFlagsParameter_Valid) {
  auto diagnostics = test::ContextBuilder().Build()->GetDiagnostics();
  FeatureFlagValues feature_flag_values;
  ASSERT_TRUE(ParseFeatureFlagsParameter("foo= true, bar:ro =FALSE,baz=, quux", diagnostics,
                                         &feature_flag_values));
  ASSERT_TRUE(ParseFeatureFlagsParameter("foo:READ_ONLY= true, bar:ro =FALSE,baz:READ_WRITE=, quux",
                                         diagnostics, &feature_flag_values));
  EXPECT_THAT(
      feature_flag_values,
      UnorderedElementsAre(Pair("foo", FeatureFlagProperties{false, std::optional<bool>(true)}),
      UnorderedElementsAre(Pair("foo", FeatureFlagProperties{true, std::optional<bool>(true)}),
                           Pair("bar", FeatureFlagProperties{true, std::optional<bool>(false)}),
                           Pair("baz", FeatureFlagProperties{false, std::nullopt}),
                           Pair("quux", FeatureFlagProperties{false, std::nullopt})));