558 Commits

Author SHA1 Message Date
Jeff Brown
3671410b9e Fix dialogs on secondary displays.
Bug: 7183618
Change-Id: I65b650a0c423f3081c412a7341b7427b6ac85e24
2012-09-24 17:36:06 -07:00
Jeff Brown
14a9f2b9d2 Fix drag and drop surfaces on secondary displays.
Bug: 7183618
Change-Id: I4ef746916aad984640f1eb3b3c71b1e34595aabd
2012-09-24 14:37:31 -07:00
Jeff Brown
2033763bb1 Allow a window on a secondary display to have focus.
If any window on the default display has focus, then it
gets focus as usual.  If no window on the default display
has focus, then we consider windows on the secondary display.

In the future we will need more elaborate schemes for
managing focus across multiple displays, but this is enough
for testing purposes now.

Bug: 7183618
Change-Id: I21ddb9904eb9e574e42d28743aeca51f4ffebf64
2012-09-24 14:37:30 -07:00
Craig Mautner
ac439e57a7 Eliminate potential for NPE in WindowAnimator.
Fixes bug 7209850.

Change-Id: I8c8751ab240ea389a2a779c94c05fe786ca8762a
2012-09-21 08:58:34 -07:00
Jeff Brown
a9d131c308 Disentangle input manager service startup.
We will be adding additional callbacks for other components.
This change makes it clearer how the input manager is started
and where the callbacks are initialized.

Bug: 6548391
Change-Id: I4b2a61482126a12b7cf11fafe513f846c76c11e5
2012-09-20 16:48:17 -07:00
Craig Mautner
6704a48bd0 Merge "Fixes to Starting window and Wallpaper windows." into jb-mr1-dev 2012-09-19 13:29:44 -07:00
Craig Mautner
f1b6741975 Fix deadlock in LockPatternUtils by using local id.
Activity manager now updates window manager's current user id
directly and immediately rather than waiting for a broadcast
update. Window manager passes this through policy to the
KeyguardViewMediator and into LockPatternUtils. LockPatternUtils
no longer goes to Activity to get the current user id if it finds
that its local id is non-default.

Fixes bug 7193726.

Change-Id: Id5613e7a9fe9e5b49e83c26b74504f587c3998c2
2012-09-19 13:18:29 -07:00
Craig Mautner
8863cca57d Fixes to Starting window and Wallpaper windows.
- Checking for found wallpaper to match either mWallpaperTarget
or mLowerWallpaperTarget keeps from swapping the layers while
transitioning between two wallpaper activities.

- Fade out RecentsActivity while bringing up selected activity. This
keeps the RecentsActivity from showing through a launching wallpaper
activity.

- When moving a starting window from one activity to another clear
the startingDisplayed flag in the old activity.

- When moving a starting window from one activity to another assign
the new activity's mAppAnimator to the starting window's mWinAnimator.

- Only treat a wallpaper transition as entering if the mWallpaperTarget
is visible and not being hidden. Keeps from assigning the wrong
animation when activities are launched back to back and the
mWallpaperTarget is still animating away.

Fixes bug 7148089.

Change-Id: Idd405b1ba113f3345ca2116d141b474abe5bd4c0
2012-09-19 11:11:46 -07:00
Amith Yamasani
599dd7ce9a DevicePolicyManager per user
Bug: 7136483

Store device policy information for each user and apply them when user switches.

Global proxy can only be controlled by owner.
Camera restriction applies to all users, if any one has an admin that disables it.
Storage encryption can only be controlled by owner, although other users can query the state.
Wipe data will only remove the user if non-zero, wipe the device, if zero.

Change-Id: I359be46c1bc3828fd13d4be3228f11495081c8f2
2012-09-18 14:28:33 -07:00
Craig Mautner
178af5948d Add debug to help with b/7135184.
Change-Id: I0d3b60b3e123d35bd557d47e3344ebea1964380b

Conflicts:

	services/java/com/android/server/wm/WindowAnimator.java
2012-09-17 11:33:25 -07:00
Craig Mautner
a91f9e2959 Make more items per-Display.
Moving DimSurfaces, DimBackgrounds and Rotation surfaces into
per-display class.

