Commit Graph

138 Commits

Author SHA1 Message Date
John Spurlock
ef4adae5de Allow wallpaper to extend into the entire screen.
Previously it was constrained to displayInfo.appWidth/appHeight
which comes from PWM.getNonDecorDisplayWidth/Height, which includes
the nav bar.

Also adjust window layout to entire screen.

This allows wallpaper to extend into the navigation bar region,
important if the nav bar is hidden or transparent.

Bug:10505328
Change-Id: Ia6057b9c57b476a48f3b2d8b6368fd631e944a3e
2013-08-27 12:56:41 -04:00
John Spurlock
7045aaa21e Fix View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION.
If a window's task stack has no sibling, restore old behavior
of allowing frame to go below the nav bar.

Bug:9884905
Change-Id: Ifc38901a6633cf431dba8740a65258d0618c0fd0
2013-07-16 19:42:23 -04:00
Jean-Baptiste Queru
c6376b54ba am a998fa2d: am e14afe71: am 58f26e9d: Merge "The order of child windows is switched"
* commit 'a998fa2df957ad3f1c860d5ab8903041cf53a2f0':
  The order of child windows is switched
2013-07-08 11:27:51 -07:00
Jean-Baptiste Queru
e14afe7163 am 58f26e9d: Merge "The order of child windows is switched"
* commit '58f26e9dfbd3986037fa5e52e8def1cb6b741bc3':
  The order of child windows is switched
2013-07-08 11:21:52 -07:00
takeda.masayuki
1873509153 The order of child windows is switched
By calling WindowManagerService#reAddWindowLocked(), the window object
in DisplayContent.mWindows is rearranged. If this window has children,
the window objects belonging to WindowState.mChildWindows are also
rearranged together. At this time, while DisplayContent.mWindows is
arranged in ascending order of Z-Order, WindowState.mChildWindows is
arranged in descending order. Therefore, if children
(= WindowState.mChildWindows) are added to DisplayContent.mWindows
in the original order, the order of children is switched. I think
that children must be sorted before they are added.

Change-Id: I28a506f17fcd99c801a3faa17cca66fffb291596
2013-07-08 11:08:41 -07:00
Craig Mautner
c5a6e44f59 Extend stacks up under status bar
Retain compatibility with earlier behavior. Fixes bug 8685941.

Change-Id: Ida800a2476ba3a18cd97deccbc65c8a02739d118
2013-06-05 17:22:35 -07:00
Craig Mautner
b3b36ba138 Resize all changed windows and fix moveTaskToStack
- Add all changing windows to mResizingWindows when an ActivityStack
is resized.

- Stop calling TaskStack.setBounds if the bounds haven't changed.

- Make moving a task from one stack to another work properly.

- Eliminate unused methods and redundant variables in WindowState and
WindowStateAnimator.

Change-Id: I3a950c777bcc50cdeced150d44423d4d0b38af4a
2013-05-20 13:25:14 -07:00
Craig Mautner
c36c8e6f1f Fix issue #8868003: Recents thumbnails scale...
...+ zoom to wrong place

We need to make sure the overscan insets are never negative.

master version of ag/307569.

Change-Id: I4beed63a9541e228087b588e32996669755fcc51
2013-05-10 13:33:31 -07:00
Dianne Hackborn
bee1fb9363 DO NOT MERGE. Fix issue #8868003: Recents thumbnails scale...
...+ zoom to wrong place

We need to make sure the overscan insets are never negative.

Change-Id: I6ca82acc2a6c887085a5d14d03a55ea78451e4b6
2013-05-08 18:05:58 -07:00
Craig Mautner
79a64b621e resolved conflicts for merge of a14a14ab to master
Change-Id: I80259a2887f36fc3af409322dea36aa90a2ee847
2013-05-08 15:00:09 -07:00
Craig Mautner
a248eeec27 Don't limit the overscan frame to the window frame.
Fixes bug 8829372.

Change-Id: I803ae60fcc38649c0a7a9cb39429333755e47e2b
2013-05-07 11:41:27 -07:00
Craig Mautner
05d290365f Fix layering and launching issues.
- Replace calls to ActivityStack.resumeTopActivity() with calls to
ActivityStackSupervisor.resumeTopActivities().

