From 07f975e68db32ad09102fe5f4c3e11ea140f940a Mon Sep 17 00:00:00 2001 From: Negue Date: Sat, 11 Jul 2015 15:29:30 +0200 Subject: [PATCH] Add Event Sender / Receiver Rename RecyclerViewFragment.java to TaskRecyclerViewFragment.java --- .../android/habitica/MainActivity.java | 57 ++++++++++++++----- .../adapter/HabitItemRecyclerViewAdapter.java | 56 +++++++++++++++++- ...ent.java => TaskRecyclerViewFragment.java} | 47 ++++++++++----- 3 files changed, 129 insertions(+), 31 deletions(-) rename Habitica/src/com/habitrpg/android/habitica/ui/fragments/{RecyclerViewFragment.java => TaskRecyclerViewFragment.java} (58%) diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java index 13fe82bfc..3dc64a725 100644 --- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java @@ -3,13 +3,10 @@ package com.habitrpg.android.habitica; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; -import android.os.Handler; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; -import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; @@ -23,11 +20,15 @@ import com.habitrpg.android.habitica.callbacks.TaskCreationCallback; import com.habitrpg.android.habitica.callbacks.TaskDeletionCallback; import com.habitrpg.android.habitica.callbacks.TaskScoringCallback; import com.habitrpg.android.habitica.callbacks.TaskUpdateCallback; +import com.habitrpg.android.habitica.events.AddTaskTappedEvent; +import com.habitrpg.android.habitica.events.HabitScoreEvent; +import com.habitrpg.android.habitica.events.TaskLongPressedEvent; +import com.habitrpg.android.habitica.events.TaskTappedEvent; import com.habitrpg.android.habitica.prefs.PrefsActivity; import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel; import com.habitrpg.android.habitica.ui.EditTextDrawer; import com.habitrpg.android.habitica.ui.adapter.HabitItemRecyclerViewAdapter; -import com.habitrpg.android.habitica.ui.fragments.RecyclerViewFragment; +import com.habitrpg.android.habitica.ui.fragments.TaskRecyclerViewFragment; import com.instabug.wrapper.support.activity.InstabugAppCompatActivity; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.Tag; @@ -57,6 +58,7 @@ import java.util.Map; import butterknife.ButterKnife; import butterknife.InjectView; +import de.greenrobot.event.EventBus; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; @@ -76,7 +78,7 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre Drawer filterDrawer; //endregion - Map ViewFragmentsDictionary = new HashMap(); + Map ViewFragmentsDictionary = new HashMap(); List TaskList = new ArrayList(); @@ -100,6 +102,9 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre // Inject Controls ButterKnife.inject(this); + // Receive Events + EventBus.getDefault().register(this); + this.hostConfig = PrefsActivity.fromContext(this); if (hostConfig == null || hostConfig.getApi() == null || hostConfig.getApi().equals("") || hostConfig.getUser() == null || hostConfig.getUser().equals("")) { startActivity(new Intent(this, LoginActivity.class)); @@ -208,7 +213,7 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre this.observer.addSpecificModelChangeListener(this); - SetUserData(); + SetUserData(false); } @Override @@ -225,10 +230,27 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre if (observer != null) { this.observer.unregisterForContentChanges(this.getApplicationContext()); } + EventBus.getDefault().unregister(this); super.onDestroy(); } + public void onEvent(TaskTappedEvent event){ + Toast.makeText(this, event.Task.text, Toast.LENGTH_SHORT).show(); + } + + public void onEvent(TaskLongPressedEvent event){ + Toast.makeText(this, "LongPress: " +event.Task.text, Toast.LENGTH_SHORT).show(); + } + + public void onEvent(HabitScoreEvent event){ + Toast.makeText(this, "Score Up="+event.Up+" " +event.Habit.text, Toast.LENGTH_SHORT).show(); + } + + public void onEvent(AddTaskTappedEvent event){ + Toast.makeText(this, "Add Task " +event.ClassType.getSimpleName(), Toast.LENGTH_SHORT).show(); + } + public void loadTaskLists() { android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); @@ -239,7 +261,7 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre @Override public Fragment getItem(int position) { int layoutOfType; - RecyclerViewFragment fragment; + TaskRecyclerViewFragment fragment; String fragmentkey = "Recycler$" + position; final android.content.Context context = getApplicationContext(); @@ -247,19 +269,19 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre switch (position) { case 0: layoutOfType = R.layout.habit_item_card; - fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Habit.class, layoutOfType, HabitItemRecyclerViewAdapter.HabitViewHolder.class, context), fragmentkey); + fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Habit.class, layoutOfType, HabitItemRecyclerViewAdapter.HabitViewHolder.class, context), Habit.class); break; case 1: layoutOfType = R.layout.daily_item_card; - fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Daily.class, layoutOfType, HabitItemRecyclerViewAdapter.DailyViewHolder.class, context), fragmentkey); + fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Daily.class, layoutOfType, HabitItemRecyclerViewAdapter.DailyViewHolder.class, context), Daily.class); break; case 3: layoutOfType = R.layout.reward_item_card; - fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Reward.class, layoutOfType, HabitItemRecyclerViewAdapter.RewardViewHolder.class, context), fragmentkey); + fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(Reward.class, layoutOfType, HabitItemRecyclerViewAdapter.RewardViewHolder.class, context), Reward.class); break; default: layoutOfType = R.layout.todo_item_card; - fragment = RecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(ToDo.class, layoutOfType, HabitItemRecyclerViewAdapter.TodoViewHolder.class, context), fragmentkey); + fragment = TaskRecyclerViewFragment.newInstance(new HabitItemRecyclerViewAdapter(ToDo.class, layoutOfType, HabitItemRecyclerViewAdapter.TodoViewHolder.class, context), ToDo.class); } // ViewFragmentsDictionary.put(position, fragment); @@ -450,16 +472,21 @@ public class MainActivity extends InstabugAppCompatActivity implements OnTaskCre public void onModelStateChanged(Class aClass, BaseModel.Action action, String s, String s1) { User = new Select().from(HabitRPGUser.class).where(Condition.column("id").eq(hostConfig.getUser())).querySingle(); - SetUserData(); + SetUserData(!taskListAlreadyAdded); } - private void SetUserData() { + private boolean taskListAlreadyAdded; + + private void SetUserData(final boolean onlyHeader) { if (User != null) { runOnUiThread(new Runnable() { @Override public void run() { - loadTaskLists(); - FillTagFilterDrawer(); + if(!onlyHeader) { + taskListAlreadyAdded = true; + loadTaskLists(); + FillTagFilterDrawer(); + } updateHeader(); } }); 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 8ad402b1d..7f57e4d47 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/adapter/HabitItemRecyclerViewAdapter.java @@ -16,6 +16,9 @@ import com.habitrpg.android.habitica.databinding.DailyItemCardBinding; import com.habitrpg.android.habitica.databinding.HabitItemCardBinding; import com.habitrpg.android.habitica.databinding.RewardItemCardBinding; import com.habitrpg.android.habitica.databinding.TodoItemCardBinding; +import com.habitrpg.android.habitica.events.HabitScoreEvent; +import com.habitrpg.android.habitica.events.TaskLongPressedEvent; +import com.habitrpg.android.habitica.events.TaskTappedEvent; import com.habitrpg.android.habitica.ui.helpers.HabitColorHelper; import com.habitrpg.android.habitica.ui.helpers.ViewHelper; import com.magicmicky.habitrpgwrapper.lib.models.tasks.Daily; @@ -32,6 +35,7 @@ import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; +import de.greenrobot.event.EventBus; public class HabitItemRecyclerViewAdapter extends RecyclerView.Adapter @@ -104,7 +108,6 @@ public class HabitItemRecyclerViewAdapter case "TodoViewHolder": return new HabitItemRecyclerViewAdapter.TodoViewHolder(view); case "RewardViewHolder": - return new HabitItemRecyclerViewAdapter.RewardViewHolder(view); } } @@ -125,7 +128,7 @@ public class HabitItemRecyclerViewAdapter this.loadContent(); } - public abstract class ViewHolder extends RecyclerView.ViewHolder { + public abstract class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { @InjectView(R.id.card_view) protected CardView cardView; @@ -146,6 +149,12 @@ public class HabitItemRecyclerViewAdapter public ViewHolder(View itemView) { super(itemView); + itemView.setOnClickListener(this); + itemView.setClickable(true); + + itemView.setOnLongClickListener(this); + itemView.setLongClickable(true); + ButterKnife.inject(this, itemView); resources = itemView.getResources(); @@ -158,6 +167,27 @@ public class HabitItemRecyclerViewAdapter SetCardBackgroundColor(resources.getColor(itemColorRes)); Item = habitItem; } + + @Override + public void onClick(View v) { + if (v != itemView) + return; + + TaskTappedEvent event = new TaskTappedEvent(); + event.Task = Item; + + EventBus.getDefault().post(event); + } + + @Override + public boolean onLongClick(View v) { + TaskLongPressedEvent event = new TaskLongPressedEvent(); + event.Task = Item; + + EventBus.getDefault().post(event); + + return true; + } } public class HabitViewHolder extends ViewHolder { @@ -174,6 +204,28 @@ public class HabitItemRecyclerViewAdapter super(itemView); binding = DataBindingUtil.bind(itemView); + + btnPlus.setClickable(true); + btnPlus.setOnClickListener(this); + + btnMinus.setClickable(true); + btnMinus.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + HabitScoreEvent event = new HabitScoreEvent(); + + if (v == btnPlus) { + event.Up = true; + event.Habit = Item; + + EventBus.getDefault().post(event); + } else if (v == btnMinus) { + event.Habit = Item; + + EventBus.getDefault().post(event); + } else super.onClick(v); } @Override diff --git a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/RecyclerViewFragment.java b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java similarity index 58% rename from Habitica/src/com/habitrpg/android/habitica/ui/fragments/RecyclerViewFragment.java rename to Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java index a116ee91a..aa120542f 100644 --- a/Habitica/src/com/habitrpg/android/habitica/ui/fragments/RecyclerViewFragment.java +++ b/Habitica/src/com/habitrpg/android/habitica/ui/fragments/TaskRecyclerViewFragment.java @@ -15,22 +15,29 @@ import android.view.ViewGroup; import com.github.florent37.materialviewpager.MaterialViewPagerHelper; import com.github.florent37.materialviewpager.adapter.RecyclerViewMaterialAdapter; import com.habitrpg.android.habitica.R; +import com.habitrpg.android.habitica.events.AddTaskTappedEvent; +import com.habitrpg.android.habitica.events.TaskTappedEvent; +import com.habitrpg.android.habitica.ui.adapter.HabitItemRecyclerViewAdapter; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.HabitItem; +import com.magicmicky.habitrpgwrapper.lib.models.tasks.ToDo; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.iconics.typeface.FontAwesome; +import de.greenrobot.event.EventBus; + /** -RecyclerViewFragment - - Creates the View only once - - Adds FAB Icon - - Handles the ScrollPosition - if anyone has a better solution please share it - - + * TaskRecyclerViewFragment + * - Creates the View only once + * - Adds FAB Icon + * - Handles the ScrollPosition - if anyone has a better solution please share it */ -public class RecyclerViewFragment extends Fragment { +public class TaskRecyclerViewFragment extends Fragment implements View.OnClickListener { public RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; + private Class classType; - public void SetInnerAdapter(RecyclerView.Adapter adapter, String tag) { + public void SetInnerAdapter(RecyclerView.Adapter adapter, Class classType) { + this.classType = classType; mAdapter = new RecyclerViewMaterialAdapter(adapter); } @@ -60,9 +67,13 @@ public class RecyclerViewFragment extends Fragment { FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab); - IconicsDrawable icon = new IconicsDrawable(context, FontAwesome.Icon.faw_plus).color(Color.WHITE).sizeDp(24); + if (fab.getDrawable() == null) { + IconicsDrawable icon = new IconicsDrawable(context, FontAwesome.Icon.faw_plus).color(Color.WHITE).sizeDp(24); - fab.setImageDrawable(icon); + fab.setImageDrawable(icon); + fab.setOnClickListener(this); + fab.setClickable(true); + } layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager(); @@ -81,13 +92,21 @@ public class RecyclerViewFragment extends Fragment { alreadyCreated = true; } - public static RecyclerViewFragment newInstance(RecyclerView.Adapter adapter, String tag) { - RecyclerViewFragment fragment = new RecyclerViewFragment(); + public static TaskRecyclerViewFragment newInstance(RecyclerView.Adapter adapter, Class classType) { + TaskRecyclerViewFragment fragment = new TaskRecyclerViewFragment(); - fragment.SetInnerAdapter(adapter, tag); + fragment.SetInnerAdapter(adapter, classType); - Log.d("RecyclerViewFragment", "newInstance"); + Log.d("TaskRecyclerViewFragment", "newInstance"); return fragment; } + + @Override + public void onClick(View v) { + AddTaskTappedEvent event = new AddTaskTappedEvent(); + event.ClassType = classType; + + EventBus.getDefault().post(event); + } }