diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java
index 18cf407..f245a33 100644
--- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java
+++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/library/LibraryFragment.java
@@ -1,19 +1,11 @@
package com.majinnaibu.monstercards.ui.library;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffXfermode;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
import androidx.navigation.NavDirections;
import androidx.navigation.Navigation;
import androidx.recyclerview.widget.ItemTouchHelper;
@@ -27,6 +19,7 @@ import com.majinnaibu.monstercards.data.MonsterRepository;
import com.majinnaibu.monstercards.models.Monster;
import com.majinnaibu.monstercards.ui.MCFragment;
import com.majinnaibu.monstercards.ui.MonsterListRecyclerViewAdapter;
+import com.majinnaibu.monstercards.ui.shared.SwipeToDeleteCallback;
import com.majinnaibu.monstercards.utils.Logger;
import java.util.UUID;
@@ -41,30 +34,10 @@ public class LibraryFragment extends MCFragment {
View root = inflater.inflate(R.layout.fragment_library, container, false);
FloatingActionButton fab = root.findViewById(R.id.fab);
- fab.setOnClickListener(view -> {
- Monster monster = new Monster();
- monster.name = "Unnamed Monster";
- MonsterRepository repository = this.getMonsterRepository();
- repository.addMonster(monster)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(() -> {
- Snackbar.make(
- getView(),
- String.format("%s created", monster.name),
- Snackbar.LENGTH_LONG)
- .setAction("Action", (_view) -> {
- navigateToMonsterDetail(monster.id);
- })
- .show();
- }, throwable -> {
- Logger.logError("Error creating monster", throwable);
- Snackbar.make(getView(), "Failed to create monster", Snackbar.LENGTH_LONG)
- .setAction("Action", null).show();
- });
- });
+ assert fab != null;
+ setupAddMonsterButton(fab);
- RecyclerView recyclerView = root.findViewById(R.id.monster_list);
+ final RecyclerView recyclerView = root.findViewById(R.id.monster_list);
assert recyclerView != null;
setupRecyclerView(recyclerView);
@@ -89,69 +62,40 @@ public class LibraryFragment extends MCFragment {
mTwoPane);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
- ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteMonsterCallback(adapter));
+ ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(getContext(), (position) -> {
+ adapter.deleteItem(position);
+ }));
itemTouchHelper.attachToRecyclerView(recyclerView);
}
+ private void setupAddMonsterButton(@NonNull FloatingActionButton fab) {
+ fab.setOnClickListener(view -> {
+ Monster monster = new Monster();
+ monster.name = "Unnamed Monster";
+ MonsterRepository repository = this.getMonsterRepository();
+ repository.addMonster(monster)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(() -> {
+ Snackbar.make(
+ getView(),
+ String.format("%s created", monster.name),
+ Snackbar.LENGTH_LONG)
+ .setAction("Action", (_view) -> {
+ navigateToMonsterDetail(monster.id);
+ })
+ .show();
+ }, throwable -> {
+ Logger.logError("Error creating monster", throwable);
+ Snackbar.make(getView(), "Failed to create monster", Snackbar.LENGTH_LONG)
+ .setAction("Action", null).show();
+ });
+ });
+
+ }
+
protected void navigateToMonsterDetail(UUID monsterId) {
NavDirections action = LibraryFragmentDirections.actionNavigationLibraryToNavigationMonster(monsterId.toString());
Navigation.findNavController(getView()).navigate(action);
}
-
- public static class SwipeToDeleteMonsterCallback extends ItemTouchHelper.SimpleCallback {
- private final MonsterListRecyclerViewAdapter mAdapter;
- private final Drawable icon;
- private final ColorDrawable background;
- private final Paint clearPaint;
-
- public SwipeToDeleteMonsterCallback(MonsterListRecyclerViewAdapter adapter) {
- super(0, ItemTouchHelper.LEFT);
- mAdapter = adapter;
- icon = ContextCompat.getDrawable(mAdapter.getContext(), R.drawable.ic_delete_white_36);
- background = new ColorDrawable(Color.RED);
- clearPaint = new Paint();
- clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
- }
-
- @Override
- public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
- return false;
- }
-
- @Override
- public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
- int position = viewHolder.getAdapterPosition();
- mAdapter.deleteItem(position);
- }
-
- @Override
- public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
- View itemView = viewHolder.itemView;
- int itemHeight = itemView.getBottom() - itemView.getTop();
- boolean isCancelled = dX == 0 && !isCurrentlyActive;
-
- if (isCancelled) {
- c.drawRect(itemView.getRight() + dX, itemView.getTop(), itemView.getRight(), itemView.getBottom(), clearPaint);
- return;
- }
- // Draw the red delete background
- background.setBounds(itemView.getRight() + (int) dX, itemView.getTop(), itemView.getRight(), itemView.getBottom());
- background.draw(c);
-
- // Calculate position of delete icon
- int iconHeight = icon.getIntrinsicHeight();
- int iconWidth = icon.getIntrinsicWidth();
- int iconTop = itemView.getTop() + (itemHeight - iconHeight) / 2;
- int iconMargin = (itemHeight - iconHeight) / 2;
- int iconLeft = itemView.getRight() - iconMargin - iconWidth;
- int iconRight = itemView.getRight() - iconMargin;
- int iconBottom = iconTop + iconHeight;
-
- // Draw the icon
- icon.setBounds(iconLeft, iconTop, iconRight, iconBottom);
- icon.draw(c);
-
- super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
- }
- }
}
diff --git a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/shared/SwipeToDeleteCallback.java b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/shared/SwipeToDeleteCallback.java
index 4fd376c..46830c2 100644
--- a/Android/app/src/main/java/com/majinnaibu/monstercards/ui/shared/SwipeToDeleteCallback.java
+++ b/Android/app/src/main/java/com/majinnaibu/monstercards/ui/shared/SwipeToDeleteCallback.java
@@ -18,17 +18,19 @@ import com.majinnaibu.monstercards.R;
public class SwipeToDeleteCallback extends ItemTouchHelper.SimpleCallback {
+ public interface OnDeleteCallback {
+ void onDelete(int position);
+ }
+
private final Drawable icon;
private final ColorDrawable background;
private final Paint clearPaint;
- private final OnSwipeCallback mOnDelete;
- private final OnMoveCallback mOnMove;
+ private final OnDeleteCallback mOnDelete;
private final Context mContext;
- public SwipeToDeleteCallback(@NonNull Context context, OnSwipeCallback onDelete, OnMoveCallback onMove) {
- super(onMove == null ? 0 : ItemTouchHelper.UP | ItemTouchHelper.DOWN, onDelete == null ? 0 : ItemTouchHelper.LEFT);
+ public SwipeToDeleteCallback(Context context, OnDeleteCallback onDelete) {
+ super(0, ItemTouchHelper.LEFT);
mOnDelete = onDelete;
- mOnMove = onMove;
mContext = context;
icon = ContextCompat.getDrawable(mContext, R.drawable.ic_delete_white_36);
background = new ColorDrawable(context.getResources().getColor(R.color.red));
@@ -42,11 +44,6 @@ public class SwipeToDeleteCallback extends ItemTouchHelper.SimpleCallback {
@NonNull RecyclerView.ViewHolder viewHolder,
@NonNull RecyclerView.ViewHolder target
) {
- if (mOnMove != null) {
- int from = viewHolder.getAdapterPosition();
- int to = target.getAdapterPosition();
- return mOnMove.onMove(from, to);
- }
return false;
}
@@ -54,7 +51,7 @@ public class SwipeToDeleteCallback extends ItemTouchHelper.SimpleCallback {
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
if (mOnDelete != null) {
int position = viewHolder.getAdapterPosition();
- mOnDelete.onSwipe(position, direction);
+ mOnDelete.onDelete(position);
}
}
@@ -87,12 +84,4 @@ public class SwipeToDeleteCallback extends ItemTouchHelper.SimpleCallback {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
-
- public interface OnSwipeCallback {
- void onSwipe(int position, int direction);
- }
-
- public interface OnMoveCallback {
- boolean onMove(int from, int to);
- }
}
diff --git a/Android/app/src/main/res/values/colors.xml b/Android/app/src/main/res/values/colors.xml
index b91e898..ba0ed7c 100644
--- a/Android/app/src/main/res/values/colors.xml
+++ b/Android/app/src/main/res/values/colors.xml
@@ -4,4 +4,14 @@
#661A10
#995500
+
+
+ #FF3B30
+ #FF9500
+ #FFCC00
+ #4CD964
+ #5AC8FA
+ #007AFF
+ #5855D6
+ #FF2D55
\ No newline at end of file