package edu.mit.mitmobile2.news.view;
import android.content.Context;
import android.view.View;
import edu.mit.mitmobile2.FullScreenLoader;
import edu.mit.mitmobile2.SliderView.ScreenPosition;
import edu.mit.mitmobile2.news.beans.NewsStory;
import edu.mit.mitmobile2.news.view.NewsSliderAdapter;
public class NewsSliderCursorAdapter extends NewsCategoryLoader implements NewsSliderAdapter {
Context mContext;
StorySliderListener mStoryListener;
NewsDetailsView mPreviousScreen;
NewsDetailsView mCurrentScreen;
NewsDetailsView mNextScreen;
FullScreenLoader mLoadingScreen;
boolean mHasDynamicLoading;
//ArrayList<NewsStory> list;
NewsSliderCursorAdapter(Context context, String criteria,String type,int start, int limit, StorySliderListener storyListener, boolean hasDynamicLoading) {
super(context);
mContext = context;
this.position = 0;
mStoryListener = storyListener;
mHasDynamicLoading = hasDynamicLoading;
loadStories(criteria,type,start,limit);
}
@Override
public boolean hasScreen(ScreenPosition screenPosition) {
if (list.isEmpty()) {
return false;
}
switch (screenPosition) {
case Previous:
return position!=0;
case Current:
return true;
case Next:
if (position < list.size() -1) {
return true;
}
/*if (mCursor.isLast()) {
return hasMore();
}*/
return false;
}
return false;
}
@Override
public View getScreen(ScreenPosition screenPosition) {
if (isLoadingScreen(screenPosition)) {
if (mLoadingScreen == null) {
mLoadingScreen = new FullScreenLoader(mContext, null);
}
return mLoadingScreen;
}
if (screenPosition == ScreenPosition.Previous) {
if (mPreviousScreen == null) {
NewsStory newsItem = null;
if(this.position>0)
newsItem = list.get(this.position-1);
mPreviousScreen = new NewsDetailsView(mContext, newsItem);
}
return mPreviousScreen;
} else if (screenPosition == ScreenPosition.Current) {
if (mCurrentScreen == null) {
NewsStory newsItem = list.get(this.position);
mCurrentScreen = new NewsDetailsView(mContext, newsItem);
}
return mCurrentScreen;
} else if (screenPosition == ScreenPosition.Next) {
if (mNextScreen == null) {
NewsStory newsItem = null;
if(this.position < this.list.size()-1)
newsItem = this.list.get(this.position+1);
mNextScreen = new NewsDetailsView(mContext, newsItem);
}
return mNextScreen;
}
return null;
}
@Override
public void destroyScreen(ScreenPosition screenPosition) {
// TODO Auto-generated method stub
}
@Override
public void seek(ScreenPosition screenPosition) {
if (isLoadingScreen(screenPosition)) {
if (screenPosition == ScreenPosition.Next) {
if(this.position < this.list.size() -1 )
this.position ++;
mPreviousScreen = mCurrentScreen;
mCurrentScreen = null;
mNextScreen = null;
}
mLoadingScreen.showLoading();
}
if (screenPosition == ScreenPosition.Previous) {
//mCursor.move(-1);
if(this.position > 0)
this.position --;
mNextScreen = mCurrentScreen;
mCurrentScreen = mPreviousScreen;
mPreviousScreen = null;
} else if (screenPosition == ScreenPosition.Next) {
if(this.position < this.list.size() -1 )
this.position ++;
mPreviousScreen = mCurrentScreen;
mCurrentScreen = mNextScreen;
mNextScreen = null;
}
mStoryListener.onStorySelected(getCurrentNewsItem());
}
public void showError() {
mLoadingScreen.showError();
}
public void stopLoading() {
mLoadingScreen.stopLoading();
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
/*private boolean hasMore() {
//return mHasDynamicLoading && (NewsModel.MAX_STORIES_PER_CAREGORY > mCursor.getCount());
return false;
}*/
@Override
public boolean isLoading(){
return this.isLoading;
}
private boolean isLoadingScreen(ScreenPosition screenPosition) {
return this.isLoading;
}
public NewsStory getLastStoryItem() {
NewsStory item = null;
if(this.list.size()>0)
item = this.list.get(this.list.size()-1);
return item;
}
@Override
public void seekToNewsItem(int position) {
if(position >=0 && position < this.list.size()){
this.position = position;
}
//mCursor.moveToPosition(position);
}
@Override
public NewsStory getCurrentNewsItem() {
//return NewsDB.retrieveNewsItem(mCursor);
if(this.list.size()>this.position)
return this.list.get(this.position);
else
return null;
}
@Override
public int getStoriesCount() {
return this.list.size();
}
}