package edu.mit.mitmobile2.news.view;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ArrayAdapter;
import edu.mit.mitmobile2.MobileWebApi;
import edu.mit.mitmobile2.NewModule;
import edu.mit.mitmobile2.SearchActivity;
import edu.mit.mitmobile2.news.net.NewsDownloader;
import edu.mit.mitmobile2.news.net.StoriesProgressListener;
//import edu.mit.mitmobile2.news.net.NewsDownloader.DownloadStoriesTask;
import edu.mit.mitmobile2.news.view.NewsArrayAdapter;
import edu.mit.mitmobile2.news.NewsModule;
//import edu.mit.mitmobile2.news.NewsModel;
//import edu.mit.mitmobile2.news.NewsModule;
import edu.mit.mitmobile2.news.beans.NewsStory;
//import edu.mit.mitmobile2.objs.NewsItem;
import edu.mit.mitmobile2.objs.SearchResults;
public class NewsSearchActivity extends SearchActivity<NewsStory> {
//protected NewsModel mNewsModel;
private String mSearchTerm;
private NewsDownloader nd;
private Handler uiHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
nd = NewsDownloader.getInstance(this);
super.onCreate(savedInstanceState);
}
@Override
protected ArrayAdapter<NewsStory> getListAdapter(final SearchResults<NewsStory> results) {
List<NewsStory> newsItems = results.getResultsList();
return new NewsArrayAdapter(this, 0, newsItems);
}
@Override
protected String getSuggestionsAuthority() {
return NewsSearchSuggestionsProvider.AUTHORITY;
}
@Override
protected void initiateSearch(String searchTerm, final Handler uiHandler) {
this.uiHandler = uiHandler;
mSearchTerm = searchTerm;
NewsDownloader.DownloadStoriesTask dst = nd.new DownloadStoriesTask(new StoriesProgressListener(){
SearchResults<NewsStory> results;
@Override
public void onProgressUpdate(ArrayList<NewsStory>... list) {
for(ArrayList<NewsStory> st:list){
if(st==null || st.size()<1)
continue;
if(results == null)
results = new SearchResults<NewsStory>(mSearchTerm,st);
else
results.addMoreResults(st);
}
}
@Override
public void onPostExecute(Long nr) {
ArrayList<NewsStory> loadMore = new ArrayList<NewsStory>();
NewsStory nMore = new NewsStory();
nMore.setId("more");
nMore.setDek("Load more stories");
loadMore.add(nMore);
results.addMoreResults(loadMore);
MobileWebApi.sendSuccessMessage(uiHandler, results);
}
}, "search");
dst.execute(new String[]{mSearchTerm});
}
@Override
protected String searchItemPlural() {
return "stories";
}
@Override
protected String searchItemSingular() {
return "story";
}
@Override
protected boolean supportsMoreResult() {
return true;
}
@Override
protected void onItemSelected(SearchResults<NewsStory> results, NewsStory item) {
/*Intent intent = new Intent(NewsSearchActivity.this, NewsDetailsActivity.class);
intent.putExtra(NewsDetailsActivity.KEY_POSITION, results.getItemPosition(item));
intent.putExtra(NewsDetailsActivity.SEARCH_TERM_KEY, results.getSearchTerm());
startActivity(intent);*/
if(item.getId().equals("more")){
results.removeItem(results.getCount()-1);
continueSearch(results, uiHandler);
}else{
Intent i = new Intent(this, NewsDetailsActivity.class);
i.putExtra(NewsDetailsActivity.STORY_ID_KEY, item.getId());
i.putExtra(NewsDetailsActivity.SEARCH_TERM_KEY, mSearchTerm);
i.putExtra(NewsDetailsActivity.SEARCH_LIMIT, results.totalResultsCount());
startActivity(i);
}
}
@Override
protected NewModule getNewModule() {
return new NewsModule();
}
@Override
protected boolean isScrollable() {
return false;
}
@Override
protected void onOptionSelected(String optionId) {
// TODO Auto-generated method stub
}
@Override
protected void continueSearch(final SearchResults<NewsStory> previousResults, final Handler uiHandler) {
NewsDownloader.DownloadStoriesTask dst = nd.new DownloadStoriesTask(new StoriesProgressListener(){
@Override
public void onProgressUpdate(ArrayList<NewsStory>... list) {
for(ArrayList<NewsStory> st:list){
if(st==null || st.size()<1)
continue;
previousResults.addMoreResults(st);
}
}
@Override
public void onPostExecute(Long nr) {
ArrayList<NewsStory> loadMore = new ArrayList<NewsStory>();
NewsStory nMore = new NewsStory();
nMore.setId("more");
nMore.setDek("Load More...");
loadMore.add(nMore);
previousResults.addMoreResults(loadMore);
MobileWebApi.sendSuccessMessage(uiHandler, previousResults);
}
}, "search",previousResults.getCount(),20);
dst.execute(new String[]{mSearchTerm});
}
}