summaryrefslogtreecommitdiffstats
path: root/services/input/InputWindow.h
Commit message (Collapse)AuthorAgeFilesLines
* Adjust layers for system overlays.Jeff Brown2011-09-081-0/+2
| | | | | | | | | | | Prevent system overlays from showing above the notification bar. Allow secure system overlays to be fullscreen, for the pointer location view. Show the drag layer above the notification bar. Change-Id: Ic8d663792a243cca2cd9952d241d001e0357d551
* Fix input channel leak.Jeff Brown2011-08-301-13/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bug: 5156144 Input channels could leak or simply live longer than they should in some cases. 1. Monitor channels (used by the pointer location overlay) are never unregistered, so they would leak. Added code to handle failures in the receive callback by closing the input channel. 2. The DragState held onto its input window and application handles even after the input channel was disposed. Added code to null these handles out when they are no longer needed. 3. Input channels previously used as input event targets would stick around until the targets were cleared (usually on the next event). Added code to detect when the input dispatcher is in an idle state and to proactively clear the targets then to ensure that resources are released promptly. 4. Native input window handles held onto the input channel even after the input window was removed from the input dispatcher. Consequently, the input channel would not be disposed until the input window handle itself was freed. Since the input window handle is held from managed code, this meant that the window's input channel could stick around until the next GC. Refactored the input window handle to separate the properties (info) and identify (handle) state into different objects. Then modified the dispatcher to release the properties (info) when no longer needed, including the input channel. 7. The pointer location overlay does not actually use its standard input channel, only the monitor input channel. Added INPUT_FEATURE_NO_INPUT_CHANNEL to allow windows to request that they not be provided with an input channel at all. Improved some of the error handling logic to emit the status code as part of the exception message. Change-Id: I01988d4391a70c6678c8b0e936ca051af680b1a5
* Refactor input dispatcher use of window/app handles.Jeff Brown2011-07-141-17/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | This change moves the cached window and application input state into the handle objects themselves. It simplifies the dispatcher somewhat because it no longer needs to fix up references to transient InputWindow objects each time the window list is updated. This change will also make it easier to optimize setInputWindows to avoid doing a lot of redundant data copying. In principle, only the modified fields need to be updated. However, for now we continue to update all fields in unison as before. It turns out that the input dispatcher was inappropriately retaining pointers to InputWindow objects within the mWindows InputWindow vector. This vector is copy-on-write so it is possible and the item pointers to change if an editing operation is performed on the vector when it does not exclusively own the underlying SharedBuffer. This bug was uncovered by a previous change that replaced calls to clear() and appendVector() with a simple use of operator= which caused the buffer to be shared. Consequently after editItemAt was called (which it shouldn't have, actually) the buffer was copied and the cached InputWindow pointers became invalid. Oops. This change fixes the problem. Change-Id: I0a259339a6015fcf9113dc4081a6875e047fd425
* Add support for disabling pointer gestures.Jeff Brown2011-06-141-0/+5
| | | | | | | | | | | | Made it possible for individual windows to disable pointer gestures while the window has focus using a private API. Cleaned up the InputReader configuration code to enable in-place reconfiguration of input devices without having to reopen them all. This change makes changing the pointer speed somewhat nicer since the pointer doesn't jump back to the origin after each change. Change-Id: I9727419c2f4cb39e16acb4b15fd7fd84526b1239
* Allow touches to slide out of the navigation bar.Jeff Brown2011-06-131-0/+4
| | | | Change-Id: I73cabba3d62f47829bf6217700ace56a27c42b1d
* am 0d9288d7: am 2bdb756c: am 4fb76253: Fix bounds check. Bug: 4413945Jeff Brown2011-05-131-5/+0
|\ | | | | | | | | * commit '0d9288d7848e144fdf7afbd7284254dae3d13d43': Fix bounds check. Bug: 4413945
| * Fix bounds check.Jeff Brown2011-05-131-5/+0
| | | | | | | | | | | | | | | | Bug: 4413945 Also remove dead code from header file. Change-Id: I4e9fc9d7f8612fedb436e62649d308bd737ed138
* | resolved conflicts for merge of 05be6d6f to masterDianne Hackborn2011-05-091-0/+6
|\ \ | |/ | | | | Change-Id: Ic6a6c5bb300f6f1d43f9ed550b284282b4f16212
| * Better compat mode part one: start scaling windows.Dianne Hackborn2011-05-091-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | First step of improving app screen size compatibility mode. When running in compat mode, an application's windows are scaled up on the screen rather than being small with 1:1 pixels. Currently we scale the application to fill the entire screen, so don't use an even pixel scaling. Though this may have some negative impact on the appearance (it looks okay to me), it has a big benefit of allowing us to now treat these apps as normal full-screens apps and do the normal transition animations as you move in and out and around in them. This introduces fun stuff in the input system to take care of modifying pointer coordinates to account for the app window surface scaling. The input dispatcher is told about the scale that is being applied to each window and, when there is one, adjusts pointer events appropriately as they are being sent to the transport. Also modified is CompatibilityInfo, which has been greatly simplified to not be so insane and incomprehendible. It is now simple -- when constructed it determines if the given app is compatible with the current screen size and density, and that is that. There are new APIs on ActivityManagerService to put applications that we would traditionally consider compatible with larger screens in compatibility mode. This is the start of a facility to have a UI affordance for a user to switch apps in and out of compatibility. To test switching of modes, there is a new variation of the "am" command to do this: am screen-compat [on|off] [package] This mode switching has the fundamentals of restarting activities when it is changed, though the state still needs to be persisted and the overall mode switch cleaned up. For the few small apps I have tested, things mostly seem to be working well. I know of one problem with the text selection handles being drawn at the wrong position because at some point the window offset is being scaled incorrectly. There are probably other similar issues around the interaction between two windows because the different window coordinate spaces are done in a hacky way instead of being formally integrated into the window manager layout process. Change-Id: Ie038e3746b448135117bd860859d74e360938557
* | On-screen navigation bar (separate from the status bar).Daniel Sandler2011-04-271-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Honeycomb we introduced navigation controls in the status bar, for xlarge devices without physical buttons. What about phones? The status bar is pretty cramped already, and besides, it's at the top of the display most of the time, not at the bottom where your thumb is likely to be. Enter the navigation bar. It's a new window type that appears atop almost everything (including the keyguard); the window manager subtracts its rectangle from the default visible rectangle of other windows (including the status bar and notification shade). However, it behaves (on phones) like the status bar in that applications that request fullscreen windows can get access to those pixels. Well, almost; they need cooperation from the navigation bar implementation to make the navbar disappear, just like the status bar. The current SystemUI implementation of the navigation bar on phones is still rough, but it has the basics: + back, home, and menu keys (NB: we're showing menu all the time right now because checking the api level of the package owning the top window is currently a poor indicator of whether the app requires the menu key) + it tries to stick to the same physical end of the device, regardless of device orientation (on a phone, this is the strip of land closest to the microphone) Change-Id: Ic613a3351220af0bbfbdef63e1d99cbefd5ed1c2
* | Make InputWindow.h's window types align with WindowManager.java's.Daniel Sandler2011-04-271-2/+3
|/ | | | Change-Id: Ia4919e02882ebc682c80bfaae1fa775606f17098
* Support non-rectangular input regions.Jeff Brown2011-01-161-9/+4
| | | | | | | | This enables the system bar to carve out a region through which events will be sent to the IME behind it. Bug: 3238092 Change-Id: I69b855a8d9b5b3ee525266c0861826e53e5b5028
* Prevent events from getting backlogged.Jeff Brown2011-01-101-0/+164
This change implements two heuristics. 1. When events are older than 10 seconds, they are dropped. 2. If the application is currently busy processing an event and the user touches a window belonging to a different application then we drop the currently queued events so the other application can start processing the gesture immediately. Note that the system takes care of synthesizing cancelation events automatically for any events that it drops. Added some new handle types to allow the native dispatcher to indirectly refer to the WindowManager's window state and app window token. This was done to enable the dispatcher to identify the application to which each window belongs but it also eliminates some lookup tables and linear searches through the window list on each key press. Bug: 3224911 Change-Id: I9dae8dfe23d195d76865f97011fe2f1d351e2940