Search in sources :

Example 1 with ClickEventHook

use of com.mikepenz.fastadapter.listeners.ClickEventHook 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);
}
Also used : Bundle(android.os.Bundle) QueueActivity(me.devsaki.hentoid.activities.QueueActivity) NonNull(androidx.annotation.NonNull) AsyncDifferConfig(androidx.recyclerview.widget.AsyncDifferConfig) Uri(android.net.Uri) ImageView(android.widget.ImageView) ISwipeableViewHolder(me.devsaki.hentoid.viewholders.ISwipeableViewHolder) ClickEventHook(com.mikepenz.fastadapter.listeners.ClickEventHook) Attribute(me.devsaki.hentoid.database.domains.Attribute) AutofitGridLayoutManager(me.devsaki.hentoid.widget.AutofitGridLayoutManager) Chapter(me.devsaki.hentoid.database.domains.Chapter) OnBackPressedCallback(androidx.activity.OnBackPressedCallback) Site(me.devsaki.hentoid.enums.Site) Handler(android.os.Handler) Looper(android.os.Looper) Fragment(androidx.fragment.app.Fragment) EV_SEARCH(me.devsaki.hentoid.events.CommunicationEvent.EV_SEARCH) ItemTouchCallback(com.mikepenz.fastadapter.drag.ItemTouchCallback) RC_CONTENTS(me.devsaki.hentoid.events.CommunicationEvent.RC_CONTENTS) Set(java.util.Set) ToastHelper(me.devsaki.hentoid.util.ToastHelper) CommunicationEvent(me.devsaki.hentoid.events.CommunicationEvent) IdRes(androidx.annotation.IdRes) StringRes(androidx.annotation.StringRes) Nullable(androidx.annotation.Nullable) ProcessEvent(me.devsaki.hentoid.events.ProcessEvent) ThemeHelper(me.devsaki.hentoid.util.ThemeHelper) FastAdapter(com.mikepenz.fastadapter.FastAdapter) ExtensionsFactories(com.mikepenz.fastadapter.extensions.ExtensionsFactories) QUEUE_NEW_DOWNLOADS_POSITION_TOP(me.devsaki.hentoid.util.Preferences.Constant.QUEUE_NEW_DOWNLOADS_POSITION_TOP) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) QUEUE_NEW_DOWNLOADS_POSITION_BOTTOM(me.devsaki.hentoid.util.Preferences.Constant.QUEUE_NEW_DOWNLOADS_POSITION_BOTTOM) Debouncer(me.devsaki.hentoid.util.Debouncer) Stream(com.annimon.stream.Stream) IDraggableViewHolder(me.devsaki.hentoid.viewholders.IDraggableViewHolder) AddQueueMenu(me.devsaki.hentoid.widget.AddQueueMenu) SystemClock(android.os.SystemClock) BaseTransientBottomBar(com.google.android.material.snackbar.BaseTransientBottomBar) AppUpdatedEvent(me.devsaki.hentoid.events.AppUpdatedEvent) ArrayList(java.util.ArrayList) ItemTouchHelper(androidx.recyclerview.widget.ItemTouchHelper) Helper(me.devsaki.hentoid.util.Helper) ViewModelProvider(androidx.lifecycle.ViewModelProvider) FastScrollerBuilder(me.zhanghai.android.fastscroll.FastScrollerBuilder) Gravity(android.view.Gravity) R(me.devsaki.hentoid.R) SimpleSwipeDrawerCallback(com.mikepenz.fastadapter.swipe.SimpleSwipeDrawerCallback) SharedPreferences(android.content.SharedPreferences) EV_ADVANCED_SEARCH(me.devsaki.hentoid.events.CommunicationEvent.EV_ADVANCED_SEARCH) SelectExtensionFactory(com.mikepenz.fastadapter.select.SelectExtensionFactory) Content(me.devsaki.hentoid.database.domains.Content) LibraryViewModel(me.devsaki.hentoid.viewmodels.LibraryViewModel) DimenRes(androidx.annotation.DimenRes) LibraryPager(me.devsaki.hentoid.widget.LibraryPager) FastAdapterDiffUtil(com.mikepenz.fastadapter.diff.FastAdapterDiffUtil) MaterialAlertDialogBuilder(com.google.android.material.dialog.MaterialAlertDialogBuilder) StartActivityForResult(androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult) PagedList(androidx.paging.PagedList) ContentHelper(me.devsaki.hentoid.util.ContentHelper) ContentItemBundle(me.devsaki.hentoid.activities.bundles.ContentItemBundle) Optional(com.annimon.stream.Optional) BuildConfig(me.devsaki.hentoid.BuildConfig) ItemAdapter(com.mikepenz.fastadapter.adapters.ItemAdapter) StringHelper(me.devsaki.hentoid.util.StringHelper) Consumer(com.annimon.stream.function.Consumer) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) EV_UPDATE_SORT(me.devsaki.hentoid.events.CommunicationEvent.EV_UPDATE_SORT) DiffUtil(androidx.recyclerview.widget.DiffUtil) EV_DISABLE(me.devsaki.hentoid.events.CommunicationEvent.EV_DISABLE) SimpleSwipeDrawerDragCallback(com.mikepenz.fastadapter.swipe_drag.SimpleSwipeDrawerDragCallback) ThreadMode(org.greenrobot.eventbus.ThreadMode) ViewGroup(android.view.ViewGroup) Timber(timber.log.Timber) ViewModelFactory(me.devsaki.hentoid.viewmodels.ViewModelFactory) Objects(java.util.Objects) ViewCompat.requireViewById(androidx.core.view.ViewCompat.requireViewById) List(java.util.List) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) TextView(android.widget.TextView) Grouping(me.devsaki.hentoid.enums.Grouping) DocumentFile(androidx.documentfile.provider.DocumentFile) NotNull(org.jetbrains.annotations.NotNull) Snackbar(com.google.android.material.snackbar.Snackbar) Group(me.devsaki.hentoid.database.domains.Group) InputDialog(me.devsaki.hentoid.ui.InputDialog) Context(android.content.Context) LibraryActivity(me.devsaki.hentoid.activities.LibraryActivity) ContentItem(me.devsaki.hentoid.viewholders.ContentItem) Preferences(me.devsaki.hentoid.util.Preferences) DiffCallback(com.mikepenz.fastadapter.diff.DiffCallback) Intent(android.content.Intent) StatusContent(me.devsaki.hentoid.enums.StatusContent) MenuItem(android.view.MenuItem) IAdapter(com.mikepenz.fastadapter.IAdapter) SuppressLint(android.annotation.SuppressLint) QUEUE_NEW_DOWNLOADS_POSITION_ASK(me.devsaki.hentoid.util.Preferences.Constant.QUEUE_NEW_DOWNLOADS_POSITION_ASK) FastAdapterPreClickSelectHelper(me.devsaki.hentoid.widget.FastAdapterPreClickSelectHelper) EV_ENABLE(me.devsaki.hentoid.events.CommunicationEvent.EV_ENABLE) SelectExtension(com.mikepenz.fastadapter.select.SelectExtension) EventBus(org.greenrobot.eventbus.EventBus) WeakReference(java.lang.ref.WeakReference) SearchActivityBundle(me.devsaki.hentoid.activities.bundles.SearchActivityBundle) ActivityResultLauncher(androidx.activity.result.ActivityResultLauncher) LayoutInflater(android.view.LayoutInflater) FirebaseCrashlytics(com.google.firebase.crashlytics.FirebaseCrashlytics) FileHelper(me.devsaki.hentoid.util.FileHelper) DragDropUtil(com.mikepenz.fastadapter.utils.DragDropUtil) ImmutablePair(org.apache.commons.lang3.tuple.ImmutablePair) PopupMenu(androidx.appcompat.widget.PopupMenu) Subscribe(org.greenrobot.eventbus.Subscribe) SearchActivity(me.devsaki.hentoid.activities.SearchActivity) ProgressDialogFragment(me.devsaki.hentoid.fragments.ProgressDialogFragment) Collectors.toCollection(com.annimon.stream.Collectors.toCollection) Activity(android.app.Activity) PagedModelAdapter(com.mikepenz.fastadapter.paged.PagedModelAdapter) Collections(java.util.Collections) ActivityResult(androidx.activity.result.ActivityResult) SimpleSwipeDrawerDragCallback(com.mikepenz.fastadapter.swipe_drag.SimpleSwipeDrawerDragCallback) ViewGroup(android.view.ViewGroup) SelectExtension(com.mikepenz.fastadapter.select.SelectExtension) ImageView(android.widget.ImageView) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) TextView(android.widget.TextView) NotNull(org.jetbrains.annotations.NotNull) SuppressLint(android.annotation.SuppressLint) DimenRes(androidx.annotation.DimenRes) ItemTouchHelper(androidx.recyclerview.widget.ItemTouchHelper) RecyclerView(androidx.recyclerview.widget.RecyclerView) FastAdapterPreClickSelectHelper(me.devsaki.hentoid.widget.FastAdapterPreClickSelectHelper) ContentItem(me.devsaki.hentoid.viewholders.ContentItem)

Aggregations

SuppressLint (android.annotation.SuppressLint)1 Activity (android.app.Activity)1 Context (android.content.Context)1 Intent (android.content.Intent)1 SharedPreferences (android.content.SharedPreferences)1 Uri (android.net.Uri)1 Bundle (android.os.Bundle)1 Handler (android.os.Handler)1 Looper (android.os.Looper)1 SystemClock (android.os.SystemClock)1 Gravity (android.view.Gravity)1 LayoutInflater (android.view.LayoutInflater)1 MenuItem (android.view.MenuItem)1 View (android.view.View)1 ViewGroup (android.view.ViewGroup)1 ImageView (android.widget.ImageView)1 TextView (android.widget.TextView)1 OnBackPressedCallback (androidx.activity.OnBackPressedCallback)1 ActivityResult (androidx.activity.result.ActivityResult)1 ActivityResultLauncher (androidx.activity.result.ActivityResultLauncher)1