package yuku.alkitab.base.fr;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckedTextView;
import android.widget.Spinner;
import android.widget.TextView;
import yuku.afw.V;
import yuku.afw.storage.Preferences;
import yuku.alkitab.base.S;
import yuku.alkitab.base.U;
import yuku.alkitab.base.fr.base.BaseGotoFragment;
import yuku.alkitab.base.storage.Prefkey;
import yuku.alkitab.base.util.BookNameSorter;
import yuku.alkitab.debug.R;
import yuku.alkitab.model.Book;
public class GotoDialerFragment extends BaseGotoFragment {
public static final String TAG = GotoDialerFragment.class.getSimpleName();
private static final String EXTRA_verse = "verse";
private static final String EXTRA_chapter = "chapter";
private static final String EXTRA_bookId = "bookId";
TextView active;
TextView passive;
Button bOk;
TextView tChapter;
View tChapterLabel;
TextView tVerse;
View tVerseLabel;
Spinner cbBook;
boolean tChapter_firstTime = true;
boolean tVerse_firstTime = true;
int maxChapter = 0;
int maxVerse = 0;
BookAdapter adapter;
int bookId;
int chapter_1;
int verse_1;
public static Bundle createArgs(int bookId, int chapter_1, int verse_1) {
Bundle args = new Bundle();
args.putInt(EXTRA_bookId, bookId);
args.putInt(EXTRA_chapter, chapter_1);
args.putInt(EXTRA_verse, verse_1);
return args;
}
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if (args != null) {
bookId = args.getInt(EXTRA_bookId, -1);
chapter_1 = args.getInt(EXTRA_chapter);
verse_1 = args.getInt(EXTRA_verse);
}
}
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View res = inflater.inflate(R.layout.fragment_goto_dialer, container, false);
bOk = V.get(res, R.id.bOk);
tChapter = V.get(res, R.id.tChapter);
tChapterLabel = V.get(res, R.id.tChapterLabel);
tVerse = V.get(res, R.id.tVerse);
tVerseLabel = V.get(res, R.id.tVerseLabel);
cbBook = V.get(res, R.id.cbBook);
cbBook.setAdapter(adapter = new BookAdapter());
tChapter.setOnClickListener(tChapter_click);
tChapterLabel.setOnClickListener(tChapter_click);
tVerse.setOnClickListener(tVerse_click);
tVerseLabel.setOnClickListener(tVerse_click);
V.get(res, R.id.bDigit0).setOnClickListener(button_click);
V.get(res, R.id.bDigit1).setOnClickListener(button_click);
V.get(res, R.id.bDigit2).setOnClickListener(button_click);
V.get(res, R.id.bDigit3).setOnClickListener(button_click);
V.get(res, R.id.bDigit4).setOnClickListener(button_click);
V.get(res, R.id.bDigit5).setOnClickListener(button_click);
V.get(res, R.id.bDigit6).setOnClickListener(button_click);
V.get(res, R.id.bDigit7).setOnClickListener(button_click);
V.get(res, R.id.bDigit8).setOnClickListener(button_click);
V.get(res, R.id.bDigit9).setOnClickListener(button_click);
V.get(res, R.id.bDigitBackspace).setOnClickListener(button_click);
showOrHideVerse();
Preferences.registerObserver(preferenceChangeListener);
return res;
}
@Override
public void onDestroy() {
super.onDestroy();
Preferences.unregisterObserver(preferenceChangeListener);
}
final SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener = (sharedPreferences, key) -> {
if (key.equals(Prefkey.gotoAskForVerse.name())) {
showOrHideVerse();
}
};
void showOrHideVerse() {
if (Preferences.getBoolean(Prefkey.gotoAskForVerse, Prefkey.GOTO_ASK_FOR_VERSE_DEFAULT)) {
tVerse.setVisibility(View.VISIBLE);
tVerseLabel.setVisibility(View.VISIBLE);
} else {
if (active == tVerse) {
activate(tChapter, tVerse);
}
tVerse.setVisibility(View.GONE);
tVerseLabel.setVisibility(View.GONE);
}
}
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// check current bookId, chapter, and verse
cbBook.setSelection(adapter.getPositionFromBookId(bookId));
cbBook.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override public void onNothingSelected(AdapterView<?> parent) {}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Book book = adapter.getItem(position);
maxChapter = book.chapter_count;
int chapter_0 = tryReadChapter() - 1;
if (chapter_0 >= 0 && chapter_0 < book.chapter_count) {
maxVerse = book.verse_counts[chapter_0];
}
fixChapterOverflow();
fixVerseOverflow();
}
});
bOk.setOnClickListener(v -> {
int selectedChapter_1 = 0;
int selectedVerse_1 = 0;
try {
selectedChapter_1 = Integer.parseInt(tChapter.getText().toString());
if (Preferences.getBoolean(Prefkey.gotoAskForVerse, Prefkey.GOTO_ASK_FOR_VERSE_DEFAULT)) {
selectedVerse_1 = Integer.parseInt(tVerse.getText().toString());
} else {
selectedVerse_1 = 0;
}
} catch (NumberFormatException e) {
// let it still be 0
}
final int selectedBookId = adapter.getItem(cbBook.getSelectedItemPosition()).bookId;
((GotoFinishListener) getActivity()).onGotoFinished(GotoFinishListener.GOTO_TAB_dialer, selectedBookId, selectedChapter_1, selectedVerse_1);
});
active = tChapter;
passive = tVerse;
{
if (chapter_1 != 0) {
tChapter.setText(String.valueOf(chapter_1));
}
if (verse_1 != 0) {
tVerse.setText(String.valueOf(verse_1));
}
}
colorize();
}
final View.OnClickListener tChapter_click = v -> activate(tChapter, tVerse);
final View.OnClickListener tVerse_click = v -> activate(tVerse, tChapter);
final View.OnClickListener button_click = v -> {
final int id = v.getId();
if (id == R.id.bDigit0) press("0");
else if (id == R.id.bDigit1) press("1");
else if (id == R.id.bDigit2) press("2");
else if (id == R.id.bDigit3) press("3");
else if (id == R.id.bDigit4) press("4");
else if (id == R.id.bDigit5) press("5");
else if (id == R.id.bDigit6) press("6");
else if (id == R.id.bDigit7) press("7");
else if (id == R.id.bDigit8) press("8");
else if (id == R.id.bDigit9) press("9");
else if (id == R.id.bDigitBackspace) press("backspace");
};
int tryReadChapter() {
try {
return Integer.parseInt("0" + tChapter.getText().toString());
} catch (NumberFormatException e) {
return 0;
}
}
int tryReadVerse() {
try {
return Integer.parseInt("0" + tVerse.getText().toString());
} catch (NumberFormatException e) {
return 0;
}
}
void fixVerseOverflow() {
int verse = tryReadVerse();
if (verse > maxVerse) {
verse = maxVerse;
} else if (verse <= 0) {
verse = 1;
}
tVerse.setText(String.valueOf(verse));
}
void fixChapterOverflow() {
int chapter = tryReadChapter();
if (chapter > maxChapter) {
chapter = maxChapter;
} else if (chapter <= 0) {
chapter = 1;
}
tChapter.setText(String.valueOf(chapter));
}
void press(String s) {
if (active != null) {
if (s.equals("backspace")) {
if (active.length() > 0) {
final CharSequence txt = active.getText();
active.setText(TextUtils.substring(txt, 0, txt.length() - 1));
}
return;
}
if (active == tChapter) {
if (tChapter_firstTime) {
active.setText(s);
tChapter_firstTime = false;
} else {
active.append(s);
}
if (tryReadChapter() > maxChapter || tryReadChapter() <= 0) {
active.setText(s);
}
Book book = adapter.getItem(cbBook.getSelectedItemPosition());
int chapter_1 = tryReadChapter();
if (chapter_1 >= 1 && chapter_1 <= book.verse_counts.length) {
maxVerse = book.verse_counts[chapter_1 - 1];
}
} else if (active == tVerse) {
if (tVerse_firstTime) {
active.setText(s);
tVerse_firstTime = false;
} else {
active.append(s);
}
if (tryReadVerse() > maxVerse || tryReadVerse() <= 0) {
active.setText(s);
}
}
}
}
void activate(TextView active, TextView passive) {
this.active = active;
this.passive = passive;
colorize();
}
private void colorize() {
if (active != null) active.setBackgroundResource(R.drawable.goto_dialer_active);
if (passive != null) passive.setBackgroundColor(0x0);
}
private class BookAdapter extends BaseAdapter {
Book[] booksc_;
public BookAdapter() {
Book[] booksc = S.activeVersion.getConsecutiveBooks();
if (Preferences.getBoolean(R.string.pref_alphabeticBookSort_key, R.bool.pref_alphabeticBookSort_default)) {
booksc_ = BookNameSorter.sortAlphabetically(booksc);
} else {
booksc_ = booksc.clone();
}
}
/**
* @return 0 when not found (not -1, because we just want to select the first book)
*/
public int getPositionFromBookId(int pos) {
for (int i = 0; i < booksc_.length; i++) {
if (booksc_[i].bookId == pos) {
return i;
}
}
return 0;
}
@Override public int getCount() {
return booksc_.length;
}
@Override public Book getItem(int position) {
return booksc_[position];
}
@Override public long getItemId(int position) {
return position;
}
@Override public View getView(int position, View convertView, ViewGroup parent) {
TextView res = (TextView) (convertView != null ? convertView : LayoutInflater.from(getActivity()).inflate(android.R.layout.simple_spinner_item, parent, false));
final Book book = getItem(position);
res.setText(booksc_[position].shortName);
res.setTextSize(18);
res.setTextColor(U.getForegroundColorOnDarkBackgroundByBookId(book.bookId));
return res;
}
@Override public View getDropDownView(int position, View convertView, ViewGroup parent) {
CheckedTextView res = (CheckedTextView) (convertView != null ? convertView : LayoutInflater.from(getActivity()).inflate(android.R.layout.simple_spinner_dropdown_item, parent, false));
final Book book = getItem(position);
res.setText(book.shortName);
res.setTextSize(18);
res.setTextColor(U.getForegroundColorOnDarkBackgroundByBookId(book.bookId));
return res;
}
}
}