You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
reader/app/src/main/java/com/novel/read/activity/NovelReadActivity.java

813 lines
29 KiB

package com.novel.read.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import androidx.core.view.GravityCompat;
import androidx.core.widget.ContentLoadingProgressBar;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.common_lib.base.utils.ToastUtils;
import com.google.android.material.appbar.AppBarLayout;
import com.mango.mangolib.event.EventManager;
import com.novel.read.BuildConfig;
import com.novel.read.R;
import com.novel.read.adapter.CategoryAdapter;
import com.novel.read.adapter.MarkAdapter;
import com.novel.read.base.MyApp;
import com.novel.read.base.NovelBaseActivity;
import com.novel.read.constants.Constant;
import com.novel.read.event.AddBookSignEvent;
import com.novel.read.event.BookArticleEvent;
import com.novel.read.event.DeleteBookSignEvent;
import com.novel.read.event.ErrorChapterEvent;
import com.novel.read.event.FinishChapterEvent;
import com.novel.read.event.GetBookSignEvent;
import com.novel.read.event.RxBus;
import com.novel.read.event.SetAdsBgEvent;
import com.novel.read.http.AccountManager;
import com.novel.read.model.db.BookChapterBean;
import com.novel.read.model.db.CollBookBean;
import com.novel.read.model.db.DownloadTaskBean;
import com.novel.read.model.db.dbManage.BookRepository;
import com.novel.read.model.protocol.MarkResp;
import com.novel.read.service.DownloadMessage;
import com.novel.read.service.DownloadService;
import com.novel.read.utlis.BrightnessUtils;
import com.novel.read.utlis.ScreenUtils;
import com.novel.read.utlis.SpUtil;
import com.novel.read.utlis.SystemBarUtils;
import com.novel.read.widget.dialog.ReadSettingDialog;
import com.novel.read.widget.page.PageLoader;
import com.novel.read.widget.page.PageView;
import com.novel.read.widget.page.ReadSettingManager;
import com.novel.read.widget.page.TxtChapter;
import com.squareup.otto.Subscribe;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import butterknife.BindView;
import static android.view.View.GONE;
import static android.view.View.LAYER_TYPE_SOFTWARE;
import static android.view.View.VISIBLE;
import static com.novel.read.constants.Constant.ResultCode.RESULT_IS_COLLECTED;
public class NovelReadActivity extends NovelBaseActivity implements DownloadService.OnDownloadListener {
@BindView(R.id.read_pv_page)
PageView mPvPage;
@BindView(R.id.read_abl_top_menu)
AppBarLayout mAblTopMenu;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.read_ll_bottom_menu)
LinearLayoutCompat mLlBottomMenu;
@BindView(R.id.read_dl_slide)
DrawerLayout mDlSlide;
@BindView(R.id.read_tv_category)
TextView mTvCategory;
@BindView(R.id.tv_light)
TextView mTvLight;
@BindView(R.id.read_setting_sb_brightness)
SeekBar mSbBrightness;
@BindView(R.id.tvBookReadMode)
TextView mTvNightMode;
@BindView(R.id.ll_light)
LinearLayoutCompat mLLight;
@BindView(R.id.tv_cache)
TextView mTvCache;
@BindView(R.id.tv_setting)
TextView mTvSetting;
@BindView(R.id.rlv_list)
ListView mLvCategory;
@BindView(R.id.tv_book_name)
TextView mTvBookName;
@BindView(R.id.read_tv_brief)
TextView mTvBrief;
@BindView(R.id.read_tv_community)
TextView mTvMark;
@BindView(R.id.rlReadMark)
ConstraintLayout rlReadMark;
@BindView(R.id.tvAddMark)
TextView mTvAddMark;
@BindView(R.id.tvClear)
TextView mTvClear;
@BindView(R.id.rlv_mark)
RecyclerView mRlvMark;
@BindView(R.id.ll_download)
LinearLayoutCompat mLlDownLoad;
@BindView(R.id.pb_loading)
ContentLoadingProgressBar loadingProgressBar;
@BindView(R.id.tv_progress)
TextView mTvProgress;
@BindView(R.id.cl_layout)
ConstraintLayout mClLayout;
@BindView(R.id.iv_guide)
ImageView mIvGuide;
private CategoryAdapter mCategoryAdapter;
private List<TxtChapter> mChapters = new ArrayList<>();
private TxtChapter mCurrentChapter; //当前章节
private int currentChapter = 0;
private MarkAdapter mMarkAdapter;
private List<MarkResp.SignBean> mMarks = new ArrayList<>();
private PageLoader mPageLoader;
private Animation mTopInAnim;
private Animation mTopOutAnim;
private Animation mBottomInAnim;
private Animation mBottomOutAnim;
private ReadSettingDialog mSettingDialog;
private boolean isCollected = false; // isFromSDCard
private boolean isNightMode = false;
private boolean isFullScreen = false;
private boolean isRegistered = false;
private CollBookBean mCollBook;
private String mBookId;
private static final String TAG = "NovelReadActivity";
public static final String EXTRA_COLL_BOOK = "extra_coll_book";
public static final String EXTRA_IS_COLLECTED = "extra_is_collected";
private static final int WHAT_CATEGORY = 1;
private static final int WHAT_CHAPTER = 2;
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case WHAT_CATEGORY:
mLvCategory.setSelection(mPageLoader.getChapterPos());
break;
case WHAT_CHAPTER:
mPageLoader.openChapter();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected int getLayoutId() {
return R.layout.activity_read;
}
@Override
protected void initView() {
EventManager.Companion.getInstance().registerSubscriber(this);
mCollBook = (CollBookBean) getIntent().getSerializableExtra(EXTRA_COLL_BOOK);
isCollected = getIntent().getBooleanExtra(EXTRA_IS_COLLECTED, false);
mBookId = mCollBook.getId();
initService();
// 如果 API < 18 取消硬件加速
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
mPvPage.setLayerType(LAYER_TYPE_SOFTWARE, null);
}
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//获取页面加载器
mPageLoader = mPvPage.getPageLoader(mCollBook);
mSettingDialog = new ReadSettingDialog(this, mPageLoader);
//禁止滑动展示DrawerLayout
mDlSlide.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
//侧边打开后,返回键能够起作用
mDlSlide.setFocusableInTouchMode(false);
//半透明化StatusBar
SystemBarUtils.transparentStatusBar(this);
//隐藏StatusBar
mPvPage.post(
this::hideSystemBar
);
mAblTopMenu.setPadding(0, ScreenUtils.getStatusBarHeight(), 0, 0);
mLlDownLoad.setPadding(0, ScreenUtils.getStatusBarHeight(), 0, ScreenUtils.dpToPx(15));
WindowManager.LayoutParams lp = getWindow().getAttributes();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
lp.layoutInDisplayCutoutMode = 1;
}
getWindow().setAttributes(lp);
//设置当前Activity的Brightness
if (ReadSettingManager.getInstance().isBrightnessAuto()) {
BrightnessUtils.setDefaultBrightness(this);
} else {
BrightnessUtils.setBrightness(this, ReadSettingManager.getInstance().getBrightness());
}
//注册广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
intentFilter.addAction(Intent.ACTION_TIME_TICK);
registerReceiver(mReceiver, intentFilter);
if (!SpUtil.getBooleanValue(Constant.BookGuide,false)){
mIvGuide.setVisibility(VISIBLE);
toggleMenu(false);
}
Log.e(TAG, "mBookId: " + mBookId);
if (isCollected) {
mPageLoader.getCollBook().setBookChapters(BookRepository.getInstance().getBookChaptersInRx(mBookId));
// 刷新章节列表
mPageLoader.refreshChapterList();
// 如果是网络小说并被标记更新的,则从网络下载目录
if (mCollBook.isUpdate() && !mCollBook.isLocal()) {
AccountManager.getInstance().getBookArticle(mBookId, "2", "1", "10000");
}
} else {
AccountManager.getInstance().getBookArticle(mBookId, "2", "1", "10000");
}
setAdsBg(new SetAdsBgEvent());
}
@Override
protected void initData() {
mTvBookName.setText(mCollBook.getTitle());
mCategoryAdapter = new CategoryAdapter();
mLvCategory.setAdapter(mCategoryAdapter);
mLvCategory.setFastScrollEnabled(true);
mRlvMark.setLayoutManager(new LinearLayoutManager(this));
mMarkAdapter = new MarkAdapter(mMarks);
mRlvMark.setAdapter(mMarkAdapter);
isNightMode = ReadSettingManager.getInstance().isNightMode();
//夜间模式按钮的状态
toggleNightMode();
isFullScreen = ReadSettingManager.getInstance().isFullScreen();
toolbar.setNavigationOnClickListener(view -> finish());
mSbBrightness.setProgress(ReadSettingManager.getInstance().getBrightness());
mPageLoader.setOnPageChangeListener(
new PageLoader.OnPageChangeListener() {
@Override
public void onChapterChange(int pos) {
mCategoryAdapter.setChapter(pos);
mCurrentChapter = mChapters.get(pos);
currentChapter = pos;
}
@Override
public void requestChapters(List<TxtChapter> requestChapters) {
AccountManager.getInstance().getBookArticleDetail(mBookId, requestChapters);
mHandler.sendEmptyMessage(WHAT_CATEGORY);
}
@Override
public void onCategoryFinish(List<TxtChapter> chapters) {
mChapters.clear();
mChapters.addAll(chapters);
mCategoryAdapter.refreshItems(mChapters);
}
@Override
public void onPageCountChange(int count) {
}
@Override
public void onPageChange(int pos) {
}
}
);
mPvPage.setTouchListener(new PageView.TouchListener() {
@Override
public boolean onTouch() {
return !hideReadMenu();
}
@Override
public void center() {
toggleMenu(true);
}
@Override
public void prePage() {
}
@Override
public void nextPage() {
}
@Override
public void cancel() {
}
});
mTvCategory.setOnClickListener(
(v) -> {
//移动到指定位置
if (mCategoryAdapter.getCount() > 0) {
mLvCategory.setSelection(mPageLoader.getChapterPos());
}
//切换菜单
toggleMenu(true);
//打开侧滑动栏
mDlSlide.openDrawer(GravityCompat.START);
}
);
mTvLight.setOnClickListener(view -> {
mLLight.setVisibility(GONE);
rlReadMark.setVisibility(GONE);
if (isVisible(mLLight)) {
mLLight.setVisibility(GONE);
} else {
mLLight.setVisibility(VISIBLE);
}
});
mTvSetting.setOnClickListener(view -> {
mLLight.setVisibility(GONE);
rlReadMark.setVisibility(GONE);
toggleMenu(false);
mSettingDialog.show();
});
mSbBrightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress = seekBar.getProgress();
//设置当前 Activity 的亮度
BrightnessUtils.setBrightness(NovelReadActivity.this, progress);
//存储亮度的进度条
ReadSettingManager.getInstance().setBrightness(progress);
}
});
mTvNightMode.setOnClickListener(
(v) -> {
isNightMode = !isNightMode;
mPageLoader.setNightMode(isNightMode);
toggleNightMode();
}
);
mTvBrief.setOnClickListener(view -> {
Intent intent = new Intent(this, NovelBookDetailActivity.class);
intent.putExtra(Constant.Bundle.BookId, Integer.valueOf(mBookId));
startActivity(intent);
});
mTvMark.setOnClickListener(view -> {
if (isVisible(mLlBottomMenu)) {
if (isVisible(rlReadMark)) {
gone(rlReadMark);
} else {
gone(mLLight);
updateMark();
visible(rlReadMark);
}
}
});
mTvAddMark.setOnClickListener(view -> {
if (mCurrentChapter != null) {
mMarkAdapter.setEdit(false);
AccountManager.getInstance().addSign(mBookId, mCurrentChapter.getChapterId(), mCurrentChapter.getTitle());
}
});
mTvClear.setOnClickListener(view -> {
if (mMarkAdapter.getEdit()) {
String sign = mMarkAdapter.getSelectList();
if (!sign.equals("")) {
AccountManager.getInstance().deleteSign(sign);
}
mMarkAdapter.setEdit(false);
} else {
mMarkAdapter.setEdit(true);
}
});
mTvCache.setOnClickListener(view -> {
if (!isCollected) { //没有收藏 先收藏 然后弹框
//设置为已收藏
isCollected = true;
//设置阅读时间
mCollBook.setLastRead(String.valueOf(System.currentTimeMillis()));
BookRepository.getInstance().saveCollBookWithAsync(mCollBook);
}
showDownLoadDialog();
});
mLvCategory.setOnItemClickListener((parent, view, position, id) -> {
mDlSlide.closeDrawer(GravityCompat.START);
mPageLoader.skipToChapter(position);
});
mIvGuide.setOnClickListener(view -> {
mIvGuide.setVisibility(GONE);
SpUtil.setBooleanValue(Constant.BookGuide, true);
});
}
private void showDownLoadDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.d_cache_num))
.setItems(new String[]{getString(R.string.d_cache_last_50), getString(R.string.d_cache_last_all), getString(R.string.d_cache_all)}, (dialog, which) -> {
switch (which) {
case 0: //50章
int last = currentChapter + 50;
if (last > mCollBook.getBookChapters().size()) {
downLoadCache(mCollBook.getBookChapters(), mCollBook.getBookChapters().size());
} else {
downLoadCache(mCollBook.getBookChapters(), last);
}
break;
case 1: //后面所有
List<BookChapterBean> lastBeans = new ArrayList<>();
for (int i = currentChapter; i < mCollBook.getBookChapters().size(); i++) {
lastBeans.add(mCollBook.getBookChapters().get(i));
}
downLoadCache(lastBeans, mCollBook.getBookChapters().size() - currentChapter);
break;
case 2: //所有
downLoadCache(mCollBook.getBookChapters(), mCollBook.getBookChapters().size());
break;
default:
break;
}
toggleMenu(true);
});
builder.show();
}
private void downLoadCache(List<BookChapterBean> beans, int size) {
DownloadTaskBean task = new DownloadTaskBean();
task.setTaskName(mCollBook.getTitle());
task.setBookId(mCollBook.getId());
task.setBookChapters(beans); //计算要缓存的章节
task.setCurrentChapter(currentChapter);
task.setLastChapter(size);
RxBus.getInstance().post(task);
startService(new Intent(this, DownloadService.class));
}
private void toggleNightMode() {
if (isNightMode) {
mTvNightMode.setText(getResources().getString(R.string.book_read_mode_day));
Drawable drawable = ContextCompat.getDrawable(this, R.drawable.ic_read_menu_moring);
mTvNightMode.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
mClLayout.setBackgroundColor(getResources().getColor(R.color.nb_read_bg_night));
} else {
mTvNightMode.setText(getResources().getString(R.string.book_read_mode_day));
Drawable drawable = ContextCompat.getDrawable(this, R.drawable.ic_read_menu_night);
mTvNightMode.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
mClLayout.setBackgroundColor(getResources().getColor(ReadSettingManager.getInstance().getPageStyle().getBgColor()));
}
}
/**
* 隐藏阅读界面的菜单显示
*
* @return 是否隐藏成功
*/
private boolean hideReadMenu() {
hideSystemBar();
if (mAblTopMenu.getVisibility() == VISIBLE) {
toggleMenu(true);
return true;
} else if (mSettingDialog.isShowing()) {
mSettingDialog.dismiss();
return true;
}
return false;
}
private void showSystemBar() {
//显示
SystemBarUtils.showUnStableStatusBar(this);
if (isFullScreen) {
SystemBarUtils.showUnStableNavBar(this);
}
}
private void hideSystemBar() {
//隐藏
SystemBarUtils.hideStableStatusBar(this);
if (isFullScreen) {
SystemBarUtils.hideStableNavBar(this);
}
}
/**
* 切换菜单栏的可视状态
* 默认是隐藏的
*/
private void toggleMenu(boolean hideStatusBar) {
initMenuAnim();
gone(mLLight, rlReadMark);
if (mAblTopMenu.getVisibility() == View.VISIBLE) {
//关闭
mAblTopMenu.startAnimation(mTopOutAnim);
mLlBottomMenu.startAnimation(mBottomOutAnim);
mAblTopMenu.setVisibility(GONE);
mLlBottomMenu.setVisibility(GONE);
if (hideStatusBar) {
hideSystemBar();
}
} else {
mAblTopMenu.setVisibility(View.VISIBLE);
mLlBottomMenu.setVisibility(View.VISIBLE);
mAblTopMenu.startAnimation(mTopInAnim);
mLlBottomMenu.startAnimation(mBottomInAnim);
showSystemBar();
}
}
//初始化菜单动画
private void initMenuAnim() {
if (mTopInAnim != null) return;
mTopInAnim = AnimationUtils.loadAnimation(this, R.anim.slide_top_in);
mTopOutAnim = AnimationUtils.loadAnimation(this, R.anim.slide_top_out);
mBottomInAnim = AnimationUtils.loadAnimation(this, R.anim.slide_bottom_in);
mBottomOutAnim = AnimationUtils.loadAnimation(this, R.anim.slide_bottom_out);
//退出的速度要快
mTopOutAnim.setDuration(200);
mBottomOutAnim.setDuration(200);
}
@Subscribe
public void getBookArticle(BookArticleEvent event) {
Log.e(TAG, "getBookArticle: ");
if (event.isFail()) {
} else {
List<BookChapterBean> chapterBeans = event.getResult().getChapterBean();
mPageLoader.getCollBook().setBookChapters(chapterBeans);
mPageLoader.refreshChapterList();
// 如果是目录更新的情况,那么就需要存储更新数据
if (mCollBook.isUpdate() && isCollected) {
BookRepository.getInstance().saveBookChaptersWithAsync(event.getResult().getChapterBean(), mCollBook);
}
}
}
@Subscribe
public void finishChapter(FinishChapterEvent event) {
if (mPageLoader.getPageStatus() == PageLoader.STATUS_LOADING) {
mHandler.sendEmptyMessage(WHAT_CHAPTER);
}
// 当完成章节的时候,刷新列表
mCategoryAdapter.notifyDataSetChanged();
}
@Subscribe
public void errorChapter(ErrorChapterEvent event) {
if (mPageLoader.getPageStatus() == PageLoader.STATUS_LOADING) {
mPageLoader.chapterError();
}
}
private void updateMark() {
AccountManager.getInstance().getSignList(mBookId);
}
@Subscribe
public void addSign(AddBookSignEvent event) {
if (event.isFail()) {
ToastUtils.showNormalToast(this, "添加书签失败,请检查网络设置");
} else {
ToastUtils.showNormalToast(this, "添加书签成功");
updateMark();
}
}
@Subscribe
public void deleteSigin(DeleteBookSignEvent event) {
if (event.isFail()) {
ToastUtils.showNormalToast(this, event.getEr().getMsg());
} else {
ToastUtils.showNormalToast(this, event.getResult().getMsg());
updateMark();
}
}
@Subscribe
public void getSignList(GetBookSignEvent event) {
if (event.isFail()) {
ToastUtils.showNormalToast(this, "获取书签失败,请检查网络设置");
} else {
mMarks.clear();
mMarks.addAll(event.getResult().getSign());
mMarkAdapter.notifyDataSetChanged();
}
}
// 接收电池信息和时间更新的广播
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (Objects.requireNonNull(intent.getAction()).equals(Intent.ACTION_BATTERY_CHANGED)) {
int level = intent.getIntExtra("level", 0);
mPageLoader.updateBattery(level);
}
// 监听分钟的变化
else if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) {
mPageLoader.updateTime();
}
}
};
@Subscribe
public void setAdsBg(SetAdsBgEvent event) {
mClLayout.setBackgroundColor(getResources().getColor(ReadSettingManager.getInstance().getPageStyle().getBgColor()));
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
return mPageLoader.skipToPrePage();
case KeyEvent.KEYCODE_VOLUME_DOWN:
return mPageLoader.skipToNextPage();
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
if (mAblTopMenu.getVisibility() == View.VISIBLE) {
// 非全屏下才收缩,全屏下直接退出
if (!ReadSettingManager.getInstance().isFullScreen()) {
toggleMenu(true);
return;
}
} else if (mSettingDialog.isShowing()) {
mSettingDialog.dismiss();
return;
}else if (mDlSlide.isDrawerOpen(GravityCompat.START)) {
mDlSlide.closeDrawer(GravityCompat.START);
return;
}
Log.e(TAG, "onBackPressed: " + mCollBook.getBookChapters().isEmpty());
if (!mCollBook.isLocal() && !isCollected && !mCollBook.getBookChapters().isEmpty()) {
AlertDialog alertDialog = new AlertDialog.Builder(this)
.setTitle(getString(R.string.add_book))
.setMessage(getString(R.string.like_book))
.setPositiveButton(getString(R.string.sure), (dialog, which) -> {
//设置为已收藏
isCollected = true;
//设置阅读时间
mCollBook.setLastRead(String.valueOf(System.currentTimeMillis()));
BookRepository.getInstance().saveCollBookWithAsync(mCollBook);
exit();
})
.setNegativeButton(getString(R.string.cancel), (dialog, which) -> exit()).create();
alertDialog.show();
} else {
exit();
}
}
// 退出
private void exit() {
// 返回给BookDetail。
Intent result = new Intent();
result.putExtra(RESULT_IS_COLLECTED, isCollected);
setResult(Activity.RESULT_OK, result);
// 退出
super.onBackPressed();
}
@Override
protected void onPause() {
super.onPause();
if (isCollected) {
mPageLoader.saveRecord();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
EventManager.Companion.getInstance().unregisterSubscriber(this);
mPageLoader.closeBook();
mPageLoader = null;
unbindService(mConn);
unregisterReceiver(mReceiver);
}
private DownloadService.IDownloadManager mService;
private ServiceConnection mConn;
private void initService() {
mConn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = (DownloadService.IDownloadManager) service;
mService.setOnDownloadListener(NovelReadActivity.this);
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
//绑定
bindService(new Intent(this, DownloadService.class), mConn, Service.BIND_AUTO_CREATE);
}
@Override
public void onDownloadChange(int pos, int status, String msg) {
// DownloadTaskBean bean = mDownloadAdapter.getItem(pos);
// bean.setStatus(status);
// if (DownloadTaskBean.STATUS_LOADING == status){
// bean.setCurrentChapter(Integer.valueOf(msg));
// }
// mDownloadAdapter.notifyItemChanged(pos);
Log.e(TAG, "onDownloadChange: " + pos + " " + status + " " + msg);
if (msg.equals(getString(R.string.download_success)) || msg.equals(getString(R.string.download_error))) {
//下载成功或失败后隐藏下载视图
if (mLlDownLoad != null) {
mLlDownLoad.setVisibility(GONE);
ToastUtils.showNormalToast(this, msg);
}
} else {
if (mLlDownLoad != null) {
mLlDownLoad.setVisibility(VISIBLE);
mTvProgress.setText(getString(R.string.download_loading,
mService.getDownloadTaskList().get(pos).getCurrentChapter(),
mService.getDownloadTaskList().get(pos).getLastChapter()));
loadingProgressBar.setMax(mService.getDownloadTaskList().get(pos).getLastChapter());
loadingProgressBar.setProgress(mService.getDownloadTaskList().get(pos).getCurrentChapter());
}
}
}
@Override
public void onDownloadResponse(int pos, int status) {
// DownloadTaskBean bean = mDownloadAdapter.getItem(pos);
// bean.setStatus(status);
// mDownloadAdapter.notifyItemChanged(pos);
Log.e(TAG, "onDownloadResponse: " + pos + " " + status);
}
@Subscribe
public void onDownLoadEvent(DownloadMessage message) {
ToastUtils.showNormalToast(this, message.message);
}
}