Commit Graph

3415 Commits

Author SHA1 Message Date
Jeff Brown
9630704ed3 Power manager rewrite.
The major goal of this rewrite is to make it easier to implement
power management policies correctly.  According, the new
implementation primarily uses state-based rather than event-based
triggers for applying changes to the current power state.

For example, when an application requests that the proximity
sensor be used to manage the screen state (by way of a wake lock),
the power manager makes note of the fact that the set of
wake locks changed.  Then it executes a common update function
that recalculates the entire state, first looking at wake locks,
then considering user activity, and eventually determining whether
the screen should be turned on or off.  At this point it may
make a request to a component called the DisplayPowerController
to asynchronously update the display's powe state.  Likewise,
DisplayPowerController makes note of the updated power request
and schedules its own update function to figure out what needs
to be changed.

The big benefit of this approach is that it's easy to mutate
multiple properties of the power state simultaneously then
apply their joint effects together all at once.  Transitions
between states are detected and resolved by the update in
a consistent manner.

The new power manager service has is implemented as a set of
loosely coupled components.  For the most part, information
only flows one way through these components (by issuing a
request to that component) although some components support
sending a message back to indicate when the work has been
completed.  For example, the DisplayPowerController posts
a callback runnable asynchronously to tell the PowerManagerService
when the display is ready.  An important feature of this
approach is that each component neatly encapsulates its
state and maintains its own invariants.  Moreover, we do
not need to worry about deadlocks or awkward mutual exclusion
semantics because most of the requests are asynchronous.

The benefits of this design are especially apparent in
the implementation of the screen on / off and brightness
control animations which are able to take advantage of
framework features like properties, ObjectAnimator
and Choreographer.

The screen on / off animation is now the responsibility
of the power manager (instead of surface flinger).  This change
makes it much easier to ensure that the animation is properly
coordinated with other power state changes and eliminates
the cause of race conditions in the older implementation.

The because of the userActivity() function has been changed
so that it never wakes the device from sleep.  This change
removes ambiguity around forcing or disabling user activity
for various purposes.  To wake the device, use wakeUp().
To put it to sleep, use goToSleep().  Simple.

The power manager service interface and API has been significantly
simplified and consolidated.  Also fixed some inconsistencies
related to how the minimum and maximum screen brightness setting
was presented in brightness control widgets and enforced behind
the scenes.

At present the following features are implemented:

- Wake locks.
- User activity.
- Wake up / go to sleep.
- Power state broadcasts.
- Battery stats and event log notifications.
- Dreams.
- Proximity screen off.
- Animated screen on / off transitions.
- Auto-dimming.
- Auto-brightness control for the screen backlight with
  different timeouts for ramping up versus ramping down.
- Auto-on when plugged or unplugged.
- Stay on when plugged.
- Device administration maximum user activity timeout.
- Application controlled brightness via window manager.

The following features are not yet implemented:

- Reduced user activity timeout for the key guard.
- Reduced user activity timeout for the phone application.
- Coordinating screen on barriers with the window manager.
- Preventing auto-rotation during power state changes.
- Auto-brightness adjustment setting (feature was disabled
  in previous version of the power manager service pending
  an improved UI design so leaving it out for now).
- Interpolated brightness control (a proposed new scheme
  for more compactly specifying auto-brightness levels
  in config.xml).
- Button / keyboard backlight control.
- Change window manager to associated WorkSource with
  KEEP_SCREEN_ON_FLAG wake lock instead of talking
  directly to the battery stats service.
- Optionally support animating screen brightness when
  turning on/off instead of playing electron beam animation
  (config_animateScreenLights).

Change-Id: I1d7a52e98f0449f76d70bf421f6a7f245957d1d7
2012-08-15 03:06:24 -07:00
Dianne Hackborn
756220bd19 Add API to create new contexts with custom configurations.
This allows you to, say, make a Context whose configuration
is set to a different density than the actual density of the device.

The main API is Context.createConfigurationContext().  There is
also a new API on ContextThemeWrapper that allows you to apply
an override context before its resources are retrieved, which
addresses some feature requests from developers to be able to
customize the context their app is running in.

Change-Id: I88364986660088521e24b567e2fda22fb7042819
2012-08-14 16:51:38 -07:00
Jeff Brown
b7df3a714f Merge "Make display info accessible from hidden api." into jb-mr1-dev 2012-08-08 18:21:27 -07:00
Romain Guy
c89b14bba0 It seems that apparently useless public APIs are actually useful
Bug #6953651

