From d7a94da476e9b783acf0673ed938cc3fc2cc6ba5 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Fri, 25 Jul 2014 14:38:54 -0700 Subject: [PATCH] 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 --- tests/UsesFeature2Test/AndroidManifest.xml | 1 + tools/aapt/Command.cpp | 56 ++++++++++++++++------ 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/tests/UsesFeature2Test/AndroidManifest.xml b/tests/UsesFeature2Test/AndroidManifest.xml index 724d1861bf119..6b6c4dab67f88 100644 --- a/tests/UsesFeature2Test/AndroidManifest.xml +++ b/tests/UsesFeature2Test/AndroidManifest.xml @@ -30,6 +30,7 @@ + diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp index ac1ae70b2309d..afeb5460b25ff 100644 --- a/tools/aapt/Command.cpp +++ b/tools/aapt/Command.cpp @@ -611,6 +611,8 @@ struct ImpliedFeature { * Represents a tag in the AndroidManifest.xml */ struct FeatureGroup { + FeatureGroup() : openGLESVersion(-1) {} + /** * Human readable label */ @@ -620,6 +622,11 @@ struct FeatureGroup { * Explicit features defined in the group */ KeyedVector features; + + /** + * OpenGL ES version required + */ + int openGLESVersion; }; static void addImpliedFeature(KeyedVector* impliedFeatures, @@ -637,6 +644,10 @@ static void printFeatureGroup(const FeatureGroup& grp, const KeyedVector* 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 @@ static void addParentFeatures(FeatureGroup* grp, const String8& name) { } 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 doDump(Bundle* bundle) 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 @@ int doDump(Bundle* bundle) } } } 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 @@ int doDump(Bundle* bundle) 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 ) // 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]); } }