diff --git a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java b/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java
index 2ca386e18..162f56b9b 100644
--- a/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java
+++ b/app/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.java
@@ -59,7 +59,7 @@ public class HabitCardViewTest extends BaseViewTest
view = new HabitCardView(targetContext);
view.setHabit(habit);
- view.setCheckmarkValues(values);
+ view.setValues(values);
view.setSelected(false);
view.setScore(habit.getScores().getTodayValue());
view.setController(controller);
diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java
index a52c4b4d6..d0b584d05 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsController.java
@@ -157,6 +157,18 @@ public class ListHabitsController
}));
}
+ @Override
+ public void onInvalidEdit()
+ {
+ screen.showMessage(R.string.long_press_to_edit);
+ }
+
+ @Override
+ public void onEdit(@NonNull Habit habit, long timestamp)
+ {
+
+ }
+
@Override
public void onInvalidToggle()
diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java
index 01e2b4643..aa29f37c3 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardController.java
@@ -21,8 +21,8 @@ package org.isoron.uhabits.activities.habits.list.controllers;
import android.support.annotation.*;
-import org.isoron.uhabits.models.Habit;
-import org.isoron.uhabits.activities.habits.list.views.HabitCardView;
+import org.isoron.uhabits.activities.habits.list.views.*;
+import org.isoron.uhabits.models.*;
public class HabitCardController implements HabitCardView.Controller
{
@@ -32,6 +32,18 @@ public class HabitCardController implements HabitCardView.Controller
@Nullable
private Listener listener;
+ @Override
+ public void onEdit(@NonNull Habit habit, long timestamp)
+ {
+ if(listener != null) listener.onEdit(habit, timestamp);
+ }
+
+ @Override
+ public void onInvalidEdit()
+ {
+ if(listener != null) listener.onInvalidEdit();
+ }
+
@Override
public void onInvalidToggle()
{
@@ -55,7 +67,9 @@ public class HabitCardController implements HabitCardView.Controller
this.view = view;
}
- public interface Listener extends CheckmarkButtonController.Listener
+ public interface Listener extends CheckmarkButtonController.Listener,
+ NumberButtonController.Listener
{
+
}
}
diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java
index d710c3572..0d62048bc 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/controllers/HabitCardListController.java
@@ -21,9 +21,9 @@ package org.isoron.uhabits.activities.habits.list.controllers;
import android.support.annotation.*;
-import org.isoron.uhabits.models.*;
import org.isoron.uhabits.activities.habits.list.model.*;
import org.isoron.uhabits.activities.habits.list.views.*;
+import org.isoron.uhabits.models.*;
/**
* Controller responsible for receiving and processing the events generated by a
@@ -75,6 +75,18 @@ public class HabitCardListController implements HabitCardListView.Controller
habitListener.onHabitReorder(habitFrom, habitTo);
}
+ @Override
+ public void onEdit(@NonNull Habit habit, long timestamp)
+ {
+ if (habitListener != null) habitListener.onEdit(habit, timestamp);
+ }
+
+ @Override
+ public void onInvalidEdit()
+ {
+ if (habitListener != null) habitListener.onInvalidEdit();
+ }
+
/**
* Called when the user attempts to perform a toggle, but attempt is
* rejected.
@@ -172,7 +184,8 @@ public class HabitCardListController implements HabitCardListView.Controller
if (selectionListener != null) selectionListener.onSelectionFinish();
}
- public interface HabitListener extends CheckmarkButtonController.Listener
+ public interface HabitListener extends CheckmarkButtonController.Listener,
+ NumberButtonController.Listener
{
/**
* Called when the user clicks a habit.
diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java
index bc784465e..51e22c65d 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.java
@@ -91,8 +91,8 @@ public class HabitCardListView extends RecyclerView
HabitCardView cardView = (HabitCardView) holder.itemView;
cardView.setHabit(habit);
cardView.setSelected(selected);
- cardView.setCheckmarkValues(checkmarks);
- cardView.setCheckmarkCount(checkmarkCount);
+ cardView.setValues(checkmarks);
+ cardView.setButtonCount(checkmarkCount);
cardView.setDataOffset(dataOffset);
cardView.setScore(score);
if (controller != null) setupCardViewController(holder);
diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java
index e703ba18c..028da530c 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.java
@@ -56,6 +56,9 @@ public class HabitCardView extends FrameLayout
@BindView(R.id.checkmarkPanel)
CheckmarkPanelView checkmarkPanel;
+ @BindView(R.id.numberPanel)
+ NumberPanelView numberPanel;
+
@BindView(R.id.innerFrame)
LinearLayout innerFrame;
@@ -92,28 +95,38 @@ public class HabitCardView extends FrameLayout
new Handler(Looper.getMainLooper()).post(() -> refresh());
}
- public void setCheckmarkCount(int checkmarkCount)
+ public void setButtonCount(int buttonCount)
{
- checkmarkPanel.setButtonCount(checkmarkCount);
+ checkmarkPanel.setButtonCount(buttonCount);
+ numberPanel.setButtonCount(buttonCount);
}
- public void setCheckmarkValues(int checkmarks[])
+ public void setValues(int values[])
{
- checkmarkPanel.setValues(checkmarks);
+ checkmarkPanel.setValues(values);
+
+ int[] magnitudes = new int[]{10, 100, 1000, 10000};
+ int threshold = magnitudes[new Random().nextInt(4)];
+ numberPanel.setThreshold(threshold);
+ numberPanel.initEditMode();
+
postInvalidate();
}
public void setController(Controller controller)
{
checkmarkPanel.setController(null);
+ numberPanel.setController(null);
if (controller == null) return;
checkmarkPanel.setController(controller);
+ numberPanel.setController(controller);
}
public void setDataOffset(int dataOffset)
{
this.dataOffset = dataOffset;
checkmarkPanel.setDataOffset(dataOffset);
+ numberPanel.setDataOffset(dataOffset);
}
public void setHabit(@NonNull Habit habit)
@@ -122,6 +135,7 @@ public class HabitCardView extends FrameLayout
this.habit = habit;
checkmarkPanel.setHabit(habit);
+ numberPanel.setHabit(habit);
refresh();
attachToHabit();
@@ -191,7 +205,8 @@ public class HabitCardView extends FrameLayout
inflate(context, R.layout.list_habits_card, this);
ButterKnife.bind(this);
- innerFrame.setOnTouchListener((v, event) -> {
+ innerFrame.setOnTouchListener((v, event) ->
+ {
if (SDK_INT >= LOLLIPOP)
v.getBackground().setHotspot(event.getX(), event.getY());
return false;
@@ -205,15 +220,12 @@ public class HabitCardView extends FrameLayout
{
Random rand = new Random();
int color = ColorUtils.getAndroidTestColor(rand.nextInt(10));
- int[] values = new int[5];
- for (int i = 0; i < 5; i++) values[i] = rand.nextInt(3);
-
label.setText(EDIT_MODE_HABITS[rand.nextInt(EDIT_MODE_HABITS.length)]);
label.setTextColor(color);
scoreRing.setColor(color);
scoreRing.setPercentage(rand.nextFloat());
checkmarkPanel.setColor(color);
- checkmarkPanel.setValues(values);
+ numberPanel.setColor(color);
}
private void refresh()
@@ -223,6 +235,12 @@ public class HabitCardView extends FrameLayout
label.setTextColor(color);
scoreRing.setColor(color);
checkmarkPanel.setColor(color);
+ numberPanel.setColor(color);
+
+ boolean isNumberHabit = false; //(new Random().nextInt(3) == 0);
+ checkmarkPanel.setVisibility(isNumberHabit ? GONE : VISIBLE);
+ numberPanel.setVisibility(isNumberHabit ? VISIBLE : GONE);
+
postInvalidate();
}
@@ -256,5 +274,9 @@ public class HabitCardView extends FrameLayout
}
}
- public interface Controller extends CheckmarkPanelView.Controller {}
+ public interface Controller
+ extends CheckmarkPanelView.Controller, NumberPanelView.Controller
+ {
+
+ }
}
diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.java
index 1d4d4f103..ff4e622d6 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.java
@@ -36,7 +36,7 @@ import static org.isoron.uhabits.utils.ColorUtils.*;
public class NumberButtonView extends TextView
{
private static Typeface TYPEFACE =
- Typeface.create("sans-serif-condensed", Typeface.BOLD);
+ Typeface.create("sans-serif-condensed", Typeface.NORMAL);
private int color;
@@ -72,13 +72,13 @@ public class NumberButtonView extends TextView
private static String formatValue(int v)
{
double fv = (double) v;
- if(v >= 1e9) return String.format("%.2fG", fv / 1e9);
+ if(v >= 1e9) return String.format("%.1fG", fv / 1e9);
if(v >= 1e8) return String.format("%.0fM", fv / 1e6);
if(v >= 1e7) return String.format("%.1fM", fv / 1e6);
- if(v >= 1e6) return String.format("%.2fM", fv / 1e6);
+ if(v >= 1e6) return String.format("%.1fM", fv / 1e6);
if(v >= 1e5) return String.format("%.0fk", fv / 1e3);
if(v >= 1e4) return String.format("%.1fk", fv / 1e3);
- if(v >= 1e3) return String.format("%.2fk", fv / 1e3);
+ if(v >= 1e3) return String.format("%.1fk", fv / 1e3);
return String.format("%d", v);
}
diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java
index 16ac11e9a..cfbf3de15 100644
--- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java
+++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.java
@@ -84,7 +84,7 @@ public class NumberPanelView extends LinearLayout
if(isInEditMode()) initEditMode();
}
- private void initEditMode()
+ public void initEditMode()
{
int values[] = new int[nButtons];
diff --git a/app/src/main/res/layout/list_habits_card.xml b/app/src/main/res/layout/list_habits_card.xml
index 7b8d0f54d..6109c7472 100644
--- a/app/src/main/res/layout/list_habits_card.xml
+++ b/app/src/main/res/layout/list_habits_card.xml
@@ -46,6 +46,11 @@
android:id="@+id/checkmarkPanel"
style="@style/ListHabits.CheckmarkPanel"/>
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1e94bea9a..a28e7e576 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -204,4 +204,6 @@
By score
Download
Export
+ Press-and-hold to change the
+ value
\ No newline at end of file