|
4 | 4 | import android.graphics.Color; |
5 | 5 | import android.graphics.drawable.ColorDrawable; |
6 | 6 | import android.graphics.drawable.Drawable; |
| 7 | +import android.os.Handler; |
| 8 | +import android.support.design.widget.Snackbar; |
7 | 9 | import android.support.v4.content.ContextCompat; |
8 | 10 | import android.support.v7.widget.RecyclerView; |
9 | 11 | import android.support.v7.widget.helper.ItemTouchHelper; |
|
16 | 18 | import tech.akpmakes.android.taskkeeper.models.WhenEvent; |
17 | 19 |
|
18 | 20 | class SwipeHandler extends ItemTouchHelper.SimpleCallback { |
| 21 | + private static final int REMOVE_ACTION = R.string.snackbar_task_deleted; |
| 22 | + private static final int RESET_ACTION = R.string.snackbar_task_reset; |
19 | 23 | private final MainActivity mainActivity; |
20 | 24 |
|
21 | 25 | private ColorDrawable bgDelete; |
@@ -49,16 +53,36 @@ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHol |
49 | 53 | public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { |
50 | 54 | WhenEventViewHolder vh = (WhenEventViewHolder) viewHolder; |
51 | 55 | DatabaseReference item = mainActivity.getAdapter().getRef(vh.getAdapterPosition()); |
| 56 | + String name = vh.getName().toString(); |
| 57 | + long when = vh.getWhen(); |
| 58 | + |
52 | 59 | if(direction == ItemTouchHelper.LEFT) { |
53 | 60 | item.removeValue(); |
| 61 | + createSnackbar(REMOVE_ACTION, new WhenEvent(name, when), item); |
54 | 62 | } else { |
55 | 63 | WhenEvent evt = new WhenEvent(); |
56 | 64 | evt.setName(vh.getName().toString()); |
57 | 65 | evt.setWhen(new Date().getTime()); |
58 | 66 | item.setValue(evt); |
| 67 | + createSnackbar(RESET_ACTION, new WhenEvent(name, when), item); |
59 | 68 | } |
60 | 69 | } |
61 | 70 |
|
| 71 | + private void createSnackbar(int action, WhenEvent evt, DatabaseReference item) { |
| 72 | + final Snackbar sb = Snackbar.make(mainActivity.findViewById(android.R.id.content), |
| 73 | + mainActivity.getString(action), Snackbar.LENGTH_INDEFINITE); |
| 74 | + sb.setAction(R.string.snackbar_undo_action, new UndoListener(evt, item, sb)); |
| 75 | + sb.show(); |
| 76 | + |
| 77 | + final Handler handler = new Handler(); |
| 78 | + handler.postDelayed(new Runnable() { |
| 79 | + @Override |
| 80 | + public void run() { |
| 81 | + sb.dismiss(); |
| 82 | + } |
| 83 | + }, 5000); |
| 84 | + } |
| 85 | + |
62 | 86 | @Override |
63 | 87 | public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { |
64 | 88 | if (viewHolder.getAdapterPosition() == -1) { |
@@ -105,4 +129,22 @@ private void draw(Drawable icon, ColorDrawable bgColor, View itemView, Canvas c, |
105 | 129 |
|
106 | 130 | icon.draw(c); |
107 | 131 | } |
| 132 | + |
| 133 | + private class UndoListener implements View.OnClickListener { |
| 134 | + WhenEvent event; |
| 135 | + DatabaseReference dbRef; |
| 136 | + Snackbar snackbar; |
| 137 | + |
| 138 | + UndoListener(WhenEvent evt, DatabaseReference dbRef, Snackbar snackbar) { |
| 139 | + this.event = evt; |
| 140 | + this.dbRef = dbRef; |
| 141 | + this.snackbar = snackbar; |
| 142 | + } |
| 143 | + |
| 144 | + @Override |
| 145 | + public void onClick(View view) { |
| 146 | + this.dbRef.setValue(this.event); |
| 147 | + this.snackbar.dismiss(); |
| 148 | + } |
| 149 | + } |
108 | 150 | } |
0 commit comments