/**
* Copyright 2016 JustWayward Team
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.justwayward.reader.ui.activity;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.justwayward.reader.R;
import com.justwayward.reader.base.BaseRVActivity;
import com.justwayward.reader.base.Constant;
import com.justwayward.reader.bean.BookListDetail;
import com.justwayward.reader.bean.BookLists;
import com.justwayward.reader.component.AppComponent;
import com.justwayward.reader.component.DaggerFindComponent;
import com.justwayward.reader.manager.CacheManager;
import com.justwayward.reader.ui.contract.SubjectBookListDetailContract;
import com.justwayward.reader.ui.easyadapter.SubjectBookListDetailBooksAdapter;
import com.justwayward.reader.ui.presenter.SubjectBookListDetailPresenter;
import com.justwayward.reader.view.recyclerview.adapter.RecyclerArrayAdapter;
import com.yuyh.easyadapter.glide.GlideCircleTransform;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* 书单详情
*/
public class SubjectBookListDetailActivity extends BaseRVActivity<BookListDetail.BookListBean.BooksBean> implements SubjectBookListDetailContract.View {
private HeaderViewHolder headerViewHolder;
static class HeaderViewHolder {
@Bind(R.id.tvBookListTitle)
TextView tvBookListTitle;
@Bind(R.id.tvBookListDesc)
TextView tvBookListDesc;
@Bind(R.id.ivAuthorAvatar)
ImageView ivAuthorAvatar;
@Bind(R.id.tvBookListAuthor)
TextView tvBookListAuthor;
@Bind(R.id.btnShare)
TextView btnShare;
public HeaderViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
private List<BookListDetail.BookListBean.BooksBean> mAllBooks = new ArrayList<>();
private int start = 0;
private int limit = 20;
@Inject
SubjectBookListDetailPresenter mPresenter;
public static final String INTENT_BEAN = "bookListsBean";
private BookLists.BookListsBean bookListsBean;
public static void startActivity(Context context, BookLists.BookListsBean bookListsBean) {
context.startActivity(new Intent(context, SubjectBookListDetailActivity.class)
.putExtra(INTENT_BEAN, bookListsBean));
}
@Override
public int getLayoutId() {
return R.layout.activity_subject_book_list_detail;
}
@Override
protected void setupActivityComponent(AppComponent appComponent) {
DaggerFindComponent.builder()
.appComponent(appComponent)
.build()
.inject(this);
}
@Override
public void initToolBar() {
mCommonToolbar.setTitle(R.string.subject_book_list_detail);
mCommonToolbar.setNavigationIcon(R.drawable.ab_back);
}
@Override
public void initDatas() {
bookListsBean = (BookLists.BookListsBean) getIntent().getSerializableExtra(INTENT_BEAN);
}
@Override
public void configViews() {
initAdapter(SubjectBookListDetailBooksAdapter.class, false, true);
mRecyclerView.removeAllItemDecoration();
mAdapter.addHeader(new RecyclerArrayAdapter.ItemView() {
@Override
public View onCreateView(ViewGroup parent) {
View headerView = LayoutInflater.from(mContext).inflate(R.layout.header_view_book_list_detail, parent, false);
return headerView;
}
@Override
public void onBindView(View headerView) {
headerViewHolder = new HeaderViewHolder(headerView);
}
});
mPresenter.attachView(this);
mPresenter.getBookListDetail(bookListsBean._id);
}
@Override
public void showBookListDetail(BookListDetail data) {
headerViewHolder.tvBookListTitle.setText(data.getBookList().getTitle());
headerViewHolder.tvBookListDesc.setText(data.getBookList().getDesc());
headerViewHolder.tvBookListAuthor.setText(data.getBookList().getAuthor().getNickname());
Glide.with(mContext)
.load(Constant.IMG_BASE_URL + data.getBookList().getAuthor().getAvatar())
.placeholder(R.drawable.avatar_default)
.transform(new GlideCircleTransform(mContext))
.into(headerViewHolder.ivAuthorAvatar);
List<BookListDetail.BookListBean.BooksBean> list = data.getBookList().getBooks();
mAllBooks.clear();
mAllBooks.addAll(list);
mAdapter.clear();
loadNextPage();
}
private void loadNextPage() {
if (start < mAllBooks.size()) {
if (mAllBooks.size() - start > limit) {
mAdapter.addAll(mAllBooks.subList(start, start + limit));
} else {
mAdapter.addAll(mAllBooks.subList(start, mAllBooks.size()));
}
start += limit;
} else {
mAdapter.addAll(new ArrayList<BookListDetail.BookListBean.BooksBean>());
}
}
@Override
public void showError() {
}
@Override
public void complete() {
}
@Override
public void onItemClick(int position) {
BookDetailActivity.startActivity(this, mAdapter.getItem(position).getBook().get_id());
}
@Override
public void onRefresh() {
mPresenter.getBookListDetail(bookListsBean._id);
}
@Override
public void onLoadMore() {
mRecyclerView.postDelayed(new Runnable() {
@Override
public void run() {
loadNextPage();
}
}, 500);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_subject_detail, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.menu_collect) {
CacheManager.getInstance().addCollection(bookListsBean);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
ButterKnife.unbind(headerViewHolder);
if (mPresenter != null) {
mPresenter.detachView();
}
}
}