summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2009-08-27 16:28:44 -0700
committerDianne Hackborn <hackbod@google.com>2009-08-27 16:28:44 -0700
commite5276a74746b5e8f09b05a50155e7aa0bbb4a747 (patch)
tree38f66bbad2a14adbee770b1d1c1caa842ecf4e28
parentd6ac7c73e17f0ce0cc3b1290760c4f67cafcdec5 (diff)
downloadframeworks_base-e5276a74746b5e8f09b05a50155e7aa0bbb4a747.zip
frameworks_base-e5276a74746b5e8f09b05a50155e7aa0bbb4a747.tar.gz
frameworks_base-e5276a74746b5e8f09b05a50155e7aa0bbb4a747.tar.bz2
Fix issue #2084148: Define the format for the auto focus preview for barcode scanning
Add new manifest/aapt support for specifying device features an application requires. The aapt badging now returns these (as well as uses-permission since I need to look for those anyway); if an app doesn't explicitly request the camera feature but does request the permission, then aapt will say that it has requested both the basic camera feature as well as the autofocus feature. Here's what you put in your manifest to say you need a camera but don't need autofocus: <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> Here's what will be seen from aapt: uses-permission:'android.permission.CAMERA' uses-feature:'android.hardware.camera' uses-feature-not-required:'android.hardware.camera.autofocus' Change-Id: I4dd19cee0486cc54771f5bf14fc9db0e892115d5
-rw-r--r--api/current.xml29
-rw-r--r--core/res/res/values/attrs_manifest.xml9
-rw-r--r--core/res/res/values/public.xml1
-rw-r--r--tools/aapt/Command.cpp44
4 files changed, 74 insertions, 9 deletions
diff --git a/api/current.xml b/api/current.xml
index b5617c2..e75f2b2 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -1663,7 +1663,7 @@
type="int"
transient="false"
volatile="false"
- value="16843406"
+ value="16843407"
static="true"
final="true"
deprecated="not deprecated"
@@ -2664,7 +2664,7 @@
type="int"
transient="false"
volatile="false"
- value="16843407"
+ value="16843408"
static="true"
final="true"
deprecated="not deprecated"
@@ -6422,6 +6422,17 @@
visibility="public"
>
</field>
+<field name="required"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="16843406"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="resizeable"
type="int"
transient="false"
@@ -7449,7 +7460,7 @@
type="int"
transient="false"
volatile="false"
- value="16843414"
+ value="16843415"
static="true"
final="true"
deprecated="not deprecated"
@@ -8362,7 +8373,7 @@
type="int"
transient="false"
volatile="false"
- value="16843408"
+ value="16843409"
static="true"
final="true"
deprecated="not deprecated"
@@ -8538,7 +8549,7 @@
type="int"
transient="false"
volatile="false"
- value="16843412"
+ value="16843413"
static="true"
final="true"
deprecated="not deprecated"
@@ -8549,7 +8560,7 @@
type="int"
transient="false"
volatile="false"
- value="16843413"
+ value="16843414"
static="true"
final="true"
deprecated="not deprecated"
@@ -8560,7 +8571,7 @@
type="int"
transient="false"
volatile="false"
- value="16843410"
+ value="16843411"
static="true"
final="true"
deprecated="not deprecated"
@@ -8571,7 +8582,7 @@
type="int"
transient="false"
volatile="false"
- value="16843411"
+ value="16843412"
static="true"
final="true"
deprecated="not deprecated"
@@ -8780,7 +8791,7 @@
type="int"
transient="false"
volatile="false"
- value="16843409"
+ value="16843410"
static="true"
final="true"
deprecated="not deprecated"
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 442357e..d1079d0 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -781,6 +781,15 @@
represent the minor number. For example for GL 1.2 referring to
0x00000102, the actual value should be set as 0x00010002. -->
<attr name="glEsVersion" format="integer"/>
+ <!-- The name of the feature that is being used. -->
+ <attr name="name" />
+ <!-- Specify whether this feature is required for the application.
+ The default is true, meaning the application requires the
+ feature, and does not want to be installed on devices that
+ don't support it. If you set this to false, then this will
+ not impose a restriction on where the application can be
+ installed. -->
+ <attr name="required" format="boolean" />
</declare-styleable>
<!-- The <code>uses-sdk</code> tag describes the SDK features that the
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 5f1c3c3..5aaf824 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1150,6 +1150,7 @@
=============================================================== -->
<eat-comment />
+ <public type="attr" name="required" id="0x0101028e" />
<public type="attr" name="accountType" />
<public type="attr" name="contentAuthority" />
<public type="attr" name="userVisible" />
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index d8215e7..f4afd7f 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -332,9 +332,11 @@ enum {
TARGET_SDK_VERSION_ATTR = 0x01010270,
TEST_ONLY_ATTR = 0x01010272,
DENSITY_ATTR = 0x0101026c,
+ GL_ES_VERSION_ATTR = 0x01010281,
SMALL_SCREEN_ATTR = 0x01010284,
NORMAL_SCREEN_ATTR = 0x01010285,
LARGE_SCREEN_ATTR = 0x01010286,
+ REQUIRED_ATTR = 0x0101028e,
};
const char *getComponentName(String8 &pkgName, String8 &componentName) {
@@ -520,6 +522,8 @@ int doDump(Bundle* bundle)
bool actWidgetReceivers = false;
bool actImeService = false;
bool actWallpaperService = false;
+ bool specCameraFeature = false;
+ bool hasCameraPermission = false;
int targetSdk = 0;
int smallScreen = 1;
int normalScreen = 1;
@@ -706,6 +710,37 @@ int doDump(Bundle* bundle)
NORMAL_SCREEN_ATTR, NULL, 1);
largeScreen = getIntegerAttribute(tree,
LARGE_SCREEN_ATTR, NULL, 1);
+ } else if (tag == "uses-feature") {
+ String8 name = getAttribute(tree, NAME_ATTR, &error);
+ if (error == "") {
+ int req = getIntegerAttribute(tree,
+ REQUIRED_ATTR, NULL, 1);
+ if (name == "android.hardware.camera") {
+ specCameraFeature = true;
+ }
+ printf("uses-feature%s:'%s'\n",
+ req ? "" : "-not-required", name.string());
+ } else {
+ int vers = getIntegerAttribute(tree,
+ GL_ES_VERSION_ATTR, &error);
+ if (error == "") {
+ printf("uses-gl-es:'0x%x'\n", vers);
+ }
+ }
+ } else if (tag == "uses-permission") {
+ String8 name = getAttribute(tree, NAME_ATTR, &error);
+ if (error == "") {
+ int opt = getIntegerAttribute(tree,
+ REQUIRED_ATTR, NULL, 1);
+ if (name == "android.permission.CAMERA") {
+ hasCameraPermission = true;
+ }
+ printf("uses-permission:'%s'\n", name.string());
+ } else {
+ fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
+ error.string());
+ goto bail;
+ }
}
} else if (depth == 3 && withinApplication) {
withinActivity = false;
@@ -803,6 +838,15 @@ int doDump(Bundle* bundle)
}
}
+ if (!specCameraFeature && hasCameraPermission) {
+ // For applications that have not explicitly stated their
+ // camera feature requirements, but have requested the camera
+ // permission, we are going to give them compatibility treatment
+ // of requiring the equivalent to original android devices.
+ printf("uses-feature:'android.hardware.camera'\n");
+ printf("uses-feature:'android.hardware.camera.autofocus'\n");
+ }
+
if (hasMainActivity) {
printf("main\n");
}