package com.novoda.todoapp.tasks.view; import android.content.Context; import android.support.annotation.MenuRes; import android.support.annotation.Nullable; import android.support.design.widget.CoordinatorLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import com.novoda.notils.caster.Views; import com.novoda.todoapp.R; import com.novoda.todoapp.tasks.data.model.Tasks; import com.novoda.todoapp.tasks.displayer.TasksActionListener; import com.novoda.todoapp.tasks.displayer.TasksDisplayer; import com.novoda.todoapp.tasks.view.loading.TasksLoadingView; public class TasksView extends CoordinatorLayout implements TasksDisplayer { private RecyclerView recyclerView; private TasksAdapter adapter; private TasksActionListener tasksActionListener; public TasksView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } @MenuRes public int getMenuResId() { return R.menu.tasks_menu; } @Override protected void onFinishInflate() { super.onFinishInflate(); View.inflate(getContext(), R.layout.merge_tasks_view, this); recyclerView = Views.findById(this, R.id.tasks_list); adapter = new TasksAdapter(LayoutInflater.from(getContext())); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(adapter); } @Override public void attach(final TasksActionListener tasksActionListener) { this.tasksActionListener = tasksActionListener; adapter.setActionListener(tasksActionListener); Views.findById(this, R.id.fab_add_task).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { tasksActionListener.onAddTaskSelected(); } }); } @Override public void detach(TasksActionListener tasksActionListener) { this.tasksActionListener = null; adapter.setActionListener(null); Views.findById(this, R.id.fab_add_task).setOnClickListener(null); } @Override public void display(Tasks tasks) { adapter.update(tasks); } public TasksLoadingView getLoadingView() { return Views.findById(this, R.id.loading_view); } public View getContentView() { return recyclerView; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_refresh: tasksActionListener.onRefreshSelected(); return true; case R.id.menu_filter: showFilteringPopUpMenu(); return true; case R.id.menu_clear: tasksActionListener.onClearCompletedSelected(); return true; } return false; } private void showFilteringPopUpMenu() { PopupMenu popup = new PopupMenu(getContext(), Views.findById(this, R.id.menu_filter)); popup.getMenuInflater().inflate(R.menu.filter_tasks_menu, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.active: tasksActionListener.onFilterSelected(TasksActionListener.Filter.ACTIVE); return true; case R.id.completed: tasksActionListener.onFilterSelected(TasksActionListener.Filter.COMPLETED); return true; default: tasksActionListener.onFilterSelected(TasksActionListener.Filter.ALL); return true; } } }); popup.show(); } }