Skip to content

Commit d8c5c2c

Browse files
dsn5ftleticiarossi
authored andcommitted
[Predictive Back] Fix custom nav drawer Catalog demo pre-T crash due to OnBackAnimationCallback class not found
PiperOrigin-RevId: 527348628
1 parent f335a50 commit d8c5c2c

File tree

1 file changed

+53
-43
lines changed

1 file changed

+53
-43
lines changed

catalog/java/io/material/catalog/navigationdrawer/CustomNavigationDrawerDemoActivity.java

Lines changed: 53 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -46,47 +46,6 @@
4646
@SuppressWarnings("RestrictTo")
4747
public class CustomNavigationDrawerDemoActivity extends DemoActivity {
4848

49-
@RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE)
50-
private final OnBackAnimationCallback drawerOnBackAnimationCallback =
51-
new OnBackAnimationCallback() {
52-
@Override
53-
public void onBackStarted(@NonNull BackEvent backEvent) {
54-
sideContainerBackHelper.startBackProgress(backEvent);
55-
}
56-
57-
@Override
58-
public void onBackProgressed(@NonNull BackEvent backEvent) {
59-
DrawerLayout.LayoutParams drawerLayoutParams =
60-
(LayoutParams) currentDrawerView.getLayoutParams();
61-
sideContainerBackHelper.updateBackProgress(backEvent, drawerLayoutParams.gravity);
62-
}
63-
64-
@Override
65-
public void onBackInvoked() {
66-
BackEvent backEvent = sideContainerBackHelper.onHandleBackInvoked();
67-
if (backEvent == null) {
68-
drawerLayout.closeDrawers();
69-
return;
70-
}
71-
72-
DrawerLayout.LayoutParams drawerLayoutParams =
73-
(LayoutParams) currentDrawerView.getLayoutParams();
74-
int gravity = drawerLayoutParams.gravity;
75-
AnimatorListener scrimCloseAnimatorListener =
76-
DrawerLayoutUtils.getScrimCloseAnimatorListener(drawerLayout, currentDrawerView);
77-
AnimatorUpdateListener scrimCloseAnimatorUpdateListener =
78-
DrawerLayoutUtils.getScrimCloseAnimatorUpdateListener(drawerLayout);
79-
80-
sideContainerBackHelper.finishBackProgress(
81-
backEvent, gravity, scrimCloseAnimatorListener, scrimCloseAnimatorUpdateListener);
82-
}
83-
84-
@Override
85-
public void onBackCancelled() {
86-
sideContainerBackHelper.cancelBackProgress();
87-
}
88-
};
89-
9049
private final OnBackPressedCallback drawerOnBackPressedCallback =
9150
new OnBackPressedCallback(/* enabled= */ true) {
9251
@Override
@@ -95,6 +54,8 @@ public void handleOnBackPressed() {
9554
}
9655
};
9756

57+
@Nullable private OnBackAnimationCallback drawerOnBackAnimationCallback;
58+
9859
private DrawerLayout drawerLayout;
9960
private View currentDrawerView;
10061
private MaterialSideContainerBackHelper sideContainerBackHelper;
@@ -128,6 +89,9 @@ public void onDrawerOpened(@NonNull View drawerView) {
12889
sideContainerBackHelper = new MaterialSideContainerBackHelper(drawerView);
12990

13091
if (BuildCompat.isAtLeastU()) {
92+
if (drawerOnBackAnimationCallback == null) {
93+
drawerOnBackAnimationCallback = createOnBackAnimationCallback();
94+
}
13195
drawerLayout.post(
13296
() ->
13397
getOnBackInvokedDispatcher()
@@ -147,8 +111,11 @@ public void onDrawerClosed(@NonNull View drawerView) {
147111
sideContainerBackHelper = null;
148112

149113
if (BuildCompat.isAtLeastU()) {
150-
getOnBackInvokedDispatcher()
151-
.unregisterOnBackInvokedCallback(drawerOnBackAnimationCallback);
114+
if (drawerOnBackAnimationCallback != null) {
115+
getOnBackInvokedDispatcher()
116+
.unregisterOnBackInvokedCallback(drawerOnBackAnimationCallback);
117+
drawerOnBackAnimationCallback = null;
118+
}
152119
} else {
153120
drawerOnBackPressedCallback.remove();
154121
}
@@ -166,4 +133,47 @@ public void onDrawerClosed(@NonNull View drawerView) {
166133
protected boolean shouldShowDefaultDemoActionBar() {
167134
return false;
168135
}
136+
137+
@RequiresApi(VERSION_CODES.UPSIDE_DOWN_CAKE)
138+
private OnBackAnimationCallback createOnBackAnimationCallback() {
139+
return new OnBackAnimationCallback() {
140+
141+
@Override
142+
public void onBackStarted(@NonNull BackEvent backEvent) {
143+
sideContainerBackHelper.startBackProgress(backEvent);
144+
}
145+
146+
@Override
147+
public void onBackProgressed(@NonNull BackEvent backEvent) {
148+
DrawerLayout.LayoutParams drawerLayoutParams =
149+
(LayoutParams) currentDrawerView.getLayoutParams();
150+
sideContainerBackHelper.updateBackProgress(backEvent, drawerLayoutParams.gravity);
151+
}
152+
153+
@Override
154+
public void onBackInvoked() {
155+
BackEvent backEvent = sideContainerBackHelper.onHandleBackInvoked();
156+
if (backEvent == null) {
157+
drawerLayout.closeDrawers();
158+
return;
159+
}
160+
161+
DrawerLayout.LayoutParams drawerLayoutParams =
162+
(LayoutParams) currentDrawerView.getLayoutParams();
163+
int gravity = drawerLayoutParams.gravity;
164+
AnimatorListener scrimCloseAnimatorListener =
165+
DrawerLayoutUtils.getScrimCloseAnimatorListener(drawerLayout, currentDrawerView);
166+
AnimatorUpdateListener scrimCloseAnimatorUpdateListener =
167+
DrawerLayoutUtils.getScrimCloseAnimatorUpdateListener(drawerLayout);
168+
169+
sideContainerBackHelper.finishBackProgress(
170+
backEvent, gravity, scrimCloseAnimatorListener, scrimCloseAnimatorUpdateListener);
171+
}
172+
173+
@Override
174+
public void onBackCancelled() {
175+
sideContainerBackHelper.cancelBackProgress();
176+
}
177+
};
178+
}
169179
}

0 commit comments

Comments
 (0)