package ru.bsuirhelper.android.ui.notes;
import android.content.Context;
import android.content.Intent;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.*;
import android.view.animation.Animation;
import android.view.animation.Transformation;
import android.widget.*;
import com.google.analytics.tracking.android.EasyTracker;
import com.google.analytics.tracking.android.Fields;
import com.google.analytics.tracking.android.MapBuilder;
import ru.bsuirhelper.android.ApplicationSettings;
import ru.bsuirhelper.android.R;
import ru.bsuirhelper.android.core.notes.Note;
import ru.bsuirhelper.android.core.notes.NoteDatabase;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Влад on 02.11.13.
*/
public class FragmentNotes extends Fragment {
public static final String TITLE = "Заметки";
private ViewAdapterNotes mNotesAdapter;
private List<Note> mNotesList;
private List<View> mNotesForDelete;
private ListView mListView;
private NoteDatabase mNoteDatabase;
private final int ANIMATION_DURATION = 600;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragmentContent = inflater.inflate(R.layout.activity_notes, container, false);
mListView = (ListView) fragmentContent.findViewById(R.id.listview_notes);
mNoteDatabase = NoteDatabase.getInstance(getActivity().getApplicationContext());
mNotesForDelete = new ArrayList<View>();
return fragmentContent;
}
@Override
public void onResume() {
super.onResume();
mNotesList = new ArrayList<Note>(Arrays.asList(mNoteDatabase.fetchAllNotes()));
ApplicationSettings.getInstance(getActivity().getApplicationContext()).putInt("notes", mNotesList.size());
mNotesAdapter = new ViewAdapterNotes(getActivity().getApplicationContext(), mNotesList);
if (mNotesList.size() > 0) {
mListView.setAdapter(mNotesAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(view.getContext(), ActivityDetailNote.class);
intent.putExtra("note_id", ((ViewHolder) view.getTag()).id);
startActivity(intent);
}
});
}
}
@Override
public void onStart() {
super.onStart();
EasyTracker tracker = EasyTracker.getInstance(getActivity());
tracker.set(Fields.SCREEN_NAME, "Fragment notes");
tracker.send(MapBuilder.createAppView().build());
}
@Override
public void onStop() {
super.onStop();
EasyTracker.getInstance(getActivity().getApplicationContext()).activityStop(getActivity());
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_notes_fragment_actions, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem menu) {
switch (menu.getItemId()) {
case R.id.action_addnote:
startActivity(new Intent(getActivity().getApplicationContext(), ActivityEditNote.class));
return true;
case R.id.action_deletenotes:
deleteNotes();
// updateDrawerMenu();
return true;
default:
return super.onOptionsItemSelected(menu);
}
}
private class ViewHolder {
TextView noteText;
TextView noteTitle;
CheckBox checkBox;
TextView noteSubject;
boolean needInflate;
boolean checked = false;
int id;
}
private void deleteRowInListView(final View v, final int index) {
Animation.AnimationListener al = new Animation.AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
mNotesList.remove(index);
ViewHolder vh = (ViewHolder) v.getTag();
vh.needInflate = true;
mNotesAdapter.notifyDataSetChanged();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationStart(Animation animation) {
}
};
collapse(v, al);
}
private void collapse(final View v, Animation.AnimationListener al) {
final int initialHeight = v.getMeasuredHeight();
Animation anim = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
if (interpolatedTime == 1) {
v.setVisibility(View.GONE);
} else {
v.getLayoutParams().height = initialHeight - (int) (initialHeight * interpolatedTime);
v.requestLayout();
}
}
@Override
public boolean willChangeBounds() {
return true;
}
};
if (al != null) {
anim.setAnimationListener(al);
}
anim.setDuration(ANIMATION_DURATION);
v.startAnimation(anim);
}
private void deleteNotes() {
boolean someNoteChecked = false;
if (mListView.getCount() == 0) {
return;
}
for (int i = 0; i < mListView.getCount(); i++) {
View view = mListView.getChildAt(i);
ViewHolder vh = (ViewHolder) view.getTag();
if (vh.checked) {
someNoteChecked = true;
deleteRowInListView(view, i);
mNoteDatabase.removeNote(vh.id);
}
}
if (!someNoteChecked) {
Toast.makeText(getActivity().getApplicationContext(), "Не выбрана заметка для удаления", Toast.LENGTH_SHORT).show();
}
ApplicationSettings.getInstance(getActivity().getApplicationContext()).putInt("notes", mNoteDatabase.fetchAllNotes().length);
}
class ViewAdapterNotes extends ArrayAdapter<Note> {
private Context mContext;
private LayoutInflater mInflater;
Toast buttonDeleteNotes;
public ViewAdapterNotes(Context context, List<Note> notes) {
super(context, R.layout.view_note, notes);
mContext = context;
mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
buttonDeleteNotes = new Toast(context);
buttonDeleteNotes.setView(mInflater.inflate(R.layout.toast_deletenotes, null));
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final View rowView;
Note note = getItem(position);
if (convertView == null) {
rowView = mInflater.inflate(R.layout.view_note, null);
setViewHolder(rowView, note.getId());
} else if (((ViewHolder) convertView.getTag()).needInflate) {
rowView = mInflater.inflate(R.layout.view_note, null);
setViewHolder(rowView, note.getId());
} else {
rowView = convertView;
}
final ViewHolder vh = (ViewHolder) rowView.getTag();
vh.noteTitle.setText(note.title);
vh.noteText.setText(note.text);
if (!note.subject.equals("")) {
vh.noteSubject.setText(note.text);
vh.noteSubject.setVisibility(View.VISIBLE);
} else {
vh.noteSubject.setVisibility(View.GONE);
}
vh.noteSubject.setText(note.subject);
vh.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b) {
vh.noteTitle.setPaintFlags(vh.noteTitle.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
} else {
vh.noteTitle.setPaintFlags(vh.noteTitle.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
}
//buttonDeleteNotes.show();
vh.checked = !vh.checked;
}
});
return rowView;
}
private void setViewHolder(View v, int id) {
ViewHolder vh = new ViewHolder();
vh.noteTitle = (TextView) v.findViewById(R.id.textview_notetitle);
vh.noteText = (TextView) v.findViewById(R.id.textview_notetext);
vh.checkBox = (CheckBox) v.findViewById(R.id.checkbox_notedelete);
vh.noteSubject = (TextView) v.findViewById(R.id.textview_notesubject);
vh.needInflate = false;
vh.id = id;
v.setTag(vh);
}
}
}