Commit Graph

57 Commits

Author SHA1 Message Date
Jorim Jaggi
e661f4001c Fix background pivot point
Bug: 27859759
Change-Id: Id4d77d3bd17ae96441960717a4ffe0bf4831562e
2016-03-26 02:20:43 +00:00
Jorim Jaggi
6885598ba0 Hide window swapping behind a flag
Bug: 27859522
Change-Id: I0e1e578d2d91f7572b0978dbb12ed143acbdf1e1
2016-03-26 01:55:12 +00:00
Jorim Jaggi
8dccd23675 Some divider handling fixes
- Fix calculation on which side to apply dimming.
- Fix dismissing parallax logic for new resize handling.
- Remove wrong/unnecessary resizeStack call

Bug: 27738239
Change-Id: Iaac671ca03e19aa70fa779d319b5fe84ff3b40ba
2016-03-25 18:10:14 -07:00
Jorim Jaggi
2adba07d75 Show a scrim activity if task is not resizable
Add a callback to TaskStackChangeListener which gets fired when the system
might need to inform the user that a specific app might not work in
multi-window.

Use that callback in SysUI to show a translucent activity which scrims the
activity behind to inform that it might not be resizable.

Debounce the information to once per multi-window session, to not make it
annoying.

Introduce launchTaskId to start an activity in an existing task, and protect
that with START_TASKS_FROM_RECENTS permission.

Bug: 27327287
Bug: 27431869
Change-Id: I89e8d653872ab01ba3c1e252b426e5481da0e6ca
2016-03-25 14:23:41 -07:00
Andrii Kulian
cddd32fc2b Merge "Revert "Refine divider behavior"" into nyc-dev 2016-03-22 21:04:48 +00:00
Andrii Kulian
fc34b73aef Revert "Refine divider behavior"
This reverts commit 50cd6361d7.
Now resize happens only after the divider is released, so these changes are
no longer needed.

This also fixes resize of 'non-docked' stack in split-screen during dragging
the divider: minimizeHoles was setting incorrect 'taskPositionOther' value
which lead to incorrect insets.

Bug: 27621228
Change-Id: Iec8dc977296e204b206954847dddfc159f498930
2016-03-21 17:26:11 -07:00
Wale Ogunwale
85941cff0c Merge "Added support to specify animation duration when resizing stack" into nyc-dev 2016-03-21 20:04:20 +00:00
Wale Ogunwale
e75a9adfbd Added support to specify animation duration when resizing stack
Needed for sys-ui to control the duration of various Pip transitions.

Bug: 27674339
Change-Id: I7bad27aaa19755a73c594e88b88b56db033e1a45
2016-03-21 11:17:19 -07:00
Wale Ogunwale
ef676d89f8 Only resize task when divider is released
To reduced jank during resizing we now only resize the task
when the split-screen divider is release vs always resizing
it to the snap points.

Bug: 27738239
Bug: 27676101
Bug: 27601572
Change-Id: Iad450842d82193bc1731729834339068cf2d3e83
2016-03-18 15:12:12 -07:00
Jorim Jaggi
d47e7e1176 Add ability to swap docked/fullscreen stack
Adds tap affordance that moves all tasks of the docked
stack into the fullscreen stack as well as moves the top task
of the fullscreen stack into the docked stack.

Also make sure not to trigger focus switch when tapping the divider
handle. For that, add a method so SysUI can specify the touchable
region which then gets excludes for the focus switch touch region.

Bug: 27358134
Change-Id: I34f39c53cacc0b9c00f87a792b88c3f64a5f61e1
2016-03-10 19:49:45 +01:00
Jorim Jaggi
899327f5cb Animation for docking task gesture
- Don't move recents window around during the animation
- Set the correct task size shortly after docking, so recents
starts with the correct size to avoid jank.
- Add staggered animation in recents.

Bug: 27154882
Change-Id: I7c56102feba9c3f6cb86cb5f1d87f0ad3b29c721
2016-03-09 13:58:11 +01:00
Jorim Jaggi
88afd020b6 Accessibility for split-screen divider
- Add label
- Add actions

Bug: 27274494
Bug: 26894949
Change-Id: I041c44f793f1ec86ec27951cc8e87868148b527d
2016-02-25 13:18:12 -05:00
Jorim Jaggi
0c790411c3 Cancel fling animation when starting to drag
Makes sure we don't end up in a weird state because
at the end of the fling animation, mDockSide gets
reset.

