InputWindow.h revision 8956dbbc5f292d8b79072ae73b25f2114c8c7479
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 20928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <ui/Input.h> 21928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <ui/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/* 33928e054931d357326613c78e62f4d850b7c442ffJeff Brown * A handle to a window that can receive input. 34928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Used by the native input dispatcher to indirectly refer to the window manager objects 35928e054931d357326613c78e62f4d850b7c442ffJeff Brown * that describe a window. 36928e054931d357326613c78e62f4d850b7c442ffJeff Brown */ 37928e054931d357326613c78e62f4d850b7c442ffJeff Brownclass InputWindowHandle : public RefBase { 38928e054931d357326613c78e62f4d850b7c442ffJeff Brownprotected: 39928e054931d357326613c78e62f4d850b7c442ffJeff Brown InputWindowHandle(const sp<InputApplicationHandle>& inputApplicationHandle) : 40928e054931d357326613c78e62f4d850b7c442ffJeff Brown mInputApplicationHandle(inputApplicationHandle) { } 41928e054931d357326613c78e62f4d850b7c442ffJeff Brown virtual ~InputWindowHandle() { } 42928e054931d357326613c78e62f4d850b7c442ffJeff Brown 43928e054931d357326613c78e62f4d850b7c442ffJeff Brownpublic: 44928e054931d357326613c78e62f4d850b7c442ffJeff Brown inline sp<InputApplicationHandle> getInputApplicationHandle() { 45928e054931d357326613c78e62f4d850b7c442ffJeff Brown return mInputApplicationHandle; 46928e054931d357326613c78e62f4d850b7c442ffJeff Brown } 47928e054931d357326613c78e62f4d850b7c442ffJeff Brown 48928e054931d357326613c78e62f4d850b7c442ffJeff Brownprivate: 49928e054931d357326613c78e62f4d850b7c442ffJeff Brown sp<InputApplicationHandle> mInputApplicationHandle; 50928e054931d357326613c78e62f4d850b7c442ffJeff Brown}; 51928e054931d357326613c78e62f4d850b7c442ffJeff Brown 52928e054931d357326613c78e62f4d850b7c442ffJeff Brown 53928e054931d357326613c78e62f4d850b7c442ffJeff Brown/* 54928e054931d357326613c78e62f4d850b7c442ffJeff Brown * An input window describes the bounds of a window that can receive input. 55928e054931d357326613c78e62f4d850b7c442ffJeff Brown */ 56928e054931d357326613c78e62f4d850b7c442ffJeff Brownstruct InputWindow { 57928e054931d357326613c78e62f4d850b7c442ffJeff Brown // Window flags from WindowManager.LayoutParams 58928e054931d357326613c78e62f4d850b7c442ffJeff Brown enum { 59928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 0x00000001, 60928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_DIM_BEHIND = 0x00000002, 61928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_BLUR_BEHIND = 0x00000004, 62928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_NOT_FOCUSABLE = 0x00000008, 63928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_NOT_TOUCHABLE = 0x00000010, 64928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_NOT_TOUCH_MODAL = 0x00000020, 65928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_TOUCHABLE_WHEN_WAKING = 0x00000040, 66928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_KEEP_SCREEN_ON = 0x00000080, 67928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_LAYOUT_IN_SCREEN = 0x00000100, 68928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_LAYOUT_NO_LIMITS = 0x00000200, 69928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_FULLSCREEN = 0x00000400, 70928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_FORCE_NOT_FULLSCREEN = 0x00000800, 71928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_DITHER = 0x00001000, 72928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SECURE = 0x00002000, 73928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SCALED = 0x00004000, 74928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_IGNORE_CHEEK_PRESSES = 0x00008000, 75928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_LAYOUT_INSET_DECOR = 0x00010000, 76928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_ALT_FOCUSABLE_IM = 0x00020000, 77928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000, 78928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SHOW_WHEN_LOCKED = 0x00080000, 79928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SHOW_WALLPAPER = 0x00100000, 80928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_TURN_SCREEN_ON = 0x00200000, 81928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_DISMISS_KEYGUARD = 0x00400000, 82928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SPLIT_TOUCH = 0x00800000, 83928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_KEEP_SURFACE_WHILE_ANIMATING = 0x10000000, 84928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_COMPATIBLE_WINDOW = 0x20000000, 85928e054931d357326613c78e62f4d850b7c442ffJeff Brown FLAG_SYSTEM_ERROR = 0x40000000, 86928e054931d357326613c78e62f4d850b7c442ffJeff Brown }; 87928e054931d357326613c78e62f4d850b7c442ffJeff Brown 88928e054931d357326613c78e62f4d850b7c442ffJeff Brown // Window types from WindowManager.LayoutParams 89928e054931d357326613c78e62f4d850b7c442ffJeff Brown enum { 90928e054931d357326613c78e62f4d850b7c442ffJeff Brown FIRST_APPLICATION_WINDOW = 1, 91928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_BASE_APPLICATION = 1, 92928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION = 2, 93928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_STARTING = 3, 94928e054931d357326613c78e62f4d850b7c442ffJeff Brown LAST_APPLICATION_WINDOW = 99, 95928e054931d357326613c78e62f4d850b7c442ffJeff Brown FIRST_SUB_WINDOW = 1000, 96928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW, 97928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW+1, 98928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW+2, 99928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW+3, 100928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW+4, 101928e054931d357326613c78e62f4d850b7c442ffJeff Brown LAST_SUB_WINDOW = 1999, 102928e054931d357326613c78e62f4d850b7c442ffJeff Brown FIRST_SYSTEM_WINDOW = 2000, 103928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_STATUS_BAR = FIRST_SYSTEM_WINDOW, 104928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SEARCH_BAR = FIRST_SYSTEM_WINDOW+1, 105928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_PHONE = FIRST_SYSTEM_WINDOW+2, 106928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SYSTEM_ALERT = FIRST_SYSTEM_WINDOW+3, 107928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_KEYGUARD = FIRST_SYSTEM_WINDOW+4, 108928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_TOAST = FIRST_SYSTEM_WINDOW+5, 109928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+6, 110928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_PRIORITY_PHONE = FIRST_SYSTEM_WINDOW+7, 111928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SYSTEM_DIALOG = FIRST_SYSTEM_WINDOW+8, 112928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_KEYGUARD_DIALOG = FIRST_SYSTEM_WINDOW+9, 113928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SYSTEM_ERROR = FIRST_SYSTEM_WINDOW+10, 114928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_INPUT_METHOD = FIRST_SYSTEM_WINDOW+11, 115928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_INPUT_METHOD_DIALOG= FIRST_SYSTEM_WINDOW+12, 116928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_WALLPAPER = FIRST_SYSTEM_WINDOW+13, 1176d8a98afb0bda0d8a38b8839af94918c76a8fd2cDaniel Sandler TYPE_STATUS_BAR_PANEL = FIRST_SYSTEM_WINDOW+14, 118928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+15, 119928e054931d357326613c78e62f4d850b7c442ffJeff Brown TYPE_DRAG = FIRST_SYSTEM_WINDOW+16, 1206d8a98afb0bda0d8a38b8839af94918c76a8fd2cDaniel Sandler TYPE_STATUS_BAR_SUB_PANEL = FIRST_SYSTEM_WINDOW+17, 1216d8a98afb0bda0d8a38b8839af94918c76a8fd2cDaniel Sandler TYPE_POINTER = FIRST_SYSTEM_WINDOW+18, 1228956dbbc5f292d8b79072ae73b25f2114c8c7479Daniel Sandler TYPE_NAVIGATION_BAR = FIRST_SYSTEM_WINDOW+19, 123928e054931d357326613c78e62f4d850b7c442ffJeff Brown LAST_SYSTEM_WINDOW = 2999, 124928e054931d357326613c78e62f4d850b7c442ffJeff Brown }; 125928e054931d357326613c78e62f4d850b7c442ffJeff Brown 126928e054931d357326613c78e62f4d850b7c442ffJeff Brown sp<InputWindowHandle> inputWindowHandle; 127928e054931d357326613c78e62f4d850b7c442ffJeff Brown sp<InputChannel> inputChannel; 128928e054931d357326613c78e62f4d850b7c442ffJeff Brown String8 name; 129928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t layoutParamsFlags; 130928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t layoutParamsType; 131928e054931d357326613c78e62f4d850b7c442ffJeff Brown nsecs_t dispatchingTimeout; 132928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t frameLeft; 133928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t frameTop; 134928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t frameRight; 135928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t frameBottom; 136fbf097732137a32930d151f7ba6816a5b870c32aJeff Brown SkRegion touchableRegion; 137928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool visible; 138928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool canReceiveKeys; 139928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool hasFocus; 140928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool hasWallpaper; 141928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool paused; 142928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t layer; 143928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t ownerPid; 144928e054931d357326613c78e62f4d850b7c442ffJeff Brown int32_t ownerUid; 145928e054931d357326613c78e62f4d850b7c442ffJeff Brown 146fbf097732137a32930d151f7ba6816a5b870c32aJeff Brown bool touchableRegionContainsPoint(int32_t x, int32_t y) const; 147928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool frameContainsPoint(int32_t x, int32_t y) const; 148928e054931d357326613c78e62f4d850b7c442ffJeff Brown 149928e054931d357326613c78e62f4d850b7c442ffJeff Brown /* Returns true if the window is of a trusted type that is allowed to silently 150928e054931d357326613c78e62f4d850b7c442ffJeff Brown * overlay other windows for the purpose of implementing the secure views feature. 151928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Trusted overlays, such as IME windows, can partly obscure other windows without causing 152928e054931d357326613c78e62f4d850b7c442ffJeff Brown * motion events to be delivered to them with AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED. 153928e054931d357326613c78e62f4d850b7c442ffJeff Brown */ 154928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool isTrustedOverlay() const; 155928e054931d357326613c78e62f4d850b7c442ffJeff Brown 156928e054931d357326613c78e62f4d850b7c442ffJeff Brown bool supportsSplitTouch() const; 157928e054931d357326613c78e62f4d850b7c442ffJeff Brown}; 158928e054931d357326613c78e62f4d850b7c442ffJeff Brown 159928e054931d357326613c78e62f4d850b7c442ffJeff Brown} // namespace android 160928e054931d357326613c78e62f4d850b7c442ffJeff Brown 161928e054931d357326613c78e62f4d850b7c442ffJeff Brown#endif // _UI_INPUT_WINDOW_H 162