package net.bible.android.view.activity.comparetranslations;
import android.annotation.SuppressLint;
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 net.bible.android.activity.R;
import net.bible.android.control.comparetranslations.CompareTranslationsControl;
import net.bible.android.control.comparetranslations.TranslationDto;
import net.bible.android.view.activity.base.Dialogs;
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 org.crosswire.jsword.passage.VerseRange;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
/** do the search and show the search results
*
* @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 CompareTranslations extends ListActivityBase implements SwipeGestureEventHandler {
private List<TranslationDto> mTranslations = new ArrayList<TranslationDto>();
private ArrayAdapter<TranslationDto> mKeyArrayAdapter;
private VerseRange currentVerseRange;
// detect swipe left/right
private GestureDetector gestureDetector;
private CompareTranslationsControl compareTranslationsControl;
private static final int LIST_ITEM_TYPE = android.R.layout.simple_list_item_2;
private IntentHelper intentHelper = new IntentHelper();
private static final String TAG = "CompareTranslations";
/** Called when the activity is first created. */
@SuppressLint("MissingSuperCall")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState, true);
Log.i(TAG, "Displaying Compare Translations view");
setContentView(R.layout.list);
buildActivityComponent().inject(this);
//fetch verse from intent if set - so that goto via History works nicely
currentVerseRange = intentHelper.getIntentVerseRangeOrDefault(getIntent());
prepareScreenData();
mKeyArrayAdapter = new ItemAdapter(this, LIST_ITEM_TYPE, mTranslations);
setListAdapter(mKeyArrayAdapter);
// create gesture related objects
gestureDetector = new GestureDetector( new SwipeGestureListener(this) );
}
private void prepareScreenData() {
setTitle(compareTranslationsControl.getTitle(currentVerseRange));
mTranslations.clear();
mTranslations.addAll(compareTranslationsControl.getAllTranslations(currentVerseRange));
notifyDataSetChanged();
Log.d(TAG, "Finished displaying Compare Translations view");
}
/** swiped left
*/
@Override
public void onNext() {
Log.d(TAG, "Next");
currentVerseRange = compareTranslationsControl.getNextVerseRange(currentVerseRange);
prepareScreenData();
}
/** swiped right
*/
@Override
public void onPrevious() {
Log.d(TAG, "Previous");
currentVerseRange = compareTranslationsControl.getPreviousVerseRange(currentVerseRange);
prepareScreenData();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
try {
// no need to call HistoryManager.beforePageChange() here because PassageChangeMediator will tell HistoryManager a change is about to occur
translationSelected(mTranslations.get(position));
} catch (Exception e) {
Log.e(TAG, "Selection error", e);
Dialogs.getInstance().showErrorMsg(R.string.error_occurred, e);
}
}
private void translationSelected(TranslationDto translationDto) {
if (translationDto!=null) {
Log.i(TAG, "chose:"+translationDto.getBook());
compareTranslationsControl.showTranslationForVerseRange(translationDto, currentVerseRange);
// this also calls finish() on this Activity. If a user re-selects from HistoryList then a new Activity is created
returnToPreviousScreen();
}
}
/** implement getHistoryIntent to allow correct verse to be shown if history nav occurs
*/
@Override
public Intent getIntentForHistoryList() {
Intent intent = getIntent();
intentHelper.updateIntentWithVerseRange(getIntent(), currentVerseRange);
return intent;
}
// handle swipe left and right
@Override
public boolean dispatchTouchEvent(MotionEvent motionEvent) {
this.gestureDetector.onTouchEvent(motionEvent);
return super.dispatchTouchEvent(motionEvent);
}
@Inject
void setCompareTranslationsControl(CompareTranslationsControl compareTranslationsControl) {
this.compareTranslationsControl = compareTranslationsControl;
}
}