package com.dl7.mvp.module.news.special;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewStub;
import android.widget.ImageView;
import android.widget.TextView;
import com.dl7.mvp.R;
import com.dl7.mvp.adapter.item.SpecialItem;
import com.dl7.mvp.api.bean.SpecialInfo;
import com.dl7.mvp.injector.components.DaggerSpecialComponent;
import com.dl7.mvp.injector.modules.SpecialModule;
import com.dl7.mvp.module.base.BaseSwipeBackActivity;
import com.dl7.mvp.module.base.IBasePresenter;
import com.dl7.mvp.utils.DefIconFactory;
import com.dl7.mvp.utils.ImageLoader;
import com.dl7.recycler.adapter.BaseQuickAdapter;
import com.dl7.recycler.helper.RecyclerViewHelper;
import com.dl7.tag.TagLayout;
import com.dl7.tag.TagView;
import com.dl7.tag.TagView.OnTagClickListener;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.OnClick;
import jp.wasabeef.recyclerview.adapters.AlphaInAnimationAdapter;
import jp.wasabeef.recyclerview.adapters.ScaleInAnimationAdapter;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
public class SpecialActivity extends BaseSwipeBackActivity<IBasePresenter> implements ISpecialView {
private static final String SPECIAL_KEY = "SpecialKey";
@BindView(R.id.toolbar)
Toolbar mToolbar;
@BindView(R.id.rv_news_list)
RecyclerView mRvNewsList;
@BindView(R.id.fab_coping)
FloatingActionButton mFabCoping;
@Inject
BaseQuickAdapter mSpecialAdapter;
private TagLayout mTagLayout;
private String mSpecialId;
private final int[] mSkipId = new int[20];
private LinearLayoutManager mLayoutManager;
public static void launch(Context context, String newsId) {
Intent intent = new Intent(context, SpecialActivity.class);
intent.putExtra(SPECIAL_KEY, newsId);
context.startActivity(intent);
((Activity) context).overridePendingTransition(R.anim.slide_right_entry, R.anim.hold);
}
@Override
protected int attachLayoutRes() {
return R.layout.activity_special;
}
@Override
protected void initInjector() {
mSpecialId = getIntent().getStringExtra(SPECIAL_KEY);
DaggerSpecialComponent.builder()
.specialModule(new SpecialModule(this, mSpecialId))
.build()
.inject(this);
}
@Override
protected void initViews() {
initToolBar(mToolbar, true, "");
ScaleInAnimationAdapter animAdapter = new ScaleInAnimationAdapter(mSpecialAdapter);
RecyclerViewHelper.initRecyclerViewV(this, mRvNewsList, true, new AlphaInAnimationAdapter(animAdapter));
mLayoutManager = (LinearLayoutManager) mRvNewsList.getLayoutManager();
}
@Override
protected void updateViews(boolean isRefresh) {
mPresenter.getData(isRefresh);
}
@Override
public void loadData(List<SpecialItem> specialItems) {
mSpecialAdapter.updateItems(specialItems);
_handleTagLayout(specialItems);
}
@Override
public void loadBanner(SpecialInfo specialBean) {
View headView = LayoutInflater.from(this).inflate(R.layout.head_special, null);
ImageView mIvBanner = (ImageView) headView.findViewById(R.id.iv_banner);
// 加载图片
ImageLoader.loadFitCenter(this, specialBean.getBanner(), mIvBanner, DefIconFactory.provideIcon());
// 添加导语
if (!TextUtils.isEmpty(specialBean.getDigest())) {
ViewStub stub = (ViewStub) headView.findViewById(R.id.vs_digest);
assert stub != null;
stub.inflate();
TextView tvDigest = (TextView) headView.findViewById(R.id.tv_digest);
tvDigest.setText(specialBean.getDigest());
}
mTagLayout = (TagLayout) headView.findViewById(R.id.tag_layout);
mSpecialAdapter.addHeaderView(headView);
}
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.hold, R.anim.slide_right_exit);
}
/**
* 处理导航标签
*
* @param specialItems
*/
private void _handleTagLayout(List<SpecialItem> specialItems) {
Observable.from(specialItems)
.compose(this.<SpecialItem>bindToLifecycle())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.filter(new Func1<SpecialItem, Boolean>() {
int i = 0;
int index = mSpecialAdapter.getHeaderViewsCount(); // 存在一个 HeadView 所以从1算起
@Override
public Boolean call(SpecialItem specialItem) {
if (specialItem.isHeader) {
// 记录头部的列表索引值,用来跳转
mSkipId[i++] = index;
}
index++;
return specialItem.isHeader;
}
})
.map(new Func1<SpecialItem, String>() {
@Override
public String call(SpecialItem specialItem) {
return _clipHeadStr(specialItem.header);
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
mTagLayout.addTag(s);
}
});
mTagLayout.setTagClickListener(new OnTagClickListener() {
@Override
public void onTagClick(int position, String text, @TagView.TagMode int tagMode) {
// 跳转到对应position,比scrollToPosition()精确
mLayoutManager.scrollToPositionWithOffset(mSkipId[position], 0);
}
});
}
private String _clipHeadStr(String headStr) {
String head = null;
int index = headStr.indexOf(" ");
if (index != -1) {
head = headStr.substring(index, headStr.length());
}
return head;
}
@OnClick(R.id.fab_coping)
public void onClick() {
mLayoutManager.scrollToPosition(0);
}
}