package com.automattic.simplenote; import android.content.Context; 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.PagerAdapter; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.inputmethod.InputMethodManager; import com.automattic.simplenote.utils.ThemeUtils; import com.automattic.simplenote.widgets.NoteEditorViewPager; import org.wordpress.passcodelock.AppLockManager; import java.util.ArrayList; public class NoteEditorActivity extends AppCompatActivity { private TabLayout mTabLayout; private NoteEditorFragmentPagerAdapter mNoteEditorFragmentPagerAdapter; private NoteEditorViewPager mViewPager; private boolean isMarkdownEnabled; @Override protected void onCreate(Bundle savedInstanceState) { ThemeUtils.setTheme(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_note_editor); // No title, please. setTitle(""); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } NoteEditorFragment noteEditorFragment; NoteMarkdownFragment noteMarkdownFragment; mNoteEditorFragmentPagerAdapter = new NoteEditorFragmentPagerAdapter(getSupportFragmentManager()); mViewPager = (NoteEditorViewPager) findViewById(R.id.pager); mTabLayout = (TabLayout) findViewById(R.id.tabs); if (savedInstanceState == null) { Intent intent = getIntent(); // Create the note editor fragment Bundle arguments = new Bundle(); arguments.putString(NoteEditorFragment.ARG_ITEM_ID, intent.getStringExtra(NoteEditorFragment.ARG_ITEM_ID)); boolean isNewNote = intent.getBooleanExtra(NoteEditorFragment.ARG_NEW_NOTE, false); arguments.putBoolean(NoteEditorFragment.ARG_NEW_NOTE, isNewNote); if (intent.hasExtra(NoteEditorFragment.ARG_MATCH_OFFSETS)) arguments.putString(NoteEditorFragment.ARG_MATCH_OFFSETS, intent.getStringExtra(NoteEditorFragment.ARG_MATCH_OFFSETS)); noteEditorFragment = new NoteEditorFragment(); noteEditorFragment.setArguments(arguments); noteMarkdownFragment = new NoteMarkdownFragment(); noteMarkdownFragment.setArguments(arguments); mNoteEditorFragmentPagerAdapter.addFragment( noteEditorFragment, getString(R.string.tab_edit) ); mNoteEditorFragmentPagerAdapter.addFragment( noteMarkdownFragment, getString(R.string.tab_preview) ); mViewPager.setPagingEnabled(false); mViewPager.addOnPageChangeListener( new NoteEditorViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { if (position == 1) { final InputMethodManager imm = (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mViewPager.getWindowToken(), 0); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } } ); isMarkdownEnabled = intent.getBooleanExtra(NoteEditorFragment.ARG_MARKDOWN_ENABLED, false); } else { mNoteEditorFragmentPagerAdapter.addFragment( getSupportFragmentManager().getFragment(savedInstanceState, getString(R.string.tab_edit)), getString(R.string.tab_edit) ); mNoteEditorFragmentPagerAdapter.addFragment( getSupportFragmentManager().getFragment(savedInstanceState, getString(R.string.tab_preview)), getString(R.string.tab_preview) ); isMarkdownEnabled = savedInstanceState.getBoolean(NoteEditorFragment.ARG_MARKDOWN_ENABLED); } mViewPager.setAdapter(mNoteEditorFragmentPagerAdapter); mTabLayout.setupWithViewPager(mViewPager); // Show tabs if markdown is enabled for the current note. if (isMarkdownEnabled) { showTabs(); } } @Override protected void onPause() { if (AppLockManager.getInstance().isAppLockFeatureEnabled()) { AppLockManager.getInstance().getAppLock().setExemptActivities(null); } super.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { getSupportFragmentManager() .putFragment(outState, getString(R.string.tab_edit), mNoteEditorFragmentPagerAdapter.getItem(0)); getSupportFragmentManager() .putFragment(outState, getString(R.string.tab_preview), mNoteEditorFragmentPagerAdapter.getItem(1)); outState.putBoolean(NoteEditorFragment.ARG_MARKDOWN_ENABLED, isMarkdownEnabled); super.onSaveInstanceState(outState); } protected NoteMarkdownFragment getNoteMarkdownFragment() { return (NoteMarkdownFragment) mNoteEditorFragmentPagerAdapter.getItem(1); } public void hideTabs() { mTabLayout.setVisibility(View.GONE); mViewPager.setPagingEnabled(false); } public void showTabs() { mTabLayout.setVisibility(View.VISIBLE); mViewPager.setPagingEnabled(true); } private static class NoteEditorFragmentPagerAdapter extends FragmentPagerAdapter { private final ArrayList<Fragment> mFragments = new ArrayList<>(); private final ArrayList<String> mTitles = new ArrayList<>(); public NoteEditorFragmentPagerAdapter(FragmentManager manager) { super(manager); } @Override public int getCount() { return mFragments.size(); } @Override public Fragment getItem(int position) { return mFragments.get(position); } @Override public int getItemPosition(Object object) { return PagerAdapter.POSITION_NONE; } @Override public CharSequence getPageTitle(int position) { return mTitles.get(position); } public void addFragment(Fragment fragment, String title) { mFragments.add(fragment); mTitles.add(title); notifyDataSetChanged(); } } }