diff options
author | Adam Lesinski <adamlesinski@google.com> | 2014-11-10 19:54:31 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2014-11-10 19:54:31 +0000 |
commit | fa31eb2cd1705cdb77f8d8dd9b5761bc773cbb9d (patch) | |
tree | 717988389ef966effe6d0ef1c555a30bec13d96e /tools/split-select/RuleGenerator.cpp | |
parent | 551f0778c39b030ebf1fd51c882c152b3e7ac320 (diff) | |
parent | a674a1ee79e34749127524434fd7439e7fd5ba09 (diff) |
Merge "split-select: Fix rules generated for anydpi density" into lmp-mr1-dev
automerge: a674a1e
* commit 'a674a1ee79e34749127524434fd7439e7fd5ba09':
split-select: Fix rules generated for anydpi density
Diffstat (limited to 'tools/split-select/RuleGenerator.cpp')
-rw-r--r-- | tools/split-select/RuleGenerator.cpp | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/tools/split-select/RuleGenerator.cpp b/tools/split-select/RuleGenerator.cpp index b8f3bcbb422d..72bb0c7def23 100644 --- a/tools/split-select/RuleGenerator.cpp +++ b/tools/split-select/RuleGenerator.cpp @@ -15,6 +15,7 @@ */ #include "RuleGenerator.h" +#include "aapt/SdkConstants.h" #include <algorithm> #include <cmath> @@ -32,18 +33,21 @@ static inline int findMid(int l, int h) { } sp<Rule> RuleGenerator::generateDensity(const Vector<int>& allDensities, size_t index) { - sp<Rule> densityRule = new Rule(); - densityRule->op = Rule::AND_SUBRULES; - - const bool anyDensity = allDensities[index] == ResTable_config::DENSITY_ANY; - sp<Rule> any = new Rule(); - any->op = Rule::EQUALS; - any->key = Rule::SCREEN_DENSITY; - any->longArgs.add((int)ResTable_config::DENSITY_ANY); - any->negate = !anyDensity; - densityRule->subrules.add(any); - - if (!anyDensity) { + if (allDensities[index] != ResTable_config::DENSITY_ANY) { + sp<Rule> densityRule = new Rule(); + densityRule->op = Rule::AND_SUBRULES; + + const bool hasAnyDensity = std::find(allDensities.begin(), + allDensities.end(), ResTable_config::DENSITY_ANY) != allDensities.end(); + + if (hasAnyDensity) { + sp<Rule> version = new Rule(); + version->op = Rule::LESS_THAN; + version->key = Rule::SDK_VERSION; + version->longArgs.add((long) SDK_LOLLIPOP); + densityRule->subrules.add(version); + } + if (index > 0) { sp<Rule> gt = new Rule(); gt->op = Rule::GREATER_THAN; @@ -59,8 +63,14 @@ sp<Rule> RuleGenerator::generateDensity(const Vector<int>& allDensities, size_t lt->longArgs.add(findMid(allDensities[index], allDensities[index + 1])); densityRule->subrules.add(lt); } + return densityRule; + } else { + // SDK_VERSION is handled elsewhere, so we always pick DENSITY_ANY if it's + // available. + sp<Rule> always = new Rule(); + always->op = Rule::ALWAYS_TRUE; + return always; } - return densityRule; } sp<Rule> RuleGenerator::generateAbi(const Vector<abi::Variant>& splitAbis, size_t index) { |