diff --git a/Habitica/Habitica.iml b/Habitica/Habitica.iml
index 63d46089c..c4032a292 100644
--- a/Habitica/Habitica.iml
+++ b/Habitica/Habitica.iml
@@ -112,8 +112,8 @@
-
+
@@ -134,8 +134,8 @@
-
+
@@ -147,15 +147,15 @@
-
-
+
+
-
+
diff --git a/Habitica/res/layout/daily_item_card.xml b/Habitica/res/layout/daily_item_card.xml
index fdef8f868..63f3cc084 100644
--- a/Habitica/res/layout/daily_item_card.xml
+++ b/Habitica/res/layout/daily_item_card.xml
@@ -11,6 +11,9 @@
+
+ app:backgroundColor="@{daily.isDisplayedActive(offset) ? daily.getLightTaskColor : @color/task_gray}">
private ObservableArrayList observableContent;
FlowContentObserver observer;
Context context;
+ public int dailyResetOffset;
static final int TYPE_HEADER = 0;
static final int TYPE_CELL = 1;
@@ -418,6 +419,7 @@ public class HabitItemRecyclerViewAdapter
binding = DataBindingUtil.bind(itemView);
checkbox.setOnCheckedChangeListener(this);
+ binding.setOffset(dailyResetOffset);
}
diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java
index ff1d125a9..3e1c68742 100644
--- a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java
@@ -23,7 +23,7 @@ import de.greenrobot.event.EventBus;
*/
public class TaskRecyclerViewFragment extends Fragment implements View.OnClickListener {
public RecyclerView mRecyclerView;
- private RecyclerView.Adapter mAdapter;
+ public RecyclerView.Adapter mAdapter;
private String classType;
// TODO needs a bit of cleanup
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Days.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Days.java
index 81e5f001f..1d82e27ba 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Days.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Days.java
@@ -83,4 +83,17 @@ public class Days extends BaseModel {
public void setM(boolean m) {
this.m = m;
}
+
+ public boolean getForDay(int day) {
+ switch (day) {
+ case 2: return this.getM();
+ case 3: return this.getT();
+ case 4: return this.getW();
+ case 5: return this.getTh();
+ case 6: return this.getF();
+ case 7: return this.getS();
+ case 1: return this.getSu();
+ }
+ return false;
+ }
}
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java
index c31ba0370..593261deb 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java
@@ -14,8 +14,11 @@ import com.raizlabs.android.dbflow.sql.language.Select;
import com.raizlabs.android.dbflow.structure.BaseModel;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.List;
+import java.util.concurrent.TimeUnit;
/**
* Created by viirus on 10/08/15.
@@ -27,6 +30,9 @@ public class Task extends BaseModel {
public static String TYPE_TODO = "todo";
public static String TYPE_DAILY = "daily";
public static String TYPE_REWARD = "reward";
+ public static String FREQUENCY_WEEKLY = "weekly";
+ public static String FREQUENCY_DAILY = "daily";
+
@Column
@PrimaryKey
@@ -64,6 +70,9 @@ public class Task extends BaseModel {
@Column
public Integer everyX, streak;
+ @Column
+ Date startDate;
+
@Column
@ForeignKey(references = {@ForeignKeyReference(columnName = "days_id",
columnType = Long.class,
@@ -273,6 +282,9 @@ public class Task extends BaseModel {
public Integer getEveryX() { return everyX; }
public void setEveryX(Integer everyX) { this.everyX = everyX; }
+ public Date getStartDate() { return startDate; }
+ public void setStartDate(Date startDate) {this.startDate = startDate; }
+
/**
* @return the repeat array.
* This array contains 7 values, one for each days, starting from monday.
@@ -405,12 +417,45 @@ public class Task extends BaseModel {
return R.color.best_10;
}
- public Boolean isDue() {
- //TODO: check if daily is due
- return !this.getCompleted();
+ public Boolean isDue(int offset) {
+ if (this.getCompleted()) {
+ return true;
+ }
+
+ Calendar today = new GregorianCalendar();
+ today.add(Calendar.HOUR, -offset);
+
+ if (this.getStartDate() != null) {
+ Calendar startDate = new GregorianCalendar();
+ startDate.setTime(this.getStartDate());
+ Calendar startDateAtMidnight = new GregorianCalendar(startDate.get(Calendar.YEAR),
+ startDate.get(Calendar.MONTH),
+ startDate.get(Calendar.DAY_OF_MONTH));
+
+ if ( startDateAtMidnight.after(today) ) {
+ return false;
+ }
+ }
+
+ if (this.getFrequency().equals(FREQUENCY_DAILY)) {
+ Calendar startDate = new GregorianCalendar();
+ if (this.getStartDate() != null) {
+ startDate.setTime(this.getStartDate());
+ }
+ TimeUnit timeUnit = TimeUnit.DAYS;
+ long diffInMillies = startDate.getTimeInMillis() - today.getTimeInMillis();
+ long daySinceStart = timeUnit.convert(diffInMillies, TimeUnit.MILLISECONDS);
+ return (daySinceStart % this.getEveryX() == 0);
+ } else {
+ return this.getRepeat().getForDay(today.get(Calendar.DAY_OF_WEEK));
+ }
}
- public Boolean isDisplayedActive() {
- return this.isDue() && !this.completed;
+ public Boolean isDisplayedActive(int offset) {
+ return this.isDue(offset) && !this.completed;
+ }
+
+ public Boolean isChecklistDisplayActive(int offset) {
+ return this.isDisplayedActive(offset) || (this.checklist.size() != this.getCompletedChecklistCount());
}
}