Change-Id: Ic47ce504e63262711f5d3edc76f7d2b9c12471ad
2012-08-08 14:58:54 -07:00
Jean-Baptiste Queru
88a4292186 am 807c7ae0: am 7835d4fb: Merge "Fix SurfaceView notifies on invalid surfaces."
* commit '807c7ae00bc5b8a7fe68ba4acbfa3909a955ae70':
  Fix SurfaceView notifies on invalid surfaces.
2012-08-08 14:08:38 -07:00
Jean-Baptiste Queru
807c7ae00b am 7835d4fb: Merge "Fix SurfaceView notifies on invalid surfaces."
* commit '7835d4fb4e99bac698599a269ce7f84f2de1fb46':
  Fix SurfaceView notifies on invalid surfaces.
2012-08-08 14:04:02 -07:00
Jeff Brown
2ab1b7d9ab Make display info accessible from hidden api.
Change-Id: I83f3899b9ef10da4fe9a71f40dee8e940b32ec46
2012-08-08 02:06:14 -07:00
Adam Powell
96f1ee9867 Merge "Fix a padding resolution bug for adapter-based views" into jb-mr1-dev 2012-08-07 18:04:16 -07:00
Adam Powell
0090f20001 Fix a padding resolution bug for adapter-based views
If padding has not been resolved by the time measure() is called,
resolve it.

Bug 6938579

Change-Id: Idd3ffa3e4e441cd462d6594b1e20d153d7632994
2012-08-07 17:16:49 -07:00
Romain Guy
2440e670de Catch padding changes in ViewGroup to properly clip children
Bug #6886339

RTL support introduced a new way to handle padding which broke
existing behavior in ViewGroup.setPadding(). The new code path
was not notifying ViewGroup which would prevent it from setting
a flag used to clip children.

Change-Id: I584143714cb81fd664b4ecd9fb51d56bae04ba05
2012-08-07 14:43:43 -07:00
Romain Guy
17112ad8a2 Cleanup of libhwui
Change-Id: Ib7f5771548462c00027a8ad57badfb68c50644f9
2012-08-07 11:25:15 -07:00
Svetoslav Ganov
85b1041f89 Merge "Window position not reported if the window is not moved." into jb-mr1-dev 2012-08-06 23:51:36 -07:00
Svetoslav Ganov
758143ecfe Window position not reported if the window is not moved.
1.If a window is shown but never moved the window window
  is never notified for its current location. Therefore,
  accessibility nodes do not contain correct bounds in
  screen coordinates.

bug:6926295

Change-Id: I7df18b095d33ecafffced75aba9e4f4693b0c393
2012-08-06 23:49:38 -07:00
Romain Guy
4ff0cf4b83 Add new debug tool to track hardware layers updates
You can setprop debug.hwui.show_layers_updates true to flash
hw layers in green when they update. This is also a setting
in the Dev. section of the settings app.

Change-Id: Ibe1d63a4f81567dc1d590c9b088d2e7505df8abf
2012-08-06 14:51:10 -07:00
Dianne Hackborn
dde331cebd We can now (kind-of) change screen density on the fly.
Preloaded drawables now have a density associated with them, so we
can load the correct drawable if we are using a different density.

Window manager now formally keeps track of the density for each
screen, allowing it to be overridden like you can already do with
size, and relies on this density to drive itself internally and
the configurations it reports.

There are a new set of Bitmap constructors where you provide a
DisplayMetrics so they can be constructed with the correct density.
(This will be for when you can have different windows in the same
app running at different densities.)

ActivityThread now watches for density changes, and pushes them
to the DENSITY_DEVICE and Bitmap global density values for that
process.

A new am command allows you to change the density.
2012-08-03 17:27:29 -07:00
Craig Mautner
7de53949bc Merge "Add features to DisplayManager." into jb-mr1-dev 2012-08-03 08:25:42 -07:00
Jeff Brown
fbe963f4ad Merge "Remove unnecessary code." into jb-mr1-dev 2012-08-02 21:36:33 -07:00
Jeff Brown
5098fd8a0e Remove unnecessary code.
Bug: 6926595
Change-Id: Ice3138675c024e9efe9c7922e1e0a05f19cdde54
2012-08-02 21:34:46 -07:00
Craig Mautner
9de4936c99 Add features to DisplayManager.
Added Surface.setDisplayId().
Added callbacks to DisplayManagerService.

