Commit Graph

7542 Commits

Author SHA1 Message Date
Filip Gruszczynski
a7308c1bd8 Merge "Handling touch events on the caption." 2015-11-21 00:42:01 +00:00
Vladislav Kaznacheev
82063913ae Implement View.cancelDragAndDrop
View.cancelDragAndDrop cancels a drag operation initiated by
View.startDragAndDrop.

It has to be called on a View in the same window (under the
same ViewRootImpl) that the view which started the drag.

Bug: 24415683
Change-Id: If9a265fd8cc4d26b207d582d0d02d5c9ae78eba1
2015-11-20 15:22:36 -08:00
Filip Gruszczynski
a33bdf372c Handling touch events on the caption.
We need a more sophisticated touch handling to support overlaying the
caption. The touch events need to be routed in following order:
close/maximize buttons, application content, caption dragging.

Bug: 25486369
Change-Id: I9d4e971fb055c217c0bd83f0490fb42a5c22e93b
2015-11-20 13:25:24 -08:00
Vladislav Kaznacheev
e311034ee8 Add View.startDragAndDrop and deprecate View.startDrag
This in preparation to adding a new method to cancel an
ongoing drag. This method cannot be called cancelDrag,
stopDrag or endDrag because these names are already
taken by View-derived classes in the framework or in
important apps.

Change-Id: Ie21a778c3253b2d526c0c1bcc423c374ca70ee01
2015-11-20 12:59:42 -08:00
Vladislav Kaznacheev
87ab07e9a7 Merge "Revert "Implement View.cancelDrag"" 2015-11-19 22:23:35 +00:00
Vladislav Kaznacheev
54d6b95e86 Revert "Implement View.cancelDrag"
This reverts commit 93cf731b26.

This is required because adding View.cancelDrag conflicts with existing app code.

Change-Id: I323fc5d2144266781d3168fe033c53cb5b37050e
2015-11-19 22:20:06 +00:00
Filip Gruszczynski
8fbddc9367 Merge "API for overlaying app content over decor caption in freeform windows." 2015-11-19 19:51:55 +00:00
Filip Gruszczynski
63250651ca API for overlaying app content over decor caption in freeform windows.
Bug: 25486369

Change-Id: I8fba30dd690d9f0ccc48149f57ce254286b0c2ae
2015-11-19 10:38:38 -08:00
Adam Powell
c55d5072ac Add support for partial view layouts
Traditionally, when a view called requestLayout it would force
recursive requestLayout calls for all parent views up the
hierarchy. This meant that there was no way to determine at traversal
time whether a parent view itself needed layout, or if just one of its
descendants did.

Add a ViewParent method requestPartialLayoutForChild(View). This lets
a caller state that a particular child of a given parent needs a
remeasure and relayout at its current measured size and position
within that parent. This can help prevent the full-tree relayout often
caused by otherwise trivial changes. Partial layouts are processed
after any pending "full" relayout during ViewRoot traversals, but
before drawing.

Add a ViewGroup method requestLayoutForChild(View). This lets a
ViewGroup decide whether it is more appropriate to request a
traditional relayout or a partial layout for itself or just the child
that changed.

Add a ViewParent method findDependentLayoutAxes. This allows a caller
to check if the ViewParent's layout is dependent on a specific direct
child view along one or both axes. Called recursively, this can be
used to determine if a change in a child view can be isolated to a
partial layout, even if its direct parent's own layout is tied to its
other ancestors. (e.g. MATCH_PARENT, LinearLayout weights)

Implement ViewGroup#requestPartialLayoutForChild to call new
ViewParent method findDependentLayoutAxes and based on the result,
either request a full layout for itself or a partial layout for the
child in question.

Implement findDependentLayoutAxes for common framework ViewGroups. A
private implementation in ViewGroup is available for use by framework
classes that will deal with basic LayoutParams. These implementations
specifically check for derived LayoutParams classes and abort the
optimization if they find something beyond their expected parameter
types.

Change-Id: I0a1a9b79293d17d4fae8d9892b96d3586f9401ae
2015-11-19 09:31:56 -08:00
Yohei Yukawa
12d66c2cda Have ControlledInputConnectionWrapper#toString().
'dumpsys input_method' does not generate useful information for
InputMethodManager#mIInputContext.  It is currently just a default
output of Object#toString().

This CL overrides ControlledInputConnectionWrapper#toString() so that
we can easily understand whether this connection is accepting API calls
from the IME or silently droping those API calls.  Note that
ControlledInputConnectionWrapper is not exposed to developers so
overriding #toString() has no effect for application developers.

