Commit Graph

521 Commits

Author SHA1 Message Date
Konstantin Lopyrev
bef337f516 Making sure the draw time is measured.
Change-Id: I6bf8094aee03793f125008386c4fea730e95d07a
2010-08-18 11:31:27 -07:00
Mathias Agopian
833533c929 Improve Display javadoc slightly
Change-Id: Iaa7d599e11d42d4aaf50e87b141f9b8d04ba445e
2010-08-16 13:30:20 -07:00
Jeff Brown
92ff1dd835 Fix ViewRoot bug attempting to finish synthetic KeyEvents.
Bug: 2834068
Change-Id: I34ee0c4479cee36b25a2c3e1cdf5d761b663ac1e
2010-08-11 16:18:13 -07:00
Jeff Brown
95af0c14a6 Merge "Add support for the PointerLocation overlay." into gingerbread 2010-08-11 16:15:48 -07:00
Jeff Brown
a41ca77fab Add support for the PointerLocation overlay.
This change involves adding a new method to IWindowManager,
monitorInput() that returns an InputChannel to receive a copy of all
input that is dispatched to applications.  The caller must have
the READ_INPUT_STATE permission to make this request (similar to
other window manager methods such as getKeycodeState).

Change-Id: Icd14d810174a5b2928671ef16de73af88302aea0
2010-08-11 14:46:32 -07:00
Konstantin Lopyrev
91a7f5fef8 Making sure that the prefix is handled properly.
Change-Id: Ic50327b1ed4d6b54753b5b3887508a53cd7a3497
2010-08-10 18:54:54 -07:00
Adam Powell
224ab9a5c6 Merge "Fix public bug http://code.google.com/p/android/issues/detail?id=10067" into gingerbread 2010-08-10 17:52:15 -07:00
Adam Powell
9bccdb7d5c Fix public bug http://code.google.com/p/android/issues/detail?id=10067
Change-Id: I7b7a9a32e82fc7541beabe286b20b01f39406cc8
2010-08-10 17:50:11 -07:00
Konstantin Lopyrev
f39d5987b9 Merge "Categorizing exported view properties." into gingerbread 2010-08-10 17:48:27 -07:00
Konstantin Lopyrev
bea95162ca Categorizing exported view properties.
Change-Id: I79c42019836973d80662c21d195d088ae01537a0
2010-08-10 17:45:03 -07:00
Jeff Brown
c3fc2d03d5 Fix safe mode and KeyEvent.getMaxKeyCode().
Bug: 2901731
Change-Id: I78617c1b9dee3790fc590e5af4b5083368873184
2010-08-10 16:28:03 -07:00
Jeff Brown
d98d0fc6e9 Merge "Optimize VelocityTracker to run in linear time." into gingerbread 2010-08-10 16:26:56 -07:00
Jeff Brown
88cf2fca38 Optimize VelocityTracker to run in linear time.
Uses a linked list for efficient pointer addition and removal.
When possible, makes use of the fact that pointer ids are usually in
sorted order to avoid quadratic time lookups when adding new data.
Fixed an incorrect assumption that the pointer count would always change
when old pointers were removed.

Also fixed a bug in InputQueue FinishedCallback recycling.

Change-Id: Ie048d3bb022d39cf4185e2fe43923a861d94c4f3
2010-08-09 18:50:35 -07:00
Konstantin Lopyrev
63cca69157 Merge "Make sure profiling is done only for views that are actually measured, laid out and drawn." into gingerbread 2010-08-09 17:02:39 -07:00
Konstantin Lopyrev
c6dc45700b Make sure profiling is done only for views that are actually measured, laid out and drawn.
Change-Id: I88c66e882be2781d079c51b6580a19c4e359c5b1
2010-08-06 15:41:33 -07:00
Steve Howard
5f531ae6b3 Slight improvement (hopefully) to orientation sensing.
Since orientation sensing has been an issue for numerous users, I
decided a spend a little time experimenting with some possible
improvements.  I've settled on a couple major changes:

* Perform all lowpass filtering in spherical coordinates, not
  cartesian.  Since the rotations are what we're really concerned
  with, this makes more sense and gives more consistent results.

