Commit Graph

363 Commits

Author SHA1 Message Date
Jeff Brown
4ed8fe75e1 More improvements to the display manager.
Added more complete support for logical displays with
support for mirroring, rotation and scaling.

Improved the overlay display adapter's touch interactions.

A big change here is that the display manager no longer relies
on a single-threaded model to maintain its synchronization
invariants.  Unfortunately we had to change this so as to play
nice with the fact that the window manager wants to own
the surface flinger transaction around display and surface
manipulations.  As a result, the display manager has to be able
to update displays from the context of any thread.

It would be nice to make this process more cooperative.
There are already several components competing to perform
surface flinger transactions including the window manager,
display manager, electron beam, overlay display window,
and mouse pointer.  They are not manipulating the same surfaces
but they can collide with one another when they make global
changes to the displays.

Change-Id: I04f448594241f2004f6f3d1a81ccd12c566bf296
2012-08-31 15:42:46 -07:00
Jeff Brown
a492c3a7b2 Initial draft of high-level multi-display APIs.
This patch introduces the ability to create a Context that
is bound to a Display.  The context gets its configuration and
metrics from that display and is able to provide a WindowManager
that is bound to the display.

To make it easier to use, we also add a new kind of Dialog
called a Presentation.  Presentation takes care of setting
up the context as needed and watches for significant changes
in the display configuration.  If the display is removed,
then the presentation simply dismisses itself.

Change-Id: Idc54b4ec84b1ff91505cfb78910cf8cd09696d7d
2012-08-31 15:42:45 -07:00
Jeff Brown
bd6e1500ae Add initial multi-display support.
Split the DisplayManager into two parts.  One part is bound
to a Context and takes care of Display compatibility and
caching Display objects on behalf of the Context.  The other
part is global and takes care of communicating with the
DisplayManagerService, handling callbacks, and caching
DisplayInfo objects on behalf of the process.

Implemented support for enumerating Displays and getting
callbacks when displays are added, removed or changed.

Elaborated the roles of DisplayManagerService, DisplayAdapter,
and DisplayDevice.  We now support having multiple display
adapters registered, each of which can register multiple display
devices and configure them dynamically.

Added an OverlayDisplayAdapter which is used to simulate
secondary displays by means of overlay windows.  Different
configurations of overlays can be selected using a new
setting in the Developer Settings panel.  The overlays can
be repositioned and resized by the user for convenience.

At the moment, all displays are mirrors of display 0 and
no display transformations are applied.  This will be improved
in future patches.

Refactored the way that the window manager creates its threads.
The OverlayDisplayAdapter needs to be able to use hardware
acceleration so it must share the same UI thread as the Keyguard
and window manager policy.  We now handle this explicitly as
part of starting up the system server.  This puts us in a
better position to consider how we might want to share (or not
share) Loopers among components.

Overlay displays are disabled when in safe mode or in only-core
mode to reduce the number of dependencies started in these modes.

Change-Id: Ic2a661d5448dde01b095ab150697cb6791d69bb5
2012-08-29 15:34:17 -07:00
Jean-Baptiste Queru
8d8646471c am 1112a376: am 416362e6: Merge "Change StringTokenizer to TextUtils.StringSplitter"
* commit '1112a376e81af8ef4c2b661f5bda443596ba37da':
  Change StringTokenizer to TextUtils.StringSplitter
2012-08-28 13:41:15 -07:00
Jean-Baptiste Queru
1112a376e8 am 416362e6: Merge "Change StringTokenizer to TextUtils.StringSplitter"
* commit '416362e6d8c8d0a34e09704138688f75aa810c9b':
  Change StringTokenizer to TextUtils.StringSplitter
2012-08-28 13:19:48 -07:00
Craig Mautner
b47bbc3d80 Clean up displayId and layerStack usage.
Make better use of Display object by saving it in DisplayContent.
Only use layerStack when referring to Surfaces. Get displayId from
default Display or default DisplayContent. Remove warnings.

Fixes bug 7038151.

