1818
1919import io .material .catalog .R ;
2020
21+ import android .os .Build .VERSION_CODES ;
2122import android .os .Bundle ;
2223import androidx .appcompat .app .AppCompatActivity ;
2324import androidx .appcompat .widget .Toolbar ;
2829import android .view .View ;
2930import android .view .ViewGroup ;
3031import android .view .accessibility .AccessibilityEvent ;
32+ import android .window .BackEvent ;
3133import androidx .activity .OnBackPressedCallback ;
3234import androidx .annotation .LayoutRes ;
3335import androidx .annotation .NonNull ;
3436import androidx .annotation .Nullable ;
37+ import androidx .annotation .RequiresApi ;
3538import androidx .coordinatorlayout .widget .CoordinatorLayout ;
3639import com .google .android .material .bottomappbar .BottomAppBar ;
3740import com .google .android .material .bottomappbar .BottomAppBarTopEdgeTreatment ;
@@ -56,9 +59,27 @@ public class BottomAppBarMainDemoFragment extends DemoFragment {
5659
5760 private final OnBackPressedCallback bottomDrawerOnBackPressedCallback =
5861 new OnBackPressedCallback (/* enabled= */ false ) {
62+ @ RequiresApi (VERSION_CODES .UPSIDE_DOWN_CAKE )
63+ @ Override
64+ public void handleOnBackStarted (@ NonNull BackEvent backEvent ) {
65+ bottomDrawerBehavior .startBackProgress (backEvent );
66+ }
67+
68+ @ RequiresApi (VERSION_CODES .UPSIDE_DOWN_CAKE )
69+ @ Override
70+ public void handleOnBackProgressed (@ NonNull BackEvent backEvent ) {
71+ bottomDrawerBehavior .updateBackProgress (backEvent );
72+ }
73+
5974 @ Override
6075 public void handleOnBackPressed () {
61- bottomDrawerBehavior .setState (BottomSheetBehavior .STATE_HIDDEN );
76+ bottomDrawerBehavior .handleBackInvoked ();
77+ }
78+
79+ @ RequiresApi (VERSION_CODES .UPSIDE_DOWN_CAKE )
80+ @ Override
81+ public void handleOnBackCancelled () {
82+ bottomDrawerBehavior .cancelBackProgress ();
6283 }
6384 };
6485
@@ -196,9 +217,22 @@ protected void setUpBottomDrawer(View view) {
196217 new BottomSheetCallback () {
197218 @ Override
198219 public void onStateChanged (@ NonNull View bottomSheet , int newState ) {
199- bottomDrawerOnBackPressedCallback .setEnabled (
200- newState == BottomSheetBehavior .STATE_EXPANDED
201- || newState == BottomSheetBehavior .STATE_HALF_EXPANDED );
220+ switch (newState ) {
221+ case BottomSheetBehavior .STATE_EXPANDED :
222+ case BottomSheetBehavior .STATE_HALF_EXPANDED :
223+ bottomDrawerOnBackPressedCallback .setEnabled (true );
224+ break ;
225+ case BottomSheetBehavior .STATE_COLLAPSED :
226+ case BottomSheetBehavior .STATE_HIDDEN :
227+ bottomDrawerOnBackPressedCallback .setEnabled (false );
228+ break ;
229+ case BottomSheetBehavior .STATE_DRAGGING :
230+ case BottomSheetBehavior .STATE_SETTLING :
231+ default :
232+ // Do nothing, only change callback enabled for "stable" states.
233+ break ;
234+ }
235+
202236 if (newState == BottomSheetBehavior .STATE_HIDDEN ) {
203237 barNavView .sendAccessibilityEvent (AccessibilityEvent .TYPE_VIEW_FOCUSED );
204238 }
0 commit comments