package info.guardianproject.securereaderinterface;
import java.util.ArrayList;
import info.guardianproject.securereader.SocialReporter;
import info.guardianproject.securereaderinterface.adapters.PostDraftsListAdapter;
import info.guardianproject.securereaderinterface.adapters.PostOutgoingListAdapter;
import info.guardianproject.securereaderinterface.adapters.PostPublishedListAdapter;
import info.guardianproject.securereaderinterface.adapters.StoryListAdapter;
import info.guardianproject.securereaderinterface.adapters.PostDraftsListAdapter.PostDraftsListAdapterListener;
import info.guardianproject.securereaderinterface.adapters.StoryListAdapter.OnTagClickedListener;
import info.guardianproject.securereaderinterface.uiutil.UIHelpers;
import info.guardianproject.securereaderinterface.views.StoryListView.StoryListListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
import info.guardianproject.securereaderinterface.R;
import com.tinymission.rss.Item;
public class PostListFragment extends Fragment implements PostDraftsListAdapterListener
{
public static final String ARG_POST_LIST_TYPE = "post_list_type";
public enum PostListType
{
PUBLISHED, OUTGOING, DRAFTS
};
public PostListFragment()
{
}
private PostListType mPostListType;
private ListView mListPosts;
SocialReporter socialReporter;
private OnTagClickedListener mOnTagClickedListener;
private StoryListListener mStoryListListener;
private String mCurrentTagFilter;
private TextView mTvTagResults;
private View mViewTagSearch;
private View mBtnCloseTagSearch;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
socialReporter = ((App) getActivity().getApplicationContext()).socialReporter;
mPostListType = PostListType.valueOf((String) getArguments().get(ARG_POST_LIST_TYPE));
View rootView = inflater.inflate(R.layout.post_list, container, false);
mListPosts = (ListView) rootView.findViewById(R.id.lvPosts);
updateListAdapter();
// Controls for tag search
mTvTagResults = (TextView) rootView.findViewById(R.id.tvTagResults);
mViewTagSearch = rootView.findViewById(R.id.llTagSearch);
mViewTagSearch.setVisibility(View.GONE);
mBtnCloseTagSearch = rootView.findViewById(R.id.btnCloseTagSearch);
mBtnCloseTagSearch.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (mOnTagClickedListener != null)
mOnTagClickedListener.onTagClicked(null);
}
});
setTagFilter(mCurrentTagFilter);
return rootView;
}
public void setStoryListListener(StoryListListener listener)
{
mStoryListListener = listener;
if (mListPosts != null && mListPosts.getAdapter() != null)
{
if (mListPosts.getAdapter() instanceof StoryListAdapter)
((StoryListAdapter) mListPosts.getAdapter()).setListener(mStoryListListener);
}
}
public void setOnTagClickedListener(OnTagClickedListener onTagClickedListener)
{
mOnTagClickedListener = onTagClickedListener;
if (mListPosts != null && mListPosts.getAdapter() != null)
{
if (mListPosts.getAdapter() instanceof PostPublishedListAdapter)
((PostPublishedListAdapter) mListPosts.getAdapter()).setOnTagClickedListener(mOnTagClickedListener);
if (mListPosts.getAdapter() instanceof PostOutgoingListAdapter)
((PostOutgoingListAdapter) mListPosts.getAdapter()).setOnTagClickedListener(mOnTagClickedListener);
}
}
public void setTagFilter(String tag)
{
mCurrentTagFilter = tag;
if (mViewTagSearch != null)
{
if (mCurrentTagFilter == null)
{
mViewTagSearch.setVisibility(View.GONE);
}
else
{
mTvTagResults.setText(UIHelpers.setSpanBetweenTokens(getString(R.string.story_item_short_tag_results, tag), "##", new ForegroundColorSpan(
getResources().getColor(R.color.accent))));
mViewTagSearch.setVisibility(View.VISIBLE);
}
}
if (mListPosts != null && mListPosts.getAdapter() != null)
{
if (mListPosts.getAdapter() instanceof PostPublishedListAdapter)
((PostPublishedListAdapter) mListPosts.getAdapter()).setTagFilter(tag);
if (mListPosts.getAdapter() instanceof PostOutgoingListAdapter)
((PostOutgoingListAdapter) mListPosts.getAdapter()).setTagFilter(tag);
if (mListPosts.getAdapter() instanceof PostDraftsListAdapter)
((PostDraftsListAdapter) mListPosts.getAdapter()).setTagFilter(tag);
}
}
public void updateListAdapter() {
ThreadedTask<Void, Void, ArrayList<Item>> updateTask = new ThreadedTask<Void, Void, ArrayList<Item>>(){
@Override
protected ArrayList<Item> doInBackground(Void... values) {
ArrayList<Item> items = null;
if (mPostListType == PostListType.PUBLISHED)
{
items = socialReporter.getPosts();
}
else if (mPostListType == PostListType.OUTGOING)
{
items = socialReporter.getDrafts();
}
else if (mPostListType == PostListType.DRAFTS)
{
items = socialReporter.getDrafts();
}
return items;
}
@Override
protected void onPostExecute(ArrayList<Item> result) {
super.onPostExecute(result);
if (mPostListType == PostListType.PUBLISHED)
{
if (mListPosts.getAdapter() == null)
{
PostPublishedListAdapter adapter = new PostPublishedListAdapter(
getActivity(), result);
adapter.setOnTagClickedListener(mOnTagClickedListener);
adapter.setListener(mStoryListListener);
adapter.setTagFilter(mCurrentTagFilter);
mListPosts.setAdapter(adapter);
}
else
{
((StoryListAdapter) mListPosts.getAdapter())
.updateItems(result);
}
}
else if (mPostListType == PostListType.OUTGOING) {
if (mListPosts.getAdapter() == null)
{
PostOutgoingListAdapter adapter = new PostOutgoingListAdapter(
getActivity(), result);
adapter.setOnTagClickedListener(mOnTagClickedListener);
adapter.setListener(mStoryListListener);
adapter.setTagFilter(mCurrentTagFilter);
mListPosts.setAdapter(adapter);
}
else
{
((StoryListAdapter) mListPosts.getAdapter())
.updateItems(result);
}
}
else if (mPostListType == PostListType.DRAFTS)
{
if (mListPosts.getAdapter() == null)
{
PostDraftsListAdapter adapter = new PostDraftsListAdapter(
getActivity(), result);
adapter.setPostDraftsListAdapterListener(PostListFragment.this);
adapter.setOnTagClickedListener(mOnTagClickedListener);
adapter.setListener(mStoryListListener);
adapter.setTagFilter(mCurrentTagFilter);
mListPosts.setAdapter(adapter);
}
else
{
((StoryListAdapter) mListPosts.getAdapter())
.updateItems(result);
}
}
}
};
updateTask.execute((Void)null);
}
@Override
public void onEditDraft(Item item)
{
Intent intent = new Intent(getActivity(), AddPostActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("story", item.getDatabaseId());
getActivity().startActivity(intent);
}
@Override
public void onDeleteDraft(Item item)
{
App.getInstance().socialReporter.deleteDraft(item);
updateListAdapter();
}
}