package com.xda.one.ui; import com.xda.one.R; import com.xda.one.api.model.response.ResponseForum; import com.xda.one.db.ForumDbHelper; import com.xda.one.model.misc.ForumType; import com.xda.one.ui.widget.TabLayout; import com.xda.one.util.FragmentUtils; import com.xda.one.util.UIUtils; import android.app.SearchManager; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.MenuItemCompat; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.SearchView; import android.text.TextUtils; 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 android.widget.SimpleCursorAdapter; import java.util.ArrayList; public class ForumPagerFragment extends Fragment { private ForumFragmentAdapter mFragmentAdapter; private MenuItem mSearchMenuItem; public static Fragment createInstance() { return new ForumPagerFragment(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.forum_pager_fragment, container, false); } @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); mFragmentAdapter = new ForumFragmentAdapter(getChildFragmentManager()); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setHasOptionsMenu(true); final ActionBar bar = UIUtils.getSupportActionBar(getActivity()); bar.show(); bar.setTitle(R.string.subscribed); bar.setSubtitle(null); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); final ViewPager pager = (ViewPager) view.findViewById(R.id.forum_view_pager); pager.setOffscreenPageLimit(3); pager.setAdapter(mFragmentAdapter); final TabLayout slidingTabLayout = (TabLayout) view .findViewById(R.id.pager_tab_strip); slidingTabLayout.setSelectedIndicatorColors(getResources().getColor(android.R.color .white)); slidingTabLayout.setViewPager(pager); } @Override public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { inflater.inflate(R.menu.forum_pager_ab, menu); mSearchMenuItem = menu.findItem(R.id.find_your_device_search); // Get the SearchView and set the searchable configuration final SearchManager searchManager = (SearchManager) getActivity() .getSystemService(Context.SEARCH_SERVICE); final SearchView searchView = (SearchView) MenuItemCompat.getActionView(mSearchMenuItem); // Assumes current activity is the searchable activity searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity() .getComponentName())); final SearchQueryListener listener = new SearchQueryListener(searchView); searchView.setOnQueryTextListener(listener); searchView.setOnSuggestionListener(listener); } public boolean onBackPressed() { final boolean isExpanded = MenuItemCompat.isActionViewExpanded(mSearchMenuItem); if (isExpanded) { MenuItemCompat.collapseActionView(mSearchMenuItem); } return isExpanded; } private class ForumFragmentAdapter extends FragmentPagerAdapter { private static final int TAB_COUNT = 4; private final ForumFragment mGeneralFragment; private ForumFragment mTopFragment; private ForumFragment mNewFragment; private ForumFragment mAllFragment; public ForumFragmentAdapter(final FragmentManager fm) { super(fm); mTopFragment = ForumFragment.createInstance(ForumType.TOP); mNewFragment = ForumFragment.createInstance(ForumType.NEWEST); mGeneralFragment = ForumFragment.createInstance(ForumType.GENERAL); mAllFragment = ForumFragment.createInstance(ForumType.ALL); } @Override public Fragment getItem(int i) { switch (i) { case 0: return mTopFragment; case 1: return mNewFragment; case 2: return mGeneralFragment; case 3: return mAllFragment; } throw new UnsupportedOperationException(); } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return getString(R.string.forum_top_title); case 1: return getString(R.string.forum_newest_title); case 2: return getString(R.string.forum_general_title); case 3: return getString(R.string.forum_all_title); } return super.getPageTitle(position); } @Override public int getCount() { return TAB_COUNT; } } private class SearchQueryListener implements SearchView.OnQueryTextListener, SearchView.OnSuggestionListener { private final SearchView mSearchView; public SearchQueryListener(final SearchView searchView) { mSearchView = searchView; } @Override public boolean onQueryTextSubmit(final String s) { if (TextUtils.isEmpty(s)) { return false; } MenuItemCompat.collapseActionView(mSearchMenuItem); final FragmentTransaction transaction = FragmentUtils .getDefaultTransaction(getFragmentManager()); final FindYourDeviceFragment fragment = FindYourDeviceFragment.createInstance(s); transaction.addToBackStack(null); transaction.replace(R.id.content_frame, fragment).commit(); return true; } @Override public boolean onQueryTextChange(final String query) { return false; } @Override public boolean onSuggestionSelect(final int position) { return false; } @Override public boolean onSuggestionClick(final int position) { final Cursor cursor = mSearchView.getSuggestionsAdapter().getCursor(); final ResponseForum forum = ForumDbHelper.getSuggestionFromCursor(cursor); FragmentUtils.switchToForumContent(getFragmentManager(), null, new ArrayList<String>(), null, forum); return true; } } }