Use dot instead of colon as separator of custom part.

This is done becase ':' is already used as a separator between package
and type in a full resource name. So if we use ':' it will be consfusing
for custom resource types: com.my.package:layout:2/myLayout ->
com.my.package:layout.2/myLayout.

DD: go/custom-resource-types-in-aapt2

Bug: b/215108200
Test: Resource_test
Change-Id: Ieed256e4376abe0a3788d8198110bef189b55740
This commit is contained in:
Iurii Makhno
2022-02-22 14:16:31 +00:00
parent f0c5ff46ed
commit 9d4a4d6021
2 changed files with 8 additions and 8 deletions

View File

@@ -139,10 +139,10 @@ ResourceNamedTypeRef ResourceNamedTypeWithDefaultName(ResourceType t) {
}
std::optional<ResourceNamedTypeRef> ParseResourceNamedType(const android::StringPiece& s) {
auto colon = std::find(s.begin(), s.end(), ':');
auto dot = std::find(s.begin(), s.end(), '.');
const ResourceType* parsedType;
if (colon != s.end() && colon != std::prev(s.end())) {
parsedType = ParseResourceType(s.substr(s.begin(), colon));
if (dot != s.end() && dot != std::prev(s.end())) {
parsedType = ParseResourceType(s.substr(s.begin(), dot));
} else {
parsedType = ParseResourceType(s);
}

View File

@@ -135,13 +135,13 @@ TEST(ResourceTypeTest, ParseResourceNamedType) {
type = ParseResourceNamedType("layout");
EXPECT_THAT(type, Optional(Eq(ResourceNamedType("layout", ResourceType::kLayout))));
type = ParseResourceNamedType("layout:2");
EXPECT_THAT(type, Optional(Eq(ResourceNamedType("layout:2", ResourceType::kLayout))));
type = ParseResourceNamedType("layout.2");
EXPECT_THAT(type, Optional(Eq(ResourceNamedType("layout.2", ResourceType::kLayout))));
type = ParseResourceNamedType("layout:another");
EXPECT_THAT(type, Optional(Eq(ResourceNamedType("layout:another", ResourceType::kLayout))));
type = ParseResourceNamedType("layout.another");
EXPECT_THAT(type, Optional(Eq(ResourceNamedType("layout.another", ResourceType::kLayout))));
type = ParseResourceNamedType("layout:");
type = ParseResourceNamedType("layout.");
EXPECT_THAT(type, Eq(std::nullopt));
type = ParseResourceNamedType("layout2");