Check status of mEdgeBackGestureHandler to prevent NPE
Sometimes onAttachedToWindow() can be called before
mEdgeBackGestureHandler is created, which led to a NPE. This change adds
a null check to prevent the crash.
Fix: 303820749
Test: Set mEdgeBackGestureHandler to null and ensured no NPE occured in
onAttachedWindow()
Change-Id: I43ab8bcfc4d720bc537a7ca36e08068a6a27fbea
diff --git a/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java
index a28cf58..69c15a5 100644
--- a/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/TutorialFragment.java
@@ -84,6 +84,7 @@
private DeviceProfile mDeviceProfile;
private boolean mIsLargeScreen;
private boolean mIsFoldable;
+ private boolean mOnAttachedToWindowPendingCreate;
public static TutorialFragment newInstance(
TutorialType tutorialType, boolean gestureComplete, boolean fromTutorialMenu) {
@@ -174,6 +175,11 @@
.getDeviceProfile(getContext());
mIsLargeScreen = mDeviceProfile.isTablet;
mIsFoldable = mDeviceProfile.isTwoPanels;
+
+ if (mOnAttachedToWindowPendingCreate) {
+ mOnAttachedToWindowPendingCreate = false;
+ onAttachedToWindow();
+ }
}
public boolean isLargeScreen() {
@@ -373,6 +379,10 @@
@Override
void onAttachedToWindow() {
+ if (mEdgeBackGestureHandler == null) {
+ mOnAttachedToWindowPendingCreate = true;
+ return;
+ }
StatsLogManager statsLogManager = getStatsLogManager();
if (statsLogManager != null) {
logTutorialStepShown(statsLogManager);
@@ -382,6 +392,7 @@
@Override
void onDetachedFromWindow() {
+ mOnAttachedToWindowPendingCreate = false;
mEdgeBackGestureHandler.setViewGroupParent(null);
}