├── .gitignore ├── .idea ├── caches │ ├── build_file_checksums.ser │ └── gradle_models.ser ├── codeStyles │ └── Project.xml ├── encodings.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── example │ │ └── newbiechen │ │ └── ireader │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── newbiechen │ │ │ └── ireader │ │ │ ├── App.java │ │ │ ├── RxBus.java │ │ │ ├── event │ │ │ ├── BookSubSortEvent.java │ │ │ ├── DeleteResponseEvent.java │ │ │ ├── DeleteTaskEvent.java │ │ │ ├── DownloadMessage.java │ │ │ ├── RecommendBookEvent.java │ │ │ └── SelectorEvent.java │ │ │ ├── model │ │ │ ├── bean │ │ │ │ ├── AuthorBean.java │ │ │ │ ├── BaseBean.java │ │ │ │ ├── BillBookBean.java │ │ │ │ ├── BillboardBean.java │ │ │ │ ├── BookChapterBean.java │ │ │ │ ├── BookCommentBean.java │ │ │ │ ├── BookDetailBean.java │ │ │ │ ├── BookHelpfulBean.java │ │ │ │ ├── BookHelpsBean.java │ │ │ │ ├── BookListBean.java │ │ │ │ ├── BookListDetailBean.java │ │ │ │ ├── BookRecordBean.java │ │ │ │ ├── BookReviewBean.java │ │ │ │ ├── BookSortBean.java │ │ │ │ ├── BookSubSortBean.java │ │ │ │ ├── BookTagBean.java │ │ │ │ ├── ChapterInfoBean.java │ │ │ │ ├── CollBookBean.java │ │ │ │ ├── CommentBean.java │ │ │ │ ├── CommentDetailBean.java │ │ │ │ ├── DetailBean.java │ │ │ │ ├── DownloadTaskBean.java │ │ │ │ ├── HelpsDetailBean.java │ │ │ │ ├── HotCommentBean.java │ │ │ │ ├── ReplyToBean.java │ │ │ │ ├── ReviewBookBean.java │ │ │ │ ├── ReviewDetailBean.java │ │ │ │ ├── SectionBean.java │ │ │ │ ├── SortBookBean.java │ │ │ │ ├── TagBookBean.java │ │ │ │ └── packages │ │ │ │ │ ├── BillBookPackage.java │ │ │ │ │ ├── BillboardPackage.java │ │ │ │ │ ├── BookChapterPackage.java │ │ │ │ │ ├── BookCommentPackage.java │ │ │ │ │ ├── BookHelpsPackage.java │ │ │ │ │ ├── BookListDetailPackage.java │ │ │ │ │ ├── BookListPackage.java │ │ │ │ │ ├── BookReviewPackage.java │ │ │ │ │ ├── BookSortPackage.java │ │ │ │ │ ├── BookSubSortPackage.java │ │ │ │ │ ├── BookTagPackage.java │ │ │ │ │ ├── ChapterInfoPackage.java │ │ │ │ │ ├── CommentDetailPackage.java │ │ │ │ │ ├── CommentsPackage.java │ │ │ │ │ ├── HelpsDetailPackage.java │ │ │ │ │ ├── HotCommentPackage.java │ │ │ │ │ ├── HotWordPackage.java │ │ │ │ │ ├── KeyWordPackage.java │ │ │ │ │ ├── RecommendBookListPackage.java │ │ │ │ │ ├── RecommendBookPackage.java │ │ │ │ │ ├── ReviewDetailPackage.java │ │ │ │ │ ├── SearchBookPackage.java │ │ │ │ │ ├── SortBookPackage.java │ │ │ │ │ └── TagSearchPackage.java │ │ │ ├── flag │ │ │ │ ├── BookConvert.java │ │ │ │ ├── BookDistillate.java │ │ │ │ ├── BookFormat.java │ │ │ │ ├── BookListType.java │ │ │ │ ├── BookSelection.java │ │ │ │ ├── BookSort.java │ │ │ │ ├── BookSortListType.java │ │ │ │ ├── BookType.java │ │ │ │ ├── CommunityType.java │ │ │ │ └── FindType.java │ │ │ ├── local │ │ │ │ ├── BookRepository.java │ │ │ │ ├── DaoDbHelper.java │ │ │ │ ├── DeleteDbHelper.java │ │ │ │ ├── GetDbHelper.java │ │ │ │ ├── LocalRepository.java │ │ │ │ ├── MyOpenHelper.java │ │ │ │ ├── ReadSettingManager.java │ │ │ │ ├── SaveDbHelper.java │ │ │ │ ├── Void.java │ │ │ │ └── update │ │ │ │ │ ├── MigrationHelper.java │ │ │ │ │ └── Update2Helper.java │ │ │ └── remote │ │ │ │ ├── BookApi.java │ │ │ │ ├── RemoteHelper.java │ │ │ │ └── RemoteRepository.java │ │ │ ├── presenter │ │ │ ├── BillBookPresenter.java │ │ │ ├── BillboardPresenter.java │ │ │ ├── BookDetailPresenter.java │ │ │ ├── BookListDetailPresenter.java │ │ │ ├── BookListPresenter.java │ │ │ ├── BookShelfPresenter.java │ │ │ ├── BookSortListPresenter.java │ │ │ ├── BookSortPresenter.java │ │ │ ├── CommentDetailPresenter.java │ │ │ ├── DiscCommentPresenter.java │ │ │ ├── DiscHelpsPresenter.java │ │ │ ├── DiscReviewPresenter.java │ │ │ ├── HelpsDetailPresenter.java │ │ │ ├── ReadPresenter.java │ │ │ ├── ReviewDetailPresenter.java │ │ │ ├── SearchPresenter.java │ │ │ └── contract │ │ │ │ ├── BillBookContract.java │ │ │ │ ├── BillboardContract.java │ │ │ │ ├── BookDetailContract.java │ │ │ │ ├── BookListContract.java │ │ │ │ ├── BookListDetailContract.java │ │ │ │ ├── BookShelfContract.java │ │ │ │ ├── BookSortContract.java │ │ │ │ ├── BookSortListContract.java │ │ │ │ ├── CommentDetailContract.java │ │ │ │ ├── DiscCommentContact.java │ │ │ │ ├── DiscHelpsContract.java │ │ │ │ ├── DiscReviewContract.java │ │ │ │ ├── HelpsDetailContract.java │ │ │ │ ├── ReadContract.java │ │ │ │ ├── ReviewDetailContract.java │ │ │ │ └── SearchContract.java │ │ │ ├── service │ │ │ └── DownloadService.java │ │ │ ├── ui │ │ │ ├── activity │ │ │ │ ├── BillBookActivity.java │ │ │ │ ├── BillboardActivity.java │ │ │ │ ├── BookDetailActivity.java │ │ │ │ ├── BookDiscussionActivity.java │ │ │ │ ├── BookListActivity.java │ │ │ │ ├── BookListDetailActivity.java │ │ │ │ ├── BookSortActivity.java │ │ │ │ ├── BookSortListActivity.java │ │ │ │ ├── CommunityActivity.java │ │ │ │ ├── DiscDetailActivity.java │ │ │ │ ├── DownloadActivity.java │ │ │ │ ├── FileSystemActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── MoreSettingActivity.java │ │ │ │ ├── OtherBillBookActivity.java │ │ │ │ ├── ReadActivity.java │ │ │ │ ├── SearchActivity.java │ │ │ │ └── SplashActivity.java │ │ │ ├── adapter │ │ │ │ ├── BillBookAdapter.java │ │ │ │ ├── BillboardAdapter.java │ │ │ │ ├── BookListAdapter.java │ │ │ │ ├── BookListDetailAdapter.java │ │ │ │ ├── BookSortAdapter.java │ │ │ │ ├── BookSortListAdapter.java │ │ │ │ ├── CategoryAdapter.java │ │ │ │ ├── CollBookAdapter.java │ │ │ │ ├── CommentAdapter.java │ │ │ │ ├── DiscCommentAdapter.java │ │ │ │ ├── DiscHelpsAdapter.java │ │ │ │ ├── DiscReviewAdapter.java │ │ │ │ ├── DownLoadAdapter.java │ │ │ │ ├── FileSystemAdapter.java │ │ │ │ ├── GodCommentAdapter.java │ │ │ │ ├── HorizonTagAdapter.java │ │ │ │ ├── HotCommentAdapter.java │ │ │ │ ├── KeyWordAdapter.java │ │ │ │ ├── PageStyleAdapter.java │ │ │ │ ├── SearchBookAdapter.java │ │ │ │ ├── SectionAdapter.java │ │ │ │ ├── TagGroupAdapter.java │ │ │ │ └── view │ │ │ │ │ ├── BillBookHolder.java │ │ │ │ │ ├── BookListHolder.java │ │ │ │ │ ├── BookListInfoHolder.java │ │ │ │ │ ├── BookSortHolder.java │ │ │ │ │ ├── BookSortListHolder.java │ │ │ │ │ ├── CategoryHolder.java │ │ │ │ │ ├── CollBookHolder.java │ │ │ │ │ ├── CommentHolder.java │ │ │ │ │ ├── DiscCommentHolder.java │ │ │ │ │ ├── DiscHelpsHolder.java │ │ │ │ │ ├── DiscReviewHolder.java │ │ │ │ │ ├── DownloadHolder.java │ │ │ │ │ ├── FileHolder.java │ │ │ │ │ ├── HorizonTagHolder.java │ │ │ │ │ ├── HotCommentHolder.java │ │ │ │ │ ├── KeyWordHolder.java │ │ │ │ │ ├── PageStyleHolder.java │ │ │ │ │ ├── SearchBookHolder.java │ │ │ │ │ ├── SectionHolder.java │ │ │ │ │ ├── TagChildHolder.java │ │ │ │ │ └── TagGroupHolder.java │ │ │ ├── base │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── BaseAdapter.java │ │ │ │ ├── BaseContract.java │ │ │ │ ├── BaseFragment.java │ │ │ │ ├── BaseMVPActivity.java │ │ │ │ ├── BaseMVPFragment.java │ │ │ │ ├── BaseService.java │ │ │ │ ├── BaseTabActivity.java │ │ │ │ ├── EasyAdapter.java │ │ │ │ ├── RxPresenter.java │ │ │ │ └── adapter │ │ │ │ │ ├── BaseListAdapter.java │ │ │ │ │ ├── BaseViewHolder.java │ │ │ │ │ ├── GroupAdapter.java │ │ │ │ │ ├── IViewHolder.java │ │ │ │ │ └── ViewHolderImpl.java │ │ │ ├── dialog │ │ │ │ ├── ReadSettingDialog.java │ │ │ │ └── SexChooseDialog.java │ │ │ └── fragment │ │ │ │ ├── BaseFileFragment.java │ │ │ │ ├── BillBookFragment.java │ │ │ │ ├── BookListFragment.java │ │ │ │ ├── BookShelfFragment.java │ │ │ │ ├── BookSortListFragment.java │ │ │ │ ├── CommentDetailFragment.java │ │ │ │ ├── CommunityFragment.java │ │ │ │ ├── DiscCommentFragment.java │ │ │ │ ├── DiscHelpsFragment.java │ │ │ │ ├── DiscReviewFragment.java │ │ │ │ ├── FileCategoryFragment.java │ │ │ │ ├── FindFragment.java │ │ │ │ ├── HelpsDetailFragment.java │ │ │ │ ├── LocalBookFragment.java │ │ │ │ └── ReviewDetailFragment.java │ │ │ ├── utils │ │ │ ├── BookManager.java │ │ │ ├── BrightnessUtils.java │ │ │ ├── Charset.java │ │ │ ├── Constant.java │ │ │ ├── FileStack.java │ │ │ ├── FileUtils.java │ │ │ ├── IOUtils.java │ │ │ ├── LogUtils.java │ │ │ ├── MD5Utils.java │ │ │ ├── NetworkUtils.java │ │ │ ├── PermissionsChecker.java │ │ │ ├── RxUtils.java │ │ │ ├── ScreenUtils.java │ │ │ ├── SharedPreUtils.java │ │ │ ├── StatusBarCompat.java │ │ │ ├── StringUtils.java │ │ │ ├── SystemBarUtils.java │ │ │ ├── ToastUtils.java │ │ │ └── media │ │ │ │ ├── LoaderCreator.java │ │ │ │ ├── LocalFileLoader.java │ │ │ │ └── MediaStoreHelper.java │ │ │ └── widget │ │ │ ├── BookTextView.java │ │ │ ├── CustomExpandableListView.java │ │ │ ├── EasyRatingBar.java │ │ │ ├── ReboundScrollView.java │ │ │ ├── RefreshLayout.java │ │ │ ├── ScrollRefreshLayout.java │ │ │ ├── SelectorView.java │ │ │ ├── adapter │ │ │ ├── LoadMoreDelegate.java │ │ │ ├── LoadMoreView.java │ │ │ └── WholeAdapter.java │ │ │ ├── animation │ │ │ ├── AnimationProvider.java │ │ │ ├── CoverPageAnim.java │ │ │ ├── HorizonPageAnim.java │ │ │ ├── NonePageAnim.java │ │ │ ├── PageAnimation.java │ │ │ ├── ScrollPageAnim.java │ │ │ ├── SimulationPageAnim.java │ │ │ └── SlidePageAnim.java │ │ │ ├── itemdecoration │ │ │ ├── DividerGridItemDecoration.java │ │ │ └── DividerItemDecoration.java │ │ │ ├── page │ │ │ ├── LocalPageLoader.java │ │ │ ├── NetPageLoader.java │ │ │ ├── PageLoader.java │ │ │ ├── PageMode.java │ │ │ ├── PageStyle.java │ │ │ ├── PageView.java │ │ │ ├── TxtChapter.java │ │ │ └── TxtPage.java │ │ │ ├── refresh │ │ │ ├── RefreshLayout.java │ │ │ ├── RefreshRecyclerView.java │ │ │ ├── ScrollRefreshLayout.java │ │ │ └── ScrollRefreshRecyclerView.java │ │ │ └── transform │ │ │ └── CircleTransform.java │ └── res │ │ ├── anim │ │ ├── rotate_0_to_180.xml │ │ ├── rotate_180_to_360.xml │ │ ├── slide_bottom_in.xml │ │ ├── slide_bottom_out.xml │ │ ├── slide_left_in.xml │ │ ├── slide_left_out.xml │ │ ├── slide_right_in.xml │ │ ├── slide_right_out.xml │ │ ├── slide_top_in.xml │ │ └── slide_top_out.xml │ │ ├── color │ │ ├── selector_btn_file_add.xml │ │ ├── selector_btn_file_delete.xml │ │ ├── selector_btn_read_setting.xml │ │ ├── selector_cb_file.xml │ │ ├── selector_chapter.xml │ │ └── tag_child.xml │ │ ├── drawable-night-xhdpi │ │ └── ic_read_menu_night.png │ │ ├── drawable-night-xxhdpi │ │ ├── ic_read_menu_morning.png │ │ └── ic_read_menu_night.png │ │ ├── drawable-nodpi │ │ └── ic_book_loading.png │ │ ├── drawable-xhdpi │ │ ├── ic_arrow_right.png │ │ ├── ic_back_last.png │ │ ├── ic_billboard_arrow_down.png │ │ ├── ic_billboard_arrow_up.png │ │ ├── ic_book_list_add.png │ │ ├── ic_book_list_delete.png │ │ ├── ic_book_list_search.png │ │ ├── ic_book_review_like.png │ │ ├── ic_brightness_minus.png │ │ ├── ic_brightness_plus.png │ │ ├── ic_cb_file_normal.png │ │ ├── ic_cb_file_selected.png │ │ ├── ic_cb_normal.png │ │ ├── ic_cb_selected.png │ │ ├── ic_checked.png │ │ ├── ic_delete.png │ │ ├── ic_detail_share.png │ │ ├── ic_detail_tool.png │ │ ├── ic_dir.png │ │ ├── ic_file_loaded.png │ │ ├── ic_item_category_activated.png │ │ ├── ic_item_category_download.png │ │ ├── ic_item_category_normal.png │ │ ├── ic_local_file.png │ │ ├── ic_menu_category.png │ │ ├── ic_menu_morning.png │ │ ├── ic_no_data.png │ │ ├── ic_notif_post.png │ │ ├── ic_notif_vote.png │ │ ├── ic_read_menu_category.png │ │ ├── ic_read_menu_download.png │ │ ├── ic_read_menu_font.png │ │ ├── ic_read_menu_morning.png │ │ ├── ic_read_menu_night.png │ │ ├── ic_reader_quote.png │ │ ├── ic_refresh.png │ │ ├── ic_search.png │ │ ├── ic_search_back_normal.png │ │ ├── ic_search_back_selected.png │ │ ├── ic_search_normal.png │ │ ├── ic_search_selected.png │ │ ├── label_book_top.png │ │ ├── seekbar_thumb_normal.png │ │ └── seekbar_thumb_selected.png │ │ ├── drawable-xxhdpi │ │ ├── ic_arrow_back.png │ │ ├── ic_arrow_enter.png │ │ ├── ic_billboard_collapse.png │ │ ├── ic_book_review_like.png │ │ ├── ic_book_shelf_add.png │ │ ├── ic_book_shelf_empty.png │ │ ├── ic_close_window.png │ │ ├── ic_default_portrait.png │ │ ├── ic_download_complete.png │ │ ├── ic_download_error.png │ │ ├── ic_download_loading.png │ │ ├── ic_download_pause.png │ │ ├── ic_download_wait.png │ │ ├── ic_load_error.png │ │ ├── ic_loadding.png │ │ ├── ic_menu_download.png │ │ ├── ic_menu_feedback.png │ │ ├── ic_menu_login.png │ │ ├── ic_menu_overflow.png │ │ ├── ic_menu_scan.png │ │ ├── ic_menu_search.png │ │ ├── ic_menu_setting.png │ │ ├── ic_menu_syn.png │ │ ├── ic_menu_tip.png │ │ ├── ic_menu_transfer.png │ │ ├── ic_read_menu_setting.png │ │ ├── ic_recommend.png │ │ ├── ic_section_comment.png │ │ ├── ic_section_compose.png │ │ ├── ic_section_discuss.png │ │ ├── ic_section_girl.png │ │ ├── ic_section_help.png │ │ ├── ic_section_listen.png │ │ ├── ic_section_sort.png │ │ ├── ic_section_top.png │ │ ├── ic_section_topic.png │ │ ├── ic_sex_logo.png │ │ ├── ic_topic_distillate.png │ │ ├── ic_topic_hot.png │ │ ├── notif_red_dot.png │ │ ├── post_item_like.png │ │ ├── rating_star_nor.png │ │ ├── rating_star_sel.png │ │ ├── rating_star_user_nor.png │ │ ├── rating_star_user_press.png │ │ ├── review_useful_no_nor.png │ │ ├── review_useful_no_pre.png │ │ ├── review_useful_yes_nor.png │ │ ├── review_useful_yes_pre.png │ │ ├── selector_arrow_down.png │ │ ├── selector_arrow_up.png │ │ ├── theme_leather_bg.jpg │ │ └── theme_night.png │ │ ├── drawable │ │ ├── bg_shadow.png │ │ ├── bg_skip.xml │ │ ├── btn_sex_choose_boy.xml │ │ ├── btn_sex_choose_girl.xml │ │ ├── ic_tag_txt.xml │ │ ├── seekbar_battery_bg.xml │ │ ├── seekbar_battery_night_bg.xml │ │ ├── seekbar_bg.xml │ │ ├── seekbar_thumb.xml │ │ ├── selector_back.xml │ │ ├── selector_btn_add.xml │ │ ├── selector_btn_book_list.xml │ │ ├── selector_btn_delete.xml │ │ ├── selector_btn_read_setting.xml │ │ ├── selector_category_bg.xml │ │ ├── selector_category_load.xml │ │ ├── selector_category_unload.xml │ │ ├── selector_cb_file.xml │ │ ├── selector_cb_volume.xml │ │ ├── selector_common_bg.xml │ │ ├── selector_tag.xml │ │ ├── selector_tag_child.xml │ │ ├── shape_book_list_nor.xml │ │ ├── shape_book_list_press.xml │ │ ├── shape_btn_read_setting_checked.xml │ │ ├── shape_btn_read_setting_normal.xml │ │ ├── shape_common_corner.xml │ │ ├── shape_common_gray_corner.xml │ │ ├── shape_common_green_corner.xml │ │ ├── shape_common_light_white_bg.xml │ │ ├── shape_corner_black.xml │ │ ├── shape_corner_red.xml │ │ ├── shape_distillate_bg.xml │ │ ├── shape_divider_col.xml │ │ ├── shape_divider_dash.xml │ │ ├── shape_divider_row.xml │ │ ├── shape_frame_tag.xml │ │ ├── shape_hot_bg.xml │ │ ├── shape_red.xml │ │ └── shape_unclick.xml │ │ ├── layout │ │ ├── activity_base_tab.xml │ │ ├── activity_bilboard.xml │ │ ├── activity_book_detail.xml │ │ ├── activity_book_discussion.xml │ │ ├── activity_book_list.xml │ │ ├── activity_book_sort.xml │ │ ├── activity_book_sort_list.xml │ │ ├── activity_community.xml │ │ ├── activity_discussion_detail.xml │ │ ├── activity_file_system.xml │ │ ├── activity_main.xml │ │ ├── activity_more_setting.xml │ │ ├── activity_read.xml │ │ ├── activity_refresh_list.xml │ │ ├── activity_search.xml │ │ ├── activity_splash.xml │ │ ├── activity_test.xml │ │ ├── dialog_collect_tip.xml │ │ ├── dialog_delete.xml │ │ ├── dialog_read_setting.xml │ │ ├── dialog_sex_choose.xml │ │ ├── footer_book_shelf.xml │ │ ├── fragment_bookshelf.xml │ │ ├── fragment_community.xml │ │ ├── fragment_file_category.xml │ │ ├── fragment_find.xml │ │ ├── fragment_local_book.xml │ │ ├── fragment_refresh_list.xml │ │ ├── fragment_scroll_refresh_list.xml │ │ ├── header_book_list_detail.xml │ │ ├── header_disc_detail.xml │ │ ├── header_disc_review_detail.xml │ │ ├── item_billboard_group.xml │ │ ├── item_billborad_child.xml │ │ ├── item_book_brief.xml │ │ ├── item_book_list_info.xml │ │ ├── item_category.xml │ │ ├── item_coll_book.xml │ │ ├── item_comment.xml │ │ ├── item_disc_comment.xml │ │ ├── item_disc_review.xml │ │ ├── item_download.xml │ │ ├── item_file.xml │ │ ├── item_horizon_tag.xml │ │ ├── item_hot_comment.xml │ │ ├── item_keyword.xml │ │ ├── item_read_bg.xml │ │ ├── item_search_book.xml │ │ ├── item_section.xml │ │ ├── item_selector.xml │ │ ├── item_sort.xml │ │ ├── item_tag_child.xml │ │ ├── item_tag_group.xml │ │ ├── layout_disc_detail.xml │ │ ├── layout_disc_detail_comment.xml │ │ ├── layout_scroll_refresh.xml │ │ ├── scroll_title_indicator.xml │ │ ├── toolbar.xml │ │ ├── view_empty.xml │ │ ├── view_empty_book_shelf.xml │ │ ├── view_error.xml │ │ ├── view_load_more.xml │ │ ├── view_loading.xml │ │ ├── view_net_error.xml │ │ ├── view_nomore.xml │ │ ├── view_refresh_tip.xml │ │ └── view_selector.xml │ │ ├── menu │ │ ├── menu_main.xml │ │ └── menu_search.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ ├── .DS_Store │ │ ├── bg_splash.jpg │ │ ├── ic_launcher.png │ │ └── logo.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v19 │ │ └── styles.xml │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ ├── values-zh-rTW │ │ └── strings.xml │ │ └── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── ids.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ ├── styles_text.xml │ │ └── styles_widget.xml │ └── test │ └── java │ └── com │ └── example │ └── newbiechen │ └── ireader │ ├── DateConvertTest.java │ ├── ExampleUnitTest.java │ └── ListTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── projectFilesBackup └── .idea │ └── workspace.xml ├── screenshot ├── download.gif ├── load_local_file.gif └── reader.gif ├── settings.gradle └── versions.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Built application files 3 | *.apk 4 | *.ap_ 5 | 6 | # Files for the ART/Dalvik VM 7 | *.dex 8 | 9 | # Java class files 10 | *.class 11 | 12 | # Generated files 13 | bin/ 14 | gen/ 15 | out/ 16 | 17 | # Gradle files 18 | .gradle/ 19 | build/ 20 | 21 | # Local configuration file (sdk path, etc) 22 | local.properties 23 | 24 | # Proguard folder generated by Eclipse 25 | proguard/ 26 | 27 | # Log Files 28 | *.log 29 | 30 | # Android Studio Navigation editor temp files 31 | .navigation/ 32 | 33 | # Android Studio captures folder 34 | captures/ 35 | 36 | # Intellij 37 | *.iml 38 | .idea/workspace.xml 39 | .idea/tasks.xml 40 | .idea/gradle.xml 41 | .idea/dictionaries 42 | .idea/libraries 43 | 44 | # Keystore files 45 | *.jks 46 | 47 | # External native build folder generated in Android Studio 2.2 and later 48 | .externalNativeBuild 49 | 50 | # Google Services (e.g. APIs or Firebase) 51 | google-services.json 52 | 53 | # Freeline 54 | freeline.py 55 | freeline/ 56 | freeline_project_description.json 57 | 58 | # note 59 | app/daily 60 | 61 | # ssh 62 | .ssh/ 63 | app/libs/ 64 | .DS_Store 65 | /.ssh/ 66 | -------------------------------------------------------------------------------- /.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /.idea/caches/gradle_models.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/.idea/caches/gradle_models.ser -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 GuangXiang Chen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /home/newbiechen/Android/Sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more detail, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/example/newbiechen/ireader/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.example.newbiechen.ireader", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/App.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.os.Build; 7 | 8 | import com.example.newbiechen.ireader.service.DownloadService; 9 | import com.squareup.leakcanary.LeakCanary; 10 | 11 | /** 12 | * Created by newbiechen on 17-4-15. 13 | */ 14 | 15 | public class App extends Application { 16 | private static Context sInstance; 17 | 18 | @Override 19 | public void onCreate() { 20 | super.onCreate(); 21 | sInstance = this; 22 | 23 | // TODO:暂时没空适配高版本 24 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { 25 | startService(new Intent(getContext(), DownloadService.class)); 26 | } 27 | 28 | // 初始化内存分析工具 29 | if (!LeakCanary.isInAnalyzerProcess(this)) { 30 | LeakCanary.install(this); 31 | } 32 | } 33 | 34 | public static Context getContext() { 35 | return sInstance; 36 | } 37 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/event/BookSubSortEvent.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.event; 2 | 3 | /** 4 | * Created by newbiechen on 17-5-5. 5 | */ 6 | 7 | public class BookSubSortEvent { 8 | public String bookSubSort; 9 | 10 | public BookSubSortEvent(String bookSubSort){ 11 | this.bookSubSort = bookSubSort; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/event/DeleteResponseEvent.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.event; 2 | 3 | import com.example.newbiechen.ireader.model.bean.CollBookBean; 4 | 5 | /** 6 | * Created by newbiechen on 17-5-27. 7 | */ 8 | 9 | public class DeleteResponseEvent { 10 | public boolean isDelete; 11 | public CollBookBean collBook; 12 | public DeleteResponseEvent(boolean isDelete,CollBookBean collBook){ 13 | this.isDelete = isDelete; 14 | this.collBook = collBook; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/event/DeleteTaskEvent.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.event; 2 | 3 | import com.example.newbiechen.ireader.model.bean.CollBookBean; 4 | 5 | /** 6 | * Created by newbiechen on 17-5-27. 7 | */ 8 | 9 | public class DeleteTaskEvent { 10 | public CollBookBean collBook; 11 | 12 | public DeleteTaskEvent(CollBookBean collBook){ 13 | this.collBook = collBook; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/event/DownloadMessage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.event; 2 | 3 | /** 4 | * Created by newbiechen on 17-5-10. 5 | * 下载进度事件 6 | */ 7 | 8 | public class DownloadMessage { 9 | 10 | public String message; 11 | 12 | public DownloadMessage(String message){ 13 | this.message = message; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/event/RecommendBookEvent.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.event; 2 | 3 | /** 4 | * Created by newbiechen on 17-5-8. 5 | */ 6 | 7 | public class RecommendBookEvent { 8 | public String sex; 9 | 10 | public RecommendBookEvent(String sex){ 11 | this.sex = sex; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/event/SelectorEvent.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.event; 2 | 3 | import com.example.newbiechen.ireader.model.flag.BookDistillate; 4 | import com.example.newbiechen.ireader.model.flag.BookSort; 5 | import com.example.newbiechen.ireader.model.flag.BookType; 6 | import com.example.newbiechen.ireader.utils.Constant; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-21. 10 | */ 11 | 12 | public class SelectorEvent { 13 | 14 | public BookDistillate distillate; 15 | 16 | public BookType type; 17 | 18 | public BookSort sort; 19 | 20 | public SelectorEvent(BookDistillate distillate, 21 | BookType type, 22 | BookSort sort) { 23 | this.distillate = distillate; 24 | this.type = type; 25 | this.sort = sort; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/BaseBean.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean; 2 | 3 | /** 4 | * Created by newbiechen on 17-4-20. 5 | */ 6 | 7 | public class BaseBean { 8 | public boolean ok; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/BookHelpfulBean.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean; 2 | 3 | import org.greenrobot.greendao.annotation.Entity; 4 | import org.greenrobot.greendao.annotation.Id; 5 | import org.greenrobot.greendao.annotation.Generated; 6 | 7 | /** 8 | * Created by newbiechen on 17-4-26. 9 | */ 10 | @Entity 11 | public class BookHelpfulBean { 12 | /** 13 | * total : 1 14 | * no : 5 15 | * yes : 6 16 | */ 17 | @Id 18 | private String _id; 19 | 20 | private int total; 21 | private int no; 22 | private int yes; 23 | 24 | @Generated(hash = 1641622044) 25 | public BookHelpfulBean(String _id, int total, int no, int yes) { 26 | this._id = _id; 27 | this.total = total; 28 | this.no = no; 29 | this.yes = yes; 30 | } 31 | 32 | 33 | @Generated(hash = 534892841) 34 | public BookHelpfulBean() { 35 | } 36 | 37 | public int getTotal() { 38 | return total; 39 | } 40 | 41 | 42 | public String get_id() { 43 | return _id; 44 | } 45 | 46 | public void set_id(String _id) { 47 | this._id = _id; 48 | } 49 | 50 | public void setTotal(int total) { 51 | this.total = total; 52 | } 53 | 54 | public int getNo() { 55 | return no; 56 | } 57 | 58 | public void setNo(int no) { 59 | this.no = no; 60 | } 61 | 62 | public int getYes() { 63 | return yes; 64 | } 65 | 66 | public void setYes(int yes) { 67 | this.yes = yes; 68 | } 69 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/BookRecordBean.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean; 2 | 3 | import org.greenrobot.greendao.annotation.Entity; 4 | import org.greenrobot.greendao.annotation.Id; 5 | import org.greenrobot.greendao.annotation.Generated; 6 | 7 | /** 8 | * Created by newbiechen on 17-5-20. 9 | */ 10 | @Entity 11 | public class BookRecordBean{ 12 | //所属的书的id 13 | @Id 14 | private String bookId; 15 | //阅读到了第几章 16 | private int chapter; 17 | //当前的页码 18 | private int pagePos; 19 | 20 | @Generated(hash = 340380968) 21 | public BookRecordBean(String bookId, int chapter, int pagePos) { 22 | this.bookId = bookId; 23 | this.chapter = chapter; 24 | this.pagePos = pagePos; 25 | } 26 | 27 | @Generated(hash = 398068002) 28 | public BookRecordBean() { 29 | } 30 | 31 | public String getBookId() { 32 | return bookId; 33 | } 34 | 35 | public void setBookId(String bookId) { 36 | this.bookId = bookId; 37 | } 38 | 39 | public int getChapter() { 40 | return chapter; 41 | } 42 | 43 | public void setChapter(int chapter) { 44 | this.chapter = chapter; 45 | } 46 | 47 | public int getPagePos() { 48 | return pagePos; 49 | } 50 | 51 | public void setPagePos(int pagePos) { 52 | this.pagePos = pagePos; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/BookSortBean.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean; 2 | 3 | import org.greenrobot.greendao.annotation.Entity; 4 | 5 | /** 6 | * Created by newbiechen on 17-4-23. 7 | */ 8 | public class BookSortBean { 9 | /** 10 | * name : 玄幻 11 | * bookCount : 437252 12 | */ 13 | private String name; 14 | private int bookCount; 15 | 16 | public String getName() { 17 | return name; 18 | } 19 | 20 | public void setName(String name) { 21 | this.name = name; 22 | } 23 | 24 | public int getBookCount() { 25 | return bookCount; 26 | } 27 | 28 | public void setBookCount(int bookCount) { 29 | this.bookCount = bookCount; 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/BookTagBean.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by newbiechen on 17-5-1. 7 | */ 8 | 9 | public class BookTagBean { 10 | /** 11 | * name : 时空 12 | * tags : ["都市","古代","科幻","架空","重生","未来","穿越","历史","快穿","末世","异界位面"] 13 | */ 14 | 15 | private String name; 16 | private List tags; 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | 26 | public List getTags() { 27 | return tags; 28 | } 29 | 30 | public void setTags(List tags) { 31 | this.tags = tags; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/DetailBean.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by newbiechen on 17-4-29. 7 | */ 8 | 9 | public class DetailBean { 10 | private T detail; 11 | private List bestComments; 12 | private List comments; 13 | 14 | public DetailBean(T details, List bestComments, List comments) { 15 | this.detail = details; 16 | this.bestComments = bestComments; 17 | this.comments = comments; 18 | } 19 | 20 | public T getDetail() { 21 | return detail; 22 | } 23 | 24 | public List getBestComments() { 25 | return bestComments; 26 | } 27 | 28 | public List getComments() { 29 | return comments; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/SectionBean.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean; 2 | 3 | import android.support.annotation.DrawableRes; 4 | import android.support.annotation.StringRes; 5 | 6 | import com.example.newbiechen.ireader.App; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-16. 10 | */ 11 | 12 | public class SectionBean { 13 | private String name; 14 | private int drawableId; 15 | 16 | public SectionBean(String name, @DrawableRes int drawableId){ 17 | this.name = name; 18 | this.drawableId = drawableId; 19 | } 20 | 21 | public SectionBean(@StringRes int strRes, @DrawableRes int drawableId){ 22 | this.name = App.getContext() 23 | .getString(strRes); 24 | 25 | this.drawableId = drawableId; 26 | } 27 | 28 | public String getName() { 29 | return name; 30 | } 31 | 32 | public void setName(String name) { 33 | this.name = name; 34 | } 35 | 36 | public int getDrawableId() { 37 | return drawableId; 38 | } 39 | 40 | public void setDrawableId(int drawableId) { 41 | this.drawableId = drawableId; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/packages/BookCommentPackage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean.packages; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BaseBean; 4 | import com.example.newbiechen.ireader.model.bean.BookCommentBean; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-20. 10 | */ 11 | public class BookCommentPackage extends BaseBean { 12 | 13 | private List posts; 14 | 15 | public List getPosts() { 16 | return posts; 17 | } 18 | 19 | public void setPosts(List posts) { 20 | this.posts = posts; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/packages/BookHelpsPackage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean.packages; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BaseBean; 4 | import com.example.newbiechen.ireader.model.bean.BookHelpsBean; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-20. 10 | */ 11 | 12 | public class BookHelpsPackage extends BaseBean { 13 | 14 | private List helps; 15 | 16 | public List getHelps() { 17 | return helps; 18 | } 19 | 20 | public void setHelps(List helps) { 21 | this.helps = helps; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/packages/BookReviewPackage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean.packages; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BaseBean; 4 | import com.example.newbiechen.ireader.model.bean.BookReviewBean; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-21. 10 | */ 11 | 12 | public class BookReviewPackage extends BaseBean { 13 | 14 | private List reviews; 15 | 16 | public List getReviews() { 17 | return reviews; 18 | } 19 | 20 | public void setReviews(List reviews) { 21 | this.reviews = reviews; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/packages/BookSortPackage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean.packages; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BaseBean; 4 | import com.example.newbiechen.ireader.model.bean.BookSortBean; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-23. 10 | */ 11 | 12 | public class BookSortPackage extends BaseBean { 13 | 14 | private List male; 15 | private List female; 16 | 17 | public List getMale() { 18 | return male; 19 | } 20 | 21 | public void setMale(List male) { 22 | this.male = male; 23 | } 24 | 25 | public List getFemale() { 26 | return female; 27 | } 28 | 29 | public void setFemale(List female) { 30 | this.female = female; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/packages/BookTagPackage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean.packages; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BaseBean; 4 | import com.example.newbiechen.ireader.model.bean.BookTagBean; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-1. 10 | */ 11 | 12 | public class BookTagPackage extends BaseBean { 13 | 14 | private List data; 15 | 16 | public List getData() { 17 | return data; 18 | } 19 | 20 | public void setData(List data) { 21 | this.data = data; 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/packages/HotCommentPackage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean.packages; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BaseBean; 4 | import com.example.newbiechen.ireader.model.bean.HotCommentBean; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-4. 10 | */ 11 | 12 | public class HotCommentPackage extends BaseBean { 13 | 14 | private List reviews; 15 | 16 | public List getReviews() { 17 | return reviews; 18 | } 19 | 20 | public void setReviews(List reviews) { 21 | this.reviews = reviews; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/packages/HotWordPackage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean.packages; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BaseBean; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by newbiechen on 17-6-2. 9 | */ 10 | 11 | public class HotWordPackage extends BaseBean { 12 | 13 | 14 | private List hotWords; 15 | 16 | public List getHotWords() { 17 | return hotWords; 18 | } 19 | 20 | public void setHotWords(List hotWords) { 21 | this.hotWords = hotWords; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/packages/KeyWordPackage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean.packages; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BaseBean; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by newbiechen on 17-6-2. 9 | */ 10 | 11 | public class KeyWordPackage extends BaseBean { 12 | 13 | private List keywords; 14 | 15 | public List getKeywords() { 16 | return keywords; 17 | } 18 | 19 | public void setKeywords(List keywords) { 20 | this.keywords = keywords; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/bean/packages/RecommendBookPackage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.bean.packages; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BaseBean; 4 | import com.example.newbiechen.ireader.model.bean.CollBookBean; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-8. 10 | */ 11 | 12 | public class RecommendBookPackage extends BaseBean { 13 | 14 | private List books; 15 | 16 | public List getBooks() { 17 | return books; 18 | } 19 | 20 | public void setBooks(List books) { 21 | this.books = books; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/BookConvert.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | /** 4 | * Created by newbiechen on 17-4-24. 5 | * 转换显示的名字和网络中的名字 6 | */ 7 | 8 | interface BookConvert { 9 | String getTypeName(); 10 | String getNetName(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/BookDistillate.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | /** 4 | * Created by newbiechen on 17-4-24. 5 | * 6 | */ 7 | 8 | public enum BookDistillate implements BookConvert{ 9 | ALL("全部","","normal"), 10 | BOUTIQUES("精品","true","distillate"); 11 | 12 | String typeName; 13 | String netName; 14 | String dbName; 15 | BookDistillate(String typeName, String netName, String dbName){ 16 | this.typeName = typeName; 17 | this.netName = netName; 18 | this.dbName = dbName; 19 | } 20 | 21 | @Override 22 | public String getTypeName(){ 23 | return typeName; 24 | } 25 | 26 | @Override 27 | public String getNetName(){ 28 | return netName; 29 | } 30 | 31 | public String getDbName(){ 32 | return dbName; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/BookFormat.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | /** 4 | * Created by newbiechen on 2018/1/14. 5 | */ 6 | 7 | public enum BookFormat { 8 | TXT("txt"), PDF("pdf"), EPUB("epub"), NB("nb"), NONE("none"); 9 | 10 | private String name; 11 | 12 | private BookFormat(String name) { 13 | this.name = name; 14 | } 15 | 16 | public String getName() { 17 | return name; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/BookListType.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | import android.support.annotation.StringRes; 4 | 5 | import com.example.newbiechen.ireader.App; 6 | import com.example.newbiechen.ireader.R; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-1. 10 | */ 11 | 12 | public enum BookListType{ 13 | HOT(R.string.nb_fragment_book_list_hot,"last-seven-days"), 14 | NEWEST(R.string.nb_fragment_book_list_newest,"created"), 15 | COLLECT(R.string.nb_fragment_book_list_collect,"collectorCount") 16 | ; 17 | private String typeName; 18 | private String netName; 19 | 20 | BookListType(@StringRes int typeName, String netName){ 21 | this.typeName = App.getContext().getString(typeName); 22 | this.netName = netName; 23 | } 24 | 25 | public String getTypeName(){ 26 | return typeName; 27 | } 28 | 29 | public String getNetName(){ 30 | return netName; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/BookSelection.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Arrays; 5 | import java.util.List; 6 | 7 | 8 | /** 9 | * Created by newbiechen on 17-4-24. 10 | */ 11 | 12 | public enum BookSelection { 13 | 14 | DISTILLATE(BookDistillate.values()), 15 | SORT_TYPE(BookSort.values()), 16 | BOOK_TYPE(BookType.values()); 17 | 18 | private BookConvert [] converts; 19 | BookSelection(BookConvert ...converts){ 20 | this.converts = converts; 21 | } 22 | 23 | public List getTypeParams(){ 24 | List params = new ArrayList<>(); 25 | for (BookConvert convert : converts){ 26 | params.add(convert.getTypeName()); 27 | } 28 | return params; 29 | } 30 | 31 | public List getNetParams(){ 32 | List params = new ArrayList<>(); 33 | for (BookConvert convert : converts){ 34 | params.add(convert.getNetName()); 35 | } 36 | return params; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/BookSort.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | /** 4 | * Created by newbiechen on 17-4-24. 5 | * ("默认排序","最新发布","最多评论"), 6 | */ 7 | 8 | public enum BookSort implements BookConvert{ 9 | DEFAULT("默认排序","updated","Updated"), 10 | CREATED("最新发布","created","Created"), 11 | HELPFUL("最多推荐","helpful","LikeCount"), 12 | COMMENT_COUNT("最多评论","comment-count","CommentCount"); 13 | 14 | String typeName; 15 | String netName; 16 | String dbName; 17 | BookSort(String typeName, String netName,String dbName){ 18 | this.typeName = typeName; 19 | this.netName = netName; 20 | this.dbName = dbName; 21 | } 22 | 23 | @Override 24 | public String getTypeName(){ 25 | return typeName; 26 | } 27 | 28 | @Override 29 | public String getNetName(){ 30 | return netName; 31 | } 32 | 33 | public String getDbName(){ 34 | return dbName; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/BookSortListType.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | /** 4 | * Created by newbiechen on 17-5-3. 5 | */ 6 | 7 | public enum BookSortListType { 8 | HOT("热门","hot"), 9 | NEW("新书","new"), 10 | REPUTATION("好评","reputation"), 11 | OVER("完结","over"); 12 | 13 | private String typeName; 14 | private String netName; 15 | BookSortListType(String typeName,String netName){ 16 | this.typeName = typeName; 17 | this.netName = netName; 18 | } 19 | 20 | public String getTypeName() { 21 | return typeName; 22 | } 23 | 24 | public String getNetName() { 25 | return netName; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/BookType.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | /** 4 | * Created by newbiechen on 17-4-24. 5 | * 6 | */ 7 | 8 | public enum BookType implements BookConvert{ 9 | ALL("全部类型","all"), 10 | XHQH("玄幻奇幻","xhqh"), 11 | WXXX("武侠仙侠","wxxx"), 12 | DSYN("都市异能","dsyn"), 13 | LSJS("历史军事","lsjs"), 14 | YXJJ("游戏竞技","yxjj"), 15 | KHLY("科幻灵异","khly"), 16 | CYJK("穿越架空","cyjk"), 17 | HMZC("豪门总裁","hmzc"), 18 | XDYQ("现代言情","xdyq"), 19 | GDYQ("古代言情","gdyq"), 20 | HXYQ("幻想言情","hxyq"), 21 | DMTR("耽美同人","dmtr"); 22 | 23 | String typeName; 24 | String netName; 25 | 26 | BookType(String typeName, String netName){ 27 | this.typeName = typeName; 28 | this.netName = netName; 29 | } 30 | 31 | @Override 32 | public String getTypeName(){ 33 | return typeName; 34 | } 35 | 36 | @Override 37 | public String getNetName() { 38 | return netName; 39 | } 40 | } 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/CommunityType.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | import android.support.annotation.DrawableRes; 4 | import android.support.annotation.StringRes; 5 | 6 | import com.example.newbiechen.ireader.App; 7 | import com.example.newbiechen.ireader.R; 8 | 9 | /** 10 | * Created by newbiechen on 17-4-24. 11 | */ 12 | 13 | public enum CommunityType { 14 | 15 | COMMENT(R.string.nb_fragment_community_comment, "ramble",R.drawable.ic_section_comment), 16 | REVIEW(R.string.nb_fragment_community_discussion,"",R.drawable.ic_section_discuss), 17 | HELP(R.string.nb_fragment_community_help,"",R.drawable.ic_section_help), 18 | GIRL(R.string.nb_fragment_community_girl,"girl",R.drawable.ic_section_girl), 19 | COMPOSE(R.string.nb_fragment_community_compose,"original",R.drawable.ic_section_compose); 20 | 21 | private String typeName; 22 | private String netName; 23 | private int iconId; 24 | CommunityType(@StringRes int typeId,String netName,@DrawableRes int iconId){ 25 | this.typeName = App.getContext().getResources().getString(typeId); 26 | this.netName = netName; 27 | this.iconId = iconId; 28 | } 29 | 30 | public String getTypeName(){ 31 | return typeName; 32 | } 33 | 34 | public String getNetName(){ 35 | return netName; 36 | } 37 | 38 | public int getIconId(){ 39 | return iconId; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/flag/FindType.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.flag; 2 | 3 | import android.support.annotation.DrawableRes; 4 | import android.support.annotation.StringRes; 5 | 6 | import com.example.newbiechen.ireader.App; 7 | import com.example.newbiechen.ireader.R; 8 | 9 | /** 10 | * Created by newbiechen on 17-4-25. 11 | */ 12 | 13 | public enum FindType { 14 | TOP(R.string.nb_fragment_find_top,R.drawable.ic_section_top), 15 | TOPIC(R.string.nb_fragment_find_topic,R.drawable.ic_section_topic), 16 | SORT(R.string.nb_fragment_find_sort,R.drawable.ic_section_sort), 17 | LISTEN(R.string.nb_fragment_find_listen,R.drawable.ic_section_listen); 18 | ; 19 | private String typeName; 20 | private int iconId; 21 | 22 | private FindType(@StringRes int typeNameId,@DrawableRes int iconId){ 23 | this.typeName = App.getContext().getResources().getString(typeNameId); 24 | this.iconId = iconId; 25 | } 26 | 27 | public String getTypeName(){ 28 | return typeName; 29 | } 30 | 31 | public int getIconId(){ 32 | return iconId; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/local/DeleteDbHelper.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.local; 2 | 3 | import com.example.newbiechen.ireader.model.bean.AuthorBean; 4 | import com.example.newbiechen.ireader.model.bean.ReviewBookBean; 5 | import com.example.newbiechen.ireader.model.bean.BookCommentBean; 6 | import com.example.newbiechen.ireader.model.bean.BookHelpfulBean; 7 | import com.example.newbiechen.ireader.model.bean.BookHelpsBean; 8 | import com.example.newbiechen.ireader.model.bean.BookReviewBean; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * Created by newbiechen on 17-4-28. 14 | */ 15 | 16 | public interface DeleteDbHelper { 17 | void deleteBookComments(List beans); 18 | void deleteBookReviews(List beans); 19 | void deleteBookHelps(List beans); 20 | void deleteAuthors(List beans); 21 | void deleteBooks(List beans); 22 | void deleteBookHelpful(List beans); 23 | void deleteAll(); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/local/GetDbHelper.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.local; 2 | 3 | import com.example.newbiechen.ireader.model.bean.AuthorBean; 4 | import com.example.newbiechen.ireader.model.bean.DownloadTaskBean; 5 | import com.example.newbiechen.ireader.model.bean.packages.BillboardPackage; 6 | import com.example.newbiechen.ireader.model.bean.ReviewBookBean; 7 | import com.example.newbiechen.ireader.model.bean.BookCommentBean; 8 | import com.example.newbiechen.ireader.model.bean.BookHelpfulBean; 9 | import com.example.newbiechen.ireader.model.bean.BookHelpsBean; 10 | import com.example.newbiechen.ireader.model.bean.BookReviewBean; 11 | import com.example.newbiechen.ireader.model.bean.packages.BookSortPackage; 12 | 13 | import java.util.List; 14 | 15 | import io.reactivex.Single; 16 | 17 | /** 18 | * Created by newbiechen on 17-4-28. 19 | */ 20 | 21 | public interface GetDbHelper { 22 | Single> getBookComments(String block, String sort, int start, int limited, String distillate); 23 | Single> getBookHelps(String sort, int start, int limited, String distillate); 24 | Single> getBookReviews(String sort, String bookType, int start, int limited, String distillate); 25 | BookSortPackage getBookSortPackage(); 26 | BillboardPackage getBillboardPackage(); 27 | 28 | AuthorBean getAuthor(String id); 29 | ReviewBookBean getReviewBook(String id); 30 | BookHelpfulBean getBookHelpful(String id); 31 | 32 | /******************************/ 33 | List getDownloadTaskList(); 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/local/MyOpenHelper.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.local; 2 | 3 | import android.content.Context; 4 | import android.database.sqlite.SQLiteDatabase; 5 | 6 | import com.example.newbiechen.ireader.model.gen.DaoMaster; 7 | import com.example.newbiechen.ireader.model.local.update.MigrationHelper; 8 | import com.example.newbiechen.ireader.model.local.update.Update2Helper; 9 | 10 | import org.greenrobot.greendao.database.Database; 11 | 12 | /** 13 | * Created by newbiechen on 2017/10/9. 14 | */ 15 | 16 | public class MyOpenHelper extends DaoMaster.DevOpenHelper{ 17 | public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) { 18 | super(context, name, factory); 19 | } 20 | 21 | @Override 22 | public void onUpgrade(Database db, int oldVersion, int newVersion) { 23 | // 跨版本更新策略 24 | switch (oldVersion){ 25 | case 1: 26 | // 暂无 1.0 27 | case 2: 28 | // 更新数据到 3.0 29 | Update2Helper.getInstance().update(db); 30 | default: 31 | break; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/local/SaveDbHelper.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.local; 2 | 3 | import com.example.newbiechen.ireader.model.bean.AuthorBean; 4 | import com.example.newbiechen.ireader.model.bean.DownloadTaskBean; 5 | import com.example.newbiechen.ireader.model.bean.packages.BillboardPackage; 6 | import com.example.newbiechen.ireader.model.bean.ReviewBookBean; 7 | import com.example.newbiechen.ireader.model.bean.BookCommentBean; 8 | import com.example.newbiechen.ireader.model.bean.BookHelpfulBean; 9 | import com.example.newbiechen.ireader.model.bean.BookHelpsBean; 10 | import com.example.newbiechen.ireader.model.bean.BookReviewBean; 11 | import com.example.newbiechen.ireader.model.bean.packages.BookSortPackage; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * Created by newbiechen on 17-4-28. 17 | */ 18 | 19 | public interface SaveDbHelper { 20 | void saveBookComments(List beans); 21 | void saveBookHelps(List beans); 22 | void saveBookReviews(List beans); 23 | void saveAuthors(List beans); 24 | void saveBooks(List beans); 25 | void saveBookHelpfuls(List beans); 26 | 27 | void saveBookSortPackage(BookSortPackage bean); 28 | void saveBillboardPackage(BillboardPackage bean); 29 | /*************DownloadTask*********************/ 30 | void saveDownloadTask(DownloadTaskBean bean); 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/model/local/Void.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.model.local; 2 | 3 | /** 4 | * Created by newbiechen on 17-5-27. 5 | */ 6 | 7 | public final class Void { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/BillBookPresenter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter; 2 | 3 | import android.util.Log; 4 | 5 | import com.example.newbiechen.ireader.model.remote.RemoteRepository; 6 | import com.example.newbiechen.ireader.presenter.contract.BillBookContract; 7 | import com.example.newbiechen.ireader.ui.base.RxPresenter; 8 | import com.example.newbiechen.ireader.utils.LogUtils; 9 | 10 | import io.reactivex.android.schedulers.AndroidSchedulers; 11 | import io.reactivex.disposables.Disposable; 12 | import io.reactivex.schedulers.Schedulers; 13 | 14 | /** 15 | * Created by newbiechen on 17-5-3. 16 | */ 17 | 18 | public class BillBookPresenter extends RxPresenter 19 | implements BillBookContract.Presenter { 20 | private static final String TAG = "BillBookPresenter"; 21 | @Override 22 | public void refreshBookBrief(String billId) { 23 | Disposable remoteDisp = RemoteRepository.getInstance() 24 | .getBillBooks(billId) 25 | .subscribeOn(Schedulers.io()) 26 | .observeOn(AndroidSchedulers.mainThread()) 27 | .subscribe( 28 | (beans)-> { 29 | mView.finishRefresh(beans); 30 | mView.complete(); 31 | } 32 | , 33 | (e) ->{ 34 | mView.showError(); 35 | LogUtils.e(e); 36 | } 37 | ); 38 | addDisposable(remoteDisp); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/BillBookContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BillBookBean; 4 | import com.example.newbiechen.ireader.ui.base.BaseContract; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-3. 10 | */ 11 | 12 | public interface BillBookContract { 13 | interface View extends BaseContract.BaseView{ 14 | void finishRefresh(List beans); 15 | } 16 | 17 | interface Presenter extends BaseContract.BasePresenter{ 18 | void refreshBookBrief(String billId); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/BillboardContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.packages.BillboardPackage; 4 | import com.example.newbiechen.ireader.ui.base.BaseContract; 5 | 6 | /** 7 | * Created by newbiechen on 17-4-23. 8 | */ 9 | 10 | public interface BillboardContract { 11 | 12 | interface View extends BaseContract.BaseView{ 13 | void finishRefresh(BillboardPackage beans); 14 | } 15 | 16 | interface Presenter extends BaseContract.BasePresenter{ 17 | void loadBillboardList(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/BookDetailContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BookDetailBean; 4 | import com.example.newbiechen.ireader.model.bean.BookListBean; 5 | import com.example.newbiechen.ireader.model.bean.CollBookBean; 6 | import com.example.newbiechen.ireader.model.bean.HotCommentBean; 7 | import com.example.newbiechen.ireader.ui.base.BaseContract; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * Created by newbiechen on 17-5-4. 13 | */ 14 | 15 | public interface BookDetailContract { 16 | interface View extends BaseContract.BaseView{ 17 | void finishRefresh(BookDetailBean bean); 18 | void finishHotComment(List beans); 19 | void finishRecommendBookList(List beans); 20 | 21 | void waitToBookShelf(); 22 | void errorToBookShelf(); 23 | void succeedToBookShelf(); 24 | } 25 | 26 | interface Presenter extends BaseContract.BasePresenter{ 27 | void refreshBookDetail(String bookId); 28 | //添加到书架上 29 | void addToBookShelf(CollBookBean collBook); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/BookListContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BookListBean; 4 | import com.example.newbiechen.ireader.model.bean.BookListDetailBean; 5 | import com.example.newbiechen.ireader.model.flag.BookListType; 6 | import com.example.newbiechen.ireader.ui.base.BaseContract; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * Created by newbiechen on 17-5-1. 12 | */ 13 | 14 | public interface BookListContract { 15 | interface View extends BaseContract.BaseView{ 16 | void finishRefresh(List beans); 17 | void finishLoading(List beans); 18 | void showLoadError(); 19 | } 20 | 21 | interface Presenter extends BaseContract.BasePresenter{ 22 | void refreshBookList(BookListType type, String tag,int start, int limited); 23 | void loadBookList(BookListType type, String tag,int start, int limited); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/BookListDetailContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BookListDetailBean; 4 | import com.example.newbiechen.ireader.ui.base.BaseContract; 5 | 6 | /** 7 | * Created by newbiechen on 17-5-1. 8 | */ 9 | 10 | public interface BookListDetailContract { 11 | 12 | interface View extends BaseContract.BaseView{ 13 | void finishRefresh(BookListDetailBean bean); 14 | } 15 | 16 | interface Presenter extends BaseContract.BasePresenter{ 17 | void refreshBookListDetail(String detailId); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/BookShelfContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.CollBookBean; 4 | import com.example.newbiechen.ireader.model.bean.DownloadTaskBean; 5 | import com.example.newbiechen.ireader.ui.base.BaseContract; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by newbiechen on 17-5-8. 11 | */ 12 | 13 | public interface BookShelfContract { 14 | 15 | interface View extends BaseContract.BaseView{ 16 | void finishRefresh(List collBookBeans); 17 | void finishUpdate(); 18 | void showErrorTip(String error); 19 | } 20 | 21 | interface Presenter extends BaseContract.BasePresenter{ 22 | void refreshCollBooks(); 23 | void createDownloadTask(CollBookBean collBookBean); 24 | void updateCollBooks(List collBookBeans); 25 | void loadRecommendBooks(String gender); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/BookSortContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.packages.BookSortPackage; 4 | import com.example.newbiechen.ireader.model.bean.packages.BookSubSortPackage; 5 | import com.example.newbiechen.ireader.ui.base.BaseContract; 6 | 7 | /** 8 | * Created by newbiechen on 17-4-23. 9 | */ 10 | 11 | public interface BookSortContract { 12 | 13 | interface View extends BaseContract.BaseView{ 14 | void finishRefresh(BookSortPackage sortPackage, BookSubSortPackage subSortPackage); 15 | } 16 | 17 | interface Presenter extends BaseContract.BasePresenter{ 18 | void refreshSortBean(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/BookSortListContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.SortBookBean; 4 | import com.example.newbiechen.ireader.model.flag.BookSortListType; 5 | import com.example.newbiechen.ireader.ui.base.BaseContract; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by newbiechen on 17-5-3. 11 | */ 12 | 13 | public interface BookSortListContract { 14 | interface View extends BaseContract.BaseView{ 15 | void finishRefresh(List beans); 16 | void finishLoad(List beans); 17 | void showLoadError(); 18 | } 19 | 20 | interface Presenter extends BaseContract.BasePresenter{ 21 | void refreshSortBook(String gender, BookSortListType type, String major, String minor, int start, int limit); 22 | void loadSortBook(String gender,BookSortListType type,String major,String minor,int start,int limit); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/CommentDetailContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.CommentBean; 4 | import com.example.newbiechen.ireader.model.bean.CommentDetailBean; 5 | import com.example.newbiechen.ireader.model.flag.CommunityType; 6 | import com.example.newbiechen.ireader.ui.base.BaseContract; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * Created by newbiechen on 17-4-29. 12 | */ 13 | 14 | public interface CommentDetailContract { 15 | 16 | interface View extends BaseContract.BaseView{ 17 | //全部加载的时候显示 18 | void finishRefresh(CommentDetailBean commentDetail, 19 | List bestComments, List comments); 20 | void finishLoad(List comments); 21 | void showLoadError(); 22 | } 23 | 24 | interface Presenter extends BaseContract.BasePresenter{ 25 | void refreshCommentDetail(String detailId,int start,int limit); 26 | void loadComment(String detailId,int start,int limit); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/DiscCommentContact.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BookCommentBean; 4 | import com.example.newbiechen.ireader.model.flag.BookDistillate; 5 | import com.example.newbiechen.ireader.model.flag.BookSort; 6 | import com.example.newbiechen.ireader.model.flag.CommunityType; 7 | import com.example.newbiechen.ireader.ui.base.BaseContract; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * Created by newbiechen on 17-4-20. 13 | */ 14 | 15 | public interface DiscCommentContact { 16 | 17 | interface View extends BaseContract.BaseView{ 18 | void finishRefresh(List beans); 19 | void finishLoading(List beans); 20 | void showErrorTip(); 21 | } 22 | 23 | interface Presenter extends BaseContract.BasePresenter{ 24 | void firstLoading(CommunityType block, BookSort sort, int start, int limited, BookDistillate distillate); 25 | void refreshComment(CommunityType block, BookSort sort, int start, int limited, BookDistillate distillate); 26 | void loadingComment(CommunityType block, BookSort sort, int start, int limited, BookDistillate distillate); 27 | void saveComment(List beans); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/DiscHelpsContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BookHelpsBean; 4 | import com.example.newbiechen.ireader.model.flag.BookDistillate; 5 | import com.example.newbiechen.ireader.model.flag.BookSort; 6 | import com.example.newbiechen.ireader.ui.base.BaseContract; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * Created by newbiechen on 17-4-21. 12 | */ 13 | 14 | public interface DiscHelpsContract { 15 | 16 | interface View extends BaseContract.BaseView{ 17 | void finishRefresh(List beans); 18 | void finishLoading(List beans); 19 | void showErrorTip(); 20 | } 21 | 22 | interface Presenter extends BaseContract.BasePresenter{ 23 | void firstLoading(BookSort sort, int start, int limited, BookDistillate distillate); 24 | void refreshBookHelps(BookSort sort, int start, int limited, BookDistillate distillate); 25 | void loadingBookHelps(BookSort sort, int start,int limited,BookDistillate distillate); 26 | void saveBookHelps(List beans); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/DiscReviewContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BookReviewBean; 4 | import com.example.newbiechen.ireader.model.flag.BookDistillate; 5 | import com.example.newbiechen.ireader.model.flag.BookSort; 6 | import com.example.newbiechen.ireader.model.flag.BookType; 7 | import com.example.newbiechen.ireader.ui.base.BaseContract; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * Created by newbiechen on 17-4-21. 13 | */ 14 | 15 | public interface DiscReviewContract { 16 | interface View extends BaseContract.BaseView { 17 | void finishRefresh(List beans); 18 | void finishLoading(List beans); 19 | void showErrorTip(); 20 | } 21 | 22 | interface Presenter extends BaseContract.BasePresenter { 23 | void firstLoading(BookSort sort, BookType bookType, int start, int limited, BookDistillate distillate); 24 | void refreshBookReview(BookSort sort, BookType bookType, int start, int limited, BookDistillate distillate); 25 | void loadingBookReview(BookSort sort, BookType bookType, int start, int limited, BookDistillate distillate); 26 | void saveBookReview(List beans); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/HelpsDetailContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.CommentBean; 4 | import com.example.newbiechen.ireader.model.bean.CommentDetailBean; 5 | import com.example.newbiechen.ireader.model.bean.HelpsDetailBean; 6 | import com.example.newbiechen.ireader.ui.base.BaseContract; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * Created by newbiechen on 17-4-30. 12 | */ 13 | 14 | public interface HelpsDetailContract{ 15 | 16 | interface View extends BaseContract.BaseView{ 17 | //全部加载的时候显示 18 | void finishRefresh(HelpsDetailBean commentDetail, 19 | List bestComments, List comments); 20 | void finishLoad(List comments); 21 | void showLoadError(); 22 | } 23 | 24 | interface Presenter extends BaseContract.BasePresenter{ 25 | void refreshHelpsDetail(String detailId,int start,int limit); 26 | void loadComment(String detailId,int start,int limit); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/ReadContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BookChapterBean; 4 | import com.example.newbiechen.ireader.ui.base.BaseContract; 5 | import com.example.newbiechen.ireader.widget.page.TxtChapter; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by newbiechen on 17-5-16. 11 | */ 12 | 13 | public interface ReadContract extends BaseContract{ 14 | interface View extends BaseContract.BaseView { 15 | void showCategory(List bookChapterList); 16 | void finishChapter(); 17 | void errorChapter(); 18 | } 19 | 20 | interface Presenter extends BaseContract.BasePresenter{ 21 | void loadCategory(String bookId); 22 | void loadChapter(String bookId,List bookChapterList); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/ReviewDetailContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.CommentBean; 4 | import com.example.newbiechen.ireader.model.bean.ReviewDetailBean; 5 | import com.example.newbiechen.ireader.ui.base.BaseContract; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by newbiechen on 17-4-30. 11 | */ 12 | 13 | public interface ReviewDetailContract { 14 | 15 | interface View extends BaseContract.BaseView{ 16 | //全部加载的时候显示 17 | void finishRefresh(ReviewDetailBean reviewDetail, 18 | List bestComments, List comments); 19 | void finishLoad(List comments); 20 | void showLoadError(); 21 | } 22 | 23 | interface Presenter extends BaseContract.BasePresenter{ 24 | void refreshReviewDetail(String detailId,int start,int limit); 25 | void loadComment(String detailId,int start,int limit); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/presenter/contract/SearchContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.presenter.contract; 2 | 3 | import com.example.newbiechen.ireader.model.bean.packages.SearchBookPackage; 4 | import com.example.newbiechen.ireader.ui.base.BaseContract; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by newbiechen on 17-6-2. 10 | */ 11 | 12 | public interface SearchContract extends BaseContract { 13 | 14 | interface View extends BaseView{ 15 | void finishHotWords(List hotWords); 16 | void finishKeyWords(List keyWords); 17 | void finishBooks(List books); 18 | 19 | void errorBooks(); 20 | } 21 | 22 | interface Presenter extends BasePresenter{ 23 | void searchHotWord(); 24 | //搜索提示 25 | void searchKeyWord(String query); 26 | //搜索书籍 27 | void searchBook(String query); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/activity/CommunityActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.activity; 2 | 3 | import android.app.Activity; 4 | import android.support.v7.widget.Toolbar; 5 | 6 | import com.example.newbiechen.ireader.R; 7 | import com.example.newbiechen.ireader.ui.base.BaseActivity; 8 | 9 | /** 10 | * Created by newbiechen on 17-5-26. 11 | */ 12 | 13 | public class CommunityActivity extends BaseActivity{ 14 | 15 | @Override 16 | protected int getContentId() { 17 | return R.layout.activity_community; 18 | } 19 | 20 | @Override 21 | protected void setUpToolbar(Toolbar toolbar) { 22 | super.setUpToolbar(toolbar); 23 | getSupportActionBar().setTitle("社区"); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/BillBookAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BillBookBean; 4 | import com.example.newbiechen.ireader.ui.adapter.view.BillBookHolder; 5 | import com.example.newbiechen.ireader.ui.base.adapter.BaseListAdapter; 6 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-3. 10 | */ 11 | 12 | public class BillBookAdapter extends BaseListAdapter { 13 | @Override 14 | protected IViewHolder createViewHolder(int viewType) { 15 | return new BillBookHolder(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/BookListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import com.example.newbiechen.ireader.model.bean.BookListBean; 6 | import com.example.newbiechen.ireader.ui.adapter.view.BookListHolder; 7 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 8 | import com.example.newbiechen.ireader.widget.adapter.WholeAdapter; 9 | 10 | /** 11 | * Created by newbiechen on 17-5-1. 12 | */ 13 | 14 | public class BookListAdapter extends WholeAdapter { 15 | public BookListAdapter() { 16 | } 17 | 18 | public BookListAdapter(Context context, Options options) { 19 | super(context, options); 20 | } 21 | 22 | @Override 23 | protected IViewHolder createViewHolder(int viewType) { 24 | return new BookListHolder(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/BookListDetailAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import com.example.newbiechen.ireader.model.bean.BookListDetailBean; 6 | import com.example.newbiechen.ireader.ui.adapter.view.BookListInfoHolder; 7 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 8 | import com.example.newbiechen.ireader.widget.adapter.WholeAdapter; 9 | 10 | /** 11 | * Created by newbiechen on 17-5-2. 12 | */ 13 | 14 | public class BookListDetailAdapter extends WholeAdapter { 15 | public BookListDetailAdapter(Context context, Options options) { 16 | super(context, options); 17 | } 18 | 19 | @Override 20 | protected IViewHolder createViewHolder(int viewType) { 21 | return new BookListInfoHolder(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/BookSortAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import com.example.newbiechen.ireader.model.bean.BookSortBean; 4 | import com.example.newbiechen.ireader.ui.adapter.view.BookSortHolder; 5 | import com.example.newbiechen.ireader.ui.base.adapter.BaseListAdapter; 6 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-23. 10 | */ 11 | 12 | public class BookSortAdapter extends BaseListAdapter{ 13 | 14 | @Override 15 | protected IViewHolder createViewHolder(int viewType) { 16 | return new BookSortHolder(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/BookSortListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import com.example.newbiechen.ireader.model.bean.SortBookBean; 6 | import com.example.newbiechen.ireader.ui.adapter.view.BookSortListHolder; 7 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 8 | import com.example.newbiechen.ireader.widget.adapter.WholeAdapter; 9 | 10 | /** 11 | * Created by newbiechen on 17-5-3. 12 | */ 13 | 14 | public class BookSortListAdapter extends WholeAdapter{ 15 | public BookSortListAdapter(Context context, Options options) { 16 | super(context, options); 17 | } 18 | 19 | @Override 20 | protected IViewHolder createViewHolder(int viewType) { 21 | return new BookSortListHolder(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/CategoryAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import android.view.View; 4 | import android.view.ViewGroup; 5 | import android.widget.AdapterView; 6 | import android.widget.BaseAdapter; 7 | import android.widget.ListView; 8 | 9 | import com.example.newbiechen.ireader.model.bean.BookChapterBean; 10 | import com.example.newbiechen.ireader.ui.adapter.view.CategoryHolder; 11 | import com.example.newbiechen.ireader.ui.base.EasyAdapter; 12 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 13 | import com.example.newbiechen.ireader.widget.page.TxtChapter; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * Created by newbiechen on 17-6-5. 19 | */ 20 | 21 | public class CategoryAdapter extends EasyAdapter { 22 | private int currentSelected = 0; 23 | @Override 24 | protected IViewHolder onCreateViewHolder(int viewType) { 25 | return new CategoryHolder(); 26 | } 27 | 28 | @Override 29 | public View getView(int position, View convertView, ViewGroup parent) { 30 | View view = super.getView(position, convertView, parent); 31 | CategoryHolder holder = (CategoryHolder) view.getTag(); 32 | 33 | if (position == currentSelected){ 34 | holder.setSelectedChapter(); 35 | } 36 | 37 | return view; 38 | } 39 | 40 | public void setChapter(int pos){ 41 | currentSelected = pos; 42 | notifyDataSetChanged(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/CollBookAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import com.example.newbiechen.ireader.model.bean.CollBookBean; 4 | import com.example.newbiechen.ireader.ui.adapter.view.CollBookHolder; 5 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 6 | import com.example.newbiechen.ireader.widget.adapter.WholeAdapter; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-8. 10 | */ 11 | 12 | public class CollBookAdapter extends WholeAdapter { 13 | 14 | @Override 15 | protected IViewHolder createViewHolder(int viewType) { 16 | return new CollBookHolder(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/CommentAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import com.example.newbiechen.ireader.model.bean.CommentBean; 6 | import com.example.newbiechen.ireader.ui.adapter.view.CommentHolder; 7 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 8 | import com.example.newbiechen.ireader.widget.adapter.WholeAdapter; 9 | 10 | /** 11 | * Created by newbiechen on 17-4-29. 12 | */ 13 | 14 | public class CommentAdapter extends WholeAdapter { 15 | 16 | public CommentAdapter(Context context, Options options) { 17 | super(context, options); 18 | } 19 | 20 | @Override 21 | protected IViewHolder createViewHolder(int viewType) { 22 | return new CommentHolder(false); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/DiscCommentAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import com.example.newbiechen.ireader.model.bean.BookCommentBean; 6 | import com.example.newbiechen.ireader.ui.adapter.view.DiscCommentHolder; 7 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 8 | import com.example.newbiechen.ireader.widget.adapter.WholeAdapter; 9 | 10 | /** 11 | * Created by newbiechen on 17-4-20. 12 | */ 13 | 14 | public class DiscCommentAdapter extends WholeAdapter { 15 | 16 | public DiscCommentAdapter(Context context, Options options) { 17 | super(context, options); 18 | } 19 | 20 | @Override 21 | protected IViewHolder createViewHolder(int viewType) { 22 | return new DiscCommentHolder(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/DiscHelpsAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import com.example.newbiechen.ireader.model.bean.BookHelpsBean; 6 | import com.example.newbiechen.ireader.ui.adapter.view.DiscHelpsHolder; 7 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 8 | import com.example.newbiechen.ireader.widget.adapter.WholeAdapter; 9 | 10 | /** 11 | * Created by newbiechen on 17-4-21. 12 | */ 13 | 14 | public class DiscHelpsAdapter extends WholeAdapter{ 15 | 16 | public DiscHelpsAdapter(Context context, Options options) { 17 | super(context, options); 18 | } 19 | 20 | @Override 21 | protected IViewHolder createViewHolder(int viewType) { 22 | return new DiscHelpsHolder(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/DiscReviewAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import android.content.Context; 4 | 5 | import com.example.newbiechen.ireader.model.bean.BookReviewBean; 6 | import com.example.newbiechen.ireader.ui.adapter.view.DiscReviewHolder; 7 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 8 | import com.example.newbiechen.ireader.widget.adapter.WholeAdapter; 9 | 10 | /** 11 | * Created by newbiechen on 17-4-21. 12 | */ 13 | 14 | public class DiscReviewAdapter extends WholeAdapter { 15 | 16 | public DiscReviewAdapter(Context context, Options options) { 17 | super(context, options); 18 | } 19 | 20 | @Override 21 | protected IViewHolder createViewHolder(int viewType) { 22 | return new DiscReviewHolder(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/DownLoadAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import com.example.newbiechen.ireader.model.bean.DownloadTaskBean; 4 | import com.example.newbiechen.ireader.ui.adapter.view.DownloadHolder; 5 | import com.example.newbiechen.ireader.ui.base.adapter.BaseListAdapter; 6 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-12. 10 | */ 11 | 12 | public class DownLoadAdapter extends BaseListAdapter{ 13 | 14 | @Override 15 | protected IViewHolder createViewHolder(int viewType) { 16 | return new DownloadHolder(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/GodCommentAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import com.example.newbiechen.ireader.model.bean.CommentBean; 4 | import com.example.newbiechen.ireader.ui.adapter.view.CommentHolder; 5 | import com.example.newbiechen.ireader.ui.base.adapter.BaseListAdapter; 6 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-29. 10 | */ 11 | 12 | public class GodCommentAdapter extends BaseListAdapter{ 13 | @Override 14 | protected IViewHolder createViewHolder(int viewType) { 15 | return new CommentHolder(true); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/HotCommentAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import com.example.newbiechen.ireader.model.bean.HotCommentBean; 4 | import com.example.newbiechen.ireader.ui.adapter.view.HotCommentHolder; 5 | import com.example.newbiechen.ireader.ui.base.adapter.BaseListAdapter; 6 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-4. 10 | */ 11 | 12 | public class HotCommentAdapter extends BaseListAdapter{ 13 | @Override 14 | protected IViewHolder createViewHolder(int viewType) { 15 | return new HotCommentHolder(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/KeyWordAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import com.example.newbiechen.ireader.ui.adapter.view.KeyWordHolder; 4 | import com.example.newbiechen.ireader.ui.base.adapter.BaseListAdapter; 5 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 6 | 7 | /** 8 | * Created by newbiechen on 17-6-2. 9 | */ 10 | 11 | public class KeyWordAdapter extends BaseListAdapter { 12 | @Override 13 | protected IViewHolder createViewHolder(int viewType) { 14 | return new KeyWordHolder(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/SearchBookAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import com.example.newbiechen.ireader.model.bean.packages.SearchBookPackage; 4 | import com.example.newbiechen.ireader.ui.adapter.view.SearchBookHolder; 5 | import com.example.newbiechen.ireader.ui.base.adapter.BaseListAdapter; 6 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 7 | 8 | /** 9 | * Created by newbiechen on 17-6-2. 10 | */ 11 | 12 | public class SearchBookAdapter extends BaseListAdapter{ 13 | @Override 14 | protected IViewHolder createViewHolder(int viewType) { 15 | return new SearchBookHolder(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/SectionAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter; 2 | 3 | import com.example.newbiechen.ireader.model.bean.SectionBean; 4 | import com.example.newbiechen.ireader.ui.adapter.view.SectionHolder; 5 | import com.example.newbiechen.ireader.ui.base.adapter.BaseListAdapter; 6 | import com.example.newbiechen.ireader.ui.base.adapter.IViewHolder; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-16. 10 | */ 11 | 12 | public class SectionAdapter extends BaseListAdapter { 13 | @Override 14 | protected IViewHolder createViewHolder(int viewType) { 15 | return new SectionHolder(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/view/BookSortHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter.view; 2 | 3 | import android.widget.TextView; 4 | 5 | import com.example.newbiechen.ireader.R; 6 | import com.example.newbiechen.ireader.model.bean.BookSortBean; 7 | import com.example.newbiechen.ireader.ui.base.adapter.ViewHolderImpl; 8 | 9 | /** 10 | * Created by newbiechen on 17-4-23. 11 | */ 12 | 13 | public class BookSortHolder extends ViewHolderImpl{ 14 | 15 | private TextView mTvType; 16 | private TextView mTvCount; 17 | 18 | @Override 19 | public void initView() { 20 | mTvType = findById(R.id.sort_tv_type); 21 | mTvCount = findById(R.id.sort_tv_count); 22 | } 23 | 24 | @Override 25 | public void onBind(BookSortBean value, int pos) { 26 | mTvType.setText(value.getName()); 27 | mTvCount.setText(getContext().getResources().getString(R.string.nb_sort_book_count,value.getBookCount())); 28 | } 29 | 30 | @Override 31 | protected int getItemLayoutId() { 32 | return R.layout.item_sort; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/view/HorizonTagHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter.view; 2 | 3 | import android.widget.TextView; 4 | 5 | import com.example.newbiechen.ireader.R; 6 | import com.example.newbiechen.ireader.ui.base.adapter.ViewHolderImpl; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-2. 10 | */ 11 | 12 | public class HorizonTagHolder extends ViewHolderImpl { 13 | 14 | private TextView mTvName; 15 | 16 | @Override 17 | public void initView() { 18 | mTvName = findById(R.id.horizon_tag_tv_name); 19 | } 20 | 21 | @Override 22 | public void onBind(String value, int pos) { 23 | mTvName.setText(value); 24 | mTvName.setTextColor(getContext().getResources().getColor(R.color.nb_text_common_h2)); 25 | } 26 | 27 | public void setSelectedTag(){ 28 | mTvName.setTextColor(getContext().getResources().getColor(R.color.light_red)); 29 | } 30 | 31 | @Override 32 | protected int getItemLayoutId() { 33 | return R.layout.item_horizon_tag; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/view/KeyWordHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter.view; 2 | 3 | import android.widget.TextView; 4 | 5 | import com.example.newbiechen.ireader.R; 6 | import com.example.newbiechen.ireader.ui.base.adapter.ViewHolderImpl; 7 | 8 | /** 9 | * Created by newbiechen on 17-6-2. 10 | */ 11 | 12 | public class KeyWordHolder extends ViewHolderImpl{ 13 | 14 | private TextView mTvName; 15 | 16 | @Override 17 | public void initView() { 18 | mTvName = findById(R.id.keyword_tv_name); 19 | } 20 | 21 | @Override 22 | public void onBind(String data, int pos) { 23 | mTvName.setText(data); 24 | } 25 | 26 | @Override 27 | protected int getItemLayoutId() { 28 | return R.layout.item_keyword; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/view/PageStyleHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter.view; 2 | 3 | import android.graphics.drawable.Drawable; 4 | import android.view.View; 5 | import android.widget.ImageView; 6 | 7 | import com.example.newbiechen.ireader.R; 8 | import com.example.newbiechen.ireader.ui.base.adapter.ViewHolderImpl; 9 | 10 | /** 11 | * Created by newbiechen on 17-5-19. 12 | */ 13 | 14 | public class PageStyleHolder extends ViewHolderImpl { 15 | 16 | private View mReadBg; 17 | private ImageView mIvChecked; 18 | 19 | @Override 20 | public void initView() { 21 | mReadBg = findById(R.id.read_bg_view); 22 | mIvChecked = findById(R.id.read_bg_iv_checked); 23 | } 24 | 25 | @Override 26 | public void onBind(Drawable data, int pos) { 27 | mReadBg.setBackground(data); 28 | mIvChecked.setVisibility(View.GONE); 29 | } 30 | 31 | @Override 32 | protected int getItemLayoutId() { 33 | return R.layout.item_read_bg; 34 | } 35 | 36 | public void setChecked(){ 37 | mIvChecked.setVisibility(View.VISIBLE); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/view/SectionHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter.view; 2 | 3 | import android.widget.ImageView; 4 | import android.widget.TextView; 5 | 6 | import com.example.newbiechen.ireader.R; 7 | import com.example.newbiechen.ireader.model.bean.SectionBean; 8 | import com.example.newbiechen.ireader.ui.base.adapter.ViewHolderImpl; 9 | 10 | /** 11 | * Created by newbiechen on 17-4-16. 12 | */ 13 | 14 | public class SectionHolder extends ViewHolderImpl{ 15 | 16 | private ImageView mIvIcon; 17 | private TextView mTvName; 18 | 19 | @Override 20 | public void initView(){ 21 | mIvIcon =findById(R.id.section_iv_icon); 22 | mTvName =findById(R.id.section_tv_name); 23 | } 24 | 25 | @Override 26 | public void onBind(SectionBean value, int pos) { 27 | mIvIcon.setImageResource(value.getDrawableId()); 28 | mTvName.setText(value.getName()); 29 | } 30 | 31 | @Override 32 | protected int getItemLayoutId() { 33 | return R.layout.item_section; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/view/TagChildHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter.view; 2 | 3 | import android.support.v4.content.ContextCompat; 4 | import android.widget.TextView; 5 | 6 | import com.example.newbiechen.ireader.R; 7 | import com.example.newbiechen.ireader.ui.base.adapter.ViewHolderImpl; 8 | 9 | /** 10 | * Created by newbiechen on 17-5-2. 11 | */ 12 | 13 | public class TagChildHolder extends ViewHolderImpl { 14 | private TextView mTvName; 15 | private int mSelectTag = -1; 16 | 17 | @Override 18 | public void initView(){ 19 | mTvName = findById(R.id.tag_child_btn_name); 20 | } 21 | 22 | @Override 23 | public void onBind(String value, int pos) { 24 | mTvName.setText(value); 25 | //这里要重置点击事件 26 | if (mSelectTag == pos){ 27 | mTvName.setTextColor(ContextCompat.getColor(getContext(),R.color.light_red)); 28 | } 29 | else { 30 | mTvName.setTextColor(ContextCompat.getColor(getContext(),R.color.nb_text_default)); 31 | } 32 | } 33 | 34 | public void setTagSelected(int pos){ 35 | mSelectTag = pos; 36 | } 37 | 38 | @Override 39 | protected int getItemLayoutId() { 40 | return R.layout.item_tag_child; 41 | } 42 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/adapter/view/TagGroupHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.adapter.view; 2 | 3 | import android.widget.TextView; 4 | 5 | import com.example.newbiechen.ireader.R; 6 | import com.example.newbiechen.ireader.ui.base.adapter.ViewHolderImpl; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-5. 10 | */ 11 | 12 | public class TagGroupHolder extends ViewHolderImpl { 13 | private TextView mTvGroupName; 14 | 15 | @Override 16 | public void initView() { 17 | mTvGroupName = findById(R.id.tag_group_name); 18 | } 19 | 20 | @Override 21 | public void onBind(String value, int pos) { 22 | mTvGroupName.setText(value); 23 | } 24 | 25 | @Override 26 | protected int getItemLayoutId() { 27 | return R.layout.item_tag_group; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/base/BaseContract.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.base; 2 | 3 | /** 4 | * Created by newbiechen on 17-4-26. 5 | */ 6 | 7 | public interface BaseContract { 8 | 9 | interface BasePresenter { 10 | 11 | void attachView(T view); 12 | 13 | void detachView(); 14 | } 15 | 16 | interface BaseView { 17 | 18 | void showError(); 19 | 20 | void complete(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/base/BaseMVPActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.base; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | 6 | import io.reactivex.disposables.CompositeDisposable; 7 | import io.reactivex.disposables.Disposable; 8 | 9 | /** 10 | * Created by newbiechen on 17-4-25. 11 | */ 12 | 13 | public abstract class BaseMVPActivity extends BaseActivity{ 14 | 15 | protected T mPresenter; 16 | 17 | protected abstract T bindPresenter(); 18 | 19 | @Override 20 | protected void processLogic() { 21 | attachView(bindPresenter()); 22 | } 23 | 24 | private void attachView(T presenter){ 25 | mPresenter = presenter; 26 | mPresenter.attachView(this); 27 | } 28 | 29 | @Override 30 | protected void onDestroy() { 31 | super.onDestroy(); 32 | mPresenter.detachView(); 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/base/BaseMVPFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.base; 2 | 3 | import android.os.Bundle; 4 | 5 | 6 | import io.reactivex.disposables.CompositeDisposable; 7 | import io.reactivex.disposables.Disposable; 8 | 9 | /** 10 | * Created by newbiechen on 17-4-25. 11 | */ 12 | 13 | public abstract class BaseMVPFragment extends BaseFragment implements BaseContract.BaseView{ 14 | 15 | protected T mPresenter; 16 | 17 | protected abstract T bindPresenter(); 18 | 19 | @Override 20 | protected void processLogic(){ 21 | mPresenter = bindPresenter(); 22 | mPresenter.attachView(this); 23 | } 24 | 25 | @Override 26 | public void onDestroy() { 27 | super.onDestroy(); 28 | mPresenter.detachView(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/base/BaseService.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.base; 2 | 3 | import android.app.Service; 4 | import android.content.Intent; 5 | import android.os.IBinder; 6 | import android.support.annotation.Nullable; 7 | 8 | import io.reactivex.disposables.CompositeDisposable; 9 | import io.reactivex.disposables.Disposable; 10 | 11 | /** 12 | * Created by newbiechen on 17-5-13. 13 | */ 14 | 15 | public abstract class BaseService extends Service { 16 | 17 | private CompositeDisposable mDisposable; 18 | 19 | protected void addDisposable(Disposable disposable){ 20 | if (mDisposable == null){ 21 | mDisposable = new CompositeDisposable(); 22 | } 23 | mDisposable.add(disposable); 24 | } 25 | 26 | @Override 27 | public void onDestroy() { 28 | super.onDestroy(); 29 | if (mDisposable != null){ 30 | mDisposable.dispose(); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/base/RxPresenter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.base; 2 | 3 | import org.reactivestreams.Subscription; 4 | 5 | import io.reactivex.disposables.CompositeDisposable; 6 | import io.reactivex.disposables.Disposable; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-26. 10 | */ 11 | 12 | public class RxPresenter implements BaseContract.BasePresenter { 13 | 14 | protected T mView; 15 | protected CompositeDisposable mDisposable; 16 | 17 | protected void unSubscribe() { 18 | if (mDisposable != null) { 19 | mDisposable.dispose(); 20 | } 21 | } 22 | 23 | protected void addDisposable(Disposable subscription) { 24 | if (mDisposable == null) { 25 | mDisposable = new CompositeDisposable(); 26 | } 27 | mDisposable.add(subscription); 28 | } 29 | 30 | @Override 31 | public void attachView(T view) { 32 | this.mView = view; 33 | } 34 | 35 | @Override 36 | public void detachView() { 37 | this.mView = null; 38 | unSubscribe(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/base/adapter/BaseViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.base.adapter; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | 6 | /** 7 | * Created by newbiechen on 17-5-17. 8 | */ 9 | 10 | public class BaseViewHolder extends RecyclerView.ViewHolder{ 11 | public IViewHolder holder; 12 | 13 | public BaseViewHolder(View itemView, IViewHolder holder) { 14 | super(itemView); 15 | this.holder = holder; 16 | holder.initView(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/base/adapter/IViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.base.adapter; 2 | 3 | import android.view.View; 4 | import android.view.ViewGroup; 5 | 6 | /** 7 | * Created by newbiechen on 17-5-17. 8 | */ 9 | 10 | public interface IViewHolder { 11 | View createItemView(ViewGroup parent); 12 | void initView(); 13 | void onBind(T data,int pos); 14 | void onClick(); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/ui/base/adapter/ViewHolderImpl.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.ui.base.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | 8 | /** 9 | * Created by newbiechen on 17-5-17. 10 | */ 11 | 12 | public abstract class ViewHolderImpl implements IViewHolder { 13 | private View view; 14 | private Context context; 15 | /****************************************************/ 16 | protected abstract int getItemLayoutId(); 17 | 18 | 19 | @Override 20 | public View createItemView(ViewGroup parent) { 21 | view = LayoutInflater.from(parent.getContext()) 22 | .inflate(getItemLayoutId(), parent, false); 23 | context = parent.getContext(); 24 | return view; 25 | } 26 | 27 | protected V findById(int id){ 28 | return (V) view.findViewById(id); 29 | } 30 | 31 | protected Context getContext(){ 32 | return context; 33 | } 34 | 35 | protected View getItemView(){ 36 | return view; 37 | } 38 | 39 | @Override 40 | public void onClick() { 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/utils/Charset.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.utils; 2 | 3 | /** 4 | * 编码类型 5 | */ 6 | public enum Charset { 7 | UTF8("UTF-8"), 8 | UTF16LE("UTF-16LE"), 9 | UTF16BE("UTF-16BE"), 10 | GBK("GBK"); 11 | 12 | private String mName; 13 | public static final byte BLANK = 0x0a; 14 | 15 | private Charset(String name) { 16 | mName = name; 17 | } 18 | 19 | public String getName() { 20 | return mName; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/utils/FileStack.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.utils; 2 | 3 | import java.io.File; 4 | import java.util.List; 5 | 6 | /** 7 | * Created by newbiechen on 17-5-28. 8 | */ 9 | 10 | public class FileStack { 11 | 12 | private Node node = null; 13 | private int count = 0; 14 | 15 | public void push(FileSnapshot fileSnapshot){ 16 | if (fileSnapshot == null) return; 17 | Node fileNode = new Node(); 18 | fileNode.fileSnapshot = fileSnapshot; 19 | fileNode.next = node; 20 | node = fileNode; 21 | ++count; 22 | } 23 | 24 | public FileSnapshot pop(){ 25 | Node fileNode = node; 26 | if (fileNode == null) return null; 27 | FileSnapshot fileSnapshot = fileNode.fileSnapshot; 28 | node = fileNode.next; 29 | --count; 30 | return fileSnapshot; 31 | } 32 | 33 | public int getSize(){ 34 | return count; 35 | } 36 | 37 | //节点 38 | public class Node { 39 | FileSnapshot fileSnapshot; 40 | Node next; 41 | } 42 | 43 | //文件快照 44 | public static class FileSnapshot{ 45 | public String filePath; 46 | public List files; 47 | public int scrollOffset; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/utils/IOUtils.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.utils; 2 | 3 | import java.io.Closeable; 4 | import java.io.IOException; 5 | 6 | /** 7 | * Created by newbiechen on 17-5-11. 8 | */ 9 | 10 | public class IOUtils { 11 | 12 | public static void close(Closeable closeable){ 13 | if (closeable == null) return; 14 | try { 15 | closeable.close(); 16 | } catch (IOException e) { 17 | e.printStackTrace(); 18 | //close error 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/utils/MD5Utils.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.utils; 2 | 3 | /** 4 | * Created by newbiechen on 2018/1/1. 5 | */ 6 | 7 | import java.security.MessageDigest; 8 | import java.security.NoSuchAlgorithmException; 9 | 10 | /** 11 | *@Description: 将字符串转化为MD5 12 | */ 13 | 14 | public class MD5Utils { 15 | 16 | public static String strToMd5By32(String str){ 17 | String reStr = null; 18 | try { 19 | MessageDigest md5 = MessageDigest.getInstance("MD5"); 20 | byte[] bytes = md5.digest(str.getBytes()); 21 | StringBuffer stringBuffer = new StringBuffer(); 22 | for (byte b : bytes){ 23 | int bt = b&0xff; 24 | if (bt < 16){ 25 | stringBuffer.append(0); 26 | } 27 | stringBuffer.append(Integer.toHexString(bt)); 28 | } 29 | reStr = stringBuffer.toString(); 30 | } catch (NoSuchAlgorithmException e) { 31 | e.printStackTrace(); 32 | } 33 | return reStr; 34 | } 35 | 36 | public static String strToMd5By16(String str){ 37 | String reStr = strToMd5By32(str); 38 | if (reStr != null){ 39 | reStr = reStr.substring(8, 24); 40 | } 41 | return reStr; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/utils/PermissionsChecker.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.utils; 2 | 3 | import android.content.Context; 4 | import android.content.pm.PackageManager; 5 | import android.support.v4.content.ContextCompat; 6 | 7 | /** 8 | * Created by newbiechen on 2017/10/8. 9 | */ 10 | 11 | public class PermissionsChecker { 12 | private final Context mContext; 13 | 14 | public PermissionsChecker(Context context) { 15 | mContext = context.getApplicationContext(); 16 | } 17 | 18 | // 判断权限集合 19 | public boolean lacksPermissions(String... permissions) { 20 | for (String permission : permissions) { 21 | if (lacksPermission(permission)) { 22 | return true; 23 | } 24 | } 25 | return false; 26 | } 27 | 28 | // 判断是否缺少权限 29 | private boolean lacksPermission(String permission) { 30 | return ContextCompat.checkSelfPermission(mContext, permission) == 31 | PackageManager.PERMISSION_DENIED; 32 | } 33 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/utils/ToastUtils.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.utils; 2 | 3 | import android.widget.Toast; 4 | 5 | import com.example.newbiechen.ireader.App; 6 | 7 | /** 8 | * Created by newbiechen on 17-5-11. 9 | */ 10 | 11 | public class ToastUtils { 12 | 13 | public static void show(String msg){ 14 | Toast.makeText(App.getContext(), msg, Toast.LENGTH_SHORT).show(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/utils/media/LoaderCreator.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.utils.media; 2 | 3 | import android.content.Context; 4 | import android.os.Bundle; 5 | import android.support.v4.content.CursorLoader; 6 | 7 | /** 8 | * Created by newbiechen on 2018/1/14. 9 | */ 10 | 11 | public class LoaderCreator { 12 | public static final int ALL_BOOK_FILE = 1; 13 | 14 | public static CursorLoader create(Context context, int id, Bundle bundle) { 15 | LocalFileLoader loader = null; 16 | switch (id){ 17 | case ALL_BOOK_FILE: 18 | loader = new LocalFileLoader(context); 19 | break; 20 | default: 21 | loader = null; 22 | break; 23 | } 24 | if (loader != null) { 25 | return loader; 26 | } 27 | 28 | throw new IllegalArgumentException("The id of Loader is invalid!"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/widget/CustomExpandableListView.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 JustWayward Team 3 | *

