load task and user data from database

This commit is contained in:
Phillip Thelen 2015-07-06 19:20:52 +02:00
parent 606038a085
commit 22b1e542cb
4 changed files with 94 additions and 51 deletions

View file

@ -32,8 +32,11 @@ import com.instabug.wrapper.support.activity.InstabugAppCompatActivity;
import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser;
import com.magicmicky.habitrpgwrapper.lib.models.Tag;
import com.magicmicky.habitrpgwrapper.lib.models.TaskDirectionData;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Daily;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Habit;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitItem;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ToDo;
import com.mikepenz.materialdrawer.Drawer;
import com.mikepenz.materialdrawer.DrawerBuilder;
import com.mikepenz.materialdrawer.model.DividerDrawerItem;
@ -41,7 +44,11 @@ import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem;
import com.mikepenz.materialdrawer.model.SectionDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
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 java.util.ArrayList;
import java.util.HashMap;
@ -55,7 +62,8 @@ import retrofit.RetrofitError;
import retrofit.client.Response;
public class MainActivity extends InstabugAppCompatActivity implements OnTaskCreationListener, HabitRPGUserCallback.OnUserReceived,
TaskScoringCallback.OnTaskScored, TaskCreationCallback.OnHabitCreated, TaskUpdateCallback.OnHabitUpdated, TaskDeletionCallback.OnTaskDeleted, Callback<Void> {
TaskScoringCallback.OnTaskScored, TaskCreationCallback.OnHabitCreated, TaskUpdateCallback.OnHabitUpdated, TaskDeletionCallback.OnTaskDeleted, Callback<Void>,
FlowContentObserver.OnSpecificModelStateChangedListener {
static final int ABOUT = 12;
//region View Elements
@ -82,6 +90,8 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
AvatarWithBarsViewModel avatarInHeader;
FlowContentObserver observer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -215,9 +225,15 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
});
materialViewPager.getViewPager().setCurrentItem(0);
User = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle();
this.observer = new FlowContentObserver();
this.observer.registerForContentChanges(this.getApplicationContext(), HabitRPGUser.class);
List<Habit> users = new Select().from(Habit.class).queryList();
Log.d("MainActivity", users.toString());
this.observer.addSpecificModelChangeListener(this);
this.loadTaskLists();
FillTagFilterDrawer();
updateHeader();
}
@Override
@ -229,7 +245,13 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
mAPIHelper.retrieveUser(new HabitRPGUserCallback(this));
}
public void FillTasks()
@Override
protected void onDestroy() {
this.observer.unregisterForContentChanges(this.getApplicationContext());
super.onDestroy();
}
public void loadTaskLists()
{
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
@ -243,23 +265,24 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
RecyclerViewFragment fragment;
String fragmentkey = "Recycler$" + position;
final android.content.Context context = getApplicationContext();
switch (position) {
case 0:
layoutOfType = R.layout.habit_item_card;
fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(User.getHabits(), layoutOfType, HabitItemRecyclerViewAdapter.HabitViewHolder.class), fragmentkey);
fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Habit.class, layoutOfType, HabitItemRecyclerViewAdapter.HabitViewHolder.class, context), fragmentkey);
break;
case 1:
layoutOfType = R.layout.daily_item_card;
fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(User.getDailys(), layoutOfType, HabitItemRecyclerViewAdapter.DailyViewHolder.class), fragmentkey);
fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Daily.class, layoutOfType, HabitItemRecyclerViewAdapter.DailyViewHolder.class, context), fragmentkey);
break;
case 3:
layoutOfType = R.layout.reward_item_card;
fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(User.getRewards(), layoutOfType, HabitItemRecyclerViewAdapter.RewardViewHolder.class), fragmentkey);
fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Reward.class, layoutOfType, HabitItemRecyclerViewAdapter.RewardViewHolder.class, context), fragmentkey);
break;
default:
layoutOfType = R.layout.todo_item_card;
fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(User.getTodos(), layoutOfType, HabitItemRecyclerViewAdapter.TodoViewHolder.class), fragmentkey);
fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(ToDo.class, layoutOfType, HabitItemRecyclerViewAdapter.TodoViewHolder.class, context), fragmentkey);
}
// ViewFragmentsDictionary.put(position, fragment);
@ -369,40 +392,19 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
avatarInHeader.UpdateData(User);
}
@Override
public void onUserReceived(HabitRPGUser user) {
TaskList.clear();
User = user;
if(user == null)
return;
private void updateHeader() {
updateUserAvatars();
toolbar.setTitle(User.getProfile().getName() + " - Lv" + User.getStats().getLvl());
TaskList.addAll(User.getHabits());
TaskList.addAll(User.getDailys());
TaskList.addAll(User.getTodos());
TaskList.addAll(User.getRewards());
android.support.v7.app.ActionBarDrawerToggle actionBarDrawerToggle = drawer.getActionBarDrawerToggle();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (actionBarDrawerToggle != null) {
actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
}
}
FillTasks();
updateUserAvatars();
android.support.v7.app.ActionBarDrawerToggle actionBarDrawerToggle = drawer.getActionBarDrawerToggle();
if (actionBarDrawerToggle != null) {
actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
}
FillTagFilterDrawer();
}
}, 100);
@Override
public void onUserReceived(HabitRPGUser user) {
}
@Override
@ -469,4 +471,10 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre
public void onTaskScoringFailed() {
}
@Override
public void onModelStateChanged(Class<? extends Model> aClass, BaseModel.Action action, String s, String s1) {
User = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle();
updateHeader();
}
}

