package net.bible.android.view.activity.navigation;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import net.bible.android.control.navigation.NavigationControl;
import net.bible.android.control.page.CurrentPageManager;
import net.bible.android.control.page.window.ActiveWindowPageManagerProvider;
import net.bible.android.view.activity.base.CustomTitlebarActivityBase;
import net.bible.android.view.util.buttongrid.ButtonGrid;
import net.bible.android.view.util.buttongrid.ButtonGrid.ButtonInfo;
import net.bible.android.view.util.buttongrid.OnButtonGridActionListener;
import net.bible.service.common.CommonUtils;
import org.crosswire.jsword.passage.Verse;
import org.crosswire.jsword.versification.BibleBook;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
/**
* Choose a chapter to view
*
* @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 GridChoosePassageChapter extends CustomTitlebarActivityBase implements OnButtonGridActionListener {
private BibleBook mBibleBook=BibleBook.GEN;
private NavigationControl navigationControl;
private ActiveWindowPageManagerProvider activeWindowPageManagerProvider;
private static final String TAG = "GridChoosePassageChaptr";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
// background goes white in some circumstances if theme changes so prevent theme change
setAllowThemeChange(false);
super.onCreate(savedInstanceState);
buildActivityComponent().inject(this);
int bibleBookNo = getIntent().getIntExtra(GridChoosePassageBook.BOOK_NO, navigationControl.getDefaultBibleBookNo());
//TODO av11n - this is done now
mBibleBook = BibleBook.values()[bibleBookNo];
// show chosen book in page title to confirm user choice
try {
//TODO av11n - probably should use same v11n as used in GridChoosePassageBook
setTitle(navigationControl.getVersification().getLongName(mBibleBook));
} catch (Exception nsve) {
Log.e(TAG, "Error in selected book no", nsve);
}
ButtonGrid grid = new ButtonGrid(this);
grid.setOnButtonGridActionListener(this);
grid.addButtons(getBibleChaptersButtonInfo(mBibleBook));
setContentView(grid);
}
private List<ButtonInfo> getBibleChaptersButtonInfo(BibleBook book) {
int chapters;
try {
chapters = navigationControl.getVersification().getLastChapter(book);
} catch (Exception nsve) {
chapters = -1;
}
List<ButtonInfo> keys = new ArrayList<>();
for (int i=1; i<=chapters; i++) {
ButtonInfo buttonInfo = new ButtonInfo();
// this is used for preview
buttonInfo.id = i;
buttonInfo.name = Integer.toString(i);
keys.add(buttonInfo);
}
return keys;
}
@Override
public void buttonPressed(ButtonInfo buttonInfo) {
int chapter = buttonInfo.id;
Log.d(TAG, "Chapter selected:"+chapter);
try {
CurrentPageManager currentPageControl = activeWindowPageManagerProvider.getActiveWindowPageManager();
if (!navigateToVerse() && !currentPageControl.getCurrentPage().isSingleKey()) {
currentPageControl.getCurrentPage().setKey(new Verse(navigationControl.getVersification(), mBibleBook, chapter, 1));
onSave(null);
} else {
// select verse
Intent myIntent = new Intent(this, GridChoosePassageVerse.class);
myIntent.putExtra(GridChoosePassageBook.BOOK_NO, mBibleBook.ordinal());
myIntent.putExtra(GridChoosePassageBook.CHAPTER_NO, chapter);
startActivityForResult(myIntent, chapter);
}
} catch (Exception e) {
Log.e(TAG, "error on select of bible book", e);
}
}
static boolean navigateToVerse() {
return CommonUtils.getSharedPreferences().getBoolean("navigate_to_verse_pref", false);
}
public void onSave(View v) {
Log.i(TAG, "CLICKED");
Intent resultIntent = new Intent(this, GridChoosePassageBook.class);
setResult(Activity.RESULT_OK, resultIntent);
finish();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode==Activity.RESULT_OK) {
returnToPreviousScreen();
}
}
@Inject
void setNavigationControl(NavigationControl navigationControl) {
this.navigationControl = navigationControl;
}
@Inject
void setActiveWindowPageManagerProvider(ActiveWindowPageManagerProvider activeWindowPageManagerProvider) {
this.activeWindowPageManagerProvider = activeWindowPageManagerProvider;
}
}