Bug: 27269044
Change-Id: I779b8ee9be9a35553c7f822421d1f02ca802111c
2016-02-20 02:23:37 +00:00
Jorim Jaggi
42625d1bc7 New behavior for docked stack when going home
- We keep the docked stack visible when home task is visible even
though it's not resizable.
- We introduce the a new concept called "minimizing" the docked stack,
which happens when going home. In this state, the docked stack is
clipped of almost completely.
- To achieve that, we introduce TaskStackBoundsAdjustController,
which adjusts the bounds of the docked stack when minimized. Also,
migrate the IME handling to this new class.
- We also need to inform SysUI that it is now minimized so it can
remove the drag affordance on the divider, and also make it a bit
smaller.
- When we detect an app transition, we check whether the home stack
gets visible/invisible. We then start an animation which runs in
sync with the normal app transition. For that we introduce
DockedStackDividerController.animate(), which performs the animation.

Bug: 27137961
Change-Id: I8623bc73cc6872bf28c5b1b8d5795974576811b2
2016-02-19 12:11:11 -08:00
Jorim Jaggi
e161f08e98 Multi-window optimizations #3
- Make sure divider is pushing frames only if necessary
- When starting recents while docking, make sure no unnecessary
animations are played to reduce system load.

Change-Id: I536f009aef7282ed85dde79b853aeae62644f3e3
2016-02-08 21:21:24 +00:00
Jorim Jaggi
ea4a19f1aa When long pressing recents and already docked, undock
Bug: 26771328
Change-Id: I1fe12181cd80fd948e4184be6a8790c77bfe9e45
2016-02-04 14:39:22 -08:00
Jorim Jaggi
067e817585 Only treat "null" bounds as fullscreen
When long pressing on the recents button, we made it one pixel smaller
than fullscreen so we don't dismiss the stack immediately again.
However, this is a huge hack, and lead to problems with navigation bar
background because there we actually rely on the fact whether
the window is fullscreen or not to determine whether to draw the
navigation bar background, which lead to flickering.

Bug: 26777526
Change-Id: Ifdfcf3ad4138bc88c5164177cd20f1ff1635085f
2016-02-04 14:37:07 -08:00
Jorim Jaggi
9511b0f1e9 Fix bug where surface was not clipped off during resizing
When dragging the divider in a way such the task size goes through
the following transition

- Half size
- Full screen
- Half size

the surface wasn't clipped off anymore. This was because in full
screen configuration, computeDragResizing() == false thus when
going full screen -> half size, we reset the draw state to
DRAW_PENDING to get notified when it has finished drawn. However,
this also broke clipping.

In order to fix this, we always put the window into a resizing mode
no matter whether the bounds are fullscreen or not.

However, this introduces an ugly flickering on the navigation bar,
when going into docked mode, because the app doesn't draw navigation
bar background in resize mode.

To fix that, we calculate the presence of navigation bar whether the
window is fullscreen, and not just whether it's resizing. For that,
we need to calculate the presence in BackdropFrameRenderer, by using
the insets just sent by window manager.

Change-Id: Idf56df4ae7fefe67d068bc2eeda8dc4d83bbefb7
2016-02-04 14:36:46 -08:00
Jorim Jaggi
defd9225e6 Fix crash in SysUI when configuration changes
Bug: 26913675
Change-Id: Ib36e5fcdd22197317f1b99a3aec8a46896a8cc36
2016-02-04 14:36:35 -08:00
Jorim Jaggi
1b12ef55b7 Divider tuning
- Take insets into account for calculating dismissing fraction,
but don't dim into 100% when the device has insets at that
side.
- When applying parallax to the top side, apply less.

Change-Id: Id1af37e6f7af43ec3682dad4ad1ce68034301b4d
2016-02-01 13:43:36 -08:00
Winson
c0d7058b14 Referencing static interpolators.
Change-Id: I5d2292016e869ed533f5873e373a1eccce651fc5
2016-01-29 11:15:43 -08:00
Filip Gruszczynski
84fa3351a2 Animate pinned stack resizing.
This introduces animating of stack bounds within window manager
module. It also uses this type of animation when moving an activity from
fullscreen stack to pinned stack.

Bug: 25672053
Change-Id: I75914a685d10021f8a7535b47ef12b6920b3fd5e
2016-01-28 08:47:54 -08:00
Jorim Jaggi
8f8155ba8a Dim harder when dismissing
Also fix a bug when selecting the dim target stack.

Change-Id: Id9d5e28caf5e810c7eef1e3b0fd7a9f945f8d146
2016-01-27 13:46:14 -08:00
Jorim Jaggi
f3e87908cd Merge changes I10224452,I7af4149f
* changes:
  Grow recents when in multi-window on phones
  Add animation when docking top task with long press
2016-01-27 01:21:00 +00:00
Jorim Jaggi
cdb06caebb Grow recents when in multi-window on phones
- Make sure all methods in RecentsImpl are called from the main thread.
- On secondary users, call dockTopTask in correct process.
- When opening recents, split it differently when on phones.

