package yuku.alkitab.base.ac; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import yuku.afw.App; import yuku.afw.V; import yuku.afw.storage.Preferences; import yuku.alkitab.base.ac.base.BaseActivity; import yuku.alkitab.base.fr.GotoDialerFragment; import yuku.alkitab.base.fr.GotoDirectFragment; import yuku.alkitab.base.fr.GotoGridFragment; import yuku.alkitab.base.fr.base.BaseGotoFragment; import yuku.alkitab.base.storage.Prefkey; import yuku.alkitab.debug.R; public class GotoActivity extends BaseActivity implements BaseGotoFragment.GotoFinishListener { public static final String TAG = GotoActivity.class.getSimpleName(); private static final String EXTRA_bookId = "bookId"; private static final String EXTRA_chapter = "chapter"; private static final String EXTRA_verse = "verse"; private static final String INSTANCE_STATE_tab = "tab"; public static class Result { public int bookId; public int chapter_1; public int verse_1; } public static Intent createIntent(int bookId, int chapter_1, int verse_1) { Intent res = new Intent(App.context, GotoActivity.class); res.putExtra(EXTRA_bookId, bookId); res.putExtra(EXTRA_chapter, chapter_1); res.putExtra(EXTRA_verse, verse_1); return res; } public static Result obtainResult(Intent data) { Result res = new Result(); res.bookId = data.getIntExtra(EXTRA_bookId, -1); res.chapter_1 = data.getIntExtra(EXTRA_chapter, 0); res.verse_1 = data.getIntExtra(EXTRA_verse, 0); return res; } Toolbar toolbar; ViewPager viewPager; TabLayout tablayout; GotoPagerAdapter pagerAdapter; boolean okToHideKeyboard = false; int bookId; int chapter_1; int verse_1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_goto); bookId = getIntent().getIntExtra(EXTRA_bookId, -1); chapter_1 = getIntent().getIntExtra(EXTRA_chapter, 0); verse_1 = getIntent().getIntExtra(EXTRA_verse, 0); toolbar = V.get(this, R.id.toolbar); setSupportActionBar(toolbar); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); toolbar.setNavigationOnClickListener(v -> navigateUp()); } // ViewPager and its adapters use support library fragments, so use getSupportFragmentManager. viewPager = V.get(this, R.id.viewPager); viewPager.setAdapter(pagerAdapter = new GotoPagerAdapter(getSupportFragmentManager())); viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { if (okToHideKeyboard && position != 1) { final View editText = V.get(GotoActivity.this, R.id.tDirectReference); if (editText != null) { final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } } }); tablayout = V.get(this, R.id.tablayout); tablayout.setTabMode(TabLayout.MODE_SCROLLABLE); tablayout.setupWithViewPager(viewPager); if (savedInstanceState == null) { // get from preferences int tabUsed = Preferences.getInt(Prefkey.goto_last_tab, 0); if (tabUsed >= 1 && tabUsed <= 3) { viewPager.setCurrentItem(tabUsed - 1 /* to make it 0-based */, false); } if (tabUsed == 2) { viewPager.postDelayed(() -> { final View editText = V.get(GotoActivity.this, R.id.tDirectReference); if (editText != null) { InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); } okToHideKeyboard = true; }, 100); } else { okToHideKeyboard = true; } } else { viewPager.setCurrentItem(savedInstanceState.getInt(INSTANCE_STATE_tab, 0), false); } } @Override public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.activity_goto, menu); return true; } @Override public boolean onPrepareOptionsMenu(final Menu menu) { final MenuItem menuAskForVerse = menu.findItem(R.id.menuAskForVerse); final boolean val = Preferences.getBoolean(Prefkey.gotoAskForVerse, Prefkey.GOTO_ASK_FOR_VERSE_DEFAULT); menuAskForVerse.setChecked(val); return true; } @Override public boolean onOptionsItemSelected(final MenuItem item) { if (item.getItemId() == R.id.menuAskForVerse) { final boolean val = Preferences.getBoolean(Prefkey.gotoAskForVerse, Prefkey.GOTO_ASK_FOR_VERSE_DEFAULT); Preferences.setBoolean(Prefkey.gotoAskForVerse, !val); supportInvalidateOptionsMenu(); return true; } return super.onOptionsItemSelected(item); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(INSTANCE_STATE_tab, viewPager.getCurrentItem()); } public class GotoPagerAdapter extends FragmentPagerAdapter { final int[] pageTitleResIds = {R.string.goto_tab_dialer_label, R.string.goto_tab_direct_label, R.string.goto_tab_grid_label}; public GotoPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(final int position) { final Fragment res; if (position == 0) { res = Fragment.instantiate(GotoActivity.this, GotoDialerFragment.class.getName(), GotoDialerFragment.createArgs(bookId, chapter_1, verse_1)); } else if (position == 1) { res = Fragment.instantiate(GotoActivity.this, GotoDirectFragment.class.getName(), GotoDirectFragment.createArgs(bookId, chapter_1, verse_1)); } else { res = Fragment.instantiate(GotoActivity.this, GotoGridFragment.class.getName(), GotoGridFragment.createArgs(bookId, chapter_1, verse_1)); } return res; } @Override public int getCount() { return pageTitleResIds.length; } @Override public CharSequence getPageTitle(int position) { return getString(pageTitleResIds[position]); } } @Override public void onGotoFinished(int gotoTabUsed, int bookId, int chapter_1, int verse_1) { // store goto tab used for next time Preferences.setInt(Prefkey.goto_last_tab, gotoTabUsed); Intent data = new Intent(); data.putExtra(EXTRA_bookId, bookId); data.putExtra(EXTRA_chapter, chapter_1); data.putExtra(EXTRA_verse, verse_1); setResult(RESULT_OK, data); finish(); } }