From 4db7a6e89c251bccdc2b426cbb9768d57807e8b0 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Sun, 1 May 2016 08:21:36 -0400 Subject: [PATCH] Show larger ripple when toggling check marks Closes #78 --- .../uhabits/fragments/ListHabitsFragment.java | 15 ++++----- .../uhabits/helpers/ListHabitsHelper.java | 31 +++++++++++++++++++ .../res/values-v21/styles_list_habits.xml | 4 --- .../main/res/values/styles_list_habits.xml | 6 +--- 4 files changed, 40 insertions(+), 16 deletions(-) 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 - - - -