Fixes bug 7167028.

Change-Id: I7408b3a27b5a7a8d0d59e9d6109c002fc627e536
2012-09-16 10:44:06 -07:00
Dianne Hackborn
d65afc65ea Merge "More multi-user stuff." into jb-mr1-dev 2012-09-16 00:05:46 -07:00
Dianne Hackborn
5dc5a00e7e More multi-user stuff.
- New public APIs to find out when a user goes to the foreground,
  background, and is first initializing.
- New activity manager callback to be involved in the user switch
  process, allowing other services to let it know when it is safe
  to stop freezing the screen.
- Wallpaper service now implements this to handle its user switch,
  telling the activity manager when it is done.  (Currently this is
  only handling the old wallpaper going away, we need a little more
  work to correctly wait for the new wallpaper to get added.)
- Lock screen now implements the callback to do its user switch.  It
  also now locks itself when this happens, instead of relying on
  some other entity making sure it is locked.
- Pre-boot broadcasts now go to all users.
- WallpaperManager now has an API to find out if a named wallpaper is
  in use by any users.

Change-Id: I27877aef1d82126c0a1428c3d1861619ee5f8653
2012-09-15 23:58:55 -07:00
Dianne Hackborn
5b329e8501 Fix debug log.
Change-Id: If65abf43ee7a455b12d49b5800657dbf4489e5b9
2012-09-14 11:54:12 -07:00
Jeff Brown
3a1136eeeb Merge "We don't need black frames for forced display size." into jb-mr1-dev 2012-09-13 18:55:32 -07:00
Craig Mautner
dc5a6384e7 Improve debug output.
Change-Id: I94f46e1e373dc9e67bfbc1d1847399c119ec2fcb
2012-09-13 16:34:41 -07:00
Jeff Brown
76a3cb9773 We don't need black frames for forced display size.
Now that surface flinger lets us set a display projection,
the window manager no longer needs to place a black frame
around the content when simulating a different display size.

Bug: 7139798
Change-Id: I6014390f47444633d434ccf918cee5ff7b502869
2012-09-13 16:02:10 -07:00
Craig Mautner
4be2975453 Merge "Rename variables and methods for clarity." into jb-mr1-dev 2012-09-12 16:48:15 -07:00
Craig Mautner
5c0e78c445 Rename variables and methods for clarity.
Change-Id: I2a1b2f2d5605123e55f264d45b1e7292852f2a7f
2012-09-12 16:45:36 -07:00
Craig Mautner
faecd09cb7 Merge "Only consider hiddenRequested when deciding layout" into jb-mr1-dev 2012-09-12 16:18:37 -07:00
Craig Mautner
c516a5c58f Only consider hiddenRequested when deciding layout
This change removes the test for hidden when deciding whether to
do a layout. So layout begins as soon as hiddenRequested occurs.
Since hidden is cleared when animations starts considering hidden
in the layout decision will delay layout until it is too late.

In particular we were not executing a relayout on return to an
activity even though the screen had been rotated while away.

Fixes bug 6615859.

Change-Id: I5fb0b4bf2c253b910a7a192da04419236d8f09d9
2012-09-12 16:13:59 -07:00
Svetoslav Ganov
0bb4d078af Merge "Screen magnifier should handle window rebuilds correctly." into jb-mr1-dev 2012-09-11 15:52:33 -07:00
Svetoslav Ganov
9b4125e435 Screen magnifier should handle window rebuilds correctly.
1. The way for computing the magnified region was simplistic and
   incorrect. It was ignoring window layering resulting in broken
   behavior. For example, if the IME is up, then the everything else
   is magnifed and the IME not. Now the keyguard appears and covers
   the IME but the magnified region does not expand while it would
   since the keyguard completely covers the not magnified IME window.

bug:7138937

Change-Id: I21414635aefab700ce75d40f3e913c1472cba202
2012-09-11 15:50:58 -07:00
Jeff Brown
9ba2a18891 Merge changes I4ad08873,If0562677,I5fe6ba32 into jb-mr1-dev
* changes:
  Don't auto-discover peers until scan requested.
  Use wfdInfo to filter available sinks.
  Allow adb shell am display-size to use bigger sizes.
