diff options
author | Adam Lesinski <adamlesinski@google.com> | 2014-09-24 19:02:52 -0700 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2014-09-24 19:02:52 -0700 |
commit | 978ab9d92934b79409638cf220de3002fea8d505 (patch) | |
tree | 9352e4099e7c627436ac9e3a8d7e9094e6987f69 /tools/aapt | |
parent | 7e1d525b47404a27fb1c780ea2070f7ca8344461 (diff) | |
download | frameworks_base-978ab9d92934b79409638cf220de3002fea8d505.zip frameworks_base-978ab9d92934b79409638cf220de3002fea8d505.tar.gz frameworks_base-978ab9d92934b79409638cf220de3002fea8d505.tar.bz2 |
AAPT: Fix issue with synthesized resource not actually showing up
AAPT keeps around a few pieces of state that are disjoint, so
simply adding to a collection won't add the resource to the final
flattened output. Instead, we create the resource from the top
and then copy over the values into the newly created resource.
Bug:17647890
Change-Id: I214263e84c18f9370c6e6a5aa53aa2d833fc842d
Diffstat (limited to 'tools/aapt')
-rw-r--r-- | tools/aapt/ResourceTable.cpp | 19 | ||||
-rw-r--r-- | tools/aapt/ResourceTable.h | 1 |
2 files changed, 19 insertions, 1 deletions
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp index b8c3454..77d3beb 100644 --- a/tools/aapt/ResourceTable.cpp +++ b/tools/aapt/ResourceTable.cpp @@ -3310,6 +3310,19 @@ ResourceTable::Entry::Entry(const Entry& entry) , mParentId(entry.mParentId) , mPos(entry.mPos) {} +ResourceTable::Entry& ResourceTable::Entry::operator=(const Entry& entry) { + mName = entry.mName; + mParent = entry.mParent; + mType = entry.mType; + mItem = entry.mItem; + mItemFormat = entry.mItemFormat; + mBag = entry.mBag; + mNameIndex = entry.mNameIndex; + mParentId = entry.mParentId; + mPos = entry.mPos; + return *this; +} + status_t ResourceTable::Entry::makeItABag(const SourcePos& sourcePos) { if (mType == TYPE_BAG) { @@ -4352,7 +4365,11 @@ status_t ResourceTable::modifyForCompat(const Bundle* bundle) { String8(entriesToAdd[i].value->getName()).string(), entriesToAdd[i].key.toString().string()); - c->addEntry(entriesToAdd[i].key, entriesToAdd[i].value); + sp<Entry> newEntry = t->getEntry(c->getName(), + entriesToAdd[i].value->getPos(), + &entriesToAdd[i].key); + + *newEntry = *entriesToAdd[i].value; } } } diff --git a/tools/aapt/ResourceTable.h b/tools/aapt/ResourceTable.h index c548a85..eac5dd3 100644 --- a/tools/aapt/ResourceTable.h +++ b/tools/aapt/ResourceTable.h @@ -316,6 +316,7 @@ public: { } Entry(const Entry& entry); + Entry& operator=(const Entry& entry); virtual ~Entry() { } |