package com.gzsll.hupu.ui.thread.list;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.common.ResizeOptions;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.github.clans.fab.FloatingActionButton;
import com.github.clans.fab.FloatingActionMenu;
import com.gzsll.hupu.Constants;
import com.gzsll.hupu.R;
import com.gzsll.hupu.db.Forum;
import com.gzsll.hupu.db.Thread;
import com.gzsll.hupu.ui.BaseFragment;
import com.gzsll.hupu.ui.login.LoginActivity;
import com.gzsll.hupu.ui.post.PostActivity;
import com.gzsll.hupu.ui.thread.ThreadListAdapter;
import com.gzsll.hupu.util.ResourceUtil;
import com.gzsll.hupu.util.SettingPrefUtil;
import com.gzsll.hupu.widget.LoadMoreRecyclerView;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* Created by sll on 2016/3/9.
*/
public class ThreadListFragment extends BaseFragment
implements ThreadListContract.View, SwipeRefreshLayout.OnRefreshListener,
AppBarLayout.OnOffsetChangedListener, LoadMoreRecyclerView.LoadMoreListener {
@Inject
ThreadListPresenter mPresenter;
@Inject
ThreadListAdapter mAdapter;
@Inject
Activity mActivity;
@BindView(R.id.backdrop)
SimpleDraweeView backdrop;
@BindView(R.id.tvSubTitle)
TextView tvSubTitle;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.collapsing_toolbar)
CollapsingToolbarLayout collapsingToolbar;
@BindView(R.id.appbar)
AppBarLayout appbar;
@BindView(R.id.recyclerView)
LoadMoreRecyclerView recyclerView;
@BindView(R.id.refreshLayout)
SwipeRefreshLayout refreshLayout;
@BindView(R.id.floatingAttention)
FloatingActionButton floatingAttention;
@BindView(R.id.floatingPost)
FloatingActionButton floatingPost;
@BindView(R.id.floatingSwitch)
FloatingActionButton floatingSwitch;
@BindView(R.id.floatingRefresh)
FloatingActionButton floatingRefresh;
@BindView(R.id.floatingMenu)
FloatingActionMenu floatingMenu;
@BindView(R.id.frameLayout)
FrameLayout frameLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void initInjector() {
getComponent(ThreadListComponent.class).inject(this);
}
@Override
public int initContentView() {
return R.layout.fragment_thread;
}
@Override
public void getBundle(Bundle bundle) {
}
@Override
public void initUI(View view) {
ButterKnife.bind(this, view);
mPresenter.attachView(this);
((ThreadListActivity) mActivity).initToolBar(toolbar);
initFloatingButton();
attachPostButtonToRecycle();
refreshLayout.setOnRefreshListener(this);
appbar.addOnOffsetChangedListener(this);
LinearLayoutManager layoutManager = new LinearLayoutManager(mActivity.getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(mAdapter);
recyclerView.setLoadMoreListener(this);
}
private void initFloatingButton() {
ResourceUtil.setFabBtnColor(mActivity, floatingPost);
ResourceUtil.setFabBtnColor(mActivity, floatingSwitch);
ResourceUtil.setFabBtnColor(mActivity, floatingRefresh);
ResourceUtil.setFabBtnColor(mActivity, floatingAttention);
ResourceUtil.setFabMenuColor(mActivity, floatingMenu);
if (SettingPrefUtil.getThreadSort(mActivity).equals(Constants.THREAD_TYPE_HOT)) {
floatingSwitch.setLabelText("按发帖时间排序");
} else {
floatingSwitch.setLabelText("按回帖时间排序");
}
}
private void attachPostButtonToRecycle() {
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (Math.abs(dy) > 4) {
if (dy > 0) {
floatingMenu.hideMenuButton(true);
} else {
floatingMenu.showMenuButton(true);
}
}
}
});
}
@Override
public void initData() {
mPresenter.onThreadReceive(SettingPrefUtil.getThreadSort(mActivity));
}
@Override
public void showLoading() {
refreshLayout.postDelayed(new Runnable() {
@Override
public void run() {
refreshLayout.setRefreshing(true);
}
}, 5);
}
@Override
public void showProgress() {
showProgress(true);
}
@Override
public void showContent() {
showContent(true);
}
@Override
public void renderThreadInfo(Forum forum) {
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(forum.getBackImg()))
.setResizeOptions(new ResizeOptions(500, 500))
.build();
DraweeController draweeController = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(backdrop.getController())
.setAutoPlayAnimations(true)
.build();
backdrop.setController(draweeController);
collapsingToolbar.setTitle(forum.getName());
tvSubTitle.setText(forum.getDescription());
}
@Override
public void renderThreads(List<Thread> threads) {
mAdapter.bind(threads);
recyclerView.getAdapter().notifyDataSetChanged();
}
@Override
public void onLoadCompleted(boolean hasMore) {
recyclerView.onLoadCompleted(hasMore);
}
@Override
public void onRefreshCompleted() {
refreshLayout.setRefreshing(false);
}
@Override
public void attendStatus(boolean isAttention) {
if (!isAttention) {
floatingAttention.setImageResource(R.drawable.ic_menu_add);
floatingAttention.setLabelText("添加关注");
} else {
floatingAttention.setImageResource(R.drawable.ic_minus);
floatingAttention.setLabelText("取消关注");
}
}
@Override
public void onError(String error) {
setErrorText(error);
showError(true);
}
@Override
public void onEmpty() {
setEmptyText("暂无帖子");
showEmpty(true);
}
@Override
public void onScrollToTop() {
recyclerView.smoothScrollToPosition(0);
}
@Override
public void onFloatingVisibility(int visibility) {
floatingMenu.setVisibility(visibility);
}
@Override
public void showPostThreadUi(String fid) {
PostActivity.startActivity(mActivity, Constants.TYPE_POST, fid, "", "", "");
}
@Override
public void showLoginUi() {
LoginActivity.startActivity(mActivity);
}
@Override
public void showToast(String msg) {
Snackbar.make(getView(), msg, Snackbar.LENGTH_SHORT).show();
}
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (verticalOffset == 0 || verticalOffset == -appBarLayout.getTotalScrollRange()) {
refreshLayout.setEnabled(true);
} else {
refreshLayout.setEnabled(false);
}
}
@Override
public void onRefresh() {
mPresenter.onRefresh();
}
@Override
public void onReloadClicked() {
mPresenter.onReload();
}
@OnClick(R.id.floatingAttention)
void floatingAttention() {
mPresenter.onAttentionClick();
floatingMenu.toggle(true);
}
@OnClick(R.id.floatingPost)
void floatingPost() {
mPresenter.onPostClick();
floatingMenu.toggle(true);
}
@OnClick(R.id.floatingRefresh)
void floatingRefresh() {
mPresenter.onRefresh();
floatingMenu.toggle(true);
}
@OnClick(R.id.floatingSwitch)
void floatingSwitch() {
if (floatingSwitch.getLabelText().equals("按回帖时间排序")) {
mPresenter.onThreadReceive(Constants.THREAD_TYPE_HOT);
floatingSwitch.setLabelText("按发帖时间排序");
} else {
mPresenter.onThreadReceive(Constants.THREAD_TYPE_NEW);
floatingSwitch.setLabelText("按回帖时间排序");
}
floatingMenu.toggleMenuButton(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_thread, menu);
MenuItem menuItem = menu.findItem(R.id.action_search);//在菜单中找到对应控件的item
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
mPresenter.onStartSearch(query, 1);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
MenuItemCompat.setOnActionExpandListener(menuItem,
new MenuItemCompat.OnActionExpandListener() {//设置打开关闭动作监听
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
mPresenter.onThreadReceive(SettingPrefUtil.getThreadSort(mActivity));
return true;
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
mPresenter.detachView();
}
@Override
public void onLoadMore() {
mPresenter.onLoadMore();
}
}