* Introduce a system of tracking "distrust" in the current data, based
  on external acceleration and on tilt.  The basic idea is after a
  signal of unreliable data -- repeated acceleration or
  nearly-horizontal tilt -- we wait for things to "stabilize" for some
  number of ticks before we start trusting the data again.  This is an
  extension of the basic lowpass filtering.  One simple example is
  after the phone is picked up off a table, we ignore the first few
  readings.  Another example is while the phone is under external
  acceleration for a while (i.e. in a car mount on a rough road), if a
  single "good" reading comes in, we distrust it, under the assumption
  that it was probably just a lucky reading (i.e. the magnitude
  happened to be close to that of gravity by chance).

These changes have allowed me to relax other constraints, such as the
filtering time constants, the maximum deviation from gravity, and the
max tilt before we start distrusting data.

The net effect is that orientation changes happen more quickly and can
happen under a wider variety of conditions, but false changes due to
tilt and acceleration are still avoided well.  I think the improvement
is subtle, but it's the best I've come up with in my limited time.

I've also included some refactoring and additonal comments to try and
further clarify the (somewhat twisted) logic.

Change-Id: I34c7297bd2061fae8317ffefd32a85c7538a3efb
2010-08-05 18:26:03 -07:00
Chris Tate
5d46ce24cc Merge "Enhanced VelocityTracker for > 5 pointers and fixed bugs." into gingerbread 2010-08-03 12:22:50 -07:00
Konstantin Lopyrev
f8e1219cf8 Improving profiling of views.
Change-Id: I1abb8c21f1769ad55416f37e7bfa1458b80ace63
2010-08-02 19:08:56 -07:00
Jeff Brown
9e2ad36be8 Enhanced VelocityTracker for > 5 pointers and fixed bugs.
Improved PointerLocation tool to use VelocityTracker more efficiently
and correctly when multiple pointers are down.

Fixed a bug in TouchInputMapper where it was not correctly copying
the id to index map in the last touch data.  This could cause strange
behavior on secondary pointer up events.

Also added finished callback pooling in InputQueue.

Change-Id: Ia85e52ac2fb7350960ea1d7edfbe81a1b3e8267b
2010-07-30 20:08:29 -07:00
Jeff Brown
6ec402b5ae DO NOT MERGE: Fix input event injection ANRs on UI thread.
Added a new asynchronous injection mode and made the existing
synchronization mechanism more robust.

Change-Id: Ia4aa04fd9b75ea2461a844c5b7933c831c1027e6
2010-07-29 12:54:27 -07:00
Jeff Brown
6d0fec2de3 Refactor input reader to support new device types more easily.
Refactored the input reader so that each raw input protocol is handled
by a separate subclass of the new InputMapper type.  This way, behaviors
pertaining to keyboard, trackballs, touchscreens, switches and other
devices are clearly distinguished for improved maintainability.

Added partial support for describing capabilities of input devices
(incomplete and untested for now, will be fleshed out in later commits).

Simplified EventHub interface somewhat since InputReader is taking over
more of the work.

Cleaned up some of the interactions between InputManager and
WindowManagerService related to reading input state.

Fixed swiping finger from screen edge into display area.

Added logging of device information to 'dumpsys window'.

Change-Id: I17faffc33e3aec3a0f33f0b37e81a70609378612
2010-07-28 14:16:15 -07:00
Jeff Brown
e33348ba54 Fix bug with phantom input windows.
Add dumpsys integration for the native input dispatcher.
Add some InputDevice API stubs.
Add an appendFormat helper method to String8 for printf style
string formatting mainly for debugging purposes.
Use generic ArrayList<WindowState> everywhere in WindowManagerService
to eliminate unnecessary casts all over.

Change-Id: I9d1e3bd90eb7222d10620200477f11b7bfd25e44
2010-07-16 00:02:48 -07:00
Jeff Brown
c5ed5910c9 Add support for new input sources.
Added several new coordinate values to MotionEvents to capture
touch major/minor area, tool major/minor area and orientation.

Renamed NDK input constants per convention.

