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
This commit is contained in:
Adam Lesinski
2014-09-24 19:02:52 -07:00
parent 7e1d525b47
commit 978ab9d929
2 changed files with 19 additions and 1 deletions

View File

@@ -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;
}
}
}

View File

@@ -316,6 +316,7 @@ public:
{ }
Entry(const Entry& entry);
Entry& operator=(const Entry& entry);
virtual ~Entry() { }