1*38e8c45fSAndroid Build Coastguard Worker /* 2*38e8c45fSAndroid Build Coastguard Worker * Copyright (C) 2011 The Android Open Source Project 3*38e8c45fSAndroid Build Coastguard Worker * 4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*38e8c45fSAndroid Build Coastguard Worker * 8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*38e8c45fSAndroid Build Coastguard Worker * 10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License. 15*38e8c45fSAndroid Build Coastguard Worker */ 16*38e8c45fSAndroid Build Coastguard Worker 17*38e8c45fSAndroid Build Coastguard Worker #pragma once 18*38e8c45fSAndroid Build Coastguard Worker 19*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/TouchOcclusionMode.h> 20*38e8c45fSAndroid Build Coastguard Worker #include <android/os/InputConfig.h> 21*38e8c45fSAndroid Build Coastguard Worker #include <binder/Parcel.h> 22*38e8c45fSAndroid Build Coastguard Worker #include <binder/Parcelable.h> 23*38e8c45fSAndroid Build Coastguard Worker #include <ftl/flags.h> 24*38e8c45fSAndroid Build Coastguard Worker #include <ftl/mixins.h> 25*38e8c45fSAndroid Build Coastguard Worker #include <gui/PidUid.h> 26*38e8c45fSAndroid Build Coastguard Worker #include <ui/LogicalDisplayId.h> 27*38e8c45fSAndroid Build Coastguard Worker #include <ui/Rect.h> 28*38e8c45fSAndroid Build Coastguard Worker #include <ui/Region.h> 29*38e8c45fSAndroid Build Coastguard Worker #include <ui/Size.h> 30*38e8c45fSAndroid Build Coastguard Worker #include <ui/Transform.h> 31*38e8c45fSAndroid Build Coastguard Worker #include <utils/RefBase.h> 32*38e8c45fSAndroid Build Coastguard Worker #include <utils/Timers.h> 33*38e8c45fSAndroid Build Coastguard Worker 34*38e8c45fSAndroid Build Coastguard Worker #include "InputApplication.h" 35*38e8c45fSAndroid Build Coastguard Worker 36*38e8c45fSAndroid Build Coastguard Worker namespace android::gui { 37*38e8c45fSAndroid Build Coastguard Worker 38*38e8c45fSAndroid Build Coastguard Worker /* 39*38e8c45fSAndroid Build Coastguard Worker * Describes the properties of a window that can receive input. 40*38e8c45fSAndroid Build Coastguard Worker */ 41*38e8c45fSAndroid Build Coastguard Worker struct WindowInfo : public Parcelable { 42*38e8c45fSAndroid Build Coastguard Worker WindowInfo() = default; 43*38e8c45fSAndroid Build Coastguard Worker 44*38e8c45fSAndroid Build Coastguard Worker // Window flags from WindowManager.LayoutParams 45*38e8c45fSAndroid Build Coastguard Worker enum class Flag : uint32_t { 46*38e8c45fSAndroid Build Coastguard Worker ALLOW_LOCK_WHILE_SCREEN_ON = 0x00000001, 47*38e8c45fSAndroid Build Coastguard Worker DIM_BEHIND = 0x00000002, 48*38e8c45fSAndroid Build Coastguard Worker BLUR_BEHIND = 0x00000004, 49*38e8c45fSAndroid Build Coastguard Worker NOT_FOCUSABLE = 0x00000008, 50*38e8c45fSAndroid Build Coastguard Worker NOT_TOUCHABLE = 0x00000010, 51*38e8c45fSAndroid Build Coastguard Worker NOT_TOUCH_MODAL = 0x00000020, 52*38e8c45fSAndroid Build Coastguard Worker TOUCHABLE_WHEN_WAKING = 0x00000040, 53*38e8c45fSAndroid Build Coastguard Worker KEEP_SCREEN_ON = 0x00000080, 54*38e8c45fSAndroid Build Coastguard Worker LAYOUT_IN_SCREEN = 0x00000100, 55*38e8c45fSAndroid Build Coastguard Worker LAYOUT_NO_LIMITS = 0x00000200, 56*38e8c45fSAndroid Build Coastguard Worker FULLSCREEN = 0x00000400, 57*38e8c45fSAndroid Build Coastguard Worker FORCE_NOT_FULLSCREEN = 0x00000800, 58*38e8c45fSAndroid Build Coastguard Worker DITHER = 0x00001000, 59*38e8c45fSAndroid Build Coastguard Worker SECURE = 0x00002000, 60*38e8c45fSAndroid Build Coastguard Worker SCALED = 0x00004000, 61*38e8c45fSAndroid Build Coastguard Worker IGNORE_CHEEK_PRESSES = 0x00008000, 62*38e8c45fSAndroid Build Coastguard Worker LAYOUT_INSET_DECOR = 0x00010000, 63*38e8c45fSAndroid Build Coastguard Worker ALT_FOCUSABLE_IM = 0x00020000, 64*38e8c45fSAndroid Build Coastguard Worker WATCH_OUTSIDE_TOUCH = 0x00040000, 65*38e8c45fSAndroid Build Coastguard Worker SHOW_WHEN_LOCKED = 0x00080000, 66*38e8c45fSAndroid Build Coastguard Worker SHOW_WALLPAPER = 0x00100000, 67*38e8c45fSAndroid Build Coastguard Worker TURN_SCREEN_ON = 0x00200000, 68*38e8c45fSAndroid Build Coastguard Worker DISMISS_KEYGUARD = 0x00400000, 69*38e8c45fSAndroid Build Coastguard Worker SPLIT_TOUCH = 0x00800000, 70*38e8c45fSAndroid Build Coastguard Worker HARDWARE_ACCELERATED = 0x01000000, 71*38e8c45fSAndroid Build Coastguard Worker LAYOUT_IN_OVERSCAN = 0x02000000, 72*38e8c45fSAndroid Build Coastguard Worker TRANSLUCENT_STATUS = 0x04000000, 73*38e8c45fSAndroid Build Coastguard Worker TRANSLUCENT_NAVIGATION = 0x08000000, 74*38e8c45fSAndroid Build Coastguard Worker LOCAL_FOCUS_MODE = 0x10000000, 75*38e8c45fSAndroid Build Coastguard Worker SLIPPERY = 0x20000000, 76*38e8c45fSAndroid Build Coastguard Worker LAYOUT_ATTACHED_IN_DECOR = 0x40000000, 77*38e8c45fSAndroid Build Coastguard Worker DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000, 78*38e8c45fSAndroid Build Coastguard Worker }; 79*38e8c45fSAndroid Build Coastguard Worker 80*38e8c45fSAndroid Build Coastguard Worker // Window types from WindowManager.LayoutParams 81*38e8c45fSAndroid Build Coastguard Worker enum class Type : int32_t { 82*38e8c45fSAndroid Build Coastguard Worker UNKNOWN = 0, 83*38e8c45fSAndroid Build Coastguard Worker FIRST_APPLICATION_WINDOW = 1, 84*38e8c45fSAndroid Build Coastguard Worker BASE_APPLICATION = 1, 85*38e8c45fSAndroid Build Coastguard Worker APPLICATION = 2, 86*38e8c45fSAndroid Build Coastguard Worker APPLICATION_STARTING = 3, 87*38e8c45fSAndroid Build Coastguard Worker LAST_APPLICATION_WINDOW = 99, 88*38e8c45fSAndroid Build Coastguard Worker FIRST_SUB_WINDOW = 1000, 89*38e8c45fSAndroid Build Coastguard Worker APPLICATION_PANEL = FIRST_SUB_WINDOW, 90*38e8c45fSAndroid Build Coastguard Worker APPLICATION_MEDIA = FIRST_SUB_WINDOW + 1, 91*38e8c45fSAndroid Build Coastguard Worker APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW + 2, 92*38e8c45fSAndroid Build Coastguard Worker APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW + 3, 93*38e8c45fSAndroid Build Coastguard Worker APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW + 4, 94*38e8c45fSAndroid Build Coastguard Worker LAST_SUB_WINDOW = 1999, 95*38e8c45fSAndroid Build Coastguard Worker 96*38e8c45fSAndroid Build Coastguard Worker #define FIRST_SYSTEM_WINDOW_ 2000 97*38e8c45fSAndroid Build Coastguard Worker 98*38e8c45fSAndroid Build Coastguard Worker STATUS_BAR = FIRST_SYSTEM_WINDOW_, 99*38e8c45fSAndroid Build Coastguard Worker SEARCH_BAR = FIRST_SYSTEM_WINDOW_ + 1, 100*38e8c45fSAndroid Build Coastguard Worker PHONE = FIRST_SYSTEM_WINDOW_ + 2, 101*38e8c45fSAndroid Build Coastguard Worker SYSTEM_ALERT = FIRST_SYSTEM_WINDOW_ + 3, 102*38e8c45fSAndroid Build Coastguard Worker KEYGUARD = FIRST_SYSTEM_WINDOW_ + 4, 103*38e8c45fSAndroid Build Coastguard Worker TOAST = FIRST_SYSTEM_WINDOW_ + 5, 104*38e8c45fSAndroid Build Coastguard Worker SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW_ + 6, 105*38e8c45fSAndroid Build Coastguard Worker PRIORITY_PHONE = FIRST_SYSTEM_WINDOW_ + 7, 106*38e8c45fSAndroid Build Coastguard Worker SYSTEM_DIALOG = FIRST_SYSTEM_WINDOW_ + 8, 107*38e8c45fSAndroid Build Coastguard Worker KEYGUARD_DIALOG = FIRST_SYSTEM_WINDOW_ + 9, 108*38e8c45fSAndroid Build Coastguard Worker SYSTEM_ERROR = FIRST_SYSTEM_WINDOW_ + 10, 109*38e8c45fSAndroid Build Coastguard Worker INPUT_METHOD = FIRST_SYSTEM_WINDOW_ + 11, 110*38e8c45fSAndroid Build Coastguard Worker INPUT_METHOD_DIALOG = FIRST_SYSTEM_WINDOW_ + 12, 111*38e8c45fSAndroid Build Coastguard Worker WALLPAPER = FIRST_SYSTEM_WINDOW_ + 13, 112*38e8c45fSAndroid Build Coastguard Worker STATUS_BAR_PANEL = FIRST_SYSTEM_WINDOW_ + 14, 113*38e8c45fSAndroid Build Coastguard Worker SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW_ + 15, 114*38e8c45fSAndroid Build Coastguard Worker DRAG = FIRST_SYSTEM_WINDOW_ + 16, 115*38e8c45fSAndroid Build Coastguard Worker STATUS_BAR_SUB_PANEL = FIRST_SYSTEM_WINDOW_ + 17, 116*38e8c45fSAndroid Build Coastguard Worker POINTER = FIRST_SYSTEM_WINDOW_ + 18, 117*38e8c45fSAndroid Build Coastguard Worker NAVIGATION_BAR = FIRST_SYSTEM_WINDOW_ + 19, 118*38e8c45fSAndroid Build Coastguard Worker VOLUME_OVERLAY = FIRST_SYSTEM_WINDOW_ + 20, 119*38e8c45fSAndroid Build Coastguard Worker BOOT_PROGRESS = FIRST_SYSTEM_WINDOW_ + 21, 120*38e8c45fSAndroid Build Coastguard Worker INPUT_CONSUMER = FIRST_SYSTEM_WINDOW_ + 22, 121*38e8c45fSAndroid Build Coastguard Worker NAVIGATION_BAR_PANEL = FIRST_SYSTEM_WINDOW_ + 24, 122*38e8c45fSAndroid Build Coastguard Worker MAGNIFICATION_OVERLAY = FIRST_SYSTEM_WINDOW_ + 27, 123*38e8c45fSAndroid Build Coastguard Worker ACCESSIBILITY_OVERLAY = FIRST_SYSTEM_WINDOW_ + 32, 124*38e8c45fSAndroid Build Coastguard Worker DOCK_DIVIDER = FIRST_SYSTEM_WINDOW_ + 34, 125*38e8c45fSAndroid Build Coastguard Worker ACCESSIBILITY_MAGNIFICATION_OVERLAY = FIRST_SYSTEM_WINDOW_ + 39, 126*38e8c45fSAndroid Build Coastguard Worker NOTIFICATION_SHADE = FIRST_SYSTEM_WINDOW_ + 40, 127*38e8c45fSAndroid Build Coastguard Worker 128*38e8c45fSAndroid Build Coastguard Worker FIRST_SYSTEM_WINDOW = FIRST_SYSTEM_WINDOW_, 129*38e8c45fSAndroid Build Coastguard Worker LAST_SYSTEM_WINDOW = 2999, 130*38e8c45fSAndroid Build Coastguard Worker 131*38e8c45fSAndroid Build Coastguard Worker #undef FIRST_SYSTEM_WINDOW_ 132*38e8c45fSAndroid Build Coastguard Worker 133*38e8c45fSAndroid Build Coastguard Worker // Small range to limit LUT size. 134*38e8c45fSAndroid Build Coastguard Worker ftl_first = FIRST_SYSTEM_WINDOW, 135*38e8c45fSAndroid Build Coastguard Worker ftl_last = FIRST_SYSTEM_WINDOW + 15 136*38e8c45fSAndroid Build Coastguard Worker }; 137*38e8c45fSAndroid Build Coastguard Worker 138*38e8c45fSAndroid Build Coastguard Worker // Flags used to determine configuration of this input window. 139*38e8c45fSAndroid Build Coastguard Worker // This is a conversion of os::InputConfig to an enum backed by an unsigned 140*38e8c45fSAndroid Build Coastguard Worker // type. This indicates that they are flags, so it can be used with ftl/enum.h. 141*38e8c45fSAndroid Build Coastguard Worker enum class InputConfig : uint32_t { 142*38e8c45fSAndroid Build Coastguard Worker // clang-format off 143*38e8c45fSAndroid Build Coastguard Worker DEFAULT = 144*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::DEFAULT), 145*38e8c45fSAndroid Build Coastguard Worker NO_INPUT_CHANNEL = 146*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::NO_INPUT_CHANNEL), 147*38e8c45fSAndroid Build Coastguard Worker NOT_VISIBLE = 148*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::NOT_VISIBLE), 149*38e8c45fSAndroid Build Coastguard Worker NOT_FOCUSABLE = 150*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::NOT_FOCUSABLE), 151*38e8c45fSAndroid Build Coastguard Worker NOT_TOUCHABLE = 152*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::NOT_TOUCHABLE), 153*38e8c45fSAndroid Build Coastguard Worker PREVENT_SPLITTING = 154*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::PREVENT_SPLITTING), 155*38e8c45fSAndroid Build Coastguard Worker DUPLICATE_TOUCH_TO_WALLPAPER = 156*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::DUPLICATE_TOUCH_TO_WALLPAPER), 157*38e8c45fSAndroid Build Coastguard Worker IS_WALLPAPER = 158*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::IS_WALLPAPER), 159*38e8c45fSAndroid Build Coastguard Worker PAUSE_DISPATCHING = 160*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::PAUSE_DISPATCHING), 161*38e8c45fSAndroid Build Coastguard Worker TRUSTED_OVERLAY = 162*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::TRUSTED_OVERLAY), 163*38e8c45fSAndroid Build Coastguard Worker WATCH_OUTSIDE_TOUCH = 164*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::WATCH_OUTSIDE_TOUCH), 165*38e8c45fSAndroid Build Coastguard Worker SLIPPERY = 166*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::SLIPPERY), 167*38e8c45fSAndroid Build Coastguard Worker DISABLE_USER_ACTIVITY = 168*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::DISABLE_USER_ACTIVITY), 169*38e8c45fSAndroid Build Coastguard Worker DROP_INPUT = 170*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::DROP_INPUT), 171*38e8c45fSAndroid Build Coastguard Worker DROP_INPUT_IF_OBSCURED = 172*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::DROP_INPUT_IF_OBSCURED), 173*38e8c45fSAndroid Build Coastguard Worker SPY = 174*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::SPY), 175*38e8c45fSAndroid Build Coastguard Worker INTERCEPTS_STYLUS = 176*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::INTERCEPTS_STYLUS), 177*38e8c45fSAndroid Build Coastguard Worker CLONE = 178*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::CLONE), 179*38e8c45fSAndroid Build Coastguard Worker GLOBAL_STYLUS_BLOCKS_TOUCH = 180*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::GLOBAL_STYLUS_BLOCKS_TOUCH), 181*38e8c45fSAndroid Build Coastguard Worker SENSITIVE_FOR_PRIVACY = 182*38e8c45fSAndroid Build Coastguard Worker static_cast<uint32_t>(os::InputConfig::SENSITIVE_FOR_PRIVACY), 183*38e8c45fSAndroid Build Coastguard Worker // clang-format on 184*38e8c45fSAndroid Build Coastguard Worker }; 185*38e8c45fSAndroid Build Coastguard Worker 186*38e8c45fSAndroid Build Coastguard Worker /* These values are filled in by the WM and passed through SurfaceFlinger 187*38e8c45fSAndroid Build Coastguard Worker * unless specified otherwise. 188*38e8c45fSAndroid Build Coastguard Worker */ 189*38e8c45fSAndroid Build Coastguard Worker // This value should NOT be used to uniquely identify the window. There may be different 190*38e8c45fSAndroid Build Coastguard Worker // input windows that have the same token. 191*38e8c45fSAndroid Build Coastguard Worker sp<IBinder> token; 192*38e8c45fSAndroid Build Coastguard Worker 193*38e8c45fSAndroid Build Coastguard Worker // The token that identifies which client window this WindowInfo was created for. 194*38e8c45fSAndroid Build Coastguard Worker sp<IBinder> windowToken; 195*38e8c45fSAndroid Build Coastguard Worker 196*38e8c45fSAndroid Build Coastguard Worker // This uniquely identifies the input window. 197*38e8c45fSAndroid Build Coastguard Worker int32_t id = -1; 198*38e8c45fSAndroid Build Coastguard Worker std::string name; 199*38e8c45fSAndroid Build Coastguard Worker std::chrono::nanoseconds dispatchingTimeout = std::chrono::seconds(5); 200*38e8c45fSAndroid Build Coastguard Worker 201*38e8c45fSAndroid Build Coastguard Worker /* These values are filled in by SurfaceFlinger. */ 202*38e8c45fSAndroid Build Coastguard Worker Rect frame = Rect::INVALID_RECT; 203*38e8c45fSAndroid Build Coastguard Worker 204*38e8c45fSAndroid Build Coastguard Worker // The real size of the content, excluding any crop. If no buffer is rendered, this is 0,0 205*38e8c45fSAndroid Build Coastguard Worker ui::Size contentSize = ui::Size(0, 0); 206*38e8c45fSAndroid Build Coastguard Worker 207*38e8c45fSAndroid Build Coastguard Worker /* 208*38e8c45fSAndroid Build Coastguard Worker * SurfaceFlinger consumes this value to shrink the computed frame. This is 209*38e8c45fSAndroid Build Coastguard Worker * different from shrinking the touchable region in that it DOES shift the coordinate 210*38e8c45fSAndroid Build Coastguard Worker * space where-as the touchable region does not and is more like "cropping". This 211*38e8c45fSAndroid Build Coastguard Worker * is used for window shadows. 212*38e8c45fSAndroid Build Coastguard Worker */ 213*38e8c45fSAndroid Build Coastguard Worker int32_t surfaceInset = 0; 214*38e8c45fSAndroid Build Coastguard Worker 215*38e8c45fSAndroid Build Coastguard Worker // A global scaling factor for all windows. Unlike windowScaleX/Y this results 216*38e8c45fSAndroid Build Coastguard Worker // in scaling of the TOUCH_MAJOR/TOUCH_MINOR axis. 217*38e8c45fSAndroid Build Coastguard Worker float globalScaleFactor = 1.0f; 218*38e8c45fSAndroid Build Coastguard Worker 219*38e8c45fSAndroid Build Coastguard Worker // The opacity of this window, from 0.0 to 1.0 (inclusive). 220*38e8c45fSAndroid Build Coastguard Worker // An alpha of 1.0 means fully opaque and 0.0 means fully transparent. 221*38e8c45fSAndroid Build Coastguard Worker float alpha; 222*38e8c45fSAndroid Build Coastguard Worker 223*38e8c45fSAndroid Build Coastguard Worker // Transform applied to individual windows. 224*38e8c45fSAndroid Build Coastguard Worker ui::Transform transform; 225*38e8c45fSAndroid Build Coastguard Worker 226*38e8c45fSAndroid Build Coastguard Worker /* 227*38e8c45fSAndroid Build Coastguard Worker * This is filled in by the WM relative to the frame and then translated 228*38e8c45fSAndroid Build Coastguard Worker * to absolute coordinates by SurfaceFlinger once the frame is computed. 229*38e8c45fSAndroid Build Coastguard Worker */ 230*38e8c45fSAndroid Build Coastguard Worker Region touchableRegion; 231*38e8c45fSAndroid Build Coastguard Worker 232*38e8c45fSAndroid Build Coastguard Worker TouchOcclusionMode touchOcclusionMode = TouchOcclusionMode::BLOCK_UNTRUSTED; 233*38e8c45fSAndroid Build Coastguard Worker Pid ownerPid = Pid::INVALID; 234*38e8c45fSAndroid Build Coastguard Worker Uid ownerUid = Uid::INVALID; 235*38e8c45fSAndroid Build Coastguard Worker std::string packageName; 236*38e8c45fSAndroid Build Coastguard Worker ftl::Flags<InputConfig> inputConfig; 237*38e8c45fSAndroid Build Coastguard Worker ui::LogicalDisplayId displayId = ui::LogicalDisplayId::INVALID; 238*38e8c45fSAndroid Build Coastguard Worker InputApplicationInfo applicationInfo; 239*38e8c45fSAndroid Build Coastguard Worker bool replaceTouchableRegionWithCrop = false; 240*38e8c45fSAndroid Build Coastguard Worker wp<IBinder> touchableRegionCropHandle; 241*38e8c45fSAndroid Build Coastguard Worker 242*38e8c45fSAndroid Build Coastguard Worker // The window's layout params flags and type set by WM. 243*38e8c45fSAndroid Build Coastguard Worker Type layoutParamsType = Type::UNKNOWN; 244*38e8c45fSAndroid Build Coastguard Worker ftl::Flags<Flag> layoutParamsFlags; 245*38e8c45fSAndroid Build Coastguard Worker 246*38e8c45fSAndroid Build Coastguard Worker // The input token for the window to which focus should be transferred when this input window 247*38e8c45fSAndroid Build Coastguard Worker // can be successfully focused. If null, this input window will not transfer its focus to 248*38e8c45fSAndroid Build Coastguard Worker // any other window. 249*38e8c45fSAndroid Build Coastguard Worker sp<IBinder> focusTransferTarget; 250*38e8c45fSAndroid Build Coastguard Worker 251*38e8c45fSAndroid Build Coastguard Worker // Sets a property on this window indicating that its visible region should be considered when 252*38e8c45fSAndroid Build Coastguard Worker // computing TrustedPresentation Thresholds. 253*38e8c45fSAndroid Build Coastguard Worker bool canOccludePresentation = false; 254*38e8c45fSAndroid Build Coastguard Worker 255*38e8c45fSAndroid Build Coastguard Worker void setInputConfig(ftl::Flags<InputConfig> config, bool value); 256*38e8c45fSAndroid Build Coastguard Worker 257*38e8c45fSAndroid Build Coastguard Worker void addTouchableRegion(const Rect& region); 258*38e8c45fSAndroid Build Coastguard Worker 259*38e8c45fSAndroid Build Coastguard Worker bool supportsSplitTouch() const; 260*38e8c45fSAndroid Build Coastguard Worker 261*38e8c45fSAndroid Build Coastguard Worker bool isSpy() const; 262*38e8c45fSAndroid Build Coastguard Worker 263*38e8c45fSAndroid Build Coastguard Worker bool interceptsStylus() const; 264*38e8c45fSAndroid Build Coastguard Worker 265*38e8c45fSAndroid Build Coastguard Worker bool overlaps(const WindowInfo* other) const; 266*38e8c45fSAndroid Build Coastguard Worker 267*38e8c45fSAndroid Build Coastguard Worker bool operator==(const WindowInfo& inputChannel) const; 268*38e8c45fSAndroid Build Coastguard Worker 269*38e8c45fSAndroid Build Coastguard Worker status_t writeToParcel(android::Parcel* parcel) const override; 270*38e8c45fSAndroid Build Coastguard Worker 271*38e8c45fSAndroid Build Coastguard Worker status_t readFromParcel(const android::Parcel* parcel) override; 272*38e8c45fSAndroid Build Coastguard Worker }; 273*38e8c45fSAndroid Build Coastguard Worker 274*38e8c45fSAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& out, const WindowInfo& window); 275*38e8c45fSAndroid Build Coastguard Worker 276*38e8c45fSAndroid Build Coastguard Worker /* 277*38e8c45fSAndroid Build Coastguard Worker * Handle for a window that can receive input. 278*38e8c45fSAndroid Build Coastguard Worker * 279*38e8c45fSAndroid Build Coastguard Worker * Used by the native input dispatcher to indirectly refer to the window manager objects 280*38e8c45fSAndroid Build Coastguard Worker * that describe a window. 281*38e8c45fSAndroid Build Coastguard Worker */ 282*38e8c45fSAndroid Build Coastguard Worker class WindowInfoHandle : public RefBase { 283*38e8c45fSAndroid Build Coastguard Worker public: 284*38e8c45fSAndroid Build Coastguard Worker explicit WindowInfoHandle(); 285*38e8c45fSAndroid Build Coastguard Worker WindowInfoHandle(const WindowInfoHandle& other); 286*38e8c45fSAndroid Build Coastguard Worker WindowInfoHandle(const WindowInfo& other); 287*38e8c45fSAndroid Build Coastguard Worker getInfo()288*38e8c45fSAndroid Build Coastguard Worker inline const WindowInfo* getInfo() const { return &mInfo; } editInfo()289*38e8c45fSAndroid Build Coastguard Worker inline WindowInfo* editInfo() { return &mInfo; } 290*38e8c45fSAndroid Build Coastguard Worker 291*38e8c45fSAndroid Build Coastguard Worker sp<IBinder> getToken() const; 292*38e8c45fSAndroid Build Coastguard Worker getId()293*38e8c45fSAndroid Build Coastguard Worker int32_t getId() const { return mInfo.id; } 294*38e8c45fSAndroid Build Coastguard Worker getApplicationToken()295*38e8c45fSAndroid Build Coastguard Worker sp<IBinder> getApplicationToken() { return mInfo.applicationInfo.token; } 296*38e8c45fSAndroid Build Coastguard Worker getName()297*38e8c45fSAndroid Build Coastguard Worker inline std::string getName() const { return !mInfo.name.empty() ? mInfo.name : "<invalid>"; } 298*38e8c45fSAndroid Build Coastguard Worker getDispatchingTimeout(std::chrono::nanoseconds defaultValue)299*38e8c45fSAndroid Build Coastguard Worker inline std::chrono::nanoseconds getDispatchingTimeout( 300*38e8c45fSAndroid Build Coastguard Worker std::chrono::nanoseconds defaultValue) const { 301*38e8c45fSAndroid Build Coastguard Worker return mInfo.token ? std::chrono::nanoseconds(mInfo.dispatchingTimeout) : defaultValue; 302*38e8c45fSAndroid Build Coastguard Worker } 303*38e8c45fSAndroid Build Coastguard Worker 304*38e8c45fSAndroid Build Coastguard Worker /** 305*38e8c45fSAndroid Build Coastguard Worker * Updates from another input window handle. 306*38e8c45fSAndroid Build Coastguard Worker */ 307*38e8c45fSAndroid Build Coastguard Worker void updateFrom(const sp<WindowInfoHandle> handle); 308*38e8c45fSAndroid Build Coastguard Worker 309*38e8c45fSAndroid Build Coastguard Worker /** 310*38e8c45fSAndroid Build Coastguard Worker * Releases the channel used by the associated information when it is 311*38e8c45fSAndroid Build Coastguard Worker * no longer needed. 312*38e8c45fSAndroid Build Coastguard Worker */ 313*38e8c45fSAndroid Build Coastguard Worker void releaseChannel(); 314*38e8c45fSAndroid Build Coastguard Worker 315*38e8c45fSAndroid Build Coastguard Worker // Not override since this class is not derrived from Parcelable. 316*38e8c45fSAndroid Build Coastguard Worker status_t readFromParcel(const android::Parcel* parcel); 317*38e8c45fSAndroid Build Coastguard Worker status_t writeToParcel(android::Parcel* parcel) const; 318*38e8c45fSAndroid Build Coastguard Worker 319*38e8c45fSAndroid Build Coastguard Worker protected: 320*38e8c45fSAndroid Build Coastguard Worker virtual ~WindowInfoHandle(); 321*38e8c45fSAndroid Build Coastguard Worker 322*38e8c45fSAndroid Build Coastguard Worker WindowInfo mInfo; 323*38e8c45fSAndroid Build Coastguard Worker }; 324*38e8c45fSAndroid Build Coastguard Worker 325*38e8c45fSAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& out, const WindowInfoHandle& window); 326*38e8c45fSAndroid Build Coastguard Worker 327*38e8c45fSAndroid Build Coastguard Worker } // namespace android::gui 328