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
This commit is contained in:
Shan Huang
2022-02-23 21:14:23 +00:00
parent b541557f9e
commit 3d010dbc6d
2 changed files with 8 additions and 1 deletions

View File

@@ -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);
}
}
/**

View File

@@ -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();