diff --git a/app/src/main/java/ru/vtosters/lite/ui/adapters/StickerPackAdapter.java b/app/src/main/java/ru/vtosters/lite/ui/adapters/StickerPackAdapter.java index d3b0c6893..062d3b1be 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/adapters/StickerPackAdapter.java +++ b/app/src/main/java/ru/vtosters/lite/ui/adapters/StickerPackAdapter.java @@ -24,11 +24,13 @@ import com.aefyr.tsg.g2.TelegramStickersPack; import com.aefyr.tsg.g2.TelegramStickersService; import java.io.File; +import java.util.Collections; import ru.vtosters.lite.tgs.TGPref; +import ru.vtosters.lite.ui.components.IItemMovingListener; import ru.vtosters.lite.utils.AndroidUtils; -public class StickerPackAdapter extends RecyclerView.Adapter { +public class StickerPackAdapter extends RecyclerView.Adapter implements IItemMovingListener { private static final TelegramStickersService sService = TelegramStickersService.getInstance(getGlobalContext()); @SuppressLint("UseCompatLoadingForDrawables") @@ -62,6 +64,26 @@ public class StickerPackAdapter extends RecyclerView.Adapter toPosition; i--) { + sService.swap(sService.getPacksListReference().get(i), sService.getPacksListReference().get(i - 1)); + } + } + notifyItemMoved(fromPosition, toPosition); + return true; + } + public class StickerPackViewHolder extends RecyclerView.ViewHolder { private final LinearLayout mContainer; private final ImageView mStickerPreview; diff --git a/app/src/main/java/ru/vtosters/lite/ui/components/StickerTouchHelperCallback.java b/app/src/main/java/ru/vtosters/lite/ui/components/StickerTouchHelperCallback.java new file mode 100644 index 000000000..019ca4f36 --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/ui/components/StickerTouchHelperCallback.java @@ -0,0 +1,43 @@ +package ru.vtosters.lite.ui.components; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.RecyclerView; + +public class StickerTouchHelperCallback extends ItemTouchHelper.Callback { + private final IItemMovingListener itemAdapter; + + public StickerTouchHelperCallback(IItemMovingListener adapter) { + itemAdapter = adapter; + } + + @Override + public boolean isLongPressDragEnabled() { + return true; + } + + @Override + public boolean isItemViewSwipeEnabled() { + return false; + } + + @Override + public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | + ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; + + int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; + return makeMovementFlags(dragFlags, swipeFlags); + } + + @Override + public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { + itemAdapter.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + return false; + } + + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) { + + } +} diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/tgstickers/StickersFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/tgstickers/StickersFragment.java index 3ad52847c..fcdacfad9 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/tgstickers/StickersFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/tgstickers/StickersFragment.java @@ -31,6 +31,7 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager; @@ -43,6 +44,7 @@ import java.io.File; import ru.vtosters.lite.tgs.TGPref; import ru.vtosters.lite.ui.adapters.StickerPackAdapter; +import ru.vtosters.lite.ui.components.StickerTouchHelperCallback; import ru.vtosters.lite.ui.fragments.BaseToolbarFragment; import ru.vtosters.lite.utils.AndroidUtils; @@ -120,6 +122,11 @@ public class StickersFragment extends BaseToolbarFragment { mAdapter = new StickerPackAdapter(); RecyclerView mRecycler = new RecyclerView(getContext()); + + var callback = new StickerTouchHelperCallback(mAdapter); + var touchHelper = new ItemTouchHelper(callback); + touchHelper.attachToRecyclerView(mRecycler); + mRecycler.setAdapter(mAdapter); mRecycler.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); layout.addView(mRecycler, new ViewGroup.LayoutParams(-1, -1));