package com.malmstein.yahnac.stories; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.SwipeRefreshLayout; import com.malmstein.yahnac.data.HNewsContract; import com.malmstein.yahnac.model.Story; import com.malmstein.yahnac.views.ViewDelegate; import com.novoda.notils.exception.DeveloperError; public class TopStoriesFragment extends StoryFragment implements LoaderManager.LoaderCallbacks<Cursor>, SwipeRefreshLayout.OnRefreshListener, ViewDelegate { private static final int STORY_LOADER = 1001; public static TopStoriesFragment from(QUERY query) { Bundle bundle = new Bundle(); bundle.putSerializable("query", query); TopStoriesFragment fragment = new TopStoriesFragment(); fragment.setArguments(bundle); return fragment; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getLoaderManager().initLoader(STORY_LOADER, null, this); } public Story.FILTER getType() { QUERY query = (QUERY) getArguments().get("query"); switch (query) { case top: return Story.FILTER.top_story; case newest: return Story.FILTER.new_story; case best: return Story.FILTER.top_story; default: new DeveloperError("Bad Query type"); return null; } } protected String getOrder() { QUERY query = (QUERY) getArguments().get("query"); switch (query) { case top: return HNewsContract.StoryEntry.RANK + " ASC" + ", " + HNewsContract.StoryEntry.TIMESTAMP + " DESC"; case newest: return HNewsContract.StoryEntry.TIME_AGO + " DESC"; case best: return HNewsContract.StoryEntry.SCORE + " DESC" + ", " + HNewsContract.StoryEntry.TIMESTAMP + " DESC"; default: new DeveloperError("Bad Query type"); return null; } } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { Uri storyNewsUri = HNewsContract.StoryEntry.buildStoriesUri(); return new CursorLoader( getActivity(), storyNewsUri, HNewsContract.StoryEntry.STORY_COLUMNS, HNewsContract.StoryEntry.TYPE + " = ?", new String[]{Story.TYPE.story.name()}, getOrder()); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { storiesAdapter.swapCursor(data); stopRefreshing(); } @Override public void onLoaderReset(Loader<Cursor> loader) { } public enum QUERY { top, newest, best } }