package net.i2p.android.router.netdb; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import net.i2p.android.router.I2PFragmentBase; import net.i2p.android.router.R; import net.i2p.android.router.util.Util; import net.i2p.util.ObjectCounter; import java.util.List; public class NetDbSummaryPagerFragment extends I2PFragmentBase implements LoaderManager.LoaderCallbacks<List<ObjectCounter<String>>> { private NetDbPagerAdapter mNetDbPagerAdapter; ViewPager mViewPager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.parentfragment_viewpager, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Set up NetDbPagerAdapter containing the categories mNetDbPagerAdapter = new NetDbPagerAdapter(getChildFragmentManager()); // Set up ViewPager for swiping between categories mViewPager = (ViewPager) getActivity().findViewById(R.id.pager); mViewPager.setAdapter(mNetDbPagerAdapter); mViewPager.setOnPageChangeListener( new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { mViewPager.setCurrentItem(position); } }); } @Override public void onRouterConnectionReady() { getLoaderManager().initLoader(0, null, this); } @Override public void onRouterConnectionNotReady() { Util.d("Router not running or not bound to NetDbSummaryPagerFragment"); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.fragment_netdb_list_actions, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_refresh: if (getRouterContext() != null) { Util.d("Refresh called, restarting Loader"); mNetDbPagerAdapter.setData(null); mViewPager.invalidate(); getLoaderManager().restartLoader(0, null, this); } return true; default: return super.onOptionsItemSelected(item); } } public class NetDbPagerAdapter extends FragmentStatePagerAdapter { private List<ObjectCounter<String>> mData; public NetDbPagerAdapter(FragmentManager fm) { super(fm); } public void setData(List<ObjectCounter<String>> data) { mData = data; notifyDataSetChanged(); } @Override public Fragment getItem(int i) { if (mData == null) return null; return NetDbSummaryTableFragment.newInstance(i, mData.get(i)); } @Override public int getCount() { if (mData == null) return 0; else return 2; } @Override public CharSequence getPageTitle(int i) { switch (i) { case 1: // return getString(R.string.countries); //case 2: return getString(R.string.settings_label_transports); default: return getString(R.string.versions); } } } // LoaderManager.LoaderCallbacks<List<ObjectCounter<String>>> public Loader<List<ObjectCounter<String>>> onCreateLoader(int id, Bundle args) { return new NetDbStatsLoader(getActivity(), getRouterContext()); } public void onLoadFinished(Loader<List<ObjectCounter<String>>> loader, List<ObjectCounter<String>> data) { mNetDbPagerAdapter.setData(data); } public void onLoaderReset(Loader<List<ObjectCounter<String>>> loader) { mNetDbPagerAdapter.setData(null); } }