/*
* The MIT License (MIT)
*
* Copyright (c) 2015 baoyongzhang <baoyz94@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.baoyz.dribble.fragment;
import android.animation.ValueAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import com.baoyz.dribble.AppModule;
import com.baoyz.dribble.MainActivity;
import com.baoyz.dribble.R;
import com.baoyz.dribble.adapter.FeedAdapter;
import com.baoyz.dribble.model.Shot;
import com.baoyz.dribble.network.DribbleClient;
import com.baoyz.dribble.util.ToastUtil;
import com.baoyz.dribble.widget.SuperRecyclerView;
import java.util.List;
import javax.inject.Inject;
import butterknife.InjectView;
import jp.wasabeef.recyclerview.animators.LandingAnimator;
import rx.Observer;
/**
* Created by baoyz on 15/1/12.
*/
public class FeedFragment extends BaseFragment {
@InjectView(R.id.rv_feed)
SuperRecyclerView mFeedList;
@Inject
DribbleClient mClient;
private String mList;
private MainActivity mActivity;
private int mPage;
private FeedAdapter mAdapter;
private Toolbar mToolBar;
private ViewGroup mContainer;
private int mTop;
public static FeedFragment newInstance(String list) {
FeedFragment f = new FeedFragment();
f.mList = list;
return f;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
AppModule.inject(this);
mToolBar = mActivity.getToolbar();
mContainer = (ViewGroup) view.getParent();
LinearLayoutManager layoutManager = new LinearLayoutManager(mContext) {
@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
return 300;
}
};
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mFeedList.setLayoutManager(layoutManager);
mFeedList.setItemAnimator(new LandingAnimator());
mAdapter = new FeedAdapter(null);
mFeedList.setAdapter(mAdapter);
mFeedList.setOnLoadMoreListener(new SuperRecyclerView.OnLoadMoreListener() {
@Override
public void onLoadMore(RecyclerView recyclerView) {
loadData(mPage + 1);
}
});
mToolBar.setTranslationY(0);
mFeedList.post(new Runnable() {
@Override
public void run() {
mTop = mToolBar.getHeight();
mFeedList.setTranslationY(mTop);
}
});
mFeedList.setOnQuickScrollListener(new SuperRecyclerView.OnQuickScrollListener() {
@Override
public void onQuickUp() {
if (mFeedList.getTranslationY() == mTop) {
start(mTop, 0);
}
}
private void start(int start, int end){
ValueAnimator valueAnimator = ValueAnimator.ofInt(start, end).setDuration(200);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int animatedValue = (int) animation.getAnimatedValue();
mToolBar.setTranslationY(animatedValue - mTop);
mFeedList.setTranslationY(animatedValue);
}
});
valueAnimator.start();
}
@Override
public void onQuickDown() {
if (mFeedList.getTranslationY() == 0) {
start(0, mTop);
}
}
});
loadData(1);
}
@Override
protected int onGetViewId() {
return R.layout.fragment_feed;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = (MainActivity) activity;
}
private void loadData(int page) {
mPage = page;
mClient.shots(mList, mPage, new Observer<List<Shot>>() {
@Override
public void onCompleted() {
mFeedList.setLoadMore(false);
}
@Override
public void onError(Throwable throwable) {
ToastUtil.showShort(mContext, "error : " + throwable.getMessage());
}
@Override
public void onNext(List<Shot> shots) {
mAdapter.addList(shots);
}
});
}
}