package what.whatandroid.bookmarks;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import api.bookmarks.Bookmarks;
import api.soup.MySoup;
import what.whatandroid.R;
import what.whatandroid.callbacks.OnLoggedInCallback;
/**
* Displays a list of the user's bookmarked torrents
*/
public class TorrentBookmarksFragment extends Fragment implements OnLoggedInCallback, LoaderManager.LoaderCallbacks<Bookmarks>,
BookmarksChangedListener {
public static final String BOOKMARKS_CHANGED = "what.whatandroid.BOOKMARKS_CHANGED";
private boolean reloadBookmarks;
private TorrentBookmarkAdapter adapter;
private Bookmarks bookmarks;
private ProgressBar loadingIndicator;
private TextView noBookmarks;
public TorrentBookmarksFragment(){
//Required empty ctor
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if (savedInstanceState != null){
reloadBookmarks = savedInstanceState.getBoolean(BOOKMARKS_CHANGED, false);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_list_view, container, false);
ListView list = (ListView)view.findViewById(R.id.list);
loadingIndicator = (ProgressBar)view.findViewById(R.id.loading_indicator);
noBookmarks = (TextView)view.findViewById(R.id.no_content_notice);
noBookmarks.setText("No Bookmarks");
adapter = new TorrentBookmarkAdapter(getActivity(), this, noBookmarks);
list.setAdapter(adapter);
list.setOnItemClickListener(adapter);
if (bookmarks != null){
if (bookmarks.getResponse().getTorrents().isEmpty()){
noBookmarks.setVisibility(View.VISIBLE);
}
else {
adapter.addAll(bookmarks.getResponse().getTorrents());
}
}
else if (MySoup.isLoggedIn()){
onLoggedIn();
}
return view;
}
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putBoolean(BOOKMARKS_CHANGED, reloadBookmarks);
}
@Override
public void onLoggedIn(){
if (isAdded()){
Bundle args = new Bundle();
args.putInt(BookmarksAsyncLoader.BOOKMARK_TYPE, BookmarksAsyncLoader.TORRENTS);
if (!reloadBookmarks){
getLoaderManager().initLoader(0, args, this);
}
else {
reloadBookmarks = false;
getLoaderManager().restartLoader(0, args, this);
}
}
}
@Override
public Loader<Bookmarks> onCreateLoader(int id, Bundle args){
loadingIndicator.setVisibility(View.VISIBLE);
return new BookmarksAsyncLoader(getActivity(), args);
}
@Override
public void onLoadFinished(Loader<Bookmarks> loader, Bookmarks data){
loadingIndicator.setVisibility(View.GONE);
bookmarks = data;
if (bookmarks == null || !bookmarks.getStatus()){
Toast.makeText(getActivity(), "Could not load torrent bookmarks", Toast.LENGTH_LONG).show();
}
else if (adapter != null){
adapter.clear();
if (bookmarks.getResponse().getTorrents().isEmpty()){
noBookmarks.setVisibility(View.VISIBLE);
}
else {
noBookmarks.setVisibility(View.GONE);
adapter.addAll(bookmarks.getResponse().getTorrents());
}
}
}
@Override
public void onLoaderReset(Loader<Bookmarks> loader){
}
@Override
public void bookmarksChanged(){
reloadBookmarks = true;
}
}