Change-Id: Ie493f0f5e755dc9b91ee969ff561c2a098283ead
2012-08-23 08:43:54 -07:00
Benoit Goby
4e68bd420b Add UsbDebuggingManager and UsbDebuggingActivity
The UsbDebuggingManager listens to adbd requests and displays a dialog
when the public key authentification fails, for the user to confirm if it
wants to allow USB debugging from the attached host. If the user chooses
to always allow USB debugging, the UsbDebuggingManager writes the public
key to adbd's config file so that the public key authenfication succeeds
next time.

Change-Id: I115c828331d8e326c380844ee33915d5dff22260
2012-08-20 13:44:34 -07:00
Jeff Brown
98365d7663 Refactor for multi-display support.
Split WindowManagerImpl into two parts, the WindowManager
interface implementation remains where it is but the global
communications with the window manager are now handled by
the WindowManagerGlobal class.  This change greatly simplifies
the challenge of having separate WindowManager instances
for each Context.

Removed WindowManagerImpl.getDefault().  This represents the
bulk of this change.  Most of the usages of this method were
either to perform global functions (now handled by WindowManagerGlobal)
or to obtain the default display (now handled by DisplayManager).

Explicitly associate each new window with a display and make
the Display object available to the View hierarchy.

Add stubs for some new display manager API features.

Start to split apart the concepts of display id and layer stack.
since they operate at different layers of abstraction.
While it's true that each logical display uniquely corresponds to a
surface flinger layer stack, it is not necessarily the case that
they must use the same ids.  Added Display.getLayerStack()
and started using it in places where it was relatively easy to do.

Change-Id: I29ed909114dec86807c4d3a5059c3fa0358bea61
2012-08-19 22:42:08 -07:00
Jeff Brown
848c2dc93b Stub out display manager service implementation.
Reverting to the previous stub as the display adapter registration
and the logical to physical mapping is not at all what we are going
to need moving forward.

Fixed up the service initialization order so that the display manager
service has a context from the start.

Change-Id: I717f2f1099c7a77180ef207c371ec8329258850a
2012-08-19 21:21:37 -07:00
Jeff Brown
6a2ef12753 Add a toString() method to Sensor for debugging purposes.
Also made the class final, since it cannot be instantiated
by applications.

Change-Id: I540ad56d19debd99426d37b9b63c163827b4c2fc
2012-08-10 20:52:22 -07:00
Ali Utku Selen
0a12018e4c Change StringTokenizer to TextUtils.StringSplitter
Replacing StringTokenizer to TextUtils.StringSplitter,
since TextUtils.StringSplitter is more suitable for basic splitting tasks.
Also increased initial values for HashMap and StringBuilders to avoid
unnecessary buffer enlargement operations. This improves the performance
of these operations.

Change-Id: If9a5b68e6596ba9a6d29597876b6164ef34b57ac
2012-08-10 09:24:42 -07:00
mike wakerly
0099d67d68 Fix typo in UsbManager javadoc.
Closes http://b.android.com/32863

Change-Id: I8fc03ee70209413f279f606b393e79c12ee9c0d2
2012-08-09 16:31:26 -07:00
mike wakerly
a3665ba95d UsbRequest: set ByteBuffer.position() upon success.
Also clears allocated buffer before copying.

Closes http://b.android.com/28023

Bug: 5385026
Bug: 6766413
Change-Id: Icf2c1d45db4fb2a9bd1fcfdb29aa7308034faaf0
2012-08-09 15:28:10 -07:00
mike wakerly
1567a4341b Fix typo in UsbManager javadoc.
Closes http://b.android.com/32863

Change-Id: I8fc03ee70209413f279f606b393e79c12ee9c0d2
2012-08-09 11:25:16 -07:00
Jeff Brown
aa871b0ff0 Fix build.
Change-Id: Ife2fd58447205407e41ce3d27e28a705b744bede
2012-07-25 20:06:22 -07:00
Jeff Brown
fa25bf5382 Add display manager skeleton.
The purpose of this change is to remove direct reliance on
SurfaceFlinger for describing the size and characteristics of
displays.

