package com.codingbingo.fastreader.ui.fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.SeekBar; import com.avos.avoscloud.LogUtil; import com.codingbingo.fastreader.Constants; import com.codingbingo.fastreader.R; import com.codingbingo.fastreader.base.BaseActivity; import com.codingbingo.fastreader.base.BaseFragment; import com.codingbingo.fastreader.dao.Book; import com.codingbingo.fastreader.dao.BookDao; import com.codingbingo.fastreader.dao.Chapter; import com.codingbingo.fastreader.dao.ChapterDao; import com.codingbingo.fastreader.model.eventbus.BookStatusChangeEvent; import com.codingbingo.fastreader.ui.activity.ReadingActivity; import com.codingbingo.fastreader.ui.listener.OnReadChapterProgressListener; import com.codingbingo.fastreader.view.loadingview.CatLoadingView; import com.codingbingo.fastreader.view.readview.PageWidget; import com.codingbingo.fastreader.view.readview.ReadController; import com.codingbingo.fastreader.view.readview.interfaces.OnControllerStatusChangeListener; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.List; /** * Author: bingo * Email: codingbingo@gmail.com * By 2017/3/30. */ public class ReadingFragment extends BaseFragment implements OnControllerStatusChangeListener, OnReadChapterProgressListener { private PageWidget readPageWidget; private ReadController readController; private CatLoadingView readLoadingView; private View.OnClickListener onClickListener; private long bookId; private String bookPath; private Book mBook; private List<Chapter> mChapterList; @Override public String getFragmentName() { return ReadingFragment.class.getSimpleName(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_reading, container, false); initView(view); return view; } public void setBookId(long bookId) { this.bookId = bookId; } public void setBookPath(String bookPath) { this.bookPath = bookPath; } public void setOnClickListener(View.OnClickListener onClickListener) { this.onClickListener = onClickListener; } private void initView(View view) { readController = (ReadController) view.findViewById(R.id.readController); readController.setOnControllerStatusChangeListener(this); if (onClickListener != null) { readController.setOnViewClickListener(onClickListener); } readPageWidget = (PageWidget) view.findViewById(R.id.readPageWidget); //bookId判断书籍状态种类 if (BaseActivity.NO_BOOK_ID != bookId) { readPageWidget.setBookId(bookId, false); mBook = getDaoSession().getBookDao().load(bookId); } else { List<Book> bookList = getDaoSession() .getBookDao() .queryBuilder() .where(BookDao.Properties.BookPath.eq(bookPath)) .list(); if (bookList.size() == 0) { readPageWidget.setBookPath(bookPath); } else { mBook = bookList.get(0); bookId = mBook.getId(); readPageWidget.setBookId(mBook.getId(), false); } } readLoadingView = (CatLoadingView) view.findViewById(R.id.loading); if (mBook == null || mBook.getProcessStatus() != Constants.BOOK_PROCESSED) { readLoadingView.setVisibility(View.VISIBLE); //说明书籍不存在或者还没有处理好 } else { readLoadingView.setVisibility(View.GONE); notifyController(); } } /** * 设置控制页面的状态 */ private void notifyController() { if (mBook == null) { mBook = getDaoSession().getBookDao().load(bookId); } mChapterList = getDaoSession() .getChapterDao() .queryBuilder() .where(ChapterDao.Properties.BookId.eq(bookId)).list(); readController.setTotalChaptersNum(mBook.getCurrentChapter(), mChapterList.size() - 1); readController.setOnReadChapterProgressListener(this); } public void nextPage() { readPageWidget.nextPage(); } public void prePage() { readPageWidget.prePage(); } @Override public void onPause() { super.onPause(); } @Override public void onResume() { super.onResume(); if (EventBus.getDefault().isRegistered(this) == false) { EventBus.getDefault().register(this); } } @Override public void onDestroy() { super.onDestroy(); if (EventBus.getDefault().isRegistered(this) == true) { EventBus.getDefault().unregister(this); } } @Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(BookStatusChangeEvent bookStatusChangeEvent) { if (bookId != BaseActivity.NO_BOOK_ID && bookId != bookStatusChangeEvent.getBookId()) { //不处理 LogUtil.log.i("bookId不同,不是同一书籍,不更新。"); return; } if (bookId == BaseActivity.NO_BOOK_ID){ Book tempBook = getDaoSession().getBookDao().load(bookStatusChangeEvent.getBookId()); if (tempBook == null || tempBook.getBookPath().equals(bookPath) == false) { LogUtil.log.i("bookPath不同,不是同一书籍,不更新。"); return; } } switch (bookStatusChangeEvent.getStatus()) { case Constants.BOOK_PROCESSED: LogUtil.log.e("*****************************"); LogUtil.log.e("Current bookId is: " + bookId); LogUtil.log.e("Current bookPath is: " + bookPath); LogUtil.log.e("Pass bookId is: " + bookStatusChangeEvent.getBookId()); LogUtil.log.e("*****************************"); readLoadingView.setVisibility(View.GONE); bookId = bookStatusChangeEvent.getBookId(); readPageWidget.setBookId(bookId, true); readPageWidget.postInvalidate(); notifyController(); break; default: readLoadingView.setVisibility(View.VISIBLE); if (bookId == ReadingActivity.NO_BOOK_ID) { List<Book> bookList = getDaoSession() .getBookDao() .queryBuilder() .where(BookDao.Properties.BookPath.eq(bookPath)) .list(); if (bookList.size() > 0) { mBook = bookList.get(0); bookId = mBook.getId(); } } if (bookId == bookStatusChangeEvent.getBookId()) { readLoadingView.setLoadingProgress(bookStatusChangeEvent.getProgress()); } break; } } @Override public void onControllerStatusChange(boolean isShowing) { switchFullScreen(!isShowing); } @Override public void onReadProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mBook.setCurrentChapter(progress); Chapter currentChapter = mChapterList.get(progress); if (currentChapter != null) { mBook.setCurrentPosition(currentChapter.getPosition()); getDaoSession().getBookDao().update(mBook); readPageWidget.setBookId(mBook.getId(), false); readPageWidget.postInvalidate(); } else { LogUtil.avlog.e("onReadProgressChanged currentChapter is null, " + "progress -- " + progress); } } }