From 3f006f62702939f52c906fe2e28953c82635e3dc Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 12 Apr 2022 15:22:28 -0500 Subject: [PATCH] Add notes to DelayedToggle, make delay skipable --- .../habits/list/views/EntryButtonViewTest.kt | 2 +- .../habits/list/views/EntryPanelViewTest.kt | 4 ++-- .../habits/list/views/CheckmarkButtonView.kt | 12 ++++++----- .../habits/list/views/CheckmarkPanelView.kt | 4 ++-- .../habits/list/views/HabitCardView.kt | 20 +++++++++---------- .../screens/habits/list/ListHabitsBehavior.kt | 3 +-- .../habits/list/ListHabitsBehaviorTest.kt | 7 ++++++- 7 files changed, 29 insertions(+), 23 deletions(-) diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt index 6184b44a9..e45569d99 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryButtonViewTest.kt @@ -43,7 +43,7 @@ class EntryButtonViewTest : BaseViewTest() { view = component.getEntryButtonViewFactory().create().apply { value = Entry.NO color = PaletteUtils.getAndroidTestColor(5) - onToggle = { toggled = true } + onToggle = { _, _, _ -> toggled = true } } measureView(view, dpToPixels(48), dpToPixels(48)) } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryPanelViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryPanelViewTest.kt index 7aff33f0a..f09c48dba 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryPanelViewTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/EntryPanelViewTest.kt @@ -77,7 +77,7 @@ class EntryPanelViewTest : BaseViewTest() { @Test fun testToggle() { val timestamps = mutableListOf() - view.onToggle = { t, _ -> timestamps.add(t) } + view.onToggle = { t, _, _, _ -> timestamps.add(t) } view.buttons[0].performLongClick() view.buttons[2].performLongClick() view.buttons[3].performLongClick() @@ -88,7 +88,7 @@ class EntryPanelViewTest : BaseViewTest() { fun testToggle_withOffset() { val timestamps = mutableListOf() view.dataOffset = 3 - view.onToggle = { t, _ -> timestamps += t } + view.onToggle = { t, _, _, _ -> timestamps += t } view.buttons[0].performLongClick() view.buttons[2].performLongClick() view.buttons[3].performLongClick() diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt index 604c5720b..b50d3ab44 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt @@ -44,6 +44,8 @@ import org.isoron.uhabits.utils.sres import org.isoron.uhabits.utils.toMeasureSpec import javax.inject.Inject +const val TOGGLE_DELAY_MILLIS = 2000L + class CheckmarkButtonViewFactory @Inject constructor( @ActivityContext val context: Context, @@ -77,7 +79,7 @@ class CheckmarkButtonView( invalidate() } - var onToggle: (Int) -> Unit = {} + var onToggle: (Int, String, Long) -> Unit = { _, _, _ -> } var onEdit: () -> Unit = {} private var drawer = Drawer() @@ -87,25 +89,25 @@ class CheckmarkButtonView( setOnLongClickListener(this) } - fun performToggle() { + fun performToggle(delay: Long) { value = Entry.nextToggleValue( value = value, isSkipEnabled = preferences.isSkipEnabled, areQuestionMarksEnabled = preferences.areQuestionMarksEnabled ) - onToggle(value) + onToggle(value, notes, delay) performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) invalidate() } override fun onClick(v: View) { - if (preferences.isShortToggleEnabled) performToggle() + if (preferences.isShortToggleEnabled) performToggle(TOGGLE_DELAY_MILLIS) else onEdit() } override fun onLongClick(v: View): Boolean { if (preferences.isShortToggleEnabled) onEdit() - else performToggle() + else performToggle(TOGGLE_DELAY_MILLIS) return true } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt index 76df675ec..9a44fde10 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt @@ -60,7 +60,7 @@ class CheckmarkPanelView( setupButtons() } - var onToggle: (Timestamp, Int) -> Unit = { _, _ -> } + var onToggle: (Timestamp, Int, String, Long) -> Unit = { _, _, _, _ -> } set(value) { field = value setupButtons() @@ -89,7 +89,7 @@ class CheckmarkPanelView( else -> "" } button.color = color - button.onToggle = { value -> onToggle(timestamp, value) } + button.onToggle = { value, notes, delay -> onToggle(timestamp, value, notes, delay) } button.onEdit = { onEdit(timestamp) } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt index 209f95cc2..c0ead0578 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt @@ -60,7 +60,8 @@ class HabitCardViewFactory data class DelayedToggle( var habit: Habit, var timestamp: Timestamp, - var value: Int + var value: Int, + var notes: String ) class HabitCardView( @@ -157,11 +158,11 @@ class HabitCardView( } checkmarkPanel = checkmarkPanelFactory.create().apply { - onToggle = { timestamp, value -> - triggerRipple(timestamp) + onToggle = { timestamp, value, notes, delay -> + if (delay > 0) triggerRipple(timestamp) habit?.let { - val taskId = queueToggle(it, timestamp, value); - { runPendingToggles(taskId) }.delay(TOGGLE_DELAY_MILLIS) + val taskId = queueToggle(it, timestamp, value, notes); + { runPendingToggles(taskId) }.delay(delay) } } onEdit = { timestamp -> @@ -205,7 +206,7 @@ class HabitCardView( @Synchronized private fun runPendingToggles(id: Int) { if (currentToggleTaskId != id) return - for ((h, t, v) in queuedToggles) behavior.onToggle(h, t, v) + for ((h, t, v, n) in queuedToggles) behavior.onToggle(h, t, v, n) queuedToggles.clear() } @@ -213,10 +214,11 @@ class HabitCardView( private fun queueToggle( it: Habit, timestamp: Timestamp, - value: Int + value: Int, + notes: String, ): Int { currentToggleTaskId += 1 - queuedToggles.add(DelayedToggle(it, timestamp, value)) + queuedToggles.add(DelayedToggle(it, timestamp, value, notes)) return currentToggleTaskId } @@ -306,8 +308,6 @@ class HabitCardView( } companion object { - const val TOGGLE_DELAY_MILLIS = 1000L - fun (() -> Unit).delay(delayInMillis: Long) { Handler(Looper.getMainLooper()).postDelayed(this, delayInMillis) } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt index 278d904db..d4aa170cf 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehavior.kt @@ -123,8 +123,7 @@ open class ListHabitsBehavior @Inject constructor( if (prefs.isFirstRun) onFirstRun() } - fun onToggle(habit: Habit, timestamp: Timestamp?, value: Int) { - val notes = habit.computedEntries.get(timestamp!!).notes + fun onToggle(habit: Habit, timestamp: Timestamp, value: Int, notes: String) { commandRunner.run( CreateRepetitionCommand(habitList, habit, timestamp, value, notes) ) diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt index 4df4a28f3..02637192a 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/screens/habits/list/ListHabitsBehaviorTest.kt @@ -168,7 +168,12 @@ class ListHabitsBehaviorTest : BaseUnitTest() { @Test fun testOnToggle() { assertTrue(habit1.isCompletedToday()) - behavior.onToggle(habit1, getToday(), Entry.NO) + behavior.onToggle( + habit = habit1, + timestamp = getToday(), + value = Entry.NO, + notes = "" + ) assertFalse(habit1.isCompletedToday()) } }