View file

@ -1,5 +1,6 @@
package com.habitrpg.android.habitica.ui.adapter;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
@ -22,6 +23,10 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.Habit;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitItem;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.Reward;
import com.magicmicky.habitrpgwrapper.lib.models.tasks.ToDo;
import com.raizlabs.android.dbflow.runtime.FlowContentObserver;
import com.raizlabs.android.dbflow.sql.language.Select;
import com.raizlabs.android.dbflow.structure.BaseModel;
import com.raizlabs.android.dbflow.structure.Model;
import java.util.List;
@ -29,23 +34,41 @@ import butterknife.ButterKnife;
import butterknife.InjectView;
public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
extends RecyclerView.Adapter<HabitItemRecyclerViewAdapter.ViewHolder> {
extends RecyclerView.Adapter<HabitItemRecyclerViewAdapter.ViewHolder>
implements FlowContentObserver.OnSpecificModelStateChangedListener {
int layoutResource;
private Class<ViewHolder<THabitItem>> viewHolderClass;
List<THabitItem> contents;
Class<THabitItem> taskClass;
FlowContentObserver observer;
Context context;
static final int TYPE_HEADER = 0;
static final int TYPE_CELL = 1;
public HabitItemRecyclerViewAdapter(List<THabitItem> contents, int layoutResource, Class<ViewHolder<THabitItem>> viewHolderClass) {
this.contents = contents;
public HabitItemRecyclerViewAdapter(Class<THabitItem> newTaskClass, int layoutResource, Class<ViewHolder<THabitItem>> viewHolderClass, Context newContext) {
this.context = newContext;
this.taskClass = newTaskClass;
this.loadContent();
observer = new FlowContentObserver();
observer.registerForContentChanges(this.context, this.taskClass);
observer.addSpecificModelChangeListener(this);
this.layoutResource = layoutResource;
this.viewHolderClass = viewHolderClass;
}
@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
this.observer.unregisterForContentChanges(this.context);
super.onViewDetachedFromWindow(holder);
}
@Override
public int getItemViewType(int position) {
switch (position) {
@ -77,10 +100,8 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
case "HabitViewHolder":
return new HabitItemRecyclerViewAdapter.HabitViewHolder(view);
case "DailyViewHolder":
return new HabitItemRecyclerViewAdapter.DailyViewHolder(view);
case "TodoViewHolder":
return new HabitItemRecyclerViewAdapter.TodoViewHolder(view);
case "RewardViewHolder":
@ -98,6 +119,12 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
holder.bindHolder(item, position);
}
@Override
public void onModelStateChanged(Class<? extends Model> aClass, BaseModel.Action action, String s, String s1) {
//TODO: Not load all content every time something changed
this.loadContent();
}
public abstract class ViewHolder<THabitItem extends HabitItem> extends RecyclerView.ViewHolder {
@InjectView(R.id.card_view)
@ -231,4 +258,9 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
binding.setReward(habitItem);
}
}
public void loadContent() {
this.contents = new Select().from(this.taskClass).queryList();
notifyDataSetChanged();
}
}

View file

@ -60,8 +60,6 @@ public class HabitRPGInteractor {
}
}).registerTypeAdapter(Tags.class, new TagsAdapter().nullSafe()).create();
Log.d("AASDASDASD", gson.toString());
RestAdapter adapter = new RestAdapter.Builder()
.setEndpoint(server.toString())
.setRequestInterceptor(requestInterceptor)

View file

@ -100,10 +100,6 @@ public class HabitRPGUser extends BaseModel {
this.habits = habits;
}
public List<Tag> getTags() {
return tags;
}
public void setTags(List<Tag> tags) {
this.tags = tags;
}
@ -158,7 +154,7 @@ public class HabitRPGUser extends BaseModel {
.queryList();
}
return dailys;
}
}
@OneToMany(methods = {OneToMany.Method.SAVE, OneToMany.Method.DELETE}, variableName = "todos")
public List<ToDo> getTodos() {
@ -170,7 +166,6 @@ public class HabitRPGUser extends BaseModel {
return todos;
}
@OneToMany(methods = {OneToMany.Method.SAVE, OneToMany.Method.DELETE}, variableName = "rewards")
public List<Reward> getRewards() {
if(rewards == null) {
@ -181,4 +176,14 @@ public class HabitRPGUser extends BaseModel {
return rewards;
}
@OneToMany(methods = {OneToMany.Method.SAVE, OneToMany.Method.DELETE}, variableName = "rewards")
public List<Tag> getTags() {
if(tags == null) {
tags = new Select()
.from(Tag.class)
.queryList();
}
return tags;
}
}