Added InputDevice class in Java which will eventually provide
useful information about available input devices.

Added APIs for manufacturing new MotionEvent objects with multiple
pointers and all necessary coordinate data.

Fixed a bug in the input dispatcher where it could get stuck with
a pointer down forever.

Fixed a bug in the WindowManager where the input window list could
end up containing stale removed windows.

Fixed a bug in the WindowManager where the input channel was being
removed only after the final animation transition had taken place
which caused spurious WINDOW DIED log messages to be printed.

Change-Id: Ie55084da319b20aad29b28a0499b8dd98bb5da68
2010-07-15 18:32:33 -07:00
Scott Main
5352d2378d am 38137d7a: Merge "docs: lots of additions to the resources docs new drawable resources add <merge> and <include> to layout resource update drawable class descriptioons to point to resources guide add ID resource type" into froyo
Merge commit '38137d7a27b037611c70a9d900aa53b4c15563bf' into gingerbread

* commit '38137d7a27b037611c70a9d900aa53b4c15563bf':
  docs: lots of additions to the resources docs
2010-07-15 11:20:32 -07:00
Dianne Hackborn
ed86eaa730 Merge "Argh oops I didn't mean to delete this." into gingerbread 2010-07-14 17:02:49 -07:00
Jim Miller
9d42c7f75c Merge "Fix 2797185: Re-enable thumbnail generation in framework" into gingerbread 2010-07-14 16:59:52 -07:00
Dianne Hackborn
251fd430c7 Argh oops I didn't mean to delete this.
Change-Id: I3d0877d56f1abab3d0929a086621f4ef1212cecc
2010-07-14 16:56:31 -07:00
Dianne Hackborn
d76b67c340 IME events are now dispatched to native applications.
And also:

- APIs to show and hide the IME, and control its interaction with the app.
- APIs to tell the app when its window resizes and needs to be redrawn.
- API to tell the app the content rectangle of its window (to layout
  around the IME or status bar).

There is still a problem with IME interaction -- we need a way for the
app to deliver events to the IME before it handles them, so that for
example the back key will close the IME instead of finishing the app.

Change-Id: I37b75fc2ec533750ef36ca3aedd2f0cc0b5813cd
2010-07-13 18:36:46 -07:00
Jim Miller
0b2a6d0773 Fix 2797185: Re-enable thumbnail generation in framework
This re-enables thumbnail generation code in the framework
with a few improvements.

In addition to enabling the system to capture thumbnails,
it removes padding from the borders to account for space
overlapped by system widgets (status bar, etc.). Thus,
the contents of the bitmap are only those pixels unique to
the activity.

It also maximizes resolution of the bitmap by capturing the
image in the application's current orientation. In landscape
mode, it captures a bitmap with dimensions w x h.  In portrait,
it captures a bitmap with dimensions h x w. Where w and h are
thumbnail_width and thumbnail_height as defined in dimens.xml.

Though enabled, the change is not currently used in this
branch.  The work is being checked in here to avoid
complicated downstream merges.

Change-Id: Ifc8a4e0075d7d0697d8159589be3816ace31d70c
2010-07-13 18:35:14 -07:00
Jeff Brown
fd03582995 Add initial gamepad support.
Change-Id: I0439648f6eb5405f200e4223c915eb3a418b32b9
2010-07-13 17:04:57 -07:00
Dianne Hackborn
289b9b6237 Add ANativeWindow API for directly drawing to the surface bits.
Also other cleanup and fixes:

- We now properly set the default window format to 565.
- New APIs to set the window format and flags from native code.
- Tweaked glue for simpler handling of the "destroy" message.
- Um, other stuff.

Change-Id: Id7790a21a2fa9a19b91854d225324a7c1e7c6ade
2010-07-09 16:58:19 -07:00
Jeff Brown
00fa7bdd69 More native input dispatch work.
Removed old input dispatch code.
Refactored the policy callbacks.
Pushed a tiny bit of the power manager state down to native.
Fixed long press on MENU.
Made the virtual key detection and cancelation a bit more precise.

