package com.novoda.todoapp.task.edit.view; import android.content.Context; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.util.AttributeSet; import android.view.View; import android.widget.TextView; import com.google.common.base.Optional; import com.novoda.data.SyncedData; import com.novoda.notils.caster.Views; import com.novoda.todoapp.R; import com.novoda.todoapp.task.data.model.Task; import com.novoda.todoapp.task.edit.displayer.TaskEditActionListener; import com.novoda.todoapp.task.edit.displayer.TaskEditDisplayer; public class TaskEditView extends CoordinatorLayout implements TaskEditDisplayer { private TextView titleView; private TextView descriptionView; private FloatingActionButton editActionButton; public TaskEditView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onFinishInflate() { super.onFinishInflate(); View.inflate(getContext(), R.layout.merge_task_edit_view, this); titleView = Views.findById(this, R.id.edit_task_title); descriptionView = Views.findById(this, R.id.edit_task_description); editActionButton = Views.findById(this, R.id.fab_edit_task_done); } @Override public void attach(final TaskEditActionListener taskActionListener) { editActionButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { taskActionListener.save(getTitle(), getDescription()); } }); } @Override public void detach(TaskEditActionListener taskActionListener) { editActionButton.setOnClickListener(null); } @Override public void display(SyncedData<Task> syncedData) { final Task task = syncedData.data(); titleView.setText(task.title().orNull()); descriptionView.setText(task.description().orNull()); editActionButton.setImageResource(R.drawable.ic_done); } private Optional<String> getTitle() { return getText(titleView); } private Optional<String> getDescription() { return getText(descriptionView); } private Optional<String> getText(TextView editText) { if (titleView.getText().toString().isEmpty()) { return Optional.absent(); } else { return Optional.of(editText.getText().toString()); } } @Override public void showEmptyTaskError() { Snackbar.make(this, R.string.empty_task_message, Snackbar.LENGTH_LONG).show(); //TODO maybe this should be extracted } }