- Move dim layers from display scope to stack scope. This applies to
both the animation background dim layer and the FLAG_DIM_BEHIND dim
layer.

- Move windows on stacks that are not targeting wallpaper above the
wallpaper. Otherwise wallpaper placement hides the non-focused stacks.

Change-Id: Ic6b97ac6b094672bb1ddac17ce46ea58c738f073
2013-05-03 13:40:13 -07:00
Craig Mautner
0e415c6662 A better fix for bug 8740202.
Continue to layout windows that are animating away. Otherwise they
don't track with their parent windows that may be moving at the
same time.

Change-Id: Ic5b762ee538219fd6193e27dde6c245cbaa098df
2013-04-29 16:18:29 -07:00
Craig Mautner
eda67299cf Generic refactoring for clarity.
- Log.* was being interspersed with Slog.*.
- WindowState Rects were being converted to local variables making
it harder to find all references to them.

Change-Id: I868a32028604d46dbbc15b005a440f0571336293
2013-04-28 13:50:14 -07:00
Craig Mautner
f06b8c1788 Add null test and remove redundant call.
- Did not handle the case where mTaskIdToTask returned null.
Fixes bug 8646178.
- updateInputWindowsLw() was being called in removeWindows
immediately after it was called in performLayoutAndUpdateSurfaces.

Change-Id: I1b8bcfadcc93f8c6638fd4247b426af77feeee23
2013-04-18 14:27:28 -07:00
Craig Mautner
bbcc289dad Merge "Incremental repairs to side by side stacks." 2013-04-17 01:58:51 +00:00
Craig Mautner
53078b25c9 Merge "Implement stack splitting and task movement." 2013-04-17 01:58:15 +00:00
Craig Mautner
4cd0c13f8f Incremental repairs to side by side stacks.
- Add taskId parameter to createStack() so stacks are pre-populated
with a task.
- Keep track of stack access order in DisplayContent so getTasks
returns in MRU order.
- Set touchableRegion in InputMonitor so modal touching does not
extend beyond stack boundary.
- Fix stack merging so that deleting a stack results in a new
stack the size of the two children.

Change-Id: I62a6ba0a34f34dd7ec866b440bf04595379e19e8
2013-04-16 18:55:07 -07:00
Dianne Hackborn
11dfb30c2f am f5cfab41: am a59a19ab: Merge "Fix issue #8512015: VideoView\'s window animates when its position changes" into jb-mr2-dev
* commit 'f5cfab41c3ea1eb0cd99f7a9387af7df2b2e5991':
  Fix issue #8512015: VideoView's window animates when its position changes
2013-04-15 21:54:39 -07:00
Dianne Hackborn
1c5383ce0b Fix issue #8512015: VideoView's window animates when its position changes
Change-Id: I79eee6b9672b7d72eabe5d20be639c05a6f3d72b
2013-04-15 15:07:21 -07:00
Craig Mautner
967212cb54 Implement stack splitting and task movement.
Split stacks and move tasks between them. Layout the windows
according to the new stack split.

After layout content rectangles are known split the available area
between all stack boxes. Then use those values for future layout.

Provide stack contents to ActivityManager.

Change-Id: I9746e6185445633810d506be514d0b7b540a7f99
2013-04-15 13:46:47 -07:00
Dianne Hackborn
229f1aadf9 am abe0aa78: am 8f980e1a: Merge "Reduce duration of rotation xfade animation." into jb-mr2-dev
* commit 'abe0aa78caf81b24af0b45700801fc1f867cfa0e':
  Reduce duration of rotation xfade animation.
2013-04-10 11:01:28 -07:00
Dianne Hackborn
a57c695bf2 Reduce duration of rotation xfade animation.
Also add code for tracking how long a rotation takes,
and who is causing it to take that time.

Change-Id: Ie3352ddfddd247f5a5c08f7da6bfe6b4da607ba2
2013-03-29 15:03:18 -07:00
Craig Mautner
d9a22881fd Complete removal of Task from DisplayContent.
Moved Tasks into TaskStacks.

