/** * */ package net.bible.android.view.activity.mynote; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import net.bible.android.activity.R; import net.bible.android.control.mynote.MyNoteControl; import net.bible.android.view.activity.base.Dialogs; import net.bible.android.view.activity.base.ListActionModeHelper; import net.bible.android.view.activity.base.ListActivityBase; import net.bible.service.db.mynote.MyNoteDto; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; /** * Show a list of existing User Notes and allow view/edit/delete * * @see gnu.lgpl.License for license details.<br> * The copyright to this program is held by it's authors. * @author John D. Lewis [balinjdl at gmail dot com] * @author Martin Denham [mjdenham at gmail dot com] */ public class MyNotes extends ListActivityBase implements ListActionModeHelper.ActionModeActivity { private MyNoteControl myNoteControl; // the document list private List<MyNoteDto> myNoteList = new ArrayList<>(); private ListActionModeHelper listActionModeHelper; private static final int LIST_ITEM_TYPE = R.layout.list_item_2_highlighted; private static final String TAG = "UserNotes"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { // integrateWithHistoryManager to ensure the previous document is loaded again when the user presses Back super.onCreate(savedInstanceState, true); setContentView(R.layout.list); buildActivityComponent().inject(this); initialiseView(); } private void initialiseView() { listActionModeHelper = new ListActionModeHelper(getListView(), R.menu.usernote_context_menu); getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { return listActionModeHelper.startActionMode(MyNotes.this, position); } }); loadUserNoteList(); // prepare the document list view ArrayAdapter<MyNoteDto> myNoteArrayAdapter = new MyNoteItemAdapter(this, LIST_ITEM_TYPE, myNoteList, this, myNoteControl); setListAdapter(myNoteArrayAdapter); registerForContextMenu(getListView()); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { try { // check to see if Action Mode is in operation if (!listActionModeHelper.isInActionMode()) { myNoteSelected(myNoteList.get(position)); // HistoryManager will create a new Activity on Back finish(); } } catch (Exception e) { Log.e(TAG, "document selection error", e); Dialogs.getInstance().showErrorMsg(R.string.error_occurred, e); } } @Override public boolean onActionItemClicked(MenuItem item, List<Integer> selectedItemPositions) { List<MyNoteDto> selectedNotes = getSelectedMyNotes(selectedItemPositions); if (!selectedNotes.isEmpty()) { switch (item.getItemId()) { case (R.id.delete): delete(selectedNotes); return true; } } return false; } @Override public boolean isItemChecked(int position) { return getListView().isItemChecked(position); } private List<MyNoteDto> getSelectedMyNotes(List<Integer> selectedItemPositions) { List<MyNoteDto> selectedNotes = new ArrayList<>(); for (int position : selectedItemPositions) { selectedNotes.add(myNoteList.get(position)); } return selectedNotes; } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mynote_actionbar_menu, menu); return true; } /** * on Click handlers */ @Override public boolean onOptionsItemSelected(MenuItem item) { boolean isHandled = false; switch (item.getItemId()) { // selected to allow jump to a certain day case (R.id.sortByToggle): isHandled = true; try { myNoteControl.changeSortOrder(); String sortDesc = myNoteControl.getSortOrderDescription(); Toast.makeText(this, sortDesc, Toast.LENGTH_SHORT).show(); loadUserNoteList(); } catch (Exception e) { Log.e(TAG, "Error sorting notes", e); Dialogs.getInstance().showErrorMsg(R.string.error_occurred, e); } break; } if (!isHandled) { isHandled = super.onOptionsItemSelected(item); } return isHandled; } private void delete(List<MyNoteDto> myNotes) { for (MyNoteDto myNote : myNotes) { myNoteControl.deleteMyNote(myNote); } loadUserNoteList(); } private void loadUserNoteList() { // item positions will all change so exit any action mode listActionModeHelper.exitActionMode(); myNoteList.clear(); myNoteList.addAll( myNoteControl.getAllMyNotes() ); notifyDataSetChanged(); } /** * User selected a MyNote so download it * * @param myNote */ private void myNoteSelected(MyNoteDto myNote) { Log.d(TAG, "User Note selected:"+myNote.getVerseRange()); try { if (myNote!=null) { myNoteControl.showNoteView(myNote); } } catch (Exception e) { Log.e(TAG, "Error on attempt to show note", e); Dialogs.getInstance().showErrorMsg(R.string.error_occurred, e); } } @Inject void setMyNoteControl(MyNoteControl myNoteControl) { this.myNoteControl = myNoteControl; } }