Add Event Sender / Receiver

Rename RecyclerViewFragment.java to TaskRecyclerViewFragment.java
This commit is contained in:
Negue 2015-07-11 15:29:30 +02:00
parent 4416366fa7
commit 07f975e68d
3 changed files with 129 additions and 31 deletions

View file

@ -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<Integer, RecyclerViewFragment> ViewFragmentsDictionary = new HashMap<Integer, RecyclerViewFragment>();
Map<Integer, TaskRecyclerViewFragment> ViewFragmentsDictionary = new HashMap<Integer, TaskRecyclerViewFragment>();
List<HabitItem> TaskList = new ArrayList<HabitItem>();
@ -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<? extends Model> 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();
}
});

View file

@ -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<THabitItem extends HabitItem>
extends RecyclerView.Adapter<HabitItemRecyclerViewAdapter.ViewHolder>
@ -104,7 +108,6 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
case "TodoViewHolder":
return new HabitItemRecyclerViewAdapter.TodoViewHolder(view);
case "RewardViewHolder":
return new HabitItemRecyclerViewAdapter.RewardViewHolder(view);
}
}
@ -125,7 +128,7 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
this.loadContent();
}
public abstract class ViewHolder<THabitItem extends HabitItem> extends RecyclerView.ViewHolder {
public abstract class ViewHolder<THabitItem extends HabitItem> extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
@InjectView(R.id.card_view)
protected CardView cardView;
@ -146,6 +149,12 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
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<THabitItem extends HabitItem>
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<Habit> {
@ -174,6 +204,28 @@ public class HabitItemRecyclerViewAdapter<THabitItem extends HabitItem>
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

View file

@ -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);
}
}