InputManager.h revision b88102f5b7e51552a3576cf197b4c8cf96f193d1
146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown/* 246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * Copyright (C) 2010 The Android Open Source Project 346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * you may not use this file except in compliance with the License. 646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * You may obtain a copy of the License at 746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 1046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * Unless required by applicable law or agreed to in writing, software 1146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 1246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * See the License for the specific language governing permissions and 1446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * limitations under the License. 1546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown */ 1646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#ifndef _UI_INPUT_MANAGER_H 1846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#define _UI_INPUT_MANAGER_H 1946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 2046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown/** 2146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * Native input manager. 2246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown */ 2346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 2446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <ui/EventHub.h> 2546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <ui/Input.h> 2646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/Errors.h> 2746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/Vector.h> 2846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/Timers.h> 2946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/RefBase.h> 3046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/String8.h> 3146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 3246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownnamespace android { 3346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 349c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brownclass InputChannel; 359c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown 369c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brownclass InputReaderInterface; 379c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brownclass InputReaderPolicyInterface; 3846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownclass InputReaderThread; 399c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown 409c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brownclass InputDispatcherInterface; 419c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brownclass InputDispatcherPolicyInterface; 4246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownclass InputDispatcherThread; 4346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 4446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown/* 4546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * The input manager is the core of the system event processing. 4646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 4746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * The input manager uses two threads. 4846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 4946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 1. The InputReaderThread (called "InputReader") reads and preprocesses raw input events, 5046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * applies policy, and posts messages to a queue managed by the DispatcherThread. 5146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 2. The InputDispatcherThread (called "InputDispatcher") thread waits for new events on the 5246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * queue and asynchronously dispatches them to applications. 5346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 5446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * By design, the InputReaderThread class and InputDispatcherThread class do not share any 5546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * internal state. Moreover, all communication is done one way from the InputReaderThread 5646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * into the InputDispatcherThread and never the reverse. Both classes may interact with the 5746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * InputDispatchPolicy, however. 5846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 5946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * The InputManager class never makes any calls into Java itself. Instead, the 6046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * InputDispatchPolicy is responsible for performing all external interactions with the 6146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * system, including calling DVM services. 6246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown */ 6346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownclass InputManagerInterface : public virtual RefBase { 6446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownprotected: 6546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown InputManagerInterface() { } 6646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual ~InputManagerInterface() { } 6746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 6846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownpublic: 6946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown /* Starts the input manager threads. */ 7046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual status_t start() = 0; 7146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 7246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown /* Stops the input manager threads and waits for them to exit. */ 7346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual status_t stop() = 0; 7446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 75b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown /* Gets the input reader. */ 76b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown virtual sp<InputReaderInterface> getReader() = 0; 77b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown 78b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown /* Gets the input dispatcher. */ 79b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown virtual sp<InputDispatcherInterface> getDispatcher() = 0; 8046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown}; 8146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 8246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownclass InputManager : public InputManagerInterface { 8346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownprotected: 8446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual ~InputManager(); 8546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 8646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownpublic: 879c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown InputManager( 889c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<EventHubInterface>& eventHub, 899c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputReaderPolicyInterface>& readerPolicy, 909c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputDispatcherPolicyInterface>& dispatcherPolicy); 919c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown 929c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown // (used for testing purposes) 939c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown InputManager( 949c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputReaderInterface>& reader, 959c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputDispatcherInterface>& dispatcher); 9646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 9746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual status_t start(); 9846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual status_t stop(); 9946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 100b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown virtual sp<InputReaderInterface> getReader(); 101b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown virtual sp<InputDispatcherInterface> getDispatcher(); 10246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 10346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownprivate: 1049c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown sp<InputReaderInterface> mReader; 1059c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown sp<InputReaderThread> mReaderThread; 10646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1079c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown sp<InputDispatcherInterface> mDispatcher; 10846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown sp<InputDispatcherThread> mDispatcherThread; 10946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1109c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown void initialize(); 11146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown}; 11246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 11346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} // namespace android 11446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 11546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#endif // _UI_INPUT_MANAGER_H 116