package org.qii.weiciyuan.ui.search;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.support.lib.LongClickableLinkMovementMethod;
import org.qii.weiciyuan.support.utils.SmileyPickerUtility;
import org.qii.weiciyuan.support.utils.ThemeUtility;
import org.qii.weiciyuan.support.utils.Utility;
import org.qii.weiciyuan.ui.basefragment.AbstractTimeLineFragment;
import org.qii.weiciyuan.ui.basefragment.AbstractUserListFragment;
import org.qii.weiciyuan.ui.interfaces.AbstractAppFragment;
import org.qii.weiciyuan.ui.main.LeftMenuFragment;
import org.qii.weiciyuan.ui.main.MainTimeLineActivity;
import org.qii.weiciyuan.ui.main.SimpleTwoTabsListener;
import android.app.ActionBar;
import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.provider.SearchRecentSuggestions;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.SearchView;
import android.widget.TextView;
/**
* User: qii
* Date: 13-5-11
*/
public class SearchMainParentFragment extends AbstractAppFragment
implements MainTimeLineActivity.ScrollableListFragment {
private static final int SEARCH_WEIBO_CHILD_POSITION = 0;
private static final int SEARCH_USER_CHILD_POSITION = 1;
private SparseArray<Fragment> searchFragments = new SparseArray<Fragment>();
private SparseArray<ActionBar.Tab> tabMap = new SparseArray<ActionBar.Tab>();
private ViewPager viewPager;
private SearchView searchView;
public static SearchMainParentFragment newInstance() {
SearchMainParentFragment fragment = new SearchMainParentFragment();
fragment.setArguments(new Bundle());
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("q", q);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
this.q = savedInstanceState.getString("q");
}
if ((((MainTimeLineActivity) getActivity()).getMenuFragment()).getCurrentIndex()
== LeftMenuFragment.SEARCH_INDEX) {
buildActionBarAndViewPagerTitles(
((MainTimeLineActivity) getActivity()).getMenuFragment().searchTabIndex);
}
}
private ActionBar.Tab buildSearchWeiboTab(SimpleTwoTabsListener tabListener) {
ActionBar.Tab tab;
View customView = getActivity().getLayoutInflater()
.inflate(R.layout.ab_tab_custom_view_layout, null);
((TextView) customView.findViewById(R.id.title)).setText(R.string.weibo);
tab = getActivity().getActionBar().newTab().setCustomView(customView)
.setTag(SearchStatusFragment.class.getName()).setTabListener(tabListener);
tabMap.append(SEARCH_WEIBO_CHILD_POSITION, tab);
return tab;
}
private ActionBar.Tab buildSearchUserTab(SimpleTwoTabsListener tabListener) {
ActionBar.Tab tab;
View customView = getActivity().getLayoutInflater()
.inflate(R.layout.ab_tab_custom_view_layout, null);
((TextView) customView.findViewById(R.id.title)).setText(R.string.user);
tab = getActivity().getActionBar().newTab().setCustomView(customView)
.setTag(SearchUserFragment.class.getName()).setTabListener(tabListener);
tabMap.append(SEARCH_USER_CHILD_POSITION, tab);
return tab;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.viewpager_layout, container, false);
viewPager = (ViewPager) view;
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
viewPager.setOverScrollMode(View.OVER_SCROLL_NEVER);
viewPager.setOffscreenPageLimit(2);
viewPager.setOnPageChangeListener(onPageChangeListener);
SearchTimeLinePagerAdapter adapter = new SearchTimeLinePagerAdapter(this, viewPager,
getChildFragmentManager(), (MainTimeLineActivity) getActivity(), searchFragments);
viewPager.setAdapter(adapter);
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
int searchTabIndex = getArguments().getInt("searchTabIndex");
buildActionBarAndViewPagerTitles(searchTabIndex);
if (searchView != null) {
SmileyPickerUtility.showKeyBoard(searchView);
}
} else {
if (searchView != null) {
SmileyPickerUtility.hideSoftInput(searchView);
}
}
}
public void buildActionBarAndViewPagerTitles(int nav) {
((MainTimeLineActivity) getActivity()).setCurrentFragment(this);
if (Utility.isDevicePort()) {
((MainTimeLineActivity) getActivity()).setTitle(R.string.search);
getActivity().getActionBar().setIcon(R.drawable.search_light);
} else {
((MainTimeLineActivity) getActivity()).setTitle("");
getActivity().getActionBar().setIcon(R.drawable.ic_launcher);
}
ActionBar actionBar = getActivity().getActionBar();
actionBar.setDisplayHomeAsUpEnabled(Utility.isDevicePort());
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.removeAllTabs();
SimpleTwoTabsListener tabListener = new SimpleTwoTabsListener(viewPager);
ActionBar.Tab weiboTab = getWeiboTab();
if (weiboTab == null) {
weiboTab = buildSearchWeiboTab(tabListener);
}
actionBar.addTab(weiboTab);
ActionBar.Tab userTab = getUserTab();
if (userTab == null) {
userTab = buildSearchUserTab(tabListener);
}
actionBar.addTab(userTab);
if (actionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS && nav > -1) {
viewPager.setCurrentItem(nav, false);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.actionbar_menu_searchmainactivity, menu);
final SearchManager searchManager = (SearchManager) getActivity()
.getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getActivity().getComponentName()));
searchView.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
searchView.setIconifiedByDefault(false);
searchView.setSubmitButtonEnabled(false);
searchView.setMaxWidth(Utility.dip2px(250));
ThemeUtility.customActionBarSearchViewTextColor(searchView);
searchView.requestFocus();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
search(q);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
SearchMainParentFragment.this.q = newText;
return false;
}
});
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
search(q);
}
});
if (!TextUtils.isEmpty(this.q)) {
searchView.setQuery(this.q, false);
}
}
public String getSearchWord() {
return this.q;
}
private String q;
private void search(final String q) {
if (!TextUtils.isEmpty(q)) {
this.q = q;
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(getActivity(),
SearchSuggestionProvider.AUTHORITY, SearchSuggestionProvider.MODE);
suggestions.saveRecentQuery(this.q, null);
switch (viewPager.getCurrentItem()) {
case 0:
((SearchStatusFragment) getSearchWeiboFragment()).search();
break;
case 1:
((SearchUserFragment) getSearchUserFragment()).search();
break;
}
}
}
public ActionBar.Tab getWeiboTab() {
return tabMap.get(SEARCH_WEIBO_CHILD_POSITION);
}
public ActionBar.Tab getUserTab() {
return tabMap.get(SEARCH_USER_CHILD_POSITION);
}
ViewPager.SimpleOnPageChangeListener onPageChangeListener
= new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
ActionBar ab = getActivity().getActionBar();
if (getActivity().getActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS
&& ab.getTabAt(position) == tabMap.get(position)) {
ab.setSelectedNavigationItem(position);
}
((LeftMenuFragment) ((MainTimeLineActivity) getActivity())
.getMenuFragment()).searchTabIndex = position;
clearActionMode();
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
switch (state) {
case ViewPager.SCROLL_STATE_SETTLING:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
LongClickableLinkMovementMethod.getInstance().setLongClickable(true);
}
}, ViewConfiguration.getLongPressTimeout());
break;
default:
LongClickableLinkMovementMethod.getInstance().setLongClickable(false);
break;
}
}
};
public SearchUserFragment getSearchUserFragment() {
SearchUserFragment fragment = ((SearchUserFragment) getChildFragmentManager()
.findFragmentByTag(
SearchUserFragment.class.getName()));
if (fragment == null) {
fragment = new SearchUserFragment();
}
return fragment;
}
public SearchStatusFragment getSearchWeiboFragment() {
SearchStatusFragment fragment = ((SearchStatusFragment) getChildFragmentManager()
.findFragmentByTag(
SearchStatusFragment.class.getName()));
if (fragment == null) {
fragment = new SearchStatusFragment();
}
return fragment;
}
@Override
public void scrollToTop() {
Fragment fragment = searchFragments.get(viewPager.getCurrentItem());
if (fragment instanceof AbstractTimeLineFragment) {
Utility.stopListViewScrollingAndScrollToTop(
((AbstractTimeLineFragment) fragment).getListView());
} else if (fragment instanceof AbstractUserListFragment) {
Utility.stopListViewScrollingAndScrollToTop(
((AbstractUserListFragment) fragment).getListView());
}
}
public void clearActionMode() {
getSearchUserFragment().clearActionMode();
getSearchWeiboFragment().clearActionMode();
}
}