Android 6.0.0 release 26
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEABECAAYFAlYxAgIACgkQ6K0/gZqxDnjCqACfbBT6VOiUFQvRn7w1SAa+4rjF 1IwAn2rBUqWo0dOKVwF1DDfFmGZXc8SB =1BqV -----END PGP SIGNATURE----- Merge tag 'android-6.0.0_r26' into HEAD Android 6.0.0 release 26 Conflicts: include/android/input.h Change-Id: Ifa374c6d3055be3b8a5d60967f8b4c0043da739b
This commit is contained in:
commit
1cdd1b5ad2
@ -264,9 +264,27 @@ static bool appendStr(const char* filename, const char* str)
|
|||||||
static void writeClockSyncMarker()
|
static void writeClockSyncMarker()
|
||||||
{
|
{
|
||||||
char buffer[128];
|
char buffer[128];
|
||||||
|
int len = 0;
|
||||||
|
int fd = open(k_traceMarkerPath, O_WRONLY);
|
||||||
|
if (fd == -1) {
|
||||||
|
fprintf(stderr, "error opening %s: %s (%d)\n", k_traceMarkerPath,
|
||||||
|
strerror(errno), errno);
|
||||||
|
return;
|
||||||
|
}
|
||||||
float now_in_seconds = systemTime(CLOCK_MONOTONIC) / 1000000000.0f;
|
float now_in_seconds = systemTime(CLOCK_MONOTONIC) / 1000000000.0f;
|
||||||
snprintf(buffer, 128, "trace_event_clock_sync: parent_ts=%f\n", now_in_seconds);
|
|
||||||
writeStr(k_traceMarkerPath, buffer);
|
len = snprintf(buffer, 128, "trace_event_clock_sync: parent_ts=%f\n", now_in_seconds);
|
||||||
|
if (write(fd, buffer, len) != len) {
|
||||||
|
fprintf(stderr, "error writing clock sync marker %s (%d)\n", strerror(errno), errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t realtime_in_ms = systemTime(CLOCK_REALTIME) / 1000000;
|
||||||
|
len = snprintf(buffer, 128, "trace_event_clock_sync: realtime_ts=%" PRId64 "\n", realtime_in_ms);
|
||||||
|
if (write(fd, buffer, len) != len) {
|
||||||
|
fprintf(stderr, "error writing clock sync marker %s (%d)\n", strerror(errno), errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable or disable a kernel option by writing a "1" or a "0" into a /sys
|
// Enable or disable a kernel option by writing a "1" or a "0" into a /sys
|
||||||
@ -646,7 +664,6 @@ static bool startTrace()
|
|||||||
// Disable tracing in the kernel.
|
// Disable tracing in the kernel.
|
||||||
static void stopTrace()
|
static void stopTrace()
|
||||||
{
|
{
|
||||||
writeClockSyncMarker();
|
|
||||||
setTracingEnabled(false);
|
setTracingEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -940,6 +957,7 @@ int main(int argc, char **argv)
|
|||||||
// another.
|
// another.
|
||||||
ok = clearTrace();
|
ok = clearTrace();
|
||||||
|
|
||||||
|
writeClockSyncMarker();
|
||||||
if (ok && !async) {
|
if (ok && !async) {
|
||||||
// Sleep to allow the trace to be captured.
|
// Sleep to allow the trace to be captured.
|
||||||
struct timespec timeLeft;
|
struct timespec timeLeft;
|
||||||
|
@ -434,8 +434,6 @@ static void dumpstate() {
|
|||||||
run_command("ARP CACHE", 10, "ip", "-4", "neigh", "show", NULL);
|
run_command("ARP CACHE", 10, "ip", "-4", "neigh", "show", NULL);
|
||||||
run_command("IPv6 ND CACHE", 10, "ip", "-6", "neigh", "show", NULL);
|
run_command("IPv6 ND CACHE", 10, "ip", "-6", "neigh", "show", NULL);
|
||||||
|
|
||||||
run_command("NETWORK DIAGNOSTICS", 10, "dumpsys", "connectivity", "--diag", NULL);
|
|
||||||
|
|
||||||
run_command("IPTABLES", 10, SU_PATH, "root", "iptables", "-L", "-nvx", NULL);
|
run_command("IPTABLES", 10, SU_PATH, "root", "iptables", "-L", "-nvx", NULL);
|
||||||
run_command("IP6TABLES", 10, SU_PATH, "root", "ip6tables", "-L", "-nvx", NULL);
|
run_command("IP6TABLES", 10, SU_PATH, "root", "ip6tables", "-L", "-nvx", NULL);
|
||||||
run_command("IPTABLE NAT", 10, SU_PATH, "root", "iptables", "-t", "nat", "-L", "-nvx", NULL);
|
run_command("IPTABLE NAT", 10, SU_PATH, "root", "iptables", "-t", "nat", "-L", "-nvx", NULL);
|
||||||
@ -447,25 +445,29 @@ static void dumpstate() {
|
|||||||
SU_PATH, "root", "wpa_cli", "IFNAME=wlan0", "list_networks", NULL);
|
SU_PATH, "root", "wpa_cli", "IFNAME=wlan0", "list_networks", NULL);
|
||||||
|
|
||||||
#ifdef FWDUMP_bcmdhd
|
#ifdef FWDUMP_bcmdhd
|
||||||
run_command("DUMP WIFI INTERNAL COUNTERS", 20,
|
run_command("ND OFFLOAD TABLE", 5,
|
||||||
|
SU_PATH, "root", "wlutil", "nd_hostip", NULL);
|
||||||
|
|
||||||
|
run_command("DUMP WIFI INTERNAL COUNTERS (1)", 20,
|
||||||
SU_PATH, "root", "wlutil", "counters", NULL);
|
SU_PATH, "root", "wlutil", "counters", NULL);
|
||||||
|
|
||||||
|
run_command("ND OFFLOAD STATUS (1)", 5,
|
||||||
|
SU_PATH, "root", "wlutil", "nd_status", NULL);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
dump_file("INTERRUPTS (1)", "/proc/interrupts");
|
dump_file("INTERRUPTS (1)", "/proc/interrupts");
|
||||||
|
|
||||||
property_get("dhcp.wlan0.gateway", network, "");
|
run_command("NETWORK DIAGNOSTICS", 10, "dumpsys", "connectivity", "--diag", NULL);
|
||||||
if (network[0])
|
|
||||||
run_command("PING GATEWAY", 10, "ping", "-c", "3", "-i", ".5", network, NULL);
|
|
||||||
property_get("dhcp.wlan0.dns1", network, "");
|
|
||||||
if (network[0])
|
|
||||||
run_command("PING DNS1", 10, "ping", "-c", "3", "-i", ".5", network, NULL);
|
|
||||||
property_get("dhcp.wlan0.dns2", network, "");
|
|
||||||
if (network[0])
|
|
||||||
run_command("PING DNS2", 10, "ping", "-c", "3", "-i", ".5", network, NULL);
|
|
||||||
#ifdef FWDUMP_bcmdhd
|
#ifdef FWDUMP_bcmdhd
|
||||||
run_command("DUMP WIFI STATUS", 20,
|
run_command("DUMP WIFI STATUS", 20,
|
||||||
SU_PATH, "root", "dhdutil", "-i", "wlan0", "dump", NULL);
|
SU_PATH, "root", "dhdutil", "-i", "wlan0", "dump", NULL);
|
||||||
run_command("DUMP WIFI INTERNAL COUNTERS", 20,
|
|
||||||
|
run_command("DUMP WIFI INTERNAL COUNTERS (2)", 20,
|
||||||
SU_PATH, "root", "wlutil", "counters", NULL);
|
SU_PATH, "root", "wlutil", "counters", NULL);
|
||||||
|
|
||||||
|
run_command("ND OFFLOAD STATUS (2)", 5,
|
||||||
|
SU_PATH, "root", "wlutil", "nd_status", NULL);
|
||||||
#endif
|
#endif
|
||||||
dump_file("INTERRUPTS (2)", "/proc/interrupts");
|
dump_file("INTERRUPTS (2)", "/proc/interrupts");
|
||||||
|
|
||||||
|
@ -746,7 +746,7 @@ static bool check_boolean_property(const char* property_name, bool default_value
|
|||||||
|
|
||||||
static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
||||||
const char* output_file_name, int swap_fd, const char *pkgname, const char *instruction_set,
|
const char* output_file_name, int swap_fd, const char *pkgname, const char *instruction_set,
|
||||||
bool vm_safe_mode, bool debuggable)
|
bool vm_safe_mode, bool debuggable, bool post_bootcomplete)
|
||||||
{
|
{
|
||||||
static const unsigned int MAX_INSTRUCTION_SET_LEN = 7;
|
static const unsigned int MAX_INSTRUCTION_SET_LEN = 7;
|
||||||
|
|
||||||
@ -770,8 +770,24 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
|
|||||||
dex2oat_compiler_filter_flag, NULL) > 0;
|
dex2oat_compiler_filter_flag, NULL) > 0;
|
||||||
|
|
||||||
char dex2oat_threads_buf[PROPERTY_VALUE_MAX];
|
char dex2oat_threads_buf[PROPERTY_VALUE_MAX];
|
||||||
bool have_dex2oat_threads_flag = property_get("dalvik.vm.dex2oat-threads", dex2oat_threads_buf,
|
bool have_dex2oat_threads_flag = false;
|
||||||
|
if (!post_bootcomplete) {
|
||||||
|
have_dex2oat_threads_flag = property_get("dalvik.vm.boot-dex2oat-threads",
|
||||||
|
dex2oat_threads_buf,
|
||||||
NULL) > 0;
|
NULL) > 0;
|
||||||
|
// If there's no boot property, fall back to the image property.
|
||||||
|
if (!have_dex2oat_threads_flag) {
|
||||||
|
have_dex2oat_threads_flag = property_get("dalvik.vm.image-dex2oat-threads",
|
||||||
|
dex2oat_threads_buf,
|
||||||
|
NULL) > 0;
|
||||||
|
}
|
||||||
|
// If there's neither, fall back to the default property.
|
||||||
|
}
|
||||||
|
if (!have_dex2oat_threads_flag) {
|
||||||
|
have_dex2oat_threads_flag = property_get("dalvik.vm.dex2oat-threads",
|
||||||
|
dex2oat_threads_buf,
|
||||||
|
NULL) > 0;
|
||||||
|
}
|
||||||
char dex2oat_threads_arg[PROPERTY_VALUE_MAX + 2];
|
char dex2oat_threads_arg[PROPERTY_VALUE_MAX + 2];
|
||||||
if (have_dex2oat_threads_flag) {
|
if (have_dex2oat_threads_flag) {
|
||||||
sprintf(dex2oat_threads_arg, "-j%s", dex2oat_threads_buf);
|
sprintf(dex2oat_threads_arg, "-j%s", dex2oat_threads_buf);
|
||||||
@ -1065,9 +1081,22 @@ static bool calculate_odex_file_path(char path[PKG_PATH_MAX],
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void SetDex2OatAndPatchOatScheduling(bool set_to_bg) {
|
||||||
|
if (set_to_bg) {
|
||||||
|
if (set_sched_policy(0, SP_BACKGROUND) < 0) {
|
||||||
|
ALOGE("set_sched_policy failed: %s\n", strerror(errno));
|
||||||
|
exit(70);
|
||||||
|
}
|
||||||
|
if (setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_BACKGROUND) < 0) {
|
||||||
|
ALOGE("setpriority failed: %s\n", strerror(errno));
|
||||||
|
exit(71);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int dexopt(const char *apk_path, uid_t uid, bool is_public,
|
int dexopt(const char *apk_path, uid_t uid, bool is_public,
|
||||||
const char *pkgname, const char *instruction_set, int dexopt_needed,
|
const char *pkgname, const char *instruction_set, int dexopt_needed,
|
||||||
bool vm_safe_mode, bool debuggable, const char* oat_dir)
|
bool vm_safe_mode, bool debuggable, const char* oat_dir, bool boot_complete)
|
||||||
{
|
{
|
||||||
struct utimbuf ut;
|
struct utimbuf ut;
|
||||||
struct stat input_stat;
|
struct stat input_stat;
|
||||||
@ -1198,14 +1227,7 @@ int dexopt(const char *apk_path, uid_t uid, bool is_public,
|
|||||||
ALOGE("capset failed: %s\n", strerror(errno));
|
ALOGE("capset failed: %s\n", strerror(errno));
|
||||||
exit(66);
|
exit(66);
|
||||||
}
|
}
|
||||||
if (set_sched_policy(0, SP_BACKGROUND) < 0) {
|
SetDex2OatAndPatchOatScheduling(boot_complete);
|
||||||
ALOGE("set_sched_policy failed: %s\n", strerror(errno));
|
|
||||||
exit(70);
|
|
||||||
}
|
|
||||||
if (setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_BACKGROUND) < 0) {
|
|
||||||
ALOGE("setpriority failed: %s\n", strerror(errno));
|
|
||||||
exit(71);
|
|
||||||
}
|
|
||||||
if (flock(out_fd, LOCK_EX | LOCK_NB) != 0) {
|
if (flock(out_fd, LOCK_EX | LOCK_NB) != 0) {
|
||||||
ALOGE("flock(%s) failed: %s\n", out_path, strerror(errno));
|
ALOGE("flock(%s) failed: %s\n", out_path, strerror(errno));
|
||||||
exit(67);
|
exit(67);
|
||||||
@ -1222,7 +1244,7 @@ int dexopt(const char *apk_path, uid_t uid, bool is_public,
|
|||||||
input_file_name++;
|
input_file_name++;
|
||||||
}
|
}
|
||||||
run_dex2oat(input_fd, out_fd, input_file_name, out_path, swap_fd, pkgname,
|
run_dex2oat(input_fd, out_fd, input_file_name, out_path, swap_fd, pkgname,
|
||||||
instruction_set, vm_safe_mode, debuggable);
|
instruction_set, vm_safe_mode, debuggable, boot_complete);
|
||||||
} else {
|
} else {
|
||||||
ALOGE("Invalid dexopt needed: %d\n", dexopt_needed);
|
ALOGE("Invalid dexopt needed: %d\n", dexopt_needed);
|
||||||
exit(73);
|
exit(73);
|
||||||
|
@ -48,9 +48,9 @@ static int do_install(char **arg, char reply[REPLY_MAX] __unused)
|
|||||||
static int do_dexopt(char **arg, char reply[REPLY_MAX] __unused)
|
static int do_dexopt(char **arg, char reply[REPLY_MAX] __unused)
|
||||||
{
|
{
|
||||||
/* apk_path, uid, is_public, pkgname, instruction_set,
|
/* apk_path, uid, is_public, pkgname, instruction_set,
|
||||||
* dexopt_needed, vm_safe_mode, debuggable, oat_dir */
|
* dexopt_needed, vm_safe_mode, debuggable, oat_dir, boot_complete */
|
||||||
return dexopt(arg[0], atoi(arg[1]), atoi(arg[2]), arg[3], arg[4], atoi(arg[5]),
|
return dexopt(arg[0], atoi(arg[1]), atoi(arg[2]), arg[3], arg[4], atoi(arg[5]),
|
||||||
atoi(arg[6]), atoi(arg[7]), arg[8]);
|
atoi(arg[6]), atoi(arg[7]), arg[8], atoi(arg[9]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_mark_boot_complete(char **arg, char reply[REPLY_MAX] __unused)
|
static int do_mark_boot_complete(char **arg, char reply[REPLY_MAX] __unused)
|
||||||
@ -204,7 +204,7 @@ struct cmdinfo {
|
|||||||
struct cmdinfo cmds[] = {
|
struct cmdinfo cmds[] = {
|
||||||
{ "ping", 0, do_ping },
|
{ "ping", 0, do_ping },
|
||||||
{ "install", 5, do_install },
|
{ "install", 5, do_install },
|
||||||
{ "dexopt", 9, do_dexopt },
|
{ "dexopt", 10, do_dexopt },
|
||||||
{ "markbootcomplete", 1, do_mark_boot_complete },
|
{ "markbootcomplete", 1, do_mark_boot_complete },
|
||||||
{ "movedex", 3, do_move_dex },
|
{ "movedex", 3, do_move_dex },
|
||||||
{ "rmdex", 2, do_rm_dex },
|
{ "rmdex", 2, do_rm_dex },
|
||||||
|
@ -243,7 +243,7 @@ int get_size(const char *uuid, const char *pkgname, int userid,
|
|||||||
int free_cache(const char *uuid, int64_t free_size);
|
int free_cache(const char *uuid, int64_t free_size);
|
||||||
int dexopt(const char *apk_path, uid_t uid, bool is_public, const char *pkgName,
|
int dexopt(const char *apk_path, uid_t uid, bool is_public, const char *pkgName,
|
||||||
const char *instruction_set, int dexopt_needed, bool vm_safe_mode,
|
const char *instruction_set, int dexopt_needed, bool vm_safe_mode,
|
||||||
bool debuggable, const char* oat_dir);
|
bool debuggable, const char* oat_dir, bool boot_complete);
|
||||||
int mark_boot_complete(const char *instruction_set);
|
int mark_boot_complete(const char *instruction_set);
|
||||||
int movefiles();
|
int movefiles();
|
||||||
int linklib(const char* uuid, const char* pkgname, const char* asecLibDir, int userId);
|
int linklib(const char* uuid, const char* pkgname, const char* asecLibDir, int userId);
|
||||||
|
1902
docs/Doxyfile
Normal file
1902
docs/Doxyfile
Normal file
File diff suppressed because it is too large
Load Diff
13
docs/Makefile
Normal file
13
docs/Makefile
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
HEADERS := $(wildcard ../include/android/*.h)
|
||||||
|
|
||||||
|
all: html jd
|
||||||
|
|
||||||
|
html: $(HEADERS) Doxyfile
|
||||||
|
mkdir -p html
|
||||||
|
doxygen
|
||||||
|
|
||||||
|
jd: $(HEADERS) Doxyfile header.jd
|
||||||
|
mkdir -p jd
|
||||||
|
HTML_HEADER=header.jd HTML_FOOTER=footer.jd HTML_OUTPUT=jd doxygen
|
||||||
|
for file in jd/*.html; do mv "$${file}" "$${file/.html/.jd}"; done
|
||||||
|
rm -f jd/index.jd
|
0
docs/footer.jd
Normal file
0
docs/footer.jd
Normal file
3
docs/header.jd
Normal file
3
docs/header.jd
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
page.title=$title
|
||||||
|
page.customHeadTag=<link rel="stylesheet" type="text/css" href="doxygen-dac.css">
|
||||||
|
@jd:body
|
@ -14,6 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Asset
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file asset_manager.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_ASSET_MANAGER_H
|
#ifndef ANDROID_ASSET_MANAGER_H
|
||||||
#define ANDROID_ASSET_MANAGER_H
|
#define ANDROID_ASSET_MANAGER_H
|
||||||
@ -23,19 +31,49 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct AAssetManager;
|
struct AAssetManager;
|
||||||
|
/**
|
||||||
|
* {@link AAssetManager} provides access to an application's raw assets by
|
||||||
|
* creating {@link AAsset} objects.
|
||||||
|
*
|
||||||
|
* AAssetManager is a wrapper to the low-level native implementation
|
||||||
|
* of the java {@link AAssetManager}, a pointer can be obtained using
|
||||||
|
* AAssetManager_fromJava().
|
||||||
|
*
|
||||||
|
* The asset hierarchy may be examined like a filesystem, using
|
||||||
|
* {@link AAssetDir} objects to peruse a single directory.
|
||||||
|
*
|
||||||
|
* A native {@link AAssetManager} pointer may be shared across multiple threads.
|
||||||
|
*/
|
||||||
typedef struct AAssetManager AAssetManager;
|
typedef struct AAssetManager AAssetManager;
|
||||||
|
|
||||||
struct AAssetDir;
|
struct AAssetDir;
|
||||||
|
/**
|
||||||
|
* {@link AAssetDir} provides access to a chunk of the asset hierarchy as if
|
||||||
|
* it were a single directory. The contents are populated by the
|
||||||
|
* {@link AAssetManager}.
|
||||||
|
*
|
||||||
|
* The list of files will be sorted in ascending order by ASCII value.
|
||||||
|
*/
|
||||||
typedef struct AAssetDir AAssetDir;
|
typedef struct AAssetDir AAssetDir;
|
||||||
|
|
||||||
struct AAsset;
|
struct AAsset;
|
||||||
|
/**
|
||||||
|
* {@link AAsset} provides access to a read-only asset.
|
||||||
|
*
|
||||||
|
* {@link AAsset} objects are NOT thread-safe, and should not be shared across
|
||||||
|
* threads.
|
||||||
|
*/
|
||||||
typedef struct AAsset AAsset;
|
typedef struct AAsset AAsset;
|
||||||
|
|
||||||
/* Available modes for opening assets */
|
/** Available access modes for opening assets with {@link AAssetManager_open} */
|
||||||
enum {
|
enum {
|
||||||
|
/** No specific information about how data will be accessed. **/
|
||||||
AASSET_MODE_UNKNOWN = 0,
|
AASSET_MODE_UNKNOWN = 0,
|
||||||
|
/** Read chunks, and seek forward and backward. */
|
||||||
AASSET_MODE_RANDOM = 1,
|
AASSET_MODE_RANDOM = 1,
|
||||||
|
/** Read sequentially, with an occasional forward seek. */
|
||||||
AASSET_MODE_STREAMING = 2,
|
AASSET_MODE_STREAMING = 2,
|
||||||
|
/** Caller plans to ask for a read-only buffer with all data. */
|
||||||
AASSET_MODE_BUFFER = 3
|
AASSET_MODE_BUFFER = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -173,3 +211,5 @@ int AAsset_isAllocated(AAsset* asset);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_ASSET_MANAGER_H
|
#endif // ANDROID_ASSET_MANAGER_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Asset
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file asset_manager_jni.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_ASSET_MANAGER_JNI_H
|
#ifndef ANDROID_ASSET_MANAGER_JNI_H
|
||||||
#define ANDROID_ASSET_MANAGER_JNI_H
|
#define ANDROID_ASSET_MANAGER_JNI_H
|
||||||
@ -38,3 +46,5 @@ AAssetManager* AAssetManager_fromJava(JNIEnv* env, jobject assetManager);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_ASSET_MANAGER_JNI_H
|
#endif // ANDROID_ASSET_MANAGER_JNI_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Bitmap
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file bitmap.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_BITMAP_H
|
#ifndef ANDROID_BITMAP_H
|
||||||
#define ANDROID_BITMAP_H
|
#define ANDROID_BITMAP_H
|
||||||
|
|
||||||
@ -24,33 +33,52 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ANDROID_BITMAP_RESULT_SUCCESS 0
|
/** AndroidBitmap functions result code. */
|
||||||
#define ANDROID_BITMAP_RESULT_BAD_PARAMETER -1
|
enum {
|
||||||
#define ANDROID_BITMAP_RESULT_JNI_EXCEPTION -2
|
/** Operation was successful. */
|
||||||
#define ANDROID_BITMAP_RESULT_ALLOCATION_FAILED -3
|
ANDROID_BITMAP_RESULT_SUCCESS = 0,
|
||||||
|
/** Bad parameter. */
|
||||||
|
ANDROID_BITMAP_RESULT_BAD_PARAMETER = -1,
|
||||||
|
/** JNI exception occured. */
|
||||||
|
ANDROID_BITMAP_RESULT_JNI_EXCEPTION = -2,
|
||||||
|
/** Allocation failed. */
|
||||||
|
ANDROID_BITMAP_RESULT_ALLOCATION_FAILED = -3,
|
||||||
|
};
|
||||||
|
|
||||||
/* Backward compatibility: this macro used to be misspelled. */
|
/** Backward compatibility: this macro used to be misspelled. */
|
||||||
#define ANDROID_BITMAP_RESUT_SUCCESS ANDROID_BITMAP_RESULT_SUCCESS
|
#define ANDROID_BITMAP_RESUT_SUCCESS ANDROID_BITMAP_RESULT_SUCCESS
|
||||||
|
|
||||||
|
/** Bitmap pixel format. */
|
||||||
enum AndroidBitmapFormat {
|
enum AndroidBitmapFormat {
|
||||||
|
/** No format. */
|
||||||
ANDROID_BITMAP_FORMAT_NONE = 0,
|
ANDROID_BITMAP_FORMAT_NONE = 0,
|
||||||
|
/** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Alpha: 8 bits. **/
|
||||||
ANDROID_BITMAP_FORMAT_RGBA_8888 = 1,
|
ANDROID_BITMAP_FORMAT_RGBA_8888 = 1,
|
||||||
|
/** Red: 5 bits, Green: 6 bits, Blue: 5 bits. **/
|
||||||
ANDROID_BITMAP_FORMAT_RGB_565 = 4,
|
ANDROID_BITMAP_FORMAT_RGB_565 = 4,
|
||||||
|
/** Red: 4 bits, Green: 4 bits, Blue: 4 bits, Alpha: 4 bits. **/
|
||||||
ANDROID_BITMAP_FORMAT_RGBA_4444 = 7,
|
ANDROID_BITMAP_FORMAT_RGBA_4444 = 7,
|
||||||
|
/** Deprecated. */
|
||||||
ANDROID_BITMAP_FORMAT_A_8 = 8,
|
ANDROID_BITMAP_FORMAT_A_8 = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Bitmap info, see AndroidBitmap_getInfo(). */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
/** The bitmap width in pixels. */
|
||||||
uint32_t width;
|
uint32_t width;
|
||||||
|
/** The bitmap height in pixels. */
|
||||||
uint32_t height;
|
uint32_t height;
|
||||||
|
/** The number of byte per row. */
|
||||||
uint32_t stride;
|
uint32_t stride;
|
||||||
|
/** The bitmap pixel format. See {@link AndroidBitmapFormat} */
|
||||||
int32_t format;
|
int32_t format;
|
||||||
|
/** Unused. */
|
||||||
uint32_t flags; // 0 for now
|
uint32_t flags; // 0 for now
|
||||||
} AndroidBitmapInfo;
|
} AndroidBitmapInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given a java bitmap object, fill out the AndroidBitmap struct for it.
|
* Given a java bitmap object, fill out the AndroidBitmapInfo struct for it.
|
||||||
* If the call fails, the info parameter will be ignored
|
* If the call fails, the info parameter will be ignored.
|
||||||
*/
|
*/
|
||||||
int AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap,
|
int AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap,
|
||||||
AndroidBitmapInfo* info);
|
AndroidBitmapInfo* info);
|
||||||
@ -71,7 +99,7 @@ int AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap,
|
|||||||
int AndroidBitmap_lockPixels(JNIEnv* env, jobject jbitmap, void** addrPtr);
|
int AndroidBitmap_lockPixels(JNIEnv* env, jobject jbitmap, void** addrPtr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call this to balanace a successful call to AndroidBitmap_lockPixels
|
* Call this to balance a successful call to AndroidBitmap_lockPixels.
|
||||||
*/
|
*/
|
||||||
int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap);
|
int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap);
|
||||||
|
|
||||||
@ -80,3 +108,5 @@ int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Configuration
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file configuration.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_CONFIGURATION_H
|
#ifndef ANDROID_CONFIGURATION_H
|
||||||
#define ANDROID_CONFIGURATION_H
|
#define ANDROID_CONFIGURATION_H
|
||||||
|
|
||||||
@ -24,103 +33,400 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct AConfiguration;
|
struct AConfiguration;
|
||||||
|
/**
|
||||||
|
* {@link AConfiguration} is an opaque type used to get and set
|
||||||
|
* various subsystem configurations.
|
||||||
|
*
|
||||||
|
* A {@link AConfiguration} pointer can be obtained using:
|
||||||
|
* - AConfiguration_new()
|
||||||
|
* - AConfiguration_fromAssetManager()
|
||||||
|
*/
|
||||||
typedef struct AConfiguration AConfiguration;
|
typedef struct AConfiguration AConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define flags and constants for various subsystem configurations.
|
||||||
|
*/
|
||||||
enum {
|
enum {
|
||||||
|
/** Orientation: not specified. */
|
||||||
ACONFIGURATION_ORIENTATION_ANY = 0x0000,
|
ACONFIGURATION_ORIENTATION_ANY = 0x0000,
|
||||||
|
/**
|
||||||
|
* Orientation: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#OrientationQualifier">port</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_ORIENTATION_PORT = 0x0001,
|
ACONFIGURATION_ORIENTATION_PORT = 0x0001,
|
||||||
|
/**
|
||||||
|
* Orientation: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#OrientationQualifier">land</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_ORIENTATION_LAND = 0x0002,
|
ACONFIGURATION_ORIENTATION_LAND = 0x0002,
|
||||||
|
/** @deprecated Not currently supported or used. */
|
||||||
ACONFIGURATION_ORIENTATION_SQUARE = 0x0003,
|
ACONFIGURATION_ORIENTATION_SQUARE = 0x0003,
|
||||||
|
|
||||||
|
/** Touchscreen: not specified. */
|
||||||
ACONFIGURATION_TOUCHSCREEN_ANY = 0x0000,
|
ACONFIGURATION_TOUCHSCREEN_ANY = 0x0000,
|
||||||
|
/**
|
||||||
|
* Touchscreen: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#TouchscreenQualifier">notouch</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_TOUCHSCREEN_NOTOUCH = 0x0001,
|
ACONFIGURATION_TOUCHSCREEN_NOTOUCH = 0x0001,
|
||||||
|
/** @deprecated Not currently supported or used. */
|
||||||
ACONFIGURATION_TOUCHSCREEN_STYLUS = 0x0002,
|
ACONFIGURATION_TOUCHSCREEN_STYLUS = 0x0002,
|
||||||
|
/**
|
||||||
|
* Touchscreen: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#TouchscreenQualifier">finger</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_TOUCHSCREEN_FINGER = 0x0003,
|
ACONFIGURATION_TOUCHSCREEN_FINGER = 0x0003,
|
||||||
|
|
||||||
|
/** Density: default density. */
|
||||||
ACONFIGURATION_DENSITY_DEFAULT = 0,
|
ACONFIGURATION_DENSITY_DEFAULT = 0,
|
||||||
|
/**
|
||||||
|
* Density: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">ldpi</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_DENSITY_LOW = 120,
|
ACONFIGURATION_DENSITY_LOW = 120,
|
||||||
|
/**
|
||||||
|
* Density: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">mdpi</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_DENSITY_MEDIUM = 160,
|
ACONFIGURATION_DENSITY_MEDIUM = 160,
|
||||||
|
/**
|
||||||
|
* Density: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">tvdpi</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_DENSITY_TV = 213,
|
ACONFIGURATION_DENSITY_TV = 213,
|
||||||
|
/**
|
||||||
|
* Density: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">hdpi</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_DENSITY_HIGH = 240,
|
ACONFIGURATION_DENSITY_HIGH = 240,
|
||||||
|
/**
|
||||||
|
* Density: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">xhdpi</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_DENSITY_XHIGH = 320,
|
ACONFIGURATION_DENSITY_XHIGH = 320,
|
||||||
|
/**
|
||||||
|
* Density: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">xxhdpi</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_DENSITY_XXHIGH = 480,
|
ACONFIGURATION_DENSITY_XXHIGH = 480,
|
||||||
|
/**
|
||||||
|
* Density: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">xxxhdpi</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_DENSITY_XXXHIGH = 640,
|
ACONFIGURATION_DENSITY_XXXHIGH = 640,
|
||||||
|
/** Density: any density. */
|
||||||
ACONFIGURATION_DENSITY_ANY = 0xfffe,
|
ACONFIGURATION_DENSITY_ANY = 0xfffe,
|
||||||
|
/** Density: no density specified. */
|
||||||
ACONFIGURATION_DENSITY_NONE = 0xffff,
|
ACONFIGURATION_DENSITY_NONE = 0xffff,
|
||||||
|
|
||||||
|
/** Keyboard: not specified. */
|
||||||
ACONFIGURATION_KEYBOARD_ANY = 0x0000,
|
ACONFIGURATION_KEYBOARD_ANY = 0x0000,
|
||||||
|
/**
|
||||||
|
* Keyboard: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ImeQualifier">nokeys</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_KEYBOARD_NOKEYS = 0x0001,
|
ACONFIGURATION_KEYBOARD_NOKEYS = 0x0001,
|
||||||
|
/**
|
||||||
|
* Keyboard: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ImeQualifier">qwerty</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_KEYBOARD_QWERTY = 0x0002,
|
ACONFIGURATION_KEYBOARD_QWERTY = 0x0002,
|
||||||
|
/**
|
||||||
|
* Keyboard: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ImeQualifier">12key</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_KEYBOARD_12KEY = 0x0003,
|
ACONFIGURATION_KEYBOARD_12KEY = 0x0003,
|
||||||
|
|
||||||
|
/** Navigation: not specified. */
|
||||||
ACONFIGURATION_NAVIGATION_ANY = 0x0000,
|
ACONFIGURATION_NAVIGATION_ANY = 0x0000,
|
||||||
|
/**
|
||||||
|
* Navigation: value corresponding to the
|
||||||
|
* <a href="@@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">nonav</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_NAVIGATION_NONAV = 0x0001,
|
ACONFIGURATION_NAVIGATION_NONAV = 0x0001,
|
||||||
|
/**
|
||||||
|
* Navigation: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">dpad</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_NAVIGATION_DPAD = 0x0002,
|
ACONFIGURATION_NAVIGATION_DPAD = 0x0002,
|
||||||
|
/**
|
||||||
|
* Navigation: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">trackball</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_NAVIGATION_TRACKBALL = 0x0003,
|
ACONFIGURATION_NAVIGATION_TRACKBALL = 0x0003,
|
||||||
|
/**
|
||||||
|
* Navigation: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">wheel</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_NAVIGATION_WHEEL = 0x0004,
|
ACONFIGURATION_NAVIGATION_WHEEL = 0x0004,
|
||||||
|
|
||||||
|
/** Keyboard availability: not specified. */
|
||||||
ACONFIGURATION_KEYSHIDDEN_ANY = 0x0000,
|
ACONFIGURATION_KEYSHIDDEN_ANY = 0x0000,
|
||||||
|
/**
|
||||||
|
* Keyboard availability: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#KeyboardAvailQualifier">keysexposed</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_KEYSHIDDEN_NO = 0x0001,
|
ACONFIGURATION_KEYSHIDDEN_NO = 0x0001,
|
||||||
|
/**
|
||||||
|
* Keyboard availability: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#KeyboardAvailQualifier">keyshidden</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_KEYSHIDDEN_YES = 0x0002,
|
ACONFIGURATION_KEYSHIDDEN_YES = 0x0002,
|
||||||
|
/**
|
||||||
|
* Keyboard availability: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#KeyboardAvailQualifier">keyssoft</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_KEYSHIDDEN_SOFT = 0x0003,
|
ACONFIGURATION_KEYSHIDDEN_SOFT = 0x0003,
|
||||||
|
|
||||||
|
/** Navigation availability: not specified. */
|
||||||
ACONFIGURATION_NAVHIDDEN_ANY = 0x0000,
|
ACONFIGURATION_NAVHIDDEN_ANY = 0x0000,
|
||||||
|
/**
|
||||||
|
* Navigation availability: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavAvailQualifier">navexposed</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_NAVHIDDEN_NO = 0x0001,
|
ACONFIGURATION_NAVHIDDEN_NO = 0x0001,
|
||||||
|
/**
|
||||||
|
* Navigation availability: value corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavAvailQualifier">navhidden</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_NAVHIDDEN_YES = 0x0002,
|
ACONFIGURATION_NAVHIDDEN_YES = 0x0002,
|
||||||
|
|
||||||
|
/** Screen size: not specified. */
|
||||||
ACONFIGURATION_SCREENSIZE_ANY = 0x00,
|
ACONFIGURATION_SCREENSIZE_ANY = 0x00,
|
||||||
|
/**
|
||||||
|
* Screen size: value indicating the screen is at least
|
||||||
|
* approximately 320x426 dp units, corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">small</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_SCREENSIZE_SMALL = 0x01,
|
ACONFIGURATION_SCREENSIZE_SMALL = 0x01,
|
||||||
|
/**
|
||||||
|
* Screen size: value indicating the screen is at least
|
||||||
|
* approximately 320x470 dp units, corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">normal</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_SCREENSIZE_NORMAL = 0x02,
|
ACONFIGURATION_SCREENSIZE_NORMAL = 0x02,
|
||||||
|
/**
|
||||||
|
* Screen size: value indicating the screen is at least
|
||||||
|
* approximately 480x640 dp units, corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">large</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_SCREENSIZE_LARGE = 0x03,
|
ACONFIGURATION_SCREENSIZE_LARGE = 0x03,
|
||||||
|
/**
|
||||||
|
* Screen size: value indicating the screen is at least
|
||||||
|
* approximately 720x960 dp units, corresponding to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">xlarge</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_SCREENSIZE_XLARGE = 0x04,
|
ACONFIGURATION_SCREENSIZE_XLARGE = 0x04,
|
||||||
|
|
||||||
|
/** Screen layout: not specified. */
|
||||||
ACONFIGURATION_SCREENLONG_ANY = 0x00,
|
ACONFIGURATION_SCREENLONG_ANY = 0x00,
|
||||||
|
/**
|
||||||
|
* Screen layout: value that corresponds to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenAspectQualifier">notlong</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_SCREENLONG_NO = 0x1,
|
ACONFIGURATION_SCREENLONG_NO = 0x1,
|
||||||
|
/**
|
||||||
|
* Screen layout: value that corresponds to the
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenAspectQualifier">long</a>
|
||||||
|
* resource qualifier.
|
||||||
|
*/
|
||||||
ACONFIGURATION_SCREENLONG_YES = 0x2,
|
ACONFIGURATION_SCREENLONG_YES = 0x2,
|
||||||
|
|
||||||
ACONFIGURATION_SCREENROUND_ANY = 0x00,
|
ACONFIGURATION_SCREENROUND_ANY = 0x00,
|
||||||
ACONFIGURATION_SCREENROUND_NO = 0x1,
|
ACONFIGURATION_SCREENROUND_NO = 0x1,
|
||||||
ACONFIGURATION_SCREENROUND_YES = 0x2,
|
ACONFIGURATION_SCREENROUND_YES = 0x2,
|
||||||
|
|
||||||
|
/** UI mode: not specified. */
|
||||||
ACONFIGURATION_UI_MODE_TYPE_ANY = 0x00,
|
ACONFIGURATION_UI_MODE_TYPE_ANY = 0x00,
|
||||||
|
/**
|
||||||
|
* UI mode: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">no
|
||||||
|
* UI mode type</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_UI_MODE_TYPE_NORMAL = 0x01,
|
ACONFIGURATION_UI_MODE_TYPE_NORMAL = 0x01,
|
||||||
|
/**
|
||||||
|
* UI mode: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">desk</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_UI_MODE_TYPE_DESK = 0x02,
|
ACONFIGURATION_UI_MODE_TYPE_DESK = 0x02,
|
||||||
|
/**
|
||||||
|
* UI mode: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">car</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_UI_MODE_TYPE_CAR = 0x03,
|
ACONFIGURATION_UI_MODE_TYPE_CAR = 0x03,
|
||||||
|
/**
|
||||||
|
* UI mode: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">television</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_UI_MODE_TYPE_TELEVISION = 0x04,
|
ACONFIGURATION_UI_MODE_TYPE_TELEVISION = 0x04,
|
||||||
|
/**
|
||||||
|
* UI mode: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">appliance</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_UI_MODE_TYPE_APPLIANCE = 0x05,
|
ACONFIGURATION_UI_MODE_TYPE_APPLIANCE = 0x05,
|
||||||
|
/**
|
||||||
|
* UI mode: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">watch</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_UI_MODE_TYPE_WATCH = 0x06,
|
ACONFIGURATION_UI_MODE_TYPE_WATCH = 0x06,
|
||||||
|
|
||||||
|
/** UI night mode: not specified.*/
|
||||||
ACONFIGURATION_UI_MODE_NIGHT_ANY = 0x00,
|
ACONFIGURATION_UI_MODE_NIGHT_ANY = 0x00,
|
||||||
|
/**
|
||||||
|
* UI night mode: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#NightQualifier">notnight</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_UI_MODE_NIGHT_NO = 0x1,
|
ACONFIGURATION_UI_MODE_NIGHT_NO = 0x1,
|
||||||
|
/**
|
||||||
|
* UI night mode: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#NightQualifier">night</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_UI_MODE_NIGHT_YES = 0x2,
|
ACONFIGURATION_UI_MODE_NIGHT_YES = 0x2,
|
||||||
|
|
||||||
|
/** Screen width DPI: not specified. */
|
||||||
ACONFIGURATION_SCREEN_WIDTH_DP_ANY = 0x0000,
|
ACONFIGURATION_SCREEN_WIDTH_DP_ANY = 0x0000,
|
||||||
|
|
||||||
|
/** Screen height DPI: not specified. */
|
||||||
ACONFIGURATION_SCREEN_HEIGHT_DP_ANY = 0x0000,
|
ACONFIGURATION_SCREEN_HEIGHT_DP_ANY = 0x0000,
|
||||||
|
|
||||||
|
/** Smallest screen width DPI: not specified.*/
|
||||||
ACONFIGURATION_SMALLEST_SCREEN_WIDTH_DP_ANY = 0x0000,
|
ACONFIGURATION_SMALLEST_SCREEN_WIDTH_DP_ANY = 0x0000,
|
||||||
|
|
||||||
|
/** Layout direction: not specified. */
|
||||||
ACONFIGURATION_LAYOUTDIR_ANY = 0x00,
|
ACONFIGURATION_LAYOUTDIR_ANY = 0x00,
|
||||||
|
/**
|
||||||
|
* Layout direction: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#LayoutDirectionQualifier">ldltr</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_LAYOUTDIR_LTR = 0x01,
|
ACONFIGURATION_LAYOUTDIR_LTR = 0x01,
|
||||||
|
/**
|
||||||
|
* Layout direction: value that corresponds to
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#LayoutDirectionQualifier">ldrtl</a> resource qualifier specified.
|
||||||
|
*/
|
||||||
ACONFIGURATION_LAYOUTDIR_RTL = 0x02,
|
ACONFIGURATION_LAYOUTDIR_RTL = 0x02,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#MccQualifier">mcc</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_MCC = 0x0001,
|
ACONFIGURATION_MCC = 0x0001,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#MccQualifier">mnc</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_MNC = 0x0002,
|
ACONFIGURATION_MNC = 0x0002,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="{@docRoot}guide/topics/resources/providing-resources.html#LocaleQualifier">locale</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_LOCALE = 0x0004,
|
ACONFIGURATION_LOCALE = 0x0004,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#TouchscreenQualifier">touchscreen</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_TOUCHSCREEN = 0x0008,
|
ACONFIGURATION_TOUCHSCREEN = 0x0008,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ImeQualifier">keyboard</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_KEYBOARD = 0x0010,
|
ACONFIGURATION_KEYBOARD = 0x0010,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#KeyboardAvailQualifier">keyboardHidden</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_KEYBOARD_HIDDEN = 0x0020,
|
ACONFIGURATION_KEYBOARD_HIDDEN = 0x0020,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#NavigationQualifier">navigation</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_NAVIGATION = 0x0040,
|
ACONFIGURATION_NAVIGATION = 0x0040,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#OrientationQualifier">orientation</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_ORIENTATION = 0x0080,
|
ACONFIGURATION_ORIENTATION = 0x0080,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#DensityQualifier">density</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_DENSITY = 0x0100,
|
ACONFIGURATION_DENSITY = 0x0100,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#ScreenSizeQualifier">screen size</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_SCREEN_SIZE = 0x0200,
|
ACONFIGURATION_SCREEN_SIZE = 0x0200,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#VersionQualifier">platform version</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_VERSION = 0x0400,
|
ACONFIGURATION_VERSION = 0x0400,
|
||||||
|
/**
|
||||||
|
* Bit mask for screen layout configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_SCREEN_LAYOUT = 0x0800,
|
ACONFIGURATION_SCREEN_LAYOUT = 0x0800,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#UiModeQualifier">ui mode</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_UI_MODE = 0x1000,
|
ACONFIGURATION_UI_MODE = 0x1000,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#SmallestScreenWidthQualifier">smallest screen width</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_SMALLEST_SCREEN_SIZE = 0x2000,
|
ACONFIGURATION_SMALLEST_SCREEN_SIZE = 0x2000,
|
||||||
|
/**
|
||||||
|
* Bit mask for
|
||||||
|
* <a href="@dacRoot/guide/topics/resources/providing-resources.html#LayoutDirectionQualifier">layout direction</a>
|
||||||
|
* configuration.
|
||||||
|
*/
|
||||||
ACONFIGURATION_LAYOUTDIR = 0x4000,
|
ACONFIGURATION_LAYOUTDIR = 0x4000,
|
||||||
ACONFIGURATION_SCREEN_ROUND = 0x8000,
|
ACONFIGURATION_SCREEN_ROUND = 0x8000,
|
||||||
|
/**
|
||||||
|
* Constant used to to represent MNC (Mobile Network Code) zero.
|
||||||
|
* 0 cannot be used, since it is used to represent an undefined MNC.
|
||||||
|
*/
|
||||||
ACONFIGURATION_MNC_ZERO = 0xffff,
|
ACONFIGURATION_MNC_ZERO = 0xffff,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -137,7 +443,7 @@ void AConfiguration_delete(AConfiguration* config);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create and return a new AConfiguration based on the current configuration in
|
* Create and return a new AConfiguration based on the current configuration in
|
||||||
* use in the given AssetManager.
|
* use in the given {@link AAssetManager}.
|
||||||
*/
|
*/
|
||||||
void AConfiguration_fromAssetManager(AConfiguration* out, AAssetManager* am);
|
void AConfiguration_fromAssetManager(AConfiguration* out, AAssetManager* am);
|
||||||
|
|
||||||
@ -398,3 +704,5 @@ int32_t AConfiguration_isBetterThan(AConfiguration* base, AConfiguration* test,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_CONFIGURATION_H
|
#endif // ANDROID_CONFIGURATION_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -14,6 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Input
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file keycodes.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef _ANDROID_KEYCODES_H
|
#ifndef _ANDROID_KEYCODES_H
|
||||||
#define _ANDROID_KEYCODES_H
|
#define _ANDROID_KEYCODES_H
|
||||||
|
|
||||||
@ -39,278 +48,681 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Key codes.
|
* Key codes.
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
|
/** Unknown key code. */
|
||||||
AKEYCODE_UNKNOWN = 0,
|
AKEYCODE_UNKNOWN = 0,
|
||||||
|
/** Soft Left key.
|
||||||
|
* Usually situated below the display on phones and used as a multi-function
|
||||||
|
* feature key for selecting a software defined function shown on the bottom left
|
||||||
|
* of the display. */
|
||||||
AKEYCODE_SOFT_LEFT = 1,
|
AKEYCODE_SOFT_LEFT = 1,
|
||||||
|
/** Soft Right key.
|
||||||
|
* Usually situated below the display on phones and used as a multi-function
|
||||||
|
* feature key for selecting a software defined function shown on the bottom right
|
||||||
|
* of the display. */
|
||||||
AKEYCODE_SOFT_RIGHT = 2,
|
AKEYCODE_SOFT_RIGHT = 2,
|
||||||
|
/** Home key.
|
||||||
|
* This key is handled by the framework and is never delivered to applications. */
|
||||||
AKEYCODE_HOME = 3,
|
AKEYCODE_HOME = 3,
|
||||||
|
/** Back key. */
|
||||||
AKEYCODE_BACK = 4,
|
AKEYCODE_BACK = 4,
|
||||||
|
/** Call key. */
|
||||||
AKEYCODE_CALL = 5,
|
AKEYCODE_CALL = 5,
|
||||||
|
/** End Call key. */
|
||||||
AKEYCODE_ENDCALL = 6,
|
AKEYCODE_ENDCALL = 6,
|
||||||
|
/** '0' key. */
|
||||||
AKEYCODE_0 = 7,
|
AKEYCODE_0 = 7,
|
||||||
|
/** '1' key. */
|
||||||
AKEYCODE_1 = 8,
|
AKEYCODE_1 = 8,
|
||||||
|
/** '2' key. */
|
||||||
AKEYCODE_2 = 9,
|
AKEYCODE_2 = 9,
|
||||||
|
/** '3' key. */
|
||||||
AKEYCODE_3 = 10,
|
AKEYCODE_3 = 10,
|
||||||
|
/** '4' key. */
|
||||||
AKEYCODE_4 = 11,
|
AKEYCODE_4 = 11,
|
||||||
|
/** '5' key. */
|
||||||
AKEYCODE_5 = 12,
|
AKEYCODE_5 = 12,
|
||||||
|
/** '6' key. */
|
||||||
AKEYCODE_6 = 13,
|
AKEYCODE_6 = 13,
|
||||||
|
/** '7' key. */
|
||||||
AKEYCODE_7 = 14,
|
AKEYCODE_7 = 14,
|
||||||
|
/** '8' key. */
|
||||||
AKEYCODE_8 = 15,
|
AKEYCODE_8 = 15,
|
||||||
|
/** '9' key. */
|
||||||
AKEYCODE_9 = 16,
|
AKEYCODE_9 = 16,
|
||||||
|
/** '*' key. */
|
||||||
AKEYCODE_STAR = 17,
|
AKEYCODE_STAR = 17,
|
||||||
|
/** '#' key. */
|
||||||
AKEYCODE_POUND = 18,
|
AKEYCODE_POUND = 18,
|
||||||
|
/** Directional Pad Up key.
|
||||||
|
* May also be synthesized from trackball motions. */
|
||||||
AKEYCODE_DPAD_UP = 19,
|
AKEYCODE_DPAD_UP = 19,
|
||||||
|
/** Directional Pad Down key.
|
||||||
|
* May also be synthesized from trackball motions. */
|
||||||
AKEYCODE_DPAD_DOWN = 20,
|
AKEYCODE_DPAD_DOWN = 20,
|
||||||
|
/** Directional Pad Left key.
|
||||||
|
* May also be synthesized from trackball motions. */
|
||||||
AKEYCODE_DPAD_LEFT = 21,
|
AKEYCODE_DPAD_LEFT = 21,
|
||||||
|
/** Directional Pad Right key.
|
||||||
|
* May also be synthesized from trackball motions. */
|
||||||
AKEYCODE_DPAD_RIGHT = 22,
|
AKEYCODE_DPAD_RIGHT = 22,
|
||||||
|
/** Directional Pad Center key.
|
||||||
|
* May also be synthesized from trackball motions. */
|
||||||
AKEYCODE_DPAD_CENTER = 23,
|
AKEYCODE_DPAD_CENTER = 23,
|
||||||
|
/** Volume Up key.
|
||||||
|
* Adjusts the speaker volume up. */
|
||||||
AKEYCODE_VOLUME_UP = 24,
|
AKEYCODE_VOLUME_UP = 24,
|
||||||
|
/** Volume Down key.
|
||||||
|
* Adjusts the speaker volume down. */
|
||||||
AKEYCODE_VOLUME_DOWN = 25,
|
AKEYCODE_VOLUME_DOWN = 25,
|
||||||
|
/** Power key. */
|
||||||
AKEYCODE_POWER = 26,
|
AKEYCODE_POWER = 26,
|
||||||
|
/** Camera key.
|
||||||
|
* Used to launch a camera application or take pictures. */
|
||||||
AKEYCODE_CAMERA = 27,
|
AKEYCODE_CAMERA = 27,
|
||||||
|
/** Clear key. */
|
||||||
AKEYCODE_CLEAR = 28,
|
AKEYCODE_CLEAR = 28,
|
||||||
|
/** 'A' key. */
|
||||||
AKEYCODE_A = 29,
|
AKEYCODE_A = 29,
|
||||||
|
/** 'B' key. */
|
||||||
AKEYCODE_B = 30,
|
AKEYCODE_B = 30,
|
||||||
|
/** 'C' key. */
|
||||||
AKEYCODE_C = 31,
|
AKEYCODE_C = 31,
|
||||||
|
/** 'D' key. */
|
||||||
AKEYCODE_D = 32,
|
AKEYCODE_D = 32,
|
||||||
|
/** 'E' key. */
|
||||||
AKEYCODE_E = 33,
|
AKEYCODE_E = 33,
|
||||||
|
/** 'F' key. */
|
||||||
AKEYCODE_F = 34,
|
AKEYCODE_F = 34,
|
||||||
|
/** 'G' key. */
|
||||||
AKEYCODE_G = 35,
|
AKEYCODE_G = 35,
|
||||||
|
/** 'H' key. */
|
||||||
AKEYCODE_H = 36,
|
AKEYCODE_H = 36,
|
||||||
|
/** 'I' key. */
|
||||||
AKEYCODE_I = 37,
|
AKEYCODE_I = 37,
|
||||||
|
/** 'J' key. */
|
||||||
AKEYCODE_J = 38,
|
AKEYCODE_J = 38,
|
||||||
|
/** 'K' key. */
|
||||||
AKEYCODE_K = 39,
|
AKEYCODE_K = 39,
|
||||||
|
/** 'L' key. */
|
||||||
AKEYCODE_L = 40,
|
AKEYCODE_L = 40,
|
||||||
|
/** 'M' key. */
|
||||||
AKEYCODE_M = 41,
|
AKEYCODE_M = 41,
|
||||||
|
/** 'N' key. */
|
||||||
AKEYCODE_N = 42,
|
AKEYCODE_N = 42,
|
||||||
|
/** 'O' key. */
|
||||||
AKEYCODE_O = 43,
|
AKEYCODE_O = 43,
|
||||||
|
/** 'P' key. */
|
||||||
AKEYCODE_P = 44,
|
AKEYCODE_P = 44,
|
||||||
|
/** 'Q' key. */
|
||||||
AKEYCODE_Q = 45,
|
AKEYCODE_Q = 45,
|
||||||
|
/** 'R' key. */
|
||||||
AKEYCODE_R = 46,
|
AKEYCODE_R = 46,
|
||||||
|
/** 'S' key. */
|
||||||
AKEYCODE_S = 47,
|
AKEYCODE_S = 47,
|
||||||
|
/** 'T' key. */
|
||||||
AKEYCODE_T = 48,
|
AKEYCODE_T = 48,
|
||||||
|
/** 'U' key. */
|
||||||
AKEYCODE_U = 49,
|
AKEYCODE_U = 49,
|
||||||
|
/** 'V' key. */
|
||||||
AKEYCODE_V = 50,
|
AKEYCODE_V = 50,
|
||||||
|
/** 'W' key. */
|
||||||
AKEYCODE_W = 51,
|
AKEYCODE_W = 51,
|
||||||
|
/** 'X' key. */
|
||||||
AKEYCODE_X = 52,
|
AKEYCODE_X = 52,
|
||||||
|
/** 'Y' key. */
|
||||||
AKEYCODE_Y = 53,
|
AKEYCODE_Y = 53,
|
||||||
|
/** 'Z' key. */
|
||||||
AKEYCODE_Z = 54,
|
AKEYCODE_Z = 54,
|
||||||
|
/** ',' key. */
|
||||||
AKEYCODE_COMMA = 55,
|
AKEYCODE_COMMA = 55,
|
||||||
|
/** '.' key. */
|
||||||
AKEYCODE_PERIOD = 56,
|
AKEYCODE_PERIOD = 56,
|
||||||
|
/** Left Alt modifier key. */
|
||||||
AKEYCODE_ALT_LEFT = 57,
|
AKEYCODE_ALT_LEFT = 57,
|
||||||
|
/** Right Alt modifier key. */
|
||||||
AKEYCODE_ALT_RIGHT = 58,
|
AKEYCODE_ALT_RIGHT = 58,
|
||||||
|
/** Left Shift modifier key. */
|
||||||
AKEYCODE_SHIFT_LEFT = 59,
|
AKEYCODE_SHIFT_LEFT = 59,
|
||||||
|
/** Right Shift modifier key. */
|
||||||
AKEYCODE_SHIFT_RIGHT = 60,
|
AKEYCODE_SHIFT_RIGHT = 60,
|
||||||
|
/** Tab key. */
|
||||||
AKEYCODE_TAB = 61,
|
AKEYCODE_TAB = 61,
|
||||||
|
/** Space key. */
|
||||||
AKEYCODE_SPACE = 62,
|
AKEYCODE_SPACE = 62,
|
||||||
|
/** Symbol modifier key.
|
||||||
|
* Used to enter alternate symbols. */
|
||||||
AKEYCODE_SYM = 63,
|
AKEYCODE_SYM = 63,
|
||||||
|
/** Explorer special function key.
|
||||||
|
* Used to launch a browser application. */
|
||||||
AKEYCODE_EXPLORER = 64,
|
AKEYCODE_EXPLORER = 64,
|
||||||
|
/** Envelope special function key.
|
||||||
|
* Used to launch a mail application. */
|
||||||
AKEYCODE_ENVELOPE = 65,
|
AKEYCODE_ENVELOPE = 65,
|
||||||
|
/** Enter key. */
|
||||||
AKEYCODE_ENTER = 66,
|
AKEYCODE_ENTER = 66,
|
||||||
|
/** Backspace key.
|
||||||
|
* Deletes characters before the insertion point, unlike {@link AKEYCODE_FORWARD_DEL}. */
|
||||||
AKEYCODE_DEL = 67,
|
AKEYCODE_DEL = 67,
|
||||||
|
/** '`' (backtick) key. */
|
||||||
AKEYCODE_GRAVE = 68,
|
AKEYCODE_GRAVE = 68,
|
||||||
|
/** '-'. */
|
||||||
AKEYCODE_MINUS = 69,
|
AKEYCODE_MINUS = 69,
|
||||||
|
/** '=' key. */
|
||||||
AKEYCODE_EQUALS = 70,
|
AKEYCODE_EQUALS = 70,
|
||||||
|
/** '[' key. */
|
||||||
AKEYCODE_LEFT_BRACKET = 71,
|
AKEYCODE_LEFT_BRACKET = 71,
|
||||||
|
/** ']' key. */
|
||||||
AKEYCODE_RIGHT_BRACKET = 72,
|
AKEYCODE_RIGHT_BRACKET = 72,
|
||||||
|
/** '\' key. */
|
||||||
AKEYCODE_BACKSLASH = 73,
|
AKEYCODE_BACKSLASH = 73,
|
||||||
|
/** ';' key. */
|
||||||
AKEYCODE_SEMICOLON = 74,
|
AKEYCODE_SEMICOLON = 74,
|
||||||
|
/** ''' (apostrophe) key. */
|
||||||
AKEYCODE_APOSTROPHE = 75,
|
AKEYCODE_APOSTROPHE = 75,
|
||||||
|
/** '/' key. */
|
||||||
AKEYCODE_SLASH = 76,
|
AKEYCODE_SLASH = 76,
|
||||||
|
/** '@' key. */
|
||||||
AKEYCODE_AT = 77,
|
AKEYCODE_AT = 77,
|
||||||
|
/** Number modifier key.
|
||||||
|
* Used to enter numeric symbols.
|
||||||
|
* This key is not {@link AKEYCODE_NUM_LOCK}; it is more like {@link AKEYCODE_ALT_LEFT}. */
|
||||||
AKEYCODE_NUM = 78,
|
AKEYCODE_NUM = 78,
|
||||||
|
/** Headset Hook key.
|
||||||
|
* Used to hang up calls and stop media. */
|
||||||
AKEYCODE_HEADSETHOOK = 79,
|
AKEYCODE_HEADSETHOOK = 79,
|
||||||
AKEYCODE_FOCUS = 80, // *Camera* focus
|
/** Camera Focus key.
|
||||||
|
* Used to focus the camera. */
|
||||||
|
AKEYCODE_FOCUS = 80,
|
||||||
|
/** '+' key. */
|
||||||
AKEYCODE_PLUS = 81,
|
AKEYCODE_PLUS = 81,
|
||||||
|
/** Menu key. */
|
||||||
AKEYCODE_MENU = 82,
|
AKEYCODE_MENU = 82,
|
||||||
|
/** Notification key. */
|
||||||
AKEYCODE_NOTIFICATION = 83,
|
AKEYCODE_NOTIFICATION = 83,
|
||||||
|
/** Search key. */
|
||||||
AKEYCODE_SEARCH = 84,
|
AKEYCODE_SEARCH = 84,
|
||||||
|
/** Play/Pause media key. */
|
||||||
AKEYCODE_MEDIA_PLAY_PAUSE= 85,
|
AKEYCODE_MEDIA_PLAY_PAUSE= 85,
|
||||||
|
/** Stop media key. */
|
||||||
AKEYCODE_MEDIA_STOP = 86,
|
AKEYCODE_MEDIA_STOP = 86,
|
||||||
|
/** Play Next media key. */
|
||||||
AKEYCODE_MEDIA_NEXT = 87,
|
AKEYCODE_MEDIA_NEXT = 87,
|
||||||
|
/** Play Previous media key. */
|
||||||
AKEYCODE_MEDIA_PREVIOUS = 88,
|
AKEYCODE_MEDIA_PREVIOUS = 88,
|
||||||
|
/** Rewind media key. */
|
||||||
AKEYCODE_MEDIA_REWIND = 89,
|
AKEYCODE_MEDIA_REWIND = 89,
|
||||||
|
/** Fast Forward media key. */
|
||||||
AKEYCODE_MEDIA_FAST_FORWARD = 90,
|
AKEYCODE_MEDIA_FAST_FORWARD = 90,
|
||||||
|
/** Mute key.
|
||||||
|
* Mutes the microphone, unlike {@link AKEYCODE_VOLUME_MUTE}. */
|
||||||
AKEYCODE_MUTE = 91,
|
AKEYCODE_MUTE = 91,
|
||||||
|
/** Page Up key. */
|
||||||
AKEYCODE_PAGE_UP = 92,
|
AKEYCODE_PAGE_UP = 92,
|
||||||
|
/** Page Down key. */
|
||||||
AKEYCODE_PAGE_DOWN = 93,
|
AKEYCODE_PAGE_DOWN = 93,
|
||||||
|
/** Picture Symbols modifier key.
|
||||||
|
* Used to switch symbol sets (Emoji, Kao-moji). */
|
||||||
AKEYCODE_PICTSYMBOLS = 94,
|
AKEYCODE_PICTSYMBOLS = 94,
|
||||||
|
/** Switch Charset modifier key.
|
||||||
|
* Used to switch character sets (Kanji, Katakana). */
|
||||||
AKEYCODE_SWITCH_CHARSET = 95,
|
AKEYCODE_SWITCH_CHARSET = 95,
|
||||||
|
/** A Button key.
|
||||||
|
* On a game controller, the A button should be either the button labeled A
|
||||||
|
* or the first button on the bottom row of controller buttons. */
|
||||||
AKEYCODE_BUTTON_A = 96,
|
AKEYCODE_BUTTON_A = 96,
|
||||||
|
/** B Button key.
|
||||||
|
* On a game controller, the B button should be either the button labeled B
|
||||||
|
* or the second button on the bottom row of controller buttons. */
|
||||||
AKEYCODE_BUTTON_B = 97,
|
AKEYCODE_BUTTON_B = 97,
|
||||||
|
/** C Button key.
|
||||||
|
* On a game controller, the C button should be either the button labeled C
|
||||||
|
* or the third button on the bottom row of controller buttons. */
|
||||||
AKEYCODE_BUTTON_C = 98,
|
AKEYCODE_BUTTON_C = 98,
|
||||||
|
/** X Button key.
|
||||||
|
* On a game controller, the X button should be either the button labeled X
|
||||||
|
* or the first button on the upper row of controller buttons. */
|
||||||
AKEYCODE_BUTTON_X = 99,
|
AKEYCODE_BUTTON_X = 99,
|
||||||
|
/** Y Button key.
|
||||||
|
* On a game controller, the Y button should be either the button labeled Y
|
||||||
|
* or the second button on the upper row of controller buttons. */
|
||||||
AKEYCODE_BUTTON_Y = 100,
|
AKEYCODE_BUTTON_Y = 100,
|
||||||
|
/** Z Button key.
|
||||||
|
* On a game controller, the Z button should be either the button labeled Z
|
||||||
|
* or the third button on the upper row of controller buttons. */
|
||||||
AKEYCODE_BUTTON_Z = 101,
|
AKEYCODE_BUTTON_Z = 101,
|
||||||
|
/** L1 Button key.
|
||||||
|
* On a game controller, the L1 button should be either the button labeled L1 (or L)
|
||||||
|
* or the top left trigger button. */
|
||||||
AKEYCODE_BUTTON_L1 = 102,
|
AKEYCODE_BUTTON_L1 = 102,
|
||||||
|
/** R1 Button key.
|
||||||
|
* On a game controller, the R1 button should be either the button labeled R1 (or R)
|
||||||
|
* or the top right trigger button. */
|
||||||
AKEYCODE_BUTTON_R1 = 103,
|
AKEYCODE_BUTTON_R1 = 103,
|
||||||
|
/** L2 Button key.
|
||||||
|
* On a game controller, the L2 button should be either the button labeled L2
|
||||||
|
* or the bottom left trigger button. */
|
||||||
AKEYCODE_BUTTON_L2 = 104,
|
AKEYCODE_BUTTON_L2 = 104,
|
||||||
|
/** R2 Button key.
|
||||||
|
* On a game controller, the R2 button should be either the button labeled R2
|
||||||
|
* or the bottom right trigger button. */
|
||||||
AKEYCODE_BUTTON_R2 = 105,
|
AKEYCODE_BUTTON_R2 = 105,
|
||||||
|
/** Left Thumb Button key.
|
||||||
|
* On a game controller, the left thumb button indicates that the left (or only)
|
||||||
|
* joystick is pressed. */
|
||||||
AKEYCODE_BUTTON_THUMBL = 106,
|
AKEYCODE_BUTTON_THUMBL = 106,
|
||||||
|
/** Right Thumb Button key.
|
||||||
|
* On a game controller, the right thumb button indicates that the right
|
||||||
|
* joystick is pressed. */
|
||||||
AKEYCODE_BUTTON_THUMBR = 107,
|
AKEYCODE_BUTTON_THUMBR = 107,
|
||||||
|
/** Start Button key.
|
||||||
|
* On a game controller, the button labeled Start. */
|
||||||
AKEYCODE_BUTTON_START = 108,
|
AKEYCODE_BUTTON_START = 108,
|
||||||
|
/** Select Button key.
|
||||||
|
* On a game controller, the button labeled Select. */
|
||||||
AKEYCODE_BUTTON_SELECT = 109,
|
AKEYCODE_BUTTON_SELECT = 109,
|
||||||
|
/** Mode Button key.
|
||||||
|
* On a game controller, the button labeled Mode. */
|
||||||
AKEYCODE_BUTTON_MODE = 110,
|
AKEYCODE_BUTTON_MODE = 110,
|
||||||
|
/** Escape key. */
|
||||||
AKEYCODE_ESCAPE = 111,
|
AKEYCODE_ESCAPE = 111,
|
||||||
|
/** Forward Delete key.
|
||||||
|
* Deletes characters ahead of the insertion point, unlike {@link AKEYCODE_DEL}. */
|
||||||
AKEYCODE_FORWARD_DEL = 112,
|
AKEYCODE_FORWARD_DEL = 112,
|
||||||
|
/** Left Control modifier key. */
|
||||||
AKEYCODE_CTRL_LEFT = 113,
|
AKEYCODE_CTRL_LEFT = 113,
|
||||||
|
/** Right Control modifier key. */
|
||||||
AKEYCODE_CTRL_RIGHT = 114,
|
AKEYCODE_CTRL_RIGHT = 114,
|
||||||
|
/** Caps Lock key. */
|
||||||
AKEYCODE_CAPS_LOCK = 115,
|
AKEYCODE_CAPS_LOCK = 115,
|
||||||
|
/** Scroll Lock key. */
|
||||||
AKEYCODE_SCROLL_LOCK = 116,
|
AKEYCODE_SCROLL_LOCK = 116,
|
||||||
|
/** Left Meta modifier key. */
|
||||||
AKEYCODE_META_LEFT = 117,
|
AKEYCODE_META_LEFT = 117,
|
||||||
|
/** Right Meta modifier key. */
|
||||||
AKEYCODE_META_RIGHT = 118,
|
AKEYCODE_META_RIGHT = 118,
|
||||||
|
/** Function modifier key. */
|
||||||
AKEYCODE_FUNCTION = 119,
|
AKEYCODE_FUNCTION = 119,
|
||||||
|
/** System Request / Print Screen key. */
|
||||||
AKEYCODE_SYSRQ = 120,
|
AKEYCODE_SYSRQ = 120,
|
||||||
|
/** Break / Pause key. */
|
||||||
AKEYCODE_BREAK = 121,
|
AKEYCODE_BREAK = 121,
|
||||||
|
/** Home Movement key.
|
||||||
|
* Used for scrolling or moving the cursor around to the start of a line
|
||||||
|
* or to the top of a list. */
|
||||||
AKEYCODE_MOVE_HOME = 122,
|
AKEYCODE_MOVE_HOME = 122,
|
||||||
|
/** End Movement key.
|
||||||
|
* Used for scrolling or moving the cursor around to the end of a line
|
||||||
|
* or to the bottom of a list. */
|
||||||
AKEYCODE_MOVE_END = 123,
|
AKEYCODE_MOVE_END = 123,
|
||||||
|
/** Insert key.
|
||||||
|
* Toggles insert / overwrite edit mode. */
|
||||||
AKEYCODE_INSERT = 124,
|
AKEYCODE_INSERT = 124,
|
||||||
|
/** Forward key.
|
||||||
|
* Navigates forward in the history stack. Complement of {@link AKEYCODE_BACK}. */
|
||||||
AKEYCODE_FORWARD = 125,
|
AKEYCODE_FORWARD = 125,
|
||||||
|
/** Play media key. */
|
||||||
AKEYCODE_MEDIA_PLAY = 126,
|
AKEYCODE_MEDIA_PLAY = 126,
|
||||||
|
/** Pause media key. */
|
||||||
AKEYCODE_MEDIA_PAUSE = 127,
|
AKEYCODE_MEDIA_PAUSE = 127,
|
||||||
|
/** Close media key.
|
||||||
|
* May be used to close a CD tray, for example. */
|
||||||
AKEYCODE_MEDIA_CLOSE = 128,
|
AKEYCODE_MEDIA_CLOSE = 128,
|
||||||
|
/** Eject media key.
|
||||||
|
* May be used to eject a CD tray, for example. */
|
||||||
AKEYCODE_MEDIA_EJECT = 129,
|
AKEYCODE_MEDIA_EJECT = 129,
|
||||||
|
/** Record media key. */
|
||||||
AKEYCODE_MEDIA_RECORD = 130,
|
AKEYCODE_MEDIA_RECORD = 130,
|
||||||
|
/** F1 key. */
|
||||||
AKEYCODE_F1 = 131,
|
AKEYCODE_F1 = 131,
|
||||||
|
/** F2 key. */
|
||||||
AKEYCODE_F2 = 132,
|
AKEYCODE_F2 = 132,
|
||||||
|
/** F3 key. */
|
||||||
AKEYCODE_F3 = 133,
|
AKEYCODE_F3 = 133,
|
||||||
|
/** F4 key. */
|
||||||
AKEYCODE_F4 = 134,
|
AKEYCODE_F4 = 134,
|
||||||
|
/** F5 key. */
|
||||||
AKEYCODE_F5 = 135,
|
AKEYCODE_F5 = 135,
|
||||||
|
/** F6 key. */
|
||||||
AKEYCODE_F6 = 136,
|
AKEYCODE_F6 = 136,
|
||||||
|
/** F7 key. */
|
||||||
AKEYCODE_F7 = 137,
|
AKEYCODE_F7 = 137,
|
||||||
|
/** F8 key. */
|
||||||
AKEYCODE_F8 = 138,
|
AKEYCODE_F8 = 138,
|
||||||
|
/** F9 key. */
|
||||||
AKEYCODE_F9 = 139,
|
AKEYCODE_F9 = 139,
|
||||||
|
/** F10 key. */
|
||||||
AKEYCODE_F10 = 140,
|
AKEYCODE_F10 = 140,
|
||||||
|
/** F11 key. */
|
||||||
AKEYCODE_F11 = 141,
|
AKEYCODE_F11 = 141,
|
||||||
|
/** F12 key. */
|
||||||
AKEYCODE_F12 = 142,
|
AKEYCODE_F12 = 142,
|
||||||
|
/** Num Lock key.
|
||||||
|
* This is the Num Lock key; it is different from {@link AKEYCODE_NUM}.
|
||||||
|
* This key alters the behavior of other keys on the numeric keypad. */
|
||||||
AKEYCODE_NUM_LOCK = 143,
|
AKEYCODE_NUM_LOCK = 143,
|
||||||
|
/** Numeric keypad '0' key. */
|
||||||
AKEYCODE_NUMPAD_0 = 144,
|
AKEYCODE_NUMPAD_0 = 144,
|
||||||
|
/** Numeric keypad '1' key. */
|
||||||
AKEYCODE_NUMPAD_1 = 145,
|
AKEYCODE_NUMPAD_1 = 145,
|
||||||
|
/** Numeric keypad '2' key. */
|
||||||
AKEYCODE_NUMPAD_2 = 146,
|
AKEYCODE_NUMPAD_2 = 146,
|
||||||
|
/** Numeric keypad '3' key. */
|
||||||
AKEYCODE_NUMPAD_3 = 147,
|
AKEYCODE_NUMPAD_3 = 147,
|
||||||
|
/** Numeric keypad '4' key. */
|
||||||
AKEYCODE_NUMPAD_4 = 148,
|
AKEYCODE_NUMPAD_4 = 148,
|
||||||
|
/** Numeric keypad '5' key. */
|
||||||
AKEYCODE_NUMPAD_5 = 149,
|
AKEYCODE_NUMPAD_5 = 149,
|
||||||
|
/** Numeric keypad '6' key. */
|
||||||
AKEYCODE_NUMPAD_6 = 150,
|
AKEYCODE_NUMPAD_6 = 150,
|
||||||
|
/** Numeric keypad '7' key. */
|
||||||
AKEYCODE_NUMPAD_7 = 151,
|
AKEYCODE_NUMPAD_7 = 151,
|
||||||
|
/** Numeric keypad '8' key. */
|
||||||
AKEYCODE_NUMPAD_8 = 152,
|
AKEYCODE_NUMPAD_8 = 152,
|
||||||
|
/** Numeric keypad '9' key. */
|
||||||
AKEYCODE_NUMPAD_9 = 153,
|
AKEYCODE_NUMPAD_9 = 153,
|
||||||
|
/** Numeric keypad '/' key (for division). */
|
||||||
AKEYCODE_NUMPAD_DIVIDE = 154,
|
AKEYCODE_NUMPAD_DIVIDE = 154,
|
||||||
|
/** Numeric keypad '*' key (for multiplication). */
|
||||||
AKEYCODE_NUMPAD_MULTIPLY = 155,
|
AKEYCODE_NUMPAD_MULTIPLY = 155,
|
||||||
|
/** Numeric keypad '-' key (for subtraction). */
|
||||||
AKEYCODE_NUMPAD_SUBTRACT = 156,
|
AKEYCODE_NUMPAD_SUBTRACT = 156,
|
||||||
|
/** Numeric keypad '+' key (for addition). */
|
||||||
AKEYCODE_NUMPAD_ADD = 157,
|
AKEYCODE_NUMPAD_ADD = 157,
|
||||||
|
/** Numeric keypad '.' key (for decimals or digit grouping). */
|
||||||
AKEYCODE_NUMPAD_DOT = 158,
|
AKEYCODE_NUMPAD_DOT = 158,
|
||||||
|
/** Numeric keypad ',' key (for decimals or digit grouping). */
|
||||||
AKEYCODE_NUMPAD_COMMA = 159,
|
AKEYCODE_NUMPAD_COMMA = 159,
|
||||||
|
/** Numeric keypad Enter key. */
|
||||||
AKEYCODE_NUMPAD_ENTER = 160,
|
AKEYCODE_NUMPAD_ENTER = 160,
|
||||||
|
/** Numeric keypad '=' key. */
|
||||||
AKEYCODE_NUMPAD_EQUALS = 161,
|
AKEYCODE_NUMPAD_EQUALS = 161,
|
||||||
|
/** Numeric keypad '(' key. */
|
||||||
AKEYCODE_NUMPAD_LEFT_PAREN = 162,
|
AKEYCODE_NUMPAD_LEFT_PAREN = 162,
|
||||||
|
/** Numeric keypad ')' key. */
|
||||||
AKEYCODE_NUMPAD_RIGHT_PAREN = 163,
|
AKEYCODE_NUMPAD_RIGHT_PAREN = 163,
|
||||||
|
/** Volume Mute key.
|
||||||
|
* Mutes the speaker, unlike {@link AKEYCODE_MUTE}.
|
||||||
|
* This key should normally be implemented as a toggle such that the first press
|
||||||
|
* mutes the speaker and the second press restores the original volume. */
|
||||||
AKEYCODE_VOLUME_MUTE = 164,
|
AKEYCODE_VOLUME_MUTE = 164,
|
||||||
|
/** Info key.
|
||||||
|
* Common on TV remotes to show additional information related to what is
|
||||||
|
* currently being viewed. */
|
||||||
AKEYCODE_INFO = 165,
|
AKEYCODE_INFO = 165,
|
||||||
|
/** Channel up key.
|
||||||
|
* On TV remotes, increments the television channel. */
|
||||||
AKEYCODE_CHANNEL_UP = 166,
|
AKEYCODE_CHANNEL_UP = 166,
|
||||||
|
/** Channel down key.
|
||||||
|
* On TV remotes, decrements the television channel. */
|
||||||
AKEYCODE_CHANNEL_DOWN = 167,
|
AKEYCODE_CHANNEL_DOWN = 167,
|
||||||
|
/** Zoom in key. */
|
||||||
AKEYCODE_ZOOM_IN = 168,
|
AKEYCODE_ZOOM_IN = 168,
|
||||||
|
/** Zoom out key. */
|
||||||
AKEYCODE_ZOOM_OUT = 169,
|
AKEYCODE_ZOOM_OUT = 169,
|
||||||
|
/** TV key.
|
||||||
|
* On TV remotes, switches to viewing live TV. */
|
||||||
AKEYCODE_TV = 170,
|
AKEYCODE_TV = 170,
|
||||||
|
/** Window key.
|
||||||
|
* On TV remotes, toggles picture-in-picture mode or other windowing functions. */
|
||||||
AKEYCODE_WINDOW = 171,
|
AKEYCODE_WINDOW = 171,
|
||||||
|
/** Guide key.
|
||||||
|
* On TV remotes, shows a programming guide. */
|
||||||
AKEYCODE_GUIDE = 172,
|
AKEYCODE_GUIDE = 172,
|
||||||
|
/** DVR key.
|
||||||
|
* On some TV remotes, switches to a DVR mode for recorded shows. */
|
||||||
AKEYCODE_DVR = 173,
|
AKEYCODE_DVR = 173,
|
||||||
|
/** Bookmark key.
|
||||||
|
* On some TV remotes, bookmarks content or web pages. */
|
||||||
AKEYCODE_BOOKMARK = 174,
|
AKEYCODE_BOOKMARK = 174,
|
||||||
|
/** Toggle captions key.
|
||||||
|
* Switches the mode for closed-captioning text, for example during television shows. */
|
||||||
AKEYCODE_CAPTIONS = 175,
|
AKEYCODE_CAPTIONS = 175,
|
||||||
|
/** Settings key.
|
||||||
|
* Starts the system settings activity. */
|
||||||
AKEYCODE_SETTINGS = 176,
|
AKEYCODE_SETTINGS = 176,
|
||||||
|
/** TV power key.
|
||||||
|
* On TV remotes, toggles the power on a television screen. */
|
||||||
AKEYCODE_TV_POWER = 177,
|
AKEYCODE_TV_POWER = 177,
|
||||||
|
/** TV input key.
|
||||||
|
* On TV remotes, switches the input on a television screen. */
|
||||||
AKEYCODE_TV_INPUT = 178,
|
AKEYCODE_TV_INPUT = 178,
|
||||||
|
/** Set-top-box power key.
|
||||||
|
* On TV remotes, toggles the power on an external Set-top-box. */
|
||||||
AKEYCODE_STB_POWER = 179,
|
AKEYCODE_STB_POWER = 179,
|
||||||
|
/** Set-top-box input key.
|
||||||
|
* On TV remotes, switches the input mode on an external Set-top-box. */
|
||||||
AKEYCODE_STB_INPUT = 180,
|
AKEYCODE_STB_INPUT = 180,
|
||||||
|
/** A/V Receiver power key.
|
||||||
|
* On TV remotes, toggles the power on an external A/V Receiver. */
|
||||||
AKEYCODE_AVR_POWER = 181,
|
AKEYCODE_AVR_POWER = 181,
|
||||||
|
/** A/V Receiver input key.
|
||||||
|
* On TV remotes, switches the input mode on an external A/V Receiver. */
|
||||||
AKEYCODE_AVR_INPUT = 182,
|
AKEYCODE_AVR_INPUT = 182,
|
||||||
|
/** Red "programmable" key.
|
||||||
|
* On TV remotes, acts as a contextual/programmable key. */
|
||||||
AKEYCODE_PROG_RED = 183,
|
AKEYCODE_PROG_RED = 183,
|
||||||
|
/** Green "programmable" key.
|
||||||
|
* On TV remotes, actsas a contextual/programmable key. */
|
||||||
AKEYCODE_PROG_GREEN = 184,
|
AKEYCODE_PROG_GREEN = 184,
|
||||||
|
/** Yellow "programmable" key.
|
||||||
|
* On TV remotes, acts as a contextual/programmable key. */
|
||||||
AKEYCODE_PROG_YELLOW = 185,
|
AKEYCODE_PROG_YELLOW = 185,
|
||||||
|
/** Blue "programmable" key.
|
||||||
|
* On TV remotes, acts as a contextual/programmable key. */
|
||||||
AKEYCODE_PROG_BLUE = 186,
|
AKEYCODE_PROG_BLUE = 186,
|
||||||
|
/** App switch key.
|
||||||
|
* Should bring up the application switcher dialog. */
|
||||||
AKEYCODE_APP_SWITCH = 187,
|
AKEYCODE_APP_SWITCH = 187,
|
||||||
|
/** Generic Game Pad Button #1.*/
|
||||||
AKEYCODE_BUTTON_1 = 188,
|
AKEYCODE_BUTTON_1 = 188,
|
||||||
|
/** Generic Game Pad Button #2.*/
|
||||||
AKEYCODE_BUTTON_2 = 189,
|
AKEYCODE_BUTTON_2 = 189,
|
||||||
|
/** Generic Game Pad Button #3.*/
|
||||||
AKEYCODE_BUTTON_3 = 190,
|
AKEYCODE_BUTTON_3 = 190,
|
||||||
|
/** Generic Game Pad Button #4.*/
|
||||||
AKEYCODE_BUTTON_4 = 191,
|
AKEYCODE_BUTTON_4 = 191,
|
||||||
|
/** Generic Game Pad Button #5.*/
|
||||||
AKEYCODE_BUTTON_5 = 192,
|
AKEYCODE_BUTTON_5 = 192,
|
||||||
|
/** Generic Game Pad Button #6.*/
|
||||||
AKEYCODE_BUTTON_6 = 193,
|
AKEYCODE_BUTTON_6 = 193,
|
||||||
|
/** Generic Game Pad Button #7.*/
|
||||||
AKEYCODE_BUTTON_7 = 194,
|
AKEYCODE_BUTTON_7 = 194,
|
||||||
|
/** Generic Game Pad Button #8.*/
|
||||||
AKEYCODE_BUTTON_8 = 195,
|
AKEYCODE_BUTTON_8 = 195,
|
||||||
|
/** Generic Game Pad Button #9.*/
|
||||||
AKEYCODE_BUTTON_9 = 196,
|
AKEYCODE_BUTTON_9 = 196,
|
||||||
|
/** Generic Game Pad Button #10.*/
|
||||||
AKEYCODE_BUTTON_10 = 197,
|
AKEYCODE_BUTTON_10 = 197,
|
||||||
|
/** Generic Game Pad Button #11.*/
|
||||||
AKEYCODE_BUTTON_11 = 198,
|
AKEYCODE_BUTTON_11 = 198,
|
||||||
|
/** Generic Game Pad Button #12.*/
|
||||||
AKEYCODE_BUTTON_12 = 199,
|
AKEYCODE_BUTTON_12 = 199,
|
||||||
|
/** Generic Game Pad Button #13.*/
|
||||||
AKEYCODE_BUTTON_13 = 200,
|
AKEYCODE_BUTTON_13 = 200,
|
||||||
|
/** Generic Game Pad Button #14.*/
|
||||||
AKEYCODE_BUTTON_14 = 201,
|
AKEYCODE_BUTTON_14 = 201,
|
||||||
|
/** Generic Game Pad Button #15.*/
|
||||||
AKEYCODE_BUTTON_15 = 202,
|
AKEYCODE_BUTTON_15 = 202,
|
||||||
|
/** Generic Game Pad Button #16.*/
|
||||||
AKEYCODE_BUTTON_16 = 203,
|
AKEYCODE_BUTTON_16 = 203,
|
||||||
|
/** Language Switch key.
|
||||||
|
* Toggles the current input language such as switching between English and Japanese on
|
||||||
|
* a QWERTY keyboard. On some devices, the same function may be performed by
|
||||||
|
* pressing Shift+Spacebar. */
|
||||||
AKEYCODE_LANGUAGE_SWITCH = 204,
|
AKEYCODE_LANGUAGE_SWITCH = 204,
|
||||||
|
/** Manner Mode key.
|
||||||
|
* Toggles silent or vibrate mode on and off to make the device behave more politely
|
||||||
|
* in certain settings such as on a crowded train. On some devices, the key may only
|
||||||
|
* operate when long-pressed. */
|
||||||
AKEYCODE_MANNER_MODE = 205,
|
AKEYCODE_MANNER_MODE = 205,
|
||||||
|
/** 3D Mode key.
|
||||||
|
* Toggles the display between 2D and 3D mode. */
|
||||||
AKEYCODE_3D_MODE = 206,
|
AKEYCODE_3D_MODE = 206,
|
||||||
|
/** Contacts special function key.
|
||||||
|
* Used to launch an address book application. */
|
||||||
AKEYCODE_CONTACTS = 207,
|
AKEYCODE_CONTACTS = 207,
|
||||||
|
/** Calendar special function key.
|
||||||
|
* Used to launch a calendar application. */
|
||||||
AKEYCODE_CALENDAR = 208,
|
AKEYCODE_CALENDAR = 208,
|
||||||
|
/** Music special function key.
|
||||||
|
* Used to launch a music player application. */
|
||||||
AKEYCODE_MUSIC = 209,
|
AKEYCODE_MUSIC = 209,
|
||||||
|
/** Calculator special function key.
|
||||||
|
* Used to launch a calculator application. */
|
||||||
AKEYCODE_CALCULATOR = 210,
|
AKEYCODE_CALCULATOR = 210,
|
||||||
|
/** Japanese full-width / half-width key. */
|
||||||
AKEYCODE_ZENKAKU_HANKAKU = 211,
|
AKEYCODE_ZENKAKU_HANKAKU = 211,
|
||||||
|
/** Japanese alphanumeric key. */
|
||||||
AKEYCODE_EISU = 212,
|
AKEYCODE_EISU = 212,
|
||||||
|
/** Japanese non-conversion key. */
|
||||||
AKEYCODE_MUHENKAN = 213,
|
AKEYCODE_MUHENKAN = 213,
|
||||||
|
/** Japanese conversion key. */
|
||||||
AKEYCODE_HENKAN = 214,
|
AKEYCODE_HENKAN = 214,
|
||||||
|
/** Japanese katakana / hiragana key. */
|
||||||
AKEYCODE_KATAKANA_HIRAGANA = 215,
|
AKEYCODE_KATAKANA_HIRAGANA = 215,
|
||||||
|
/** Japanese Yen key. */
|
||||||
AKEYCODE_YEN = 216,
|
AKEYCODE_YEN = 216,
|
||||||
|
/** Japanese Ro key. */
|
||||||
AKEYCODE_RO = 217,
|
AKEYCODE_RO = 217,
|
||||||
|
/** Japanese kana key. */
|
||||||
AKEYCODE_KANA = 218,
|
AKEYCODE_KANA = 218,
|
||||||
|
/** Assist key.
|
||||||
|
* Launches the global assist activity. Not delivered to applications. */
|
||||||
AKEYCODE_ASSIST = 219,
|
AKEYCODE_ASSIST = 219,
|
||||||
|
/** Brightness Down key.
|
||||||
|
* Adjusts the screen brightness down. */
|
||||||
AKEYCODE_BRIGHTNESS_DOWN = 220,
|
AKEYCODE_BRIGHTNESS_DOWN = 220,
|
||||||
|
/** Brightness Up key.
|
||||||
|
* Adjusts the screen brightness up. */
|
||||||
AKEYCODE_BRIGHTNESS_UP = 221,
|
AKEYCODE_BRIGHTNESS_UP = 221,
|
||||||
|
/** Audio Track key.
|
||||||
|
* Switches the audio tracks. */
|
||||||
AKEYCODE_MEDIA_AUDIO_TRACK = 222,
|
AKEYCODE_MEDIA_AUDIO_TRACK = 222,
|
||||||
|
/** Sleep key.
|
||||||
|
* Puts the device to sleep. Behaves somewhat like {@link AKEYCODE_POWER} but it
|
||||||
|
* has no effect if the device is already asleep. */
|
||||||
AKEYCODE_SLEEP = 223,
|
AKEYCODE_SLEEP = 223,
|
||||||
|
/** Wakeup key.
|
||||||
|
* Wakes up the device. Behaves somewhat like {@link AKEYCODE_POWER} but it
|
||||||
|
* has no effect if the device is already awake. */
|
||||||
AKEYCODE_WAKEUP = 224,
|
AKEYCODE_WAKEUP = 224,
|
||||||
|
/** Pairing key.
|
||||||
|
* Initiates peripheral pairing mode. Useful for pairing remote control
|
||||||
|
* devices or game controllers, especially if no other input mode is
|
||||||
|
* available. */
|
||||||
AKEYCODE_PAIRING = 225,
|
AKEYCODE_PAIRING = 225,
|
||||||
|
/** Media Top Menu key.
|
||||||
|
* Goes to the top of media menu. */
|
||||||
AKEYCODE_MEDIA_TOP_MENU = 226,
|
AKEYCODE_MEDIA_TOP_MENU = 226,
|
||||||
|
/** '11' key. */
|
||||||
AKEYCODE_11 = 227,
|
AKEYCODE_11 = 227,
|
||||||
|
/** '12' key. */
|
||||||
AKEYCODE_12 = 228,
|
AKEYCODE_12 = 228,
|
||||||
|
/** Last Channel key.
|
||||||
|
* Goes to the last viewed channel. */
|
||||||
AKEYCODE_LAST_CHANNEL = 229,
|
AKEYCODE_LAST_CHANNEL = 229,
|
||||||
|
/** TV data service key.
|
||||||
|
* Displays data services like weather, sports. */
|
||||||
AKEYCODE_TV_DATA_SERVICE = 230,
|
AKEYCODE_TV_DATA_SERVICE = 230,
|
||||||
|
/** Voice Assist key.
|
||||||
|
* Launches the global voice assist activity. Not delivered to applications. */
|
||||||
AKEYCODE_VOICE_ASSIST = 231,
|
AKEYCODE_VOICE_ASSIST = 231,
|
||||||
|
/** Radio key.
|
||||||
|
* Toggles TV service / Radio service. */
|
||||||
AKEYCODE_TV_RADIO_SERVICE = 232,
|
AKEYCODE_TV_RADIO_SERVICE = 232,
|
||||||
|
/** Teletext key.
|
||||||
|
* Displays Teletext service. */
|
||||||
AKEYCODE_TV_TELETEXT = 233,
|
AKEYCODE_TV_TELETEXT = 233,
|
||||||
|
/** Number entry key.
|
||||||
|
* Initiates to enter multi-digit channel nubmber when each digit key is assigned
|
||||||
|
* for selecting separate channel. Corresponds to Number Entry Mode (0x1D) of CEC
|
||||||
|
* User Control Code. */
|
||||||
AKEYCODE_TV_NUMBER_ENTRY = 234,
|
AKEYCODE_TV_NUMBER_ENTRY = 234,
|
||||||
|
/** Analog Terrestrial key.
|
||||||
|
* Switches to analog terrestrial broadcast service. */
|
||||||
AKEYCODE_TV_TERRESTRIAL_ANALOG = 235,
|
AKEYCODE_TV_TERRESTRIAL_ANALOG = 235,
|
||||||
|
/** Digital Terrestrial key.
|
||||||
|
* Switches to digital terrestrial broadcast service. */
|
||||||
AKEYCODE_TV_TERRESTRIAL_DIGITAL = 236,
|
AKEYCODE_TV_TERRESTRIAL_DIGITAL = 236,
|
||||||
|
/** Satellite key.
|
||||||
|
* Switches to digital satellite broadcast service. */
|
||||||
AKEYCODE_TV_SATELLITE = 237,
|
AKEYCODE_TV_SATELLITE = 237,
|
||||||
|
/** BS key.
|
||||||
|
* Switches to BS digital satellite broadcasting service available in Japan. */
|
||||||
AKEYCODE_TV_SATELLITE_BS = 238,
|
AKEYCODE_TV_SATELLITE_BS = 238,
|
||||||
|
/** CS key.
|
||||||
|
* Switches to CS digital satellite broadcasting service available in Japan. */
|
||||||
AKEYCODE_TV_SATELLITE_CS = 239,
|
AKEYCODE_TV_SATELLITE_CS = 239,
|
||||||
|
/** BS/CS key.
|
||||||
|
* Toggles between BS and CS digital satellite services. */
|
||||||
AKEYCODE_TV_SATELLITE_SERVICE = 240,
|
AKEYCODE_TV_SATELLITE_SERVICE = 240,
|
||||||
|
/** Toggle Network key.
|
||||||
|
* Toggles selecting broacast services. */
|
||||||
AKEYCODE_TV_NETWORK = 241,
|
AKEYCODE_TV_NETWORK = 241,
|
||||||
|
/** Antenna/Cable key.
|
||||||
|
* Toggles broadcast input source between antenna and cable. */
|
||||||
AKEYCODE_TV_ANTENNA_CABLE = 242,
|
AKEYCODE_TV_ANTENNA_CABLE = 242,
|
||||||
|
/** HDMI #1 key.
|
||||||
|
* Switches to HDMI input #1. */
|
||||||
AKEYCODE_TV_INPUT_HDMI_1 = 243,
|
AKEYCODE_TV_INPUT_HDMI_1 = 243,
|
||||||
|
/** HDMI #2 key.
|
||||||
|
* Switches to HDMI input #2. */
|
||||||
AKEYCODE_TV_INPUT_HDMI_2 = 244,
|
AKEYCODE_TV_INPUT_HDMI_2 = 244,
|
||||||
|
/** HDMI #3 key.
|
||||||
|
* Switches to HDMI input #3. */
|
||||||
AKEYCODE_TV_INPUT_HDMI_3 = 245,
|
AKEYCODE_TV_INPUT_HDMI_3 = 245,
|
||||||
|
/** HDMI #4 key.
|
||||||
|
* Switches to HDMI input #4. */
|
||||||
AKEYCODE_TV_INPUT_HDMI_4 = 246,
|
AKEYCODE_TV_INPUT_HDMI_4 = 246,
|
||||||
|
/** Composite #1 key.
|
||||||
|
* Switches to composite video input #1. */
|
||||||
AKEYCODE_TV_INPUT_COMPOSITE_1 = 247,
|
AKEYCODE_TV_INPUT_COMPOSITE_1 = 247,
|
||||||
|
/** Composite #2 key.
|
||||||
|
* Switches to composite video input #2. */
|
||||||
AKEYCODE_TV_INPUT_COMPOSITE_2 = 248,
|
AKEYCODE_TV_INPUT_COMPOSITE_2 = 248,
|
||||||
|
/** Component #1 key.
|
||||||
|
* Switches to component video input #1. */
|
||||||
AKEYCODE_TV_INPUT_COMPONENT_1 = 249,
|
AKEYCODE_TV_INPUT_COMPONENT_1 = 249,
|
||||||
|
/** Component #2 key.
|
||||||
|
* Switches to component video input #2. */
|
||||||
AKEYCODE_TV_INPUT_COMPONENT_2 = 250,
|
AKEYCODE_TV_INPUT_COMPONENT_2 = 250,
|
||||||
|
/** VGA #1 key.
|
||||||
|
* Switches to VGA (analog RGB) input #1. */
|
||||||
AKEYCODE_TV_INPUT_VGA_1 = 251,
|
AKEYCODE_TV_INPUT_VGA_1 = 251,
|
||||||
|
/** Audio description key.
|
||||||
|
* Toggles audio description off / on. */
|
||||||
AKEYCODE_TV_AUDIO_DESCRIPTION = 252,
|
AKEYCODE_TV_AUDIO_DESCRIPTION = 252,
|
||||||
|
/** Audio description mixing volume up key.
|
||||||
|
* Louden audio description volume as compared with normal audio volume. */
|
||||||
AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253,
|
AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253,
|
||||||
|
/** Audio description mixing volume down key.
|
||||||
|
* Lessen audio description volume as compared with normal audio volume. */
|
||||||
AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254,
|
AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254,
|
||||||
|
/** Zoom mode key.
|
||||||
|
* Changes Zoom mode (Normal, Full, Zoom, Wide-zoom, etc.) */
|
||||||
AKEYCODE_TV_ZOOM_MODE = 255,
|
AKEYCODE_TV_ZOOM_MODE = 255,
|
||||||
|
/** Contents menu key.
|
||||||
|
* Goes to the title list. Corresponds to Contents Menu (0x0B) of CEC User Control
|
||||||
|
* Code */
|
||||||
AKEYCODE_TV_CONTENTS_MENU = 256,
|
AKEYCODE_TV_CONTENTS_MENU = 256,
|
||||||
|
/** Media context menu key.
|
||||||
|
* Goes to the context menu of media contents. Corresponds to Media Context-sensitive
|
||||||
|
* Menu (0x11) of CEC User Control Code. */
|
||||||
AKEYCODE_TV_MEDIA_CONTEXT_MENU = 257,
|
AKEYCODE_TV_MEDIA_CONTEXT_MENU = 257,
|
||||||
|
/** Timer programming key.
|
||||||
|
* Goes to the timer recording menu. Corresponds to Timer Programming (0x54) of
|
||||||
|
* CEC User Control Code. */
|
||||||
AKEYCODE_TV_TIMER_PROGRAMMING = 258,
|
AKEYCODE_TV_TIMER_PROGRAMMING = 258,
|
||||||
|
/** Help key. */
|
||||||
AKEYCODE_HELP = 259,
|
AKEYCODE_HELP = 259,
|
||||||
AKEYCODE_NAVIGATE_PREVIOUS = 260,
|
AKEYCODE_NAVIGATE_PREVIOUS = 260,
|
||||||
AKEYCODE_NAVIGATE_NEXT = 261,
|
AKEYCODE_NAVIGATE_NEXT = 261,
|
||||||
AKEYCODE_NAVIGATE_IN = 262,
|
AKEYCODE_NAVIGATE_IN = 262,
|
||||||
AKEYCODE_NAVIGATE_OUT = 263,
|
AKEYCODE_NAVIGATE_OUT = 263
|
||||||
AKEYCODE_MEDIA_SKIP_FORWARD = 272,
|
|
||||||
AKEYCODE_MEDIA_SKIP_BACKWARD = 273,
|
|
||||||
AKEYCODE_MEDIA_STEP_FORWARD = 274,
|
|
||||||
AKEYCODE_MEDIA_STEP_BACKWARD = 275
|
|
||||||
|
|
||||||
// NOTE: If you add a new keycode here you must also add it to several other files.
|
// NOTE: If you add a new keycode here you must also add it to several other files.
|
||||||
// Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
|
// Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
|
||||||
@ -321,3 +733,5 @@ enum {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // _ANDROID_KEYCODES_H
|
#endif // _ANDROID_KEYCODES_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Looper
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file looper.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_LOOPER_H
|
#ifndef ANDROID_LOOPER_H
|
||||||
#define ANDROID_LOOPER_H
|
#define ANDROID_LOOPER_H
|
||||||
@ -22,6 +30,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct ALooper;
|
||||||
/**
|
/**
|
||||||
* ALooper
|
* ALooper
|
||||||
*
|
*
|
||||||
@ -35,7 +44,6 @@ extern "C" {
|
|||||||
*
|
*
|
||||||
* A thread can have only one ALooper associated with it.
|
* A thread can have only one ALooper associated with it.
|
||||||
*/
|
*/
|
||||||
struct ALooper;
|
|
||||||
typedef struct ALooper ALooper;
|
typedef struct ALooper ALooper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,13 +52,14 @@ typedef struct ALooper ALooper;
|
|||||||
*/
|
*/
|
||||||
ALooper* ALooper_forThread();
|
ALooper* ALooper_forThread();
|
||||||
|
|
||||||
|
/** Option for for ALooper_prepare(). */
|
||||||
enum {
|
enum {
|
||||||
/**
|
/**
|
||||||
* Option for ALooper_prepare: this looper will accept calls to
|
* This looper will accept calls to ALooper_addFd() that do not
|
||||||
* ALooper_addFd() that do not have a callback (that is provide NULL
|
* have a callback (that is provide NULL for the callback). In
|
||||||
* for the callback). In this case the caller of ALooper_pollOnce()
|
* this case the caller of ALooper_pollOnce() or ALooper_pollAll()
|
||||||
* or ALooper_pollAll() MUST check the return from these functions to
|
* MUST check the return from these functions to discover when
|
||||||
* discover when data is available on such fds and process it.
|
* data is available on such fds and process it.
|
||||||
*/
|
*/
|
||||||
ALOOPER_PREPARE_ALLOW_NON_CALLBACKS = 1<<0
|
ALOOPER_PREPARE_ALLOW_NON_CALLBACKS = 1<<0
|
||||||
};
|
};
|
||||||
@ -64,9 +73,9 @@ enum {
|
|||||||
*/
|
*/
|
||||||
ALooper* ALooper_prepare(int opts);
|
ALooper* ALooper_prepare(int opts);
|
||||||
|
|
||||||
|
/** Result from ALooper_pollOnce() and ALooper_pollAll(). */
|
||||||
enum {
|
enum {
|
||||||
/**
|
/**
|
||||||
* Result from ALooper_pollOnce() and ALooper_pollAll():
|
|
||||||
* The poll was awoken using wake() before the timeout expired
|
* The poll was awoken using wake() before the timeout expired
|
||||||
* and no callbacks were executed and no other file descriptors were ready.
|
* and no callbacks were executed and no other file descriptors were ready.
|
||||||
*/
|
*/
|
||||||
@ -176,10 +185,12 @@ typedef int (*ALooper_callbackFunc)(int fd, int events, void* data);
|
|||||||
*
|
*
|
||||||
* Returns ALOOPER_POLL_ERROR if an error occurred.
|
* Returns ALOOPER_POLL_ERROR if an error occurred.
|
||||||
*
|
*
|
||||||
* Returns a value >= 0 containing an identifier if its file descriptor has data
|
* Returns a value >= 0 containing an identifier (the same identifier
|
||||||
* and it has no callback function (requiring the caller here to handle it).
|
* `ident` passed to ALooper_addFd()) if its file descriptor has data
|
||||||
* In this (and only this) case outFd, outEvents and outData will contain the poll
|
* and it has no callback function (requiring the caller here to
|
||||||
* events and data associated with the fd, otherwise they will be set to NULL.
|
* handle it). In this (and only this) case outFd, outEvents and
|
||||||
|
* outData will contain the poll events and data associated with the
|
||||||
|
* fd, otherwise they will be set to NULL.
|
||||||
*
|
*
|
||||||
* This method does not return until it has finished invoking the appropriate callbacks
|
* This method does not return until it has finished invoking the appropriate callbacks
|
||||||
* for all file descriptors that were signalled.
|
* for all file descriptors that were signalled.
|
||||||
@ -254,3 +265,5 @@ int ALooper_removeFd(ALooper* looper, int fd);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_LOOPER_H
|
#endif // ANDROID_LOOPER_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup NativeActivity Native Activity
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file native_activity.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_NATIVE_ACTIVITY_H
|
#ifndef ANDROID_NATIVE_ACTIVITY_H
|
||||||
#define ANDROID_NATIVE_ACTIVITY_H
|
#define ANDROID_NATIVE_ACTIVITY_H
|
||||||
@ -31,6 +39,9 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ANativeActivityCallbacks}
|
||||||
|
*/
|
||||||
struct ANativeActivityCallbacks;
|
struct ANativeActivityCallbacks;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -273,7 +284,17 @@ void ANativeActivity_setWindowFlags(ANativeActivity* activity,
|
|||||||
* API for documentation.
|
* API for documentation.
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
|
/**
|
||||||
|
* Implicit request to show the input window, not as the result
|
||||||
|
* of a direct request by the user.
|
||||||
|
*/
|
||||||
ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT = 0x0001,
|
ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT = 0x0001,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The user has forced the input method open (such as by
|
||||||
|
* long-pressing menu) so it should not be closed until they
|
||||||
|
* explicitly do so.
|
||||||
|
*/
|
||||||
ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED = 0x0002,
|
ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED = 0x0002,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -290,7 +311,15 @@ void ANativeActivity_showSoftInput(ANativeActivity* activity, uint32_t flags);
|
|||||||
* API for documentation.
|
* API for documentation.
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
|
/**
|
||||||
|
* The soft input window should only be hidden if it was not
|
||||||
|
* explicitly shown by the user.
|
||||||
|
*/
|
||||||
ANATIVEACTIVITY_HIDE_SOFT_INPUT_IMPLICIT_ONLY = 0x0001,
|
ANATIVEACTIVITY_HIDE_SOFT_INPUT_IMPLICIT_ONLY = 0x0001,
|
||||||
|
/**
|
||||||
|
* The soft input window should normally be hidden, unless it was
|
||||||
|
* originally shown with {@link ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED}.
|
||||||
|
*/
|
||||||
ANATIVEACTIVITY_HIDE_SOFT_INPUT_NOT_ALWAYS = 0x0002,
|
ANATIVEACTIVITY_HIDE_SOFT_INPUT_NOT_ALWAYS = 0x0002,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -308,3 +337,4 @@ void ANativeActivity_hideSoftInput(ANativeActivity* activity, uint32_t flags);
|
|||||||
|
|
||||||
#endif // ANDROID_NATIVE_ACTIVITY_H
|
#endif // ANDROID_NATIVE_ACTIVITY_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup NativeActivity Native Activity
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file native_window.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_NATIVE_WINDOW_H
|
#ifndef ANDROID_NATIVE_WINDOW_H
|
||||||
#define ANDROID_NATIVE_WINDOW_H
|
#define ANDROID_NATIVE_WINDOW_H
|
||||||
|
|
||||||
@ -23,18 +32,31 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Pixel formats that a window can use.
|
* Pixel formats that a window can use.
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
|
/** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Alpha: 8 bits. **/
|
||||||
WINDOW_FORMAT_RGBA_8888 = 1,
|
WINDOW_FORMAT_RGBA_8888 = 1,
|
||||||
|
/** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Unused: 8 bits. **/
|
||||||
WINDOW_FORMAT_RGBX_8888 = 2,
|
WINDOW_FORMAT_RGBX_8888 = 2,
|
||||||
|
/** Red: 5 bits, Green: 6 bits, Blue: 5 bits. **/
|
||||||
WINDOW_FORMAT_RGB_565 = 4,
|
WINDOW_FORMAT_RGB_565 = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ANativeWindow;
|
struct ANativeWindow;
|
||||||
|
/**
|
||||||
|
* {@link ANativeWindow} is opaque type that provides access to a native window.
|
||||||
|
*
|
||||||
|
* A pointer can be obtained using ANativeWindow_fromSurface().
|
||||||
|
*/
|
||||||
typedef struct ANativeWindow ANativeWindow;
|
typedef struct ANativeWindow ANativeWindow;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ANativeWindow} is a struct that represents a windows buffer.
|
||||||
|
*
|
||||||
|
* A pointer can be obtained using ANativeWindow_lock().
|
||||||
|
*/
|
||||||
typedef struct ANativeWindow_Buffer {
|
typedef struct ANativeWindow_Buffer {
|
||||||
// The number of pixels that are show horizontally.
|
// The number of pixels that are show horizontally.
|
||||||
int32_t width;
|
int32_t width;
|
||||||
@ -67,25 +89,25 @@ void ANativeWindow_acquire(ANativeWindow* window);
|
|||||||
*/
|
*/
|
||||||
void ANativeWindow_release(ANativeWindow* window);
|
void ANativeWindow_release(ANativeWindow* window);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Return the current width in pixels of the window surface. Returns a
|
* Return the current width in pixels of the window surface. Returns a
|
||||||
* negative value on error.
|
* negative value on error.
|
||||||
*/
|
*/
|
||||||
int32_t ANativeWindow_getWidth(ANativeWindow* window);
|
int32_t ANativeWindow_getWidth(ANativeWindow* window);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Return the current height in pixels of the window surface. Returns a
|
* Return the current height in pixels of the window surface. Returns a
|
||||||
* negative value on error.
|
* negative value on error.
|
||||||
*/
|
*/
|
||||||
int32_t ANativeWindow_getHeight(ANativeWindow* window);
|
int32_t ANativeWindow_getHeight(ANativeWindow* window);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Return the current pixel format of the window surface. Returns a
|
* Return the current pixel format of the window surface. Returns a
|
||||||
* negative value on error.
|
* negative value on error.
|
||||||
*/
|
*/
|
||||||
int32_t ANativeWindow_getFormat(ANativeWindow* window);
|
int32_t ANativeWindow_getFormat(ANativeWindow* window);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Change the format and size of the window buffers.
|
* Change the format and size of the window buffers.
|
||||||
*
|
*
|
||||||
* The width and height control the number of pixels in the buffers, not the
|
* The width and height control the number of pixels in the buffers, not the
|
||||||
@ -124,3 +146,5 @@ int32_t ANativeWindow_unlockAndPost(ANativeWindow* window);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_NATIVE_WINDOW_H
|
#endif // ANDROID_NATIVE_WINDOW_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup NativeActivity Native Activity
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file native_window_jni.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_NATIVE_WINDOW_JNI_H
|
#ifndef ANDROID_NATIVE_WINDOW_JNI_H
|
||||||
#define ANDROID_NATIVE_WINDOW_JNI_H
|
#define ANDROID_NATIVE_WINDOW_JNI_H
|
||||||
|
|
||||||
@ -38,3 +47,5 @@ ANativeWindow* ANativeWindow_fromSurface(JNIEnv* env, jobject surface);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_NATIVE_WINDOW_H
|
#endif // ANDROID_NATIVE_WINDOW_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Storage
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file obb.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_OBB_H
|
#ifndef ANDROID_OBB_H
|
||||||
#define ANDROID_OBB_H
|
#define ANDROID_OBB_H
|
||||||
@ -25,9 +33,12 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct AObbInfo;
|
struct AObbInfo;
|
||||||
|
/** {@link AObbInfo} is an opaque type representing information for obb storage. */
|
||||||
typedef struct AObbInfo AObbInfo;
|
typedef struct AObbInfo AObbInfo;
|
||||||
|
|
||||||
|
/** Flag for an obb file, returned by AObbInfo_getFlags(). */
|
||||||
enum {
|
enum {
|
||||||
|
/** overlay */
|
||||||
AOBBINFO_OVERLAY = 0x0001,
|
AOBBINFO_OVERLAY = 0x0001,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -61,3 +72,5 @@ int32_t AObbInfo_getFlags(AObbInfo* obbInfo);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_OBB_H
|
#endif // ANDROID_OBB_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup NativeActivity Native Activity
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file rect.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_RECT_H
|
#ifndef ANDROID_RECT_H
|
||||||
#define ANDROID_RECT_H
|
#define ANDROID_RECT_H
|
||||||
@ -24,13 +32,24 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ARect} is a struct that represents a rectangular window area.
|
||||||
|
*
|
||||||
|
* It is used with {@link
|
||||||
|
* ANativeActivityCallbacks::onContentRectChanged} event callback and
|
||||||
|
* ANativeWindow_lock() function.
|
||||||
|
*/
|
||||||
typedef struct ARect {
|
typedef struct ARect {
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
typedef int32_t value_type;
|
typedef int32_t value_type;
|
||||||
#endif
|
#endif
|
||||||
|
/** left position */
|
||||||
int32_t left;
|
int32_t left;
|
||||||
|
/** top position */
|
||||||
int32_t top;
|
int32_t top;
|
||||||
|
/** left position */
|
||||||
int32_t right;
|
int32_t right;
|
||||||
|
/** bottom position */
|
||||||
int32_t bottom;
|
int32_t bottom;
|
||||||
} ARect;
|
} ARect;
|
||||||
|
|
||||||
@ -39,3 +58,5 @@ typedef struct ARect {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_RECT_H
|
#endif // ANDROID_RECT_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Sensor
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file sensor.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_SENSOR_H
|
#ifndef ANDROID_SENSOR_H
|
||||||
#define ANDROID_SENSOR_H
|
#define ANDROID_SENSOR_H
|
||||||
@ -34,7 +42,7 @@
|
|||||||
* - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES
|
* - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Structures and functions to receive and process sensor events in
|
* Structures and functions to receive and process sensor events in
|
||||||
* native code.
|
* native code.
|
||||||
*
|
*
|
||||||
@ -49,37 +57,82 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Sensor types
|
* Sensor types.
|
||||||
* (keep in sync with hardware/sensor.h)
|
* (keep in sync with hardware/sensor.h)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
/**
|
||||||
|
* {@link ASENSOR_TYPE_ACCELEROMETER}
|
||||||
|
* reporting-mode: continuous
|
||||||
|
*
|
||||||
|
* All values are in SI units (m/s^2) and measure the acceleration of the
|
||||||
|
* device minus the force of gravity.
|
||||||
|
*/
|
||||||
ASENSOR_TYPE_ACCELEROMETER = 1,
|
ASENSOR_TYPE_ACCELEROMETER = 1,
|
||||||
|
/**
|
||||||
|
* {@link ASENSOR_TYPE_MAGNETIC_FIELD}
|
||||||
|
* reporting-mode: continuous
|
||||||
|
*
|
||||||
|
* All values are in micro-Tesla (uT) and measure the geomagnetic
|
||||||
|
* field in the X, Y and Z axis.
|
||||||
|
*/
|
||||||
ASENSOR_TYPE_MAGNETIC_FIELD = 2,
|
ASENSOR_TYPE_MAGNETIC_FIELD = 2,
|
||||||
|
/**
|
||||||
|
* {@link ASENSOR_TYPE_GYROSCOPE}
|
||||||
|
* reporting-mode: continuous
|
||||||
|
*
|
||||||
|
* All values are in radians/second and measure the rate of rotation
|
||||||
|
* around the X, Y and Z axis.
|
||||||
|
*/
|
||||||
ASENSOR_TYPE_GYROSCOPE = 4,
|
ASENSOR_TYPE_GYROSCOPE = 4,
|
||||||
|
/**
|
||||||
|
* {@link ASENSOR_TYPE_LIGHT}
|
||||||
|
* reporting-mode: on-change
|
||||||
|
*
|
||||||
|
* The light sensor value is returned in SI lux units.
|
||||||
|
*/
|
||||||
ASENSOR_TYPE_LIGHT = 5,
|
ASENSOR_TYPE_LIGHT = 5,
|
||||||
|
/**
|
||||||
|
* {@link ASENSOR_TYPE_PROXIMITY}
|
||||||
|
* reporting-mode: on-change
|
||||||
|
*
|
||||||
|
* The proximity sensor which turns the screen off and back on during calls is the
|
||||||
|
* wake-up proximity sensor. Implement wake-up proximity sensor before implementing
|
||||||
|
* a non wake-up proximity sensor. For the wake-up proximity sensor set the flag
|
||||||
|
* SENSOR_FLAG_WAKE_UP.
|
||||||
|
* The value corresponds to the distance to the nearest object in centimeters.
|
||||||
|
*/
|
||||||
ASENSOR_TYPE_PROXIMITY = 8
|
ASENSOR_TYPE_PROXIMITY = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Sensor accuracy measure
|
* Sensor accuracy measure.
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
|
/** no contact */
|
||||||
ASENSOR_STATUS_NO_CONTACT = -1,
|
ASENSOR_STATUS_NO_CONTACT = -1,
|
||||||
|
/** unreliable */
|
||||||
ASENSOR_STATUS_UNRELIABLE = 0,
|
ASENSOR_STATUS_UNRELIABLE = 0,
|
||||||
|
/** low accuracy */
|
||||||
ASENSOR_STATUS_ACCURACY_LOW = 1,
|
ASENSOR_STATUS_ACCURACY_LOW = 1,
|
||||||
|
/** medium accuracy */
|
||||||
ASENSOR_STATUS_ACCURACY_MEDIUM = 2,
|
ASENSOR_STATUS_ACCURACY_MEDIUM = 2,
|
||||||
|
/** high accuracy */
|
||||||
ASENSOR_STATUS_ACCURACY_HIGH = 3
|
ASENSOR_STATUS_ACCURACY_HIGH = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Sensor Reporting Modes.
|
* Sensor Reporting Modes.
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
|
/** continuous reporting */
|
||||||
AREPORTING_MODE_CONTINUOUS = 0,
|
AREPORTING_MODE_CONTINUOUS = 0,
|
||||||
|
/** reporting on change */
|
||||||
AREPORTING_MODE_ON_CHANGE = 1,
|
AREPORTING_MODE_ON_CHANGE = 1,
|
||||||
|
/** on shot reporting */
|
||||||
AREPORTING_MODE_ONE_SHOT = 2,
|
AREPORTING_MODE_ONE_SHOT = 2,
|
||||||
|
/** special trigger reporting */
|
||||||
AREPORTING_MODE_SPECIAL_TRIGGER = 3
|
AREPORTING_MODE_SPECIAL_TRIGGER = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -87,14 +140,14 @@ enum {
|
|||||||
* A few useful constants
|
* A few useful constants
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Earth's gravity in m/s^2 */
|
/** Earth's gravity in m/s^2 */
|
||||||
#define ASENSOR_STANDARD_GRAVITY (9.80665f)
|
#define ASENSOR_STANDARD_GRAVITY (9.80665f)
|
||||||
/* Maximum magnetic field on Earth's surface in uT */
|
/** Maximum magnetic field on Earth's surface in uT */
|
||||||
#define ASENSOR_MAGNETIC_FIELD_EARTH_MAX (60.0f)
|
#define ASENSOR_MAGNETIC_FIELD_EARTH_MAX (60.0f)
|
||||||
/* Minimum magnetic field on Earth's surface in uT*/
|
/** Minimum magnetic field on Earth's surface in uT*/
|
||||||
#define ASENSOR_MAGNETIC_FIELD_EARTH_MIN (30.0f)
|
#define ASENSOR_MAGNETIC_FIELD_EARTH_MIN (30.0f)
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* A sensor event.
|
* A sensor event.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -180,19 +233,82 @@ typedef struct ASensorEvent {
|
|||||||
} ASensorEvent;
|
} ASensorEvent;
|
||||||
|
|
||||||
struct ASensorManager;
|
struct ASensorManager;
|
||||||
|
/**
|
||||||
|
* {@link ASensorManager} is an opaque type to manage sensors and
|
||||||
|
* events queues.
|
||||||
|
*
|
||||||
|
* {@link ASensorManager} is a singleton that can be obtained using
|
||||||
|
* ASensorManager_getInstance().
|
||||||
|
*
|
||||||
|
* This file provides a set of functions that uses {@link
|
||||||
|
* ASensorManager} to access and list hardware sensors, and
|
||||||
|
* create and destroy event queues:
|
||||||
|
* - ASensorManager_getSensorList()
|
||||||
|
* - ASensorManager_getDefaultSensor()
|
||||||
|
* - ASensorManager_getDefaultSensorEx()
|
||||||
|
* - ASensorManager_createEventQueue()
|
||||||
|
* - ASensorManager_destroyEventQueue()
|
||||||
|
*/
|
||||||
typedef struct ASensorManager ASensorManager;
|
typedef struct ASensorManager ASensorManager;
|
||||||
|
|
||||||
|
|
||||||
struct ASensorEventQueue;
|
struct ASensorEventQueue;
|
||||||
|
/**
|
||||||
|
* {@link ASensorEventQueue} is an opaque type that provides access to
|
||||||
|
* {@link ASensorEvent} from hardware sensors.
|
||||||
|
*
|
||||||
|
* A new {@link ASensorEventQueue} can be obtained using ASensorManager_createEventQueue().
|
||||||
|
*
|
||||||
|
* This file provides a set of functions to enable and disable
|
||||||
|
* sensors, check and get events, and set event rates on a {@link
|
||||||
|
* ASensorEventQueue}.
|
||||||
|
* - ASensorEventQueue_enableSensor()
|
||||||
|
* - ASensorEventQueue_disableSensor()
|
||||||
|
* - ASensorEventQueue_hasEvents()
|
||||||
|
* - ASensorEventQueue_getEvents()
|
||||||
|
* - ASensorEventQueue_setEventRate()
|
||||||
|
*/
|
||||||
typedef struct ASensorEventQueue ASensorEventQueue;
|
typedef struct ASensorEventQueue ASensorEventQueue;
|
||||||
|
|
||||||
struct ASensor;
|
struct ASensor;
|
||||||
|
/**
|
||||||
|
* {@link ASensor} is an opaque type that provides information about
|
||||||
|
* an hardware sensors.
|
||||||
|
*
|
||||||
|
* A {@link ASensor} pointer can be obtained using
|
||||||
|
* ASensorManager_getDefaultSensor(),
|
||||||
|
* ASensorManager_getDefaultSensorEx() or from a {@link ASensorList}.
|
||||||
|
*
|
||||||
|
* This file provides a set of functions to access properties of a
|
||||||
|
* {@link ASensor}:
|
||||||
|
* - ASensor_getName()
|
||||||
|
* - ASensor_getVendor()
|
||||||
|
* - ASensor_getType()
|
||||||
|
* - ASensor_getResolution()
|
||||||
|
* - ASensor_getMinDelay()
|
||||||
|
* - ASensor_getFifoMaxEventCount()
|
||||||
|
* - ASensor_getFifoReservedEventCount()
|
||||||
|
* - ASensor_getStringType()
|
||||||
|
* - ASensor_getReportingMode()
|
||||||
|
* - ASensor_isWakeUpSensor()
|
||||||
|
*/
|
||||||
typedef struct ASensor ASensor;
|
typedef struct ASensor ASensor;
|
||||||
|
/**
|
||||||
|
* {@link ASensorRef} is a type for constant pointers to {@link ASensor}.
|
||||||
|
*
|
||||||
|
* This is used to define entry in {@link ASensorList} arrays.
|
||||||
|
*/
|
||||||
typedef ASensor const* ASensorRef;
|
typedef ASensor const* ASensorRef;
|
||||||
|
/**
|
||||||
|
* {@link ASensorList} is an array of reference to {@link ASensor}.
|
||||||
|
*
|
||||||
|
* A {@link ASensorList} can be initialized using ASensorManager_getSensorList().
|
||||||
|
*/
|
||||||
typedef ASensorRef const* ASensorList;
|
typedef ASensorRef const* ASensorList;
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Get a reference to the sensor manager. ASensorManager is a singleton
|
* Get a reference to the sensor manager. ASensorManager is a singleton
|
||||||
* per package as different packages may have access to different sensors.
|
* per package as different packages may have access to different sensors.
|
||||||
*
|
*
|
||||||
@ -216,31 +332,35 @@ __attribute__ ((deprecated)) ASensorManager* ASensorManager_getInstance();
|
|||||||
*/
|
*/
|
||||||
ASensorManager* ASensorManager_getInstanceForPackage(const char* packageName);
|
ASensorManager* ASensorManager_getInstanceForPackage(const char* packageName);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the list of available sensors.
|
* Returns the list of available sensors.
|
||||||
*/
|
*/
|
||||||
int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list);
|
int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the default sensor for the given type, or NULL if no sensor
|
* Returns the default sensor for the given type, or NULL if no sensor
|
||||||
* of that type exists.
|
* of that type exists.
|
||||||
*/
|
*/
|
||||||
ASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type);
|
ASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the default sensor with the given type and wakeUp properties or NULL if no sensor
|
* Returns the default sensor with the given type and wakeUp properties or NULL if no sensor
|
||||||
* of this type and wakeUp properties exists.
|
* of this type and wakeUp properties exists.
|
||||||
*/
|
*/
|
||||||
ASensor const* ASensorManager_getDefaultSensorEx(ASensorManager* manager, int type,
|
ASensor const* ASensorManager_getDefaultSensorEx(ASensorManager* manager, int type,
|
||||||
bool wakeUp);
|
bool wakeUp);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Creates a new sensor event queue and associate it with a looper.
|
* Creates a new sensor event queue and associate it with a looper.
|
||||||
|
*
|
||||||
|
* "ident" is a identifier for the events that will be returned when
|
||||||
|
* calling ALooper_pollOnce(). The identifier must be >= 0, or
|
||||||
|
* ALOOPER_POLL_CALLBACK if providing a non-NULL callback.
|
||||||
*/
|
*/
|
||||||
ASensorEventQueue* ASensorManager_createEventQueue(ASensorManager* manager,
|
ASensorEventQueue* ASensorManager_createEventQueue(ASensorManager* manager,
|
||||||
ALooper* looper, int ident, ALooper_callbackFunc callback, void* data);
|
ALooper* looper, int ident, ALooper_callbackFunc callback, void* data);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Destroys the event queue and free all resources associated to it.
|
* Destroys the event queue and free all resources associated to it.
|
||||||
*/
|
*/
|
||||||
int ASensorManager_destroyEventQueue(ASensorManager* manager, ASensorEventQueue* queue);
|
int ASensorManager_destroyEventQueue(ASensorManager* manager, ASensorEventQueue* queue);
|
||||||
@ -248,17 +368,17 @@ int ASensorManager_destroyEventQueue(ASensorManager* manager, ASensorEventQueue*
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Enable the selected sensor. Returns a negative error code on failure.
|
* Enable the selected sensor. Returns a negative error code on failure.
|
||||||
*/
|
*/
|
||||||
int ASensorEventQueue_enableSensor(ASensorEventQueue* queue, ASensor const* sensor);
|
int ASensorEventQueue_enableSensor(ASensorEventQueue* queue, ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Disable the selected sensor. Returns a negative error code on failure.
|
* Disable the selected sensor. Returns a negative error code on failure.
|
||||||
*/
|
*/
|
||||||
int ASensorEventQueue_disableSensor(ASensorEventQueue* queue, ASensor const* sensor);
|
int ASensorEventQueue_disableSensor(ASensorEventQueue* queue, ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Sets the delivery rate of events in microseconds for the given sensor.
|
* Sets the delivery rate of events in microseconds for the given sensor.
|
||||||
* Note that this is a hint only, generally event will arrive at a higher
|
* Note that this is a hint only, generally event will arrive at a higher
|
||||||
* rate. It is an error to set a rate inferior to the value returned by
|
* rate. It is an error to set a rate inferior to the value returned by
|
||||||
@ -267,14 +387,14 @@ int ASensorEventQueue_disableSensor(ASensorEventQueue* queue, ASensor const* sen
|
|||||||
*/
|
*/
|
||||||
int ASensorEventQueue_setEventRate(ASensorEventQueue* queue, ASensor const* sensor, int32_t usec);
|
int ASensorEventQueue_setEventRate(ASensorEventQueue* queue, ASensor const* sensor, int32_t usec);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns true if there are one or more events available in the
|
* Returns true if there are one or more events available in the
|
||||||
* sensor queue. Returns 1 if the queue has events; 0 if
|
* sensor queue. Returns 1 if the queue has events; 0 if
|
||||||
* it does not have events; and a negative value if there is an error.
|
* it does not have events; and a negative value if there is an error.
|
||||||
*/
|
*/
|
||||||
int ASensorEventQueue_hasEvents(ASensorEventQueue* queue);
|
int ASensorEventQueue_hasEvents(ASensorEventQueue* queue);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the next available events from the queue. Returns a negative
|
* Returns the next available events from the queue. Returns a negative
|
||||||
* value if no events are available or an error has occurred, otherwise
|
* value if no events are available or an error has occurred, otherwise
|
||||||
* the number of events returned.
|
* the number of events returned.
|
||||||
@ -293,55 +413,55 @@ ssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue,
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns this sensor's name (non localized)
|
* Returns this sensor's name (non localized)
|
||||||
*/
|
*/
|
||||||
const char* ASensor_getName(ASensor const* sensor);
|
const char* ASensor_getName(ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns this sensor's vendor's name (non localized)
|
* Returns this sensor's vendor's name (non localized)
|
||||||
*/
|
*/
|
||||||
const char* ASensor_getVendor(ASensor const* sensor);
|
const char* ASensor_getVendor(ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Return this sensor's type
|
* Return this sensor's type
|
||||||
*/
|
*/
|
||||||
int ASensor_getType(ASensor const* sensor);
|
int ASensor_getType(ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns this sensors's resolution
|
* Returns this sensors's resolution
|
||||||
*/
|
*/
|
||||||
float ASensor_getResolution(ASensor const* sensor);
|
float ASensor_getResolution(ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the minimum delay allowed between events in microseconds.
|
* Returns the minimum delay allowed between events in microseconds.
|
||||||
* A value of zero means that this sensor doesn't report events at a
|
* A value of zero means that this sensor doesn't report events at a
|
||||||
* constant rate, but rather only when a new data is available.
|
* constant rate, but rather only when a new data is available.
|
||||||
*/
|
*/
|
||||||
int ASensor_getMinDelay(ASensor const* sensor);
|
int ASensor_getMinDelay(ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the maximum size of batches for this sensor. Batches will often be
|
* Returns the maximum size of batches for this sensor. Batches will often be
|
||||||
* smaller, as the hardware fifo might be used for other sensors.
|
* smaller, as the hardware fifo might be used for other sensors.
|
||||||
*/
|
*/
|
||||||
int ASensor_getFifoMaxEventCount(ASensor const* sensor);
|
int ASensor_getFifoMaxEventCount(ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the hardware batch fifo size reserved to this sensor.
|
* Returns the hardware batch fifo size reserved to this sensor.
|
||||||
*/
|
*/
|
||||||
int ASensor_getFifoReservedEventCount(ASensor const* sensor);
|
int ASensor_getFifoReservedEventCount(ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns this sensor's string type.
|
* Returns this sensor's string type.
|
||||||
*/
|
*/
|
||||||
const char* ASensor_getStringType(ASensor const* sensor);
|
const char* ASensor_getStringType(ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns the reporting mode for this sensor. One of AREPORTING_MODE_* constants.
|
* Returns the reporting mode for this sensor. One of AREPORTING_MODE_* constants.
|
||||||
*/
|
*/
|
||||||
int ASensor_getReportingMode(ASensor const* sensor);
|
int ASensor_getReportingMode(ASensor const* sensor);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns true if this is a wake up sensor, false otherwise.
|
* Returns true if this is a wake up sensor, false otherwise.
|
||||||
*/
|
*/
|
||||||
bool ASensor_isWakeUpSensor(ASensor const* sensor);
|
bool ASensor_isWakeUpSensor(ASensor const* sensor);
|
||||||
@ -351,3 +471,5 @@ bool ASensor_isWakeUpSensor(ASensor const* sensor);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_SENSOR_H
|
#endif // ANDROID_SENSOR_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup Storage
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file storage_manager.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_STORAGE_MANAGER_H
|
#ifndef ANDROID_STORAGE_MANAGER_H
|
||||||
#define ANDROID_STORAGE_MANAGER_H
|
#define ANDROID_STORAGE_MANAGER_H
|
||||||
@ -25,55 +33,62 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct AStorageManager;
|
struct AStorageManager;
|
||||||
|
/**
|
||||||
|
* {@link AStorageManager} manages application OBB storage, a pointer
|
||||||
|
* can be obtained with AStorageManager_new().
|
||||||
|
*/
|
||||||
typedef struct AStorageManager AStorageManager;
|
typedef struct AStorageManager AStorageManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The different states of a OBB storage passed to AStorageManager_obbCallbackFunc().
|
||||||
|
*/
|
||||||
enum {
|
enum {
|
||||||
/*
|
/**
|
||||||
* The OBB container is now mounted and ready for use. Can be returned
|
* The OBB container is now mounted and ready for use. Can be returned
|
||||||
* as the status for callbacks made during asynchronous OBB actions.
|
* as the status for callbacks made during asynchronous OBB actions.
|
||||||
*/
|
*/
|
||||||
AOBB_STATE_MOUNTED = 1,
|
AOBB_STATE_MOUNTED = 1,
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* The OBB container is now unmounted and not usable. Can be returned
|
* The OBB container is now unmounted and not usable. Can be returned
|
||||||
* as the status for callbacks made during asynchronous OBB actions.
|
* as the status for callbacks made during asynchronous OBB actions.
|
||||||
*/
|
*/
|
||||||
AOBB_STATE_UNMOUNTED = 2,
|
AOBB_STATE_UNMOUNTED = 2,
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* There was an internal system error encountered while trying to
|
* There was an internal system error encountered while trying to
|
||||||
* mount the OBB. Can be returned as the status for callbacks made
|
* mount the OBB. Can be returned as the status for callbacks made
|
||||||
* during asynchronous OBB actions.
|
* during asynchronous OBB actions.
|
||||||
*/
|
*/
|
||||||
AOBB_STATE_ERROR_INTERNAL = 20,
|
AOBB_STATE_ERROR_INTERNAL = 20,
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* The OBB could not be mounted by the system. Can be returned as the
|
* The OBB could not be mounted by the system. Can be returned as the
|
||||||
* status for callbacks made during asynchronous OBB actions.
|
* status for callbacks made during asynchronous OBB actions.
|
||||||
*/
|
*/
|
||||||
AOBB_STATE_ERROR_COULD_NOT_MOUNT = 21,
|
AOBB_STATE_ERROR_COULD_NOT_MOUNT = 21,
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* The OBB could not be unmounted. This most likely indicates that a
|
* The OBB could not be unmounted. This most likely indicates that a
|
||||||
* file is in use on the OBB. Can be returned as the status for
|
* file is in use on the OBB. Can be returned as the status for
|
||||||
* callbacks made during asynchronous OBB actions.
|
* callbacks made during asynchronous OBB actions.
|
||||||
*/
|
*/
|
||||||
AOBB_STATE_ERROR_COULD_NOT_UNMOUNT = 22,
|
AOBB_STATE_ERROR_COULD_NOT_UNMOUNT = 22,
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* A call was made to unmount the OBB when it was not mounted. Can be
|
* A call was made to unmount the OBB when it was not mounted. Can be
|
||||||
* returned as the status for callbacks made during asynchronous OBB
|
* returned as the status for callbacks made during asynchronous OBB
|
||||||
* actions.
|
* actions.
|
||||||
*/
|
*/
|
||||||
AOBB_STATE_ERROR_NOT_MOUNTED = 23,
|
AOBB_STATE_ERROR_NOT_MOUNTED = 23,
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* The OBB has already been mounted. Can be returned as the status for
|
* The OBB has already been mounted. Can be returned as the status for
|
||||||
* callbacks made during asynchronous OBB actions.
|
* callbacks made during asynchronous OBB actions.
|
||||||
*/
|
*/
|
||||||
AOBB_STATE_ERROR_ALREADY_MOUNTED = 24,
|
AOBB_STATE_ERROR_ALREADY_MOUNTED = 24,
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* The current application does not have permission to use this OBB.
|
* The current application does not have permission to use this OBB.
|
||||||
* This could be because the OBB indicates it's owned by a different
|
* This could be because the OBB indicates it's owned by a different
|
||||||
* package. Can be returned as the status for callbacks made during
|
* package. Can be returned as the status for callbacks made during
|
||||||
@ -94,6 +109,16 @@ void AStorageManager_delete(AStorageManager* mgr);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback function for asynchronous calls made on OBB files.
|
* Callback function for asynchronous calls made on OBB files.
|
||||||
|
*
|
||||||
|
* "state" is one of the following constants:
|
||||||
|
* - {@link AOBB_STATE_MOUNTED}
|
||||||
|
* - {@link AOBB_STATE_UNMOUNTED}
|
||||||
|
* - {@link AOBB_STATE_ERROR_INTERNAL}
|
||||||
|
* - {@link AOBB_STATE_ERROR_COULD_NOT_MOUNT}
|
||||||
|
* - {@link AOBB_STATE_ERROR_COULD_NOT_UNMOUNT}
|
||||||
|
* - {@link AOBB_STATE_ERROR_NOT_MOUNTED}
|
||||||
|
* - {@link AOBB_STATE_ERROR_ALREADY_MOUNTED}
|
||||||
|
* - {@link AOBB_STATE_ERROR_PERMISSION_DENIED}
|
||||||
*/
|
*/
|
||||||
typedef void (*AStorageManager_obbCallbackFunc)(const char* filename, const int32_t state, void* data);
|
typedef void (*AStorageManager_obbCallbackFunc)(const char* filename, const int32_t state, void* data);
|
||||||
|
|
||||||
@ -125,3 +150,5 @@ const char* AStorageManager_getMountedObbPath(AStorageManager* mgr, const char*
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_STORAGE_MANAGER_H
|
#endif // ANDROID_STORAGE_MANAGER_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -14,6 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup NativeActivity Native Activity
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file window.h
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef ANDROID_WINDOW_H
|
#ifndef ANDROID_WINDOW_H
|
||||||
#define ANDROID_WINDOW_H
|
#define ANDROID_WINDOW_H
|
||||||
@ -26,28 +34,184 @@ extern "C" {
|
|||||||
* Window flags, as per the Java API at android.view.WindowManager.LayoutParams.
|
* Window flags, as per the Java API at android.view.WindowManager.LayoutParams.
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
|
/**
|
||||||
|
* As long as this window is visible to the user, allow the lock
|
||||||
|
* screen to activate while the screen is on. This can be used
|
||||||
|
* independently, or in combination with {@link
|
||||||
|
* AWINDOW_FLAG_KEEP_SCREEN_ON} and/or {@link
|
||||||
|
* AWINDOW_FLAG_SHOW_WHEN_LOCKED}
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 0x00000001,
|
AWINDOW_FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 0x00000001,
|
||||||
|
/** Everything behind this window will be dimmed. */
|
||||||
AWINDOW_FLAG_DIM_BEHIND = 0x00000002,
|
AWINDOW_FLAG_DIM_BEHIND = 0x00000002,
|
||||||
|
/**
|
||||||
|
* Blur everything behind this window.
|
||||||
|
* @deprecated Blurring is no longer supported.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_BLUR_BEHIND = 0x00000004,
|
AWINDOW_FLAG_BLUR_BEHIND = 0x00000004,
|
||||||
|
/**
|
||||||
|
* This window won't ever get key input focus, so the
|
||||||
|
* user can not send key or other button events to it. Those will
|
||||||
|
* instead go to whatever focusable window is behind it. This flag
|
||||||
|
* will also enable {@link AWINDOW_FLAG_NOT_TOUCH_MODAL} whether or not that
|
||||||
|
* is explicitly set.
|
||||||
|
*
|
||||||
|
* Setting this flag also implies that the window will not need to
|
||||||
|
* interact with
|
||||||
|
* a soft input method, so it will be Z-ordered and positioned
|
||||||
|
* independently of any active input method (typically this means it
|
||||||
|
* gets Z-ordered on top of the input method, so it can use the full
|
||||||
|
* screen for its content and cover the input method if needed. You
|
||||||
|
* can use {@link AWINDOW_FLAG_ALT_FOCUSABLE_IM} to modify this behavior.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_NOT_FOCUSABLE = 0x00000008,
|
AWINDOW_FLAG_NOT_FOCUSABLE = 0x00000008,
|
||||||
|
/** this window can never receive touch events. */
|
||||||
AWINDOW_FLAG_NOT_TOUCHABLE = 0x00000010,
|
AWINDOW_FLAG_NOT_TOUCHABLE = 0x00000010,
|
||||||
|
/**
|
||||||
|
* Even when this window is focusable (its
|
||||||
|
* {@link AWINDOW_FLAG_NOT_FOCUSABLE} is not set), allow any pointer events
|
||||||
|
* outside of the window to be sent to the windows behind it. Otherwise
|
||||||
|
* it will consume all pointer events itself, regardless of whether they
|
||||||
|
* are inside of the window.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_NOT_TOUCH_MODAL = 0x00000020,
|
AWINDOW_FLAG_NOT_TOUCH_MODAL = 0x00000020,
|
||||||
|
/**
|
||||||
|
* When set, if the device is asleep when the touch
|
||||||
|
* screen is pressed, you will receive this first touch event. Usually
|
||||||
|
* the first touch event is consumed by the system since the user can
|
||||||
|
* not see what they are pressing on.
|
||||||
|
*
|
||||||
|
* @deprecated This flag has no effect.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_TOUCHABLE_WHEN_WAKING = 0x00000040,
|
AWINDOW_FLAG_TOUCHABLE_WHEN_WAKING = 0x00000040,
|
||||||
|
/**
|
||||||
|
* As long as this window is visible to the user, keep
|
||||||
|
* the device's screen turned on and bright.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_KEEP_SCREEN_ON = 0x00000080,
|
AWINDOW_FLAG_KEEP_SCREEN_ON = 0x00000080,
|
||||||
|
/**
|
||||||
|
* Place the window within the entire screen, ignoring
|
||||||
|
* decorations around the border (such as the status bar). The
|
||||||
|
* window must correctly position its contents to take the screen
|
||||||
|
* decoration into account.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_LAYOUT_IN_SCREEN = 0x00000100,
|
AWINDOW_FLAG_LAYOUT_IN_SCREEN = 0x00000100,
|
||||||
|
/** allow window to extend outside of the screen. */
|
||||||
AWINDOW_FLAG_LAYOUT_NO_LIMITS = 0x00000200,
|
AWINDOW_FLAG_LAYOUT_NO_LIMITS = 0x00000200,
|
||||||
|
/**
|
||||||
|
* Hide all screen decorations (such as the status
|
||||||
|
* bar) while this window is displayed. This allows the window to
|
||||||
|
* use the entire display space for itself -- the status bar will
|
||||||
|
* be hidden when an app window with this flag set is on the top
|
||||||
|
* layer. A fullscreen window will ignore a value of {@link
|
||||||
|
* AWINDOW_SOFT_INPUT_ADJUST_RESIZE}; the window will stay
|
||||||
|
* fullscreen and will not resize.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_FULLSCREEN = 0x00000400,
|
AWINDOW_FLAG_FULLSCREEN = 0x00000400,
|
||||||
|
/**
|
||||||
|
* Override {@link AWINDOW_FLAG_FULLSCREEN} and force the
|
||||||
|
* screen decorations (such as the status bar) to be shown.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_FORCE_NOT_FULLSCREEN = 0x00000800,
|
AWINDOW_FLAG_FORCE_NOT_FULLSCREEN = 0x00000800,
|
||||||
|
/**
|
||||||
|
* Turn on dithering when compositing this window to
|
||||||
|
* the screen.
|
||||||
|
* @deprecated This flag is no longer used.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_DITHER = 0x00001000,
|
AWINDOW_FLAG_DITHER = 0x00001000,
|
||||||
|
/**
|
||||||
|
* Treat the content of the window as secure, preventing
|
||||||
|
* it from appearing in screenshots or from being viewed on non-secure
|
||||||
|
* displays.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_SECURE = 0x00002000,
|
AWINDOW_FLAG_SECURE = 0x00002000,
|
||||||
|
/**
|
||||||
|
* A special mode where the layout parameters are used
|
||||||
|
* to perform scaling of the surface when it is composited to the
|
||||||
|
* screen.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_SCALED = 0x00004000,
|
AWINDOW_FLAG_SCALED = 0x00004000,
|
||||||
|
/**
|
||||||
|
* Intended for windows that will often be used when the user is
|
||||||
|
* holding the screen against their face, it will aggressively
|
||||||
|
* filter the event stream to prevent unintended presses in this
|
||||||
|
* situation that may not be desired for a particular window, when
|
||||||
|
* such an event stream is detected, the application will receive
|
||||||
|
* a {@link AMOTION_EVENT_ACTION_CANCEL} to indicate this so
|
||||||
|
* applications can handle this accordingly by taking no action on
|
||||||
|
* the event until the finger is released.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_IGNORE_CHEEK_PRESSES = 0x00008000,
|
AWINDOW_FLAG_IGNORE_CHEEK_PRESSES = 0x00008000,
|
||||||
|
/**
|
||||||
|
* A special option only for use in combination with
|
||||||
|
* {@link AWINDOW_FLAG_LAYOUT_IN_SCREEN}. When requesting layout in the
|
||||||
|
* screen your window may appear on top of or behind screen decorations
|
||||||
|
* such as the status bar. By also including this flag, the window
|
||||||
|
* manager will report the inset rectangle needed to ensure your
|
||||||
|
* content is not covered by screen decorations.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_LAYOUT_INSET_DECOR = 0x00010000,
|
AWINDOW_FLAG_LAYOUT_INSET_DECOR = 0x00010000,
|
||||||
|
/**
|
||||||
|
* Invert the state of {@link AWINDOW_FLAG_NOT_FOCUSABLE} with
|
||||||
|
* respect to how this window interacts with the current method.
|
||||||
|
* That is, if FLAG_NOT_FOCUSABLE is set and this flag is set,
|
||||||
|
* then the window will behave as if it needs to interact with the
|
||||||
|
* input method and thus be placed behind/away from it; if {@link
|
||||||
|
* AWINDOW_FLAG_NOT_FOCUSABLE} is not set and this flag is set,
|
||||||
|
* then the window will behave as if it doesn't need to interact
|
||||||
|
* with the input method and can be placed to use more space and
|
||||||
|
* cover the input method.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_ALT_FOCUSABLE_IM = 0x00020000,
|
AWINDOW_FLAG_ALT_FOCUSABLE_IM = 0x00020000,
|
||||||
|
/**
|
||||||
|
* If you have set {@link AWINDOW_FLAG_NOT_TOUCH_MODAL}, you
|
||||||
|
* can set this flag to receive a single special MotionEvent with
|
||||||
|
* the action
|
||||||
|
* {@link AMOTION_EVENT_ACTION_OUTSIDE} for
|
||||||
|
* touches that occur outside of your window. Note that you will not
|
||||||
|
* receive the full down/move/up gesture, only the location of the
|
||||||
|
* first down as an {@link AMOTION_EVENT_ACTION_OUTSIDE}.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000,
|
AWINDOW_FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000,
|
||||||
|
/**
|
||||||
|
* Special flag to let windows be shown when the screen
|
||||||
|
* is locked. This will let application windows take precedence over
|
||||||
|
* key guard or any other lock screens. Can be used with
|
||||||
|
* {@link AWINDOW_FLAG_KEEP_SCREEN_ON} to turn screen on and display windows
|
||||||
|
* directly before showing the key guard window. Can be used with
|
||||||
|
* {@link AWINDOW_FLAG_DISMISS_KEYGUARD} to automatically fully dismisss
|
||||||
|
* non-secure keyguards. This flag only applies to the top-most
|
||||||
|
* full-screen window.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_SHOW_WHEN_LOCKED = 0x00080000,
|
AWINDOW_FLAG_SHOW_WHEN_LOCKED = 0x00080000,
|
||||||
|
/**
|
||||||
|
* Ask that the system wallpaper be shown behind
|
||||||
|
* your window. The window surface must be translucent to be able
|
||||||
|
* to actually see the wallpaper behind it; this flag just ensures
|
||||||
|
* that the wallpaper surface will be there if this window actually
|
||||||
|
* has translucent regions.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_SHOW_WALLPAPER = 0x00100000,
|
AWINDOW_FLAG_SHOW_WALLPAPER = 0x00100000,
|
||||||
|
/**
|
||||||
|
* When set as a window is being added or made
|
||||||
|
* visible, once the window has been shown then the system will
|
||||||
|
* poke the power manager's user activity (as if the user had woken
|
||||||
|
* up the device) to turn the screen on.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_TURN_SCREEN_ON = 0x00200000,
|
AWINDOW_FLAG_TURN_SCREEN_ON = 0x00200000,
|
||||||
|
/**
|
||||||
|
* When set the window will cause the keyguard to
|
||||||
|
* be dismissed, only if it is not a secure lock keyguard. Because such
|
||||||
|
* a keyguard is not needed for security, it will never re-appear if
|
||||||
|
* the user navigates to another window (in contrast to
|
||||||
|
* {@link AWINDOW_FLAG_SHOW_WHEN_LOCKED}, which will only temporarily
|
||||||
|
* hide both secure and non-secure keyguards but ensure they reappear
|
||||||
|
* when the user moves to another UI that doesn't hide them).
|
||||||
|
* If the keyguard is currently active and is secure (requires an
|
||||||
|
* unlock pattern) than the user will still need to confirm it before
|
||||||
|
* seeing this window, unless {@link AWINDOW_FLAG_SHOW_WHEN_LOCKED} has
|
||||||
|
* also been set.
|
||||||
|
*/
|
||||||
AWINDOW_FLAG_DISMISS_KEYGUARD = 0x00400000,
|
AWINDOW_FLAG_DISMISS_KEYGUARD = 0x00400000,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -56,3 +220,5 @@ enum {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // ANDROID_WINDOW_H
|
#endif // ANDROID_WINDOW_H
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
@ -58,6 +58,7 @@ struct BatteryProperties {
|
|||||||
bool chargerAcOnline;
|
bool chargerAcOnline;
|
||||||
bool chargerUsbOnline;
|
bool chargerUsbOnline;
|
||||||
bool chargerWirelessOnline;
|
bool chargerWirelessOnline;
|
||||||
|
int maxChargingCurrent;
|
||||||
int batteryStatus;
|
int batteryStatus;
|
||||||
int batteryHealth;
|
int batteryHealth;
|
||||||
bool batteryPresent;
|
bool batteryPresent;
|
||||||
|
@ -51,57 +51,7 @@ class SensorManager :
|
|||||||
public ASensorManager
|
public ASensorManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static SensorManager& getInstanceForPackage(const String16& packageName) {
|
static SensorManager& getInstanceForPackage(const String16& packageName);
|
||||||
Mutex::Autolock _l(sLock);
|
|
||||||
|
|
||||||
SensorManager* sensorManager;
|
|
||||||
std::map<String16, SensorManager*>::iterator iterator =
|
|
||||||
sPackageInstances.find(packageName);
|
|
||||||
|
|
||||||
if (iterator != sPackageInstances.end()) {
|
|
||||||
sensorManager = iterator->second;
|
|
||||||
} else {
|
|
||||||
String16 opPackageName = packageName;
|
|
||||||
|
|
||||||
// It is possible that the calling code has no access to the package name.
|
|
||||||
// In this case we will get the packages for the calling UID and pick the
|
|
||||||
// first one for attributing the app op. This will work correctly for
|
|
||||||
// runtime permissions as for legacy apps we will toggle the app op for
|
|
||||||
// all packages in the UID. The caveat is that the operation may be attributed
|
|
||||||
// to the wrong package and stats based on app ops may be slightly off.
|
|
||||||
if (opPackageName.size() <= 0) {
|
|
||||||
sp<IBinder> binder = defaultServiceManager()->getService(String16("permission"));
|
|
||||||
if (binder != 0) {
|
|
||||||
const uid_t uid = IPCThreadState::self()->getCallingUid();
|
|
||||||
Vector<String16> packages;
|
|
||||||
interface_cast<IPermissionController>(binder)->getPackagesForUid(uid, packages);
|
|
||||||
if (!packages.isEmpty()) {
|
|
||||||
opPackageName = packages[0];
|
|
||||||
} else {
|
|
||||||
ALOGE("No packages for calling UID");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ALOGE("Cannot get permission service");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sensorManager = new SensorManager(opPackageName);
|
|
||||||
|
|
||||||
// If we had no package name, we looked it up from the UID and the sensor
|
|
||||||
// manager instance we created should also be mapped to the empty package
|
|
||||||
// name, to avoid looking up the packages for a UID and get the same result.
|
|
||||||
if (packageName.size() <= 0) {
|
|
||||||
sPackageInstances.insert(std::make_pair(String16(), sensorManager));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stash the per package sensor manager.
|
|
||||||
sPackageInstances.insert(std::make_pair(opPackageName, sensorManager));
|
|
||||||
}
|
|
||||||
|
|
||||||
return *sensorManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
SensorManager(const String16& opPackageName);
|
|
||||||
~SensorManager();
|
~SensorManager();
|
||||||
|
|
||||||
ssize_t getSensorList(Sensor const* const** list) const;
|
ssize_t getSensorList(Sensor const* const** list) const;
|
||||||
@ -113,6 +63,7 @@ private:
|
|||||||
// DeathRecipient interface
|
// DeathRecipient interface
|
||||||
void sensorManagerDied();
|
void sensorManagerDied();
|
||||||
|
|
||||||
|
SensorManager(const String16& opPackageName);
|
||||||
status_t assertStateLocked() const;
|
status_t assertStateLocked() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -303,10 +303,6 @@ static const InputEventLabel KEYCODES[] = {
|
|||||||
DEFINE_KEYCODE(NAVIGATE_NEXT),
|
DEFINE_KEYCODE(NAVIGATE_NEXT),
|
||||||
DEFINE_KEYCODE(NAVIGATE_IN),
|
DEFINE_KEYCODE(NAVIGATE_IN),
|
||||||
DEFINE_KEYCODE(NAVIGATE_OUT),
|
DEFINE_KEYCODE(NAVIGATE_OUT),
|
||||||
DEFINE_KEYCODE(MEDIA_SKIP_FORWARD),
|
|
||||||
DEFINE_KEYCODE(MEDIA_SKIP_BACKWARD),
|
|
||||||
DEFINE_KEYCODE(MEDIA_STEP_FORWARD),
|
|
||||||
DEFINE_KEYCODE(MEDIA_STEP_BACKWARD),
|
|
||||||
|
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
};
|
};
|
||||||
|
@ -36,6 +36,7 @@ struct DisplayInfo {
|
|||||||
bool secure;
|
bool secure;
|
||||||
nsecs_t appVsyncOffset;
|
nsecs_t appVsyncOffset;
|
||||||
nsecs_t presentationDeadline;
|
nsecs_t presentationDeadline;
|
||||||
|
int colorTransform;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Display orientations as defined in Surface.java and ISurfaceComposer.h. */
|
/* Display orientations as defined in Surface.java and ISurfaceComposer.h. */
|
||||||
|
@ -348,7 +348,7 @@ status_t BnGraphicBufferProducer::onTransact(
|
|||||||
uint32_t height = data.readUint32();
|
uint32_t height = data.readUint32();
|
||||||
PixelFormat format = static_cast<PixelFormat>(data.readInt32());
|
PixelFormat format = static_cast<PixelFormat>(data.readInt32());
|
||||||
uint32_t usage = data.readUint32();
|
uint32_t usage = data.readUint32();
|
||||||
int buf;
|
int buf = 0;
|
||||||
sp<Fence> fence;
|
sp<Fence> fence;
|
||||||
int result = dequeueBuffer(&buf, &fence, async, width, height,
|
int result = dequeueBuffer(&buf, &fence, async, width, height,
|
||||||
format, usage);
|
format, usage);
|
||||||
@ -416,7 +416,7 @@ status_t BnGraphicBufferProducer::onTransact(
|
|||||||
}
|
}
|
||||||
case QUERY: {
|
case QUERY: {
|
||||||
CHECK_INTERFACE(IGraphicBufferProducer, data, reply);
|
CHECK_INTERFACE(IGraphicBufferProducer, data, reply);
|
||||||
int value;
|
int value = 0;
|
||||||
int what = data.readInt32();
|
int what = data.readInt32();
|
||||||
int res = query(what, &value);
|
int res = query(what, &value);
|
||||||
reply->writeInt32(value);
|
reply->writeInt32(value);
|
||||||
|
@ -36,6 +36,58 @@
|
|||||||
namespace android {
|
namespace android {
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
android::Mutex android::SensorManager::sLock;
|
||||||
|
std::map<String16, SensorManager*> android::SensorManager::sPackageInstances;
|
||||||
|
|
||||||
|
SensorManager& SensorManager::getInstanceForPackage(const String16& packageName) {
|
||||||
|
Mutex::Autolock _l(sLock);
|
||||||
|
SensorManager* sensorManager;
|
||||||
|
std::map<String16, SensorManager*>::iterator iterator =
|
||||||
|
sPackageInstances.find(packageName);
|
||||||
|
|
||||||
|
if (iterator != sPackageInstances.end()) {
|
||||||
|
sensorManager = iterator->second;
|
||||||
|
} else {
|
||||||
|
String16 opPackageName = packageName;
|
||||||
|
|
||||||
|
// It is possible that the calling code has no access to the package name.
|
||||||
|
// In this case we will get the packages for the calling UID and pick the
|
||||||
|
// first one for attributing the app op. This will work correctly for
|
||||||
|
// runtime permissions as for legacy apps we will toggle the app op for
|
||||||
|
// all packages in the UID. The caveat is that the operation may be attributed
|
||||||
|
// to the wrong package and stats based on app ops may be slightly off.
|
||||||
|
if (opPackageName.size() <= 0) {
|
||||||
|
sp<IBinder> binder = defaultServiceManager()->getService(String16("permission"));
|
||||||
|
if (binder != 0) {
|
||||||
|
const uid_t uid = IPCThreadState::self()->getCallingUid();
|
||||||
|
Vector<String16> packages;
|
||||||
|
interface_cast<IPermissionController>(binder)->getPackagesForUid(uid, packages);
|
||||||
|
if (!packages.isEmpty()) {
|
||||||
|
opPackageName = packages[0];
|
||||||
|
} else {
|
||||||
|
ALOGE("No packages for calling UID");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ALOGE("Cannot get permission service");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sensorManager = new SensorManager(opPackageName);
|
||||||
|
|
||||||
|
// If we had no package name, we looked it up from the UID and the sensor
|
||||||
|
// manager instance we created should also be mapped to the empty package
|
||||||
|
// name, to avoid looking up the packages for a UID and get the same result.
|
||||||
|
if (packageName.size() <= 0) {
|
||||||
|
sPackageInstances.insert(std::make_pair(String16(), sensorManager));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stash the per package sensor manager.
|
||||||
|
sPackageInstances.insert(std::make_pair(opPackageName, sensorManager));
|
||||||
|
}
|
||||||
|
|
||||||
|
return *sensorManager;
|
||||||
|
}
|
||||||
|
|
||||||
SensorManager::SensorManager(const String16& opPackageName)
|
SensorManager::SensorManager(const String16& opPackageName)
|
||||||
: mSensorList(0), mOpPackageName(opPackageName)
|
: mSensorList(0), mOpPackageName(opPackageName)
|
||||||
{
|
{
|
||||||
@ -58,13 +110,23 @@ void SensorManager::sensorManagerDied()
|
|||||||
}
|
}
|
||||||
|
|
||||||
status_t SensorManager::assertStateLocked() const {
|
status_t SensorManager::assertStateLocked() const {
|
||||||
|
bool initSensorManager = false;
|
||||||
if (mSensorServer == NULL) {
|
if (mSensorServer == NULL) {
|
||||||
// try for one second
|
initSensorManager = true;
|
||||||
|
} else {
|
||||||
|
// Ping binder to check if sensorservice is alive.
|
||||||
|
status_t err = IInterface::asBinder(mSensorServer)->pingBinder();
|
||||||
|
if (err != NO_ERROR) {
|
||||||
|
initSensorManager = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (initSensorManager) {
|
||||||
|
// try for 300 seconds (60*5(getService() tries for 5 seconds)) before giving up ...
|
||||||
const String16 name("sensorservice");
|
const String16 name("sensorservice");
|
||||||
for (int i=0 ; i<4 ; i++) {
|
for (int i = 0; i < 60; i++) {
|
||||||
status_t err = getService(name, &mSensorServer);
|
status_t err = getService(name, &mSensorServer);
|
||||||
if (err == NAME_NOT_FOUND) {
|
if (err == NAME_NOT_FOUND) {
|
||||||
usleep(250000);
|
sleep(1);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (err != NO_ERROR) {
|
if (err != NO_ERROR) {
|
||||||
@ -83,6 +145,8 @@ status_t SensorManager::assertStateLocked() const {
|
|||||||
DeathObserver(SensorManager& mgr) : mSensorManger(mgr) { }
|
DeathObserver(SensorManager& mgr) : mSensorManger(mgr) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
LOG_ALWAYS_FATAL_IF(mSensorServer.get() == NULL, "getService(SensorService) NULL");
|
||||||
|
|
||||||
mDeathObserver = new DeathObserver(*const_cast<SensorManager *>(this));
|
mDeathObserver = new DeathObserver(*const_cast<SensorManager *>(this));
|
||||||
IInterface::asBinder(mSensorServer)->linkToDeath(mDeathObserver);
|
IInterface::asBinder(mSensorServer)->linkToDeath(mDeathObserver);
|
||||||
|
|
||||||
@ -90,6 +154,8 @@ status_t SensorManager::assertStateLocked() const {
|
|||||||
size_t count = mSensors.size();
|
size_t count = mSensors.size();
|
||||||
mSensorList =
|
mSensorList =
|
||||||
static_cast<Sensor const**>(malloc(count * sizeof(Sensor*)));
|
static_cast<Sensor const**>(malloc(count * sizeof(Sensor*)));
|
||||||
|
LOG_ALWAYS_FATAL_IF(mSensorList == NULL, "mSensorList NULL");
|
||||||
|
|
||||||
for (size_t i=0 ; i<count ; i++) {
|
for (size_t i=0 ; i<count ; i++) {
|
||||||
mSensorList[i] = mSensors.array() + i;
|
mSensorList[i] = mSensors.array() + i;
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,10 @@ static const nsecs_t RESAMPLE_LATENCY = 5 * NANOS_PER_MS;
|
|||||||
// Minimum time difference between consecutive samples before attempting to resample.
|
// Minimum time difference between consecutive samples before attempting to resample.
|
||||||
static const nsecs_t RESAMPLE_MIN_DELTA = 2 * NANOS_PER_MS;
|
static const nsecs_t RESAMPLE_MIN_DELTA = 2 * NANOS_PER_MS;
|
||||||
|
|
||||||
|
// Maximum time difference between consecutive samples before attempting to resample
|
||||||
|
// by extrapolation.
|
||||||
|
static const nsecs_t RESAMPLE_MAX_DELTA = 20 * NANOS_PER_MS;
|
||||||
|
|
||||||
// Maximum time to predict forward from the last known state, to avoid predicting too
|
// Maximum time to predict forward from the last known state, to avoid predicting too
|
||||||
// far into the future. This time is further bounded by 50% of the last time delta.
|
// far into the future. This time is further bounded by 50% of the last time delta.
|
||||||
static const nsecs_t RESAMPLE_MAX_PREDICTION = 8 * NANOS_PER_MS;
|
static const nsecs_t RESAMPLE_MAX_PREDICTION = 8 * NANOS_PER_MS;
|
||||||
@ -724,7 +728,7 @@ void InputConsumer::resampleTouchState(nsecs_t sampleTime, MotionEvent* event,
|
|||||||
nsecs_t delta = future.eventTime - current->eventTime;
|
nsecs_t delta = future.eventTime - current->eventTime;
|
||||||
if (delta < RESAMPLE_MIN_DELTA) {
|
if (delta < RESAMPLE_MIN_DELTA) {
|
||||||
#if DEBUG_RESAMPLING
|
#if DEBUG_RESAMPLING
|
||||||
ALOGD("Not resampled, delta time is %lld ns.", delta);
|
ALOGD("Not resampled, delta time is too small: %lld ns.", delta);
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -736,7 +740,12 @@ void InputConsumer::resampleTouchState(nsecs_t sampleTime, MotionEvent* event,
|
|||||||
nsecs_t delta = current->eventTime - other->eventTime;
|
nsecs_t delta = current->eventTime - other->eventTime;
|
||||||
if (delta < RESAMPLE_MIN_DELTA) {
|
if (delta < RESAMPLE_MIN_DELTA) {
|
||||||
#if DEBUG_RESAMPLING
|
#if DEBUG_RESAMPLING
|
||||||
ALOGD("Not resampled, delta time is %lld ns.", delta);
|
ALOGD("Not resampled, delta time is too small: %lld ns.", delta);
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
} else if (delta > RESAMPLE_MAX_DELTA) {
|
||||||
|
#if DEBUG_RESAMPLING
|
||||||
|
ALOGD("Not resampled, delta time is too large: %lld ns.", delta);
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ status_t BatteryProperties::readFromParcel(Parcel* p) {
|
|||||||
chargerAcOnline = p->readInt32() == 1 ? true : false;
|
chargerAcOnline = p->readInt32() == 1 ? true : false;
|
||||||
chargerUsbOnline = p->readInt32() == 1 ? true : false;
|
chargerUsbOnline = p->readInt32() == 1 ? true : false;
|
||||||
chargerWirelessOnline = p->readInt32() == 1 ? true : false;
|
chargerWirelessOnline = p->readInt32() == 1 ? true : false;
|
||||||
|
maxChargingCurrent = p->readInt32();
|
||||||
batteryStatus = p->readInt32();
|
batteryStatus = p->readInt32();
|
||||||
batteryHealth = p->readInt32();
|
batteryHealth = p->readInt32();
|
||||||
batteryPresent = p->readInt32() == 1 ? true : false;
|
batteryPresent = p->readInt32() == 1 ? true : false;
|
||||||
@ -69,6 +70,7 @@ status_t BatteryProperties::writeToParcel(Parcel* p) const {
|
|||||||
p->writeInt32(chargerAcOnline ? 1 : 0);
|
p->writeInt32(chargerAcOnline ? 1 : 0);
|
||||||
p->writeInt32(chargerUsbOnline ? 1 : 0);
|
p->writeInt32(chargerUsbOnline ? 1 : 0);
|
||||||
p->writeInt32(chargerWirelessOnline ? 1 : 0);
|
p->writeInt32(chargerWirelessOnline ? 1 : 0);
|
||||||
|
p->writeInt32(maxChargingCurrent);
|
||||||
p->writeInt32(batteryStatus);
|
p->writeInt32(batteryStatus);
|
||||||
p->writeInt32(batteryHealth);
|
p->writeInt32(batteryHealth);
|
||||||
p->writeInt32(batteryPresent ? 1 : 0);
|
p->writeInt32(batteryPresent ? 1 : 0);
|
||||||
|
@ -4724,7 +4724,7 @@ void TouchInputMapper::cookPointerData() {
|
|||||||
bottom = float(mRawPointerAxes.x.maxValue - rawLeft) * mXScale + mXTranslate;
|
bottom = float(mRawPointerAxes.x.maxValue - rawLeft) * mXScale + mXTranslate;
|
||||||
top = float(mRawPointerAxes.x.maxValue - rawRight) * mXScale + mXTranslate;
|
top = float(mRawPointerAxes.x.maxValue - rawRight) * mXScale + mXTranslate;
|
||||||
orientation -= M_PI_2;
|
orientation -= M_PI_2;
|
||||||
if (orientation < mOrientedRanges.orientation.min) {
|
if (mOrientedRanges.haveOrientation && orientation < mOrientedRanges.orientation.min) {
|
||||||
orientation += (mOrientedRanges.orientation.max - mOrientedRanges.orientation.min);
|
orientation += (mOrientedRanges.orientation.max - mOrientedRanges.orientation.min);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -4736,7 +4736,7 @@ void TouchInputMapper::cookPointerData() {
|
|||||||
bottom = float(mRawPointerAxes.y.maxValue - rawTop) * mYScale + mYTranslate;
|
bottom = float(mRawPointerAxes.y.maxValue - rawTop) * mYScale + mYTranslate;
|
||||||
top = float(mRawPointerAxes.y.maxValue - rawBottom) * mYScale + mYTranslate;
|
top = float(mRawPointerAxes.y.maxValue - rawBottom) * mYScale + mYTranslate;
|
||||||
orientation -= M_PI;
|
orientation -= M_PI;
|
||||||
if (orientation < mOrientedRanges.orientation.min) {
|
if (mOrientedRanges.haveOrientation && orientation < mOrientedRanges.orientation.min) {
|
||||||
orientation += (mOrientedRanges.orientation.max - mOrientedRanges.orientation.min);
|
orientation += (mOrientedRanges.orientation.max - mOrientedRanges.orientation.min);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -4748,7 +4748,7 @@ void TouchInputMapper::cookPointerData() {
|
|||||||
bottom = float(rawRight - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
|
bottom = float(rawRight - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
|
||||||
top = float(rawLeft - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
|
top = float(rawLeft - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
|
||||||
orientation += M_PI_2;
|
orientation += M_PI_2;
|
||||||
if (orientation > mOrientedRanges.orientation.max) {
|
if (mOrientedRanges.haveOrientation && orientation > mOrientedRanges.orientation.max) {
|
||||||
orientation -= (mOrientedRanges.orientation.max - mOrientedRanges.orientation.min);
|
orientation -= (mOrientedRanges.orientation.max - mOrientedRanges.orientation.min);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -341,10 +341,20 @@ static const uint32_t DISPLAY_ATTRIBUTES[] = {
|
|||||||
HWC_DISPLAY_HEIGHT,
|
HWC_DISPLAY_HEIGHT,
|
||||||
HWC_DISPLAY_DPI_X,
|
HWC_DISPLAY_DPI_X,
|
||||||
HWC_DISPLAY_DPI_Y,
|
HWC_DISPLAY_DPI_Y,
|
||||||
|
HWC_DISPLAY_COLOR_TRANSFORM,
|
||||||
HWC_DISPLAY_NO_ATTRIBUTE,
|
HWC_DISPLAY_NO_ATTRIBUTE,
|
||||||
};
|
};
|
||||||
#define NUM_DISPLAY_ATTRIBUTES (sizeof(DISPLAY_ATTRIBUTES) / sizeof(DISPLAY_ATTRIBUTES)[0])
|
#define NUM_DISPLAY_ATTRIBUTES (sizeof(DISPLAY_ATTRIBUTES) / sizeof(DISPLAY_ATTRIBUTES)[0])
|
||||||
|
|
||||||
|
static const uint32_t PRE_HWC15_DISPLAY_ATTRIBUTES[] = {
|
||||||
|
HWC_DISPLAY_VSYNC_PERIOD,
|
||||||
|
HWC_DISPLAY_WIDTH,
|
||||||
|
HWC_DISPLAY_HEIGHT,
|
||||||
|
HWC_DISPLAY_DPI_X,
|
||||||
|
HWC_DISPLAY_DPI_Y,
|
||||||
|
HWC_DISPLAY_NO_ATTRIBUTE,
|
||||||
|
};
|
||||||
|
|
||||||
status_t HWComposer::queryDisplayProperties(int disp) {
|
status_t HWComposer::queryDisplayProperties(int disp) {
|
||||||
|
|
||||||
LOG_ALWAYS_FATAL_IF(!mHwc || !hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_1));
|
LOG_ALWAYS_FATAL_IF(!mHwc || !hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_1));
|
||||||
@ -372,6 +382,12 @@ status_t HWComposer::queryDisplayProperties(int disp) {
|
|||||||
for (size_t c = 0; c < numConfigs; ++c) {
|
for (size_t c = 0; c < numConfigs; ++c) {
|
||||||
err = mHwc->getDisplayAttributes(mHwc, disp, configs[c],
|
err = mHwc->getDisplayAttributes(mHwc, disp, configs[c],
|
||||||
DISPLAY_ATTRIBUTES, values);
|
DISPLAY_ATTRIBUTES, values);
|
||||||
|
// If this is a pre-1.5 HWC, it may not know about color transform, so
|
||||||
|
// try again with a smaller set of attributes
|
||||||
|
if (err != NO_ERROR) {
|
||||||
|
err = mHwc->getDisplayAttributes(mHwc, disp, configs[c],
|
||||||
|
PRE_HWC15_DISPLAY_ATTRIBUTES, values);
|
||||||
|
}
|
||||||
if (err != NO_ERROR) {
|
if (err != NO_ERROR) {
|
||||||
// we can't get this display's info. turn it off.
|
// we can't get this display's info. turn it off.
|
||||||
mDisplayData[disp].connected = false;
|
mDisplayData[disp].connected = false;
|
||||||
@ -396,6 +412,9 @@ status_t HWComposer::queryDisplayProperties(int disp) {
|
|||||||
case HWC_DISPLAY_DPI_Y:
|
case HWC_DISPLAY_DPI_Y:
|
||||||
config.ydpi = values[i] / 1000.0f;
|
config.ydpi = values[i] / 1000.0f;
|
||||||
break;
|
break;
|
||||||
|
case HWC_DISPLAY_COLOR_TRANSFORM:
|
||||||
|
config.colorTransform = values[i];
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ALOG_ASSERT(false, "unknown display attribute[%zu] %#x",
|
ALOG_ASSERT(false, "unknown display attribute[%zu] %#x",
|
||||||
i, DISPLAY_ATTRIBUTES[i]);
|
i, DISPLAY_ATTRIBUTES[i]);
|
||||||
@ -1195,9 +1214,11 @@ void HWComposer::dump(String8& result) const {
|
|||||||
result.appendFormat(" Display[%zd] configurations (* current):\n", i);
|
result.appendFormat(" Display[%zd] configurations (* current):\n", i);
|
||||||
for (size_t c = 0; c < disp.configs.size(); ++c) {
|
for (size_t c = 0; c < disp.configs.size(); ++c) {
|
||||||
const DisplayConfig& config(disp.configs[c]);
|
const DisplayConfig& config(disp.configs[c]);
|
||||||
result.appendFormat(" %s%zd: %ux%u, xdpi=%f, ydpi=%f, refresh=%" PRId64 "\n",
|
result.appendFormat(" %s%zd: %ux%u, xdpi=%f, ydpi=%f"
|
||||||
c == disp.currentConfig ? "* " : "", c, config.width, config.height,
|
", refresh=%" PRId64 ", colorTransform=%d\n",
|
||||||
config.xdpi, config.ydpi, config.refresh);
|
c == disp.currentConfig ? "* " : "", c,
|
||||||
|
config.width, config.height, config.xdpi, config.ydpi,
|
||||||
|
config.refresh, config.colorTransform);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (disp.list) {
|
if (disp.list) {
|
||||||
|
@ -264,6 +264,7 @@ public:
|
|||||||
float xdpi;
|
float xdpi;
|
||||||
float ydpi;
|
float ydpi;
|
||||||
nsecs_t refresh;
|
nsecs_t refresh;
|
||||||
|
int colorTransform;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Query display parameters. Pass in a display index (e.g.
|
// Query display parameters. Pass in a display index (e.g.
|
||||||
|
@ -167,6 +167,9 @@ SurfaceFlinger::SurfaceFlinger()
|
|||||||
property_get("ro.bq.gpu_to_cpu_unsupported", value, "0");
|
property_get("ro.bq.gpu_to_cpu_unsupported", value, "0");
|
||||||
mGpuToCpuSupported = !atoi(value);
|
mGpuToCpuSupported = !atoi(value);
|
||||||
|
|
||||||
|
property_get("debug.sf.drop_missed_frames", value, "0");
|
||||||
|
mDropMissedFrames = atoi(value);
|
||||||
|
|
||||||
property_get("debug.sf.showupdates", value, "0");
|
property_get("debug.sf.showupdates", value, "0");
|
||||||
mDebugRegion = atoi(value);
|
mDebugRegion = atoi(value);
|
||||||
|
|
||||||
@ -446,6 +449,15 @@ void SurfaceFlinger::init() {
|
|||||||
mEGLDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
mEGLDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
||||||
eglInitialize(mEGLDisplay, NULL, NULL);
|
eglInitialize(mEGLDisplay, NULL, NULL);
|
||||||
|
|
||||||
|
// start the EventThread
|
||||||
|
sp<VSyncSource> vsyncSrc = new DispSyncSource(&mPrimaryDispSync,
|
||||||
|
vsyncPhaseOffsetNs, true, "app");
|
||||||
|
mEventThread = new EventThread(vsyncSrc);
|
||||||
|
sp<VSyncSource> sfVsyncSrc = new DispSyncSource(&mPrimaryDispSync,
|
||||||
|
sfVsyncPhaseOffsetNs, true, "sf");
|
||||||
|
mSFEventThread = new EventThread(sfVsyncSrc);
|
||||||
|
mEventQueue.setEventThread(mSFEventThread);
|
||||||
|
|
||||||
// Initialize the H/W composer object. There may or may not be an
|
// Initialize the H/W composer object. There may or may not be an
|
||||||
// actual hardware composer underneath.
|
// actual hardware composer underneath.
|
||||||
mHwc = DisplayUtils::getInstance()->getHWCInstance(this,
|
mHwc = DisplayUtils::getInstance()->getHWCInstance(this,
|
||||||
@ -504,15 +516,6 @@ void SurfaceFlinger::init() {
|
|||||||
// (which may happens before we render something)
|
// (which may happens before we render something)
|
||||||
getDefaultDisplayDevice()->makeCurrent(mEGLDisplay, mEGLContext);
|
getDefaultDisplayDevice()->makeCurrent(mEGLDisplay, mEGLContext);
|
||||||
|
|
||||||
// start the EventThread
|
|
||||||
sp<VSyncSource> vsyncSrc = new DispSyncSource(&mPrimaryDispSync,
|
|
||||||
vsyncPhaseOffsetNs, true, "app");
|
|
||||||
mEventThread = new EventThread(vsyncSrc);
|
|
||||||
sp<VSyncSource> sfVsyncSrc = new DispSyncSource(&mPrimaryDispSync,
|
|
||||||
sfVsyncPhaseOffsetNs, true, "sf");
|
|
||||||
mSFEventThread = new EventThread(sfVsyncSrc);
|
|
||||||
mEventQueue.setEventThread(mSFEventThread);
|
|
||||||
|
|
||||||
mEventControlThread = new EventControlThread(this);
|
mEventControlThread = new EventControlThread(this);
|
||||||
mEventControlThread->run("EventControl", PRIORITY_URGENT_DISPLAY);
|
mEventControlThread->run("EventControl", PRIORITY_URGENT_DISPLAY);
|
||||||
android_set_rt_ioprio(mEventControlThread->getTid(), 1);
|
android_set_rt_ioprio(mEventControlThread->getTid(), 1);
|
||||||
@ -641,6 +644,7 @@ status_t SurfaceFlinger::getDisplayConfigs(const sp<IBinder>& display,
|
|||||||
info.ydpi = ydpi;
|
info.ydpi = ydpi;
|
||||||
info.fps = float(1e9 / hwConfig.refresh);
|
info.fps = float(1e9 / hwConfig.refresh);
|
||||||
info.appVsyncOffset = VSYNC_EVENT_PHASE_OFFSET_NS;
|
info.appVsyncOffset = VSYNC_EVENT_PHASE_OFFSET_NS;
|
||||||
|
info.colorTransform = hwConfig.colorTransform;
|
||||||
|
|
||||||
// This is how far in advance a buffer must be queued for
|
// This is how far in advance a buffer must be queued for
|
||||||
// presentation at a given time. If you want a buffer to appear
|
// presentation at a given time. If you want a buffer to appear
|
||||||
@ -934,12 +938,31 @@ bool SurfaceFlinger::handleMessageInvalidate() {
|
|||||||
|
|
||||||
void SurfaceFlinger::handleMessageRefresh() {
|
void SurfaceFlinger::handleMessageRefresh() {
|
||||||
ATRACE_CALL();
|
ATRACE_CALL();
|
||||||
|
|
||||||
|
static nsecs_t previousExpectedPresent = 0;
|
||||||
|
nsecs_t expectedPresent = mPrimaryDispSync.computeNextRefresh(0);
|
||||||
|
static bool previousFrameMissed = false;
|
||||||
|
bool frameMissed = (expectedPresent == previousExpectedPresent);
|
||||||
|
if (frameMissed != previousFrameMissed) {
|
||||||
|
ATRACE_INT("FrameMissed", static_cast<int>(frameMissed));
|
||||||
|
}
|
||||||
|
previousFrameMissed = frameMissed;
|
||||||
|
|
||||||
|
if (CC_UNLIKELY(mDropMissedFrames && frameMissed)) {
|
||||||
|
// Latch buffers, but don't send anything to HWC, then signal another
|
||||||
|
// wakeup for the next vsync
|
||||||
|
preComposition();
|
||||||
|
repaintEverything();
|
||||||
|
} else {
|
||||||
preComposition();
|
preComposition();
|
||||||
rebuildLayerStacks();
|
rebuildLayerStacks();
|
||||||
setUpHWComposer();
|
setUpHWComposer();
|
||||||
doDebugFlashRegions();
|
doDebugFlashRegions();
|
||||||
doComposition();
|
doComposition();
|
||||||
postComposition();
|
postComposition();
|
||||||
|
}
|
||||||
|
|
||||||
|
previousExpectedPresent = mPrimaryDispSync.computeNextRefresh(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SurfaceFlinger::doDebugFlashRegions()
|
void SurfaceFlinger::doDebugFlashRegions()
|
||||||
|
@ -489,6 +489,7 @@ private:
|
|||||||
RenderEngine* mRenderEngine;
|
RenderEngine* mRenderEngine;
|
||||||
nsecs_t mBootTime;
|
nsecs_t mBootTime;
|
||||||
bool mGpuToCpuSupported;
|
bool mGpuToCpuSupported;
|
||||||
|
bool mDropMissedFrames;
|
||||||
sp<EventThread> mEventThread;
|
sp<EventThread> mEventThread;
|
||||||
sp<EventThread> mSFEventThread;
|
sp<EventThread> mSFEventThread;
|
||||||
sp<EventControlThread> mEventControlThread;
|
sp<EventControlThread> mEventControlThread;
|
||||||
|
Loading…
Reference in New Issue
Block a user