From 3d010dbc6d729357b425c55070de066da2be1e13 Mon Sep 17 00:00:00 2001 From: Shan Huang Date: Wed, 23 Feb 2022 21:14:23 +0000 Subject: [PATCH] Fix a race condition that causes BackAnimation to be null. The race happens between attaching NavigationBarView and initializing NavigationEdgeBackPlugin. When NavBarView is attached after the plugin is initialized, the plugin doesn't receive the mBackAnimation instance passed from NavBarView. This caused the mBackAnimation to be null and broke back gesture on tablets. Bug: 220709601 Test: m -j. Test gesture back on tablets. Change-Id: I8cf70a24ba5340d27bbd48a8e809d8f922992689 --- .../navigationbar/gestural/EdgeBackGestureHandler.java | 3 +++ .../navigationbar/gestural/NavigationBarEdgePanel.java | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java index 9ea27634df6ae..371e4f454a39f 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java @@ -936,6 +936,9 @@ public class EdgeBackGestureHandler extends CurrentUserTracker public void setBackAnimation(BackAnimation backAnimation) { mBackAnimation = backAnimation; + if (mEdgeBackPlugin != null && mEdgeBackPlugin instanceof NavigationBarEdgePanel) { + ((NavigationBarEdgePanel) mEdgeBackPlugin).setBackAnimation(backAnimation); + } } /** diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java index a6bad15e08654..a6919e826d4f6 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java @@ -280,7 +280,7 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl } }; private BackCallback mBackCallback; - private final BackAnimation mBackAnimation; + private BackAnimation mBackAnimation; public NavigationBarEdgePanel(Context context, BackAnimation backAnimation) { @@ -385,6 +385,10 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl mShowProtection = !isPrimaryDisplay; } + public void setBackAnimation(BackAnimation backAnimation) { + mBackAnimation = backAnimation; + } + @Override public void onDestroy() { cancelFailsafe();