Change-Id: Idd3f85f8ca1f1208962f1196efd6a3ab51c8c259
2012-08-02 14:30:30 -07:00
Craig Mautner
4f67ba6ba4 Refactor DisplayManagerService to be functional.
Change-Id: Ieac1eca172be5dc5db45302d3afa26188acd4d6d
2012-08-02 11:23:00 -07:00
Craig Mautner
437a0fbd57 Merge "Introduce multiple displays with DisplayContent." into jb-mr1-dev 2012-08-02 09:20:14 -07:00
Craig Mautner
59c009776d Introduce multiple displays with DisplayContent.
Fix a couple of bugs that turned up.
Remove touch/focus from display. Add iterators for access.
Respond to comments. Remove TODOs, and some deviceId parameters.

Change-Id: Idcdb4f1979aa7b14634d450fd0333d6eff26994d
2012-08-02 08:47:44 -07:00
Dianne Hackborn
908aecc3a6 Start moving away from DisplayMetrics.DENSITY_DEVICE.
This puts in most of the infrastructure needed to allow us to
switch between different densities at run time.  The main remaining
uses of the global are to initialize the Bitmap object (not sure
what to do about that since it doesn't have anything passed in
the constructor to get this information from), and being able to
load drawables if we need a different density than what was preloaded
by zygote.

Change-Id: Ifdbfd6b7a5c59e6aa22e63b95b78d96af3d96848
2012-08-01 10:54:39 -07:00
Andreas Röhl
f750b8ce3c Fix SurfaceView notifies on invalid surfaces.
SurfaceView notifies registered callbacks on invalid
Surfaces.

Change-Id: Iddc9a5cd073fb73a0e7e9b9ca64ff4fac0777ca7
2012-07-30 15:34:55 +02:00
Craig Mautner
6881a10557 Small step towards supporting multiple displays
Change-Id: I353449c2b464394988c7e0203656b5851a0c9127
2012-07-27 13:04:51 -07:00
Jeff Smith
440f32bbd4 am ddd88726: am 71930dd7: am a45746ef: Fix several cases of broken droiddoc syntax external issue 35214
* commit 'ddd88726a247e4100cb62b3dc9d0887ca2ae2ec4':
  Fix several cases of broken droiddoc syntax external issue 35214
2012-07-25 22:13:40 -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
Jeff Smith
ddd88726a2 am 71930dd7: am a45746ef: Fix several cases of broken droiddoc syntax external issue 35214
* commit '71930dd77e4dc6f6be5c648019d2ab0da5f0584c':
  Fix several cases of broken droiddoc syntax external issue 35214
2012-07-25 15:05:23 -07:00
Jeff Brown
a8b9defade Stop using raw display size except in window manager.
We don't actually need the raw size in these places.
The logical size is good enough.

Starting to move dependencies on surface flinger
and window manager out of the Display class.

Change-Id: I2065bee8e5bf7f42c5a452dd1e8479e40ebb0d37
2012-07-25 11:38:48 -07:00
Jeff Smith
71930dd77e am a45746ef: Fix several cases of broken droiddoc syntax external issue 35214
* commit 'a45746efadd11bb7dfab026fb3c81a25fae74ca4':
  Fix several cases of broken droiddoc syntax external issue 35214
2012-07-25 10:56:03 -07:00
Jeff Smith
a45746efad Fix several cases of broken droiddoc syntax
external issue 35214

patch contributed by Jeff Smith <whydoubt@yahoo.com>

Change-Id: I70dcee88a140699bf3e1ab369bed6dcd2fdd3d83
2012-07-25 10:49:25 -07:00
Ed Heyl
2624c3adbe Merge "Account for static child transformations correctly" 2012-07-24 17:21:56 -07:00
Romain Guy
63cf075222 Merge "Make HardwareRenderer able to target generic Surface objects" 2012-07-24 17:21:56 -07:00
Romain Guy
786fc93d71 Make HardwareRenderer able to target generic Surface objects
Change-Id: I4b7199a1eb30e0df354ae12c4819adc69db5df40
2012-07-24 16:41:21 -07:00
Chet Haase
599913d6e8 Account for static child transformations correctly
Optimizations in drawing and invalidation in JB did not correctly
account for static child transforms
(View.getChildStaticTransformation()).
For the invalidation part, this meant that views were not properly
setting the invalidation bounds (which should be transformed by
the static transform), so the affected area of the invalidation
was potentially incorrect. For the drawing part, this meant that
views outside of their parent's bounds were being incorrectly
rejected when the static transform would, in fact, place the views
inside of those bounds.

The fix is in two parts:
- drawing: avoid the early quickReject() logic for containers that
have static transformations set on them
(ViewGroup.setStaticTransformationsEnabled()).
- invalidation: Include the static transform in the invalidation
area propagated up the view hierarchy.

Issue #6864203 The child position outside of parent is not drawn
even it will be drawn inside of the parent after applying static
transformation

Change-Id: I73bea01feab250bdcae2d575313be355a4a3c8f5
2012-07-24 14:51:14 -07:00
Fabrice Di Meglio
85d28a0004 Merge "Replace left/right with start/end for Gravity / LayoutParams / Padding" 2012-07-24 11:11:02 -07:00
Fabrice Di Meglio
b6a45cb928 Merge "Make RelativeLayout aware of layout direction" 2012-07-24 11:05:48 -07:00
Fabrice Di Meglio
f443f98e7f Make RelativeLayout aware of layout direction
- see bug #5429822 UI should be mirrored for RTL locales (Arabic, Hebrew, farsi)

Change-Id: Ica92841fa0c13c25fcf89c4700b0771eec4fd6d7
2012-07-23 16:36:41 -07:00
Jeff Brown
d32460c5b7 Refactor local window manager implementation.
The objective of this refactoring is to remove the reliance on
WindowManager wrapper objects for compatibility mode and for
managing sub-windows.

Removed the WindowManager.isHardwareAccelerated() method since
it is never used.

Change-Id: I4840a6353121859a5e0c07d5cc307a437c595d63
2012-07-20 22:40:50 -07:00
Jeff Brown
23e7c35ab5 Remove dead code in window manager.
The 'nest' parameter is always false so we can get rid of support
for redundantly added views.

Change-Id: I30c6a856797bdc72c4e1aa4cb26b930a33ce9a16
2012-07-20 16:37:22 -07:00
Satoshi Kataoka
bc700adbe0 Merge "Fix a crash in InputMethodManager when switching the IME in the system process" 2012-07-19 22:22:59 -07:00
Fabrice Di Meglio
aac0d4ed02 Replace left/right with start/end for Gravity / LayoutParams / Padding
- see bug #5429822 UI should be mirrored for RTL locales (Arabic, Hebrew, farsi)

Change-Id: Id9af5375fb9b0edeae5232c77e52ecd497bd2e67
2012-07-19 19:21:26 -07:00
Svetoslav Ganov
34caec9940 Views with node providers are important for accessibility in auto mode.
1. If a view's important for accessibility attribute is set to auto the
   framework is responsible to determine if it really is. Views with
   accessibility node providers should be important for accessibilty
   since they are roots of virtual view trees and such trees are
   always important.

bug:6843043

Change-Id: I4b352c59fdefdf9ad220714a43ecb9e01d1c1c1f
2012-07-19 18:24:12 -07:00
Satoshi Kataoka
4e5184f929 Fix a crash in InputMethodManager when switching the IME in the system process
Bug: 6789252
Change-Id: I66f51da1299532793ef8fa700f35b0811670f235
2012-07-19 20:32:51 +09:00
Fabrice Di Meglio
016456e432 Fix padding resolution
Change-Id: I2181a0a4057be0d20744b1512dbc1fbc53490d81
2012-07-18 16:14:57 -07:00
Adam Powell
a9108a217e Add View#generateViewId; make RadioGroup use it
Bug 6448164

generateViewId provides a way for applications to generate opaque ID
values suitable for use with View#setId that will not collide with
values generated by aapt for R.id.

Fix a bug where RadioGroup assumes object hash codes will always be
positive.

Change-Id: I3e2870cd672d6061bb465128f428c81aeef0c44b
2012-07-18 14:27:00 -07:00
Jeff Brown
c69238ebc8 Merge "Remove dithering support." 2012-07-16 16:18:13 -07:00
Jeff Brown
3cc321ecf5 Remove dithering support.
The dithering flag is no longer implemented in Surface Flinger
so this is all dead code.

Change-Id: I74c0e452923207e5b7cfe0eeca9457e5cb990947
2012-07-16 16:17:25 -07:00
Jeff Brown
abae83d155 Merge "Remove freeze(), unfreeze() and setFreezeTint()." 2012-07-16 15:53:00 -07:00
Jeff Brown
f422a56694 Merge "Remove freezeDisplay(), which is no-op." 2012-07-16 15:52:54 -07:00