Merge branch 'feature/num-button-view-increment' into feature/clean-numeric-goals

pull/419/head
Jacob Powell 7 years ago
commit 1283a455fe

@ -129,6 +129,14 @@ class HabitCardView(
numberPanel = numberPanelFactory.create().apply { numberPanel = numberPanelFactory.create().apply {
visibility = GONE visibility = GONE
onIncrement = { timestamp ->
triggerRipple(timestamp)
habit?.let { behavior.onIncrement(it, timestamp)}
}
onDecrement = { timestamp ->
triggerRipple(timestamp)
habit?.let { behavior.onDecrement(it, timestamp)}
}
onEdit = { timestamp -> onEdit = { timestamp ->
triggerRipple(timestamp) triggerRipple(timestamp)
habit?.let { behavior.onEdit(it, timestamp) } habit?.let { behavior.onEdit(it, timestamp) }

@ -21,7 +21,9 @@ package org.isoron.uhabits.activities.habits.list.views
import android.content.* import android.content.*
import android.graphics.* import android.graphics.*
import android.support.v4.view.GestureDetectorCompat
import android.text.* import android.text.*
import android.util.Log
import android.view.* import android.view.*
import android.view.View.* import android.view.View.*
import com.google.auto.factory.* import com.google.auto.factory.*
@ -53,9 +55,7 @@ fun Double.toShortString(): String = when {
class NumberButtonView( class NumberButtonView(
@Provided @ActivityContext context: Context, @Provided @ActivityContext context: Context,
@Provided val preferences: Preferences @Provided val preferences: Preferences
) : View(context), ) : View(context) {
OnClickListener,
OnLongClickListener {
var color = 0 var color = 0
set(value) { set(value) {
@ -81,23 +81,33 @@ class NumberButtonView(
invalidate() invalidate()
} }
var onIncrement: () -> Unit = {}
var onDecrement: () -> Unit = {}
var onEdit: () -> Unit = {} var onEdit: () -> Unit = {}
private var drawer: Drawer = Drawer(context) private var drawer: Drawer = Drawer(context)
private val detector: GestureDetector = GestureDetector(
init { context,
setOnClickListener(this) object: GestureDetector.SimpleOnGestureListener()
setOnLongClickListener(this) {
override fun onDown(e: MotionEvent?): Boolean = true
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
onIncrement()
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
return true
} }
override fun onClick(v: View) { override fun onDoubleTap(e: MotionEvent?): Boolean {
if (preferences.isShortToggleEnabled) onEdit() onDecrement()
else showMessage(R.string.long_press_to_edit) performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
return true
} }
override fun onLongClick(v: View): Boolean { override fun onLongPress(e: MotionEvent?) {
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
onEdit() onEdit()
return true
} }
})
override fun onDraw(canvas: Canvas) { override fun onDraw(canvas: Canvas) {
super.onDraw(canvas) super.onDraw(canvas)
@ -110,6 +120,11 @@ class NumberButtonView(
setMeasuredDimension(width, height) setMeasuredDimension(width, height)
} }
override fun onTouchEvent(event: MotionEvent?): Boolean {
detector.onTouchEvent(event)
return true
}
private inner class Drawer(context: Context) { private inner class Drawer(context: Context) {
private val em: Float private val em: Float

@ -57,6 +57,18 @@ class NumberPanelView(
setupButtons() setupButtons()
} }
var onIncrement: (Timestamp) -> Unit = {}
set(value) {
field = value
setupButtons()
}
var onDecrement: (Timestamp) -> Unit = {}
set(value) {
field = value
setupButtons()
}
var onEdit: (Timestamp) -> Unit = {} var onEdit: (Timestamp) -> Unit = {}
set(value) { set(value) {
field = value field = value
@ -78,6 +90,8 @@ class NumberPanelView(
button.color = color button.color = color
button.threshold = threshold button.threshold = threshold
button.units = units button.units = units
button.onIncrement = { onIncrement(timestamp) }
button.onDecrement = { onDecrement(timestamp) }
button.onEdit = { onEdit(timestamp) } button.onEdit = { onEdit(timestamp) }
} }
} }

@ -78,6 +78,26 @@ public class ListHabitsBehavior
screen.showHabitScreen(h); screen.showHabitScreen(h);
} }
public void onIncrement(@NonNull Habit habit, Timestamp timestamp)
{
CheckmarkList checkmarks = habit.getCheckmarks();
double oldValue = checkmarks.getValues(timestamp, timestamp)[0];
commandRunner.execute(
new CreateRepetitionCommand(habit, timestamp, (int)(oldValue + 1000)),
habit.getId());
}
public void onDecrement(@NonNull Habit habit, Timestamp timestamp)
{
CheckmarkList checkmarks = habit.getCheckmarks();
double oldValue = checkmarks.getValues(timestamp, timestamp)[0];
double newValue = oldValue - 1000;
if (newValue < 0) return;
commandRunner.execute(
new CreateRepetitionCommand(habit, timestamp, (int)newValue),
habit.getId());
}
public void onEdit(@NonNull Habit habit, Timestamp timestamp) public void onEdit(@NonNull Habit habit, Timestamp timestamp)
{ {
CheckmarkList checkmarks = habit.getCheckmarks(); CheckmarkList checkmarks = habit.getCheckmarks();

@ -20,6 +20,7 @@
package org.isoron.uhabits.core.ui.screens.habits.list; package org.isoron.uhabits.core.ui.screens.habits.list;
import org.isoron.uhabits.core.*; import org.isoron.uhabits.core.*;
import org.isoron.uhabits.core.commands.CreateRepetitionCommand;
import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.preferences.*; import org.isoron.uhabits.core.preferences.*;
import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.core.utils.*;
@ -36,6 +37,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.COULD_NOT_EXPORT; import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.COULD_NOT_EXPORT;
import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.COULD_NOT_GENERATE_BUG_REPORT; import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.COULD_NOT_GENERATE_BUG_REPORT;
import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.DATABASE_REPAIRED; import static org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior.Message.DATABASE_REPAIRED;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.any; import static org.mockito.Mockito.any;
@ -177,4 +179,33 @@ public class ListHabitsBehaviorTest extends BaseUnitTest
assertFalse(habit1.isCompletedToday()); assertFalse(habit1.isCompletedToday());
} }
@Test
public void testOnIncrement()
{
assertTrue(habit2.isCompletedToday());
assertEquals(habit2.getRepetitions().getNewest().getValue(), 100);
behavior.onIncrement(habit2, DateUtils.getToday());
assertEquals(habit2.getRepetitions().getNewest().getValue(), 1100);
}
@Test
public void testOnDecrement_belowZero() {
assertTrue(habit2.isCompletedToday());
assertEquals(habit2.getRepetitions().getNewest().getValue(), 100);
behavior.onDecrement(habit2, DateUtils.getToday());
assertEquals(habit2.getRepetitions().getNewest().getValue(), 100);
}
@Test
public void testOnDecrement()
{
assertTrue(habit2.isCompletedToday());
commandRunner.execute(
new CreateRepetitionCommand(habit2, DateUtils.getToday(), 4000),
habit2.getId());
assertEquals(habit2.getRepetitions().getNewest().getValue(), 4000);
behavior.onDecrement(habit2, DateUtils.getToday());
assertEquals(habit2.getRepetitions().getNewest().getValue(), 3000);
}
} }
Loading…
Cancel
Save