Change-Id: I10224452b1a9c0ae691d64cceeae5bb93cc4f6d8
2016-01-26 12:21:29 -08:00
Jorim Jaggi
50cd6361d7 Refine divider behavior
- Switch earlier to the dismissing/fullscreen layout, so
we minimize holes.
- For the bottom/right one, switch also earlier to the larger size to
minimize holes. We can't do this for the upper one because it will be
confusing there if the layout bounds doesn't equal the bounds while
snapping.

Change-Id: I8f065514f7aaa15ae76af648794ab8b23302e534
2016-01-26 03:19:15 +00:00
Jorim Jaggi
11cc01df27 Add animation when docking top task with long press
Change-Id: I7af4149f2c517e8d6ace22f1e49e319d2461503e
2016-01-25 15:54:38 -08:00
Jorim Jaggi
df012d5102 Divider tuning
- Make it harder to dismiss
- When dragging from the bottom, don't allow dismissing at the top

Change-Id: Ifd2de38abece7b996a813af41dcf777fa5cd1c18
2016-01-21 16:24:58 -08:00
Jorim Jaggi
00f33ec9a1 Merge changes I0b8b2ee3,Ib71f8f77,Ica481295,Iaf871389,Iab9a445d
* changes:
  Restrict drag in gesture to recents button
  Fix flickering while dismissing docked stack
  More optimization while dragging docked divider
  Don't relayout when windows move during resize
  Optimize window relayouts when dragging divider
2016-01-15 22:40:49 +00:00
Wale Ogunwale
2fd3f122bf Merge "Allow AMS.moveTasksToFullscreenStack moving tasks onTop" 2016-01-15 22:37:12 +00:00
Jorim Jaggi
2e95a488e0 More optimization while dragging docked divider
- Make sure mPendingBackdropFrame gets also set when if the window
triggers a relayout on it's own, so it doesn't call into window manager
all the time.
- Set the insets of the docked divider to empty so we don't trigger a
layout when we are just moving it - it doesn't need it in any case.
- Send a window move message to the divider when it moved
- Update attach info in all move cases, update light center

The whole resize operation now only takes around 4ms per frame, and
leaves a lot more resources for the apps to do configuration changes.

Bug: 25015474
Change-Id: Ica48129570a0fc858a89c21f46abf3442efb0224
2016-01-15 14:31:50 -08:00
Wale Ogunwale
9101d26643 Allow AMS.moveTasksToFullscreenStack moving tasks onTop
Bug: 26573473
Change-Id: I4517ac2b3e803637971c329be2511ba66412d815
2016-01-15 10:22:38 -08:00
Winson
3e87474145 Improving drag and drop animations.
- Expanding drop targets to indicate the size of the to-be docked window
- Fixing animation when dropping task
- Fixing drag view z order
- Fixes issue where the dock divider position in WM is not exact
- Requiring user to move the slop distance before accepting drops

Change-Id: I2f6eab504db7126c19e0c680629e89a39e7512e3
2016-01-14 15:23:20 -08:00
Jorim Jaggi
737af724eb Snap docked stack after screen rotation
- Move DividerSnapAlgorithm to com.android.internal, also move
some utility stuff into DividerUtils which is used from both
SystemUI and window manager
- When the screen rotation changes, rotate the stacks like before
but then also snap the docked stack to a valid snap position.

Change-Id: I9e1aa13f42f398a25c9016e6f20395ee212e405b
2016-01-11 23:05:56 +00:00
Winson Chung
3dc52ed179 Revert "Snap docked stack after screen rotation"
This reverts commit e65d6bb207.

Change-Id: I245aa9be3ea98ff742e02b02f6f1d344bc2e8182
2016-01-11 17:53:17 +00:00
Jorim Jaggi
e65d6bb207 Snap docked stack after screen rotation
- Move DividerSnapAlgorithm to com.android.internal, also move
some utility stuff into DividerUtils which is used from both
SystemUI and window manager
- When the screen rotation changes, rotate the stacks like before
but then also snap the docked stack to a valid snap position.

Change-Id: Ifb0c65dfbdfca2343a76b12de982c0701fe0c3ab
2016-01-11 16:58:54 +00:00
Jorim Jaggi
d8fb3ac4b8 Start moving divider only after passing touch slop
So there is a clear distinction between grabbing it and
start moving it.

Change-Id: I51b50220bd35d8040d0c11f131918d9741cd8403
2016-01-06 13:53:28 +00:00
Jorim Jaggi
514b2cf0f8 Add nice animation when touching the docked divider handle
To make the interaction more dynamic.