This patch also starts to make a distinction between logical displays
and physical display devices.  Currently, the window manager owns
the concept of a logical display whereas the new display
manager owns the concept of a physical display device.

Change-Id: I7e0761f83f033be6c06fd1041280c21500bcabc0
2012-07-25 18:56:16 -07:00
Scott Main
9be0105fbc docs: fix several links
Change-Id: I89d9fd64dc22c90680bb05415cc966c255165af9
2012-06-22 12:35:08 -07:00
Eino-Ville Talvala
ca367b7178 Fix race condition with preview callback.
Bug: 6301018
Change-Id: I19b8bc03ef3983d69e1e986c0f1a8154af5ab080
2012-05-30 17:06:54 -07:00
Wu-cheng Li
e9c6c9ccfd Fix startFaceDetection will fail after taking a picture.
bug:6568961
Change-Id: I353c24496ec00805ed46ba90457729dfb5b2c337
2012-05-29 16:47:44 +08:00
Jeff Brown
cf39bdf3df Add support for switching between multiple keyboard layouts.
Also show a notification when an external keyboard is connected
and does not have a keyboard layout selected yet.

Bug: 6405203
Change-Id: Id0ac6d83b3b381f8a236b2244a04c9acb203db3c
2012-05-20 14:56:22 -07:00
Jeff Brown
d9fec5d317 Add support for grouping keyboard layouts by collection.
Bug: 6405203
Change-Id: Id818b27ec09928150795d594a96df186a6e39168
2012-05-17 16:01:54 -07:00
Mathias Agopian
fb89097099 fix SensorManager.getAngleChange() documentation
Bug: 6442517

Change-Id: I4b22540817560bdff134d2cc3274e3b39c92d3b1
2012-05-16 15:31:07 -07:00
Jeff Brown
2f09576074 Rename kcm attribute to keyboardLayout.
Bug: 6478076
Change-Id: I7fc0d8eb36d03a628d070f8fd6ea1e1464b1a163
2012-05-11 12:32:56 -07:00
Wu-cheng Li
b0dcf5ebb2 Merge "Avoid deadlocks when calling autoFocus from onAutoFocus callback." into jb-dev 2012-05-03 21:52:44 -07:00
Eino-Ville Talvala
163a3ae770 Merge "Update docs for YV12 format and camera preview callbacks." into jb-dev 2012-05-03 13:49:57 -07:00
Eino-Ville Talvala
951516358e Update docs for YV12 format and camera preview callbacks.
- Define stride for YV12 when using it for preview callbacks

- Include equations for calculating stride and start indexes of Y, U,
  and V planes for YV12.

- Add more cross-references so that equations are easier to find.

Bug: 6330501
Change-Id: I85a78757ec767d08173b9fe714adb715835244b4
2012-05-03 11:02:18 -07:00
Wu-cheng Li
f05c1d63d1 Avoid deadlocks when calling autoFocus from onAutoFocus callback.
Applicatons may use different threads for calling autoFocus and
onAutoFocus callback.

bug:6026574

Change-Id: I114a60240e22af15ca469b591e080121367db8e2
2012-05-04 01:01:46 +08:00
James Dong
248ba23ad2 Fix a race condition in Camera API for handling focus
In the case where a previous AF completion was outstanding but before the completion
notification reached the application, the application cancelled this AF request, and
then started a new AF request. Right after the new AF request, the AF completion
notification for earlier AF request reached the application. The application
could not tell the AF completion notification was meant for the cancelled AF, but
thought the new AF was successfully completed. Subsequently, the application trid to
take a picture, which failed as a result.

The fix is to add an explicit lock in the Camera.java class to fix the race condition to
synchornize autoFocus(), cancelAutoFocus() and the callback of the pending AF
completion message.

o related-to-bug: 6026480

