package me.ccrama.redditslide.Fragments;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.view.ContextThemeWrapper;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.mikepenz.itemanimators.SlideUpAlphaAnimator;
import net.dean.jraw.models.Subreddit;
import java.util.List;
import me.ccrama.redditslide.Activities.BaseActivity;
import me.ccrama.redditslide.Adapters.SubredditAdapter;
import me.ccrama.redditslide.Adapters.SubredditNames;
import me.ccrama.redditslide.ColorPreferences;
import me.ccrama.redditslide.Constants;
import me.ccrama.redditslide.R;
import me.ccrama.redditslide.Views.PreCachingLayoutManager;
import me.ccrama.redditslide.Visuals.Palette;
import me.ccrama.redditslide.handler.ToolbarScrollHideHandler;
import me.ccrama.redditslide.util.LogUtil;
public class SubredditListView extends Fragment {
public SubredditNames posts;
public RecyclerView rv;
private int visibleItemCount;
private int pastVisiblesItems;
private int totalItemCount;
public SubredditAdapter adapter;
public String where;
private SwipeRefreshLayout mSwipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), new ColorPreferences(inflater.getContext()).getThemeSubreddit(where));
View v = ((LayoutInflater) contextThemeWrapper.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.fragment_verticalcontent, container, false);
rv = ((RecyclerView) v.findViewById(R.id.vertical_content));
final RecyclerView.LayoutManager mLayoutManager = new PreCachingLayoutManager(getActivity());
rv.setLayoutManager(mLayoutManager);
rv.setItemAnimator(new SlideUpAlphaAnimator());
mSwipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.activity_main_swipe_refresh_layout);
mSwipeRefreshLayout.setColorSchemeColors(Palette.getColors("no sub", getContext()));
//If we use 'findViewById(R.id.header).getMeasuredHeight()', 0 is always returned.
//So, we estimate the height of the header in dp
mSwipeRefreshLayout.setProgressViewOffset(false,
Constants.TAB_HEADER_VIEW_OFFSET - Constants.PTR_OFFSET_TOP,
Constants.TAB_HEADER_VIEW_OFFSET + Constants.PTR_OFFSET_BOTTOM);
v.findViewById(R.id.post_floating_action_button).setVisibility(View.GONE);
doAdapter();
return v;
}
public boolean main;
public void doAdapter() {
mSwipeRefreshLayout.post(new Runnable() {
@Override
public void run() {
mSwipeRefreshLayout.setRefreshing(true);
}
});
posts = new SubredditNames(where, getContext(), SubredditListView.this);
adapter = new SubredditAdapter(getActivity(), posts, rv, where, this);
rv.setAdapter(adapter);
posts.loadMore(mSwipeRefreshLayout.getContext(), true, where);
mSwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
}
);
rv.addOnScrollListener(new ToolbarScrollHideHandler(((BaseActivity) getActivity()).mToolbar, getActivity().findViewById(R.id.header)) {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (!posts.loading && !posts.nomore) {
visibleItemCount = rv.getLayoutManager().getChildCount();
totalItemCount = rv.getLayoutManager().getItemCount();
pastVisiblesItems = ((LinearLayoutManager)rv.getLayoutManager()).findFirstVisibleItemPosition();
if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {
posts.loading = true;
LogUtil.v("Loading more");
posts.loadMore(mSwipeRefreshLayout.getContext(), false, where);
}
}
}
});
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getArguments();
where = bundle.getString("id", "");
}
private void refresh() {
posts.loadMore(mSwipeRefreshLayout.getContext(), true, where);
}
public void updateSuccess(final List<Subreddit> submissions, final int startIndex) {
if (getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(false);
}
if (startIndex > 0) {
adapter.notifyItemRangeInserted(startIndex + 1, posts.posts.size());
} else {
adapter.notifyDataSetChanged();
}
}
});
}
}
public void updateError() {
mSwipeRefreshLayout.setRefreshing(false);
adapter.setError(true);
}
}