From 3c37f220271a447fb7eb68d07c9c6d285114a01e Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sat, 24 Dec 2022 15:06:34 +0800 Subject: [PATCH] Use getBindingAdapterPosition() to get item position Better solution for #201 --- .../ehviewer/ui/scene/FavoritesScene.java | 7 ---- .../ehviewer/ui/scene/GalleryAdapter.java | 35 +++++++------------ .../ehviewer/ui/scene/GalleryListScene.java | 7 ---- .../ui/scene/GalleryPreviewsScene.java | 7 ---- .../java/com/hippo/widget/ContentLayout.java | 4 +-- 5 files changed, 13 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java index 984a8fdcf..c1c9b4492 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java @@ -1139,13 +1139,6 @@ public class FavoritesScene extends SearchBarScene implements } } - @Override - protected void notifyItemRangeChanged(int positionStart, int itemCount) { - if (mAdapter != null) { - mAdapter.notifyItemRangeChanged(positionStart, itemCount); - } - } - @Override protected void notifyItemRangeInserted(int positionStart, int itemCount) { if (mAdapter != null) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java index 5bab0ff94..e87ff24c9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java @@ -106,8 +106,7 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { RecyclerView recyclerView = mRecyclerView; switch (type) { - default: - case GalleryAdapter.TYPE_LIST: { + case GalleryAdapter.TYPE_LIST -> { int columnWidth = mResources.getDimensionPixelOffset(Settings.getDetailSizeResId()); mLayoutManager.setColumnSize(columnWidth); mLayoutManager.setStrategy(AutoStaggeredGridLayoutManager.STRATEGY_MIN_SIZE); @@ -123,9 +122,8 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { recyclerView.addItemDecoration(mListDecoration); adjustPaddings(); notifyDataSetChanged(); - break; } - case GalleryAdapter.TYPE_GRID: { + case GalleryAdapter.TYPE_GRID -> { int columnWidth = Settings.getThumbSize(); mLayoutManager.setColumnSize(columnWidth); mLayoutManager.setStrategy(AutoStaggeredGridLayoutManager.STRATEGY_SUITABLE_SIZE); @@ -141,7 +139,6 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { recyclerView.addItemDecoration(mGirdDecoration); adjustPaddings(); notifyDataSetChanged(); - break; } } } @@ -149,16 +146,11 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { @NonNull @Override public GalleryHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - int layoutId; - switch (viewType) { - default: - case TYPE_LIST: - layoutId = R.layout.item_gallery_list; - break; - case TYPE_GRID: - layoutId = R.layout.item_gallery_grid; - break; - } + int layoutId = switch (viewType) { + case TYPE_LIST -> R.layout.item_gallery_list; + case TYPE_GRID -> R.layout.item_gallery_grid; + default -> throw new IllegalStateException("Unexpected value: " + viewType); + }; GalleryHolder holder = new GalleryHolder(mInflater.inflate(layoutId, parent, false)); @@ -169,6 +161,9 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { holder.thumb.setLayoutParams(lp); } + holder.card.setOnClickListener(v -> onItemClick(holder.itemView, holder.getBindingAdapterPosition())); + holder.card.setOnLongClickListener(v -> onItemLongClick(holder.itemView, holder.getBindingAdapterPosition())); + return holder; } @@ -193,8 +188,7 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { } switch (mType) { - default: - case TYPE_LIST: { + case TYPE_LIST -> { holder.thumb.load(EhCacheKeyFactory.getThumbKey(gi.gid), gi.thumb); holder.title.setText(EhUtils.getSuitableTitle(gi)); holder.uploader.setText(gi.uploader); @@ -223,9 +217,8 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { } holder.favourited.setVisibility((mShowFavourited && gi.favoriteSlot >= -1 && gi.favoriteSlot <= 10) ? View.VISIBLE : View.GONE); holder.downloaded.setVisibility(mDownloadManager.containDownloadInfo(gi.gid) ? View.VISIBLE : View.GONE); - break; } - case TYPE_GRID: { + case TYPE_GRID -> { ((TileThumb) holder.thumb).setThumbSize(gi.thumbWidth, gi.thumbHeight); holder.thumb.load(EhCacheKeyFactory.getThumbKey(gi.gid), gi.thumb); View category = holder.category; @@ -238,15 +231,11 @@ abstract class GalleryAdapter extends RecyclerView.Adapter { ((TriangleDrawable) drawable).setColor(color); } holder.simpleLanguage.setText(gi.simpleLanguage); - break; } } // Update transition name ViewCompat.setTransitionName(holder.thumb, TransitionNameFactory.getThumbTransitionName(gi.gid)); - - holder.card.setOnClickListener(v -> onItemClick(holder.itemView, position)); - holder.card.setOnLongClickListener(v -> onItemLongClick(holder.itemView, position)); } @IntDef({TYPE_LIST, TYPE_GRID}) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index 3842d8c97..deeedf438 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -1630,13 +1630,6 @@ public final class GalleryListScene extends SearchBarScene } } - @Override - protected void notifyItemRangeChanged(int positionStart, int itemCount) { - if (null != mAdapter) { - mAdapter.notifyItemRangeChanged(positionStart, itemCount); - } - } - @Override protected void notifyItemRangeInserted(int positionStart, int itemCount) { if (null != mAdapter) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java index 689229696..15ff8cabf 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java @@ -372,13 +372,6 @@ public class GalleryPreviewsScene extends ToolbarScene { } } - @Override - protected void notifyItemRangeChanged(int positionStart, int itemCount) { - if (mAdapter != null) { - mAdapter.notifyItemRangeChanged(positionStart, itemCount); - } - } - @Override protected void notifyItemRangeInserted(int positionStart, int itemCount) { if (mAdapter != null) { diff --git a/app/src/main/java/com/hippo/widget/ContentLayout.java b/app/src/main/java/com/hippo/widget/ContentLayout.java index 676662525..8cee7f757 100644 --- a/app/src/main/java/com/hippo/widget/ContentLayout.java +++ b/app/src/main/java/com/hippo/widget/ContentLayout.java @@ -295,6 +295,7 @@ public class ContentLayout extends FrameLayout { mRecyclerView = contentLayout.mRecyclerView; Drawable drawable = ContextCompat.getDrawable(getContext(), R.drawable.big_sad_pandroid); + assert drawable != null; drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); mTipView.setCompoundDrawables(null, drawable, null, null); @@ -321,8 +322,6 @@ public class ContentLayout extends FrameLayout { protected abstract void notifyDataSetChanged(); - protected abstract void notifyItemRangeChanged(int positionStart, int itemCount); - protected abstract void notifyItemRangeInserted(int positionStart, int itemCount); protected void onScrollToPosition(int position) { @@ -478,7 +477,6 @@ public class ContentLayout extends FrameLayout { mData.addAll(0, data); onAddData(data); notifyItemRangeInserted(0, data.size()); - notifyItemRangeChanged(data.size(), mData.size() - data.size()); // Ui change, show content mRefreshLayout.setRefreshing(false);