Change-Id: I5d8c1062f7ea0ab3b54c6fadb058c4d5f5a9e02e
2010-07-03 19:23:01 -07:00
Dianne Hackborn
3c80a4a044 Implement default key handling for native code.
The native code now maintains a list of all keys that may use
default handling.  If the app finishes one of these keys
without handling it, the key will be passed back off to Java
for default treatment.

Change-Id: I6a842a0d728eeafa4de7142fae573f8c11099e18
2010-06-30 10:49:40 -07:00
Jeff Brown
349703effc Native input event dispatching.
Target identification is now fully native.
Fixed a couple of minor issues related to input injection.
Native input enabled by default, can be disabled by setting
WindowManagerPolicy.ENABLE_NATIVE_INPUT_DISPATCH to false.

Change-Id: I7edf66ed3e987cc9306ad4743ac57a116af452ff
2010-06-28 19:10:54 -07:00
Dianne Hackborn
1e4b9f3936 Remove InputConsumer, replacing with InputQueue.
Change-Id: Ib06907278457aaee842b123adc072840ca3602d8
2010-06-23 14:37:30 -07:00
Adam Powell
110486f932 Fix a bug where requestDisallowInterceptTouchEvent does not get called
when scrolling is resumed after stopping a fling.

Change-Id: I6796c5082cb81b3116de5baf1f27fe3addb40d00
2010-06-22 17:14:44 -07:00
Dianne Hackborn
a95e4cb62f First stab at attaching native event dispatching.
Provides the basic infrastructure for a
NativeActivity's native code to get an object representing
its event stream that can be used to read input events.

Still work to do, probably some API changes, and reasonable
default key handling (so that for example back will still
work).

Change-Id: I6db891bc35dc9683181d7708eaed552b955a077e
2010-06-22 11:21:50 -07:00
Daniel Sandler
613dde4aa6 Revised "immersive mode" API.
No longer a window bit, FLAG_IMMERSIVE is now set on
ActivityInfo.flags and in the Activity's manifest as
android:immersive="true" (ActivityInfo).

