Skip to content

Commit

Permalink
[Catalog][Predictive Back][Side Sheet] Update side sheet state handli…
Browse files Browse the repository at this point in the history
…ng to be more accurate in demos

Fixes inaccurate state label text and back callback enabled flag after rotation

Resolves #3575

PiperOrigin-RevId: 566433974
(cherry picked from commit 357cf2d)
  • Loading branch information
dsn5ft authored and afohrman committed Sep 21, 2023
1 parent 386d47b commit 4442635
Showing 1 changed file with 44 additions and 32 deletions.
Expand Up @@ -186,31 +186,38 @@ private void setUpSheetGravityButtonToggleGroup(@NonNull View view) {
});
}

private void setupBackHandling(SideSheetBehavior<View> sideSheetBehavior) {
private void setupBackHandling(View sideSheet, SideSheetBehavior<View> sideSheetBehavior) {
OnBackPressedCallback nonModalOnBackPressedCallback =
createNonModalOnBackPressedCallback(sideSheetBehavior);
requireActivity().getOnBackPressedDispatcher().addCallback(this, nonModalOnBackPressedCallback);
sideSheetBehavior.addCallback(
new SideSheetCallback() {
@Override
public void onStateChanged(@NonNull View sheet, int newState) {
switch (newState) {
case SideSheetBehavior.STATE_EXPANDED:
case SideSheetBehavior.STATE_SETTLING:
nonModalOnBackPressedCallback.setEnabled(true);
break;
case SideSheetBehavior.STATE_HIDDEN:
nonModalOnBackPressedCallback.setEnabled(false);
break;
case SideSheetBehavior.STATE_DRAGGING:
default:
break;
}
updateBackHandlingEnabled(nonModalOnBackPressedCallback, newState);
}

@Override
public void onSlide(@NonNull View sheet, float slideOffset) {}
});
sideSheet.post(
() ->
updateBackHandlingEnabled(nonModalOnBackPressedCallback, sideSheetBehavior.getState()));
}

private void updateBackHandlingEnabled(OnBackPressedCallback onBackPressedCallback, int state) {
switch (state) {
case SideSheetBehavior.STATE_EXPANDED:
case SideSheetBehavior.STATE_SETTLING:
onBackPressedCallback.setEnabled(true);
break;
case SideSheetBehavior.STATE_HIDDEN:
onBackPressedCallback.setEnabled(false);
break;
case SideSheetBehavior.STATE_DRAGGING:
default:
break;
}
}

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

setupBackHandling(sideSheetBehavior);
setupBackHandling(sideSheet, sideSheetBehavior);

sideSheetViews.add(sideSheet);

Expand All @@ -237,9 +244,10 @@ private View setUpSideSheet(
private void setSideSheetCallback(
View sideSheet, @IdRes int stateTextViewId, @IdRes int slideOffsetTextId) {
SideSheetBehavior<View> sideSheetBehavior = SideSheetBehavior.from(sideSheet);
TextView stateTextView = sideSheet.findViewById(stateTextViewId);
sideSheetBehavior.addCallback(
createSideSheetCallback(
sideSheet.findViewById(stateTextViewId), sideSheet.findViewById(slideOffsetTextId)));
createSideSheetCallback(stateTextView, sideSheet.findViewById(slideOffsetTextId)));
sideSheet.post(() -> updateStateTextView(stateTextView, sideSheetBehavior.getState()));
}

private void setUpDetachedModalSheet() {
Expand Down Expand Up @@ -373,22 +381,7 @@ private SideSheetCallback createSideSheetCallback(
return new SideSheetCallback() {
@Override
public void onStateChanged(@NonNull View sheet, int newState) {
stateTextView.setVisibility(View.VISIBLE);

switch (newState) {
case SideSheetBehavior.STATE_DRAGGING:
stateTextView.setText(R.string.cat_sidesheet_state_dragging);
break;
case SideSheetBehavior.STATE_EXPANDED:
stateTextView.setText(R.string.cat_sidesheet_state_expanded);
break;
case SideSheetBehavior.STATE_SETTLING:
stateTextView.setText(R.string.cat_sidesheet_state_settling);
break;
case SideSheetBehavior.STATE_HIDDEN:
default:
break;
}
updateStateTextView(stateTextView, newState);
}

@Override
Expand All @@ -400,6 +393,25 @@ public void onSlide(@NonNull View sheet, float slideOffset) {
};
}

private void updateStateTextView(@NonNull TextView stateTextView, int state) {
stateTextView.setVisibility(View.VISIBLE);

switch (state) {
case SideSheetBehavior.STATE_DRAGGING:
stateTextView.setText(R.string.cat_sidesheet_state_dragging);
break;
case SideSheetBehavior.STATE_EXPANDED:
stateTextView.setText(R.string.cat_sidesheet_state_expanded);
break;
case SideSheetBehavior.STATE_SETTLING:
stateTextView.setText(R.string.cat_sidesheet_state_settling);
break;
case SideSheetBehavior.STATE_HIDDEN:
default:
break;
}
}

private OnBackPressedCallback createNonModalOnBackPressedCallback(
SideSheetBehavior<View> behavior) {
return new OnBackPressedCallback(/* enabled= */ false) {
Expand Down

0 comments on commit 4442635

Please sign in to comment.