package net.bible.android.view.activity.footnoteandref; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import net.bible.android.activity.R; import net.bible.android.control.footnoteandref.FootnoteAndRefControl; import net.bible.android.control.footnoteandref.NoteDetailCreator; import net.bible.android.view.activity.base.IntentHelper; import net.bible.android.view.activity.base.ListActivityBase; import net.bible.android.view.util.swipe.SwipeGestureEventHandler; import net.bible.android.view.util.swipe.SwipeGestureListener; import net.bible.service.format.Note; import org.apache.commons.lang3.StringUtils; import org.crosswire.jsword.passage.VerseRange; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; /** Show Notes and Cross references for the current verse * * @author Martin Denham [mjdenham at gmail dot com] * @see gnu.lgpl.License for license details.<br> * The copyright to this program is held by it's author. */ public class FootnoteAndRefActivity extends ListActivityBase implements SwipeGestureEventHandler { private static final String TAG = "NotesActivity"; private TextView mWarning; static final protected String LIST_ITEM_LINE1 = "line1"; static final protected String LIST_ITEM_LINE2 = "line2"; private VerseRange currentVerseRange; private List<Note> mChapterNotesList; private List<Note> mVerseNotesList; private ArrayAdapter<Note> mNotesListAdapter; private IntentHelper intentHelper = new IntentHelper(); // detect swipe left/right private GestureDetector gestureDetector; private FootnoteAndRefControl footnoteAndRefControl; private NoteDetailCreator noteDetailCreator; private static final int LIST_ITEM_TYPE = android.R.layout.simple_list_item_2; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "Displaying notes"); setContentView(R.layout.notes); buildActivityComponent().inject(this); //fetch verse from intent if set - so that goto via History works nicely currentVerseRange = intentHelper.getIntentVerseRangeOrDefault(getIntent()); mWarning = (TextView)findViewById(R.id.warningText); mChapterNotesList = footnoteAndRefControl.getCurrentPageFootnotesAndReferences(); initialiseView(); // create gesture related objects gestureDetector = new GestureDetector( new SwipeGestureListener(this) ); } private void initialiseView() { mVerseNotesList = new ArrayList<>(); showCurrentVerse(); populateVerseNotesList(); prepareWarningMsg(); mNotesListAdapter = new ItemAdapter(this, LIST_ITEM_TYPE, mVerseNotesList, noteDetailCreator); setListAdapter(mNotesListAdapter); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { noteSelected(mVerseNotesList.get(position)); } /** swiped left */ public void onNext() { Log.d(TAG, "Next"); currentVerseRange = footnoteAndRefControl.next(currentVerseRange); onVerseChanged(); } /** swiped right */ public void onPrevious() { Log.d(TAG, "Previous"); currentVerseRange = footnoteAndRefControl.previous(currentVerseRange); onVerseChanged(); } private void onVerseChanged() { showCurrentVerse(); populateVerseNotesList(); notifyDataSetChanged(); prepareWarningMsg(); } private void populateVerseNotesList() { mVerseNotesList.clear(); int startVerseNo = currentVerseRange.getStart().getVerse(); int endVerseNo = currentVerseRange.getEnd().getVerse(); if (mChapterNotesList!=null) { for (Note note : mChapterNotesList) { final int noteVerseNo = note.getVerseNo(); if (noteVerseNo >= startVerseNo && noteVerseNo <=endVerseNo) { mVerseNotesList.add(note); } } } } private void prepareWarningMsg() { String warning = ""; if (mChapterNotesList==null || mChapterNotesList.size()==0) { warning = getString(R.string.no_chapter_notes); } else if (mChapterNotesList==null || mVerseNotesList.size()==0) { warning = getString(R.string.no_verse_notes); } mWarning.setText(warning); if (StringUtils.isNotEmpty(warning)) { mWarning.setVisibility(View.VISIBLE); getListView().setVisibility(View.GONE); } else { mWarning.setVisibility(View.GONE); getListView().setVisibility(View.VISIBLE); } } private void showCurrentVerse() { setTitle(footnoteAndRefControl.getTitle(currentVerseRange)); } private void noteSelected(Note note) { Log.i(TAG, "chose:"+note); if (note.isNavigable()) { footnoteAndRefControl.navigateTo(note); } doFinish(); } public void onFinish(View v) { Log.i(TAG, "CLICKED"); doFinish(); } public void doFinish() { Intent resultIntent = new Intent(); setResult(Activity.RESULT_OK, resultIntent); finish(); } // handle swipe left and right @Override public boolean dispatchTouchEvent(MotionEvent motionEvent) { this.gestureDetector.onTouchEvent(motionEvent); return super.dispatchTouchEvent(motionEvent); } @Inject void setFootnoteAndRefControl(FootnoteAndRefControl footnoteAndRefControl) { this.footnoteAndRefControl = footnoteAndRefControl; } @Inject void setNoteDetailCreator(NoteDetailCreator noteDetailCreator) { this.noteDetailCreator = noteDetailCreator; } }