Skip to content

Commit

Permalink
[Catalog][Carousel] Update slider position when carousel is scrolled …
Browse files Browse the repository at this point in the history
…in catalog demos

Resolves #3521
Resolves #3520

GIT_ORIGIN_REV_ID=f26a8b55c9026a3418024a2e51ba3570a017c59d
PiperOrigin-RevId: 558934224
  • Loading branch information
manabu-nakamura authored and imhappi committed Aug 22, 2023
1 parent eba40e9 commit 3652fde
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 8 deletions.
Expand Up @@ -68,10 +68,8 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle bundle) {

new WindowPreferencesManager(requireContext())
.applyEdgeToEdgePreference(bottomSheetDialog.getWindow());

verticalDivider =
new MaterialDividerItemDecoration(
requireContext(), MaterialDividerItemDecoration.VERTICAL);
new MaterialDividerItemDecoration(requireContext(), MaterialDividerItemDecoration.VERTICAL);

Button showBottomSheetButton = view.findViewById(R.id.show_bottomsheet_button);
showBottomSheetButton.setOnClickListener(new OnClickListener() {
Expand Down Expand Up @@ -121,6 +119,26 @@ public void onClick(View v) {
new CarouselAdapter(
(item, position) -> fullscreenRecyclerView.scrollToPosition(position),
R.layout.cat_carousel_item_vertical);
fullscreenRecyclerView.addOnScrollListener(
new RecyclerView.OnScrollListener() {
private boolean dragged = false;

@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
dragged = true;
} else if (dragged && newState == RecyclerView.SCROLL_STATE_IDLE) {
if (recyclerView.computeVerticalScrollRange() != 0) {
positionSlider.setValue(
(adapter.getItemCount() - 1)
* recyclerView.computeVerticalScrollOffset()
/ recyclerView.computeVerticalScrollRange()
+ 1);
}
dragged = false;
}
}
});

SnapHelper flingDisabledSnapHelper = new CarouselSnapHelper();
SnapHelper flingEnabledSnapHelper = new CarouselSnapHelper(false);
Expand Down Expand Up @@ -151,7 +169,7 @@ public void onStartTrackingTouch(@NonNull Slider slider) {}

@Override
public void onStopTrackingTouch(@NonNull Slider slider) {
fullscreenRecyclerView.smoothScrollToPosition((int) slider.getValue() - 1);
fullscreenRecyclerView.smoothScrollToPosition(((int) slider.getValue()) - 1);
}
});

Expand Down
Expand Up @@ -101,8 +101,31 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle bundle) {

CarouselAdapter adapter =
new CarouselAdapter(
(item, position) -> heroStartRecyclerView.scrollToPosition(position),
(item, position) -> {
heroStartRecyclerView.scrollToPosition(position);
positionSlider.setValue(position + 1);
},
R.layout.cat_carousel_item);
heroStartRecyclerView.addOnScrollListener(
new RecyclerView.OnScrollListener() {
private boolean dragged = false;

@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
dragged = true;
} else if (dragged && newState == RecyclerView.SCROLL_STATE_IDLE) {
if (recyclerView.computeHorizontalScrollRange() != 0) {
positionSlider.setValue(
(adapter.getItemCount() - 1)
* recyclerView.computeHorizontalScrollOffset()
/ recyclerView.computeHorizontalScrollRange()
+ 1);
}
dragged = false;
}
}
});

SnapHelper disableFlingSnapHelper = new CarouselSnapHelper();
SnapHelper enableFlingSnapHelper = new CarouselSnapHelper(false);
Expand Down Expand Up @@ -137,7 +160,7 @@ public void onStartTrackingTouch(@NonNull Slider slider) {}

@Override
public void onStopTrackingTouch(@NonNull Slider slider) {
heroStartRecyclerView.smoothScrollToPosition((int) slider.getValue() - 1);
heroStartRecyclerView.smoothScrollToPosition(((int) slider.getValue()) - 1);
}
});

Expand Down
Expand Up @@ -109,8 +109,31 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle bundle) {

CarouselAdapter adapter =
new CarouselAdapter(
(item, position) -> multiBrowseStartRecyclerView.scrollToPosition(position),
(item, position) -> {
multiBrowseStartRecyclerView.scrollToPosition(position);
positionSlider.setValue(position + 1);
},
R.layout.cat_carousel_item_narrow);
multiBrowseStartRecyclerView.addOnScrollListener(
new RecyclerView.OnScrollListener() {
private boolean dragged = false;

@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
dragged = true;
} else if (dragged && newState == RecyclerView.SCROLL_STATE_IDLE) {
if (recyclerView.computeHorizontalScrollRange() != 0) {
positionSlider.setValue(
(adapter.getItemCount() - 1)
* recyclerView.computeHorizontalScrollOffset()
/ recyclerView.computeHorizontalScrollRange()
+ 1);
}
dragged = false;
}
}
});

itemCountDropdown.setOnItemClickListener(
(parent, view1, position, id) -> {
Expand All @@ -126,7 +149,7 @@ public void onStartTrackingTouch(@NonNull Slider slider) {}

@Override
public void onStopTrackingTouch(@NonNull Slider slider) {
multiBrowseStartRecyclerView.smoothScrollToPosition((int) slider.getValue() - 1);
multiBrowseStartRecyclerView.smoothScrollToPosition(((int) slider.getValue()) - 1);
}
});

Expand Down

0 comments on commit 3652fde

Please sign in to comment.