package org.qii.weiciyuan.ui.search;
import org.qii.weiciyuan.R;
import org.qii.weiciyuan.support.lib.AppFragmentPagerAdapter;
import org.qii.weiciyuan.ui.basefragment.AbstractMessageTimeLineFragment;
import org.qii.weiciyuan.ui.interfaces.AbstractAppActivity;
import org.qii.weiciyuan.ui.main.MainTimeLineActivity;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.provider.SearchRecentSuggestions;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.SearchView;
import java.util.ArrayList;
import java.util.List;
/**
* User: qii
* Date: 12-8-29
*/
public class SearchMainActivity extends AbstractAppActivity {
private ViewPager mViewPager = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_layout);
buildViewPager();
buildActionBarAndViewPagerTitles();
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
SearchSuggestionProvider.AUTHORITY, SearchSuggestionProvider.MODE);
suggestions.saveRecentQuery(query, null);
search(query);
}
}
private void buildViewPager() {
mViewPager = (ViewPager) findViewById(R.id.viewpager);
SearchTabPagerAdapter adapter = new SearchTabPagerAdapter(getSupportFragmentManager());
mViewPager.setOffscreenPageLimit(2);
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(onPageChangeListener);
}
private void buildActionBarAndViewPagerTitles() {
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle(getString(R.string.search));
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.addTab(actionBar.newTab()
.setText(getString(R.string.status))
.setTabListener(tabListener));
actionBar.addTab(actionBar.newTab()
.setText(getString(R.string.user))
.setTabListener(tabListener));
}
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
public void onTabSelected(ActionBar.Tab tab,
FragmentTransaction ft) {
if (mViewPager.getCurrentItem() != tab.getPosition()) {
mViewPager.setCurrentItem(tab.getPosition());
}
}
public void onTabUnselected(ActionBar.Tab tab,
FragmentTransaction ft) {
}
public void onTabReselected(ActionBar.Tab tab,
FragmentTransaction ft) {
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.actionbar_menu_searchmainactivity, menu);
final SearchManager searchManager = (SearchManager) getSystemService(
Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
searchView.setIconifiedByDefault(false);
searchView.setSubmitButtonEnabled(false);
searchView.requestFocus();
return super.onCreateOptionsMenu(menu);
}
public String getSearchWord() {
return this.q;
}
private String q;
private void search(final String q) {
if (!TextUtils.isEmpty(q)) {
this.q = q;
switch (mViewPager.getCurrentItem()) {
case 0:
((SearchStatusFragment) getSearchStatusFragment()).search();
break;
case 1:
((SearchUserFragment) getSearchUserFragment()).search();
break;
}
}
}
private void showInputMethod(View view) {
InputMethodManager imm = (InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(view, 0);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent;
switch (item.getItemId()) {
case android.R.id.home:
intent = MainTimeLineActivity.newIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return true;
}
return true;
}
private Fragment getSearchUserFragment() {
return getSupportFragmentManager().findFragmentByTag(
SearchUserFragment.class.getName());
}
private AbstractMessageTimeLineFragment getSearchStatusFragment() {
return (AbstractMessageTimeLineFragment) getSupportFragmentManager().findFragmentByTag(
SearchStatusFragment.class.getName());
}
ViewPager.SimpleOnPageChangeListener onPageChangeListener
= new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
getActionBar().setSelectedNavigationItem(position);
}
};
private class SearchTabPagerAdapter extends AppFragmentPagerAdapter {
List<Fragment> list = new ArrayList<Fragment>();
public SearchTabPagerAdapter(FragmentManager fm) {
super(fm);
if (getSearchStatusFragment() == null) {
list.add(new SearchStatusFragment());
} else {
list.add(getSearchStatusFragment());
}
if (getSearchUserFragment() == null) {
list.add(new SearchUserFragment());
} else {
list.add(getSearchUserFragment());
}
}
public Fragment getItem(int position) {
return list.get(position);
}
@Override
protected String getTag(int position) {
List<String> tagList = new ArrayList<String>();
tagList.add(SearchStatusFragment.class.getName());
tagList.add(SearchUserFragment.class.getName());
return tagList.get(position);
}
@Override
public int getCount() {
return list.size();
}
}
}