android_app_NativeActivity.h revision d76b67c340d1564abf8d14d976fdaf83bf2b3320
154a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn/*
254a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn * Copyright (C) 2010 The Android Open Source Project
354a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn *
454a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
554a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn * you may not use this file except in compliance with the License.
654a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn * You may obtain a copy of the License at
754a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn *
854a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
954a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn *
1054a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn * Unless required by applicable law or agreed to in writing, software
1154a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
1254a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1354a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn * See the License for the specific language governing permissions and
1454a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn * limitations under the License.
1554a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn */
1654a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn
17289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackborn#ifndef _ANDROID_APP_NATIVEACTIVITY_H
18289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackborn#define _ANDROID_APP_NATIVEACTIVITY_H
1954a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn
20d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn#include <ui/InputTransport.h>
21d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
22289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackborn#include <android/native_activity.h>
2354a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn
2454a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn#include "jni.h"
2554a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn
2654a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackbornnamespace android {
2754a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn
28289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackbornextern void android_NativeActivity_setWindowFormat(
29289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackborn        ANativeActivity* activity, int32_t format);
30289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackborn
31289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackbornextern void android_NativeActivity_setWindowFlags(
32289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackborn        ANativeActivity* activity, int32_t values, int32_t mask);
33289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackborn
34d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackbornextern void android_NativeActivity_showSoftInput(
35d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn        ANativeActivity* activity, int32_t flags);
36d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
37d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackbornextern void android_NativeActivity_hideSoftInput(
38d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn        ANativeActivity* activity, int32_t flags);
3954a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn
4054a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn} // namespace android
4154a181b1a2b1517a9479b21fbf7705a688232fafDianne Hackborn
42d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
43d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn/*
44d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn * NDK input queue API.
45d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn */
46d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackbornstruct AInputQueue {
47d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackbornpublic:
48d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    /* Creates a consumer associated with an input channel. */
49d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    explicit AInputQueue(const android::sp<android::InputChannel>& channel, int workWrite);
50d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
51d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    /* Destroys the consumer and releases its input channel. */
52d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    ~AInputQueue();
53d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
54d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    void attachLooper(ALooper* looper, ALooper_callbackFunc* callback, void* data);
55d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
56d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    void detachLooper();
57d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
58d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    int32_t hasEvents();
59d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
60d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    int32_t getEvent(AInputEvent** outEvent);
61d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
62d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    void finishEvent(AInputEvent* event, bool handled);
63d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
64d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
65d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    // ----------------------------------------------------------
66d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
67d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    inline android::InputConsumer& getConsumer() { return mConsumer; }
68d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
69d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    void dispatchEvent(android::KeyEvent* event);
70d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
71d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    android::KeyEvent* consumeUnhandledEvent();
72d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
73d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    int mWorkWrite;
74d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
75d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackbornprivate:
76d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    void doDefaultKey(android::KeyEvent* keyEvent);
77d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
78d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    android::InputConsumer mConsumer;
79d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    android::PreallocatedInputEventFactory mInputEventFactory;
80d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    android::sp<android::PollLoop> mPollLoop;
81d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
82d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    int mDispatchKeyRead;
83d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    int mDispatchKeyWrite;
84d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
85d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    // This is only touched by the event reader thread.  It is the current
86d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    // key events that came out of the mDispatchingKeys list and are now
87d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    //�delivered to the app.
88d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    android::Vector<android::KeyEvent*> mDeliveringKeys;
89d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
90d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    android::Mutex mLock;
91d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    android::Vector<android::KeyEvent*> mPendingKeys;
92d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn    android::Vector<android::KeyEvent*> mDispatchingKeys;
93d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn};
94d76b67c340d1564abf8d14d976fdaf83bf2b3320Dianne Hackborn
95289b9b62372ef52a06113b83dfb870e2c2fb325aDianne Hackborn#endif // _ANDROID_APP_NATIVEACTIVITY_H
96