Change-Id: I3478dab4eab3a68d4d71a7a5bb2e65ba2394f2d7
2013-03-17 16:19:21 -07:00
Craig Mautner
3f0bc9af04 am db6c556d: am cc947fdc: Merge "Add window leak check and possible recovery." into jb-mr2-dev
* commit 'db6c556daea9fcf8aaeea8cacb5d8c29d0b406e7':
  Add window leak check and possible recovery.
2013-03-06 18:46:21 +00:00
Craig Mautner
a99764e597 Add window leak check and possible recovery.
Search output for "!!! LEAK !!!"

For bug 8322020.

Change-Id: I6db572a1c7fe0e6b386ccb0dba08bc376659a75a
2013-03-06 10:22:16 -08:00
Dianne Hackborn
ee61a7fb95 am 530b2b1c: am a5513616: Merge "Add new WindowId for cross-process monitoring of focus." into jb-mr2-dev
* commit '530b2b1c98e3a3d86fd90cd91a08005370b8aa49':
  Add new WindowId for cross-process monitoring of focus.
2013-03-05 21:08:13 +00:00
Dianne Hackborn
e3f23a36d8 Add new WindowId for cross-process monitoring of focus.
This is a class representing a window and providing limited
interaction with it, which can be handed across processes.

Change-Id: I22885f2064a9cc8c68d690a5858c2e28bbb6a0f3
2013-03-05 09:33:48 -08:00
Craig Mautner
2ad920759b Revert ActivityManager changes for tasks. DO NOT MERGE
Keeping all activity=>task changes in master and removing them
from jb-mr2.

Revert "Update histories simultaneously."
Revert "Add null check to setAppGroupId."
Revert "Fix crashing bug in validator."
Revert "Switch topRunning* and moveTaskTo*"
Revert "Begin switch over to task based history."
Revert "Reset and reuse Iterators and don't new() one."
Revert "Remove AppWindowToken lists."
Revert "Fix build."
Revert "Remove unused App methods."
Revert "Stop using AppToken movement and start using Task."
Revert "Replace access to mAppTokens with AppTokenIterator"
Revert "Refactor setAppOpVisibility implementation."
Revert "Add AppWindowTokens to TaskList."
Revert "Make ActivityStack.mHistory private."
Revert "Migrate AppWindowToken lists into DisplayContent."

Change-Id: I5722c9a4956dccb52864207e2967690bc58e4ebb
2013-02-25 17:07:39 -08:00
Dianne Hackborn
c4aad01cbb Formalize overscan metrics.
The window manager now maintains and reports a new formal
"overscan insets" for each window, much like the existing
content and visible insets.  This is used to correctly
position the various UI elements in the various combination
of layout options.  In particular, this allows us to have
an activity that is using fitSystemWindows to have the content
of its UI extend out to the visible content part of the screen
while still positioning its fixed UI elements inside the
standard content rect (and the entire window extending all
the way into the overscan area to fill the screen as desired).

Okay, maybe that is not written so clearly.  Well, it made
my head hurt too, so suffer!

The key thing is that windows now need to know about three
rectangles: the overall rectangle of the window, the rectangle
inside of the overscan area, and the rectangle inside of the
content area.  The FLAG_LAYOUT_IN_OVERSCAN option controls
whether the second rectangle is pushed out to fill the entire
overscan area.

Also did some improvements to debug dumping in the window
manager.

Change-Id: Ib2368c4aff5709d00662c799507c37b6826929fd
2013-02-22 19:14:37 -08:00
Craig Mautner
f0b36c5590 Merge "Refactor setAppOpVisibility implementation." 2013-02-14 06:22:32 +00:00
Craig Mautner
926f3839d8 Stop using AppToken movement and start using Task.
Change-Id: I5fbd3b2b692e0e127386051f782b1015515ba384
2013-02-13 11:58:56 -08:00
Craig Mautner
fb32c6e9e9 Refactor setAppOpVisibility implementation.
- Convert double iteration over DisplayContents and WindowLists to
single iteration over AllWindowsIterator.

- Use existing change check in show() and hide() to trigger animation
scheduling rather than propagate change state up through calling tree.

