From 87edbcd0bc53d5a6d676162266f38686d8a818a3 Mon Sep 17 00:00:00 2001 From: Peter_Liang Date: Sun, 10 Jul 2022 22:40:47 +0800 Subject: [PATCH] Fix the crash on animating the accessibility floating menu. Root cause: The menu had been animating and moving to the screen edge and hiding the menu in the meantime. Solution: Should cancel the animation before hiding the menu. Bug: 237217858 Test: atest AccessibilityFloatingMenuViewTest Change-Id: I75f75de3299210ed9d88b3be7dbaa81abb7db2e1 --- .../floatingmenu/AccessibilityFloatingMenuView.java | 1 + .../AccessibilityFloatingMenuViewTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java index d2703f5e73a2d..aff0b1fe287c0 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java @@ -353,6 +353,7 @@ public class AccessibilityFloatingMenuView extends FrameLayout } mIsShowing = false; + mDragAnimator.cancel(); mWindowManager.removeView(this); setOnApplyWindowInsetsListener(null); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java index 7e9f84c1ef8c5..bebd8712a7505 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java @@ -190,6 +190,16 @@ public class AccessibilityFloatingMenuViewTest extends SysuiTestCase { verify(mWindowManager, times(1)).removeView(eq(mMenuView)); } + @Test + public void hideMenuViewWhenStartingAnimation_animatorNotRunning() { + mMenuView.show(); + + mMenuView.mDragAnimator.start(); + mMenuView.hide(); + + assertThat(mMenuView.mDragAnimator.isRunning()).isFalse(); + } + @Test public void onTargetsChanged_singleTarget_expectedRadii() { final Position alignRightPosition = new Position(1.0f, 0.0f);