Change-Id: I8fc3e6240c229753dc26122ae0994d59c4f6486e
2016-01-05 13:50:56 +01:00
Jorim Jaggi
e435e982fa Implement parallax when dismissing docked/fullscreen stack
When moving the docked or the fullscreen task close to the side,
we add a nice parallax to indicate that this task will be dismissed.

Change-Id: Ide195876942c1614c186fd5f3ff3e86f6fdfec61
2016-01-05 13:50:45 +01:00
Jorim Jaggi
5098159ae3 Dim stack while dismissing
When dismissing the docked or fullscreen stack, a dim layer is
introduced for a nicer visual effect.

Change-Id: I9f12e331e978208aa9fd9e9883b3c8a36d4da3a0
2016-01-05 13:50:32 +01:00
Jorim Jaggi
81fe2d1f0a Refine snap position behavior
- Use the stable insets to communicate the system insets to the
docked divider view.
- When calculating the sizes for the snap positions, exclude the
system insets.
- Add 3 snap position modes: 16:9 in one window, 1:1, 16:9 in the
other (phone portrait). Only 1:1 (phone landscape). Fixed relation,
1:1, 1 - fixed relation (tablet portrait/landscape).

Change-Id: If2166c5fb99f12535eeab5de18e9f5aaf433d77c
2016-01-05 13:50:20 +01:00
Jorim Jaggi
a6c934e2a3 Use different asset when docked stack exists
- Add the ability to add a listener when the existence of the
docked stack changes.
- Register SystemUI as such a listener and switch the recents
button asset when docked stack exists.

Change-Id: I05350878c5adc7ad9f0399f0c42d8d1615d44d02
2016-01-05 13:49:41 +01:00
Jorim Jaggi
dc249c4ae7 Change behavior when resizing docked stack
- Add an API resizeDockedStack to resize the docked stack
and supply temporary task bounds, which can be different from
the stack bounds.
- Use that API in SystemUI to only switch task bounds when
crossing thresholds, so we have less flickering and more
predictable resizing.

Bug: 25015474
Bug: 26311778
Change-Id: Id5c9277dd908ccc28f95dab023efc914757a50d0
2016-01-05 13:44:24 +01:00
Jorim Jaggi
79b39f0873 Update visual of docked divider to spec
Change-Id: I85daf672cedb8009509886fc6ae2d700d39274cf
2015-12-22 13:01:40 +00:00
Jun Mukai
d4eaef7f4c Make public pointer icon API with custom icons.
BUG: 25778347, 23804184
Change-Id: If138b97c750c912e9848412c27b65004899961eb
2015-12-14 19:45:10 -08:00
Filip Gruszczynski
b3da834a91 Move tasks to fullscreen stack when dismissing docked stack.
When we dismissing a docked stack we don't want to get rid of it,
but instead make it available in the full screen stack. We need to
make sure that it goes into the bottom of the stack and prevent it
from taking focus or running any animation, so the operation is
invisible to the user.

Bug: 25840497
Bug: 25823213
Change-Id: Ibd08d7b723a2847d98c435f79541d5eb43587064
2015-12-11 08:03:13 -08:00
Jorim Jaggi
870ab5a15c Drag up gesture improvements
- Use current velocity of finger for the animation, makes it feel
smoother.
- When flinging downwards, maximize the docked stack again to cancel
the gesture.

Change-Id: I284c851e2e418d21e890b9dfe983cfe63300fe10
2015-12-03 16:11:27 -08:00
Filip Gruszczynski
64cdc1458b Remove dock divider surface when it's not visible.
We achieve the removal by notifying System UI about the visibility of
the dock divider. This way System UI can change visibility of the root
view, which in turn will cause the WMS to destroy or create the surface
as necessary.

Bug: 25844096
Bug: 25683717

Change-Id: Idbc33368db697a059af49106dfadb80c3d7d06c1
2015-11-30 15:21:48 -08:00
Jorim Jaggi
2fbe033f9d Allow stacks to be placed outside of display
When dismissing the docked stack, we animate the divider to position
-12dp, so the full-screen stack is exactly full-screen when the dismiss
animation is done. Previously, this was prevented by window manager.
Allow it to fix the animation.

Change-Id: Iee4505023dc3f6907d56851965b156235f9f97f2
2015-11-24 17:37:03 -08:00
Jorim Jaggi
9ea2f7ba31 Add ability to supply initial bounds when docking task
Add an optional parameter in moveTaskToDockedStack to supply an
initial rect to be used when creating the dockeds tack. Pass in
the adjusted rect when dragging up from the navbar so it doesn't
flicker anymore.

Change-Id: Ieb3c8c73b9e2a769a2ec6270bd76a713201a2aed
2015-11-24 15:08:49 -08:00