package io.kaif.mobile.view; import android.content.Intent; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.List; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import io.kaif.mobile.KaifApplication; import io.kaif.mobile.R; import io.kaif.mobile.app.BaseFragment; import io.kaif.mobile.view.daemon.FeedDaemon; import io.kaif.mobile.view.viewmodel.FeedAssetViewModel; import io.kaif.mobile.view.widget.OnScrollToLastListener; import rx.Observable; public class NewsFeedActivityFragment extends BaseFragment { @BindView(R.id.debate_list) RecyclerView debateListView; @BindView(R.id.pull_to_refresh) SwipeRefreshLayout pullToRefreshLayout; @Inject FeedDaemon feedDaemon; private NewsFeedListAdapter adapter; public NewsFeedActivityFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); KaifApplication.getInstance().beans().inject(this); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_news_feed, container, false); ButterKnife.bind(this, view); setupView(); fillContent(); return view; } private void fillContent() { reload(); } private void setupView() { final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); debateListView.setLayoutManager(linearLayoutManager); adapter = new NewsFeedListAdapter(); adapter.setOnItemClickListener(debateViewModel -> { Intent intent = DebatesActivity.DebatesActivityIntent.create(getActivity(), debateViewModel); startActivity(intent); }); debateListView.setAdapter(adapter); debateListView.getItemAnimator().setChangeDuration(120); debateListView.addOnScrollListener(new OnScrollToLastListener() { private boolean loadingNextPage = false; @Override public void onScrollToLast() { if (loadingNextPage) { return; } loadingNextPage = true; bind(listFeedAssets(adapter.getLastAssetId())).subscribe(adapter::addAll, throwable -> { }, () -> loadingNextPage = false); } }); pullToRefreshLayout.setOnRefreshListener(this::reload); } private void reload() { pullToRefreshLayout.setRefreshing(true); bind(listFeedAssets(null)).subscribe(adapter::refresh, throwable -> { }, () -> pullToRefreshLayout.setRefreshing(false)); } private Observable<List<FeedAssetViewModel>> listFeedAssets(String feedAssetId) { if (TextUtils.isEmpty(feedAssetId)) { return feedDaemon.listAndAcknowledgeIfRequired(); } return feedDaemon.listNewsFeed(feedAssetId); } }