Skip to content

Commit 357cf2d

Browse files
committedSep 19, 2023
[Catalog][Predictive Back][Side Sheet] Update side sheet state handling to be more accurate in demos
Fixes inaccurate state label text and back callback enabled flag after rotation Resolves #3575 PiperOrigin-RevId: 566433974
1 parent f9102c7 commit 357cf2d

File tree

1 file changed

+44
-32
lines changed

1 file changed

+44
-32
lines changed
 

‎catalog/java/io/material/catalog/sidesheet/SideSheetMainDemoFragment.java

+44-32
Original file line numberDiff line numberDiff line change
@@ -186,31 +186,38 @@ private void setUpSheetGravityButtonToggleGroup(@NonNull View view) {
186186
});
187187
}
188188

189-
private void setupBackHandling(SideSheetBehavior<View> sideSheetBehavior) {
189+
private void setupBackHandling(View sideSheet, SideSheetBehavior<View> sideSheetBehavior) {
190190
OnBackPressedCallback nonModalOnBackPressedCallback =
191191
createNonModalOnBackPressedCallback(sideSheetBehavior);
192192
requireActivity().getOnBackPressedDispatcher().addCallback(this, nonModalOnBackPressedCallback);
193193
sideSheetBehavior.addCallback(
194194
new SideSheetCallback() {
195195
@Override
196196
public void onStateChanged(@NonNull View sheet, int newState) {
197-
switch (newState) {
198-
case SideSheetBehavior.STATE_EXPANDED:
199-
case SideSheetBehavior.STATE_SETTLING:
200-
nonModalOnBackPressedCallback.setEnabled(true);
201-
break;
202-
case SideSheetBehavior.STATE_HIDDEN:
203-
nonModalOnBackPressedCallback.setEnabled(false);
204-
break;
205-
case SideSheetBehavior.STATE_DRAGGING:
206-
default:
207-
break;
208-
}
197+
updateBackHandlingEnabled(nonModalOnBackPressedCallback, newState);
209198
}
210199

211200
@Override
212201
public void onSlide(@NonNull View sheet, float slideOffset) {}
213202
});
203+
sideSheet.post(
204+
() ->
205+
updateBackHandlingEnabled(nonModalOnBackPressedCallback, sideSheetBehavior.getState()));
206+
}
207+
208+
private void updateBackHandlingEnabled(OnBackPressedCallback onBackPressedCallback, int state) {
209+
switch (state) {
210+
case SideSheetBehavior.STATE_EXPANDED:
211+
case SideSheetBehavior.STATE_SETTLING:
212+
onBackPressedCallback.setEnabled(true);
213+
break;
214+
case SideSheetBehavior.STATE_HIDDEN:
215+
onBackPressedCallback.setEnabled(false);
216+
break;
217+
case SideSheetBehavior.STATE_DRAGGING:
218+
default:
219+
break;
220+
}
214221
}
215222

216223
private View setUpSideSheet(
@@ -227,7 +234,7 @@ private View setUpSideSheet(
227234
View standardSideSheetCloseIconButton = sideSheet.findViewById(closeIconButtonId);
228235
standardSideSheetCloseIconButton.setOnClickListener(v -> hideSideSheet(sideSheetBehavior));
229236

230-
setupBackHandling(sideSheetBehavior);
237+
setupBackHandling(sideSheet, sideSheetBehavior);
231238

232239
sideSheetViews.add(sideSheet);
233240

@@ -237,9 +244,10 @@ private View setUpSideSheet(
237244
private void setSideSheetCallback(
238245
View sideSheet, @IdRes int stateTextViewId, @IdRes int slideOffsetTextId) {
239246
SideSheetBehavior<View> sideSheetBehavior = SideSheetBehavior.from(sideSheet);
247+
TextView stateTextView = sideSheet.findViewById(stateTextViewId);
240248
sideSheetBehavior.addCallback(
241-
createSideSheetCallback(
242-
sideSheet.findViewById(stateTextViewId), sideSheet.findViewById(slideOffsetTextId)));
249+
createSideSheetCallback(stateTextView, sideSheet.findViewById(slideOffsetTextId)));
250+
sideSheet.post(() -> updateStateTextView(stateTextView, sideSheetBehavior.getState()));
243251
}
244252

245253
private void setUpDetachedModalSheet() {
@@ -373,22 +381,7 @@ private SideSheetCallback createSideSheetCallback(
373381
return new SideSheetCallback() {
374382
@Override
375383
public void onStateChanged(@NonNull View sheet, int newState) {
376-
stateTextView.setVisibility(View.VISIBLE);
377-
378-
switch (newState) {
379-
case SideSheetBehavior.STATE_DRAGGING:
380-
stateTextView.setText(R.string.cat_sidesheet_state_dragging);
381-
break;
382-
case SideSheetBehavior.STATE_EXPANDED:
383-
stateTextView.setText(R.string.cat_sidesheet_state_expanded);
384-
break;
385-
case SideSheetBehavior.STATE_SETTLING:
386-
stateTextView.setText(R.string.cat_sidesheet_state_settling);
387-
break;
388-
case SideSheetBehavior.STATE_HIDDEN:
389-
default:
390-
break;
391-
}
384+
updateStateTextView(stateTextView, newState);
392385
}
393386

394387
@Override
@@ -400,6 +393,25 @@ public void onSlide(@NonNull View sheet, float slideOffset) {
400393
};
401394
}
402395

396+
private void updateStateTextView(@NonNull TextView stateTextView, int state) {
397+
stateTextView.setVisibility(View.VISIBLE);
398+
399+
switch (state) {
400+
case SideSheetBehavior.STATE_DRAGGING:
401+
stateTextView.setText(R.string.cat_sidesheet_state_dragging);
402+
break;
403+
case SideSheetBehavior.STATE_EXPANDED:
404+
stateTextView.setText(R.string.cat_sidesheet_state_expanded);
405+
break;
406+
case SideSheetBehavior.STATE_SETTLING:
407+
stateTextView.setText(R.string.cat_sidesheet_state_settling);
408+
break;
409+
case SideSheetBehavior.STATE_HIDDEN:
410+
default:
411+
break;
412+
}
413+
}
414+
403415
private OnBackPressedCallback createNonModalOnBackPressedCallback(
404416
SideSheetBehavior<View> behavior) {
405417
return new OnBackPressedCallback(/* enabled= */ false) {

0 commit comments

Comments
 (0)
Please sign in to comment.