Bug: 25373872
Change-Id: I89b9d4e15bc1569817bab4d1be429ac6e0462f14
2015-11-19 00:24:14 +00:00
Vladislav Kaznacheev
f91e74d9a9 Merge "Implement View.cancelDrag" 2015-11-18 19:13:13 +00:00
Yohei Yukawa
33e81798fa Tell the reason why IMMS unbinds IME client.
As a preparation to fix Bug 25373872, this introduce an additional
parameter to IInputMethodClient.unbind() so that the IME client
that is running in the application side can know why IMMS needs
to unbind the connection.

In future the "unbindReason" parameter is supposed to be used to
optimize the behavior of IMM runtime running in the application process,
but for now it is not used unless we build the sytem with debug message
enabled.  Hence there should be no user-visible change with this CL.

Bug: 25373872
Change-Id: I74e83c8ca9d1d53e31e9c7b5bda1dec6274e59c8
2015-11-17 21:14:42 -08:00
Jun Mukai
28d5615147 Merge "Introduce animated pointer icon for STYLE_WAIT." 2015-11-18 01:46:58 +00:00
Jun Mukai
808196f139 Introduce animated pointer icon for STYLE_WAIT.
Change-Id: I893f8276e09351db6187c553f349008794b95690
2015-11-17 17:36:08 -08:00
Vladislav Kaznacheev
93cf731b26 Implement View.cancelDrag
View.cancelDrag cancels a drag operation initiated by
View.startDrag.

It has to be called on a View in the same window (under the
same ViewRootImpl) that the view which started the drag.

Bug: 24415683
Change-Id: Iae5ff3534b6c747ae174f170fdd01ff4d3b1c312
2015-11-17 14:39:21 -08:00
Alan Viverette
baf7b9adf4 Merge "Use correct rounding in View for potentially negative values" 2015-11-17 21:44:14 +00:00
Filip Gruszczynski
1a4dfe593a Synchronize recents to freeform transition.
Recents to freeform animation must hang on the first frame and inform
Recents to hide its views. This mirrors the transition from freeform
to Recents, where the animation needs to hang on the last frame.

We need a special window flag for recents to force a redraw after the
animation launches. At this point Recents will become not visible
from the perspective of the activity manager, which would prevent
further drawing. We make recents ignore that and instead depend on
window visibility which will change after recents exit animation
finishes.

Bug: 24913782
Change-Id: Ief743b7e6fcebb3d8789d4745fb122ac607c1cf0
2015-11-17 10:03:19 -08:00
Alan Viverette
214fb68767 APIs for querying and controlling display magnification
Also separates magnification state and touch event handling. Moves
callbacks for window manager changes and display state changes into
the magnification controller.

Bug: 22718911
Change-Id: I3a8ba060a07d8f1f51856855a5f85601766fd45d
2015-11-17 09:48:25 -05:00
Alan Viverette
c45b1d4ae4 Use correct rounding in View for potentially negative values
Fast rounding doesn't work for negative values, so use Math.round()
where we might encounter negative values. Use Math.floor() and ceil()
for rounding down and up, respectively.

Bug: 25695621
Change-Id: I94831b8eb7552fc24cbe5808e923de1674d8ba6d
2015-11-16 15:38:59 -05:00
Yohei Yukawa
678e38e214 Mechanical code clean-ups in MSG_UNBIND handler.
As a preparation to fix Bug 25373872, this CL does a mechanical
code clean-ups.  Literally there is no behavior change.

Bug: 24504456
Change-Id: I6e3062bda17e748a3c5f1450d6752239dd260520
2015-11-13 18:36:21 -08:00
Chong Zhang
f4abc2b701 Need to updateSurface if surface size was changed in relayoutWindow
On some chips, SurfaceControl.setSize will not take effect for several
frames. We have to also do a updateSurface/invalidate (which destroys
and creates the EGLSurface) to get the size right.

Keep track of SurfaceControl size changes in window manager, and pass
that to ViewRootImpl, so that a updateSurface is done either the surface
itself or its size is changed.

Note that we don't use frame size change to trigger updateSurface, because
frame size could be different from the surface size that window manager set.
For example during drag resizing, the surface size is fullscreen although
frame size changes constantly. Doing updateSurface upon frame size change
could cause us to do many unnecessary updateSurface.

bug: 25583942

Change-Id: I1989613a187bb6ef1c179bd2800c6a7b01fcdb3a
2015-11-13 13:03:48 -08:00
John Reck
f7aefcaf30 Merge "Fix flickering issue" 2015-11-12 23:53:46 +00:00
John Reck
f3fed8e576 Fix flickering issue
Bug: 25411780

Partial-revert for now, reopened b/22565656 to
deal with the memory use in a followup

Change-Id: I1ec636bc811a85eb2dc4f8c91562dc81b6261355
2015-11-12 15:52:06 -08:00
Wale Ogunwale
8c0886fe2e Merge "Avoid configuration of callback being reset after relayout." am: cbcafde45e am: 0170fb8281
am: f98a6f4101

