1b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown/* 2b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * Copyright (C) 2010 The Android Open Source Project 3b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * 4b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * you may not use this file except in compliance with the License. 6b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * You may obtain a copy of the License at 7b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * 8b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * 10b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * Unless required by applicable law or agreed to in writing, software 11b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * See the License for the specific language governing permissions and 14b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * limitations under the License. 15b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown */ 16b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 17b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#ifndef _UI_POINTER_CONTROLLER_H 18b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#define _UI_POINTER_CONTROLLER_H 19b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 205541de9ea3513a12d1ac2ad07e7e04a3aa7741a0Jeff Brown#include "SpriteController.h" 215541de9ea3513a12d1ac2ad07e7e04a3aa7741a0Jeff Brown 22b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#include <ui/DisplayInfo.h> 23b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#include <androidfw/Input.h> 248a90e6e3174083f274538567d851f98478fc83e9Jeff Brown#include <utils/BitSet.h> 25b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#include <utils/RefBase.h> 2605dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown#include <utils/Looper.h> 27b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#include <utils/String8.h> 28b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 29b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#include <SkBitmap.h> 30b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 31b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brownnamespace android { 32b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 33b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown/** 342352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * Interface for tracking a mouse / touch pad pointer and touch pad spots. 352352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * 362352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * The spots are sprites on screen that visually represent the positions of 372352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * fingers 38b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * 39b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * The pointer controller is responsible for providing synchronization and for tracking 40b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * display orientation changes if needed. 41b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown */ 42b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brownclass PointerControllerInterface : public virtual RefBase { 43b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brownprotected: 44b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown PointerControllerInterface() { } 45b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual ~PointerControllerInterface() { } 46b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 47b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brownpublic: 48b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown /* Gets the bounds of the region that the pointer can traverse. 49b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * Returns true if the bounds are available. */ 50b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual bool getBounds(float* outMinX, float* outMinY, 51b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown float* outMaxX, float* outMaxY) const = 0; 52b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 53b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown /* Move the pointer. */ 54b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual void move(float deltaX, float deltaY) = 0; 55b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 56b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown /* Sets a mask that indicates which buttons are pressed. */ 57fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown virtual void setButtonState(int32_t buttonState) = 0; 58b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 59b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown /* Gets a mask that indicates which buttons are pressed. */ 60fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown virtual int32_t getButtonState() const = 0; 61b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 62b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown /* Sets the absolute location of the pointer. */ 63b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual void setPosition(float x, float y) = 0; 64b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 65b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown /* Gets the absolute location of the pointer. */ 66b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual void getPosition(float* outX, float* outY) const = 0; 6705dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown 68538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown enum Transition { 69538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown // Fade/unfade immediately. 70538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown TRANSITION_IMMEDIATE, 71538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown // Fade/unfade gradually. 72538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown TRANSITION_GRADUAL, 73538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown }; 74538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown 7505dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown /* Fades the pointer out now. */ 76538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown virtual void fade(Transition transition) = 0; 7705dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown 782352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown /* Makes the pointer visible if it has faded out. 792352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * The pointer never unfades itself automatically. This method must be called 802352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * by the client whenever the pointer is moved or a button is pressed and it 812352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * wants to ensure that the pointer becomes visible again. */ 82538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown virtual void unfade(Transition transition) = 0; 832352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 842352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown enum Presentation { 852352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown // Show the mouse pointer. 862352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown PRESENTATION_POINTER, 872352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown // Show spots and a spot anchor in place of the mouse pointer. 882352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown PRESENTATION_SPOT, 892352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown }; 902352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 912352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown /* Sets the mode of the pointer controller. */ 922352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown virtual void setPresentation(Presentation presentation) = 0; 932352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 942352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown /* Sets the spots for the current gesture. 952352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * The spots are not subject to the inactivity timeout like the pointer 962352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * itself it since they are expected to remain visible for so long as 972352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * the fingers are on the touch pad. 982352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * 992352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * The values of the AMOTION_EVENT_AXIS_PRESSURE axis is significant. 1002352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * For spotCoords, pressure != 0 indicates that the spot's location is being 1012352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * pressed (not hovering). 1022352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown */ 103cb5ffcf0e41d2597401208221c61589547a00f3dJeff Brown virtual void setSpots(const PointerCoords* spotCoords, const uint32_t* spotIdToIndex, 1042352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown BitSet32 spotIdBits) = 0; 1052352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1062352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown /* Removes all spots. */ 1072352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown virtual void clearSpots() = 0; 1082352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown}; 1092352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1102352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1112352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown/* 1122352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * Pointer resources. 1132352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown */ 1142352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownstruct PointerResources { 1152352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown SpriteIcon spotHover; 1162352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown SpriteIcon spotTouch; 1172352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown SpriteIcon spotAnchor; 1182352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown}; 1192352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1202352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1212352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown/* 1222352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * Pointer controller policy interface. 1232352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * 1242352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * The pointer controller policy is used by the pointer controller to interact with 1252352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * the Window Manager and other system components. 1262352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * 1272352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * The actual implementation is partially supported by callbacks into the DVM 1282352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown * via JNI. This interface is also mocked in the unit tests. 1292352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown */ 1302352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownclass PointerControllerPolicyInterface : public virtual RefBase { 1312352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownprotected: 1322352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown PointerControllerPolicyInterface() { } 1332352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown virtual ~PointerControllerPolicyInterface() { } 1342352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1352352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brownpublic: 1362352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown virtual void loadPointerResources(PointerResources* outResources) = 0; 137b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown}; 138b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 139b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 140b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown/* 141b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * Tracks pointer movements and draws the pointer sprite to a surface. 142b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * 143b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown * Handles pointer acceleration and animation. 144b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown */ 14505dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brownclass PointerController : public PointerControllerInterface, public MessageHandler { 146b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brownprotected: 147b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual ~PointerController(); 148b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 149b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brownpublic: 1502352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown enum InactivityTimeout { 1512352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown INACTIVITY_TIMEOUT_NORMAL = 0, 1522352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown INACTIVITY_TIMEOUT_SHORT = 1, 15305dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown }; 15405dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown 1552352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown PointerController(const sp<PointerControllerPolicyInterface>& policy, 1562352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown const sp<Looper>& looper, const sp<SpriteController>& spriteController); 157b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 158b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual bool getBounds(float* outMinX, float* outMinY, 159b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown float* outMaxX, float* outMaxY) const; 160b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual void move(float deltaX, float deltaY); 161fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown virtual void setButtonState(int32_t buttonState); 162fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown virtual int32_t getButtonState() const; 163b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual void setPosition(float x, float y); 164b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown virtual void getPosition(float* outX, float* outY) const; 165538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown virtual void fade(Transition transition); 166538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown virtual void unfade(Transition transition); 167b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 1682352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown virtual void setPresentation(Presentation presentation); 169cb5ffcf0e41d2597401208221c61589547a00f3dJeff Brown virtual void setSpots(const PointerCoords* spotCoords, 170cb5ffcf0e41d2597401208221c61589547a00f3dJeff Brown const uint32_t* spotIdToIndex, BitSet32 spotIdBits); 1712352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown virtual void clearSpots(); 1722352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 173d728bf514f257670fcb9aa22c6eaf97626072c93Jeff Brown void setDisplayViewport(int32_t width, int32_t height, int32_t orientation); 1742352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void setPointerIcon(const SpriteIcon& icon); 1752352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void setInactivityTimeout(InactivityTimeout inactivityTimeout); 176b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 177b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brownprivate: 1782352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown static const size_t MAX_RECYCLED_SPRITES = 12; 1792352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown static const size_t MAX_SPOTS = 12; 1802352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 18105dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown enum { 1822352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown MSG_ANIMATE, 1832352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown MSG_INACTIVITY_TIMEOUT, 1842352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown }; 1852352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1862352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown struct Spot { 1872352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown static const uint32_t INVALID_ID = 0xffffffff; 1882352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1892352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown uint32_t id; 1902352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown sp<Sprite> sprite; 1912352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown float alpha; 1922352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown float scale; 1932352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown float x, y; 1942352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1952352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown inline Spot(uint32_t id, const sp<Sprite>& sprite) 1962352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown : id(id), sprite(sprite), alpha(1.0f), scale(1.0f), 1972352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown x(0.0f), y(0.0f), lastIcon(NULL) { } 1982352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 1992352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void updateSprite(const SpriteIcon* icon, float x, float y); 2002352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 2012352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown private: 2022352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown const SpriteIcon* lastIcon; 20305dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown }; 20405dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown 205b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown mutable Mutex mLock; 206b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 2072352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown sp<PointerControllerPolicyInterface> mPolicy; 20805dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown sp<Looper> mLooper; 2095541de9ea3513a12d1ac2ad07e7e04a3aa7741a0Jeff Brown sp<SpriteController> mSpriteController; 2105541de9ea3513a12d1ac2ad07e7e04a3aa7741a0Jeff Brown sp<WeakMessageHandler> mHandler; 211b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 2122352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown PointerResources mResources; 2132352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 214b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown struct Locked { 2152352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown bool animationPending; 2162352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown nsecs_t animationTime; 2172352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 218b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown int32_t displayWidth; 219b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown int32_t displayHeight; 220b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown int32_t displayOrientation; 221b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 2222352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown InactivityTimeout inactivityTimeout; 2232352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 2242352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown Presentation presentation; 2252352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown bool presentationChanged; 2262352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 227538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown int32_t pointerFadeDirection; 228b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown float pointerX; 229b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown float pointerY; 2302352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown float pointerAlpha; 2312352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown sp<Sprite> pointerSprite; 2322352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown SpriteIcon pointerIcon; 2332352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown bool pointerIconChanged; 234b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 235fe9f8ab03a63b1037f07dd85799fbea80ec6adaaJeff Brown int32_t buttonState; 236b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 2372352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown Vector<Spot*> spots; 2382352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown Vector<sp<Sprite> > recycledSprites; 2395541de9ea3513a12d1ac2ad07e7e04a3aa7741a0Jeff Brown } mLocked; 24005dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown 241b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown bool getBoundsLocked(float* outMinX, float* outMinY, float* outMaxX, float* outMaxY) const; 242b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown void setPositionLocked(float x, float y); 24305dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown 24405dc66ada6b61a6bdf806ffaa62617ac5394695dJeff Brown void handleMessage(const Message& message); 2452352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void doAnimate(); 2462352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void doInactivityTimeout(); 2472352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 2482352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void startAnimationLocked(); 2492352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 2502352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void resetInactivityTimeoutLocked(); 251538881e18323a0c983bd8809f8c3b1cdeeeab8a6Jeff Brown void removeInactivityTimeoutLocked(); 2522352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void updatePointerLocked(); 2532352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 2542352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown Spot* getSpotLocked(uint32_t id); 2552352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown Spot* createAndAddSpotLocked(uint32_t id); 2562352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown Spot* removeFirstFadingSpotLocked(); 2572352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void releaseSpotLocked(Spot* spot); 2582352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void fadeOutAndReleaseSpotLocked(Spot* spot); 2592352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void fadeOutAndReleaseAllSpotsLocked(); 2602352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown 2612352b978a3c94cd88f41d0d908f961333fdac1e9Jeff Brown void loadResources(); 262b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown}; 263b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 264b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown} // namespace android 265b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown 266b4ff35df5c04aec71fce7e90a6d6f9ef7180c2adJeff Brown#endif // _UI_POINTER_CONTROLLER_H 267