[An "immersive" activity is one that wishes to avoid being
paused by full-screen notifications (like an incoming call).
An activity that sets FLAG_IMMERSIVE/android:immersive is
sending a signal to the notification manager, status bar,
etc. that they should try to find some other way to get the
user's attention in high-priority situations.]

[Originally: change Ie290c2e.]

Change-Id: I967bb10b930b8f0772b10f81f2957a03fa3f1736
2010-06-22 12:30:12 -04:00
Scott Main
dfe5c20440 docs: lots of additions to the resources docs
new drawable resources
add <merge> and <include> to layout resource
update drawable class descriptioons to point to resources guide
add ID resource type

Change-Id: I733eec50bb2671f28c9e6dd7dec14eb6586f5193
2010-06-21 15:19:23 -07:00
Jeff Brown
7fbdc84e87 More native input event dispatching.
Added ANRs handling.
Added event injection.
Fixed a NPE ActivityManagerServer writing ANRs to the drop box.
Fixed HOME key interception.
Fixed trackball reporting.
Fixed pointer rotation in landscape mode.

Change-Id: I50340f559f22899ab924e220a78119ffc79469b7
2010-06-21 13:59:34 -07:00
Daniel Sandler
a2650db770 Merge "Fix SDK docs build." into gingerbread 2010-06-17 19:14:44 -07:00
Daniel Sandler
ae069f76ee Fix SDK docs build.
Change-Id: I2d11682cdf2cdcd48f0299f8c168fddd5994dc65
2010-06-17 21:56:26 -04:00
Jeff Brown
5c225b1680 Even more native input dispatch work in progress.
Added more tests.
Fixed a regression in Vector.
Fixed bugs in pointer tracking.
Fixed a starvation issue in PollLoop when setting or removing callbacks.
Fixed a couple of policy nits.

Modified the internal representation of MotionEvent to be more
efficient and more consistent.

Added code to skip/cancel virtual key processing when there are multiple
pointers down.  This helps to better disambiguate virtual key presses
from stray touches (such as cheek presses).

Change-Id: I2a7d2cce0195afb9125b23378baa94fd2fc6671c
2010-06-17 13:27:16 -07:00
Daniel Sandler
611fae4c39 New API for "immersive" activity windows.
An "immersive" activity (as indicated by the new
FLAG_IMMERSIVE) is one that wishes to avoid being paused by
full-screen notifications (like an incoming call).
An activity that sets FLAG_IMMERSIVE on its window is
sending a signal to the notification manager, status bar,
etc. that they should try to find some other way to get the
user's attention in high-priority situations.

FLAG_IMMERSIVE should be used exclusively in conjunction
with FLAG_FULL_SCREEN (that is, only activities that hide
the status bar should consider themselves immersive).

Change-Id: Ie290c2e92fc391bcf55edfdb1fbd626cd284e3e2
2010-06-17 11:43:35 -04:00
Scott Main
e4bca7ee60 am 322e7e47: Merge "docs: fix markup error" into froyo
Merge commit '322e7e477d89aca18d65cbd289343e716c45a699' into gingerbread

* commit '322e7e477d89aca18d65cbd289343e716c45a699':
  docs: fix markup error
2010-06-15 10:42:52 -07:00
Mathias Agopian
2d468c5d73 Make sure SurfaceView use a 565 surface when requesting an OPAQUE format.
this is needed for backward compatibility with somewhat buggy applications.
not a big deal, since the app can request another format explicitely.

Change-Id: Ic73f8acedf94ffc0115637efac28fa8ffaa7e5a4
2010-06-14 21:56:34 -07:00
Jeff Brown
46b9ac0ae2 Native input dispatch rewrite work in progress.
The old dispatch mechanism has been left in place and continues to
be used by default for now.  To enable native input dispatch,
edit the ENABLE_NATIVE_DISPATCH constant in WindowManagerPolicy.

Includes part of the new input event NDK API.  Some details TBD.

To wire up input dispatch, as the ViewRoot adds a window to the
window session it receives an InputChannel object as an output
argument.  The InputChannel encapsulates the file descriptors for a
shared memory region and two pipe end-points.  The ViewRoot then
provides the InputChannel to the InputQueue.  Behind the
scenes, InputQueue simply attaches handlers to the native PollLoop object
that underlies the MessageQueue.  This way MessageQueue doesn't need
to know anything about input dispatch per-se, it just exposes (in native
code) a PollLoop that other components can use to monitor file descriptor
state changes.

There can be zero or more targets for any given input event.  Each
input target is specified by its input channel and some parameters
including flags, an X/Y coordinate offset, and the dispatch timeout.
An input target can request either synchronous dispatch (for foreground apps)
or asynchronous dispatch (fire-and-forget for wallpapers and "outside"
targets).  Currently, finding the appropriate input targets for an event
requires a call back into the WindowManagerServer from native code.
In the future this will be refactored to avoid most of these callbacks
except as required to handle pending focus transitions.

End-to-end event dispatch mostly works!

To do: event injection, rate limiting, ANRs, testing, optimization, etc.

Change-Id: I8c36b2b9e0a2d27392040ecda0f51b636456de25
2010-06-13 17:42:16 -07:00
Scott Main
f10e6331e3 docs: fix markup error
Change-Id: Icea017095f58068c55dd3c1c18cecbdf06afb595
2010-06-11 09:03:22 -07:00
Romain Guy
804d04969d am 71d73a0d: Merge "Add a method to hide/show a SurfaceView\'s surface." into froyo
Merge commit '71d73a0dfc110d0bdfc1b7ba385db3e2cfe007e5' into kraken

* commit '71d73a0dfc110d0bdfc1b7ba385db3e2cfe007e5':
  Add a method to hide/show a SurfaceView's surface.
2010-06-08 13:00:30 -07:00
Romain Guy
afc3e11f10 Add a method to hide/show a SurfaceView's surface.
This can be used to move a surface offscreen to avoid the cost of compositing it.
This preserves the window and therefore the OpenGL context when used in h/w
accelerated apps.

Change-Id: I280295376601b17989d0fc8a271af66650016f09
2010-06-08 11:34:43 -07:00