Add new Tasks / handler to reduce loadContent calls in the Adapter

This commit is contained in:
Negue 2015-07-12 20:37:02 +02:00
parent ee48c6adfa
commit 3bfa4bb243
4 changed files with 73 additions and 14 deletions

View file

@ -119,10 +119,10 @@ public class AddTaskDialog extends DialogFragment implements OnDateSetListener,
this.taskText.setText(text);
Log.d("AddTaskDialog", "type=" + type);
hType = type.equals(daily.toString()) ?
daily : type.equals(reward.toString()) ?
reward : type.equals(todo.toString()) ?
todo : habit;
hType = type.equals(daily.toString()) ? daily
: type.equals(reward.toString()) ? reward
: type.equals(todo.toString()) ? todo
: habit;
LinearLayout specialView = (LinearLayout) mainView.findViewById(R.id.repeat_days);
if (hType == daily) {
this.initializeSpecialButtons(specialView, mShortWeekDayStrings, repeat);

View file

@ -19,7 +19,9 @@ import com.crashlytics.android.Crashlytics;
import com.crashlytics.android.core.CrashlyticsCore;
import com.github.florent37.materialviewpager.MaterialViewPager;
import com.habitrpg.android.habitica.callbacks.HabitRPGUserCallback;
import com.habitrpg.android.habitica.callbacks.TaskCreationCallback;
import com.habitrpg.android.habitica.callbacks.TaskScoringCallback;
import com.habitrpg.android.habitica.callbacks.TaskUpdateCallback;
import com.habitrpg.android.habitica.events.*;
import com.habitrpg.android.habitica.prefs.PrefsActivity;
import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel;
@ -64,7 +66,7 @@ import retrofit.client.Response;
public class MainActivity extends InstabugAppCompatActivity implements HabitRPGUserCallback.OnUserReceived,
TaskScoringCallback.OnTaskScored, Callback<Void>, OnTaskCreationListener,
FlowContentObserver.OnSpecificModelStateChangedListener {
FlowContentObserver.OnSpecificModelStateChangedListener, TaskCreationCallback.OnHabitCreated, TaskUpdateCallback.OnHabitUpdated {
static final int SETTINGS = 11;
static final int ABOUT = 12;
@ -278,8 +280,8 @@ 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(TodoCheckedEvent event) {
showSnackbar("ToDo Checked= " + event.ToDo.getText(), true);
}
public void onEvent(HabitScoreEvent event) {
@ -287,7 +289,12 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
}
public void onEvent(AddTaskTappedEvent event) {
showSnackbar("Add Task " + event.ClassType.getSimpleName());
Bundle b = new Bundle();
b.putString("type", event.ClassType.getSimpleName().toLowerCase());
AddTaskDialog dialog = new AddTaskDialog();
dialog.setArguments(b);
dialog.show(getSupportFragmentManager(), "AddTaskDialog");
}
public void onEvent(BuyRewardTappedEvent event) {
@ -537,7 +544,11 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
@Override
public void onTaskCreation(HabitItem task, boolean editMode) {
task.save();
if (!editMode) {
this.mAPIHelper.createUndefNewTask(task, new TaskCreationCallback(this));
} else {
this.mAPIHelper.uprateUndefinedTask(task, new TaskUpdateCallback(this));
}
// TODO update task in list
}
@ -546,4 +557,26 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU
public void onTaskCreationFail(String message) {
showSnackbar(message, true);
}
// TaskCreationCallback
@Override
public void onTaskCreated(HabitItem habit) {
habit.save();
}
@Override
public void onTaskCreationFail() {
}
// TaskUpdateCallback
@Override
public void onTaskUpdated(HabitItem habit) {
habit.save();
}
@Override
public void onTaskUpdateFail() {
}
}

View file

@ -2,8 +2,10 @@ package com.habitrpg.android.habitica.ui.adapter;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.os.Handler;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -53,6 +55,7 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
static final int TYPE_HEADER = 0;
static final int TYPE_CELL = 1;
private RecyclerView.Adapter<ViewHolder> parentAdapter;
public HabitItemRecyclerViewAdapter(Class<THabitItem> newTaskClass, int layoutResource, Class<ViewHolder<THabitItem>> viewHolderClass, Context newContext) {
@ -70,6 +73,11 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
this.viewHolderClass = viewHolderClass;
}
public void setParentAdapter(RecyclerView.Adapter<HabitItemRecyclerViewAdapter.ViewHolder> parentAdapter)
{
this.parentAdapter = parentAdapter;
}
@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
this.observer.unregisterForContentChanges(this.context);
@ -125,10 +133,19 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
holder.bindHolder(item, position);
}
private Handler handler = new Handler();
private Runnable reloadContentRunable = new Runnable() {
@Override
public void run() {
Log.d("Reload Content","");
loadContent();
}
};
@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();
handler.removeCallbacks(reloadContentRunable);
handler.postDelayed(reloadContentRunable, 200);
}
public abstract class ViewHolder<THabitItem extends HabitItem> extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
@ -341,6 +358,14 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
public void loadContent() {
this.contents = new Select().from(this.taskClass).queryList();
notifyDataSetChanged();
if(parentAdapter != null)
{
parentAdapter.notifyDataSetChanged();
}
else
{
notifyDataSetChanged();
}
}
}

View file

@ -36,9 +36,10 @@ public class TaskRecyclerViewFragment extends Fragment implements View.OnClickLi
private RecyclerView.Adapter mAdapter;
private Class<?> classType;
public void SetInnerAdapter(RecyclerView.Adapter adapter, Class<?> classType) {
public void SetInnerAdapter(HabitItemRecyclerViewAdapter adapter, Class<?> classType) {
this.classType = classType;
mAdapter = new RecyclerViewMaterialAdapter(adapter);
adapter.setParentAdapter(mAdapter);
}
private View view;
@ -92,7 +93,7 @@ public class TaskRecyclerViewFragment extends Fragment implements View.OnClickLi
alreadyCreated = true;
}
public static TaskRecyclerViewFragment newInstance(RecyclerView.Adapter adapter, Class<?> classType) {
public static TaskRecyclerViewFragment newInstance(HabitItemRecyclerViewAdapter adapter, Class<?> classType) {
TaskRecyclerViewFragment fragment = new TaskRecyclerViewFragment();
fragment.SetInnerAdapter(adapter, classType);