Change-Id: I33d244d908ac066698e792f641ba88fe228b14a9
2012-04-30 12:01:06 -07:00
Mike Lockwood
166b05e0ce UsbService: Add support for accessory initiating USB audio support
Change-Id: I0e468f4b841de9e1ca7b75a05fc58299dbc78222
Signed-off-by: Mike Lockwood <lockwood@google.com>
2012-04-26 15:09:35 -07:00
Jeff Brown
9e6d4b035d Lost the race.
Bug: 6373370
Change-Id: If42a3de66b1d407b06064e91ff578dc9ca5ceed8
2012-04-20 13:08:27 -07:00
Wu-cheng Li
e17fc7d669 Merge "Improve android.hardware.Camera.setRotation javadoc." 2012-04-20 03:21:30 -07:00
Wu-cheng Li
8969ea12ca Improve android.hardware.Camera.setRotation javadoc.
Change-Id: If6c77044f3f4567ab0c3987fb2ddc47ae307582a
2012-04-20 17:38:09 +08:00
Wu-cheng Li
7bc1b21a52 Remove new camera open API.
Applications are not resumed under the lock screen now.
This API is not needed anymore.

bug:5584464
Change-Id: I1c18efb5ba1ecd39320eb5fd252c6e1229d7b89c
2012-04-19 14:18:44 +08:00
Jeff Brown
4481d9c10c Move legacy sensor support to a new class.
Bug: 6339552
Change-Id: I2067b754348ac76b1e1f71608031be2c80fc31d2
2012-04-16 17:18:23 -07:00
Jeff Brown
25157e458d Refactor SensorManager to move non-API bits into a subclass.
Changed the SensorManager class so that it only contains API-related
bits including what's needed to support legacy sensors.  Mostly just
moved stuff around.  Making the class abstract is safe because
it does not have a visible constructor in the API.

One minor change is that the cache of sensor type to sensor lists
is now per instance of SensorManager instead of being static.
We can fix this if desired.

Another small change is that we bail out early from registerListener
if the listener has already been registered for the particular
sensor.  This happened for both legacy and standard listeners.
The problem is that the ListenerDelegate maintains two lists of
sensors, one is a Map and the other is a List.  Adding a sensor
twice causes one entry to be added to the Map and two entries to be
added to the List, but when the sensor is removed the next time, only
one entry is removed from the List, leaving it in an inconsistent
state.

Removed Sensor.getLegacyType() since the value it provides is only
needed in LegacyListener and we don't really save any significant
computation by caching it.  Removing the field makes support for
legacy sensors a little more self-contained.

Bug: 6339552
Change-Id: I50d41ac97cf535924f2bfa2026d28547a4d00286
2012-04-16 13:03:55 -07:00
Jeff Brown
90aba7caac Merge "Add support for input devices that have vibrators." 2012-04-13 17:34:20 -07:00
Jeff Brown
a47425a13c Add support for input devices that have vibrators.
Added a getVibrator() method to InputDevice which returns a Vibrator
associated with that input device.  Its uses the same API as the
system vibrator which makes it easy for applications to be modified
to use one or the other.

Bug: 6334179
Change-Id: Ifc7f13dbcb778670f3f1c07ccc562334e6109d2e
2012-04-13 17:01:15 -07:00
Wu-cheng Li
5573ac0149 Merge "Unhide camera autofocus move callback." 2012-04-13 01:03:57 -07:00
Jeff Brown
af9e8d3818 Notify applications when input devices change.
This change allows the InputManager to keep track of what input
devices are registered with the system and when they change.
It needs to do this so that it can properly clear its cache of
input device properties (especially the key map!) when changes
occur.

Added new API so that applications can register listeners for
input device changes.

Fixed a minor bug in EventHub where it didn't handle EPOLLHUP
properly so it would spam the log about unsupposed epoll events
until inotify noticed that the device was gone and removed it.

Change-Id: I937d8c601f7185d4299038bce6a2934fe4fdd2b3
2012-04-12 18:54:54 -07:00
Wu-cheng Li
6574539bae Unhide camera autofocus move callback.
Camera autofocus move callback tells the clients when
continuous aufofocus is moving. Applications can show
autofocus animation based on this.

bug:5687212
Change-Id: I3191fd447b1e9de0ccf939eb346344f0be9bcf1a
2012-04-12 18:07:16 +08:00
Jeff Brown
9f25b7fdf2 Request key maps from input manager service.
Instead of each application loading the KeyCharacterMap from
the file system, get them from the input manager service as
part of the InputDevice object.

