package com.vladstoick.stiridinromania;
import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.NavUtils;
import android.support.v4.view.ViewPager;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.widget.SearchView;
import com.squareup.otto.Subscribe;
import com.vladstoick.DataModel.NewsDataSource;
import com.vladstoick.DataModel.NewsItem;
import com.vladstoick.Fragments.SearchOnlineResultsFragment;
import com.vladstoick.Fragments.SearchResultsFragment;
import com.vladstoick.OttoBus.BusProvider;
import com.vladstoick.OttoBus.SearchResultsEvent;
import java.util.ArrayList;
import java.util.Locale;
public class SearchResultsActivity extends SherlockFragmentActivity implements ActionBar.TabListener {
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
String query;
SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BusProvider.getInstance().register(this);
setContentView(R.layout.activity_searchresults);
final ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ArrayList<SherlockFragment> fragments = new ArrayList<SherlockFragment>();
fragments.add(new SearchResultsFragment());
fragments.add(new SearchOnlineResultsFragment());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mSectionsPagerAdapter.fragments = fragments;
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
getData();
}
});
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
handleIntent(getIntent());
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
query = intent.getStringExtra(SearchManager.QUERY);
getData();
}
}
public void getData(){
int selectedPosition = getSupportActionBar().getSelectedTab().getPosition();
if(selectedPosition==0){
SearchResultsFragment fragment = (SearchResultsFragment)
mSectionsPagerAdapter.fragments.get(selectedPosition);
if(fragment!=null){
fragment.setData(getLocalResults(),this);
}
}
if(selectedPosition==1){
SearchOnlineResultsFragment fragment = (SearchOnlineResultsFragment)
mSectionsPagerAdapter.fragments.get(selectedPosition);
fragment.showProgressIndicator();
NewsDataSource.getInstance().searchNewsItemOnline(query);
}
}
@Subscribe
public void onSearchResultsRecived(SearchResultsEvent event){
if(event.query == query){
SearchOnlineResultsFragment fragment = (SearchOnlineResultsFragment)
mSectionsPagerAdapter.fragments.get(1);
fragment.setData(event.results,this);
}
}
private ArrayList<NewsItem> getLocalResults(){
ArrayList<NewsItem> results = NewsDataSource.getInstance().searchNewsItemsLocal(query);
return results;
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.search_results_activity, menu);
searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
query = s;
getData();
searchView.clearFocus();
return true;
}
@Override
public boolean onQueryTextChange(String s) {
query = s;
if(query.length()>2){
getData();
}
return false;
}
});
try {
searchView.setQuery(query, false);
searchView.clearFocus();
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpTo(this, new Intent(this, NewsItemListActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public ArrayList<SherlockFragment> fragments;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public SherlockFragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.local).toUpperCase(l);
case 1:
return getString(R.string.online).toUpperCase(l);
}
return null;
}
}
}