Skip to content

Commit b38083e

Browse files
committed
feat: undo functionality
Closes #30
1 parent 4423665 commit b38083e

File tree

3 files changed

+52
-2
lines changed

3 files changed

+52
-2
lines changed

app/src/main/java/tech/akpmakes/android/taskkeeper/SwipeHandler.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import android.graphics.Color;
55
import android.graphics.drawable.ColorDrawable;
66
import android.graphics.drawable.Drawable;
7+
import android.os.Handler;
8+
import android.support.design.widget.Snackbar;
79
import android.support.v4.content.ContextCompat;
810
import android.support.v7.widget.RecyclerView;
911
import android.support.v7.widget.helper.ItemTouchHelper;
@@ -16,6 +18,8 @@
1618
import tech.akpmakes.android.taskkeeper.models.WhenEvent;
1719

1820
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;
1923
private final MainActivity mainActivity;
2024

2125
private ColorDrawable bgDelete;
@@ -49,16 +53,36 @@ public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHol
4953
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
5054
WhenEventViewHolder vh = (WhenEventViewHolder) viewHolder;
5155
DatabaseReference item = mainActivity.getAdapter().getRef(vh.getAdapterPosition());
56+
String name = vh.getName().toString();
57+
long when = vh.getWhen();
58+
5259
if(direction == ItemTouchHelper.LEFT) {
5360
item.removeValue();
61+
createSnackbar(REMOVE_ACTION, new WhenEvent(name, when), item);
5462
} else {
5563
WhenEvent evt = new WhenEvent();
5664
evt.setName(vh.getName().toString());
5765
evt.setWhen(new Date().getTime());
5866
item.setValue(evt);
67+
createSnackbar(RESET_ACTION, new WhenEvent(name, when), item);
5968
}
6069
}
6170

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+
6286
@Override
6387
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
6488
if (viewHolder.getAdapterPosition() == -1) {
@@ -105,4 +129,22 @@ private void draw(Drawable icon, ColorDrawable bgColor, View itemView, Canvas c,
105129

106130
icon.draw(c);
107131
}
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+
}
108150
}

app/src/main/java/tech/akpmakes/android/taskkeeper/WhenEventViewHolder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,18 @@ public void setName(String name) {
5959
}
6060

6161
public CharSequence getName() {
62-
return name.getText();
62+
return this.name.getText();
6363
}
6464

6565
public void setWhen(long when) {
6666
this.when = when;
6767
draw();
6868
}
6969

70+
public long getWhen() {
71+
return this.when;
72+
}
73+
7074
private static String millisToShortDHMS(long duration, String extra) {
7175
String res;
7276
long days = TimeUnit.MILLISECONDS.toDays(duration);

app/src/main/res/values/strings.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
enabled for your project, you have a properly configured google-services.json file
1414
and that your device has an internet connection.
1515
</string>
16-
<string name="loading">Loading...</string>
16+
<string name="loading">Loading</string>
1717
<string name="auth_code_fmt">Auth Code: %s</string>
1818
<string name="id_token_fmt">ID Token: %s</string>
1919

@@ -77,4 +77,8 @@
7777
<string name="task_date_placeholder">00/00/0000</string>
7878
<string name="task_time_placeholder">00:00:00</string>
7979
<string name="use_current_time">Use current time</string>
80+
81+
<string name="snackbar_task_reset">Task reset successfully!</string>
82+
<string name="snackbar_task_deleted">Task deleted successfully!</string>
83+
<string name="snackbar_undo_action">UNDO</string>
8084
</resources>

0 commit comments

Comments
 (0)