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
  • Loading branch information
dsn5ft committed Sep 19, 2023
1 parent f9102c7 commit 357cf2d
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 357cf2d

Please sign in to comment.