2012-09-11 13:56:04 -07:00
Dianne Hackborn
9d9ece3c1e Animations for user switching.
The window manager now has a facility to provide a full-screen
animation, which the activity manager uses every time a user
switch happens.

The current animation is just a simple dumb slide until we get
a design from UX.

Also some cleanup: moved the portrait task animations to the
default config so we always have an animation for them, and finally
got the java symbol stuff out of public.xml.

Change-Id: I726f77422b2ef5f2d98f961f8da003e045f0ebe8
2012-09-10 19:58:21 -07:00
Jeff Brown
43aa159128 Allow adb shell am display-size to use bigger sizes.
We now support scaling the logical display to fit the
physical display, whatever size it is.  So we can allow
adb shell am display-size to use more or less arbitrary sizes
although we do enforce an upper and lower bound to
protect the user.

Change-Id: I5fe6ba32ad1f9e4fbcd6915f7d36850b987bbcc0
2012-09-10 17:50:18 -07:00
Jeff Brown
e215f26f74 Fix adb am display-size.
There were several problems resulting from the use of
mDefaultDisplay before displayReady() was called.
As it happens, we don't need mDefaultDisplay becase we
can get the information from the default display content.

Also modified the Configuration calculations to never
choose a SQUARE orientation.  The constant is deprecated
and documented as no longer used, so we should make that
be the case.

Change-Id: I326ed7100030a81e24411e898e5243f28895ea22
2012-09-10 16:01:14 -07:00
Jeff Brown
83d616a9c7 Make input system aware of multiple displays.
The input system needs to know about the window that has
focus, even if it is on a secondary display.  So now we
send it the list of all windows and indicate which display
they are on.  We filter the list of windows as necessary
when delivering touch events.

To keep things simple, monitor input channels and input
filters are not supported except on the main display.
We also do not pass the display id to applications; it is
only used inside the input system for now.

Properly scale touch coordinates based on the viewport.
This will be needed to ensure that touch works on external
display as well as when the internal display is being used
to simulate a different resolution.

Change-Id: I1815579a52fcc852c519b5391fc7ab8767c2dc59
2012-09-10 15:48:47 -07:00
Jeff Brown
d728bf514f Make display manager tell input system about viewports.
The window manager is no longer responsible for telling the
input system about the display viewport.

Change-Id: I932882bae55decef55f25093bb2a7ebac1620bb1
2012-09-08 18:12:57 -07:00
Jeff Brown
72018294cc Merge "Make mirroring automatic based on Windows on display." into jb-mr1-dev 2012-09-07 16:01:37 -07:00
Craig Mautner
efb735dbaf Fix incorrect indexing calculation.
Fixes bug 7129583.

Change-Id: Ia395a7acded05686668d5b3cee09d49025a9f339
2012-09-07 15:40:24 -07:00
Craig Mautner
722285e199 Make mirroring automatic based on Windows on display.
Tell the display manager whenever a given logical display
contains interesting windows.  If so, then the display
manager arranges to show that content on a physical display,
otherwise it ignores the logical display and makes its
associated primary physical display mirror the default
display.

Assign DisplayContents when Displays are added, remove them when
Displays are removed, and update the DisplayInfo when Displays
change.

Change-Id: I36e08ec538055acabe1e24cdd12c40de4e47a158
2012-09-07 14:46:32 -07:00
Svetoslav Ganov
1cf70bbf96 Screen magnification - feature - framework.
This change is the initial check in of the screen magnification
feature. This feature enables magnification of the screen via
global gestures (assuming it has been enabled from settings)
to allow a low vision user to efficiently use an Android device.

Interaction model:

1. Triple tap toggles permanent screen magnification which is magnifying
   the area around the location of the triple tap. One can think of the
   location of the triple tap as the center of the magnified viewport.
   For example, a triple tap when not magnified would magnify the screen
   and leave it in a magnified state. A triple tapping when magnified would
   clear magnification and leave the screen in a not magnified state.

