package com.gzsll.hupu.ui.content; import android.app.Fragment; import android.app.FragmentManager; import android.content.Context; import android.content.Intent; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; 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.injector.HasComponent; import com.gzsll.hupu.ui.BaseSwipeBackActivity; import com.gzsll.hupu.ui.login.LoginActivity; import com.gzsll.hupu.ui.post.PostActivity; import com.gzsll.hupu.ui.report.ReportActivity; import com.gzsll.hupu.util.DisplayUtil; import com.gzsll.hupu.util.ResourceUtil; import com.gzsll.hupu.widget.PagePicker; import com.gzsll.hupu.widget.ProgressBarCircularIndeterminate; import com.gzsll.hupu.widget.VerticalViewPager; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; /** * Created by sll on 2016/3/9. */ public class ContentActivity extends BaseSwipeBackActivity implements ContentContract.View, PagePicker.OnJumpListener, ViewPager.OnPageChangeListener, HasComponent<ContentComponent> { @BindView(R.id.viewPager) VerticalViewPager viewPager; @BindView(R.id.tvLoading) TextView tvLoading; @BindView(R.id.progress_container) LinearLayout progressContainer; @BindView(R.id.rlProgress) RelativeLayout rlProgress; @BindView(R.id.floatingComment) FloatingActionButton floatingComment; @BindView(R.id.floatingReport) FloatingActionButton floatingReport; @BindView(R.id.floatingCollect) FloatingActionButton floatingCollect; @BindView(R.id.floatingShare) FloatingActionButton floatingShare; @BindView(R.id.floatingMenu) FloatingActionMenu floatingMenu; @BindView(R.id.tvPre) TextView tvPre; @BindView(R.id.tvPageNum) TextView tvPageNum; @BindView(R.id.tvNext) TextView tvNext; @BindView(R.id.rlPage) RelativeLayout rlPage; @BindView(R.id.rlError) RelativeLayout rlError; @BindView(R.id.tvError) TextView tvError; @BindView(R.id.frameLayout) FrameLayout frameLayout; @BindView(R.id.progress_view) ProgressBarCircularIndeterminate progressBar; public static void startActivity(Context mContext, String fid, String tid, String pid, int page) { Intent intent = new Intent(mContext, ContentActivity.class); intent.putExtra("fid", fid); intent.putExtra("tid", tid); intent.putExtra("pid", pid); intent.putExtra("page", page); mContext.startActivity(intent); } @Inject ContentPresenter mPresenter; private String fid; private String tid; private int page; private String pid; private PagePicker mPagePicker; private MyAdapter mAdapter; private ContentComponent mContentComponent; @Override public int initContentView() { return R.layout.activity_content; } @Override public void initInjector() { mContentComponent = DaggerContentComponent.builder() .applicationComponent(getApplicationComponent()) .activityModule(getActivityModule()) .contentModule(new ContentModule()) .build(); mContentComponent.inject(this); } @Override public void initUiAndListener() { ButterKnife.bind(this); mPresenter.attachView(this); fid = getIntent().getStringExtra("fid"); tid = getIntent().getStringExtra("tid"); page = getIntent().getIntExtra("page", 1); pid = getIntent().getStringExtra("pid"); initPicker(); initFloatingButton(); viewPager.setOnPageChangeListener(this); progressBar.setBackgroundColor(ResourceUtil.getThemeColor(this)); mPresenter.onThreadInfoReceive(tid, fid, pid, page); } private void initPicker() { mPagePicker = new PagePicker(this); mPagePicker.setOnJumpListener(this); } private void initFloatingButton() { ResourceUtil.setFabMenuColor(this, floatingMenu); ResourceUtil.setFabBtnColor(this, floatingComment); ResourceUtil.setFabBtnColor(this, floatingCollect); ResourceUtil.setFabBtnColor(this, floatingShare); ResourceUtil.setFabBtnColor(this, floatingReport); } @Override protected boolean isApplyStatusBarTranslucency() { return false; } @Override protected boolean isApplyStatusBarColor() { return false; } @Override public void showLoading() { rlProgress.setVisibility(View.VISIBLE); viewPager.setVisibility(View.GONE); rlError.setVisibility(View.GONE); } @Override public void hideLoading() { rlProgress.setVisibility(View.GONE); viewPager.setVisibility(View.VISIBLE); rlError.setVisibility(View.GONE); } @Override public void renderContent(int page, int totalPage) { mAdapter = new MyAdapter(getFragmentManager(), totalPage); viewPager.setAdapter(mAdapter); viewPager.setCurrentItem(page - 1); onUpdatePager(page, totalPage); } @Override public void setCurrentItem(int index) { viewPager.setCurrentItem(index); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mPresenter.updatePage(position + 1); } @Override public void onUpdatePager(int page, int totalPage) { mPagePicker.setMin(1); mPagePicker.setMax(totalPage); mPagePicker.setValue(page); tvPageNum.setText(page + "/" + totalPage); if (page == 1) { tvPre.setTextColor(getResources().getColor(R.color.base_text_gray)); tvPre.setClickable(false); } else { tvPre.setTextColor(getResources().getColor(R.color.blue)); tvPre.setClickable(true); } if (page == totalPage) { tvNext.setTextColor(getResources().getColor(R.color.base_text_gray)); tvNext.setClickable(false); } else { tvNext.setTextColor(getResources().getColor(R.color.blue)); tvNext.setClickable(true); } } @Override public void onPageScrollStateChanged(int state) { } @Override public ContentComponent getComponent() { return mContentComponent; } public class MyAdapter extends FragmentPagerAdapter { private int totalPage; public MyAdapter(FragmentManager fm, int totalPage) { super(fm); this.totalPage = totalPage; notifyDataSetChanged(); } @Override public Fragment getItem(int position) { return ContentFragment.newInstance(fid, tid, pid, position + 1); } @Override public int getCount() { return totalPage; } } @Override public void isCollected(boolean isCollected) { floatingCollect.setImageResource( isCollected ? R.drawable.ic_menu_star : R.drawable.ic_menu_star_outline); floatingCollect.setLabelText(isCollected ? "取消收藏" : "收藏"); } @Override public void onError(String error) { tvError.setText(error); rlProgress.setVisibility(View.GONE); viewPager.setVisibility(View.GONE); rlError.setVisibility(View.VISIBLE); } @Override public void onToggleFloatingMenu() { floatingMenu.toggle(true); } @Override public void showLoginUi() { LoginActivity.startActivity(this); } @Override public void showReportUi() { ReportActivity.startActivity(this, tid, ""); } @Override public void showPostUi(String title) { PostActivity.startActivity(this, Constants.TYPE_COMMENT, fid, tid, "", title); } @Override public void OnJump(int page) { mPresenter.onPageSelected(page); } @OnClick(R.id.floatingComment) void setFloatingCommentClick() { mPresenter.onCommendClick(); } @OnClick(R.id.floatingShare) void floatingShare() { mPresenter.onShareClick(); } @OnClick(R.id.floatingReport) void floatingReport() { mPresenter.onReportClick(); } @OnClick(R.id.floatingCollect) void floatingCollect() { mPresenter.onCollectClick(); } @OnClick(R.id.tvPre) void tvPre() { mPresenter.onPagePre(); } @OnClick(R.id.tvNext) void tvNext() { mPresenter.onPageNext(); } @OnClick(R.id.tvPageNum) void tvPageNum() { if (mPagePicker.isShowing()) { mPagePicker.dismiss(); } else { mPagePicker.showAtLocation(frameLayout, Gravity.BOTTOM, 0, DisplayUtil.dip2px(this, 40)); } } @OnClick(R.id.btnReload) void btnReload() { mPresenter.onReload(); } @Override protected void onDestroy() { super.onDestroy(); mPresenter.detachView(); } public void setFloatingMenuVisibility(boolean show) { if (show) { floatingMenu.showMenu(true); } else { floatingMenu.hideMenu(true); } } }