4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | *

8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | *

10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.example.newbiechen.ireader.widget; 17 | 18 | import android.content.Context; 19 | import android.util.AttributeSet; 20 | import android.widget.ExpandableListView; 21 | 22 | public class CustomExpandableListView extends ExpandableListView { 23 | 24 | public CustomExpandableListView(Context context, AttributeSet attrs) { 25 | super(context, attrs); 26 | } 27 | 28 | @Override 29 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 30 | int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 31 | 32 | super.onMeasure(widthMeasureSpec, expandSpec); 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/widget/adapter/LoadMoreDelegate.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.widget.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | import android.widget.FrameLayout; 7 | 8 | /** 9 | * Created by newbiechen on 17-4-20. 10 | */ 11 | 12 | public class LoadMoreDelegate implements WholeAdapter.ItemView { 13 | private LoadMoreView mLoadMoreView; 14 | 15 | public LoadMoreDelegate(Context context, WholeAdapter.Options options){ 16 | LoadMoreView view = new LoadMoreView(context, 17 | options.loadMoreId,options.errorId,options.noMoreId); 18 | FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( 19 | ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 20 | view.setLayoutParams(params); 21 | 22 | mLoadMoreView = view; 23 | } 24 | 25 | @Override 26 | public View onCreateView(ViewGroup parent) { 27 | return mLoadMoreView; 28 | } 29 | 30 | @Override 31 | public void onBindView(View view) { 32 | LoadMoreView loadMoreView = (LoadMoreView) view; 33 | loadMoreView.refreshView(); 34 | } 35 | 36 | public void setLoadMoreStatus(int status){ 37 | mLoadMoreView.setLoadMoreStatus(status); 38 | } 39 | 40 | public void setOnLoadMoreListener(LoadMoreView.OnLoadMoreListener listener){ 41 | mLoadMoreView.setOnLoadMoreListener(listener); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/widget/animation/NonePageAnim.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.widget.animation; 2 | 3 | import android.graphics.Canvas; 4 | import android.view.View; 5 | 6 | /** 7 | * Created by newbiechen on 17-7-24. 8 | */ 9 | 10 | public class NonePageAnim extends HorizonPageAnim{ 11 | 12 | public NonePageAnim(int w, int h, View view, OnPageChangeListener listener) { 13 | super(w, h, view, listener); 14 | } 15 | 16 | @Override 17 | public void drawStatic(Canvas canvas) { 18 | if (isCancel){ 19 | canvas.drawBitmap(mCurBitmap, 0, 0, null); 20 | }else { 21 | canvas.drawBitmap(mNextBitmap, 0, 0, null); 22 | } 23 | } 24 | 25 | @Override 26 | public void drawMove(Canvas canvas) { 27 | if (isCancel){ 28 | canvas.drawBitmap(mCurBitmap, 0, 0, null); 29 | }else { 30 | canvas.drawBitmap(mNextBitmap, 0, 0, null); 31 | } 32 | } 33 | 34 | @Override 35 | public void startAnim() { 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/widget/page/PageMode.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.widget.page; 2 | 3 | /** 4 | * Created by newbiechen on 2018/2/5. 5 | * 作用:翻页动画的模式 6 | */ 7 | 8 | public enum PageMode { 9 | SIMULATION, COVER, SLIDE, NONE, SCROLL 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/widget/page/PageStyle.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.widget.page; 2 | 3 | import android.support.annotation.ColorRes; 4 | 5 | import com.example.newbiechen.ireader.R; 6 | 7 | /** 8 | * Created by newbiechen on 2018/2/5. 9 | * 作用:页面的展示风格。 10 | */ 11 | 12 | public enum PageStyle { 13 | BG_0(R.color.nb_read_font_1, R.color.nb_read_bg_1), 14 | BG_1(R.color.nb_read_font_2, R.color.nb_read_bg_2), 15 | BG_2(R.color.nb_read_font_3, R.color.nb_read_bg_3), 16 | BG_3(R.color.nb_read_font_4, R.color.nb_read_bg_4), 17 | BG_4(R.color.nb_read_font_5, R.color.nb_read_bg_5), 18 | NIGHT(R.color.nb_read_font_night, R.color.nb_read_bg_night),; 19 | 20 | private int fontColor; 21 | private int bgColor; 22 | 23 | PageStyle(@ColorRes int fontColor, @ColorRes int bgColor) { 24 | this.fontColor = fontColor; 25 | this.bgColor = bgColor; 26 | } 27 | 28 | public int getFontColor() { 29 | return fontColor; 30 | } 31 | 32 | public int getBgColor() { 33 | return bgColor; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/widget/page/TxtChapter.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.widget.page; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * Created by newbiechen on 17-7-1. 8 | */ 9 | 10 | public class TxtChapter{ 11 | 12 | //章节所属的小说(网络) 13 | String bookId; 14 | //章节的链接(网络) 15 | String link; 16 | 17 | //章节名(共用) 18 | String title; 19 | 20 | //章节内容在文章中的起始位置(本地) 21 | long start; 22 | //章节内容在文章中的终止位置(本地) 23 | long end; 24 | 25 | public String getBookId() { 26 | return bookId; 27 | } 28 | 29 | public void setBookId(String id) { 30 | this.bookId = id; 31 | } 32 | 33 | public String getLink() { 34 | return link; 35 | } 36 | 37 | public void setLink(String link) { 38 | this.link = link; 39 | } 40 | 41 | public String getTitle() { 42 | return title; 43 | } 44 | 45 | public void setTitle(String title) { 46 | this.title = title; 47 | } 48 | 49 | public long getStart() { 50 | return start; 51 | } 52 | 53 | public void setStart(long start) { 54 | this.start = start; 55 | } 56 | 57 | public long getEnd() { 58 | return end; 59 | } 60 | 61 | public void setEnd(long end) { 62 | this.end = end; 63 | } 64 | 65 | @Override 66 | public String toString() { 67 | return "TxtChapter{" + 68 | "title='" + title + '\'' + 69 | ", start=" + start + 70 | ", end=" + end + 71 | '}'; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/newbiechen/ireader/widget/page/TxtPage.java: -------------------------------------------------------------------------------- 1 | package com.example.newbiechen.ireader.widget.page; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by newbiechen on 17-7-1. 7 | */ 8 | 9 | public class TxtPage { 10 | int position; 11 | String title; 12 | int titleLines; //当前 lines 中为 title 的行数。 13 | List lines; 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/res/anim/rotate_0_to_180.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/rotate_180_to_360.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_bottom_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_bottom_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_left_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_left_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_right_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_right_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_top_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_top_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_btn_file_add.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_btn_file_delete.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_btn_read_setting.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_cb_file.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_chapter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/color/tag_child.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xhdpi/ic_read_menu_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-night-xhdpi/ic_read_menu_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxhdpi/ic_read_menu_morning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-night-xxhdpi/ic_read_menu_morning.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-night-xxhdpi/ic_read_menu_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-night-xxhdpi/ic_read_menu_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_book_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-nodpi/ic_book_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_arrow_right.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_back_last.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_back_last.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_billboard_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_billboard_arrow_down.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_billboard_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_billboard_arrow_up.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_book_list_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_book_list_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_book_list_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_book_list_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_book_list_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_book_list_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_book_review_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_book_review_like.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_brightness_minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_brightness_minus.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_brightness_plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_brightness_plus.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_cb_file_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_cb_file_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_cb_file_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_cb_file_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_cb_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_cb_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_cb_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_cb_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_checked.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_detail_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_detail_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_detail_tool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_detail_tool.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_dir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_dir.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_file_loaded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_file_loaded.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_item_category_activated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_item_category_activated.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_item_category_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_item_category_download.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_item_category_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_item_category_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_local_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_local_file.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_menu_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_menu_category.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_menu_morning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_menu_morning.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_no_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_no_data.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notif_post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_notif_post.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notif_vote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_notif_vote.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_read_menu_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_read_menu_category.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_read_menu_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_read_menu_download.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_read_menu_font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_read_menu_font.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_read_menu_morning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_read_menu_morning.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_read_menu_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_read_menu_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_reader_quote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_reader_quote.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_refresh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_search_back_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_search_back_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_search_back_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_search_back_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_search_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_search_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_search_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/ic_search_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/label_book_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/label_book_top.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/seekbar_thumb_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/seekbar_thumb_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/seekbar_thumb_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xhdpi/seekbar_thumb_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_arrow_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_arrow_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_arrow_enter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_arrow_enter.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_billboard_collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_billboard_collapse.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_book_review_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_book_review_like.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_book_shelf_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_book_shelf_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_book_shelf_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_book_shelf_empty.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_close_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_close_window.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_default_portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_default_portrait.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_download_complete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_download_complete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_download_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_download_error.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_download_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_download_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_download_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_download_pause.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_download_wait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_download_wait.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_load_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_load_error.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_loadding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_loadding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_download.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_feedback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_feedback.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_login.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_overflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_overflow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_scan.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_setting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_syn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_syn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_tip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_tip.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_menu_transfer.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_read_menu_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_read_menu_setting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_recommend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_recommend.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_section_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_section_comment.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_section_compose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_section_compose.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_section_discuss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_section_discuss.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_section_girl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_section_girl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_section_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_section_help.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_section_listen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_section_listen.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_section_sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_section_sort.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_section_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_section_top.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_section_topic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_section_topic.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_sex_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_sex_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_topic_distillate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_topic_distillate.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_topic_hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/ic_topic_hot.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notif_red_dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/notif_red_dot.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/post_item_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/post_item_like.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/rating_star_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/rating_star_nor.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/rating_star_sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/rating_star_sel.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/rating_star_user_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/rating_star_user_nor.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/rating_star_user_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/rating_star_user_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/review_useful_no_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/review_useful_no_nor.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/review_useful_no_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/review_useful_no_pre.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/review_useful_yes_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/review_useful_yes_nor.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/review_useful_yes_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/review_useful_yes_pre.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/selector_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/selector_arrow_down.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/selector_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/selector_arrow_up.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/theme_leather_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/theme_leather_bg.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/theme_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable-xxhdpi/theme_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/newbiechen1024/NovelReader/0b8e281b30beecbc1b91d1deeca30301a88b6f5c/app/src/main/res/drawable/bg_shadow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_skip.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_sex_choose_boy.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_sex_choose_girl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tag_txt.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/seekbar_battery_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/seekbar_battery_night_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/seekbar_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/seekbar_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_add.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_book_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_delete.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_read_setting.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_category_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_category_load.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_category_unload.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_cb_file.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_cb_volume.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_common_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_tag.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_tag_child.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_book_list_nor.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_book_list_press.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_btn_read_setting_checked.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_btn_read_setting_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_common_corner.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_common_gray_corner.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_common_green_corner.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_common_light_white_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_corner_black.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_corner_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_distillate_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_divider_col.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_divider_dash.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_divider_row.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_frame_tag.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_hot_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_red.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_unclick.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_base_tab.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_book_discussion.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 12 | 13 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_book_sort_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 15 | 16 | 20 | 21 | 22 | 26 | 27 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_community.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_discussion_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | 22 | 23 | 24 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_refresh_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 15 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_test.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 |