Change-Id: Ic703a9fddebacbd0785bd5a186e95f9d0b128c42
2013-02-12 15:08:44 -08:00
Dianne Hackborn
b6b23ecdfc App ops: the draw on top op now actually controls what is drawn.
Change-Id: Iccfc0723a0f92108a4f7d631d74efe21dbc6f157
2013-02-12 10:40:16 -08:00
Dianne Hackborn
c2293025a2 App ops: track system windows, monitoring changes.
Change-Id: I273e82bdad66ada3bf0f7ec9176bc304b9ee1ee8
2013-02-06 23:59:56 -08:00
Dianne Hackborn
f265ea9d83 App ops: vibration, neighboring cells, dialing, etc.
Improve handling of vibration op, so that apps are
better blamed (there is now a hidden vibrator API that
supplies the app to blame, and the system now uses this
when vibrating on behalf of an app).

Add operation for retrieving neighboring cell information.

Add a new op for calling a phone number.  This required
plumbing information about the launching package name through
the activity manager, which required changing the internal
startActivity class, which required hitting a ton of code that
uses those internal APIs.

Change-Id: I3f8015634fdb296558f07fe654fb8d53e5c94d07
2013-02-01 15:14:29 -08:00
Craig Mautner
581068131c Remove some TODOs.
Change-Id: I52f5a8a76593dde177c2e931f656b13134a3bd2b
2013-01-07 23:39:11 -08:00
Craig Mautner
0bf6ec9e37 Clean up warnings.
Change-Id: I1dfe21e5f64364c90565b594e28074cabe7daa64
2012-12-18 10:03:21 -08:00
Craig Mautner
2268e7ee5c Minor refactorings.
Change-Id: Ia0218bf86d142be80dd12d04de97da5d19293815
2012-12-13 15:42:46 -08:00
Craig Mautner
ae44659f30 Call adjustWallpaperWindowsLocked once per pass.
Also refactor a few methods and improve logging.

Change-Id: Ic54a1ff99f6de732b31cda5c06d36e8de01a269c
2012-12-12 10:09:19 -08:00
Craig Mautner
74c9671855 Merge "Recouple layout and animation a bit." 2012-12-11 10:42:42 -08:00
Craig Mautner
ccc9e9b936 Further refine test for window gone.
Do not treat a window that is animating as being onscreen until it
has been drawn. The indication that a window was "gone" was occurring
too soon resulting in windows appearing before the status bar came
back and having to be drawn twice, with and without the status bar.
By waiting for the window to be drawn the status bar appears and the
window does not have to get redrawn.

Bug 7696315 fixed.

Change-Id: Ic93bf6eed03cf12a92a656791725a6d26e0ad0e9
2012-12-11 09:49:38 -08:00
Craig Mautner
968683335e Recouple layout and animation a bit.
Share state between layout and animation and stop copying
redundant data between the two.

Change-Id: If07d3fc3ddfd33e3d46bf45d24d7aca58067ee66
2012-12-04 16:20:08 -08:00
Svetoslav Ganov
152e9bb81a Refactoring of the screen magnification feature.
1. The screen magnification feature was implemented entirely as a part of the accessibility
   manager. To achieve that the window manager had to implement a bunch of hooks for an
   external client to observe its internal state. This was problematic since it dilutes
   the window manager interface and allows code that is deeply coupled with the window
   manager to reside outside of it. Also the observer callbacks were IPCs which cannot
   be called with the window manager's lock held. To avoid that the window manager had
   to post messages requesting notification of interested parties which makes the code
   consuming the callbacks to run asynchronously of the window manager. This causes timing
   issues and adds unnecessary complexity.

   Now the magnification logic is split in two halves. The first half that is responsible
   to track the magnified portion of the screen and serve as a policy which windows can be
   magnified and it is a part of the window manager. This part exposes higher level APIs
   allowing interested parties with the right permissions to control the magnification
   of a given display. The APIs also allow a client to be registered for callbacks on
   interesting changes such as resize of the magnified region, etc. This part servers
   as a mediator between magnification controllers and the window manager.

   The second half is a controller that is responsible to drive the magnification
   state based on touch interactions. It also presents a highlight when magnified to
   suggest the magnified potion of the screen. The controller is responsible for auto
   zooming out in case the user context changes - rotation, new actitivity. The controller
   also auto pans if a dialog appears and it does not interesect the magnified frame.

bug:7410464

2. By design screen magnification and touch exploration work separately and together. If
   magnification is enabled the user sees a larger version of the widgets and a sub section
   of the screen content. Accessibility services use the introspection APIs to "see" what
   is on the screen so they can speak it, navigate to the next item in response to a
   gesture, etc. Hence, the information returned to accessibility services has to reflect
   what a sighted user would see on the screen. Therefore, if the screen is magnified
   we need to adjust the bounds and position of the infos describing views in a magnified
   window such that the info bounds are equivalent to what the user sees.

   To improve performance we keep accessibility node info caches in the client process.
   However, when magnification state changes we have to clear these caches since the
   bounds of the cached infos no longer reflect the screen content which just got smaller
   or larger.

   This patch propagates not only the window scale as before but also the X/Y pan and the
   bounds of the magnified portion of the screen to the introspected app. This information
   is used to adjust the bounds of the node infos coming from this window such that the
   reported bounds are the same as the user sees not as the app thinks they are. Note that
   if magnification is enabled we zoom the content and pan it along the X and Y axis. Also
   recomputed is the isVisibleToUser property of the reported info since in a magnified
   state the user sees a subset of the window content and the views not in the magnified
   viewport should be reported as not visible to the user.

bug:7344059

Change-Id: I6f7832c7a6a65c5368b390eb1f1518d0c7afd7d2
2012-12-03 10:38:48 -08:00
Craig Mautner
52a839de9e am 3351ab27: am f967500e: am 46732445: Merge "Include child windows when looking for insertion point." into jb-mr1.1-dev
* commit '3351ab27b9fc9eb2b21044ac68efebd1cfe85dfb':
  Include child windows when looking for insertion point.
2012-11-30 18:46:58 -08:00
Craig Mautner
7b1aa77a9b Include child windows when looking for insertion point.
After finding a window in the window list we turn around and look in
the AppWindowToken.windows list for it. If it is a child of a window
in that list we should use the parent windows index as the search
result. Instead we gave up and ended up inserting the window at the
beginning of the windows list.

Bug 7357465 fixed.

Change-Id: If77f343b8597bfbb0b7fa41dedf7972d78d03020
2012-11-30 16:14:45 -08:00
Craig Mautner
8f0bdb5bb6 Merge "Extract AppTransition from WindowManager" 2012-11-29 11:43:49 -08:00
Craig Mautner
e855214249 Retain configuration change info and sync access.
- If a window was hidden while the configuration changed and then
changed back WindowManagerService would not know that the change
had ever happened and wouldn't notify the window of this. Most
windows wouldn't care but because Keyguard inflates layouts while
it is hidden...

Bug 7094175 fixed?
Bug 7501099 fixed!

Change-Id: If27f5f1d333602dac7719dd39dbdf3fe7954aa06
2012-11-27 12:47:27 -08:00
Craig Mautner
164d4bb4c3 Extract AppTransition from WindowManager
Refactor of WindowManagerService to move app transitions out.

Change-Id: Id3e377526a69f95a3ee4c0d97ca6fd84005beb6a
2012-11-26 13:51:23 -08:00
Dianne Hackborn
98129739af Fix issue #7343200: Fails to show wallpaper in the background for...
...lockscreen sometimes and remains black / blank

The problem was that we were using the animation-side wallpaper state
in cases where it was not updated yet.

The mWallpaperTarget variable is propagated over to the animation
side when the main window manager state updates.  On the animation
side, this is used by hideWallpapersLocked() to determine if the
current wallpaper should be hidden.

The problem is that various paths to hideWallpapersLocked() can
come from the layout side of the window manager instead of the
animation side.  This causes the problem here because in this case
the wallpaper state may not have yet been propagated to the
animation side, so it could incorrectly decide to hide the wallpaper
because it thinks there is not a target when in fact a target is
set in the layout side.  This won't get fixed until some time way
later that the layout side decides that a new window is being shown
that may need to have the wallpaper shown.

The fix here is pretty gross, but as safe as possible -- the
hideWallpapersLocked() function now uses either the animation or
layout wallpaper state depending on where the call to it is coming
from.

Change-Id: I9250bfeae6e11c1761760bcc696fdb33fb5c8a5f
2012-11-02 14:19:59 -07:00