Refactored InputManager to be a proper singleton instead of
having a bunch of static methods.

InputManager now maintains a cache of all InputDevice objects
that it has loaded.  Currently we never invalidate the cache
which can cause InputDevice to return stale motion ranges if
the device is reconfigured.  This will be fixed in a future change.

Added a fake InputDevice with ID -1 to represent the virtual keyboard.

Change-Id: If7a695839ad0972317a5aab89e9d1e42ace28eb7
2012-04-10 18:23:58 -07:00
Jeff Brown
69bba1dfb7 Merge "Add a unique input device descriptor." 2012-04-06 15:04:53 -07:00
Jeff Brown
e38fdfae91 Add a unique input device descriptor.
The purpose of the input device descriptor is to make it possible
to associate persistent settings for each input device, such as the
keyboard layout.

The descriptor is a hash of the information we have about the
device, such as its vendor id, product id, unique id, name,
or location.

Bug: 6110399
Change-Id: Idb80f946819b3f0dbf4e661bb0a753dbc2b60981
2012-04-06 14:57:19 -07:00
Mike Lockwood
9d5a4be05b Add Intents to notify when USB audio devices or accessories are attached
In this change, only the USB audio accessory support is implemented.

Change-Id: Id9b411319b07a96dc56649ca74cc5f3f89a55a7c
Signed-off-by: Mike Lockwood <lockwood@google.com>
2012-04-06 11:00:27 -07:00
Jeff Brown
ac14351e16 Move some APIs from window manager to input manager.
Simplified input injection API down to just one call.

Removed all input state reading API.  It was only used by the
window manager policy and required a permission that applications
could not obtain.  READ_INPUT_STATE is now unused and deprecated.

Change-Id: I41278141586ddee9468cae0fb59ff0dced6cbc00
2012-04-05 19:33:11 -07:00
Jeff Brown
4532e61584 Refactor input system into its own service.
Extracted the input system from the window manager service into
a new input manager service.  This will make it easier to
offer new input-related features to applications.

Cleaned up the input manager service JNI layer somewhat to get rid
of all of the unnecessary checks for whether the input manager
had been initialized.  Simplified the callback layer as well.

Change-Id: I3175d01307aed1420780d3c093d2694b41edf66e
2012-04-05 14:42:11 -07:00
Jeff Brown
9df6e7a926 Initial commit of InputManager and keyboard layout API.
Added a new InputManager service for interacting with input
devices and configuring them.  This will be the focus of
an upcoming refactoring.

Added an API for registering keyboard layouts with the system
based on the use of a broadcast receiver.  Applications can
register their own keyboard layouts simply by declaring a
broadcast receiver in their manifests.

Added the skeleton of a package that will ultimately contain
the keyboard layouts and other input device related resources
that are part of the base system.

Bug: 6110399
Change-Id: Ie01b0ef4adbd5198f6f012e73964bdef3c51805c
2012-04-05 14:42:10 -07:00
Wu-cheng Li
8d3c318b2d Merge "Add a new camera open API that allows taking the ownership." 2012-03-15 21:23:24 -07:00
Scott Main
d45f5b5843 am af2827ba: am 714d655c: am eb1d42e4: Merge "docs: Fix a bunch of misc doc issues from external tracker" into ics-mr1
* commit 'af2827ba96361a63eac792e679027f8d6f2c8482':
  docs: Fix a bunch of misc doc issues from external tracker
2012-03-15 16:02:29 -07:00
Wu-cheng Li
a1c41e13b5 Add a new camera open API that allows taking the ownership.
The purpose is to let face unlock always get the camera
successfully. What happened was the camera applications may
have opened the camera in onResume under the lock screen.
This API lets face unlock take the camera from the camera
application. A new permission will be added, so other
applicatoins won't be able to take the camera from the face
unlock.

bug:5584464

Change-Id: Ib3d9dcbc2161815b68db42327dc01148453704c6
2012-03-15 14:50:48 +08:00