summaryrefslogtreecommitdiffstats
path: root/tools/aapt/XMLNode.cpp
diff options
context:
space:
mode:
authorinazaruk <ievgenii.nazaruk@gmail.com>2011-05-22 15:09:06 -0700
committerIevgenii Nazaruk <ievgenii.nazaruk@gmail.com>2011-05-28 03:42:43 -0700
commite348909c1966c3d192841cc131a32be6ed90da18 (patch)
tree905044d0bb996a38614f0557327625e322ad8012 /tools/aapt/XMLNode.cpp
parent4b41df613db19c5fe1d8c0d05ef314326fd3f95b (diff)
downloadframeworks_base-e348909c1966c3d192841cc131a32be6ed90da18.zip
frameworks_base-e348909c1966c3d192841cc131a32be6ed90da18.tar.gz
frameworks_base-e348909c1966c3d192841cc131a32be6ed90da18.tar.bz2
Fix for issue 9656 - custom xml attributes in Android Libraries
Added support for predefined namespace http://schemas.android.com/apk/res/auto that aapt tool recognizes and treats as namespace with package name taken from current application's AndroidManifest.xml, //manifest/package attribute. Signed-off-by: inazaruk <ievgenii.nazaruk@gmail.com> Change-Id: I4b24a7265511e416cc7e02b5bb8a08ef32b598eb
Diffstat (limited to 'tools/aapt/XMLNode.cpp')
-rw-r--r--tools/aapt/XMLNode.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/tools/aapt/XMLNode.cpp b/tools/aapt/XMLNode.cpp
index 19248bf..7d14fe4 100644
--- a/tools/aapt/XMLNode.cpp
+++ b/tools/aapt/XMLNode.cpp
@@ -21,6 +21,7 @@
const char* const RESOURCES_ROOT_NAMESPACE = "http://schemas.android.com/apk/res/";
const char* const RESOURCES_ANDROID_NAMESPACE = "http://schemas.android.com/apk/res/android";
+const char* const RESOURCES_AUTO_PACKAGE_NAMESPACE = "http://schemas.android.com/apk/res/auto";
const char* const RESOURCES_ROOT_PRV_NAMESPACE = "http://schemas.android.com/apk/prv/res/";
const char* const XLIFF_XMLNS = "urn:oasis:names:tc:xliff:document:1.2";
@@ -44,15 +45,20 @@ bool isWhitespace(const char16_t* str)
}
static const String16 RESOURCES_PREFIX(RESOURCES_ROOT_NAMESPACE);
+static const String16 RESOURCES_PREFIX_AUTO_PACKAGE(RESOURCES_AUTO_PACKAGE_NAMESPACE);
static const String16 RESOURCES_PRV_PREFIX(RESOURCES_ROOT_PRV_NAMESPACE);
-String16 getNamespaceResourcePackage(String16 namespaceUri, bool* outIsPublic)
+String16 getNamespaceResourcePackage(String16 appPackage, String16 namespaceUri, bool* outIsPublic)
{
//printf("%s starts with %s?\n", String8(namespaceUri).string(),
// String8(RESOURCES_PREFIX).string());
size_t prefixSize;
bool isPublic = true;
- if (namespaceUri.startsWith(RESOURCES_PREFIX)) {
+ if(namespaceUri.startsWith(RESOURCES_PREFIX_AUTO_PACKAGE)) {
+ NOISY(printf("Using default application package: %s -> %s\n", String8(namespaceUri).string(), String8(appPackage).string()));
+ isPublic = true;
+ return appPackage;
+ } else if (namespaceUri.startsWith(RESOURCES_PREFIX)) {
prefixSize = RESOURCES_PREFIX.size();
} else if (namespaceUri.startsWith(RESOURCES_PRV_PREFIX)) {
isPublic = false;
@@ -923,7 +929,7 @@ status_t XMLNode::assignResourceIds(const sp<AaptAssets>& assets,
const attribute_entry& e = mAttributes.itemAt(i);
if (e.ns.size() <= 0) continue;
bool nsIsPublic;
- String16 pkg(getNamespaceResourcePackage(e.ns, &nsIsPublic));
+ String16 pkg(getNamespaceResourcePackage(String16(assets->getPackage()), e.ns, &nsIsPublic));
NOISY(printf("Elem %s %s=\"%s\": namespace(%s) %s ===> %s\n",
String8(getElementName()).string(),
String8(e.name).string(),