mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
load task and user data from database
This commit is contained in:
parent
606038a085
commit
22b1e542cb
4 changed files with 94 additions and 51 deletions
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue