diff options
author | Dianne Hackborn <hackbod@google.com> | 2010-07-07 09:14:57 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-07-07 09:14:57 -0700 |
commit | 97250d5c4ab5c36dc4f7cf1d9d48157ed934615d (patch) | |
tree | e1075093796bc528940a2159adc557e20c3b1edb /native | |
parent | 054e3d5e17378bc3419c8f80c3f204b270d733e8 (diff) | |
parent | e24901d3adb28fff72821d4e8e2ccc25b2184550 (diff) | |
download | frameworks_base-97250d5c4ab5c36dc4f7cf1d9d48157ed934615d.zip frameworks_base-97250d5c4ab5c36dc4f7cf1d9d48157ed934615d.tar.gz frameworks_base-97250d5c4ab5c36dc4f7cf1d9d48157ed934615d.tar.bz2 |
am e24901d3: am 68267415: Add new native Looper API.
Merge commit 'e24901d3adb28fff72821d4e8e2ccc25b2184550'
* commit 'e24901d3adb28fff72821d4e8e2ccc25b2184550':
Add new native Looper API.
Diffstat (limited to 'native')
-rw-r--r-- | native/android/Android.mk | 1 | ||||
-rw-r--r-- | native/android/input.cpp | 13 | ||||
-rw-r--r-- | native/android/looper.cpp | 63 | ||||
-rw-r--r-- | native/include/android/input.h | 14 | ||||
-rw-r--r-- | native/include/android/looper.h | 51 | ||||
-rw-r--r-- | native/include/android/native_activity.h | 15 |
6 files changed, 150 insertions, 7 deletions
diff --git a/native/android/Android.mk b/native/android/Android.mk index fe8ed00..376c64f 100644 --- a/native/android/Android.mk +++ b/native/android/Android.mk @@ -8,6 +8,7 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ activity.cpp \ input.cpp \ + looper.cpp \ native_window.cpp LOCAL_SHARED_LIBRARIES := \ diff --git a/native/android/input.cpp b/native/android/input.cpp index 8498840..015a1ce 100644 --- a/native/android/input.cpp +++ b/native/android/input.cpp @@ -20,6 +20,7 @@ #include <android/input.h> #include <ui/Input.h> #include <ui/InputTransport.h> +#include <utils/PollLoop.h> #include <poll.h> @@ -184,8 +185,16 @@ float AMotionEvent_getHistoricalSize(AInputEvent* motion_event, size_t pointer_i pointer_index, history_index); } -int AInputQueue_getFd(AInputQueue* queue) { - return queue->getConsumer().getChannel()->getReceivePipeFd(); +void AInputQueue_attachLooper(AInputQueue* queue, ALooper* looper, + ALooper_callbackFunc callback, void* data) { + queue->setPollLoop(static_cast<android::PollLoop*>(looper)); + ALooper_setCallback(looper, queue->getConsumer().getChannel()->getReceivePipeFd(), + POLLIN, callback, data); +} + +void AInputQueue_detachLooper(AInputQueue* queue) { + queue->getPollLoop()->removeCallback( + queue->getConsumer().getChannel()->getReceivePipeFd()); } int AInputQueue_hasEvents(AInputQueue* queue) { diff --git a/native/android/looper.cpp b/native/android/looper.cpp new file mode 100644 index 0000000..6e78bbd --- /dev/null +++ b/native/android/looper.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "ALooper" +#include <utils/Log.h> + +#include <android/looper.h> +#include <utils/PollLoop.h> + +using android::PollLoop; +using android::sp; + +ALooper* ALooper_forThread() { + return PollLoop::getForThread().get(); +} + +ALooper* ALooper_prepare() { + sp<PollLoop> loop = PollLoop::getForThread(); + if (loop == NULL) { + loop = new PollLoop(); + PollLoop::setForThread(loop); + } + return loop.get(); +} + +int32_t ALooper_pollOnce(int timeoutMillis) { + sp<PollLoop> loop = PollLoop::getForThread(); + if (loop == NULL) { + LOGW("ALooper_pollOnce: No looper for this thread!"); + return -1; + } + return loop->pollOnce(timeoutMillis) ? 1 : 0; +} + +void ALooper_acquire(ALooper* looper) { + static_cast<PollLoop*>(looper)->incStrong((void*)ALooper_acquire); +} + +void ALooper_release(ALooper* looper) { + static_cast<PollLoop*>(looper)->decStrong((void*)ALooper_acquire); +} + +void ALooper_setCallback(ALooper* looper, int fd, int events, + ALooper_callbackFunc* callback, void* data) { + static_cast<PollLoop*>(looper)->setLooperCallback(fd, events, callback, data); +} + +int32_t ALooper_removeCallback(ALooper* looper, int fd) { + return static_cast<PollLoop*>(looper)->removeCallback(fd) ? 1 : 0; +} diff --git a/native/include/android/input.h b/native/include/android/input.h index 7617662..75be85a 100644 --- a/native/include/android/input.h +++ b/native/include/android/input.h @@ -42,6 +42,7 @@ #include <sys/types.h> #include <android/keycodes.h> +#include <android/looper.h> #ifdef __cplusplus extern "C" { @@ -533,12 +534,15 @@ struct AInputQueue; typedef struct AInputQueue AInputQueue; /* - * Return a file descriptor for the queue, which you - * can use to determine if there are events available. This - * is typically used with select() or poll() to multiplex - * with other kinds of events. + * Add this input queue to a looper for processing. */ -int AInputQueue_getFd(AInputQueue* queue); +void AInputQueue_attachLooper(AInputQueue* queue, ALooper* looper, + ALooper_callbackFunc callback, void* data); + +/* + * Remove the input queue from the looper it is currently attached to. + */ +void AInputQueue_detachLooper(AInputQueue* queue); /* * Returns true if there are one or more events available in the diff --git a/native/include/android/looper.h b/native/include/android/looper.h new file mode 100644 index 0000000..90a8983 --- /dev/null +++ b/native/include/android/looper.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef ANDROID_LOOPER_H +#define ANDROID_LOOPER_H + +#include <poll.h> + +#ifdef __cplusplus +extern "C" { +#endif + +struct ALooper; +typedef struct ALooper ALooper; + +typedef int ALooper_callbackFunc(int fd, int events, void* data); + +ALooper* ALooper_forThread(); + +ALooper* ALooper_prepare(); + +int32_t ALooper_pollOnce(int timeoutMillis); + +void ALooper_acquire(ALooper* looper); + +void ALooper_release(ALooper* looper); + +void ALooper_setCallback(ALooper* looper, int fd, int events, + ALooper_callbackFunc* callback, void* data); + +int32_t ALooper_removeCallback(ALooper* looper, int fd); + +#ifdef __cplusplus +}; +#endif + +#endif // ANDROID_NATIVE_WINDOW_H diff --git a/native/include/android/native_activity.h b/native/include/android/native_activity.h index bf5c641..a31c5af 100644 --- a/native/include/android/native_activity.h +++ b/native/include/android/native_activity.h @@ -64,6 +64,21 @@ typedef struct ANativeActivity { jobject clazz; /** + * Path to this application's internal data directory. + */ + const char* internalDataPath; + + /** + * Path to this application's external (removable/mountable) data directory. + */ + const char* externalDataPath; + + /** + * The platform's SDK version code. + */ + int32_t sdkVersion; + + /** * This is the native instance of the application. It is not used by * the framework, but can be set by the application to its own instance * state. |