diff --git a/Habitica/src/com/habitrpg/android/habitica/AddTaskDialog.java b/Habitica/src/com/habitrpg/android/habitica/AddTaskDialog.java index fd3ba6794..073c2f16c 100644 --- a/Habitica/src/com/habitrpg/android/habitica/AddTaskDialog.java +++ b/Habitica/src/com/habitrpg/android/habitica/AddTaskDialog.java @@ -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); diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java index 4c055e661..fea2e888f 100644 --- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java @@ -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, 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() { + + } } \ No newline at end of file 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 e81809129..dc6607736 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java @@ -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 static final int TYPE_HEADER = 0; static final int TYPE_CELL = 1; + private RecyclerView.Adapter parentAdapter; public HabitItemRecyclerViewAdapter(Class newTaskClass, int layoutResource, Class> viewHolderClass, Context newContext) { @@ -70,6 +73,11 @@ public class HabitItemRecyclerViewAdapter this.viewHolderClass = viewHolderClass; } + public void setParentAdapter(RecyclerView.Adapter parentAdapter) + { + this.parentAdapter = parentAdapter; + } + @Override public void onViewDetachedFromWindow(ViewHolder holder) { this.observer.unregisterForContentChanges(this.context); @@ -125,10 +133,19 @@ public class HabitItemRecyclerViewAdapter 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 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 extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { @@ -341,6 +358,14 @@ public class HabitItemRecyclerViewAdapter public void loadContent() { this.contents = new Select().from(this.taskClass).queryList(); - notifyDataSetChanged(); + + if(parentAdapter != null) + { + parentAdapter.notifyDataSetChanged(); + } + else + { + notifyDataSetChanged(); + } } } diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java index aa120542f..1eeae5b52 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java @@ -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);