Commit Graph

127 Commits

Author SHA1 Message Date
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
Dianne Hackborn
529e744d31 More debugging for issue #7343200 Fails to show wallpaper in the...
...background for lockscreen sometimes and remains black / blank

There was a bunch of state not being put into the dumpsys output.
In particular, the current wallpaper target of the WindowAnimator
was not being included.  I think the problem is that these targets
are not being updated from the main window manager state at some
point where they need to be.

Change-Id: Ic795047f6aea9b6f72d5550bccc9f8d76c6ecb67
2012-11-01 15:09:10 -07:00
Craig Mautner
ad09bccfe4 Bring up unlock screen for FLAG_DISMISS_KEYGUARD.
Widgets that did not launch Activitys would not display the unlock
screens when they were tapped. Now any window that is shown with
FLAG_DISMISS_KEYGUARD set while the keyguard is locked will
cause the unlock screen to be displayed.

Bug: 7301530 fixed.
Change-Id: I90d11b52d2b63260bdb5f2b6eb7e98eb7a4d9331
2012-10-30 12:08:22 -07:00
Craig Mautner
341220fd09 Use parent window to evaluate show-to-all-users.
When a window is attached to another window use the parent window's
attributes to determine whether the child window should be shown
to all users.

Bug: 7328633 fixed.
Change-Id: I9601c149af87f624378e6895063bb3179d4f845e
2012-10-16 15:20:09 -07:00
Craig Mautner
a987d43bc9 Check for apps closing and restore mExiting test.
Removal of the mExiting test in a previous CL was a mistake leading
to z-order errors. In particular the auto complete dialog was on top
of the IME and was being dismissed due to touches on the IME.

Restoring mExiting alone missed cases where apps were exiting which
don't set mExiting. Adding a test for membership in mClosingApps
fixes that.

Bug: 7327220 fixed.
Change-Id: I3965b8a07080d1347bdada51ffeafe6ef2e32c8e
2012-10-11 14:13:31 -07:00
Craig Mautner
e6f7d5054a Fix problems with IME layers.
The query WindowState.isDisplayed did not take into account being
displayed due to app animations.

When an existing input method target was animating away the logic
for detecting if it was still on screen was faulty. This led to
assigning the input method to a layer below its target and obscuring
the input method until the animation was complete.

Bug: 7296703 fixed.
Change-Id: Ib00db4f21b726ed57d25d6a1e796b65a7d45ee97
2012-10-08 10:34:17 -07:00
Craig Mautner
5962b12bed Adds showWhenLocked attribute to Activities.
The new attribute allows an Activity such as the alarm to appear
on all users screens.

Bug: 7213805 fixed.
Change-Id: If7866b13d88c04af07debc69e0e875d0adc6050a
2012-10-06 13:09:58 -07:00
Craig Mautner
88400d3a31 Add flag for displaying non-user's Windows to user.
Created a new flag that indicates that a window should be shown
to all users. For the flag to be valid the owner of the window
must have system permissions.

Also separated system window types into those that show to all
users (e.g. StatusBar, Keyguard, ....) and those that appear only
to the owning users (e.g. Drag, ANR, TOAST, ...). Those that appear
only to their owner can override their default behavior using
the new flag (e.g. LowBattery).

Fixes bug 7211965.

Change-Id: I1fdca25d57b7b523f0c7f8bceb819af656c388d4
2012-10-05 15:29:25 -07:00
Dianne Hackborn
5fe7e2a304 Fix issue #6968859: home not exiting an ANR'd dream
Add a new call to the activity manager for the input dispatcher
to report about any pid having an ANR.  This has a new feature
where it can also tell the activity manager that it is above the
system alert layer, so the activity manager can pop its ANR dialog
on top of everything if it needs to.  (Normally we don't want
these dialogs appearing on top of the lock screen.)

Also fixed some debugging stuff here and there that was useful
as I was working on this -- windows now very clearly include
their uid, various system dialogs now have titles so you know
what they are in the window manager, etc.

Change-Id: Ib8f5d29a5572542cc506e6d338599ab64088ce4e
2012-10-04 12:04:58 -07:00
Craig Mautner
812d2ca475 Fix layout state issues.
- Restore test of hidden to isGoneForLayoutLw(), without that
we return false when setAppVisibility(true) is called which leads
to early layout of windows. Particulary on return from full screen
to non-full we lay out once before recognizing that the status bar
should be back and then again once the status bar appears causing
a jump. Fixes bug 6470541.

- Add a new test for configuration size changes to gone or hidden
windows. This forces a layout call to these windows which informs
them of the new size even though they are not shown until later.
In particular this keeps windows that were in the background
during a rotation from using their old boundaries on return.
Fixes bug 6615859.

- Consolidate WindowState.mConfiguration tests into WindowState.

Change-Id: I7a82ce747a3fcf7d74104dc23f1532efe64bd767
2012-09-27 18:07:39 -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
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