From a3bdbd7a859fd5537a2ee5f79ed25554c6d4bca4 Mon Sep 17 00:00:00 2001 From: tarsin Date: Fri, 5 Aug 2022 18:12:23 +0800 Subject: [PATCH] Drop android-advancedrecyclerview * Actually this library is unmaintained for above a year, and drag feature we used is totally broken on Android 12 and above https://github.com/h6ah4i/android-advancedrecyclerview/issues/516 https://github.com/Ehviewer-Overhauled/Ehviewer/issues/54 --- app/build.gradle | 1 - .../ehviewer/ui/scene/DownloadsScene.java | 58 +------------ .../ehviewer/ui/scene/GalleryListScene.java | 58 +------------ .../hippo/ehviewer/ui/scene/HistoryScene.java | 82 +------------------ 4 files changed, 8 insertions(+), 191 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8ab1c98a1..913f4c5f2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -164,7 +164,6 @@ dependencies { implementation 'com.drakeet.drawer:drawer:1.0.3' implementation 'com.google.android.material:material:1.7.0-alpha03' - implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0' implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.10' implementation 'dev.rikka.rikkax.core:core-ktx:1.4.1' implementation 'dev.rikka.rikkax.insets:insets:1.3.0' diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java index ca4134fa3..50417dbdc 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java @@ -57,12 +57,6 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator; -import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator; -import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter; -import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange; -import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager; -import com.h6ah4i.android.widget.advrecyclerview.utils.AbstractDraggableItemViewHolder; import com.hippo.app.CheckBoxDialogBuilder; import com.hippo.app.EditTextDialogBuilder; import com.hippo.conaco.DataContainer; @@ -556,20 +550,11 @@ public class DownloadsScene extends ToolbarScene initLabels(); - RecyclerViewDragDropManager dragDropManager = new RecyclerViewDragDropManager(); - dragDropManager.setInitiateOnLongPress(true); - dragDropManager.setInitiateOnTouch(false); - dragDropManager.setDraggingItemAlpha(0.8f); - mLabelAdapter = new DownloadLabelAdapter(inflater); final EasyRecyclerView recyclerView = view.findViewById(R.id.recycler_view_drawer); recyclerView.setLayoutManager(new LinearLayoutManager(context)); mLabelAdapter.setHasStableIds(true); - final GeneralItemAnimator animator = new DraggableItemAnimator(); - recyclerView.setItemAnimator(animator); - recyclerView.setAdapter(dragDropManager.createWrappedAdapter(mLabelAdapter)); - dragDropManager.attachRecyclerView(recyclerView); - + recyclerView.setAdapter(mLabelAdapter); return view; } @@ -892,7 +877,7 @@ public class DownloadsScene extends ToolbarScene holder.speed.setText(FileUtils.humanReadableByteCount(speed, false) + "/S"); } - private static class DownloadLabelHolder extends AbstractDraggableItemViewHolder { + private static class DownloadLabelHolder extends RecyclerView.ViewHolder { private final TextView label; private final ImageView option; @@ -971,7 +956,7 @@ public class DownloadsScene extends ToolbarScene } } - private class DownloadLabelAdapter extends RecyclerView.Adapter implements DraggableItemAdapter { + private class DownloadLabelAdapter extends RecyclerView.Adapter { private final LayoutInflater mInflater; @@ -1071,43 +1056,6 @@ public class DownloadsScene extends ToolbarScene public int getItemCount() { return mLabels != null ? mLabels.size() : 0; } - - @Override - public boolean onCheckCanStartDrag(@NonNull DownloadLabelHolder holder, int position, int x, int y) { - return position != 0 && x > holder.option.getX() && y > holder.option.getY(); - } - - @Override - public ItemDraggableRange onGetItemDraggableRange(@NonNull DownloadLabelHolder holder, int position) { - return new ItemDraggableRange(1, getItemCount() - 1); - } - - @Override - public void onMoveItem(int fromPosition, int toPosition) { - Context context = getContext(); - if (null == context || fromPosition == toPosition || toPosition == 0) { - return; - } - - EhApplication.getDownloadManager(context).moveLabel(fromPosition - 1, toPosition - 1); - final String item = mLabels.remove(fromPosition); - mLabels.add(toPosition, item); - } - - @Override - public boolean onCheckCanDrop(int draggingPosition, int dropPosition) { - return dropPosition != 0; - } - - @Override - public void onItemDragStarted(int position) { - notifyDataSetChanged(); - } - - @Override - public void onItemDragFinished(int fromPosition, int toPosition, boolean result) { - notifyDataSetChanged(); - } } private class DeleteRangeDialogHelper implements DialogInterface.OnClickListener { 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 9b8210621..5b51d7c6b 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 @@ -61,12 +61,6 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator; -import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator; -import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter; -import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange; -import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager; -import com.h6ah4i.android.widget.advrecyclerview.utils.AbstractDraggableItemViewHolder; import com.hippo.app.EditTextDialogBuilder; import com.hippo.drawable.AddDeleteDrawable; import com.hippo.drawable.DrawerArrowDrawable; @@ -753,19 +747,11 @@ public final class GalleryListScene extends BaseScene Context context = getContext(); AssertUtils.assertNotNull(context); - RecyclerViewDragDropManager dragDropManager = new RecyclerViewDragDropManager(); - dragDropManager.setInitiateOnLongPress(true); - dragDropManager.setInitiateOnTouch(false); - dragDropManager.setDraggingItemAlpha(0.8f); - final EasyRecyclerView recyclerView = view.findViewById(R.id.recycler_view_drawer); recyclerView.setLayoutManager(new LinearLayoutManager(context)); final QsDrawerAdapter qsDrawerAdapter = new QsDrawerAdapter(inflater); qsDrawerAdapter.setHasStableIds(true); - final GeneralItemAnimator animator = new DraggableItemAnimator(); - recyclerView.setItemAnimator(animator); - recyclerView.setAdapter(dragDropManager.createWrappedAdapter(qsDrawerAdapter)); - dragDropManager.attachRecyclerView(recyclerView); + recyclerView.setAdapter(qsDrawerAdapter); mQuickSearchList = EhDB.getAllQuickSearch(); tip.setText(R.string.quick_search_tip); if (mIsTopList) { @@ -1492,7 +1478,7 @@ public final class GalleryListScene extends BaseScene } } - private static class QsDrawerHolder extends AbstractDraggableItemViewHolder { + private static class QsDrawerHolder extends RecyclerView.ViewHolder { private final TextView key; private final ImageView option; @@ -1537,7 +1523,7 @@ public final class GalleryListScene extends BaseScene } } - private class QsDrawerAdapter extends RecyclerView.Adapter implements DraggableItemAdapter { + private class QsDrawerAdapter extends RecyclerView.Adapter { private final LayoutInflater mInflater; @@ -1631,44 +1617,6 @@ public final class GalleryListScene extends BaseScene public int getItemCount() { return !mIsTopList ? mQuickSearchList != null ? mQuickSearchList.size() : 0 : 4; } - - @Override - public boolean onCheckCanStartDrag(@NonNull QsDrawerHolder holder, int position, int x, int y) { - return !mIsTopList && x > holder.option.getX() && y > holder.option.getY(); - } - - @Override - public ItemDraggableRange onGetItemDraggableRange(@NonNull QsDrawerHolder holder, int position) { - return null; - } - - @Override - public void onMoveItem(int fromPosition, int toPosition) { - if (fromPosition == toPosition) { - return; - } - if (null == mQuickSearchList) { - return; - } - EhDB.moveQuickSearch(fromPosition, toPosition); - final QuickSearch item = mQuickSearchList.remove(fromPosition); - mQuickSearchList.add(toPosition, item); - } - - @Override - public boolean onCheckCanDrop(int draggingPosition, int dropPosition) { - return true; - } - - @Override - public void onItemDragStarted(int position) { - notifyDataSetChanged(); - } - - @Override - public void onItemDragFinished(int fromPosition, int toPosition, boolean result) { - notifyDataSetChanged(); - } } private abstract class UrlSuggestion extends SearchBar.Suggestion { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.java index 3ca4a4ad4..d71afe9f3 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.java @@ -40,16 +40,6 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator; -import com.h6ah4i.android.widget.advrecyclerview.animator.SwipeDismissItemAnimator; -import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager; -import com.h6ah4i.android.widget.advrecyclerview.swipeable.SwipeableItemAdapter; -import com.h6ah4i.android.widget.advrecyclerview.swipeable.SwipeableItemConstants; -import com.h6ah4i.android.widget.advrecyclerview.swipeable.action.SwipeResultAction; -import com.h6ah4i.android.widget.advrecyclerview.swipeable.action.SwipeResultActionDefault; -import com.h6ah4i.android.widget.advrecyclerview.swipeable.action.SwipeResultActionRemoveItem; -import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager; -import com.h6ah4i.android.widget.advrecyclerview.utils.AbstractSwipeableItemViewHolder; import com.hippo.easyrecyclerview.EasyRecyclerView; import com.hippo.easyrecyclerview.FastScroller; import com.hippo.easyrecyclerview.HandlerDrawable; @@ -204,17 +194,9 @@ public class HistoryScene extends ToolbarScene { drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); mTip.setCompoundDrawables(null, drawable, null, null); - RecyclerViewTouchActionGuardManager guardManager = new RecyclerViewTouchActionGuardManager(); - guardManager.setInterceptVerticalScrollingWhileAnimationRunning(true); - guardManager.setEnabled(true); - RecyclerViewSwipeManager swipeManager = new RecyclerViewSwipeManager(); mAdapter = new HistoryAdapter(); mAdapter.setHasStableIds(true); - mAdapter = swipeManager.createWrappedAdapter(mAdapter); mRecyclerView.setAdapter(mAdapter); - final GeneralItemAnimator animator = new SwipeDismissItemAnimator(); - animator.setSupportsChangeAnimations(false); - mRecyclerView.setItemAnimator(animator); AutoStaggeredGridLayoutManager layoutManager = new AutoStaggeredGridLayoutManager( 0, StaggeredGridLayoutManager.VERTICAL); layoutManager.setColumnSize(resources.getDimensionPixelOffset(Settings.getDetailSizeResId())); @@ -227,8 +209,6 @@ public class HistoryScene extends ToolbarScene { int paddingV = resources.getDimensionPixelOffset(R.dimen.gallery_list_margin_v); MarginItemDecoration decoration = new MarginItemDecoration(interval, paddingH, paddingV, paddingH, paddingV); mRecyclerView.addItemDecoration(decoration); - guardManager.attachRecyclerView(mRecyclerView); - swipeManager.attachRecyclerView(mRecyclerView); mFastScroller.attachToRecyclerView(mRecyclerView); HandlerDrawable handlerDrawable = new HandlerDrawable(); @@ -495,7 +475,7 @@ public class HistoryScene extends ToolbarScene { } } - private static class HistoryHolder extends AbstractSwipeableItemViewHolder { + private static class HistoryHolder extends RecyclerView.ViewHolder { public final View card; public final LoadImageView thumb; @@ -522,12 +502,6 @@ public class HistoryScene extends ToolbarScene { pages = itemView.findViewById(R.id.pages); downloaded = itemView.findViewById(R.id.downloaded); } - - @NonNull - @Override - public View getSwipeableContainerView() { - return card; - } } private class MoveDialogHelper implements DialogInterface.OnClickListener { @@ -563,8 +537,7 @@ public class HistoryScene extends ToolbarScene { } } - private class HistoryAdapter extends RecyclerView.Adapter - implements SwipeableItemAdapter { + private class HistoryAdapter extends RecyclerView.Adapter { private final LayoutInflater mInflater; private final int mListThumbWidth; @@ -642,56 +615,5 @@ public class HistoryScene extends ToolbarScene { public int getItemCount() { return null != mLazyList ? mLazyList.size() : 0; } - - @Override - public int onGetSwipeReactionType(@NonNull HistoryHolder holder, int position, int x, int y) { - return SwipeableItemConstants.REACTION_CAN_SWIPE_LEFT; - } - - @Override - public void onSwipeItemStarted(@NonNull HistoryHolder holder, int position) { - } - - @Override - public void onSetSwipeBackground(@NonNull HistoryHolder holder, int position, int type) { - } - - @Override - public SwipeResultAction onSwipeItem(@NonNull HistoryHolder holder, int position, int result) { - switch (result) { - case SwipeableItemConstants.RESULT_SWIPED_LEFT: - return new SwipeResultActionClear(position); - case SwipeableItemConstants.RESULT_SWIPED_RIGHT: - case SwipeableItemConstants.RESULT_CANCELED: - case SwipeableItemConstants.RESULT_NONE: - case SwipeableItemConstants.RESULT_SWIPED_DOWN: - case SwipeableItemConstants.RESULT_SWIPED_UP: - default: - return new SwipeResultActionDefault(); - } - } - } - - private class SwipeResultActionClear extends SwipeResultActionRemoveItem { - - private final int mPosition; - - protected SwipeResultActionClear(int position) { - mPosition = position; - } - - @Override - protected void onPerformAction() { - super.onPerformAction(); - if (null == mLazyList || null == mAdapter) { - return; - } - - HistoryInfo info = mLazyList.get(mPosition); - EhDB.deleteHistoryInfo(info); - updateLazyList(); - mAdapter.notifyDataSetChanged(); - updateView(true); - } } }