From 9f44e9710843c3918e6889b077e11cc4535b0edd Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Mon, 13 Sep 2010 23:57:28 -0700 Subject: [PATCH] Update NDK headers and samples to sync up with looper API changes. Change-Id: I7082603bf280888be90dc4df687521aaae9b1d02 --- .../arch-arm/usr/include/android/input.h | 21 +- .../arch-arm/usr/include/android/looper.h | 217 ++++++++++++------ .../arch-arm/usr/include/android/sensor.h | 2 +- .../android-9/arch-arm/usr/lib/libandroid.so | Bin 56544 -> 56544 bytes .../samples/native-activity/jni/main.c | 2 +- .../samples/native-plasma/jni/plasma.c | 2 +- .../native_app_glue/android_native_app_glue.c | 2 +- 7 files changed, 166 insertions(+), 80 deletions(-) diff --git a/ndk/platforms/android-9/arch-arm/usr/include/android/input.h b/ndk/platforms/android-9/arch-arm/usr/include/android/input.h index 5b62da443..c1134bf8c 100644 --- a/ndk/platforms/android-9/arch-arm/usr/include/android/input.h +++ b/ndk/platforms/android-9/arch-arm/usr/include/android/input.h @@ -246,6 +246,22 @@ enum { AMOTION_EVENT_ACTION_POINTER_UP = 6 }; +/* + * Motion event flags. + */ +enum { + /* This flag indicates that the window that received this motion event is partly + * or wholly obscured by another visible window above it. This flag is set to true + * even if the event did not directly pass through the obscured area. + * A security sensitive application can check this flag to identify situations in which + * a malicious application may have covered up part of its content for the purpose + * of misleading the user or hijacking touches. An appropriate response might be + * to drop the suspect touches or to take additional precautions to confirm the user's + * actual intent. + */ + AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED = 0x1, +}; + /* * Motion event edge touch flags. */ @@ -395,6 +411,9 @@ int64_t AKeyEvent_getEventTime(const AInputEvent* key_event); /* Get the combined motion event action code and pointer index. */ int32_t AMotionEvent_getAction(const AInputEvent* motion_event); +/* Get the motion event flags. */ +int32_t AMotionEvent_getFlags(const AInputEvent* motion_event); + /* Get the state of any meta / modifier keys that were in effect when the * event was generated. */ int32_t AMotionEvent_getMetaState(const AInputEvent* motion_event); @@ -626,7 +645,7 @@ typedef struct AInputQueue AInputQueue; * ALooper_addFd() for information on the ident, callback, and data params. */ void AInputQueue_attachLooper(AInputQueue* queue, ALooper* looper, - int ident, ALooper_callbackFunc* callback, void* data); + int ident, ALooper_callbackFunc callback, void* data); /* * Remove the input queue from the looper it is currently attached to. diff --git a/ndk/platforms/android-9/arch-arm/usr/include/android/looper.h b/ndk/platforms/android-9/arch-arm/usr/include/android/looper.h index 287bcd5f0..568d18fd1 100644 --- a/ndk/platforms/android-9/arch-arm/usr/include/android/looper.h +++ b/ndk/platforms/android-9/arch-arm/usr/include/android/looper.h @@ -18,8 +18,6 @@ #ifndef ANDROID_LOOPER_H #define ANDROID_LOOPER_H -#include - #ifdef __cplusplus extern "C" { #endif @@ -41,25 +39,14 @@ struct ALooper; typedef struct ALooper ALooper; /** - * For callback-based event loops, this is the prototype of the function - * that is called. It is given the file descriptor it is associated with, - * a bitmask of the poll events that were triggered (typically POLLIN), and - * the data pointer that was originally supplied. - * - * Implementations should return 1 to continue receiving callbacks, or 0 - * to have this file descriptor and callback unregistered from the looper. - */ -typedef int ALooper_callbackFunc(int fd, int events, void* data); - -/** - * Return the ALooper associated with the calling thread, or NULL if + * Returns the looper associated with the calling thread, or NULL if * there is not one. */ ALooper* ALooper_forThread(); enum { /** - * Option for ALooper_prepare: this ALooper will accept calls to + * Option for ALooper_prepare: this looper will accept calls to * ALooper_addFd() that do not have a callback (that is provide NULL * for the callback). In this case the caller of ALooper_pollOnce() * or ALooper_pollAll() MUST check the return from these functions to @@ -69,65 +56,41 @@ enum { }; /** - * Prepare an ALooper associated with the calling thread, and return it. - * If the thread already has an ALooper, it is returned. Otherwise, a new + * Prepares a looper associated with the calling thread, and returns it. + * If the thread already has a looper, it is returned. Otherwise, a new * one is created, associated with the thread, and returned. * * The opts may be ALOOPER_PREPARE_ALLOW_NON_CALLBACKS or 0. */ -ALooper* ALooper_prepare(int32_t opts); +ALooper* ALooper_prepare(int opts); enum { /** - * Result from ALooper_pollOnce() and ALooper_pollAll(): one or - * more callbacks were executed. + * Result from ALooper_pollOnce() and ALooper_pollAll(): + * The poll was awoken using wake() before the timeout expired + * and no callbacks were executed and no other file descriptors were ready. */ - ALOOPER_POLL_CALLBACK = -1, - + ALOOPER_POLL_WAKE = -1, + /** - * Result from ALooper_pollOnce() and ALooper_pollAll(): the - * timeout expired. + * Result from ALooper_pollOnce() and ALooper_pollAll(): + * One or more callbacks were executed. */ - ALOOPER_POLL_TIMEOUT = -2, - + ALOOPER_POLL_CALLBACK = -2, + /** - * Result from ALooper_pollOnce() and ALooper_pollAll(): an error - * occurred. + * Result from ALooper_pollOnce() and ALooper_pollAll(): + * The timeout expired. */ - ALOOPER_POLL_ERROR = -3, + ALOOPER_POLL_TIMEOUT = -3, + + /** + * Result from ALooper_pollOnce() and ALooper_pollAll(): + * An error occurred. + */ + ALOOPER_POLL_ERROR = -4, }; -/** - * Wait for events to be available, with optional timeout in milliseconds. - * Invokes callbacks for all file descriptors on which an event occurred. - * - * If the timeout is zero, returns immediately without blocking. - * If the timeout is negative, waits indefinitely until an event appears. - * - * Returns ALOOPER_POLL_CALLBACK if a callback was invoked. - * - * Returns ALOOPER_POLL_TIMEOUT if there was no data before the given - * timeout expired. - * - * Returns ALOPER_POLL_ERROR if an error occurred. - * - * Returns a value >= 0 containing an identifier if its file descriptor has data - * and it has no callback function (requiring the caller here to handle it). - * In this (and only this) case outEvents and outData will contain the poll - * events and data associated with the fd. - * - * This method does not return until it has finished invoking the appropriate callbacks - * for all file descriptors that were signalled. - */ -int32_t ALooper_pollOnce(int timeoutMillis, int* outEvents, void** outData); - -/** - * Like ALooper_pollOnce(), but performs all pending callbacks until all - * data has been consumed or a file descriptor is available with no callback. - * This function will never return ALOOPER_POLL_CALLBACK. - */ -int32_t ALooper_pollAll(int timeoutMillis, int* outEvents, void** outData); - /** * Acquire a reference on the given ALooper object. This prevents the object * from being deleted until the reference is removed. This is only needed @@ -141,36 +104,140 @@ void ALooper_acquire(ALooper* looper); void ALooper_release(ALooper* looper); /** - * Add a new file descriptor to be polled by the looper. If the same file - * descriptor was previously added, it is replaced. + * Flags for file descriptor events that a looper can monitor. + * + * These flag bits can be combined to monitor multiple events at once. + */ +enum { + /** + * The file descriptor is available for read operations. + */ + ALOOPER_EVENT_INPUT = 1 << 0, + + /** + * The file descriptor is available for write operations. + */ + ALOOPER_EVENT_OUTPUT = 1 << 1, + + /** + * The file descriptor has encountered an error condition. + * + * The looper always sends notifications about errors; it is not necessary + * to specify this event flag in the requested event set. + */ + ALOOPER_EVENT_ERROR = 1 << 2, + + /** + * The file descriptor was hung up. + * For example, indicates that the remote end of a pipe or socket was closed. + * + * The looper always sends notifications about hangups; it is not necessary + * to specify this event flag in the requested event set. + */ + ALOOPER_EVENT_HANGUP = 1 << 3, +}; + +/** + * For callback-based event loops, this is the prototype of the function + * that is called. It is given the file descriptor it is associated with, + * a bitmask of the poll events that were triggered (typically ALOOPER_EVENT_INPUT), + * and the data pointer that was originally supplied. + * + * Implementations should return 1 to continue receiving callbacks, or 0 + * to have this file descriptor and callback unregistered from the looper. + */ +typedef int (*ALooper_callbackFunc)(int fd, int events, void* data); + +/** + * Waits for events to be available, with optional timeout in milliseconds. + * Invokes callbacks for all file descriptors on which an event occurred. + * + * If the timeout is zero, returns immediately without blocking. + * If the timeout is negative, waits indefinitely until an event appears. + * + * Returns ALOOPER_POLL_WAKE if the poll was awoken using wake() before + * the timeout expired and no callbacks were invoked and no other file + * descriptors were ready. + * + * Returns ALOOPER_POLL_CALLBACK if one or more callbacks were invoked. + * + * Returns ALOOPER_POLL_TIMEOUT if there was no data before the given + * timeout expired. + * + * Returns ALOOPER_POLL_ERROR if an error occurred. + * + * Returns a value >= 0 containing an identifier if its file descriptor has data + * and it has no callback function (requiring the caller here to 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 + * for all file descriptors that were signalled. + */ +int ALooper_pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outData); + +/** + * Like ALooper_pollOnce(), but performs all pending callbacks until all + * data has been consumed or a file descriptor is available with no callback. + * This function will never return ALOOPER_POLL_CALLBACK. + */ +int ALooper_pollAll(int timeoutMillis, int* outFd, int* outEvents, void** outData); + +/** + * Wakes the poll asynchronously. + * + * This method can be called on any thread. + * This method returns immediately. + */ +void ALooper_wake(ALooper* looper); + +/** + * Adds a new file descriptor to be polled by the looper. + * If the same file descriptor was previously added, it is replaced. * * "fd" is the file descriptor to be added. - * "ident" is an identifier for this event, which is returned from - * ALooper_pollOnce(). Must be >= 0, or ALOOPER_POLL_CALLBACK if - * providing a non-NULL callback. - * "events" are the poll events to wake up on. Typically this is POLLIN. - * "callback" is the function to call when there is an event on the file - * descriptor. + * "ident" is an identifier for this event, which is returned from ALooper_pollOnce(). + * The identifier must be >= 0, or ALOOPER_POLL_CALLBACK if providing a non-NULL callback. + * "events" are the poll events to wake up on. Typically this is ALOOPER_EVENT_INPUT. + * "callback" is the function to call when there is an event on the file descriptor. * "data" is a private data pointer to supply to the callback. * * There are two main uses of this function: * - * (1) If "callback" is non-NULL, then - * this function will be called when there is data on the file descriptor. It - * should execute any events it has pending, appropriately reading from the - * file descriptor. The 'ident' is ignored in this case. + * (1) If "callback" is non-NULL, then this function will be called when there is + * data on the file descriptor. It should execute any events it has pending, + * appropriately reading from the file descriptor. The 'ident' is ignored in this case. * * (2) If "callback" is NULL, the 'ident' will be returned by ALooper_pollOnce * when its file descriptor has data available, requiring the caller to take * care of processing it. + * + * Returns 1 if the file descriptor was added or -1 if an error occurred. + * + * This method can be called on any thread. + * This method may block briefly if it needs to wake the poll. */ void ALooper_addFd(ALooper* looper, int fd, int ident, int events, - ALooper_callbackFunc* callback, void* data); + ALooper_callbackFunc callback, void* data); /** - * Remove a previously added file descriptor from the looper. + * Removes a previously added file descriptor from the looper. + * + * When this method returns, it is safe to close the file descriptor since the looper + * will no longer have a reference to it. However, it is possible for the callback to + * already be running or for it to run one last time if the file descriptor was already + * signalled. Calling code is responsible for ensuring that this case is safely handled. + * For example, if the callback takes care of removing itself during its own execution either + * by returning 0 or by calling this method, then it can be guaranteed to not be invoked + * again at any later time unless registered anew. + * + * Returns 1 if the file descriptor was removed, 0 if none was previously registered + * or -1 if an error occurred. + * + * This method can be called on any thread. + * This method may block briefly if it needs to wake the poll. */ -int32_t ALooper_removeFd(ALooper* looper, int fd); +int ALooper_removeFd(ALooper* looper, int fd); #ifdef __cplusplus }; diff --git a/ndk/platforms/android-9/arch-arm/usr/include/android/sensor.h b/ndk/platforms/android-9/arch-arm/usr/include/android/sensor.h index a102d43c7..f163f18ca 100644 --- a/ndk/platforms/android-9/arch-arm/usr/include/android/sensor.h +++ b/ndk/platforms/android-9/arch-arm/usr/include/android/sensor.h @@ -166,7 +166,7 @@ ASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type * Creates a new sensor event queue and associate it with a looper. */ 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. diff --git a/ndk/platforms/android-9/arch-arm/usr/lib/libandroid.so b/ndk/platforms/android-9/arch-arm/usr/lib/libandroid.so index 2ca0227dee1c7e866589d43856aa665004b5519b..51dfc3744098940902c3019803835192fee2afd9 100644 GIT binary patch literal 56544 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 QQ(pM{_&$y%1k~jI7ubtSJpcdz diff --git a/ndk/platforms/android-9/samples/native-activity/jni/main.c b/ndk/platforms/android-9/samples/native-activity/jni/main.c index 378fd621f..40c421ac4 100644 --- a/ndk/platforms/android-9/samples/native-activity/jni/main.c +++ b/ndk/platforms/android-9/samples/native-activity/jni/main.c @@ -236,7 +236,7 @@ void android_main(struct android_app* state) { // If not animating, we will block forever waiting for events. // If animating, we loop until all events are read, then continue // to draw the next frame of animation. - while ((ident=ALooper_pollAll(engine.animating ? 0 : -1, &events, + while ((ident=ALooper_pollAll(engine.animating ? 0 : -1, NULL, &events, (void**)&source)) >= 0) { // Process this event. diff --git a/ndk/platforms/android-9/samples/native-plasma/jni/plasma.c b/ndk/platforms/android-9/samples/native-plasma/jni/plasma.c index c364f1813..01ec644a8 100644 --- a/ndk/platforms/android-9/samples/native-plasma/jni/plasma.c +++ b/ndk/platforms/android-9/samples/native-plasma/jni/plasma.c @@ -476,7 +476,7 @@ void android_main(struct android_app* state) { // If not animating, we will block forever waiting for events. // If animating, we loop until all events are read, then continue // to draw the next frame of animation. - while ((ident=ALooper_pollAll(engine.animating ? 0 : -1, &events, + while ((ident=ALooper_pollAll(engine.animating ? 0 : -1, NULL, &events, (void**)&source)) >= 0) { // Process this event. diff --git a/ndk/sources/android/native_app_glue/android_native_app_glue.c b/ndk/sources/android/native_app_glue/android_native_app_glue.c index 7888f7dc2..fbd42b431 100644 --- a/ndk/sources/android/native_app_glue/android_native_app_glue.c +++ b/ndk/sources/android/native_app_glue/android_native_app_glue.c @@ -217,7 +217,7 @@ static void* android_app_entry(void* param) { android_app->inputPollSource.process = process_input; ALooper* looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS); - ALooper_addFd(looper, android_app->msgread, LOOPER_ID_MAIN, POLLIN, NULL, + ALooper_addFd(looper, android_app->msgread, LOOPER_ID_MAIN, ALOOPER_EVENT_INPUT, NULL, &android_app->cmdPollSource); android_app->looper = looper;