And also: - APIs to show and hide the IME, and control its interaction with the app. - APIs to tell the app when its window resizes and needs to be redrawn. - API to tell the app the content rectangle of its window (to layout around the IME or status bar). There is still a problem with IME interaction -- we need a way for the app to deliver events to the IME before it handles them, so that for example the back key will close the IME instead of finishing the app. Change-Id: I37b75fc2ec533750ef36ca3aedd2f0cc0b5813cd
96 lines
2.7 KiB
C++
96 lines
2.7 KiB
C++
/*
|
||
* 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_APP_NATIVEACTIVITY_H
|
||
#define _ANDROID_APP_NATIVEACTIVITY_H
|
||
|
||
#include <ui/InputTransport.h>
|
||
|
||
#include <android/native_activity.h>
|
||
|
||
#include "jni.h"
|
||
|
||
namespace android {
|
||
|
||
extern void android_NativeActivity_setWindowFormat(
|
||
ANativeActivity* activity, int32_t format);
|
||
|
||
extern void android_NativeActivity_setWindowFlags(
|
||
ANativeActivity* activity, int32_t values, int32_t mask);
|
||
|
||
extern void android_NativeActivity_showSoftInput(
|
||
ANativeActivity* activity, int32_t flags);
|
||
|
||
extern void android_NativeActivity_hideSoftInput(
|
||
ANativeActivity* activity, int32_t flags);
|
||
|
||
} // namespace android
|
||
|
||
|
||
/*
|
||
* NDK input queue API.
|
||
*/
|
||
struct AInputQueue {
|
||
public:
|
||
/* Creates a consumer associated with an input channel. */
|
||
explicit AInputQueue(const android::sp<android::InputChannel>& channel, int workWrite);
|
||
|
||
/* Destroys the consumer and releases its input channel. */
|
||
~AInputQueue();
|
||
|
||
void attachLooper(ALooper* looper, ALooper_callbackFunc* callback, void* data);
|
||
|
||
void detachLooper();
|
||
|
||
int32_t hasEvents();
|
||
|
||
int32_t getEvent(AInputEvent** outEvent);
|
||
|
||
void finishEvent(AInputEvent* event, bool handled);
|
||
|
||
|
||
// ----------------------------------------------------------
|
||
|
||
inline android::InputConsumer& getConsumer() { return mConsumer; }
|
||
|
||
void dispatchEvent(android::KeyEvent* event);
|
||
|
||
android::KeyEvent* consumeUnhandledEvent();
|
||
|
||
int mWorkWrite;
|
||
|
||
private:
|
||
void doDefaultKey(android::KeyEvent* keyEvent);
|
||
|
||
android::InputConsumer mConsumer;
|
||
android::PreallocatedInputEventFactory mInputEventFactory;
|
||
android::sp<android::PollLoop> mPollLoop;
|
||
|
||
int mDispatchKeyRead;
|
||
int mDispatchKeyWrite;
|
||
|
||
// This is only touched by the event reader thread. It is the current
|
||
// key events that came out of the mDispatchingKeys list and are now
|
||
//<2F>delivered to the app.
|
||
android::Vector<android::KeyEvent*> mDeliveringKeys;
|
||
|
||
android::Mutex mLock;
|
||
android::Vector<android::KeyEvent*> mPendingKeys;
|
||
android::Vector<android::KeyEvent*> mDispatchingKeys;
|
||
};
|
||
|
||
#endif // _ANDROID_APP_NATIVEACTIVITY_H
|