2. Triple tap and hold would magnify the screen if not magnified and enable
   viewport dragging mode until the finger goes up. One can think of this
   mode as a way to move the magnified viewport since the area around the
   moving finger will be magnified to fit the screen. For example, if the
   screen was not magnified and the user triple taps and holds the screen
   would magnify and the viewport will follow the user's finger. When the
   finger goes up the screen will clear zoom out. If the same user interaction
   is performed when the screen is magnified, the viewport movement will
   be the same but when the finger goes up the screen will stay magnified.
   In other words, the initial magnified state is sticky.

3. Pinching with any number of additional fingers when viewport dragging
   is enabled, i.e. the user triple tapped and holds, would adjust the
   magnification scale which will become the current default magnification
   scale. The next time the user magnifies the same magnification scale
   would be used.

4. When in a permanent magnified state the user can use two or more fingers
   to pan the viewport. Note that in this mode the content is panned as
   opposed to the viewport dragging mode in which the viewport is moved.

5. When in a permanent magnified state the user can use three or more
   fingers to change the magnification scale which will become the current
   default magnification scale. The next time the user magnifies the same
   magnification scale would be used.

6. The magnification scale will be persisted in settings and in the cloud.

Note: Since two fingers are used to pan the content in a permanently magnified
   state no other two finger gestures in touch exploration or applications
   will work unless the uses zooms out to normal state where all gestures
   works as expected. This is an intentional tradeoff to allow efficient
   panning since in a permanently magnified state this would be the dominant
   action to be performed.

Design:

1. The window manager exposes APIs for setting accessibility transformation
   which is a scale and offsets for X and Y axis. The window manager queries
   the window policy for which windows will not be magnified. For example,
   the IME windows and the navigation bar are not magnified including windows
   that are attached to them.

2. The accessibility features such a screen magnification and touch
   exploration are now impemented as a sequence of transformations on the
   event stream. The accessibility manager service may request each
   of these features or both. The behavior of the features is not changed
   based on the fact that another one is enabled.

3. The screen magnifier keeps a viewport of the content that is magnified
   which is surrounded by a glow in a magnified state. Interactions outside
   of the viewport are delegated directly to the application without
   interpretation. For example, a triple tap on the letter 'a' of the IME
   would type three letters instead of toggling magnified state. The viewport
   is updated on screen rotation and on window transitions. For example,
   when the IME pops up the viewport shrinks.

4. The glow around the viewport is implemented as a special type of window
   that does not take input focus, cannot be touched, is laid out in the
   screen coordiates with width and height matching these of the screen.
   When the magnified region changes the root view of the window draws the
   hightlight but the size of the window does not change - unless a rotation
   happens. All changes in the viewport size or showing or hiding it are
   animated.

5. The viewport is encapsulated in a class that knows how to show,
   hide, and resize the viewport - potentially animating that.
   This class uses the new animation framework for animations.

6. The magnification is handled by a magnification controller that
   keeps track of the current trnasformation to be applied to the screen
   content and the desired such. If these two are not the same it is
   responsibility of the magnification controller to reconcile them by
   potentially animating the transition from one to the other.

7. A dipslay content observer wathces for winodw transitions, screen
   rotations, and when a rectange on the screen has been reqeusted. This
   class is responsible for handling interesting state changes such
   as changing the viewport bounds on IME pop up or screen rotation,
   panning the content to make a requested rectangle visible on the
   screen, etc.

8. To implement viewport updates the window manger was updated with APIs
   to watch for window transitions and when a rectangle has been requested
   on the screen. These APIs are protected by a signature level permission.
   Also a parcelable and poolable window info class has been added with
   APIs for getting the window info given the window token. This enables
   getting some useful information about a window. There APIs are also
   signature protected.

bug:6795382

Change-Id: Iec93da8bf6376beebbd4f5167ab7723dc7d9bd00
2012-09-06 18:56:17 -07:00
Craig Mautner
69b0818179 Limit certain actions to default Display.
Stop messing up PhoneWindowManager state when passing in windows
from non-default Display.

Change-Id: I472f7a13c5e2241fbf1f79ae1c8045fd92af016c
2012-09-05 19:54:32 -07:00
Craig Mautner
7950d081ac Merge "Make mLayoutNeeded per-Display." into jb-mr1-dev 2012-09-04 16:35:46 -07:00
Craig Mautner
19d59bc5ad Make mLayoutNeeded per-Display.
Switch from a global mLayoutNeeded to one for each Display so that
we don't run layout on Displays that haven't changed.

