package com.philosophicalhacker.philhackernews.ui.storieslist;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import com.philosophicalhacker.philhackernews.data.repository.StoryRepository;
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;
/**
* A placeholder fragment containing a simple view.
*/
public class StoriesFragment extends RefreshableListRepositoryFragment implements Refreshable {
@SuppressWarnings("WeakerAccess")
@Inject
StoryRepository mStoryRepository;
@SuppressWarnings("WeakerAccess")
@Inject
DataSynchronizer mDataSynchronizer;
//----------------------------------------------------------------------------------
// Lifecycle Methods
//----------------------------------------------------------------------------------
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (savedInstanceState == null) {
mDataSynchronizer.requestTopStoriesSync();
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
//----------------------------------------------------------------------------------
// Refreshable Interface Methods
//----------------------------------------------------------------------------------
@Override
public void onShouldRefreshObservableCreated(Observable<Void> swipeToRefreshObservable) {
swipeToRefreshObservable.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
mDataSynchronizer.requestTopStoriesSync();
}
});
}
//----------------------------------------------------------------------------------
// Protected Methods
//----------------------------------------------------------------------------------
@Override
protected RecyclerView.Adapter getAdapter(List<Item> items) {
return new StoriesAdapter(items);
}
@Override
protected ConnectableObservable<List<Item>> makeConnectableRepositoryObservable() {
return mStoryRepository.loadTopStories().publish();
}
}