summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/androidfw/ResourceUtils.cpp3
-rw-r--r--libs/androidfw/tests/ResourceUtils_test.cpp25
2 files changed, 28 insertions, 0 deletions
diff --git a/libs/androidfw/ResourceUtils.cpp b/libs/androidfw/ResourceUtils.cpp
index 1aa6cf6da28d..d63feb01ef83 100644
--- a/libs/androidfw/ResourceUtils.cpp
+++ b/libs/androidfw/ResourceUtils.cpp
@@ -26,6 +26,9 @@ bool ExtractResourceName(const StringPiece& str, StringPiece* out_package, Strin
bool has_type_separator = false;
const char* start = str.data();
const char* end = start + str.size();
+ if (start[0] == '@') {
+ start++;
+ }
const char* current = start;
while (current != end) {
if (out_type->size() == 0 && *current == '/') {
diff --git a/libs/androidfw/tests/ResourceUtils_test.cpp b/libs/androidfw/tests/ResourceUtils_test.cpp
index b64a884fb8fb..a02f166b5586 100644
--- a/libs/androidfw/tests/ResourceUtils_test.cpp
+++ b/libs/androidfw/tests/ResourceUtils_test.cpp
@@ -27,23 +27,48 @@ TEST(ResourceUtilsTest, ExtractResourceName) {
EXPECT_EQ("string", type);
EXPECT_EQ("foo", entry);
+ ASSERT_TRUE(ExtractResourceName("@android:string/foo", &package, &type, &entry));
+ EXPECT_EQ("android", package);
+ EXPECT_EQ("string", type);
+ EXPECT_EQ("foo", entry);
+
ASSERT_TRUE(ExtractResourceName("string/foo", &package, &type, &entry));
EXPECT_EQ("", package);
EXPECT_EQ("string", type);
EXPECT_EQ("foo", entry);
+ ASSERT_TRUE(ExtractResourceName("@string/foo", &package, &type, &entry));
+ EXPECT_EQ("", package);
+ EXPECT_EQ("string", type);
+ EXPECT_EQ("foo", entry);
+
ASSERT_TRUE(ExtractResourceName("foo", &package, &type, &entry));
EXPECT_EQ("", package);
EXPECT_EQ("", type);
EXPECT_EQ("foo", entry);
+ ASSERT_TRUE(ExtractResourceName("@foo", &package, &type, &entry));
+ EXPECT_EQ("", package);
+ EXPECT_EQ("", type);
+ EXPECT_EQ("foo", entry);
+
ASSERT_TRUE(ExtractResourceName("android:foo", &package, &type, &entry));
EXPECT_EQ("android", package);
EXPECT_EQ("", type);
EXPECT_EQ("foo", entry);
+// ASSERT_TRUE(ExtractResourceName("@android:foo", &package, &type, &entry));
+// EXPECT_EQ("android", package);
+// EXPECT_EQ("", type);
+// EXPECT_EQ("foo", entry);
+
EXPECT_FALSE(ExtractResourceName(":string/foo", &package, &type, &entry));
+
+ EXPECT_FALSE(ExtractResourceName("@:string/foo", &package, &type, &entry));
+
EXPECT_FALSE(ExtractResourceName("/foo", &package, &type, &entry));
+
+ EXPECT_FALSE(ExtractResourceName("@/foo", &package, &type, &entry));
}
} // namespace android