- BaseRecentsViewStateController is only inherited by RecentsViewStateController, remove the base class to simplify code
- Also converted RecentsViewStateController to Kotlin and remove a bunch of warnings
Fix: 387267938
Test: presubmit and manual
Flag: EXEMPT refactor
Change-Id: I18e9c2b186a64a0af39230cb41e3b3f4949107d5
desktopCarouselDetachProgress:
- Controls whether desktop and fullscreen carousel is attached (RecentsView..DESKTOP_CAROUSEL_DETACH_PROGRESS)
- When fully detached (progress==1), hide the carousel (RecentsView.applyAttachAlpha)
- As the detach progress increase, we animate the other carousel away by using `getMaxHorizontalOffsetSize`, with additional maxOverscroll to make sure the other carousel won't be seen even if user overscroll RecentsView (RecentsView.updatePageOffsets)
min/max scroll changes
- When desktop and fullscreen carousel detaches, disallow scrolling to the detached carousel. This avoids quickswitching or scroll to the other carousel (RecentsView.getFirstViewIndex and RecentsView.getLastViewIndex)
State machine changes:
- On Overview states, desktop and fullscreen carousel is attached. Otherwise, they're detached, including in quick switch and home. (BaseState, RecentsState, OverviewState, BackgroundAppState)
- StateController set/animate desktopCarouselDetachProgress between the above states (BaseRecentsViewStateController, FallbackRecentsStateController)
- On swipe up gesture release and going to Overview, animate attaching back the 2 carousels (RecentsView.onPrepareGestureEndAnimation)
Bug: 353948100
Test: quick switch; swipe from home/app; scroll in Overview; with normal/3p launcher
Flag: com.android.launcher3.enable_large_desktop_windowing_tile
Change-Id: Ic4217efb07db079825a3210afd306d9ef627c873
- Changes to BaseRecentsViewStateController/FallbackRecentsStateController to avoid calling reset when canceling transitioniong to a RecentsView visible state (e.g. canceling Overivew -> OverivewModal)
- Changes to LauncherRecentsView/FallbackRecentsView to have a consistent check in deciding if we should reset on transition finished
- Note: With 3P Launcher, there is an existing issue that isn't fix by this change: While in Overview or Split select, tap empty space to dismiss Recentsview, then immediately swipe up, Overview tiles will be blank. This is because the swipe up isn't a "brand new" gesture and doesn't call onGestureAnimationStart, so it does not reload thumbnails after the reset in animation cancels.
Fix: 359872614
Test: Reproduction steps in b/246232494, b/243471493, b/242715097 and b/359872614
Test: Trasitionoing between Normal,Hint,Overview,OverivewModal,QuickSwitch etc., and which Home/Back gesture in between to cancel the transitions; repeat the test with 3P Launcher
Flag: EXEMPT BUG_FIX
Change-Id: I86dd0c070196c9a7ce3269599811b7537dd4da37
- Reuse existing TaskSwitcherContainer for Overview metric logging
- Log current orientation state for Overview when interacting with
gestures or via three button nav
- Log current orientation state on each phone rotation
Bug: 332870519
Test: Manual
Flag: NA
Change-Id: Ia10cf1acb809432175daab55151998f0d77362f9
* We weren't specifying an animation duration for the
dismiss placeholder animation, and it wasn't inheriting
from the animatorSet since that didn't have any duration
set on it.
* Now we explicitly set a duration (usually matching that of
the current launcher state config) to the timings line up
well
Test: Repro steps don't show bug. Also tested on large screen dismissing
contextual split from overview and home, seems fine
Fixes: 314860754
Change-Id: I701e4f88c1ddd92561da4fb76715a859f587c91e
* Now we log the original source of the first selected app
as soon as the user selects it (previously we only did when user
selected second app)
* We log the item info for the second app to determine second
surface.
* Added new metrics to log after user has started a split session
and ended a split session
* We log different cancellation reasons (cancel button,
home gesture, general other app interruptions, etc).
* One KI/Bug: When the second app is selected via taskbar in
overview, the container will say hotseat because we are using
Launcher's logger and not Taskbar's. Taskbar's logger manually
overwrites the container in TaskbarActivityContext, we may be
able to make something hacky that can allow us to overwrite, but
that'll have to be a separate change
Bug: 322551862
Test: Logged metrics manually with event and itemInfo
Change-Id: I177623fd00ce62acf2d4ee983b58561d8c946d59
- Currently in App -> Overview animation, current task is undergo ACCELERATE_DECELERATE interpolator twice, one via interpolating GRID_PROGRESS in AbsSwipeUpHandler, one via TaskView.getGridTrans
- I got rid of TaskView.getGridTrans's interpolator, and completely rely on AbsSwipeUpHandler or BaseRecentsViewStateController to apply the interpolator
- Refactored BaseRecentsViewStateController to consistenly apply ACCELERATE_DECELERATE for QUICK_SWITCH_FROM_HOME -> Overview animation, and otherwise it should use INSTNAT/FINAL_FRAME
Bug: 318352235
Flag: None
Test: Default/3P Launcher X home/qs_from_home/app -> Overview and Overview to home
Change-Id: I21ca903897f8c374e136c0ac27cec76dd3f5c1f3
Bug: 276361926
Test: Initate split, dismiss whenever home is pressed,
doesn't dismiss when all apps dragged down
Flag: ENABLE_SPLIT_FROM_WORKSPACE_TO_WORKSPACE
Change-Id: Idc95123e27963c3913d04c6eb27f0e4c9b1eb401
* KI: After entering overview, swiping to exit doesn't
clear split state. That's because LauncherRecentsView#reset()
gets called both when entering and exiting overview.
We'd need to check or pass through what state we're moving to
to determine whether or not actually to reset state in
SplitSelectStateController, or handle that at the gesture level
Flag: ENABLE_SPLIT_FROM_WORKSPACE_TO_WORKSPACE
Test: Manual, split paths work w/ and w/o flag enabled
Bug: 276361926
Change-Id: I39391ac5f92b774d8198930829caabe84d950598
This CL fixes an issue where canceling any Launcher animation by entering Quick Switch would cause Overview to appear with all thumbnail tiles blank.
The issue occurred because we recently added a reset() to Overview that triggered on all state transition animation cancels. This fixed some issues, but introduced this bug.
Fixed by tailoring the reset() to only fire on animation cancels within BaseRecentsView and FallbackRecentsView.
Fixes: 246232494
Fixes: 243471493
Test: Manual
Change-Id: I175a22d52597a63e164a6f3b9353c62b199b0712
This commit fixes a bug where the user could cancel animations when transitioning between Launcher states, potentially resulting in a state where Overview elements (task thumbnails etc.) were wrongly hidden or invisible.
The bug occurred because functions such as createInitialSplitSelectAnimation() and createAtomicAnimation() did not carry out any cleanup upon animation failure. This resulted in RecentsView potentially being in a polluted state for the next launch.
Bug was fixed by adding cleanup routines to two onAnimationEnd listeners.
Fixes: 242715097
Test: Manual
Change-Id: I05415ecf515e247aa535e3ca8371e540c3189b01
This also avoids showing splash in split select state
Fix: 242284413
Test: follow up after b/238405972
Change-Id: I2e83fa3d030e8a74edb4152c472dbf02ac5a80b1
This will help SysUI test team (who uses TAPL) to set up Gradle build for their tests.
Bug: 202567877, 234414088
Test: presubmit
Change-Id: I3d923ea4b54d1a4c3d2b345be09692727d30433e
The animation from OverviewSplitSelect to Home is now updated to the latest spec. See bug for details.
- New timings
- FloatingTaskView now translates out, instead of fading
- FloatingTaskView and SplitInstructionsView now disappear concurrently with the rest of Overview, instead of afterward
Fixes: 236761067
Test: Manual on tablet and phone
Change-Id: Iaa1c804a60859232f331950098b67968cc187e82
* Consolidate setState() and setStateWithAnimation()
to be handled in the same manner
* If no animation, we run the created
PendingAnimation right away
Fixes: 209935590
Test: Tested w/ and w/o animation
Change-Id: I1d6fdba21761b6721e6bd52234016178547cd437
- Don't reset mFocusedTaskViewId when focused task become split, so it's reset properly when it's added back to RecentsView
- Moved applySplitScrollOffset to RecentsViewStateController to be called after mSplitHiddenTaskView is added back to RecentsView
- Update scroll after going back from split
- Don't reset mSplitHiddenTaskView's translation as it'll clear the grid translations
Test: manual
Bug: 181707736
Change-Id: I4bd204fc537ee520216f875b3eddf4dc94f7bfd8
- There is an edge case that when ClearAllButton is visible, no split translation is applied, the offset adjustment needs to be calculated differently in that case
- Also, apply the scrollOffset to the TaskViews / ClearAllButton instead of updating min/max scroll
Bug: 200537659
Test: Split right in grid, split left with clear all button, split left without clear all button
Change-Id: I869c448bbec6aec8fa070e47193a692be6f75e84
- Replace fullscreen translation/scale with nonGrid, which applies whenever tasks are not in grid, so that intermediate carousle's tasks have the same size as focused task
- Avoid showing task icon in intermediate carousel as its scaled up. During swipe up, all task icons only appear after gesture is finished consistenly, regardles if it's running task.
- When swipe up from home, make tasks join the grid immediately
- Make pageOffset calculation consider task scale
- Tuned resistance and scale when RecentsView is swiped up
Bug: 187417137
Test: manaul
Change-Id: Ide55a32241a3551a58e12c399c22420562848c70
Test: Visually checking all of these. As appropriate, repeat in 0, 2, 3
button modes, landscape/portrait/fake landscape, and 3P launcher
- Quick switch from home
- Home to overview
- Overview to home (swipe up)
- Overview to home (tap outside)
- Overview to home (back invocation)
- Quick switch from app
- Swipe up and hold from app
- Dismiss an app
- Empty recents
- Split select state to home
- Modal state to home
Fixes: 185411781
Change-Id: If00a22fee35c832a259bfc62808efbac5990ce2e
- Call reapplyState() on the next frame after settling on home.
- Post some calls from RecentsView#reset() to the next frame.
- Remove onSwipeUpToRecentsComplete() which only called reapplyState()
uncessarily.
- Also animate TASK_SECONDARY_TRANSLATION back to 0 to ensure state
machine is in sync with long swipe resistance properties.
Test: profile swipe to home, significantly reduced last frame time.
Bug: 183139317
Change-Id: I37b1829f6f1d5a718e99c131935b87b5200d567f
Always shift thumbnails when in phone mode.
Bug: 181705607
Test: Placeholder view didn't shift when no thumbnails underneath
it in portrait.
Change-Id: Ib2f066fdf17134b3f5bbd9b465b87868e9ce7583
- Add vertical offset calculations to RecentsView (in addition to
the existing horizontal offset which has been renamed accordingly).
- LauncherState#getOverviewScaleAndOffset() now supports both
horizontal and vertical offsets and is specified such that overview
appears and disappears from the bottom of the screen rather than the
side.
- Quick switch still uses horizontal offset to come from the side.
- No longer need to scroll to page 0 when translating offscreen.
- Update interpolators for overview to home transition.
- Align 2 button mode transition with 0 button mode.
Test: Visually checking all of these. As appropriate, repeat in 0, 2, 3
button modes, landscape/portrait/fake landscape, and 3P launcher
- Quick switch from home
- Home to overview
- Overview to home (swipe up)
- Overview to home (tap outside)
- Overview to home (back invocation)
- Quick switch from app
- Swipe up and hold from app
- Dismiss an app
- Empty recents
- Split select state to home
- Modal state to home
Bug: 185411781
Change-Id: Ic59b877ccc0050afd7cd478778e9eeb60e2e47f7
Long ways to go to final UI - TODO(b/186800707)
Add comments to grid layout code,
no functional changes at all.
Bug: 181705607
Test: Enter split screen from overview task menu
in grid and carousel. Able to select all items
and enter split.
Change-Id: Ib62f1b286acf0781ec47862fa31b670e6ff1892a
> Merging overview and all-apps scrims into a single View
> Decoupling TaskMenuView from taskView
Bug: 184676497
Test: Manual
Change-Id: I49f7249eaa2a800054385ab8e73a441d6a1b5e16
- Remove PLAY_ATOMIC_OVERVIEW_SCALE and PLAY_ATOMIC_OVERVIEW_PEEK
- Remove complicated parallel atomic animation support from
AbstractStateChangeTouchController and subclasses
- Remove some code related to going between Overview <-> AllApps
Test: Swipe between states in all 3 navigation modes
Bug: 175137718
Change-Id: Ice314d46946c3a983cdc6ccf1a67effb5da9156e
- Replace mShowAsGrid with state specific mOverviewGridEnabled and mCurrentGestureEndTarget
- Avoid showing invisible home task in grid
- Fix quick switch out of orientation in fallback recents
- Add a HOME state to switch to when starting home, to avoid showing grid overview briefly in quick switch
- Separate clear all button and overview actions handling
- Always maintain first task's fullscreen translation at 0 to avoid jumping when mOverviewFullscreenEnabled changes
- Moved fullscreenTranslation calculation to RecentsView
- Added GestureEndTarget -> BaseState translation to allow querying displayOverviewAsGrid for a displayOverviewTasksAsGrid
Bug: 174464863
Test: Launch overveiw from home, launch overveiw from app, launch into app, test for both small and large screens
Change-Id: Iee06d94d3067ea45cadd2051717223ddc0e6e70c
TODO:
* Extract out common elements in TaskShortcutFactory.MultiWindowFactory
for commonalities between new and old way of
invoking split screen
* Integrate with WM APIs (b/182002789)
* Write tests for SplitSelectStateController
Bug: 181704764
Change-Id: Ice35adb4ea82897f5e2433dc9b93a549f3d511b5
- Introduced gridProgress to RecentsView/TaskView ofr animating into grid
- Introduced gridProgress dependant translation and scale properties in TaskView
- Animate running task into grid with TaskViewSimulator
- Remove overview actions (for now) but keep clear all button in large screens
- Adjust ClearAllButton translation to acoomodate for grid
- Use screen width +-50% to calculate task visibility
- Use the position where TaskView is on screenEnd as pageScroll
- TODO: Handle separate recents activity
Doc: go/foldables-launcher-overview
Video: http://dr/file/d/107Aydii1LoFCwP63nWG3Twr2PBDE5ZgD/view?resourcekey=0-aUjdnx8ezimS9tmAgao9ag
Test: Test Launchering overview and launching overview from apps with folloiwng combination:
- large / small screen sizes
- portrait / landscape
- thumbnails from different screen sizes / orientations
Bug: 174464863
Fixes: 181509346
Change-Id: I4b691cde774f2e37532b68ba83c6eed399f2332e
Animating this new property allows us to adjust the scrim without
competing with other state animations that could be setting the
scrim progress. Also reset scrimMultipler = 1 for state transitions.
Test: Swipe from home to overview, then during that transition swipe
from overview to home; when the former transition ends while the
second is still in progress, ensure scrim value doesn't jump
Bug: 144170434
Change-Id: I44b57ced1c6902e558fe1818bcbf11ceb4ff2f6f
Now recents view follows your finger all the way to the top of the
screen. Specifically, your finger tracks the bottom of the window
until resistance starts (when RecentsView is at 75% scale), then
we add translation to compensate for the slower rate of scaling
down, such that your finger slips to the top of the window by the
time it reaches the top of the screen.
Also reset this translation back to 0 in the state handlers.
Bug: 149934536
Fixes: 158701272
Change-Id: Iaee58da758d422f0173c29d002f5c451ce0c1809
Instead of calculating an overall distance for tasks to translate
based on RecentsView width, calculate the distance for the tasks
to the left and right of the midpoint based on how far the first
adjacent tasks in those directions are from being offscreen.
Changes made to make "distance to offscreen" calculations possible:
- Update TaskView curve scale to reach final scale as soon as it is
completely offscreen. Before, it would reach its final scale just
shy of that point (calculations were off).
- As we update RecentsView scale, calculate how much the new scale
will push out tasks that are just offscreen.
- With both above, we can calculate the scale and position of a
TaskView such that it is just offscreen, and interpolate
between its current position and that position.
Tests:
- Task comes in immediately when quick switching from home, and
doesn't shift as you swipe directly upwards.
- When swiping far up from an app, tasks come in from all the way
offscreen, and cover distance appropriately (e.g. if you're
scrolled a bit to the right when you pause, the left adjacent
app will move faster to cover the farther distance).
- Task modalness: entering Select mode now animates adjacent tasks
at the same rate as the scaling up, because they move only the
distance needed to get offscreen (before they moved way too far
and thus seemed to be much faster than the rest of the animation).
Bug: 149934536
Change-Id: Ie3fffe0e5c304cb16e7637f058f5ce72cee40aeb
Merged-In: Ie3fffe0e5c304cb16e7637f058f5ce72cee40aeb