diff --git a/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java b/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java
index 9ab74a709..1319a69b1 100644
--- a/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java
+++ b/app/src/main/java/org/isoron/uhabits/fragments/ListHabitsFragment.java
@@ -330,17 +330,18 @@ public class ListHabitsFragment extends Fragment
private void toggleCheck(View v)
{
- Long tag = (Long) v.getTag(R.string.habit_key);
- Integer offset = (Integer) v.getTag(R.string.offset_key);
- long timestamp = DateHelper.getStartOfDay(
- DateHelper.getLocalTime() - offset * DateHelper.millisecondsInOneDay);
-
- Habit habit = loader.habits.get(tag);
+ Long id = helper.getHabitIdFromCheckmarkView(v);
+ Habit habit = loader.habits.get(id);
if(habit == null) return;
- listView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
+ float x = v.getX() + v.getWidth() / 2.0f + ((View) v.getParent()).getX();
+ float y = v.getY() + v.getHeight() / 2.0f + ((View) v.getParent()).getY();
+ helper.triggerRipple((View) v.getParent().getParent(), x, y);
+ listView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
helper.toggleCheckmarkView(v, habit);
+
+ long timestamp = helper.getTimestampFromCheckmarkView(v);
executeCommand(new ToggleRepetitionCommand(habit, timestamp), habit.getId());
}
diff --git a/app/src/main/java/org/isoron/uhabits/helpers/ListHabitsHelper.java b/app/src/main/java/org/isoron/uhabits/helpers/ListHabitsHelper.java
index 009333d1b..dbc0113f6 100644
--- a/app/src/main/java/org/isoron/uhabits/helpers/ListHabitsHelper.java
+++ b/app/src/main/java/org/isoron/uhabits/helpers/ListHabitsHelper.java
@@ -21,6 +21,7 @@ package org.isoron.uhabits.helpers;
import android.content.Context;
import android.graphics.drawable.Drawable;
+import android.os.Handler;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
@@ -241,6 +242,36 @@ public class ListHabitsHelper
updateCheckmark(androidColor, (TextView) v, 2);
}
+ public Long getHabitIdFromCheckmarkView(View v)
+ {
+ return (Long) v.getTag(R.string.habit_key);
+ }
+
+ public long getTimestampFromCheckmarkView(View v)
+ {
+ Integer offset = (Integer) v.getTag(R.string.offset_key);
+ return DateHelper.getStartOfDay(DateHelper.getLocalTime() -
+ offset * DateHelper.millisecondsInOneDay);
+ }
+
+ public void triggerRipple(View v, final float x, final float y)
+ {
+ final Drawable background = v.getBackground();
+ if (android.os.Build.VERSION.SDK_INT >= 21)
+ background.setHotspot(x, y);
+
+ background.setState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled});
+
+ new Handler().postDelayed(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ background.setState(new int[]{});
+ }
+ }, 25);
+ }
+
private static class HotspotTouchListener implements View.OnTouchListener
{
@Override
diff --git a/app/src/main/res/values-v21/styles_list_habits.xml b/app/src/main/res/values-v21/styles_list_habits.xml
index 328e0c1bf..b3dda8c83 100644
--- a/app/src/main/res/values-v21/styles_list_habits.xml
+++ b/app/src/main/res/values-v21/styles_list_habits.xml
@@ -28,8 +28,4 @@
- true
- 4dp
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/styles_list_habits.xml b/app/src/main/res/values/styles_list_habits.xml
index aba3ff2e8..10e079e0e 100644
--- a/app/src/main/res/values/styles_list_habits.xml
+++ b/app/src/main/res/values/styles_list_habits.xml
@@ -72,17 +72,13 @@
- center_vertical
-
-
-
-