diff --git a/Habitica/Habitica.iml b/Habitica/Habitica.iml
index 91349e54a..241ab18b9 100644
--- a/Habitica/Habitica.iml
+++ b/Habitica/Habitica.iml
@@ -68,18 +68,18 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
@@ -109,58 +109,63 @@
+
+
-
-
-
+
+
-
+
+
-
+
-
+
+
+
+
+
+
-
-
-
+
-
-
-
+
-
-
+
+
+
-
+
-
-
+
+
+
+
-
+
-
+
+
-
-
\ No newline at end of file
diff --git a/Habitica/build.gradle b/Habitica/build.gradle
index 9cb6179bc..0d88e6aed 100644
--- a/Habitica/build.gradle
+++ b/Habitica/build.gradle
@@ -34,7 +34,10 @@ repositories {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.squareup.retrofit:retrofit:1.6.0'
+ compile 'io.reactivex:rxjava:1.0.10'
+ compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'
+ compile 'com.squareup.okhttp:okhttp:2.4.0'
+ compile 'com.squareup.retrofit:retrofit:1.9.0'
compile('com.crashlytics.sdk.android:crashlytics:2.3.0@aar') {
transitive = true;
diff --git a/Habitica/res/layout/daily_item_card.xml b/Habitica/res/layout/daily_item_card.xml
index 9b54d9a01..feb814abd 100644
--- a/Habitica/res/layout/daily_item_card.xml
+++ b/Habitica/res/layout/daily_item_card.xml
@@ -11,22 +11,8 @@
-
-
-
+ android:layout_height="wrap_content"
+ android:background="@color/white">
-
+
+
-
-
\ No newline at end of file
diff --git a/Habitica/res/layout/reward_item_card.xml b/Habitica/res/layout/reward_item_card.xml
index 5be1554ed..a7169808a 100644
--- a/Habitica/res/layout/reward_item_card.xml
+++ b/Habitica/res/layout/reward_item_card.xml
@@ -3,11 +3,11 @@
-
+
+ type="Task" />
>() {}.getType();
+
+
+ //Exclusion stratety needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
@Override
@@ -72,7 +79,7 @@ public class APIHelper implements ErrorHandler, Profiler {
return false;
}
})
- .registerTypeAdapter(TagsAdapter.class, new TagsAdapter().nullSafe())
+ .registerTypeAdapter(taskTagClassListType, new TagsAdapter())
.registerTypeAdapter(Boolean.class, booleanAsIntAdapter)
.registerTypeAdapter(boolean.class, booleanAsIntAdapter)
.create();
@@ -152,11 +159,7 @@ public class APIHelper implements ErrorHandler, Profiler {
}
public void updateTask(Task item, Callback cb) {
- if(item instanceof Task) {
this.apiService.updateTask(item.getId(), item, cb);
- } else if(item instanceof Reward) {
- this.apiService.updateTask(item.getId(), item, cb);
- }
}
//public void buyItem(Reward.SpecialReward itemBought, View btn) {
diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
index a0f9968bb..d4945ee31 100644
--- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
+++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java
@@ -37,8 +37,6 @@ import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.RewardItem;
import com.mikepenz.materialdrawer.Drawer;
import com.mikepenz.materialdrawer.DrawerBuilder;
import com.mikepenz.materialdrawer.model.DividerDrawerItem;
@@ -279,7 +277,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
}
public void onEvent(TaskTappedEvent event) {
- if(event.Task instanceof RewardItem)
+ if(event.Task.type.equals("reward"))
return;
Bundle bundle = new Bundle();
@@ -320,6 +318,9 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
return;
}
+ mAPIHelper.updateTaskDirection(rewardKey, TaskDirection.down, new TaskScoringCallback(this));
+
+ /*
if (event.Reward instanceof RewardItem) {
if (rewardKey.equals("potion")) {
int currentHp = User.getStats().getHp().intValue();
@@ -356,8 +357,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
});
} else {
// User created Rewards
- mAPIHelper.updateTaskDirection(rewardKey, TaskDirection.down, new TaskScoringCallback(this));
- }
+ }*/
}
public void onEvent(final TaskSaveEvent event) {
@@ -411,8 +411,6 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
}
- private ObservableArrayList GearRewards = new ObservableArrayList<>();
-
public void loadTaskLists() {
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
@@ -440,7 +438,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
break;
case 3:
layoutOfType = R.layout.reward_item_card;
- fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter("reward", Reward.class, layoutOfType, HabitItemRecyclerViewAdapter.RewardViewHolder.class, context), Reward.class);
+ fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter("reward", Task.class, layoutOfType, HabitItemRecyclerViewAdapter.RewardViewHolder.class, context), Task.class);
break;
default:
layoutOfType = R.layout.todo_item_card;
@@ -577,7 +575,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
keyCondition = keyCondition.and(item.key);
}
-
+/*
ConditionQueryBuilder queryBuilder = new ConditionQueryBuilder(ItemData.class,
keyCondition);
@@ -597,6 +595,7 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
GearRewards.clear();
GearRewards.addAll(rewardList);
+ */
}
@Override
diff --git a/Habitica/src/com/habitrpg/android/habitica/events/BuyRewardTappedEvent.java b/Habitica/src/com/habitrpg/android/habitica/events/BuyRewardTappedEvent.java
index 61f3d4630..0d1086552 100644
--- a/Habitica/src/com/habitrpg/android/habitica/events/BuyRewardTappedEvent.java
+++ b/Habitica/src/com/habitrpg/android/habitica/events/BuyRewardTappedEvent.java
@@ -1,10 +1,10 @@
package com.habitrpg.android.habitica.events;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
+import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
/**
* Created by Negue on 11.07.2015.
*/
public class BuyRewardTappedEvent {
- public Reward Reward;
+ public Task Reward;
}
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 99a46064c..efcc8deeb 100644
--- a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java
+++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java
@@ -5,8 +5,6 @@ import android.databinding.BindingAdapter;
import android.databinding.DataBindingUtil;
import android.databinding.ObservableArrayList;
import android.databinding.ObservableList;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
@@ -32,15 +30,12 @@ import com.habitrpg.android.habitica.events.TaskTappedEvent;
import com.habitrpg.android.habitica.events.TodoCheckedEvent;
import com.habitrpg.android.habitica.ui.helpers.ViewHelper;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.RewardItem;
import com.raizlabs.android.dbflow.runtime.FlowContentObserver;
import com.raizlabs.android.dbflow.sql.builder.Condition;
import com.raizlabs.android.dbflow.sql.language.Select;
import com.raizlabs.android.dbflow.structure.BaseModel;
import com.raizlabs.android.dbflow.structure.Model;
import com.squareup.picasso.Picasso;
-import com.squareup.picasso.Target;
import java.util.List;
@@ -174,8 +169,6 @@ public class HabitItemRecyclerViewAdapter
return new HabitItemRecyclerViewAdapter.TodoViewHolder(view);
case "RewardViewHolder":
return new HabitItemRecyclerViewAdapter.RewardViewHolder(view);
- case "RewardItemViewHolder":
- return new HabitItemRecyclerViewAdapter.RewardItemViewHolder(view);
}
}
}
@@ -226,9 +219,6 @@ public class HabitItemRecyclerViewAdapter
public abstract class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
- @InjectView(R.id.card_view)
- protected CardView cardView;
-
@InjectView(R.id.checkedTextView)
protected CheckedTextView checkedTextView;
@@ -376,7 +366,7 @@ public class HabitItemRecyclerViewAdapter
}
}
- public class RewardViewHolder extends ViewHolder {
+ public class RewardViewHolder extends ViewHolder {
RewardItemCardBinding binding;
public RewardViewHolder(View itemView) {
@@ -401,58 +391,14 @@ public class HabitItemRecyclerViewAdapter
}
@Override
- public void bindHolder(Reward habitItem, int position) {
- super.bindHolder(habitItem, position);
+ public void bindHolder(Task reward, int position) {
+ super.bindHolder(reward, position);
- binding.setReward(habitItem);
+ binding.setReward(reward);
}
}
- public class RewardItemViewHolder extends ViewHolder implements Target
- {
- RewardItemCardBinding binding;
- public RewardItemViewHolder(View itemView) {
- super(itemView);
-
- binding = DataBindingUtil.bind(itemView);
-
- binding.btnReward.setClickable(true);
- binding.btnReward.setOnClickListener(this);
- }
-
- @Override
- public void onClick(View v) {
- BuyRewardTappedEvent event = new BuyRewardTappedEvent();
-
- if (v == binding.btnReward) {
- event.Reward = Item;
-
- EventBus.getDefault().post(event);
- } else super.onClick(v);
- }
-
- @Override
- public void bindHolder(RewardItem habitItem, int position) {
- super.bindHolder(habitItem, position);
- binding.setReward(habitItem);
- }
-
- @Override
- public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
- binding.imageView3.setImageBitmap(bitmap);
- }
-
- @Override
- public void onBitmapFailed(Drawable errorDrawable) {
-
- }
-
- @Override
- public void onPrepareLoad(Drawable placeHolderDrawable) {
-
- }
- }
public void loadContent() {
if(this.observableContent == null) {
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/HabitRPGInteractor.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/HabitRPGInteractor.java
deleted file mode 100644
index f8038a981..000000000
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/HabitRPGInteractor.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package com.magicmicky.habitrpgwrapper.lib;
-
-import com.google.gson.ExclusionStrategy;
-import com.google.gson.FieldAttributes;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.magicmicky.habitrpgwrapper.lib.api.ApiService;
-import com.magicmicky.habitrpgwrapper.lib.api.Server;
-import com.magicmicky.habitrpgwrapper.lib.api.TypeAdapter.TagsAdapter;
-import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
-import com.magicmicky.habitrpgwrapper.lib.models.Status;
-import com.magicmicky.habitrpgwrapper.lib.models.Tag;
-import com.magicmicky.habitrpgwrapper.lib.models.TaskDirection;
-import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
-import com.magicmicky.habitrpgwrapper.lib.models.UserAuth;
-import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
-import com.raizlabs.android.dbflow.structure.ModelAdapter;
-
-import java.util.List;
-
-import retrofit.Callback;
-import retrofit.RequestInterceptor;
-import retrofit.RestAdapter;
-import retrofit.converter.GsonConverter;
-
-/**
- * Created by MagicMicky on 13/06/2014.
- */
-public class HabitRPGInteractor {
-
- private ApiService apiService;
- public HabitRPGInteractor(final String apiKey, final String userKey, final Server server) {
- RequestInterceptor requestInterceptor = new RequestInterceptor() {
- @Override
- public void intercept(RequestInterceptor.RequestFacade request) {
- request.addHeader("x-api-key", apiKey);
- request.addHeader("x-api-user",userKey);
- }
- };
-
- //Exclusion stratety needed for DBFlow https://github.com/Raizlabs/DBFlow/issues/121
- Gson gson = new GsonBuilder()
- .setExclusionStrategies(new ExclusionStrategy() {
- @Override
- public boolean shouldSkipField(FieldAttributes f) {
- return f.getDeclaredClass().equals(ModelAdapter.class);
- }
-
- @Override
- public boolean shouldSkipClass(Class> clazz) {
- return false;
- }
- }).registerTypeAdapter(TagsAdapter.class, new TagsAdapter().nullSafe()).create();
-
- RestAdapter adapter = new RestAdapter.Builder()
- .setEndpoint(server.toString())
- .setRequestInterceptor(requestInterceptor)
- .setConverter(new GsonConverter(gson))
- .build();
- this.apiService = adapter.create(ApiService.class);
- }
- public HabitRPGInteractor(final String apiKey, final String userKey) {
- this(apiKey, userKey, Server.NORMAL);
- }
- /**
- * Retrieve the Status of habitrpg
- * @see com.magicmicky.habitrpgwrapper.lib.models.Status
- * @param statusCallback the callback called when status is retrieved
- */
- public void getStatus(Callback statusCallback) {
- this.apiService.getStatus(statusCallback);
- }
-
- /**
- * Retrieve a User from HabitRPG's API.
- * @see com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser
- * @param callback The callback called when the user is retrieved
- */
- public void getUser(Callback callback) {
- this.apiService.getUser(callback);
- }
-
- /**
- * Retrieve a daily from HabitRPG's API
- * @param dailyId the id of the daily to retrieve
- * @param dailyCallback the callback called when the daily is retrieved
- * @see Task
- */
- public void getTask(String dailyId, Callback dailyCallback) {
- this.apiService.getTask(dailyId, dailyCallback);
- }
-
-
- /**
- * Retrieve a Reward form HabitRPG's API
- * @param rewardId the id of the reward to retrieve
- * @param rewardCallback the callback called when the reward is retrieved.
- * @see com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward
- */
- public void getReward(String rewardId, Callback rewardCallback) {
- this.apiService.getReward(rewardId, rewardCallback);
- }
-
- /**
- * Update the task to "up" or "down", and check or uncheck dailies/todos.
- * @param taskId the id of the task to update
- * @param direction the direction of the task
- * @param taskDirectionCallback the callback called when the direction is set.
- * @see com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData
- */
- public void postTaskDirection(String taskId, TaskDirection direction, Callback taskDirectionCallback) {
- this.apiService.postTaskDirection(taskId, direction.toString(), taskDirectionCallback);
- }
-
- /**
- * Create a daily on HabitRPG
- * @param task the daily to create
- * @param taskCallback the callback called when the daily is created
- * @see Task
- */
- public void createItem(Task task, Callback taskCallback) {
- this.apiService.createItem(task, taskCallback);
- }
-
- /**
- * Creates a reward
- * @param reward the reward to create
- * @param rewardCallback the callback called once the item is created
- */
- public void createItem(Reward reward, Callback rewardCallback) {
- this.apiService.createItem(reward, rewardCallback);
- }
-
- /**
- * Update an habit
- * @param taskId the id of the habit to update
- * @param task the habit to update, with updated field
- * @param taskCallback the callback called once the habit is updated
- */
- public void updateItem(String taskId, Task task, Callback taskCallback) {
- this.apiService.updateTask(taskId, task, taskCallback);
- }
-
- /**
- * Updates a Reward
- * @param rewardId the id of the reward to update
- * @param reward the reward to update, with updated field
- * @param rewardCallback the callback called once the item is updated
- */
- public void updateItem(String rewardId, Reward reward, Callback rewardCallback) {
- this.apiService.updateTask(rewardId, reward, rewardCallback);
- }
-
- /**
- * Deletes a task.
- * @param itemId the id of the task to delete
- * @param voidCallback the callback (on void) called once the item is deleted
- */
- public void deleteItem(String itemId, Callback voidCallback) {
- this.apiService.deleteTask(itemId, voidCallback);
- }
-
- /**
- * Creates a tag
- * @param tag The tag to create
- * @param multiTagCallback the callback called once the tag is created
- */
- public void createTag(Tag tag, Callback> multiTagCallback) {
- this.apiService.createTag(tag, multiTagCallback);
- }
-
- /**
- * Updates a tag
- * @param tagId The id of the tag to udpate
- * @param tag The tag to update, with updated field
- * @param tagCallback The callback called once the tag is updated
- */
- public void updateTag(String tagId, Tag tag, Callback tagCallback) {
- this.apiService.updateTag(tagId, tag, tagCallback);
- }
-
- /**
- * Deletes a tag
- * @param tagId the id of the tag to delete
- * @param voidCallback the callback (on void) called once the item is deleted
- */
- public void deleteTag(String tagId, Callback voidCallback) {
- this.apiService.deleteTag(tagId, voidCallback);
- }
-
- /**
- * Connects a user
- * @param authData The username & password of the user
- * @param responseCallback The callback called once the user is connected
- */
- public void connectUser(UserAuth authData, Callback responseCallback) {
- this.apiService.connectLocal(authData,responseCallback);
- }
-
-}
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
index 6aa589813..92db00211 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java
@@ -7,9 +7,8 @@ import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
import com.magicmicky.habitrpgwrapper.lib.models.UserAuth;
import com.magicmicky.habitrpgwrapper.lib.models.UserAuthResponse;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ItemData;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
+import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
import java.util.List;
@@ -45,8 +44,6 @@ public interface ApiService {
// void revive(Callback habitRPGUserCallback);
- @GET("/user/tasks/{id}")
- void getReward(@Path("id") String id, Callback habitItemCallback);
@GET("/user/tasks/{id}")
void getTask(@Path("id") String id, Callback habitItemCallback);
@@ -55,14 +52,10 @@ public interface ApiService {
void postTaskDirection(@Path("id") String id, @Path("direction") String direction, Callback taskDirectionCallback);
- @POST("/user/tasks")
- void createItem(@Body Reward item, Callback habitItemCallback);
@POST("/user/tasks")
void createItem(@Body Task item, Callback habitItemCallback);
- @PUT("/user/tasks/{id}")
- void updateTask(@Path("id") String id, @Body Reward item, Callback habitItemCallback);
@PUT("/user/tasks/{id}")
void updateTask(@Path("id") String id, @Body Task item, Callback habitItemCallback);
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java
index 5419c6f69..09c272d50 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/HabitRPGUser.java
@@ -2,7 +2,6 @@ package com.magicmicky.habitrpgwrapper.lib.models;
import com.habitrpg.android.habitica.HabitDatabase;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Task;
-import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
import com.raizlabs.android.dbflow.annotation.Column;
import com.raizlabs.android.dbflow.annotation.ForeignKey;
import com.raizlabs.android.dbflow.annotation.ForeignKeyReference;
@@ -29,7 +28,7 @@ public class HabitRPGUser extends BaseModel {
List dailys;
List todos;
- List rewards;
+ List rewards;
List habits;
List tags;
@@ -89,7 +88,7 @@ public class HabitRPGUser extends BaseModel {
this.todos = todos;
}
- public void setRewards(List rewards) {
+ public void setRewards(List rewards) {
this.rewards = rewards;
}
@@ -167,10 +166,10 @@ public class HabitRPGUser extends BaseModel {
}
@OneToMany(methods = {OneToMany.Method.SAVE, OneToMany.Method.DELETE}, variableName = "rewards")
- public List getRewards() {
+ public List getRewards() {
if(rewards == null) {
rewards = new Select()
- .from(Reward.class)
+ .from(Task.class)
.queryList();
}
return rewards;
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Tag.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Tag.java
index bb98587e8..c34e6c8f0 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Tag.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/Tag.java
@@ -3,6 +3,7 @@ package com.magicmicky.habitrpgwrapper.lib.models;
import com.habitrpg.android.habitica.HabitDatabase;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag;
import com.raizlabs.android.dbflow.annotation.Column;
+import com.raizlabs.android.dbflow.annotation.ModelContainer;
import com.raizlabs.android.dbflow.annotation.OneToMany;
import com.raizlabs.android.dbflow.annotation.PrimaryKey;
import com.raizlabs.android.dbflow.annotation.Table;
@@ -17,6 +18,7 @@ import java.util.List;
* Created by MagicMicky on 16/03/14.
*/
+@ModelContainer
@Table(databaseName = HabitDatabase.NAME)
public class Tag extends BaseModel{
@@ -42,6 +44,7 @@ public class Tag extends BaseModel{
if(tasks == null) {
tasks = new Select()
.from(TaskTag.class)
+ .where(Condition.column("tag_id").eq(this.id))
.queryList();
}
return tasks;
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/ChecklistItem.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/ChecklistItem.java
index 1f1dccf77..f3762c21a 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/ChecklistItem.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/ChecklistItem.java
@@ -24,7 +24,7 @@ public class ChecklistItem extends BaseModel {
@Column
private boolean completed;
-/*
+
@Column
@ForeignKey(
references = {@ForeignKeyReference(columnName = "task_id",
@@ -32,7 +32,7 @@ public class ChecklistItem extends BaseModel {
foreignColumnName = "id")},
saveForeignKeyModel = false)
ForeignKeyContainer task;
-*/
+
public ChecklistItem() {
this(null,null);
}
@@ -70,4 +70,14 @@ public class ChecklistItem extends BaseModel {
public void setCompleted(boolean completed) {
this.completed = completed;
}
+
+ public Task getTask() {
+ return task.toModel();
+ }
+
+ public void setTask(Task task) {
+ this.task = new ForeignKeyContainer<>(Task.class);
+ this.task.setModel(task);
+ this.task.put("id", task.id);
+ }
}
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Reward.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Reward.java
deleted file mode 100644
index 479b6e4c7..000000000
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Reward.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.magicmicky.habitrpgwrapper.lib.models.tasks;
-
-
-import com.habitrpg.android.habitica.HabitDatabase;
-import com.raizlabs.android.dbflow.annotation.Table;
-
-/**
- * A reward. Contain a reward that you can see on the website
- * @author MagicMicky
- *
- */
-@Table(databaseName = HabitDatabase.NAME, allFields = true)
-public class Reward extends Task {
-
- public Reward() {
- super();
- }
- /**
- * @return the id
- */
- public String getId() {
- return id;
- }
- /**
- * @param id the id to set
- */
- public void setId(String id) {
- this.id = id;
- }
-
-}
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/RewardItem.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/RewardItem.java
deleted file mode 100644
index a3f030cf8..000000000
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/RewardItem.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.magicmicky.habitrpgwrapper.lib.models.tasks;
-
-/**
- * Created by Negue on 15.07.2015.
- */
-public class RewardItem extends Reward {
-
-}
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 75553f21c..243914d51 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/Task.java
@@ -5,9 +5,11 @@ import com.habitrpg.android.habitica.R;
import com.raizlabs.android.dbflow.annotation.Column;
import com.raizlabs.android.dbflow.annotation.ForeignKey;
import com.raizlabs.android.dbflow.annotation.ForeignKeyReference;
+import com.raizlabs.android.dbflow.annotation.ModelContainer;
import com.raizlabs.android.dbflow.annotation.OneToMany;
import com.raizlabs.android.dbflow.annotation.PrimaryKey;
import com.raizlabs.android.dbflow.annotation.Table;
+import com.raizlabs.android.dbflow.sql.builder.Condition;
import com.raizlabs.android.dbflow.sql.language.Select;
import com.raizlabs.android.dbflow.structure.BaseModel;
@@ -16,6 +18,7 @@ import java.util.List;
/**
* Created by viirus on 10/08/15.
*/
+@ModelContainer
@Table(databaseName = HabitDatabase.NAME)
public class Task extends BaseModel {
@@ -31,13 +34,21 @@ public class Task extends BaseModel {
@Column
public Double value;
+ public List tags;
+ //Habits
@Column
public Boolean up, down;
+
+ //todos/dailies
@Column
public Boolean completed;
+ public List checklist;
+
+
+ //dailies
@Column
public String frequency;
@@ -51,9 +62,12 @@ public class Task extends BaseModel {
public Days repeat;
//TODO: private String lastCompleted;
+
+ //todos
@Column
public String date;
+
/**
* @return the id
*/
@@ -132,6 +146,24 @@ public class Task extends BaseModel {
public void setType(String type) {this.type = type;}
+ @OneToMany(methods = {OneToMany.Method.SAVE, OneToMany.Method.DELETE}, variableName = "tags")
+ public List getTags() {
+ if(tags == null) {
+ tags = new Select()
+ .from(TaskTag.class)
+ .where(Condition.column("task_id").eq(this.id))
+ .queryList();
+ }
+ return tags;
+ }
+
+ public void setTags(List tags) {
+ for (TaskTag tag : tags) {
+ tag.setTask(this);
+ }
+ this.tags = tags;
+ }
+
/**
* @return whether or not the habit can be "upped"
*/
@@ -171,6 +203,35 @@ public class Task extends BaseModel {
this.completed = completed;
}
+
+ @OneToMany(methods = {OneToMany.Method.SAVE, OneToMany.Method.DELETE}, variableName = "checklist")
+ public List getChecklist() {
+ if(this.checklist == null) {
+ this.checklist = new Select()
+ .from(ChecklistItem.class)
+ .where(Condition.column("task_id").eq(this.id))
+ .queryList();
+ }
+ return this.checklist;
+ }
+
+ public void setChecklist(List checklist) {
+ for (ChecklistItem checklistItem : checklist) {
+ checklistItem.setTask(this);
+ }
+ this.checklist = checklist;
+ }
+
+ public Integer getCompletedChecklistCount() {
+ Integer count = 0;
+ for (ChecklistItem item : this.getChecklist()) {
+ if (item.getCompleted()) {
+ count++;
+ }
+ }
+ return count;
+ }
+
public String getFrequency() { return frequency; }
public void setFrequency(String frequency) { this.frequency = frequency; }
@@ -190,20 +251,7 @@ public class Task extends BaseModel {
public void setRepeat(Days repeat) {
this.repeat = repeat;
}
- /**
- * Formated:
- * SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
- * @return the lastCompleted
- */
-/* public String getLastCompleted() {
- return lastCompleted;
- }
- /**
- * @param lastCompleted the lastCompleted to set
- */
-/* public void setLastCompleted(String lastCompleted) {
- this.lastCompleted = lastCompleted;
- }
+
/**
* @return the streak
*/
@@ -246,6 +294,22 @@ public class Task extends BaseModel {
this.attribute = attribute;
}
+
+ @Override
+ public void save() {
+ if (this.tags != null) {
+ for (TaskTag tag : this.tags) {
+ tag.setTask(this);
+ }
+ }
+ if (this.checklist != null) {
+ for (ChecklistItem item : this.checklist) {
+ item.setTask(this);
+ }
+ }
+ super.save();
+ }
+
public int getLightTaskColor()
{
if (this.value < -20)
diff --git a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/TaskTag.java b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/TaskTag.java
index b7b813331..055a0ec91 100644
--- a/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/TaskTag.java
+++ b/Habitica/src/com/magicmicky/habitrpgwrapper/lib/models/tasks/TaskTag.java
@@ -25,13 +25,15 @@ public class TaskTag extends BaseModel {
@Column
@ForeignKey(references = {@ForeignKeyReference(columnName = "tag_id",
columnType = String.class,
- foreignColumnName = "id")})
+ foreignColumnName = "id")},
+ saveForeignKeyModel = false)
public ForeignKeyContainer tag;
@Column
@ForeignKey(references = {@ForeignKeyReference(columnName = "task_id",
columnType = String.class,
- foreignColumnName = "id")})
+ foreignColumnName = "id")},
+ saveForeignKeyModel = false)
public ForeignKeyContainer task;
public Tag getTag() {
@@ -41,6 +43,7 @@ public class TaskTag extends BaseModel {
public void setTag(Tag tag) {
this.tag = new ForeignKeyContainer<>(Tag.class);
this.tag.setModel(tag);
+ this.tag.put("id", tag.id);
}
public Task getTask() {
@@ -50,6 +53,7 @@ public class TaskTag extends BaseModel {
public void setTask(Task task) {
this.task = new ForeignKeyContainer<>(Task.class);
this.task.setModel(task);
+ this.task.put("id", task.id);
}
}