Skip to content
Commit 0f7ec96b authored by Winson Chung's avatar Winson Chung
Browse files

Cancel any recents animation whenever a display's stack order changes

- The recents animation holds a reference to the stack that the recents
  stack was previously behind (before the animation started) and should be
  restored behind after the animation ends. Due to the ordering of events,
  it is possible for a call to cancelRecentsAnimation() to come in after
  we have started the transition to home

  ie.
  1) in app A
  2) touch down on home button -> start recents animation, home stack
     saves A stack as the one to restore behind if animation doesn't
     finish
  3) touch up to trigger button -> PWM to start home activity and
     simultaneously proxies the motion even to launcher which happens to
     call cancelRecentsAnimation (as a part of a catch all)
  4) PWM start activity -> move home stack to top
  5) cancelRecentsAnimation from launcher will try to restore the home
     stack behind A, when the rest of the system has already thought
     that the home stack was already moved to the front and focused

  Instead of depending on any particular ordering of events, we can just
  cancel the recents animation (without reordering) whenever the display's
  stacks change so as not to affect any upcoming changes. There is only
  one stack order changed listener (the recents animation, and there can
  only be one animation at a time; the previous animation is always
  canceled and unregisters the listener when cleaning up.
- Revert the old workaround for Beta 1 in PWM as it doesn't catch other
  cases
- Removed confusing code suggesting that we were using a non-default
  display (we are always only ever doing this animation for the default
  display since that's where we resolved the target stack).

Bug: 73188263
Test: Was able to repro by artificially calling cancelRecentsAnimation
      immediately after starting home (and also by swiping up, holding,
      then invoking the home via adb (to trigger start activity) and then
      releasing (to trigger cancelRecentsAnimation)). Ensure that case
      now works.
Test: atest FrameworksServicesTests:RecentsAnimationTest
Test: atest FrameworksServicesTests:ActivityStackTests

Change-Id: Iec1a29b5bb53737b4be3f1a3719c4e7c26313a11
parent 1b93e623
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment