电子屏项目
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

730 строки
25 KiB

  1. package com.yzx.webebook.activity;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.content.BroadcastReceiver;
  5. import android.content.ContentResolver;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.content.IntentFilter;
  9. import android.database.ContentObserver;
  10. import android.graphics.drawable.Drawable;
  11. import android.net.Uri;
  12. import android.os.Build;
  13. import android.os.Bundle;
  14. import android.os.Handler;
  15. import android.os.Message;
  16. import android.os.PowerManager;
  17. import android.provider.Settings;
  18. import android.util.Log;
  19. import android.view.Gravity;
  20. import android.view.KeyEvent;
  21. import android.view.View;
  22. import android.view.ViewGroup;
  23. import android.view.animation.Animation;
  24. import android.view.animation.AnimationUtils;
  25. import android.widget.LinearLayout;
  26. import android.widget.ListView;
  27. import android.widget.SeekBar;
  28. import android.widget.TextView;
  29. import androidx.core.content.ContextCompat;
  30. import androidx.core.view.GravityCompat;
  31. import androidx.drawerlayout.widget.DrawerLayout;
  32. import com.blankj.utilcode.util.NumberUtils;
  33. import com.google.android.material.appbar.AppBarLayout;
  34. import com.yzx.webebook.R;
  35. import com.yzx.webebook.activity.base.BaseActivity;
  36. import com.yzx.webebook.adapter.CategoryAdapter;
  37. import com.yzx.webebook.model.bean.BookChapterBean;
  38. import com.yzx.webebook.model.bean.CollBookBean;
  39. import com.yzx.webebook.model.local.BookRepository;
  40. import com.yzx.webebook.model.local.ReadSettingManager;
  41. import com.yzx.webebook.presenter.ReadPresenter;
  42. import com.yzx.webebook.presenter.ReadView;
  43. import com.yzx.webebook.utils.BrightnessUtils;
  44. import com.yzx.webebook.utils.Constant;
  45. import com.yzx.webebook.utils.LogUtils;
  46. import com.yzx.webebook.utils.RxUtils;
  47. import com.yzx.webebook.utils.ScreenUtils;
  48. import com.yzx.webebook.utils.StringUtils;
  49. import com.yzx.webebook.utils.SystemBarUtils;
  50. import com.yzx.webebook.widget.ReadSettingDialog;
  51. import com.yzx.webebook.widget.page.PageLoader;
  52. import com.yzx.webebook.widget.page.PageView;
  53. import com.yzx.webebook.widget.page.TxtChapter;
  54. import org.jetbrains.annotations.Nullable;
  55. import java.util.List;
  56. import io.reactivex.disposables.Disposable;
  57. import static android.view.View.GONE;
  58. import static android.view.View.VISIBLE;
  59. public class ReadActivity extends BaseActivity<ReadPresenter> implements ReadView {
  60. private static final String TAG = "ReadActivity";
  61. public static final int REQUEST_MORE_SETTING = 1;
  62. public static final String EXTRA_COLL_BOOK = "extra_coll_book";
  63. public static final String EXTRA_IS_COLLECTED = "extra_is_collected";
  64. // 注册 Brightness 的 uri
  65. private final Uri BRIGHTNESS_MODE_URI =
  66. Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE);
  67. private final Uri BRIGHTNESS_URI =
  68. Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
  69. private final Uri BRIGHTNESS_ADJ_URI =
  70. Settings.System.getUriFor("screen_auto_brightness_adj");
  71. private static final int WHAT_CATEGORY = 1;
  72. private static final int WHAT_CHAPTER = 2;
  73. DrawerLayout mDlSlide;
  74. /*************top_menu_view*******************/
  75. // AppBarLayout mAblTopMenu;
  76. // TextView mTvCommunity;
  77. // TextView mTvBrief;
  78. /***************content_view******************/
  79. PageView mPvPage;
  80. /***************bottom_menu_view***************************/
  81. TextView mTvPageTip;
  82. LinearLayout mLlBottomMenu;
  83. TextView mTvPreChapter;
  84. SeekBar mSbChapterProgress;
  85. TextView mTvNextChapter;
  86. TextView mTvCategory;
  87. TextView mTvNightMode;
  88. TextView mTvSetting;
  89. /***************left slide*******************************/
  90. ListView mLvCategory;
  91. /*****************view******************/
  92. private ReadSettingDialog mSettingDialog;
  93. private PageLoader mPageLoader;
  94. private Animation mTopInAnim;
  95. private Animation mTopOutAnim;
  96. private Animation mBottomInAnim;
  97. private Animation mBottomOutAnim;
  98. private CategoryAdapter mCategoryAdapter;
  99. private CollBookBean mCollBook;
  100. //控制屏幕常亮
  101. private PowerManager.WakeLock mWakeLock;
  102. /***************params*****************/
  103. private boolean isCollected = false; // isFromSDCard
  104. private boolean isNightMode = false;
  105. private boolean isFullScreen = false;
  106. private boolean isRegistered = false;
  107. private String mBookId;
  108. private String mRealBookId;
  109. private String mReadTaskId;
  110. private float lastProgress = 0f;
  111. private Handler mHandler = new Handler() {
  112. @Override
  113. public void handleMessage(Message msg) {
  114. super.handleMessage(msg);
  115. switch (msg.what) {
  116. case WHAT_CATEGORY:
  117. mLvCategory.setSelection(mPageLoader.getChapterPos());
  118. break;
  119. case WHAT_CHAPTER:
  120. mPageLoader.openChapter();
  121. break;
  122. }
  123. }
  124. };
  125. // 接收电池信息和时间更新的广播
  126. private BroadcastReceiver mReceiver = new BroadcastReceiver() {
  127. @Override
  128. public void onReceive(Context context, Intent intent) {
  129. if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {
  130. int level = intent.getIntExtra("level", 0);
  131. if (mPageLoader != null) {
  132. mPageLoader.updateBattery(level);
  133. }
  134. }
  135. // 监听分钟的变化
  136. else if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) {
  137. if (mPageLoader != null) {
  138. mPageLoader.updateTime();
  139. }
  140. }
  141. }
  142. };
  143. // 亮度调节监听
  144. // 由于亮度调节没有 Broadcast 而是直接修改 ContentProvider 的。所以需要创建一个 Observer 来监听 ContentProvider 的变化情况。
  145. private ContentObserver mBrightObserver = new ContentObserver(new Handler()) {
  146. @Override
  147. public void onChange(boolean selfChange) {
  148. onChange(selfChange, null);
  149. }
  150. @Override
  151. public void onChange(boolean selfChange, Uri uri) {
  152. super.onChange(selfChange);
  153. // 判断当前是否跟随屏幕亮度,如果不是则返回
  154. if (selfChange || !mSettingDialog.isBrightFollowSystem()) return;
  155. // 如果系统亮度改变,则修改当前 Activity 亮度
  156. if (BRIGHTNESS_MODE_URI.equals(uri)) {
  157. Log.d(TAG, "亮度模式改变");
  158. } else if (BRIGHTNESS_URI.equals(uri) && !BrightnessUtils.isAutoBrightness(ReadActivity.this)) {
  159. Log.d(TAG, "亮度模式为手动模式 值改变");
  160. BrightnessUtils.setBrightness(ReadActivity.this, BrightnessUtils.getScreenBrightness(ReadActivity.this));
  161. } else if (BRIGHTNESS_ADJ_URI.equals(uri) && BrightnessUtils.isAutoBrightness(ReadActivity.this)) {
  162. Log.d(TAG, "亮度模式为自动模式 值改变");
  163. BrightnessUtils.setDefaultBrightness(ReadActivity.this);
  164. } else {
  165. Log.d(TAG, "亮度调整 其他");
  166. }
  167. }
  168. };
  169. @Override
  170. protected void onCreate(Bundle savedInstanceState) {
  171. super.onCreate(savedInstanceState);
  172. }
  173. @Override
  174. public int getInflateId() {
  175. return R.layout.activity_read;
  176. }
  177. @Override
  178. public void initView() {
  179. mDlSlide = findViewById(R.id.read_dl_slide);
  180. // mTvCommunity = findViewById(R.id.read_tv_community);
  181. // mTvBrief = findViewById(R.id.read_tv_brief);
  182. mPvPage = findViewById(R.id.read_pv_page);
  183. mTvPageTip = findViewById(R.id.read_tv_page_tip);
  184. mLlBottomMenu = findViewById(R.id.read_ll_bottom_menu);
  185. mTvPreChapter = findViewById(R.id.read_tv_pre_chapter);
  186. mSbChapterProgress = findViewById(R.id.read_sb_chapter_progress);
  187. mTvNextChapter = findViewById(R.id.read_tv_next_chapter);
  188. mTvCategory = findViewById(R.id.read_tv_category);
  189. mTvNightMode = findViewById(R.id.read_tv_night_mode);
  190. mTvSetting = findViewById(R.id.read_tv_setting);
  191. mLvCategory = findViewById(R.id.read_iv_category);
  192. }
  193. @Override
  194. public void initData() {
  195. String id = getIntent().getStringExtra("book_id");
  196. mReadTaskId = getIntent().getStringExtra("read_task_id");
  197. mRealBookId = getIntent().getStringExtra("real_book_id");
  198. loadBookData(id);
  199. getMPresenter().getReadProgress(mRealBookId, mReadTaskId);
  200. }
  201. private void loadBookData(String id) {
  202. mCollBook = BookRepository.getInstance().getCollBook(id);
  203. isNightMode = ReadSettingManager.getInstance().isNightMode();
  204. isFullScreen = ReadSettingManager.getInstance().isFullScreen();
  205. mBookId = mCollBook.get_id();
  206. Log.d(TAG, "initData: " + mCollBook.toString());
  207. //获取页面加载器
  208. mPageLoader = mPvPage.getPageLoader(mCollBook);
  209. //禁止滑动展示DrawerLayout
  210. mDlSlide.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
  211. //侧边打开后,返回键能够起作用
  212. mDlSlide.setFocusableInTouchMode(false);
  213. mSettingDialog = new ReadSettingDialog(this, mPageLoader);
  214. setUpAdapter();
  215. //夜间模式按钮的状态
  216. toggleNightMode();
  217. //注册广播
  218. IntentFilter intentFilter = new IntentFilter();
  219. intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
  220. intentFilter.addAction(Intent.ACTION_TIME_TICK);
  221. registerReceiver(mReceiver, intentFilter);
  222. //设置当前Activity的Brightness
  223. if (ReadSettingManager.getInstance().isBrightnessAuto()) {
  224. BrightnessUtils.setDefaultBrightness(this);
  225. } else {
  226. BrightnessUtils.setBrightness(this, ReadSettingManager.getInstance().getBrightness());
  227. }
  228. //初始化屏幕常亮类
  229. PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
  230. mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "ireader:keep bright");
  231. //初始化BottomMenu
  232. initBottomMenu();
  233. Disposable disposable = BookRepository.getInstance()
  234. .getBookChaptersInRx(mBookId)
  235. .compose(RxUtils::toSimpleSingle)
  236. .subscribe(
  237. (bookChapterBeen, throwable) -> {
  238. // 设置 CollBook
  239. mPageLoader.getCollBook().setBookChapters(bookChapterBeen);
  240. // 刷新章节列表
  241. mPageLoader.refreshChapterList();
  242. LogUtils.e(throwable);
  243. }
  244. );
  245. addDisposable(disposable);
  246. initClick();
  247. }
  248. private void saveBookInfo() {
  249. if (mCollBook != null) {
  250. mCollBook.setLastRead(StringUtils.
  251. dateConvert(System.currentTimeMillis(), Constant.FORMAT_BOOK_DATE));
  252. BookRepository.getInstance()
  253. .saveCollBookWithAsync(mCollBook);
  254. }
  255. }
  256. private void initClick() {
  257. mPageLoader.setOnPageChangeListener(
  258. new PageLoader.OnPageChangeListener() {
  259. @Override
  260. public void onChapterChange(int pos) {
  261. mCategoryAdapter.setChapter(pos);
  262. }
  263. @Override
  264. public void requestChapters(List<TxtChapter> requestChapters) {
  265. getMPresenter().loadChapter(mBookId, requestChapters);
  266. mHandler.sendEmptyMessage(WHAT_CATEGORY);
  267. //隐藏提示
  268. mTvPageTip.setVisibility(GONE);
  269. }
  270. @Override
  271. public void onCategoryFinish(List<TxtChapter> chapters) {
  272. for (TxtChapter chapter : chapters) {
  273. chapter.setTitle(StringUtils.convertCC(chapter.getTitle(), mPvPage.getContext()));
  274. }
  275. mCategoryAdapter.refreshItems(chapters);
  276. }
  277. @Override
  278. public void onPageCountChange(int count) {
  279. mSbChapterProgress.setMax(Math.max(0, count - 1));
  280. mSbChapterProgress.setProgress(0);
  281. // 如果处于错误状态,那么就冻结使用
  282. if (mPageLoader.getPageStatus() == PageLoader.STATUS_LOADING
  283. || mPageLoader.getPageStatus() == PageLoader.STATUS_ERROR) {
  284. mSbChapterProgress.setEnabled(false);
  285. } else {
  286. mSbChapterProgress.setEnabled(true);
  287. }
  288. }
  289. @Override
  290. public void onPageChange(int pos) {
  291. mSbChapterProgress.post(
  292. () -> {
  293. mSbChapterProgress.setProgress(pos);
  294. }
  295. );
  296. }
  297. }
  298. );
  299. mSbChapterProgress.setOnSeekBarChangeListener(
  300. new SeekBar.OnSeekBarChangeListener() {
  301. @Override
  302. public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
  303. if (mLlBottomMenu.getVisibility() == VISIBLE) {
  304. //显示标题
  305. mTvPageTip.setText((progress + 1) + "/" + (mSbChapterProgress.getMax() + 1));
  306. mTvPageTip.setVisibility(VISIBLE);
  307. }
  308. }
  309. @Override
  310. public void onStartTrackingTouch(SeekBar seekBar) {
  311. }
  312. @Override
  313. public void onStopTrackingTouch(SeekBar seekBar) {
  314. //进行切换
  315. int pagePos = mSbChapterProgress.getProgress();
  316. if (pagePos != mPageLoader.getPagePos()) {
  317. mPageLoader.skipToPage(pagePos);
  318. }
  319. //隐藏提示
  320. mTvPageTip.setVisibility(GONE);
  321. }
  322. }
  323. );
  324. mPvPage.setTouchListener(new PageView.TouchListener() {
  325. @Override
  326. public boolean onTouch() {
  327. return !hideReadMenu();
  328. }
  329. @Override
  330. public void center() {
  331. toggleMenu(true);
  332. }
  333. @Override
  334. public void prePage() {
  335. }
  336. @Override
  337. public void nextPage() {
  338. }
  339. @Override
  340. public void cancel() {
  341. }
  342. });
  343. mLvCategory.setOnItemClickListener(
  344. (parent, view, position, id) -> {
  345. mDlSlide.closeDrawer(GravityCompat.START);
  346. mPageLoader.skipToChapter(position);
  347. }
  348. );
  349. mTvCategory.setOnClickListener(
  350. (v) -> {
  351. //移动到指定位置
  352. if (mCategoryAdapter.getCount() > 0) {
  353. mLvCategory.setSelection(mPageLoader.getChapterPos());
  354. }
  355. //切换菜单
  356. toggleMenu(true);
  357. //打开侧滑动栏
  358. mDlSlide.openDrawer(GravityCompat.START);
  359. }
  360. );
  361. mTvSetting.setOnClickListener(
  362. (v) -> {
  363. toggleMenu(false);
  364. mSettingDialog.show();
  365. }
  366. );
  367. mTvPreChapter.setOnClickListener(
  368. (v) -> {
  369. if (mPageLoader.skipPreChapter()) {
  370. mCategoryAdapter.setChapter(mPageLoader.getChapterPos());
  371. }
  372. }
  373. );
  374. mTvNextChapter.setOnClickListener(
  375. (v) -> {
  376. if (mPageLoader.skipNextChapter()) {
  377. mCategoryAdapter.setChapter(mPageLoader.getChapterPos());
  378. }
  379. }
  380. );
  381. mTvNightMode.setOnClickListener(
  382. (v) -> {
  383. if (isNightMode) {
  384. isNightMode = false;
  385. } else {
  386. isNightMode = true;
  387. }
  388. mPageLoader.setNightMode(isNightMode);
  389. toggleNightMode();
  390. }
  391. );
  392. }
  393. @Nullable
  394. @Override
  395. public ReadPresenter initPresenter() {
  396. return new ReadPresenter(this);
  397. }
  398. @Override
  399. public void showCategory(String localId) {
  400. loadBookData(localId);
  401. }
  402. @Override
  403. public void finishChapter() {
  404. }
  405. @Override
  406. public void errorChapter() {
  407. }
  408. private void initBottomMenu() {
  409. //判断是否全屏
  410. if (ReadSettingManager.getInstance().isFullScreen()) {
  411. //还需要设置mBottomMenu的底部高度
  412. ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mLlBottomMenu.getLayoutParams();
  413. params.bottomMargin = ScreenUtils.getNavigationBarHeight();
  414. mLlBottomMenu.setLayoutParams(params);
  415. } else {
  416. //设置mBottomMenu的底部距离
  417. ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mLlBottomMenu.getLayoutParams();
  418. params.bottomMargin = 0;
  419. mLlBottomMenu.setLayoutParams(params);
  420. }
  421. }
  422. @Override
  423. public void onWindowFocusChanged(boolean hasFocus) {
  424. super.onWindowFocusChanged(hasFocus);
  425. }
  426. private void toggleNightMode() {
  427. if (isNightMode) {
  428. mTvNightMode.setText("日间");
  429. Drawable drawable = ContextCompat.getDrawable(this, R.mipmap.ic_read_menu_morning);
  430. mTvNightMode.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
  431. } else {
  432. mTvNightMode.setText("夜间");
  433. Drawable drawable = ContextCompat.getDrawable(this, R.mipmap.ic_read_menu_night);
  434. mTvNightMode.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
  435. }
  436. }
  437. private void setUpAdapter() {
  438. mCategoryAdapter = new CategoryAdapter();
  439. mLvCategory.setAdapter(mCategoryAdapter);
  440. mLvCategory.setFastScrollEnabled(true);
  441. }
  442. // 注册亮度观察者
  443. private void registerBrightObserver() {
  444. try {
  445. if (mBrightObserver != null) {
  446. if (!isRegistered) {
  447. final ContentResolver cr = getContentResolver();
  448. cr.unregisterContentObserver(mBrightObserver);
  449. cr.registerContentObserver(BRIGHTNESS_MODE_URI, false, mBrightObserver);
  450. cr.registerContentObserver(BRIGHTNESS_URI, false, mBrightObserver);
  451. cr.registerContentObserver(BRIGHTNESS_ADJ_URI, false, mBrightObserver);
  452. isRegistered = true;
  453. }
  454. }
  455. } catch (Throwable throwable) {
  456. LogUtils.e(TAG, "register mBrightObserver error! " + throwable);
  457. }
  458. }
  459. //解注册
  460. private void unregisterBrightObserver() {
  461. try {
  462. if (mBrightObserver != null) {
  463. if (isRegistered) {
  464. getContentResolver().unregisterContentObserver(mBrightObserver);
  465. isRegistered = false;
  466. }
  467. }
  468. } catch (Throwable throwable) {
  469. LogUtils.e(TAG, "unregister BrightnessObserver error! " + throwable);
  470. }
  471. }
  472. /**
  473. * 隐藏阅读界面的菜单显示
  474. *
  475. * @return 是否隐藏成功
  476. */
  477. private boolean hideReadMenu() {
  478. if (mLlBottomMenu.getVisibility() == VISIBLE) {
  479. toggleMenu(true);
  480. return true;
  481. } else if (mSettingDialog.isShowing()) {
  482. mSettingDialog.dismiss();
  483. return true;
  484. }
  485. return false;
  486. }
  487. /**
  488. * 切换菜单栏的可视状态
  489. * 默认是隐藏的
  490. */
  491. private void toggleMenu(boolean hideStatusBar) {
  492. initMenuAnim();
  493. if (mLlBottomMenu.getVisibility() == View.VISIBLE) {
  494. //关闭
  495. mLlBottomMenu.setVisibility(GONE);
  496. mTvPageTip.setVisibility(GONE);
  497. } else {
  498. mLlBottomMenu.setVisibility(View.VISIBLE);
  499. }
  500. }
  501. //初始化菜单动画
  502. private void initMenuAnim() {
  503. if (mTopInAnim != null) return;
  504. mTopInAnim = AnimationUtils.loadAnimation(this, R.anim.slide_top_in);
  505. mTopOutAnim = AnimationUtils.loadAnimation(this, R.anim.slide_top_out);
  506. mBottomInAnim = AnimationUtils.loadAnimation(this, R.anim.slide_bottom_in);
  507. mBottomOutAnim = AnimationUtils.loadAnimation(this, R.anim.slide_bottom_out);
  508. //退出的速度要快
  509. mTopOutAnim.setDuration(200);
  510. mBottomOutAnim.setDuration(200);
  511. }
  512. @Override
  513. public void onBackPressed() {
  514. if (mLlBottomMenu.getVisibility() == View.VISIBLE) {
  515. // 非全屏下才收缩,全屏下直接退出
  516. if (!ReadSettingManager.getInstance().isFullScreen()) {
  517. toggleMenu(true);
  518. return;
  519. }
  520. } else if (mSettingDialog.isShowing()) {
  521. mSettingDialog.dismiss();
  522. return;
  523. } else if (mDlSlide.isDrawerOpen(GravityCompat.START)) {
  524. mDlSlide.closeDrawer(GravityCompat.START);
  525. return;
  526. }
  527. if (!mCollBook.isLocal() && !isCollected
  528. && !mCollBook.getBookChapters().isEmpty() && false) {
  529. AlertDialog alertDialog = new AlertDialog.Builder(this)
  530. .setTitle("加入书架")
  531. .setMessage("喜欢本书就加入书架吧")
  532. .setPositiveButton("确定", (dialog, which) -> {
  533. //设置为已收藏
  534. isCollected = true;
  535. //设置阅读时间
  536. mCollBook.setLastRead(StringUtils.
  537. dateConvert(System.currentTimeMillis(), Constant.FORMAT_BOOK_DATE));
  538. BookRepository.getInstance()
  539. .saveCollBookWithAsync(mCollBook);
  540. exit();
  541. })
  542. .setNegativeButton("取消", (dialog, which) -> {
  543. exit();
  544. }).create();
  545. alertDialog.show();
  546. } else {
  547. exit();
  548. }
  549. }
  550. // 退出
  551. private void exit() {
  552. // 退出
  553. super.onBackPressed();
  554. }
  555. @Override
  556. protected void onStart() {
  557. super.onStart();
  558. registerBrightObserver();
  559. }
  560. @Override
  561. protected void onResume() {
  562. super.onResume();
  563. if (mWakeLock != null) {
  564. mWakeLock.acquire();
  565. }
  566. }
  567. @Override
  568. protected void onPause() {
  569. super.onPause();
  570. if (mWakeLock != null) {
  571. mWakeLock.release();
  572. }
  573. if (mPageLoader != null) {
  574. saveBookInfo();
  575. mPageLoader.saveRecord();
  576. }
  577. if (getMPresenter() != null && mPageLoader != null) {
  578. float currProgress = Float.parseFloat(mPageLoader.getPercent());
  579. if (currProgress > lastProgress) {
  580. getMPresenter().updateReadProgress(mRealBookId, mReadTaskId, String.valueOf(mPageLoader.getPercent()));
  581. }
  582. }
  583. }
  584. @Override
  585. protected void onStop() {
  586. super.onStop();
  587. unregisterBrightObserver();
  588. }
  589. @Override
  590. protected void onDestroy() {
  591. super.onDestroy();
  592. unregisterReceiver(mReceiver);
  593. mHandler.removeMessages(WHAT_CATEGORY);
  594. mHandler.removeMessages(WHAT_CHAPTER);
  595. mPageLoader.closeBook();
  596. mPageLoader = null;
  597. }
  598. @Override
  599. public boolean onKeyDown(int keyCode, KeyEvent event) {
  600. boolean isVolumeTurnPage = ReadSettingManager
  601. .getInstance().isVolumeTurnPage();
  602. switch (keyCode) {
  603. case KeyEvent.KEYCODE_VOLUME_UP:
  604. if (isVolumeTurnPage) {
  605. return mPageLoader.skipToPrePage();
  606. }
  607. break;
  608. case KeyEvent.KEYCODE_VOLUME_DOWN:
  609. if (isVolumeTurnPage) {
  610. return mPageLoader.skipToNextPage();
  611. }
  612. break;
  613. }
  614. return super.onKeyDown(keyCode, event);
  615. }
  616. @Override
  617. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  618. super.onActivityResult(requestCode, resultCode, data);
  619. if (requestCode == REQUEST_MORE_SETTING) {
  620. boolean fullScreen = ReadSettingManager.getInstance().isFullScreen();
  621. if (isFullScreen != fullScreen) {
  622. isFullScreen = fullScreen;
  623. // 刷新BottomMenu
  624. initBottomMenu();
  625. }
  626. }
  627. }
  628. @Override
  629. public void onProgressSuccess(float progress) {
  630. lastProgress = progress;
  631. }
  632. }