Have AEP GL feature depend on GLES 3.1 in badging
AAPT dump badging should output the uses-gl-es tag with
a version of 3.1 when android.hardware.opengles.aep is
declared as a feature.
Change-Id: I8affc6dad574c8303c6ba9810ad8e6e205ea9506
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index ac1ae70..afeb546 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -611,6 +611,8 @@
* Represents a <feature-group> tag in the AndroidManifest.xml
*/
struct FeatureGroup {
+ FeatureGroup() : openGLESVersion(-1) {}
+
/**
* Human readable label
*/
@@ -620,6 +622,11 @@
* Explicit features defined in the group
*/
KeyedVector<String8, bool> features;
+
+ /**
+ * OpenGL ES version required
+ */
+ int openGLESVersion;
};
static void addImpliedFeature(KeyedVector<String8, ImpliedFeature>* impliedFeatures,
@@ -637,6 +644,10 @@
const KeyedVector<String8, ImpliedFeature>* impliedFeatures = NULL) {
printf("feature-group: label='%s'\n", grp.label.string());
+ if (grp.openGLESVersion > 0) {
+ printf(" uses-gl-es: '0x%x'\n", grp.openGLESVersion);
+ }
+
const size_t numFeatures = grp.features.size();
for (size_t i = 0; i < numFeatures; i++) {
if (!grp.features[i]) {
@@ -688,6 +699,11 @@
} else if (name == "android.hardware.touchscreen.multitouch.distinct") {
grp->features.add(String8("android.hardware.touchscreen.multitouch"), true);
grp->features.add(String8("android.hardware.touchscreen"), true);
+ } else if (name == "android.hardware.opengles.aep") {
+ const int openGLESVersion31 = 0x00030001;
+ if (openGLESVersion31 > grp->openGLESVersion) {
+ grp->openGLESVersion = openGLESVersion31;
+ }
}
}
@@ -1316,14 +1332,16 @@
int vers = getIntegerAttribute(tree,
GL_ES_VERSION_ATTR, &error);
if (error == "") {
- printf("uses-gl-es:'0x%x'\n", vers);
+ if (vers > commonFeatures.openGLESVersion) {
+ commonFeatures.openGLESVersion = vers;
+ }
}
}
} else if (tag == "uses-permission") {
String8 name = getAttribute(tree, NAME_ATTR, &error);
if (name != "" && error == "") {
if (name == "android.permission.CAMERA") {
- addImpliedFeature(&impliedFeatures, "android.hardware.feature",
+ addImpliedFeature(&impliedFeatures, "android.hardware.camera",
String8::format("requested %s permission", name.string())
.string());
} else if (name == "android.permission.ACCESS_FINE_LOCATION") {
@@ -1639,18 +1657,23 @@
}
}
} else if (withinFeatureGroup && tag == "uses-feature") {
- String8 name = getResolvedAttribute(&res, tree, NAME_ATTR, &error);
- if (error != "") {
- fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
- error.string());
- goto bail;
- }
-
- int required = getIntegerAttribute(tree, REQUIRED_ATTR, NULL, 1);
FeatureGroup& top = featureGroups.editTop();
- top.features.add(name, required);
- if (required) {
- addParentFeatures(&top, name);
+
+ String8 name = getResolvedAttribute(&res, tree, NAME_ATTR, &error);
+ if (name != "" && error == "") {
+ int required = getIntegerAttribute(tree, REQUIRED_ATTR, NULL, 1);
+ top.features.add(name, required);
+ if (required) {
+ addParentFeatures(&top, name);
+ }
+
+ } else {
+ int vers = getIntegerAttribute(tree, GL_ES_VERSION_ATTR, &error);
+ if (error == "") {
+ if (vers > top.openGLESVersion) {
+ top.openGLESVersion = vers;
+ }
+ }
}
}
} else if (depth == 4) {
@@ -1839,12 +1862,17 @@
for (size_t i = 0; i < numFeatureGroups; i++) {
FeatureGroup& grp = featureGroups.editItemAt(i);
+ if (commonFeatures.openGLESVersion > grp.openGLESVersion) {
+ grp.openGLESVersion = commonFeatures.openGLESVersion;
+ }
+
// Merge the features defined in the top level (not inside a <feature-group>)
// with this feature group.
const size_t numCommonFeatures = commonFeatures.features.size();
for (size_t j = 0; j < numCommonFeatures; j++) {
if (grp.features.indexOfKey(commonFeatures.features.keyAt(j)) < 0) {
- grp.features.add(commonFeatures.features.keyAt(j), commonFeatures.features[j]);
+ grp.features.add(commonFeatures.features.keyAt(j),
+ commonFeatures.features[j]);
}
}