package com.philosophicalhacker.philhackernews.ui.commentslist;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import com.philosophicalhacker.philhackernews.R;
import com.philosophicalhacker.philhackernews.data.repository.CommentRepository;
import com.philosophicalhacker.philhackernews.data.sync.DataSynchronizer;
import com.philosophicalhacker.philhackernews.model.Item;
import com.philosophicalhacker.philhackernews.ui.refresh.Refreshable;
import com.philosophicalhacker.philhackernews.ui.refresh.RefreshableListRepositoryFragment;
import java.util.List;
import javax.inject.Inject;
import butterknife.ButterKnife;
import rx.Observable;
import rx.functions.Action1;
import rx.observables.ConnectableObservable;
/**
*
* Created by MattDupree on 7/20/15.
*/
public class CommentsFragment extends RefreshableListRepositoryFragment implements Refreshable {
private static final String ARGS_ITEM = "item";
@Inject
CommentRepository mCommentRepository;
@Inject
DataSynchronizer mDataSynchronizer;
private Item mStory;
public static CommentsFragment newInstance(Item item) {
CommentsFragment commentsFragment = new CommentsFragment();
Bundle args = new Bundle();
args.putParcelable(ARGS_ITEM, item);
commentsFragment.setArguments(args);
return commentsFragment;
}
//----------------------------------------------------------------------------------
// Lifecycle Methods
//----------------------------------------------------------------------------------
@Override
public void onAttach(Activity activity) {
mStory = getArguments().getParcelable(ARGS_ITEM);
super.onAttach(activity);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
setHasOptionsMenu(true);
getActivity().setTitle(mStory.getTitle());
if (savedInstanceState == null) {
mDataSynchronizer.requestCommentsSync(mStory, 20);
}
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_story_comments, menu);
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
//----------------------------------------------------------------------------------
// Protected Methods
//----------------------------------------------------------------------------------
@Override
protected RecyclerView.Adapter getAdapter(List<Item> items) {
return new CommentsAdapter(items);
}
@Override
protected ConnectableObservable<List<Item>> makeConnectableRepositoryObservable() {
return mCommentRepository.getCommentsForStoryObservable(mStory).publish();
}
//----------------------------------------------------------------------------------
// Refreshable - Interface Methods
//----------------------------------------------------------------------------------
@Override
public void onShouldRefreshObservableCreated(Observable<Void> swipeToRefreshObservable) {
swipeToRefreshObservable.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
mDataSynchronizer.requestCommentsSync(mStory, 20);
}
});
}
}