Change-Id: Ib65c5c667933cceacc46b94f4e6e6bd613d5cb35
2012-09-04 16:18:52 -07:00
Fabrice Di Meglio
035ce2ca92 Merge "Add support for "-rtl" in resources" into jb-mr1-dev 2012-09-04 15:01:03 -07:00
Craig Mautner
ea3a09a5b9 Remove single pass actions from display loop.
The WindowAnimator loop over each Display contained actions that
only needed to be done one time but were instead done once per loop.

Change-Id: Ia916b08cdb7670686e6295dbcef6a5ff27474099
2012-09-04 09:49:35 -07:00
Craig Mautner
76a7165719 Change layout inner loop order for multi display.
The inner loop that ran over each display had a few problems:
- The Surface transaction was starting and stopping between each
display.
- The layout change bits were being applied globally so all
displays were layed out when only individual displays needed to be.
- Wallpaper and input actions were being applied each time through
the display loop rather than once only for the default display.

Change-Id: I924252bab28c426222a4bb73693accc4b21cecbe
2012-09-04 08:59:39 -07:00
Craig Mautner
398341927f Minor refactors.
- Refactor DragState to take Display instead of DisplayContent.
- Rename xxxAnimationLw methods in WindowManagerPolicy to xxxPostLayout
to reflect animation refactoring.

Change-Id: I502f2aa45a699ad395a249a12abf9843294623f0
2012-09-02 07:47:24 -07:00
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
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
Jeff Brown
dc7d8008ec Merge "Add plumbing for new surface flinger display API." into jb-mr1-dev 2012-08-27 17:16:53 -07:00
Jeff Brown
64a55af0ac Add plumbing for new surface flinger display API.
Cleaned up the implementation of Surface and SurfaceSession
to use more consistent naming and structure.

Added JNI for all of the new surface flinger display API calls.

Enforced the requirement that all Surfaces created by
the window manager be named.

Updated the display manager service to use the new methods.

Change-Id: I2a658f1bfd0437e1c6f9d22df8d4ffcce7284ca2
2012-08-27 14:34:54 -07:00
Craig Mautner
3486b9696d Fix drag bug.
Previous assumption -- that the drag window was defined at time of
DragState construction -- was false. The window, and hence the
Display, is not known until performDrag. This change delays assigning
DragState.mDisplayContent until the window/Display is known.

Fixes bug 7028203.

Change-Id: I5799005652c484ff0c45ab340ce3b9e4b784883e
2012-08-27 11:31:24 -07:00
Fabrice Di Meglio
5f79799939 Add support for "-rtl" in resources
- fix bug #7035019 Need to have "-rtl" support for Resource

Change-Id: Ic82145c2ac672729d8a6c695a5f343276a1a0a2c
2012-08-23 14:55:33 -07:00
Craig Mautner
5642a48fbb Fix unprotected variable access by serializing.
The variables mKeyguardDisabled and mAllowDisableKeyguard were
being modified unprotected by mKeyguardTokenWatcher. Fix is to
serialize accesses to these variables by only referencing them
from the same Handler that mKeyguardTokenWatcher uses. Eliminates
synchronization blocks and mKeyguardDisabled variable.

Fixes bug 7045624.

Change-Id: I6355aa393507408296316bee61e178dc81e2a172
2012-08-23 14:25:34 -07:00
Craig Mautner
6715d1effa Merge "Clean up displayId and layerStack usage." into jb-mr1-dev 2012-08-23 08:44:53 -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
Craig Mautner
259328c04c Eliminate special battery calls by WindowManager
Previous to this change the WindowManager was notifying the
BatteryDtatsService about windows that keep the screen on. WM used a
custom WakeLock tag to indicate to PowerManagerService that it had
already notified the BatteryStatsService.

This change eliminates WindowManager notifying the BatteryStatsService
and lets PowerManagerService do the job.

Fixes bug 7030326.

Change-Id: I666dc6ef8f094b8d3d109fea6876be058e057b4f
2012-08-22 11:01:35 -07:00