package io.codetail.fragments;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
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 android.widget.ProgressBar;
import com.telly.mrvector.MrVector;
import butterknife.ButterKnife;
import codetail.graphics.drawables.DrawableHelper;
import codetail.utils.ThemeUtils;
import codetail.utils.ViewUtils;
import codetail.widget.FloatingActionButton;
import io.codetail.WatchMeActivity;
import io.codetail.adapters.WatchMeAdapterNew;
import io.codetail.recycle.DividerDecoration;
import io.codetail.recycle.ItemClickSupport;
import io.codetail.utils.ScrollManager;
import io.codetail.watchme.R;
import static android.support.v7.widget.LinearLayoutManager.VERTICAL;
public abstract class WatchMeRecycleFragment extends BaseWatchMeFragment
implements ItemClickSupport.OnItemClickListener, ItemClickSupport.OnItemLongClickListener{
private WatchMeAdapterNew mWatchMeAdapter;
private ScrollManager mScrollManager;
private RecyclerView mRecycleView;
private ProgressBar mContentProgress;
private final View.OnClickListener mScrollToTopClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
scrollToTop();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWatchMeAdapter = new WatchMeAdapterNew(WatchMeAdapterNew.generateKey(this));
if(savedInstanceState != null) {
mWatchMeAdapter.onRestoreInstanceState(savedInstanceState);
}
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_watchme, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mRecycleView = ButterKnife.findById(view, R.id.recycler_view);
mContentProgress = ButterKnife.findById(view, R.id.content_progress);
FloatingActionButton scrollUpFab = ButterKnife.findById(view, R.id.fab_scroll_up);
scrollUpFab.setOnClickListener(mScrollToTopClick);
WatchMeActivity context = getWatchMeActivity();
mWatchMeAdapter.initResources(context);
Drawable drawable = MrVector.inflate(getResources(), R.drawable.ic_arrow_scroll_to_top);
DrawableHelper.setTint(drawable, ThemeUtils.getThemeColor(context, R.attr.fabIconColor));
scrollUpFab.setActionIcon(drawable);
ItemClickSupport itemClickSupport = ItemClickSupport.addTo(mRecycleView);
itemClickSupport.setOnItemClickListener(this);
itemClickSupport.setOnItemLongClickListener(this);
ViewGroup toolbarWrapper = (ViewGroup) context.getToolbar().getParent();
mScrollManager = new ScrollManager(toolbarWrapper, scrollUpFab);
mRecycleView.setVerticalScrollBarEnabled(true);
mRecycleView.addItemDecoration(new DividerDecoration(context));
mRecycleView.setOnScrollListener(mScrollManager);
mRecycleView.setHasFixedSize(false);
mRecycleView.setLayoutManager(new LinearLayoutManager(context, VERTICAL, false));
mRecycleView.setAdapter(mWatchMeAdapter);
showContent();
}
public void scrollToTop(){
mRecycleView.scrollToPosition(0);
mScrollManager.showToolbar();
mScrollManager.hideFab();
}
@Override
public void onResume() {
super.onResume();
mWatchMeAdapter.notifyDataSetChanged();
}
public void showProgress(){
ViewUtils.setVisibilityWithGoneFlag(mRecycleView, false);
ViewUtils.setVisibilityWithGoneFlag(mContentProgress, true);
}
public void showContent(){
ViewUtils.setVisibilityWithGoneFlag(mRecycleView, true);
ViewUtils.setVisibilityWithGoneFlag(mContentProgress, false);
mScrollManager.toggleScrollUp(mRecycleView);
}
public boolean isProgressVisible(){
return false;
}
public WatchMeAdapterNew getWatchMeAdapter() {
return mWatchMeAdapter;
}
public ScrollManager getScrollManager() {
return mScrollManager;
}
public RecyclerView getRecycleView() {
return mRecycleView;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mWatchMeAdapter.onSaveInstanceState(outState);
}
@Override
public void onDestroy() {
super.onDestroy();
if(mRecycleView != null) {
mRecycleView.setOnScrollListener(null);
mScrollManager = null;
ItemClickSupport.removeFrom(mRecycleView);
}
}
@Override
public void onItemClick(RecyclerView parent, View view, int position, long id) {
}
@Override
public boolean onItemLongClick(RecyclerView parent, View view, int position, long id) {
return false;
}
}