diff --git a/Habitica/res/layout/checklist_dialog.xml b/Habitica/res/layout/checklist_dialog.xml
deleted file mode 100644
index b4ad89b66..000000000
--- a/Habitica/res/layout/checklist_dialog.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/layout/checklist_dialog_list_item.xml b/Habitica/res/layout/checklist_dialog_list_item.xml
deleted file mode 100644
index 4e6568434..000000000
--- a/Habitica/res/layout/checklist_dialog_list_item.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Habitica/res/layout/checklist_item_row.xml b/Habitica/res/layout/checklist_item_row.xml
new file mode 100644
index 000000000..700640f7b
--- /dev/null
+++ b/Habitica/res/layout/checklist_item_row.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/daily_item_card.xml b/Habitica/res/layout/daily_item_card.xml
index f36eb4343..74e712366 100644
--- a/Habitica/res/layout/daily_item_card.xml
+++ b/Habitica/res/layout/daily_item_card.xml
@@ -8,6 +8,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/layout/todo_item_card.xml b/Habitica/res/layout/todo_item_card.xml
index 623943e4c..d2f967b3f 100644
--- a/Habitica/res/layout/todo_item_card.xml
+++ b/Habitica/res/layout/todo_item_card.xml
@@ -8,6 +8,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/res/values/colors.xml b/Habitica/res/values/colors.xml
index 24a01b3dc..beb35d319 100644
--- a/Habitica/res/values/colors.xml
+++ b/Habitica/res/values/colors.xml
@@ -10,9 +10,9 @@
@color/brand_100
- #E6B8AF
- #c96652
- #c96652
+ #a13f44
+ #a1334d
+ #a10013
#FF6165
#F74E52
@@ -93,4 +93,5 @@
#ffd8dcdd
#c3c2c6
+ #ededed
\ No newline at end of file
diff --git a/Habitica/res/values/dimens.xml b/Habitica/res/values/dimens.xml
index cdaf4cad2..c28118827 100644
--- a/Habitica/res/values/dimens.xml
+++ b/Habitica/res/values/dimens.xml
@@ -38,4 +38,5 @@
0.5dp
14dp
36dp
+ 50dp
\ No newline at end of file
diff --git a/Habitica/src/com/habitrpg/android/habitica/CheckableLinearLayout.java b/Habitica/src/com/habitrpg/android/habitica/CheckableLinearLayout.java
deleted file mode 100644
index cdee120d6..000000000
--- a/Habitica/src/com/habitrpg/android/habitica/CheckableLinearLayout.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.habitrpg.android.habitica;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.Checkable;
-import android.widget.CheckedTextView;
-import android.widget.LinearLayout;
-
-/*
- * This class is useful for using inside of ListView that needs to have checkable items.
- */
-public class CheckableLinearLayout extends LinearLayout implements Checkable {
- private CheckedTextView _checkbox;
-
- public CheckableLinearLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- // find checked text view
-
- View v = findViewById(R.id.TV_title);
-
- if (v instanceof CheckedTextView) {
- _checkbox = (CheckedTextView) v;
- }
- }
-
- @Override
- public boolean isChecked() {
- return _checkbox != null ? _checkbox.isChecked() : false;
- }
-
- @Override
- public void setChecked(boolean checked) {
- if (_checkbox != null) {
- _checkbox.setChecked(checked);
- }
- }
-
- @Override
- public void toggle() {
- if (_checkbox != null) {
-
- _checkbox.toggle();
- }
- }
-}
\ No newline at end of file
diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
index 226876a5a..1a0073f6b 100644
--- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
+++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
@@ -28,7 +28,7 @@ import com.habitrpg.android.habitica.events.HabitScoreEvent;
import com.habitrpg.android.habitica.events.TaskLongPressedEvent;
import com.habitrpg.android.habitica.events.TaskSaveEvent;
import com.habitrpg.android.habitica.events.TaskTappedEvent;
-import com.habitrpg.android.habitica.events.TodoCheckedEvent;
+import com.habitrpg.android.habitica.events.TaskCheckedEvent;
import com.habitrpg.android.habitica.events.ToggledInnStateEvent;
import com.habitrpg.android.habitica.prefs.PrefsActivity;
import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel;
@@ -37,7 +37,6 @@ import com.habitrpg.android.habitica.ui.MainDrawerBuilder;
import com.habitrpg.android.habitica.ui.adapter.HabitItemRecyclerViewAdapter;
import com.habitrpg.android.habitica.ui.fragments.TaskRecyclerViewFragment;
import com.instabug.wrapper.support.activity.InstabugAppCompatActivity;
-import com.magicmicky.habitrpgwrapper.lib.models.ContentResult;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection;
@@ -253,8 +252,9 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
showSnackbar("LongPress: " + event.Task.text);
}
- public void onEvent(TodoCheckedEvent event) {
- showSnackbar("ToDo Checked= " + event.ToDo.getText(), true);
+ public void onEvent(TaskCheckedEvent event) {
+ showSnackbar("ToDo Checked= " + event.Task.getText(), true);
+ mAPIHelper.updateTaskDirection(event.Task.getId(), event.Task.getCompleted() ? TaskDirection.down : TaskDirection.up, new TaskScoringCallback(this, event.Task.getId()));
}
public void onEvent(HabitScoreEvent event) {
diff --git a/Habitica/src/com/habitrpg/android/habitica/events/TodoCheckedEvent.java b/Habitica/src/com/habitrpg/android/habitica/events/TaskCheckedEvent.java
similarity index 74%
rename from Habitica/src/com/habitrpg/android/habitica/events/TodoCheckedEvent.java
rename to Habitica/src/com/habitrpg/android/habitica/events/TaskCheckedEvent.java
index 72e1795f0..370f5b69b 100644
--- a/Habitica/src/com/habitrpg/android/habitica/events/TodoCheckedEvent.java
+++ b/Habitica/src/com/habitrpg/android/habitica/events/TaskCheckedEvent.java
@@ -5,6 +5,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
/**
* Created by Negue on 11.07.2015.
*/
-public class TodoCheckedEvent {
- public Task ToDo;
+public class TaskCheckedEvent {
+ public Task Task;
}
diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java
index 5afde7251..c98587688 100644
--- a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java
@@ -14,9 +14,10 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
-import android.widget.CheckedTextView;
import android.widget.CompoundButton;
import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
import android.widget.TextView;
import com.habitrpg.android.habitica.R;
@@ -28,8 +29,9 @@ import com.habitrpg.android.habitica.events.BuyRewardTappedEvent;
import com.habitrpg.android.habitica.events.HabitScoreEvent;
import com.habitrpg.android.habitica.events.TaskLongPressedEvent;
import com.habitrpg.android.habitica.events.TaskTappedEvent;
-import com.habitrpg.android.habitica.events.TodoCheckedEvent;
+import com.habitrpg.android.habitica.events.TaskCheckedEvent;
import com.habitrpg.android.habitica.ui.helpers.ViewHelper;
+import com.magicmicky.habitrpgwrapper.lib.models.tasks.ChecklistItem;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.raizlabs.android.dbflow.runtime.FlowContentObserver;
import com.raizlabs.android.dbflow.sql.builder.Condition;
@@ -52,6 +54,7 @@ public class HabitItemRecyclerViewAdapter
private Class> viewHolderClass;
List contents;
Class taskClass;
+ Integer displayedChecklist = null;
String taskType;
private ObservableArrayList observableContent;
FlowContentObserver observer;
@@ -180,6 +183,11 @@ public class HabitItemRecyclerViewAdapter
Task item = contents.get(position);
holder.bindHolder(item, position);
+
+ if (this.displayedChecklist != null && ChecklistedViewHolder.class.isAssignableFrom(holder.getClass())) {
+ ChecklistedViewHolder checklistedHolder = (ChecklistedViewHolder) holder;
+ checklistedHolder.setDisplayChecklist(this.displayedChecklist == position);
+ }
}
private Handler handler = new Handler();
@@ -323,7 +331,68 @@ public class HabitItemRecyclerViewAdapter
}
}
- public class DailyViewHolder extends ViewHolder {
+ public class ChecklistedViewHolder extends ViewHolder {
+
+ @InjectView(R.id.checklistView)
+ LinearLayout checklistView;
+
+ @InjectView(R.id.checklistIndicatorWrapper)
+ RelativeLayout checklistIndicatorWrapper;
+
+ public Boolean displayChecklist;
+
+ public ChecklistedViewHolder(View itemView) {
+ super(itemView);
+ checklistIndicatorWrapper.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+
+ if (v == checklistIndicatorWrapper) {
+ if (this.displayChecklist != null) {
+ this.setDisplayChecklist(!this.displayChecklist);
+ } else {
+ this.setDisplayChecklist(true);
+ }
+ } else {
+ super.onClick(v);
+ }
+
+ }
+
+ @Override
+ public void bindHolder(Task habitItem, int position) {
+ super.bindHolder(habitItem, position);
+ Boolean isClickable = false;
+ if (habitItem.getChecklist() != null && habitItem.getChecklist().size() > 0) {
+ isClickable = true;
+ }
+ checklistIndicatorWrapper.setClickable(isClickable);
+ }
+
+ public void setDisplayChecklist(Boolean displayChecklist) {
+ this.displayChecklist = displayChecklist;
+ if (this.checklistView != null) {
+ if (this.displayChecklist && this.Item.checklist != null) {
+ LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ for (ChecklistItem item : this.Item.checklist) {
+ LinearLayout itemView = (LinearLayout)layoutInflater.inflate(R.layout.checklist_item_row, null);
+ CheckBox checkbox = (CheckBox) itemView.findViewById(R.id.checkBox);
+ TextView textView = (TextView) itemView.findViewById(R.id.checkedTextView);
+ // Populate the data into the template view using the data object
+ textView.setText(item.getText());
+ checkbox.setChecked(item.getCompleted());
+ this.checklistView.addView(itemView);
+ }
+ } else {
+ this.checklistView.removeAllViewsInLayout();
+ }
+ }
+ }
+ }
+
+ public class DailyViewHolder extends ChecklistedViewHolder implements CompoundButton.OnCheckedChangeListener {
@InjectView(R.id.checkBox)
CheckBox checkbox;
@@ -333,6 +402,8 @@ public class HabitItemRecyclerViewAdapter
super(itemView);
binding = DataBindingUtil.bind(itemView);
+
+ checkbox.setOnCheckedChangeListener(this);
}
@@ -342,9 +413,25 @@ public class HabitItemRecyclerViewAdapter
binding.setDaily(habitItem);
}
+
+ @Override
+ public void setDisplayChecklist(Boolean displayChecklist) {
+ binding.setDisplayChecklist(displayChecklist);
+ super.setDisplayChecklist(displayChecklist);
+ }
+
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (isChecked != Item.getCompleted()) {
+ TaskCheckedEvent event = new TaskCheckedEvent();
+ event.Task = Item;
+ EventBus.getDefault().post(event);
+ }
+ }
+
}
- public class TodoViewHolder extends ViewHolder implements CompoundButton.OnCheckedChangeListener {
+ public class TodoViewHolder extends ChecklistedViewHolder implements CompoundButton.OnCheckedChangeListener {
@InjectView(R.id.checkBox)
CheckBox checkbox;
@@ -368,10 +455,17 @@ public class HabitItemRecyclerViewAdapter
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- TodoCheckedEvent event = new TodoCheckedEvent();
- event.ToDo = Item;
+ if (isChecked != Item.getCompleted()) {
+ TaskCheckedEvent event = new TaskCheckedEvent();
+ event.Task = Item;
+ EventBus.getDefault().post(event);
+ }
+ }
- EventBus.getDefault().post(event);
+ @Override
+ public void setDisplayChecklist(Boolean displayChecklist) {
+ binding.setDisplayChecklist(displayChecklist);
+ super.setDisplayChecklist(displayChecklist);
}
}