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 24b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#include "EventHub.h" 25b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#include "InputReader.h" 26b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#include "InputDispatcher.h" 27b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 28b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#include <androidfw/Input.h> 29b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#include <androidfw/InputTransport.h> 3046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/Errors.h> 3146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/Vector.h> 3246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/Timers.h> 3346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/RefBase.h> 3446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#include <utils/String8.h> 3546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 3646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownnamespace android { 3746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 3846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown/* 3946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * The input manager is the core of the system event processing. 4046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 4146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * The input manager uses two threads. 4246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 4346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 1. The InputReaderThread (called "InputReader") reads and preprocesses raw input events, 4446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * applies policy, and posts messages to a queue managed by the DispatcherThread. 4546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 2. The InputDispatcherThread (called "InputDispatcher") thread waits for new events on the 4646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * queue and asynchronously dispatches them to applications. 4746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 4846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * By design, the InputReaderThread class and InputDispatcherThread class do not share any 4946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * internal state. Moreover, all communication is done one way from the InputReaderThread 5046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * into the InputDispatcherThread and never the reverse. Both classes may interact with the 5146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * InputDispatchPolicy, however. 5246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * 5346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * The InputManager class never makes any calls into Java itself. Instead, the 5446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * InputDispatchPolicy is responsible for performing all external interactions with the 5546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown * system, including calling DVM services. 5646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown */ 5746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownclass InputManagerInterface : public virtual RefBase { 5846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownprotected: 5946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown InputManagerInterface() { } 6046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual ~InputManagerInterface() { } 6146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 6246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownpublic: 6346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown /* Starts the input manager threads. */ 6446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual status_t start() = 0; 6546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 6646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown /* Stops the input manager threads and waits for them to exit. */ 6746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual status_t stop() = 0; 6846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 69b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown /* Gets the input reader. */ 70b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown virtual sp<InputReaderInterface> getReader() = 0; 71b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown 72b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown /* Gets the input dispatcher. */ 73b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown virtual sp<InputDispatcherInterface> getDispatcher() = 0; 7446b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown}; 7546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 7646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownclass InputManager : public InputManagerInterface { 7746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownprotected: 7846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual ~InputManager(); 7946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 8046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownpublic: 819c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown InputManager( 829c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<EventHubInterface>& eventHub, 839c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputReaderPolicyInterface>& readerPolicy, 849c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputDispatcherPolicyInterface>& dispatcherPolicy); 859c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown 869c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown // (used for testing purposes) 879c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown InputManager( 889c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputReaderInterface>& reader, 899c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown const sp<InputDispatcherInterface>& dispatcher); 9046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 9146b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual status_t start(); 9246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown virtual status_t stop(); 9346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 94b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown virtual sp<InputReaderInterface> getReader(); 95b88102f5b7e51552a3576cf197b4c8cf96f193d1Jeff Brown virtual sp<InputDispatcherInterface> getDispatcher(); 9646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 9746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brownprivate: 989c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown sp<InputReaderInterface> mReader; 999c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown sp<InputReaderThread> mReaderThread; 10046b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1019c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown sp<InputDispatcherInterface> mDispatcher; 10246b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown sp<InputDispatcherThread> mDispatcherThread; 10346b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 1049c3cda04d969912bc46184f2b326d1db95e0aba5Jeff Brown void initialize(); 10546b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown}; 10646b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 10746b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown} // namespace android 10846b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown 10946b9ac0ae2162309774a7478cd9d4e578747bfc2Jeff Brown#endif // _UI_INPUT_MANAGER_H 110