package com.nononsenseapps.notepad.ui.list;
import android.database.Cursor;
import android.support.v4.view.MotionEventCompat;
import android.view.MotionEvent;
import android.view.View;
import android.widget.CompoundButton;
import com.nononsenseapps.notepad.R;
import com.nononsenseapps.notepad.data.model.sql.Task;
import com.nononsenseapps.notepad.databinding.TasklistItemRichBinding;
import com.nononsenseapps.notepad.ui.common.NoteCheckBox;
class ItemViewHolder extends ViewHolder implements View.OnClickListener,
View.OnLongClickListener {
private static final String TAG = "ViewHolder";
private final SelectedItemHandler selectedItemHandler;
private TaskListFragment taskListFragment;
private final TasklistItemRichBinding binding;
private final NoteCheckBox checkbox;
private final CompoundButton.OnCheckedChangeListener checkBoxListener;
private final long listId;
long id = -1;
public ItemViewHolder(final TaskListFragment taskListFragment,
final TasklistItemRichBinding binding,
final long listId) {
super(binding.getRoot());
this.taskListFragment = taskListFragment;
this.listId = listId;
this.binding = binding;
this.selectedItemHandler = taskListFragment.getSelectedItemHandler();
checkbox = (NoteCheckBox) binding.cardSection.getRoot().findViewById(R.id.checkbox);
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
itemView.setLongClickable(true);
binding.dragHandle.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
taskListFragment.getTouchHelper().startDrag(ItemViewHolder.this);
}
return false;
}
});
checkBoxListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Task.setCompleted(ItemViewHolder.this.binding.getRoot().getContext(),
isChecked, ((NoteCheckBox) buttonView).getNoteId());
}
};
}
@Override
public void onBind(final Cursor cursor) {
id = cursor.getLong(0);
// Title
binding.cardSection.text.setMaxLines(taskListFragment.getRowCount());
binding.cardSection.text
.useSecondaryColor(!cursor.isNull(cursor.getColumnIndex(Task.Columns.COMPLETED)));
binding.cardSection.text.setTextTitle(cursor.getString(cursor.getColumnIndex(Task.Columns.TITLE)));
// Note
// Only if task it not locked
// or only one line
if (cursor.getInt(9) != 1 && taskListFragment.getRowCount() > 1) {
binding.cardSection.text.setTextRest(cursor.getString(cursor.getColumnIndex(Task.Columns.NOTE)));
} else {
binding.cardSection.text.setTextRest("");
}
// Checkbox
checkbox.setOnCheckedChangeListener(null);
checkbox.setChecked(!cursor.isNull(cursor.getColumnIndex(Task.Columns.COMPLETED)));
checkbox.setNoteId(cursor.getLong(0));
checkbox.setOnCheckedChangeListener(checkBoxListener);
//holder.checkbox.setVisibility(mHideCheckbox ? View.GONE : View.VISIBLE);
// Due
if (cursor.isNull(cursor.getColumnIndex(Task.Columns.DUE))) {
binding.cardSection.date.setVisibility(View.GONE);
} else {
binding.cardSection.date.setVisibility(View.VISIBLE);
binding.cardSection.date.setTimeText(cursor.getLong(cursor.getColumnIndex(Task.Columns.DUE)));
}
if (taskListFragment.getSortType() != null && taskListFragment.getString(R.string.const_possubsort).equals(taskListFragment.getSortType())) {
binding.dragHandle.setVisibility(View.VISIBLE);
binding.cardSection.dragPadding.setVisibility(View.VISIBLE);
} else {
binding.dragHandle.setVisibility(View.GONE);
binding.cardSection.dragPadding.setVisibility(View.GONE);
}
binding.getRoot().setActivated(selectedItemHandler.isItemSelected(id));
}
@Override
public void onClick(final View v) {
if (selectedItemHandler.isActiveSelectionMode()) {
// same as long press
onLongClick(v);
return;
}
if (taskListFragment.getListener() != null && id > 0) {
taskListFragment.getListener().openTask(Task.getUri(id), listId, v);
}
}
@Override
public boolean onLongClick(final View v) {
if (id < 1) {
return false;
}
selectedItemHandler.toggleSelection(id);
binding.getRoot().setActivated(selectedItemHandler.isItemSelected(id));
return true;
}
}