1928e054931d357326613c78e62f4d850b7c442ffJeff Brown/* 2928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Copyright (C) 2011 The Android Open Source Project 3928e054931d357326613c78e62f4d850b7c442ffJeff Brown * 4928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5928e054931d357326613c78e62f4d850b7c442ffJeff Brown * you may not use this file except in compliance with the License. 6928e054931d357326613c78e62f4d850b7c442ffJeff Brown * You may obtain a copy of the License at 7928e054931d357326613c78e62f4d850b7c442ffJeff Brown * 8928e054931d357326613c78e62f4d850b7c442ffJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9928e054931d357326613c78e62f4d850b7c442ffJeff Brown * 10928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Unless required by applicable law or agreed to in writing, software 11928e054931d357326613c78e62f4d850b7c442ffJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12928e054931d357326613c78e62f4d850b7c442ffJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13928e054931d357326613c78e62f4d850b7c442ffJeff Brown * See the License for the specific language governing permissions and 14928e054931d357326613c78e62f4d850b7c442ffJeff Brown * limitations under the License. 15928e054931d357326613c78e62f4d850b7c442ffJeff Brown */ 16928e054931d357326613c78e62f4d850b7c442ffJeff Brown 17928e054931d357326613c78e62f4d850b7c442ffJeff Brown#ifndef _UI_INPUT_WINDOW_H 18928e054931d357326613c78e62f4d850b7c442ffJeff Brown#define _UI_INPUT_WINDOW_H 19928e054931d357326613c78e62f4d850b7c442ffJeff Brown 20b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#include <androidfw/Input.h> 21b93a03f841d93498bfea6cc92a22faa34bce1337Mathias Agopian#include <androidfw/InputTransport.h> 22928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <utils/RefBase.h> 23928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <utils/Timers.h> 24928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <utils/String8.h> 25928e054931d357326613c78e62f4d850b7c442ffJeff Brown 26fbf097732137a32930d151f7ba6816a5b870c32aJeff Brown#include <SkRegion.h> 27fbf097732137a32930d151f7ba6816a5b870c32aJeff Brown 28928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include "InputApplication.h" 29928e054931d357326613c78e62f4d850b7c442ffJeff Brown 30928e054931d357326613c78e62f4d850b7c442ffJeff Brownnamespace android { 31928e054931d357326613c78e62f4d850b7c442ffJeff Brown 32928e054931d357326613c78e62f4d850b7c442ffJeff Brown/* 33cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown * Describes the properties of a window that can receive input. 34928e054931d357326613c78e62f4d850b7c442ffJeff Brown */ 35cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brownstruct InputWindowInfo { 36928e054931d357326613c78e62f4d850b7c442ffJeff Brown // Window flags from WindowManager.LayoutParams 37928e054931d357326613c78e62f4d850b7c442ffJeff Brown enum { 38928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 0x00000001, 39928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_DIM_BEHIND = 0x00000002, 40928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_BLUR_BEHIND = 0x00000004, 41928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_NOT_FOCUSABLE = 0x00000008, 42928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_NOT_TOUCHABLE = 0x00000010, 43928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_NOT_TOUCH_MODAL = 0x00000020, 44928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_TOUCHABLE_WHEN_WAKING = 0x00000040, 45928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_KEEP_SCREEN_ON = 0x00000080, 46928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_LAYOUT_IN_SCREEN = 0x00000100, 47928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_LAYOUT_NO_LIMITS = 0x00000200, 48928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_FULLSCREEN = 0x00000400, 49928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_FORCE_NOT_FULLSCREEN = 0x00000800, 50928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_DITHER = 0x00001000, 51928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SECURE = 0x00002000, 52928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SCALED = 0x00004000, 53928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_IGNORE_CHEEK_PRESSES = 0x00008000, 54928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_LAYOUT_INSET_DECOR = 0x00010000, 55928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_ALT_FOCUSABLE_IM = 0x00020000, 56928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000, 57928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SHOW_WHEN_LOCKED = 0x00080000, 58928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SHOW_WALLPAPER = 0x00100000, 59928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_TURN_SCREEN_ON = 0x00200000, 60928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_DISMISS_KEYGUARD = 0x00400000, 61928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SPLIT_TOUCH = 0x00800000, 6298db5fabdad86dca379740d8050697950b9f026cJeff Brown FLAG_HARDWARE_ACCELERATED = 0x01000000, 6398db5fabdad86dca379740d8050697950b9f026cJeff Brown FLAG_HARDWARE_ACCELERATED_SYSTEM = 0x02000000, 6498db5fabdad86dca379740d8050697950b9f026cJeff Brown FLAG_SLIPPERY = 0x04000000, 6598db5fabdad86dca379740d8050697950b9f026cJeff Brown FLAG_NEEDS_MENU_KEY = 0x08000000, 66928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_KEEP_SURFACE_WHILE_ANIMATING = 0x10000000, 67928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_COMPATIBLE_WINDOW = 0x20000000, 68928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SYSTEM_ERROR = 0x40000000, 69928e054931d357326613c78e62f4d850b7c442ffJeff Brown }; 70928e054931d357326613c78e62f4d850b7c442ffJeff Brown 71928e054931d357326613c78e62f4d850b7c442ffJeff Brown // Window types from WindowManager.LayoutParams 72928e054931d357326613c78e62f4d850b7c442ffJeff Brown enum { 73928e054931d357326613c78e62f4d850b7c442ffJeff Brown FIRST_APPLICATION_WINDOW = 1, 74928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_BASE_APPLICATION = 1, 75928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION = 2, 76928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_STARTING = 3, 77928e054931d357326613c78e62f4d850b7c442ffJeff Brown LAST_APPLICATION_WINDOW = 99, 78928e054931d357326613c78e62f4d850b7c442ffJeff Brown FIRST_SUB_WINDOW = 1000, 79928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW, 80928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW+1, 81928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW+2, 82928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW+3, 83928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW+4, 84928e054931d357326613c78e62f4d850b7c442ffJeff Brown LAST_SUB_WINDOW = 1999, 85928e054931d357326613c78e62f4d850b7c442ffJeff Brown FIRST_SYSTEM_WINDOW = 2000, 86928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_STATUS_BAR = FIRST_SYSTEM_WINDOW, 87928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SEARCH_BAR = FIRST_SYSTEM_WINDOW+1, 88928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_PHONE = FIRST_SYSTEM_WINDOW+2, 89928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SYSTEM_ALERT = FIRST_SYSTEM_WINDOW+3, 90928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_KEYGUARD = FIRST_SYSTEM_WINDOW+4, 91928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_TOAST = FIRST_SYSTEM_WINDOW+5, 92928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+6, 93928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_PRIORITY_PHONE = FIRST_SYSTEM_WINDOW+7, 94928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SYSTEM_DIALOG = FIRST_SYSTEM_WINDOW+8, 95928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_KEYGUARD_DIALOG = FIRST_SYSTEM_WINDOW+9, 96928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SYSTEM_ERROR = FIRST_SYSTEM_WINDOW+10, 97928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_INPUT_METHOD = FIRST_SYSTEM_WINDOW+11, 98928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_INPUT_METHOD_DIALOG= FIRST_SYSTEM_WINDOW+12, 99928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_WALLPAPER = FIRST_SYSTEM_WINDOW+13, 1006d8a98afb0bda0d8a38b8839af94918c76a8fd2cDaniel Sandler TYPE_STATUS_BAR_PANEL = FIRST_SYSTEM_WINDOW+14, 101928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+15, 102928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_DRAG = FIRST_SYSTEM_WINDOW+16, 1036d8a98afb0bda0d8a38b8839af94918c76a8fd2cDaniel Sandler TYPE_STATUS_BAR_SUB_PANEL = FIRST_SYSTEM_WINDOW+17, 1046d8a98afb0bda0d8a38b8839af94918c76a8fd2cDaniel Sandler TYPE_POINTER = FIRST_SYSTEM_WINDOW+18, 1058956dbbc5f292d8b79072ae73b25f2114c8c7479Daniel Sandler TYPE_NAVIGATION_BAR = FIRST_SYSTEM_WINDOW+19, 106bfcb60ab0f696c8ef70830c365550e62fe2808bfJeff Brown TYPE_VOLUME_OVERLAY = FIRST_SYSTEM_WINDOW+20, 107bfcb60ab0f696c8ef70830c365550e62fe2808bfJeff Brown TYPE_BOOT_PROGRESS = FIRST_SYSTEM_WINDOW+21, 108928e054931d357326613c78e62f4d850b7c442ffJeff Brown LAST_SYSTEM_WINDOW = 2999, 109928e054931d357326613c78e62f4d850b7c442ffJeff Brown }; 110928e054931d357326613c78e62f4d850b7c442ffJeff Brown 111474dcb5c3ddff737c4ac9fc44a1f7be569605e5fJeff Brown enum { 112474dcb5c3ddff737c4ac9fc44a1f7be569605e5fJeff Brown INPUT_FEATURE_DISABLE_TOUCH_PAD_GESTURES = 0x00000001, 1131e3b98d47df596d0c4eadbdf60143709f8465b28Jeff Brown INPUT_FEATURE_NO_INPUT_CHANNEL = 0x00000002, 1141e3b98d47df596d0c4eadbdf60143709f8465b28Jeff Brown INPUT_FEATURE_DISABLE_USER_ACTIVITY = 0x00000004, 115474dcb5c3ddff737c4ac9fc44a1f7be569605e5fJeff Brown }; 116474dcb5c3ddff737c4ac9fc44a1f7be569605e5fJeff Brown 117928e054931d357326613c78e62f4d850b7c442ffJeff Brown sp<InputChannel> inputChannel; 118928e054931d357326613c78e62f4d850b7c442ffJeff Brown String8 name; 119928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t layoutParamsFlags; 120928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t layoutParamsType; 121928e054931d357326613c78e62f4d850b7c442ffJeff Brown nsecs_t dispatchingTimeout; 122928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t frameLeft; 123928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t frameTop; 124928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t frameRight; 125928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t frameBottom; 126e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn float scaleFactor; 127fbf097732137a32930d151f7ba6816a5b870c32aJeff Brown SkRegion touchableRegion; 128928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool visible; 129928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool canReceiveKeys; 130928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool hasFocus; 131928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool hasWallpaper; 132928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool paused; 133928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t layer; 134928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t ownerPid; 135928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t ownerUid; 136474dcb5c3ddff737c4ac9fc44a1f7be569605e5fJeff Brown int32_t inputFeatures; 13783d616a9c7b9505153d258511eb5c16b552e268dJeff Brown int32_t displayId; 138928e054931d357326613c78e62f4d850b7c442ffJeff Brown 139fbf097732137a32930d151f7ba6816a5b870c32aJeff Brown bool touchableRegionContainsPoint(int32_t x, int32_t y) const; 140928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool frameContainsPoint(int32_t x, int32_t y) const; 141928e054931d357326613c78e62f4d850b7c442ffJeff Brown 142928e054931d357326613c78e62f4d850b7c442ffJeff Brown /* Returns true if the window is of a trusted type that is allowed to silently 143928e054931d357326613c78e62f4d850b7c442ffJeff Brown * overlay other windows for the purpose of implementing the secure views feature. 144928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Trusted overlays, such as IME windows, can partly obscure other windows without causing 145928e054931d357326613c78e62f4d850b7c442ffJeff Brown * motion events to be delivered to them with AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED. 146928e054931d357326613c78e62f4d850b7c442ffJeff Brown */ 147928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool isTrustedOverlay() const; 148928e054931d357326613c78e62f4d850b7c442ffJeff Brown 149928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool supportsSplitTouch() const; 150cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown}; 151cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 152cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 153cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown/* 154cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown * Handle for a window that can receive input. 155cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown * 156cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown * Used by the native input dispatcher to indirectly refer to the window manager objects 157cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown * that describe a window. 158cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown */ 159cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brownclass InputWindowHandle : public RefBase { 160cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brownpublic: 161cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown const sp<InputApplicationHandle> inputApplicationHandle; 162cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 163cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown inline const InputWindowInfo* getInfo() const { 164cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown return mInfo; 165cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 166cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 167cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown inline sp<InputChannel> getInputChannel() const { 168cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown return mInfo ? mInfo->inputChannel : NULL; 169cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 170cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 171cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown inline String8 getName() const { 172cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown return mInfo ? mInfo->name : String8("<invalid>"); 173cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 174cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 175cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown inline nsecs_t getDispatchingTimeout(nsecs_t defaultValue) const { 176cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown return mInfo ? mInfo->dispatchingTimeout : defaultValue; 177cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 1789302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown 1799302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown /** 1809302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown * Requests that the state of this object be updated to reflect 1819302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown * the most current available information about the application. 1829302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown * 1839302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown * This method should only be called from within the input dispatcher's 1849302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown * critical section. 1859302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown * 1869302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown * Returns true on success, or false if the handle is no longer valid. 1879302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown */ 188cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown virtual bool updateInfo() = 0; 189cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 190cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown /** 191cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown * Releases the storage used by the associated information when it is 192cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown * no longer needed. 193cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown */ 194cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown void releaseInfo(); 1959302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown 1969302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brownprotected: 197cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown InputWindowHandle(const sp<InputApplicationHandle>& inputApplicationHandle); 198cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown virtual ~InputWindowHandle(); 199cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 200cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown InputWindowInfo* mInfo; 201928e054931d357326613c78e62f4d850b7c442ffJeff Brown}; 202928e054931d357326613c78e62f4d850b7c442ffJeff Brown 203928e054931d357326613c78e62f4d850b7c442ffJeff Brown} // namespace android 204928e054931d357326613c78e62f4d850b7c442ffJeff Brown 205928e054931d357326613c78e62f4d850b7c442ffJeff Brown#endif // _UI_INPUT_WINDOW_H 206