package com.dl7.mvp.module.manage.download;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.dl7.mvp.R;
import com.dl7.mvp.adapter.ViewPagerAdapter;
import com.dl7.mvp.injector.components.DaggerDownloadComponent;
import com.dl7.mvp.injector.modules.DownloadModule;
import com.dl7.mvp.module.base.BaseActivity;
import com.dl7.mvp.module.base.BaseVideoDLFragment;
import com.dl7.mvp.module.base.IRxBusPresenter;
import com.dl7.mvp.module.manage.download.cache.VideoCacheFragment;
import com.dl7.mvp.module.manage.download.complete.VideoCompleteFragment;
import com.dl7.mvp.rxbus.event.VideoEvent;
import com.dl7.mvp.widget.FlexibleViewPager;
import com.flyco.tablayout.SlidingTabLayout;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.OnClick;
import rx.functions.Action1;
import static com.dl7.mvp.utils.CommonConstant.INDEX_KEY;
/**
* 下载管理界面,仿Bilibili
*/
public class DownloadActivity extends BaseActivity<IRxBusPresenter> {
@BindView(R.id.tool_bar)
Toolbar mToolBar;
@BindView(R.id.tab_layout)
SlidingTabLayout mTabLayout;
@BindView(R.id.view_pager)
FlexibleViewPager mViewPager;
@BindView(R.id.btn_select_all)
TextView mBtnSelectAll;
@BindView(R.id.btn_select_del)
TextView mBtnSelectDel;
@BindView(R.id.fl_del_layout)
FrameLayout mFlDelLayout;
@BindView(R.id.tv_close_edit)
TextView mTvCloseEdit;
@Inject
ViewPagerAdapter mPagerAdapter;
private BaseVideoDLFragment mCompleteFragment;
private BaseVideoDLFragment mCacheFragment;
private int mIndex;
public static void launch(Context context, int index) {
Intent intent = new Intent(context, DownloadActivity.class);
intent.putExtra(INDEX_KEY, index);
context.startActivity(intent);
((Activity)context).overridePendingTransition(R.anim.zoom_in_entry, R.anim.hold);
}
@Override
protected int attachLayoutRes() {
return R.layout.activity_download;
}
@Override
protected void initInjector() {
DaggerDownloadComponent.builder()
.applicationComponent(getAppComponent())
.downloadModule(new DownloadModule(this))
.build()
.inject(this);
}
@Override
protected void initViews() {
mIndex = getIntent().getIntExtra(INDEX_KEY, 0);
initToolBar(mToolBar, true, "下载管理");
mViewPager.setAdapter(mPagerAdapter);
mPresenter.registerRxBus(VideoEvent.class, new Action1<VideoEvent>() {
@Override
public void call(VideoEvent videoEvent) {
if (videoEvent.checkStatus != VideoEvent.CHECK_INVALID) {
_handleVideoEvent(videoEvent);
}
}
});
}
@Override
protected void updateViews(boolean isRefresh) {
List<Fragment> fragments = new ArrayList<>();
List<String> titles = new ArrayList<>();
mCompleteFragment = new VideoCompleteFragment();
mCacheFragment = new VideoCacheFragment();
fragments.add(mCompleteFragment);
fragments.add(mCacheFragment);
titles.add("已缓存");
titles.add("缓存中");
mPagerAdapter.setItems(fragments, titles);
mTabLayout.setViewPager(mViewPager);
mViewPager.setCurrentItem(mIndex);
}
@Override
protected void onDestroy() {
super.onDestroy();
mPresenter.unregisterRxBus();
}
@Override
public void onBackPressed() {
if (mCompleteFragment.exitEditMode() || mCacheFragment.exitEditMode()) {
enableEditMode(false);
return;
}
super.onBackPressed();
}
/**
* 使能编辑状态
*
* @param isEnable
*/
public void enableEditMode(boolean isEnable) {
mViewPager.setCanScroll(!isEnable);
mFlDelLayout.setVisibility(isEnable ? View.VISIBLE : View.GONE);
mTvCloseEdit.setVisibility(isEnable ? View.VISIBLE : View.GONE);
_setTabLayoutCanClick(!isEnable);
}
/**
* 处理 VideoEvent,来改变编辑状态UI
*
* @param videoEvent
*/
private void _handleVideoEvent(VideoEvent videoEvent) {
mBtnSelectDel.setEnabled(videoEvent.checkStatus != VideoEvent.CHECK_NONE);
mBtnSelectAll.setText(videoEvent.checkStatus == VideoEvent.CHECK_ALL ? "取消全选" : "全选");
mBtnSelectAll.setSelected(videoEvent.checkStatus == VideoEvent.CHECK_ALL);
}
/**
* 控制 TabLayout 点击使能
* @param canClick
*/
private void _setTabLayoutCanClick(boolean canClick){
LinearLayout tabStrip= (LinearLayout) mTabLayout.getChildAt(0);
for (int i = 0; i < tabStrip.getChildCount(); i++) {
View tabView = tabStrip.getChildAt(i);
if(tabView !=null){
tabView.setClickable(canClick);
}
}
}
@OnClick({R.id.btn_select_all, R.id.btn_select_del, R.id.tv_close_edit})
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_select_all:
if (mCompleteFragment.isEditMode()) {
mCompleteFragment.checkAllOrNone(!mBtnSelectAll.isSelected());
}
if (mCacheFragment.isEditMode()) {
mCacheFragment.checkAllOrNone(!mBtnSelectAll.isSelected());
}
break;
case R.id.btn_select_del:
if (mCompleteFragment.isEditMode()) {
mCompleteFragment.deleteChecked();
}
if (mCacheFragment.isEditMode()) {
mCacheFragment.deleteChecked();
}
break;
case R.id.tv_close_edit:
if (mCompleteFragment.exitEditMode() || mCacheFragment.exitEditMode()) {
enableEditMode(false);
}
break;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home && mCompleteFragment.exitEditMode() || mCacheFragment.exitEditMode()) {
enableEditMode(false);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.hold, R.anim.zoom_in_exit);
}
}