Add namespace handling in attribute values

Previously, you could only reference namespace prefixes in attribute names:

<View xmlns:appcompat="http://schemas.android.com/apk/res/android.support.v7.appcompat"
      appcompat:name="hey"
      ...

Now you can also reference them in resource names within an attribute value:

      ...
      android:text="@appcompat:string/confirm"
      ...

Which will be treated as "@android.support.v7.appcompat:string/confirm".

Change-Id: Ib076e867a990c80cf877a704eb77cd1ef0b23b52
diff --git a/tools/aapt2/SourceXmlPullParser.h b/tools/aapt2/SourceXmlPullParser.h
index ba904ba..15936d6 100644
--- a/tools/aapt2/SourceXmlPullParser.h
+++ b/tools/aapt2/SourceXmlPullParser.h
@@ -17,6 +17,8 @@
 #ifndef AAPT_SOURCE_XML_PULL_PARSER_H
 #define AAPT_SOURCE_XML_PULL_PARSER_H
 
+#include "XmlPullParser.h"
+
 #include <istream>
 #include <libexpat/expat.h>
 #include <queue>
@@ -24,8 +26,6 @@
 #include <string>
 #include <vector>
 
-#include "XmlPullParser.h"
-
 namespace aapt {
 
 class SourceXmlPullParser : public XmlPullParser {
@@ -34,25 +34,28 @@
     SourceXmlPullParser(const SourceXmlPullParser& rhs) = delete;
     ~SourceXmlPullParser();
 
-    Event getEvent() const;
-    const std::string& getLastError() const;
-    Event next();
+    Event getEvent() const override;
+    const std::string& getLastError() const override ;
+    Event next() override ;
 
-    const std::u16string& getComment() const;
-    size_t getLineNumber() const;
-    size_t getDepth() const;
+    const std::u16string& getComment() const override;
+    size_t getLineNumber() const override;
+    size_t getDepth() const override;
 
-    const std::u16string& getText() const;
+    const std::u16string& getText() const override;
 
-    const std::u16string& getNamespacePrefix() const;
-    const std::u16string& getNamespaceUri() const;
+    const std::u16string& getNamespacePrefix() const override;
+    const std::u16string& getNamespaceUri() const override;
+    bool applyPackageAlias(std::u16string* package,
+                           const std::u16string& defaultPackage) const override;
 
-    const std::u16string& getElementNamespace() const;
-    const std::u16string& getElementName() const;
 
-    const_iterator beginAttributes() const;
-    const_iterator endAttributes() const;
-    size_t getAttributeCount() const;
+    const std::u16string& getElementNamespace() const override;
+    const std::u16string& getElementName() const override;
+
+    const_iterator beginAttributes() const override;
+    const_iterator endAttributes() const override;
+    size_t getAttributeCount() const override;
 
 private:
     static void XMLCALL startNamespaceHandler(void* userData, const char* prefix, const char* uri);
@@ -80,6 +83,7 @@
     const std::u16string mEmpty;
     size_t mDepth;
     std::stack<std::u16string> mNamespaceUris;
+    std::vector<std::pair<std::u16string, std::u16string>> mPackageAliases;
 };
 
 } // namespace aapt