Skip to content

Commit 2fda9f4

Browse files
Martin NordholtsJohan Redestig
authored andcommitted
Support changing style parent in overlays
Package overlays makes it possible for vendors to tweak the look of the platform and the applications without touching any platform or application code directly. This makes package overlays an important mechanism in the Android build system. There is currently a limitation that forbids changing the parent of a style. If vendors could change the parent of e.g. ‘CalendarTheme’ from Android’s vanilla ‘Theme’ to ‘VendorTheme’, then vendor specific adjustments could be done without changing any code directly. From looking at the code it can be seen that the parent value of a style is stored temporarily in ResourceTable::Entry::mParent while overlays are gone through in buildResources(), and processed (in ResourceTable::Entry::assignResourceIds()) at first after all overlays have been handled, so there aren’t any obvious reasons why changing parent in an overlay should be forbidden. Change-Id: I5969bb8aab90df437e1967fc504cc0da79107d13
1 parent c708e38 commit 2fda9f4

File tree

1 file changed

+0
-14
lines changed

1 file changed

+0
-14
lines changed

tools/aapt/ResourceTable.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1629,13 +1629,6 @@ status_t ResourceTable::startBag(const SourcePos& sourcePos,
16291629

16301630
// If a parent is explicitly specified, set it.
16311631
if (bagParent.size() > 0) {
1632-
String16 curPar = e->getParent();
1633-
if (curPar.size() > 0 && curPar != bagParent) {
1634-
sourcePos.error("Conflicting parents specified, was '%s', now '%s'\n",
1635-
String8(e->getParent()).string(),
1636-
String8(bagParent).string());
1637-
return UNKNOWN_ERROR;
1638-
}
16391632
e->setParent(bagParent);
16401633
}
16411634

@@ -1683,13 +1676,6 @@ status_t ResourceTable::addBag(const SourcePos& sourcePos,
16831676

16841677
// If a parent is explicitly specified, set it.
16851678
if (bagParent.size() > 0) {
1686-
String16 curPar = e->getParent();
1687-
if (curPar.size() > 0 && curPar != bagParent) {
1688-
sourcePos.error("Conflicting parents specified, was '%s', now '%s'\n",
1689-
String8(e->getParent()).string(),
1690-
String8(bagParent).string());
1691-
return UNKNOWN_ERROR;
1692-
}
16931679
e->setParent(bagParent);
16941680
}
16951681

0 commit comments

Comments
 (0)