use of com.farmerbb.notepad.adapter.NoteListAdapter in project Notepad by farmerbb.
the class NoteListFragment method listNotes.
private void listNotes() {
// Get number of files
int numOfFiles = getNumOfNotes(getActivity().getFilesDir());
int numOfNotes = numOfFiles;
// Get array of file names
String[] listOfFiles = getListOfNotes(getActivity().getFilesDir());
ArrayList<String> listOfNotes = new ArrayList<>();
// Remove any files from the list that aren't notes
for (int i = 0; i < numOfFiles; i++) {
if (NumberUtils.isNumber(listOfFiles[i]))
listOfNotes.add(listOfFiles[i]);
else
numOfNotes--;
}
// Create arrays of note lists
String[] listOfNotesByDate = new String[numOfNotes];
String[] listOfNotesByName = new String[numOfNotes];
NoteListItem[] listOfTitlesByDate = new NoteListItem[numOfNotes];
NoteListItem[] listOfTitlesByName = new NoteListItem[numOfNotes];
ArrayList<NoteListItem> list = new ArrayList<>(numOfNotes);
for (int i = 0; i < numOfNotes; i++) {
listOfNotesByDate[i] = listOfNotes.get(i);
}
// If sort-by is "by date", sort in reverse order
if (sortBy.equals("date"))
Arrays.sort(listOfNotesByDate, Collections.reverseOrder());
// Get array of first lines of each note
for (int i = 0; i < numOfNotes; i++) {
try {
String title = listener.loadNoteTitle(listOfNotesByDate[i]);
String date = listener.loadNoteDate(listOfNotesByDate[i]);
listOfTitlesByDate[i] = new NoteListItem(title, date);
} catch (IOException e) {
showToast(R.string.error_loading_list);
}
}
// If sort-by is "by name", sort alphabetically
if (sortBy.equals("name")) {
// Copy titles array
System.arraycopy(listOfTitlesByDate, 0, listOfTitlesByName, 0, numOfNotes);
// Sort titles
Arrays.sort(listOfTitlesByName, NoteListItem.NoteComparatorTitle);
// Initialize notes array
for (int i = 0; i < numOfNotes; i++) listOfNotesByName[i] = "new";
// Copy filenames array with new sort order of titles and nullify date arrays
for (int i = 0; i < numOfNotes; i++) {
for (int j = 0; j < numOfNotes; j++) {
if (listOfTitlesByName[i].getNote().equals(listOfTitlesByDate[j].getNote()) && listOfNotesByName[i].equals("new")) {
listOfNotesByName[i] = listOfNotesByDate[j];
listOfNotesByDate[j] = "";
listOfTitlesByDate[j] = new NoteListItem("", "");
}
}
}
// Populate ArrayList with notes, showing name as first line of the notes
list.addAll(Arrays.asList(listOfTitlesByName));
} else if (sortBy.equals("date"))
list.addAll(Arrays.asList(listOfTitlesByDate));
// Create the custom adapters to bind the array to the ListView
final NoteListDateAdapter dateAdapter = new NoteListDateAdapter(getActivity(), list);
final NoteListAdapter adapter = new NoteListAdapter(getActivity(), list);
// Display the ListView
if (showDate)
listView.setAdapter(dateAdapter);
else
listView.setAdapter(adapter);
listView.setSelection(ScrollPositions.getInstance().getPosition());
// Finalize arrays to prepare for handling clicked items
final String[] finalListByDate = listOfNotesByDate;
final String[] finalListByName = listOfNotesByName;
// Make ListView handle clicked items
listView.setClickable(true);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
ScrollPositions.getInstance().setPosition(listView.getFirstVisiblePosition());
if (sortBy.equals("date")) {
if (directEdit)
listener.editNote(finalListByDate[position]);
else
listener.viewNote(finalListByDate[position]);
} else if (sortBy.equals("name")) {
if (directEdit)
listener.editNote(finalListByName[position]);
else
listener.viewNote(finalListByName[position]);
}
}
});
// Make ListView handle contextual action bar
final ArrayList<String> cab = new ArrayList<>(numOfNotes);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// Respond to clicks on the actions in the CAB
switch(item.getItemId()) {
case R.id.action_select_all:
cab.clear();
for (int i = 0; i < listView.getAdapter().getCount(); i++) {
listView.setItemChecked(i, true);
}
return false;
case R.id.action_export:
// Action picked, so close the CAB
mode.finish();
listener.exportNote(cab.toArray());
return true;
case R.id.action_delete:
// Action picked, so close the CAB
mode.finish();
listener.deleteNote(cab.toArray());
return true;
default:
return false;
}
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
listener.hideFab();
// Inflate the menu for the CAB
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
// Clear any old values from cab array
cab.clear();
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
listener.showFab();
}
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
if (position > -1) {
// Add/remove filenames to cab array as they are checked/unchecked
if (checked) {
if (sortBy.equals("date"))
cab.add(finalListByDate[position]);
if (sortBy.equals("name"))
cab.add(finalListByName[position]);
} else {
if (sortBy.equals("date"))
cab.remove(finalListByDate[position]);
if (sortBy.equals("name"))
cab.remove(finalListByName[position]);
}
listView.setItemChecked(-1, false);
}
// Update the title in CAB
mode.setTitle(cab.size() + " " + listener.getCabString(cab.size()));
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
});
// If there are no saved notes, then display the empty view
if (numOfNotes == 0) {
TextView empty = (TextView) getActivity().findViewById(R.id.empty);
listView.setEmptyView(empty);
}
}
Aggregations