use of com.mikepenz.fastadapter.select.SelectExtension in project Hentoid by avluis.
the class BookmarksDialogFragment method onViewCreated.
@Override
public void onViewCreated(@NonNull View rootView, @Nullable Bundle savedInstanceState) {
super.onViewCreated(rootView, savedInstanceState);
MaterialButton homepage = requireViewById(rootView, R.id.bookmark_homepage_btn);
homepage.setIcon(ContextCompat.getDrawable(requireContext(), site.getIco()));
homepage.setOnClickListener(v -> parent.loadUrl(site.getUrl()));
List<SiteBookmark> bookmarks = reloadBookmarks();
// Gets (or creates and attaches if not yet existing) the extension from the given `FastAdapter`
selectExtension = fastAdapter.getOrCreateExtension(SelectExtension.class);
if (selectExtension != null) {
selectExtension.setSelectable(true);
selectExtension.setMultiSelect(true);
selectExtension.setSelectOnLongClick(true);
selectExtension.setSelectWithItemUpdate(true);
selectExtension.setSelectionListener((i, b) -> this.onSelectionChanged());
FastAdapterPreClickSelectHelper<TextItem<SiteBookmark>> helper = new FastAdapterPreClickSelectHelper<>(selectExtension);
fastAdapter.setOnPreClickListener(helper::onPreClickListener);
fastAdapter.setOnPreLongClickListener(helper::onPreLongClickListener);
}
recyclerView = requireViewById(rootView, R.id.bookmarks_list);
// Activate drag & drop
SimpleDragCallback dragCallback = new SimpleDragCallback(this);
dragCallback.setNotifyAllDrops(true);
touchHelper = new ItemTouchHelper(dragCallback);
touchHelper.attachToRecyclerView(recyclerView);
recyclerView.setAdapter(fastAdapter);
fastAdapter.setOnClickListener((v, a, i, p) -> onItemClick(i));
fastAdapter.addEventHook(new TextItem.DragHandlerTouchEvent<>(position -> {
RecyclerView.ViewHolder vh = recyclerView.findViewHolderForAdapterPosition(position);
if (vh != null)
touchHelper.startDrag(vh);
}));
selectionToolbar = requireViewById(rootView, R.id.toolbar);
selectionToolbar.setOnMenuItemClickListener(this::selectionToolbarOnItemClicked);
editMenu = selectionToolbar.getMenu().findItem(R.id.action_edit);
copyMenu = selectionToolbar.getMenu().findItem(R.id.action_copy);
homeMenu = selectionToolbar.getMenu().findItem(R.id.action_home);
bookmarkCurrentBtn = requireViewById(rootView, R.id.bookmark_current_btn);
Optional<SiteBookmark> currentBookmark = Stream.of(bookmarks).filter(b -> SiteBookmark.urlsAreSame(b.getUrl(), url)).findFirst();
if (currentBookmark.isPresent())
bookmarkId = currentBookmark.get().id;
updateBookmarkButton();
}
use of com.mikepenz.fastadapter.select.SelectExtension in project Hentoid by avluis.
the class LibraryContentFragment method setPagingMethod.
/**
* Initialize the paging method of the screen
*
* @param isEndless True if endless mode has to be set; false if paged mode has to be set
*/
private void setPagingMethod(boolean isEndless, boolean isEditMode) {
// Editing will always be done in Endless mode
viewModel.setPagingMethod(isEndless || isEditMode);
// RecyclerView horizontal centering
ViewGroup.LayoutParams layoutParams = recyclerView.getLayoutParams();
recyclerView.setLayoutParams(layoutParams);
// Pager appearance
if (!isEndless && !isEditMode) {
pager.setCurrentPage(1);
pager.show();
} else
pager.hide();
// Adapter initialization
if (isEndless && !isEditMode) {
@ContentItem.ViewType int viewType;
if (Preferences.Constant.LIBRARY_DISPLAY_LIST == Preferences.getLibraryDisplay())
viewType = ContentItem.ViewType.LIBRARY;
else
viewType = ContentItem.ViewType.LIBRARY_GRID;
pagedItemAdapter = new PagedModelAdapter<>(asyncDifferConfig, i -> new ContentItem(viewType), c -> new ContentItem(c, touchHelper, viewType, this::onDeleteSwipedBook));
fastAdapter = FastAdapter.with(pagedItemAdapter);
ContentItem item = new ContentItem(viewType);
fastAdapter.registerItemFactory(item.getType(), item);
itemAdapter = null;
} else {
// Paged mode or edit mode
itemAdapter = new ItemAdapter<>();
fastAdapter = FastAdapter.with(itemAdapter);
pagedItemAdapter = null;
}
if (!fastAdapter.hasObservers())
fastAdapter.setHasStableIds(true);
// Item click listener
fastAdapter.setOnClickListener((v, a, i, p) -> onItemClick(p, i));
// Favourite button click listener
fastAdapter.addEventHook(new ClickEventHook<ContentItem>() {
@Override
public void onClick(@NotNull View view, int i, @NotNull FastAdapter<ContentItem> fastAdapter, @NotNull ContentItem item) {
if (item.getContent() != null)
onBookFavouriteClick(item.getContent());
}
@org.jetbrains.annotations.Nullable
@Override
public View onBind(RecyclerView.@NotNull ViewHolder viewHolder) {
if (viewHolder instanceof ContentItem.ContentViewHolder) {
return ((ContentItem.ContentViewHolder) viewHolder).getFavouriteButton();
}
return super.onBind(viewHolder);
}
});
// Site button click listener
fastAdapter.addEventHook(new ClickEventHook<ContentItem>() {
@Override
public void onClick(@NotNull View view, int i, @NotNull FastAdapter<ContentItem> fastAdapter, @NotNull ContentItem item) {
if (item.getContent() != null)
onBookSourceClick(item.getContent());
}
@org.jetbrains.annotations.Nullable
@Override
public View onBind(RecyclerView.@NotNull ViewHolder viewHolder) {
if (viewHolder instanceof ContentItem.ContentViewHolder) {
return ((ContentItem.ContentViewHolder) viewHolder).getSiteButton();
}
return super.onBind(viewHolder);
}
});
// "To top" button click listener (groups view only)
fastAdapter.addEventHook(new ClickEventHook<ContentItem>() {
@Override
public void onClick(@NotNull View view, int position, @NotNull FastAdapter<ContentItem> fastAdapter, @NotNull ContentItem item) {
itemTouchOnMove(position, 0);
}
@org.jetbrains.annotations.Nullable
@Override
public View onBind(RecyclerView.@NotNull ViewHolder viewHolder) {
if (viewHolder instanceof ContentItem.ContentViewHolder) {
return ((ContentItem.ContentViewHolder) viewHolder).getTopButton();
}
return super.onBind(viewHolder);
}
});
// "To bottom" button click listener (groups view only)
fastAdapter.addEventHook(new ClickEventHook<ContentItem>() {
@Override
public void onClick(@NotNull View view, int position, @NotNull FastAdapter<ContentItem> fastAdapter, @NotNull ContentItem item) {
itemTouchOnMove(position, fastAdapter.getItemCount() - 1);
}
@org.jetbrains.annotations.Nullable
@Override
public View onBind(RecyclerView.@NotNull ViewHolder viewHolder) {
if (viewHolder instanceof ContentItem.ContentViewHolder) {
return ((ContentItem.ContentViewHolder) viewHolder).getBottomButton();
}
return super.onBind(viewHolder);
}
});
// Gets (or creates and attaches if not yet existing) the extension from the given `FastAdapter`
selectExtension = fastAdapter.getOrCreateExtension(SelectExtension.class);
if (selectExtension != null) {
selectExtension.setSelectable(true);
selectExtension.setMultiSelect(true);
selectExtension.setSelectOnLongClick(true);
selectExtension.setSelectWithItemUpdate(true);
selectExtension.setSelectionListener((item, b) -> this.onSelectionChanged());
FastAdapterPreClickSelectHelper<ContentItem> helper = new FastAdapterPreClickSelectHelper<>(selectExtension);
fastAdapter.setOnPreClickListener(helper::onPreClickListener);
fastAdapter.setOnPreLongClickListener(helper::onPreLongClickListener);
}
// Drag, drop & swiping
@DimenRes int dimen = (Preferences.Constant.LIBRARY_DISPLAY_LIST == Preferences.getLibraryDisplay()) ? R.dimen.delete_drawer_width_list : R.dimen.delete_drawer_width_grid;
SimpleSwipeDrawerDragCallback dragSwipeCallback = new SimpleSwipeDrawerDragCallback(this, ItemTouchHelper.LEFT, this).withSwipeLeft(Helper.dimensAsDp(requireContext(), dimen)).withSensitivity(1.5f).withSurfaceThreshold(0.3f).withNotifyAllDrops(true);
// Despite its name, that's actually to disable drag on long tap
dragSwipeCallback.setIsDragEnabled(false);
touchHelper = new ItemTouchHelper(dragSwipeCallback);
touchHelper.attachToRecyclerView(recyclerView);
recyclerView.setAdapter(fastAdapter);
recyclerView.setHasFixedSize(true);
}
use of com.mikepenz.fastadapter.select.SelectExtension in project Hentoid by avluis.
the class LibraryGroupsFragment method setPagingMethod.
/**
* Initialize the paging method of the screen
*/
private void setPagingMethod() /*boolean isEditMode*/
{
viewModel.setPagingMethod(true);
itemAdapter = new ItemAdapter<>();
fastAdapter = FastAdapter.with(itemAdapter);
if (!fastAdapter.hasObservers())
fastAdapter.setHasStableIds(true);
// Gets (or creates and attaches if not yet existing) the extension from the given `FastAdapter`
selectExtension = fastAdapter.getOrCreateExtension(SelectExtension.class);
if (selectExtension != null) {
selectExtension.setSelectable(true);
selectExtension.setMultiSelect(true);
selectExtension.setSelectOnLongClick(true);
selectExtension.setSelectWithItemUpdate(true);
selectExtension.setSelectionListener((i, b) -> this.onSelectionChanged());
FastAdapterPreClickSelectHelper<GroupDisplayItem> helper = new FastAdapterPreClickSelectHelper<>(selectExtension);
fastAdapter.setOnPreClickListener(helper::onPreClickListener);
fastAdapter.setOnPreLongClickListener(helper::onPreLongClickListener);
}
// Drag, drop & swiping
if (activity.get().isEditMode()) {
SimpleDragCallback dragSwipeCallback = new SimpleSwipeDragCallback(this, this, ContextCompat.getDrawable(requireContext(), R.drawable.ic_action_delete_forever)).withSensitivity(10f).withSurfaceThreshold(0.75f);
dragSwipeCallback.setNotifyAllDrops(true);
// Despite its name, that's actually to disable drag on long tap
dragSwipeCallback.setIsDragEnabled(false);
touchHelper = new ItemTouchHelper(dragSwipeCallback);
touchHelper.attachToRecyclerView(recyclerView);
}
// Item click listener
fastAdapter.setOnClickListener((v, a, i, p) -> onItemClick(i));
// Favourite button click listener
fastAdapter.addEventHook(new ClickEventHook<GroupDisplayItem>() {
@Override
public void onClick(@NotNull View view, int i, @NotNull FastAdapter<GroupDisplayItem> fastAdapter, @NotNull GroupDisplayItem item) {
if (item.getGroup() != null)
onGroupFavouriteClick(item.getGroup());
}
@org.jetbrains.annotations.Nullable
@Override
public View onBind(RecyclerView.@NotNull ViewHolder viewHolder) {
if (viewHolder instanceof GroupDisplayItem.GroupViewHolder) {
return ((GroupDisplayItem.GroupViewHolder) viewHolder).getFavouriteButton();
}
return super.onBind(viewHolder);
}
});
fastAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
recyclerView.setAdapter(fastAdapter);
recyclerView.setHasFixedSize(true);
}
Aggregations