* commit 'f98a6f41019bf41d57d0681c2e1d6859f8704091':
  Avoid configuration of callback being reset after relayout.
2015-11-12 16:35:44 +00:00
Wale Ogunwale
0170fb8281 Merge "Avoid configuration of callback being reset after relayout."
am: cbcafde45e

* commit 'cbcafde45ec28d62ce674d215c0264f41580d9a6':
  Avoid configuration of callback being reset after relayout.
2015-11-12 16:01:22 +00:00
riddle_hsu
164725c652 Avoid configuration of callback being reset after relayout.
mPendingConfiguration is a parameter of IWindowSession.relayout.
And IWindowSession.aidl declared "out Configuration outConfig",
it will always create a new configuration for remote side to write.
If remote side does not write (WMS does not have config change),
the new default configuration will be returned.

In original code passes mPendingConfiguration to updateConfiguration
directly, then callbacks (sConfigCallbacks) receive the same
instance of mPendingConfiguration. And because the implementation
of callback may use the configuration after relayout has reset
the configuration to default, then it may have timing that results
"showing hybrid of portrait and landscape modes" which try to fix
in commit e36d6e27.

To avoid this, always create a copy to updateConfiguration.
MSG_RESIZED_REPORT from dispatchResized also did the same thing.

Related commit:
e36d6e277e
694f79b5d1

Change-Id: Ic1abd596e384918224b3a7020583d9a04641cccc
2015-11-12 14:07:12 +08:00
George Mount
abf1eb3cd9 Merge "Have focus avoid middle of a foucs chain when possible." 2015-11-11 15:32:20 +00:00
Robert Carr
64aadd0849 Clarify geometry management for SurfaceView
In the hardware accelerated case, RenderThread needs
to be the authority of information on the geometry of
the SurfaceView (this will occur via moving the
repositionWindow call to RenderThread). In order
to support this we have to enable calling relayoutWindow
without geometry (so that it will not fight with
repositionWindow). Add such a mode to relayoutWindow
and use it from SurfaceView. Add size to repositionChild
while we are here.

Bug: 22802885
Change-Id: Ie45132c22f34cc6ecfe2446912b30bd1df414406
2015-11-10 19:21:22 +00:00
Chong Zhang
d153c4f6f0 Fix flicker when releasing drag of divider
bug: 25564523
Change-Id: I9c19f40f27cc80b8e6e0e98a0d6455941bd624e7
2015-11-09 10:34:14 -08:00
Winson
13d30660ef Fixing issue with canceling the thumbnail in addition to the app window.
Bug: 25392381
Change-Id: Ib507f53bcd2aad4771c2546f5e8bfe771769e9a2
2015-11-06 15:30:29 -08:00
Jorim Jaggi
a7262a8956 Immediately start resizing when touching docked divider
Before, the surface was made full-screen only after
a certain amount of time. Now, immediately make the surface
full-screen, as soon as the divider is touched, to make
resizing much snappier.

Bug: 24507122
Change-Id: I9425785fca4e62964a959a432c80a81d346602c5
2015-11-06 16:17:42 +01:00
Jorim Jaggi
253a20fad8 Fix black holes and flickering in docked resizing
When we start a resize with the docked stack divider,
set the surface background to be full-screen, and use
the traditional surface clipping/positioning in window
manager to adjust the size. This ensures that we don't
have any black holes because of asynchronicity (except
at the very beginning, but this can be worked around
later), and the position of the right/bottom activity
is always in sync with the position of the divider.

Also fix a bug in NonClientDecorView where the first
request to draw was dropped (because the thread hasn't
started up yet), and the main thread was waiting for it
indefinitily.

Bug: 24507122
Change-Id: I623bd48d5be64fac2fba45241b84f265944d200d
2015-11-06 16:17:14 +01:00
Jorim Jaggi
61f39a7b98 Migrate docked divider drawing to SysUI
Move docked divider drawing to SysUI. This let's us have real
time shadows in the future. Keep DockedStackDividerController
for placing/visibility in window manager.

Change-Id: I82c10add626d30f2ba180ee2a21cdbe6ddfe0371
2015-11-06 16:13:11 +01:00
Jorim Jaggi
2f7d292596 Supply app transition specs with a future
Because we retain activity surfaces now, the app transition specs
which were calculated/generated after the onPause() call when going
from recents -> app were too slow. Instead, supply a cross-process
future, which gets fetched when the window manager is about to be
ready to execute the app transition. In practice, this still gets
executed immediately after the onPause call.

If we have a retained surface, this adds some latency, but since we
absolutely need the specs to execute the transition, we have that
latency no matter where exactly we generate the specs.

If we don't have a retained surface, the specs are not calculated on
the critical path, so it's faster.

Bug: 19940527
Change-Id: I80d2c6f6b3a6568a70339619ecefbc3bd8409bd8
2015-11-06 16:12:59 +01:00
Bart Sears
8382f98f62 Merge "Revert "Clarify geometry management for SurfaceView"" 2015-11-06 09:08:46 +00:00
Bart Sears
7d73643f7a Revert "Clarify geometry management for SurfaceView"
This reverts commit 78a45f2bd8.

Change-Id: I782f688f52a85df84d9facef2fbf88c28f4a7082
2015-11-06 09:07:58 +00:00
Rob Carr
b9765b4c15 Merge "Clarify geometry management for SurfaceView" 2015-11-06 02:09:35 +00:00
George Mount
140ea62c38 Have focus avoid middle of a foucs chain when possible.
Bug 24873983

Focus follows top->bottom left->right by default (LTR),
but that could put next focus on a View in the middle
of a focus chain (something else points to the View with
nextFocusForwardId). That means that the View pointing
to it may get skipped or it may end in a focus loop
in the chain.

Instead, we now prefer to have the next view be one that
is at the head of a chain (forward) or tail of a chain
(backward).

Change-Id: Icb59f01c1406bc89ef3494fdc5be109e465aa8bc
2015-11-05 16:28:45 -08:00
Filip Gruszczynski
63a35e2343 Fix minor problems when resizing/maximizing docked window.
When maximizing the transition should originate from visible bounds, so
the first frame matches what is visible to the user. When switching to
the big surface, we only need to increase the layer by one, instead of
having artificially large value. If we use the large value, it will
cause a flicker over system windows.

Also includes some cleanup, like static imports and necessary logging.

Bug: 24913915

Change-Id: I84d7594622aa639e2008c662f941edf9c20b3202
2015-11-05 16:16:19 -08:00
Robert Carr
78a45f2bd8 Clarify geometry management for SurfaceView
In the hardware accelerated case, RenderThread needs
to be the authority of information on the geometry of
the SurfaceView (this will occur via moving the
repositionWindow call to RenderThread). In order
to support this we have to enable calling relayoutWindow
without geometry (so that it will not fight with
repositionWindow). Add such a mode to relayoutWindow
and use it from SurfaceView. Add size to repositionChild
while we are here.

Change-Id: I12f85f586a38bf86367f3d964cb49f19003d441f
2015-11-05 15:37:42 -08:00
Filip Gruszczynski
14b4e57c1b Remove blink during the freeform -> recents transition.
We achieve the desired result by prolonging the last frame of the
animation until recents tells that it drew its content. The CL also
includes cleanup that moves code that depends heavily on WindowState
fields into that class.

Bug: 24913782
Change-Id: I5ee5b18504dd4a86c24033d17eca21cd31936bca
2015-11-04 09:53:22 -08:00
Alan Viverette
78a8df4919 Merge "Always call legacy performLongClick()" 2015-11-04 15:09:27 +00:00
Alan Viverette
7611a6de6c Always call legacy performLongClick()
Adding performLongClick(x,y) broke compatibility for widgets that
overrode the no-arg performLongClick() and expected to receive a call.
This CL ensures that the no-arg method is called and the (x,y) data is
preserved for use in the default implementation.

Bug: 25411884
Change-Id: Ib0a3fb02d4c08ef64ce3a7165aa83bf0688aa50e
2015-11-03 13:32:20 -05:00
Rob Carr
31b09bdcdd Merge "Sync SurfaceView position changes to parent render." 2015-11-02 21:30:56 +00:00
Jun Mukai
4c759ca99f Merge "Fix: ToolType() check -> isFromSource()." 2015-11-02 21:27:24 +00:00
Jun Mukai
36a9946b23 Fix: ToolType() check -> isFromSource().
Change-Id: I8e13a179dc076cc44248662e6e8fd60e8cc69a3f
2015-11-02 13:15:00 -08:00
Wale Ogunwale
02a5a6bb9b Merge "Added StackId object for checking what features a stack supports" 2015-11-02 20:38:39 +00:00
Wale Ogunwale
3797c22ea1 Added StackId object for checking what features a stack supports
Helps make the code easier to follow since we are no longer checking
multiple stack ids at various decision points.

Bug: 25282299
Change-Id: Ifa6864a1ef56ce2eca4c94f87a4e0b993de987cd
2015-11-02 11:32:42 -08:00
Winson
c28098f69b Add ability to cancel task window transitions.
Bug: 25392381

Change-Id: I45f48edc21c058df0e4c22ceaf7e9aef5899a29c
2015-11-02 10:16:23 -08:00
Filip Gruszczynski
57311f7617 Merge "Hide recents during freeform to recents animation." 2015-10-30 21:34:57 +00:00