├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── drawable │ │ │ │ ├── test2.jpg │ │ │ │ ├── battery_bg9.9.png │ │ │ │ ├── theme_leather_bg.jpg │ │ │ │ ├── edittext.xml │ │ │ │ ├── shape_common_white_bg.xml │ │ │ │ ├── shape_common_gray_bg.xml │ │ │ │ ├── theme_gray_bg.xml │ │ │ │ ├── theme_night_bg.xml │ │ │ │ ├── theme_white_bg.xml │ │ │ │ ├── theme_green_bg.xml │ │ │ │ ├── theme_yellow_bg.xml │ │ │ │ ├── layout_share_bg.xml │ │ │ │ ├── seekbar_thumb.xml │ │ │ │ ├── shape_common_selector.xml │ │ │ │ ├── volume_checkbox_selector.xml │ │ │ │ ├── progressbar.xml │ │ │ │ ├── progressbar1.xml │ │ │ │ ├── seekbar_bg.xml │ │ │ │ └── seekbar_battery_bg.xml │ │ │ ├── mipmap-hdpi │ │ │ │ ├── red.png │ │ │ │ ├── up.png │ │ │ │ ├── clear.png │ │ │ │ ├── down.png │ │ │ │ ├── share.png │ │ │ │ ├── delete.png │ │ │ │ ├── history.png │ │ │ │ ├── search.png │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── rank_arrow_up.png │ │ │ │ ├── rank_arrow_down.png │ │ │ │ └── home_shelf_txt_icon.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── share.png │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── test1.jpg │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── cover_default.png │ │ │ │ ├── book_detail_info_add_img.png │ │ │ │ ├── book_detail_info_del_img.png │ │ │ │ └── book_detail_info_search_img.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ab_back.png │ │ │ │ ├── ic_done.png │ │ │ │ ├── refresh.png │ │ │ │ ├── home_menu_0.png │ │ │ │ ├── home_menu_1.png │ │ │ │ ├── home_menu_2.png │ │ │ │ ├── home_menu_3.png │ │ │ │ ├── home_menu_4.png │ │ │ │ ├── home_menu_5.png │ │ │ │ ├── home_menu_6.png │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ios_arrow.png │ │ │ │ ├── rating_no.png │ │ │ │ ├── rating_yes.png │ │ │ │ ├── theme_night.png │ │ │ │ ├── girl_section.png │ │ │ │ ├── heart_love.9.png │ │ │ │ ├── ic_topic_hot.png │ │ │ │ ├── avatar_default.png │ │ │ │ ├── comment_section.png │ │ │ │ ├── discuss_section.png │ │ │ │ ├── helper_section.png │ │ │ │ ├── home_find_listen.png │ │ │ │ ├── home_find_rank.png │ │ │ │ ├── home_find_topic.png │ │ │ │ ├── ic_gender_logo.png │ │ │ │ ├── ic_rank_collapse.png │ │ │ │ ├── post_item_like.png │ │ │ │ ├── rating_star_nor.png │ │ │ │ ├── rating_star_sel.png │ │ │ │ ├── ugcbook_delete.png │ │ │ │ ├── home_find_category.png │ │ │ │ ├── ic_book_shelf_add.png │ │ │ │ ├── ic_menu_toc_normal.png │ │ │ │ ├── ic_book_review_like.png │ │ │ │ ├── ic_topic_distillate.png │ │ │ │ ├── review_useful_no_nor.png │ │ │ │ ├── review_useful_no_pre.png │ │ │ │ ├── review_useful_yes_nor.png │ │ │ │ ├── review_useful_yes_pre.png │ │ │ │ ├── book_topic_top_arrow_up.png │ │ │ │ ├── ic_menu_settings_normal.png │ │ │ │ ├── book_topic_top_arrow_down.png │ │ │ │ ├── ic_moreoverflow_mtrl_alpha.png │ │ │ │ └── abc_ic_search_api_mtrl_alpha.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── drawable-xhdpi │ │ │ │ ├── ic_brightness_add.png │ │ │ │ ├── ic_theme_selected.png │ │ │ │ ├── ic_brightness_minus.png │ │ │ │ ├── ic_checkbox_normal.png │ │ │ │ ├── ic_checkbox_selected.png │ │ │ │ ├── ic_menu_toc_normal.png │ │ │ │ ├── seekbar_thumb_normal.png │ │ │ │ ├── ic_reader_ab_download.png │ │ │ │ ├── seekbar_thumb_selected.png │ │ │ │ ├── ic_menu_mode_night_normal.png │ │ │ │ └── ic_menu_settings_normal.png │ │ │ ├── layout │ │ │ │ ├── item_review.xml │ │ │ │ ├── layout_battery_progress.xml │ │ │ │ ├── fragment_categort_book.xml │ │ │ │ ├── item_text.xml │ │ │ │ ├── fragment_blank.xml │ │ │ │ ├── fragment_find.xml │ │ │ │ ├── item_chapter.xml │ │ │ │ ├── item_ranking_child.xml │ │ │ │ ├── fragment_rank_detail.xml │ │ │ │ ├── item_tag_text.xml │ │ │ │ ├── tag_item.xml │ │ │ │ ├── item_img_text.xml │ │ │ │ ├── item_category.xml │ │ │ │ ├── item_tags_list.xml │ │ │ │ ├── item_read_theme.xml │ │ │ │ ├── popupwindow_chapter.xml │ │ │ │ ├── item_ranking_group.xml │ │ │ │ ├── item_find.xml │ │ │ │ ├── activity_ranking.xml │ │ │ │ ├── activity_book_list_detail.xml │ │ │ │ ├── activity_author.xml │ │ │ │ ├── activity_rank_detail.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── item_tag_book.xml │ │ │ │ ├── item_book_list_info.xml │ │ │ │ ├── item_book_list.xml │ │ │ │ ├── fragment_recommend.xml │ │ │ │ ├── content_ranking.xml │ │ │ │ └── item_recommend.xml │ │ │ ├── values-v21 │ │ │ │ └── styles.xml │ │ │ ├── values-w820dp │ │ │ │ └── dimens.xml │ │ │ ├── menu │ │ │ │ ├── menu_book_detail.xml │ │ │ │ ├── menu_rank_detail.xml │ │ │ │ ├── menu_categort_book.xml │ │ │ │ ├── menu_search.xml │ │ │ │ └── menu_main.xml │ │ │ └── values │ │ │ │ ├── dimens.xml │ │ │ │ ├── attr.xml │ │ │ │ ├── styles.xml │ │ │ │ └── arrays.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── boge │ │ │ │ └── bogebook │ │ │ │ ├── listener │ │ │ │ ├── OnRecyclerViewItemClick.java │ │ │ │ ├── OnBaseItemClick.java │ │ │ │ ├── OnRecyclerViewLongItemClick.java │ │ │ │ ├── OnReadStateChangeListener.java │ │ │ │ └── RequestCallBack.java │ │ │ │ ├── mvp │ │ │ │ ├── view │ │ │ │ │ ├── base │ │ │ │ │ │ └── BaseView.java │ │ │ │ │ ├── RankingView.java │ │ │ │ │ ├── CategortBookView.java │ │ │ │ │ ├── CategoryView.java │ │ │ │ │ ├── BookDetailView.java │ │ │ │ │ ├── RankDetailView.java │ │ │ │ │ ├── AuthorView.java │ │ │ │ │ ├── BookListDetailView.java │ │ │ │ │ ├── ReaderView.java │ │ │ │ │ ├── LocalBookView.java │ │ │ │ │ ├── ThemeBookView.java │ │ │ │ │ ├── SearchView.java │ │ │ │ │ └── RecommendView.java │ │ │ │ ├── presenter │ │ │ │ │ ├── ReviewPresenter.java │ │ │ │ │ ├── BookDetailPresenter.java │ │ │ │ │ ├── RankDetailPresenter.java │ │ │ │ │ ├── RankingListPresenter.java │ │ │ │ │ ├── BookListDetailPresenter.java │ │ │ │ │ ├── CategoryPresenter.java │ │ │ │ │ ├── LocalBookPresenter.java │ │ │ │ │ ├── base │ │ │ │ │ │ ├── BasePresenter.java │ │ │ │ │ │ └── BasePresenterImpl.java │ │ │ │ │ ├── ReaderPresenter.java │ │ │ │ │ ├── SearchPresenter.java │ │ │ │ │ ├── AuthorPresenter.java │ │ │ │ │ ├── ThemeBookPresenter.java │ │ │ │ │ ├── CategortBookPresenter.java │ │ │ │ │ ├── RecommendPresenter.java │ │ │ │ │ └── impl │ │ │ │ │ │ ├── ReviewPresenterImpl.java │ │ │ │ │ │ ├── RankingListPresenterImpl.java │ │ │ │ │ │ ├── BookDetailPresenterImpl.java │ │ │ │ │ │ ├── CategoryPresenterImpl.java │ │ │ │ │ │ ├── RankDetailPresenterImpl.java │ │ │ │ │ │ ├── BookListDetailPresenterImpl.java │ │ │ │ │ │ ├── AuthorPresenterImpl.java │ │ │ │ │ │ ├── RecommendPresenterImpl.java │ │ │ │ │ │ └── ReaderPresenterImpl.java │ │ │ │ ├── interactor │ │ │ │ │ ├── RankingInteractor.java │ │ │ │ │ ├── ReviewInteractor.java │ │ │ │ │ ├── RankDetailInteractor.java │ │ │ │ │ ├── BookListDetailInteractor.java │ │ │ │ │ ├── BookDetailInteractor.java │ │ │ │ │ ├── CategoryInteractor.java │ │ │ │ │ ├── ReaderInteractor.java │ │ │ │ │ ├── AuthorInteractor.java │ │ │ │ │ ├── SearchInteractor.java │ │ │ │ │ ├── ThemeBookInteractor.java │ │ │ │ │ ├── CategortBookInteractor.java │ │ │ │ │ ├── RecommendInteractor.java │ │ │ │ │ └── impl │ │ │ │ │ │ ├── RankingInteractorImpl.java │ │ │ │ │ │ ├── ReviewInteractorImpl.java │ │ │ │ │ │ ├── CategoryInteractorImpl.java │ │ │ │ │ │ ├── BookDetailInteractorImpl.java │ │ │ │ │ │ ├── BookListDetailInteractorImpl.java │ │ │ │ │ │ └── RankDetailInteractorImpl.java │ │ │ │ └── ui │ │ │ │ │ ├── fragments │ │ │ │ │ ├── CategortBookActivityFragment.java │ │ │ │ │ ├── BlankFragment.java │ │ │ │ │ ├── base │ │ │ │ │ │ └── BaseFragment.java │ │ │ │ │ └── FindFragment.java │ │ │ │ │ ├── adapter │ │ │ │ │ ├── ReviewAdapter.java │ │ │ │ │ ├── RankFragmentPagerAdapter.java │ │ │ │ │ ├── ImgAndTextAdapter.java │ │ │ │ │ ├── ChapterAdapter.java │ │ │ │ │ ├── TagBookRecyclerViewAdapter.java │ │ │ │ │ ├── ReadThemeAdapter.java │ │ │ │ │ ├── BookListInfoAdapter.java │ │ │ │ │ ├── BookListAdapter.java │ │ │ │ │ ├── LocalBookAdapter.java │ │ │ │ │ └── FindAdapter.java │ │ │ │ │ └── activity │ │ │ │ │ └── RankDetailActivity.java │ │ │ │ ├── component │ │ │ │ ├── ApplicationComponent.java │ │ │ │ ├── FragmentComponent.java │ │ │ │ └── ActivityComponent.java │ │ │ │ ├── module │ │ │ │ ├── ActivityModule.java │ │ │ │ ├── FragmentModule.java │ │ │ │ └── ApplicationModule.java │ │ │ │ ├── view │ │ │ │ ├── CustomExpandableListView.java │ │ │ │ └── DrawableCenterButton.java │ │ │ │ ├── entity │ │ │ │ ├── AutoComplete.java │ │ │ │ ├── HotWord.java │ │ │ │ ├── support │ │ │ │ │ └── FindBean.java │ │ │ │ ├── BookUpdateInfo.java │ │ │ │ └── BookListTags.java │ │ │ │ ├── util │ │ │ │ ├── Tools.java │ │ │ │ └── ToastUtils.java │ │ │ │ └── common │ │ │ │ └── Constant.java │ │ └── java-gen │ │ │ └── com │ │ │ └── boge │ │ │ └── dao │ │ │ └── DaoSession.java │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── boge │ │ │ └── bogebook │ │ │ └── ExampleUnitTest.java │ └── androidTest │ │ └── java │ │ └── com │ │ └── boge │ │ └── bogebook │ │ └── ExampleInstrumentedTest.java ├── proguard-rules.pro └── build.gradle ├── daogenerator ├── .gitignore ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── boge │ └── DaoAutoGenerator.java ├── settings.gradle ├── book.jks ├── screenshot ├── cate1.png ├── cate2.png ├── find.png ├── local.png ├── read1.png ├── booklist.png ├── ranking1.png ├── ranking2.png ├── search1.png ├── search2.png ├── search3.png ├── book_detail.png ├── recommend.png ├── booklist_tag.png └── booklist_detail.png ├── .idea ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── modules.xml ├── runConfigurations.xml ├── gradle.xml ├── compiler.xml └── misc.xml ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── gradle.properties ├── README.md └── gradlew.bat /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /daogenerator/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':daogenerator' 2 | -------------------------------------------------------------------------------- /book.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/book.jks -------------------------------------------------------------------------------- /screenshot/cate1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/cate1.png -------------------------------------------------------------------------------- /screenshot/cate2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/cate2.png -------------------------------------------------------------------------------- /screenshot/find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/find.png -------------------------------------------------------------------------------- /screenshot/local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/local.png -------------------------------------------------------------------------------- /screenshot/read1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/read1.png -------------------------------------------------------------------------------- /screenshot/booklist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/booklist.png -------------------------------------------------------------------------------- /screenshot/ranking1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/ranking1.png -------------------------------------------------------------------------------- /screenshot/ranking2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/ranking2.png -------------------------------------------------------------------------------- /screenshot/search1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/search1.png -------------------------------------------------------------------------------- /screenshot/search2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/search2.png -------------------------------------------------------------------------------- /screenshot/search3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/search3.png -------------------------------------------------------------------------------- /screenshot/book_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/book_detail.png -------------------------------------------------------------------------------- /screenshot/recommend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/recommend.png -------------------------------------------------------------------------------- /screenshot/booklist_tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/booklist_tag.png -------------------------------------------------------------------------------- /screenshot/booklist_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/screenshot/booklist_detail.png -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/drawable/test2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable/test2.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/red.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/up.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/clear.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/down.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/share.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-mdpi/share.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/delete.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/history.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/search.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/test1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xhdpi/test1.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/battery_bg9.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable/battery_bg9.9.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ab_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ab_back.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_done.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/refresh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/theme_leather_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable/theme_leather_bg.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/rank_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/rank_arrow_up.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_menu_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_menu_0.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_menu_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_menu_1.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_menu_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_menu_2.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_menu_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_menu_3.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_menu_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_menu_4.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_menu_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_menu_5.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_menu_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_menu_6.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ios_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ios_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/rating_no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/rating_no.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/rating_yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/rating_yes.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/theme_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/theme_night.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/rank_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/rank_arrow_down.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/cover_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xhdpi/cover_default.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/girl_section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/girl_section.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/heart_love.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/heart_love.9.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_topic_hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_topic_hot.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/avatar_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/avatar_default.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/comment_section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/comment_section.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/discuss_section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/discuss_section.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/helper_section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/helper_section.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_find_listen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_find_listen.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_find_rank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_find_rank.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_find_topic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_find_topic.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_gender_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_gender_logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_rank_collapse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_rank_collapse.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/post_item_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/post_item_like.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/rating_star_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/rating_star_nor.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/rating_star_sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/rating_star_sel.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ugcbook_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ugcbook_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_brightness_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/ic_brightness_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_theme_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/ic_theme_selected.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/home_shelf_txt_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-hdpi/home_shelf_txt_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/home_find_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/home_find_category.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_book_shelf_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_book_shelf_add.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_menu_toc_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_menu_toc_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_brightness_minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/ic_brightness_minus.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_checkbox_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/ic_checkbox_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_checkbox_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/ic_checkbox_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_menu_toc_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/ic_menu_toc_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/seekbar_thumb_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/seekbar_thumb_normal.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_book_review_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_book_review_like.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_topic_distillate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_topic_distillate.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/review_useful_no_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/review_useful_no_nor.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/review_useful_no_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/review_useful_no_pre.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/review_useful_yes_nor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/review_useful_yes_nor.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/review_useful_yes_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/review_useful_yes_pre.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_reader_ab_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/ic_reader_ab_download.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/seekbar_thumb_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/seekbar_thumb_selected.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/book_detail_info_add_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xhdpi/book_detail_info_add_img.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/book_detail_info_del_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xhdpi/book_detail_info_del_img.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/book_topic_top_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/book_topic_top_arrow_up.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_menu_settings_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_menu_settings_normal.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_menu_mode_night_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/ic_menu_mode_night_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_menu_settings_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/drawable-xhdpi/ic_menu_settings_normal.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/book_detail_info_search_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xhdpi/book_detail_info_search_img.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/book_topic_top_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/book_topic_top_arrow_down.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_moreoverflow_mtrl_alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/ic_moreoverflow_mtrl_alpha.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/abc_ic_search_api_mtrl_alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mianmian520/BogeBook/HEAD/app/src/main/res/mipmap-xxhdpi/abc_ic_search_api_mtrl_alpha.png -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/edittext.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_review.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /daogenerator/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java' 2 | 3 | dependencies { 4 | compile fileTree(dir: 'libs', include: ['*.jar']) 5 | compile 'org.greenrobot:greendao-generator:3.2.0' 6 | } 7 | 8 | sourceCompatibility = "1.7" 9 | targetCompatibility = "1.7" 10 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 28 10:00:20 PST 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_common_white_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_common_gray_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/listener/OnRecyclerViewItemClick.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.listener; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * Created by boge on 2016/10/22. 7 | */ 8 | 9 | public interface OnRecyclerViewItemClick { 10 | 11 | void onItemClick(View v , int position); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/listener/OnBaseItemClick.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.listener; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/28 9 | */ 10 | 11 | public interface OnBaseItemClick { 12 | 13 | 14 | void onItemClick(View v , int position , T data); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/base/BaseView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view.base; 2 | 3 | /** 4 | * @author boge 5 | * @version 1.0 6 | * @date 2016/10/14 7 | */ 8 | 9 | public interface BaseView { 10 | 11 | void showProgress(); 12 | 13 | void hideProgress(); 14 | 15 | void showErrorMsg(String message); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/listener/OnRecyclerViewLongItemClick.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.listener; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/31 9 | */ 10 | 11 | public interface OnRecyclerViewLongItemClick { 12 | 13 | void onLongItemClcik(View view , int position); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/theme_gray_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/theme_night_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/theme_white_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/theme_green_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/theme_yellow_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/ReviewPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2017/3/16 9 | */ 10 | 11 | public interface ReviewPresenter extends BasePresenter { 12 | 13 | void loadBookHotReview(String bookId); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/BookDetailPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/21 9 | */ 10 | 11 | public interface BookDetailPresenter extends BasePresenter { 12 | 13 | void loadBookDetail(String bookID); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/RankingInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.listener.RequestCallBack; 4 | 5 | import rx.Subscription; 6 | 7 | /** 8 | * Created by boge on 2016/10/19. 9 | */ 10 | 11 | public interface RankingInteractor { 12 | 13 | Subscription loadRankingList(RequestCallBack callBack); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/RankDetailPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/21 9 | */ 10 | 11 | public interface RankDetailPresenter extends BasePresenter { 12 | 13 | void loadRankDetail(String rankingId); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layout_share_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/RankingListPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * Created by boge on 2016/10/19. 7 | */ 8 | 9 | public interface RankingListPresenter extends BasePresenter { 10 | 11 | /** 12 | * 加载排行榜 13 | */ 14 | void loadRankingList(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/BookListDetailPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/11/11 9 | */ 10 | 11 | public interface BookListDetailPresenter extends BasePresenter { 12 | 13 | void loadBookListDetail(String bookListId); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/CategoryPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/21 9 | */ 10 | 11 | public interface CategoryPresenter extends BasePresenter { 12 | 13 | /** 14 | * 加载一级分类 15 | */ 16 | void loadCategoryList(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/seekbar_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/LocalBookPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/28 9 | */ 10 | 11 | public interface LocalBookPresenter extends BasePresenter { 12 | 13 | /** 14 | * 搜索本地的TXT文件 15 | */ 16 | void searchLocalBook(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/ReviewInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.listener.RequestCallBack; 4 | 5 | import rx.Subscription; 6 | 7 | /** 8 | * @author boge 9 | * @version 1.0 10 | * @date 2017/3/16 11 | */ 12 | 13 | public interface ReviewInteractor { 14 | 15 | Subscription loadBookHotReview(String bookId, RequestCallBack callBack); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_common_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/RankDetailInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.listener.RequestCallBack; 4 | 5 | import rx.Subscription; 6 | 7 | /** 8 | * @author boge 9 | * @version 1.0 10 | * @date 2016/10/21 11 | */ 12 | 13 | public interface RankDetailInteractor { 14 | 15 | Subscription loadRankDetail(String rankingId , RequestCallBack callBack); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/listener/OnReadStateChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.listener; 2 | 3 | /** 4 | * @author yuyh. 5 | * @date 2016/9/21. 6 | */ 7 | public interface OnReadStateChangeListener { 8 | 9 | void onChapterChanged(int chapter); 10 | 11 | void onPageChanged(int chapter, int page); 12 | 13 | void onLoadChapterFailure(int chapter); 14 | 15 | void onCenterClick(); 16 | 17 | void onFlip(); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter.base; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import com.boge.bogebook.mvp.view.base.BaseView; 6 | 7 | /** 8 | * @author boge 9 | * @version 1.0 10 | * @date 2016/10/14 11 | */ 12 | 13 | public interface BasePresenter { 14 | 15 | void attachView(@NonNull BaseView view); 16 | 17 | void onDestroy(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/BookListDetailInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.listener.RequestCallBack; 4 | 5 | import rx.Subscription; 6 | 7 | /** 8 | * @author boge 9 | * @version 1.0 10 | * @date 2016/11/11 11 | */ 12 | 13 | public interface BookListDetailInteractor { 14 | 15 | Subscription loadBookListDetail(String bookListId, RequestCallBack callBack); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/RankingView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.RankingList; 4 | import com.boge.bogebook.mvp.view.base.BaseView; 5 | 6 | /** 7 | * Created by boge on 2016/10/19. 8 | */ 9 | 10 | public interface RankingView extends BaseView { 11 | 12 | /** 13 | * 设置排行榜列表 14 | * @param rankingList 15 | */ 16 | void setRankingList(RankingList rankingList); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/component/ApplicationComponent.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.component; 2 | 3 | import android.content.Context; 4 | 5 | import com.boge.bogebook.module.ApplicationModule; 6 | 7 | import dagger.Component; 8 | 9 | /** 10 | * @author boge 11 | * @version 1.0 12 | * @date 2016/10/13 13 | */ 14 | 15 | @Component(modules = ApplicationModule.class) 16 | public interface ApplicationComponent { 17 | 18 | Context getApplication(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/listener/RequestCallBack.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.listener; 2 | 3 | /** 4 | * @author boge 5 | * @version 1.0 6 | * @date 2016/9/20 7 | */ 8 | public interface RequestCallBack { 9 | 10 | void beforeRequest(); 11 | 12 | /** 13 | * 数据加载成功,调用 14 | * @param data 15 | */ 16 | void success(T data); 17 | 18 | /** 19 | * 出现异常是调用 20 | * @param errorMsg 21 | */ 22 | void onError(String errorMsg); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/CategortBookView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.support.BookInfo; 4 | import com.boge.bogebook.mvp.view.base.BaseView; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by boge on 2016/10/26. 10 | */ 11 | 12 | public interface CategortBookView extends BaseView { 13 | 14 | void setCates(List cates); 15 | 16 | void setBookInfos(List bookInfos, boolean isLoad); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/CategoryView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.CategoryList; 4 | import com.boge.bogebook.mvp.view.base.BaseView; 5 | 6 | /** 7 | * @author boge 8 | * @version 1.0 9 | * @date 2016/10/21 10 | */ 11 | 12 | public interface CategoryView extends BaseView { 13 | 14 | /** 15 | * 设置一级分类 16 | * @param categoryList 17 | */ 18 | void setCategoryList(CategoryList categoryList); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_book_detail.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_rank_detail.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/BookDetailInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.entity.BookDetail; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | 6 | import rx.Subscription; 7 | 8 | /** 9 | * @author boge 10 | * @version 1.0 11 | * @date 2016/10/21 12 | */ 13 | 14 | public interface BookDetailInteractor { 15 | 16 | Subscription loadBookDetail(String bookId , RequestCallBack callBack); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_categort_book.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_battery_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/test/java/com/boge/bogebook/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/BookDetailView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.BookDetail; 4 | import com.boge.bogebook.entity.HotReview; 5 | import com.boge.bogebook.mvp.view.base.BaseView; 6 | 7 | /** 8 | * @author boge 9 | * @version 1.0 10 | * @date 2016/10/21 11 | */ 12 | 13 | public interface BookDetailView extends BaseView { 14 | 15 | void setBookDetail(BookDetail bookDetail); 16 | 17 | void setBookHotReview(HotReview hotReview); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/RankDetailView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.support.BookInfo; 4 | import com.boge.bogebook.mvp.view.base.BaseView; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by boge on 2016/10/20. 10 | * 排行榜详细清单 11 | */ 12 | 13 | public interface RankDetailView extends BaseView { 14 | 15 | /** 16 | * 设置排行榜详细内容 17 | * @param rankings 18 | */ 19 | void setRankings(List bookInfos); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_categort_book.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/CategoryInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.entity.CategoryList; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | 6 | import rx.Subscription; 7 | 8 | /** 9 | * @author boge 10 | * @version 1.0 11 | * @date 2016/10/21 12 | */ 13 | 14 | public interface CategoryInteractor { 15 | 16 | /** 17 | * 加载一级分类 18 | */ 19 | Subscription loadCategoryList(RequestCallBack callBack); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/AuthorView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.support.BookInfo; 4 | import com.boge.bogebook.mvp.view.base.BaseView; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author boge 10 | * @version 1.0 11 | * @date 2017/3/8 12 | */ 13 | 14 | public interface AuthorView extends BaseView { 15 | 16 | /** 17 | * 小说信息 18 | * @param bookInfos 19 | */ 20 | void setBooks(List bookInfos, boolean isTags); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/BookListDetailView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.BookListDetail; 4 | import com.boge.bogebook.mvp.view.base.BaseView; 5 | 6 | /** 7 | * @author boge 8 | * @version 1.0 9 | * @date 2016/11/11 10 | */ 11 | 12 | public interface BookListDetailView extends BaseView { 13 | 14 | /** 15 | * 设置书单详情 16 | * @param bookListDetail 17 | */ 18 | void setBookListDetail(BookListDetail.BookListBean bookListDetail); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/ReaderView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.BookToc; 4 | import com.boge.bogebook.entity.ChapterRead; 5 | import com.boge.bogebook.mvp.view.base.BaseView; 6 | 7 | /** 8 | * @author boge 9 | * @version 1.0 10 | * @date 2016/11/2 11 | */ 12 | 13 | public interface ReaderView extends BaseView{ 14 | 15 | void setBookToc(BookToc bookToc); 16 | 17 | void showChapterRead(ChapterRead.ChapterBean chapterBean , int chapter); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/volume_checkbox_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/LocalBookView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.mvp.view.base.BaseView; 4 | import com.boge.entity.LocalAndRecomendBook; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author boge 10 | * @version 1.0 11 | * @date 2016/10/28 12 | */ 13 | 14 | public interface LocalBookView extends BaseView { 15 | 16 | /** 17 | * 设置本地的读书 18 | * @param localBooks 19 | */ 20 | void setLocalBook(List localBooks); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_blank.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/ReaderPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/11/2 9 | */ 10 | 11 | public interface ReaderPresenter extends BasePresenter { 12 | 13 | /** 14 | * 加载书籍的章节 15 | * @param bookid 16 | */ 17 | void loadBookToc(String bookid); 18 | 19 | /** 20 | * 加载章节内容 21 | * @param url 22 | */ 23 | void loadChapterContent(String url , int chapter); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/module/ActivityModule.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.module; 2 | 3 | import android.app.Activity; 4 | 5 | import dagger.Module; 6 | import dagger.Provides; 7 | 8 | /** 9 | * @author boge 10 | * @version 1.0 11 | * @date 2016/10/13 12 | */ 13 | 14 | @Module 15 | public class ActivityModule { 16 | 17 | private Activity mActivity; 18 | 19 | public ActivityModule(Activity activity) { 20 | mActivity = activity; 21 | } 22 | 23 | @Provides 24 | Activity providesActivity() { 25 | return mActivity; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_find.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/module/FragmentModule.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.module; 2 | 3 | 4 | import android.support.v4.app.Fragment; 5 | 6 | import dagger.Module; 7 | import dagger.Provides; 8 | 9 | /** 10 | * @author boge 11 | * @version 1.0 12 | * @date 2016/10/13 13 | */ 14 | 15 | @Module 16 | public class FragmentModule { 17 | 18 | private Fragment fragment; 19 | 20 | public FragmentModule(Fragment fragment) { 21 | fragment = fragment; 22 | } 23 | 24 | @Provides 25 | Fragment providesFragment() { 26 | return fragment; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_chapter.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/ReaderInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.listener.RequestCallBack; 4 | 5 | import rx.Subscription; 6 | 7 | /** 8 | * @author boge 9 | * @version 1.0 10 | * @date 2016/11/2 11 | */ 12 | 13 | public interface ReaderInteractor { 14 | 15 | Subscription getChaptersId(String bookid , RequestCallBack callBack); 16 | 17 | Subscription loadBookToc(String bookid , RequestCallBack callBack); 18 | 19 | Subscription loadChapterContent(String url, int chapter , RequestCallBack callBack); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_ranking_child.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 14 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/SearchPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/11/3 9 | */ 10 | 11 | public interface SearchPresenter extends BasePresenter { 12 | 13 | /** 14 | * 加载热门搜索 15 | */ 16 | void loadHotWords(); 17 | 18 | /** 19 | * 关键字补全 20 | * @param query 21 | */ 22 | void autoComplete(String query); 23 | 24 | /** 25 | * 搜索书籍 26 | * @param query 27 | */ 28 | void searchBook(String query); 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/AuthorPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2017/3/8 9 | */ 10 | 11 | public interface AuthorPresenter extends BasePresenter { 12 | 13 | /** 14 | * 根据作者查询书籍 15 | * @param author 16 | */ 17 | void loadAuthorToBook(String author); 18 | 19 | /** 20 | * 根据标签查询书籍 21 | * @param tags 22 | */ 23 | void loadTagToBook(String tags); 24 | 25 | /** 26 | * 加载更多 27 | */ 28 | void loadBooks(); 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/ThemeBookPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/11/8 9 | */ 10 | 11 | public interface ThemeBookPresenter extends BasePresenter { 12 | 13 | /** 14 | * 获取主题书单标签列表 15 | */ 16 | void loadTagType(); 17 | 18 | /** 19 | * 加载主题书单列表 20 | * @param type 21 | * @param tag 22 | */ 23 | void loadBooksList(String type, String tag); 24 | 25 | /** 26 | * 加载更多 27 | */ 28 | void loadMore(); 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/AuthorInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.entity.support.BookInfo; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | 6 | import java.util.List; 7 | 8 | import rx.Subscription; 9 | 10 | /** 11 | * @author boge 12 | * @version 1.0 13 | * @date 2017/3/8 14 | */ 15 | 16 | public interface AuthorInteractor { 17 | 18 | Subscription loadAuthorToBook(String author , RequestCallBack> callBack); 19 | 20 | Subscription loadTagToBook(String tags, int start, int limit, RequestCallBack> callBack); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/component/FragmentComponent.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.component; 2 | 3 | import com.boge.bogebook.mvp.ui.fragments.FindFragment; 4 | import com.boge.bogebook.mvp.ui.fragments.RankDetailFragment; 5 | import com.boge.bogebook.mvp.ui.fragments.RecommendFragment; 6 | 7 | import dagger.Component; 8 | 9 | /** 10 | * @author boge 11 | * @version 1.0 12 | * @date 2016/10/14 13 | */ 14 | 15 | @Component(dependencies = ApplicationComponent.class ) 16 | public interface FragmentComponent { 17 | 18 | void inject(RecommendFragment fragment); 19 | 20 | void inject(FindFragment fragment); 21 | 22 | void inject(RankDetailFragment fragment); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/module/ApplicationModule.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.module; 2 | 3 | import android.content.Context; 4 | 5 | import com.boge.bogebook.BookApplication; 6 | 7 | import dagger.Module; 8 | import dagger.Provides; 9 | 10 | /** 11 | * @author boge 12 | * @version 1.0 13 | * @date 2016/10/13 14 | */ 15 | 16 | @Module 17 | public class ApplicationModule { 18 | 19 | private BookApplication application; 20 | 21 | public ApplicationModule(BookApplication application) { 22 | this.application = application; 23 | } 24 | 25 | @Provides 26 | public Context providesApplicaitonContext(){ 27 | return application.getApplicationContext(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /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 C:\Users\Administrator\AppData\Local\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 details, 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/main/java/com/boge/bogebook/mvp/ui/fragments/CategortBookActivityFragment.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.fragments; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.os.Bundle; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | 9 | import com.boge.bogebook.R; 10 | 11 | 12 | public class CategortBookActivityFragment extends Fragment { 13 | 14 | public CategortBookActivityFragment() { 15 | } 16 | 17 | @Override 18 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 19 | Bundle savedInstanceState) { 20 | return inflater.inflate(R.layout.fragment_categort_book, container, false); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progressbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/view/CustomExpandableListView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.view; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.widget.ExpandableListView; 6 | 7 | /** 8 | * Created by Administrator on 2016/10/19. 9 | */ 10 | 11 | public class CustomExpandableListView extends ExpandableListView { 12 | 13 | public CustomExpandableListView(Context context, AttributeSet attrs) { 14 | super(context, attrs); 15 | } 16 | 17 | @Override 18 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 19 | int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST); 20 | 21 | super.onMeasure(widthMeasureSpec, expandSpec); 22 | } 23 | } -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_rank_detail.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/ThemeBookView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.BookListTags; 4 | import com.boge.bogebook.entity.BookLists; 5 | import com.boge.bogebook.mvp.view.base.BaseView; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author boge 11 | * @version 1.0 12 | * @date 2016/11/8 13 | */ 14 | 15 | public interface ThemeBookView extends BaseView { 16 | 17 | /** 18 | * 设置主题书单标签列表 19 | * @param dataBeanList 20 | */ 21 | void setTagsType(List dataBeanList); 22 | 23 | /** 24 | * 设置书单列表 25 | * @param bookLists 书单列表 26 | * @param isLoad 是否是加载的数据 27 | */ 28 | void setBookList(List bookLists, boolean isLoad); 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progressbar1.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_tag_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/tag_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /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/java/com/boge/bogebook/mvp/view/SearchView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.AutoComplete; 4 | import com.boge.bogebook.entity.HotWord; 5 | import com.boge.bogebook.entity.support.BookInfo; 6 | import com.boge.bogebook.mvp.view.base.BaseView; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @author boge 12 | * @version 1.0 13 | * @date 2016/11/3 14 | */ 15 | 16 | public interface SearchView extends BaseView { 17 | 18 | /** 19 | * 设置热门搜索 20 | * @param hotWords 21 | */ 22 | void setHotWords(HotWord hotWords); 23 | 24 | /** 25 | * 关键字补全信息 26 | * @param autoComplete 27 | */ 28 | void setAutoComplete(AutoComplete autoComplete); 29 | 30 | /** 31 | * 小说信息 32 | * @param bookInfos 33 | */ 34 | void setBooks(List bookInfos); 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/seekbar_battery_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/layout/item_img_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 13 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/view/RecommendView.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.view; 2 | 3 | import com.boge.bogebook.entity.BookUpdateInfo; 4 | import com.boge.bogebook.mvp.view.base.BaseView; 5 | import com.boge.entity.LocalAndRecomendBook; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @author boge 11 | * @version 1.0 12 | * @date 2016/10/14 13 | */ 14 | 15 | public interface RecommendView extends BaseView { 16 | 17 | /** 18 | * 初始化推荐小说 19 | * @param recommendBookList 20 | */ 21 | void setReCommendBook(List books); 22 | 23 | /** 24 | * 设置小说更新信息 25 | * @param bookUpdateInfos 26 | */ 27 | void setBookUpdateInfo(List books); 28 | 29 | /** 30 | * 添加书籍 31 | * @param books 32 | */ 33 | void addBookCase(List books); 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/SearchInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.listener.RequestCallBack; 4 | 5 | import rx.Subscription; 6 | 7 | /** 8 | * @author boge 9 | * @version 1.0 10 | * @date 2016/11/3 11 | */ 12 | 13 | public interface SearchInteractor { 14 | 15 | /** 16 | * 加载热门搜索 17 | * @param callBack 18 | * @return 19 | */ 20 | Subscription loadHotWord(RequestCallBack callBack); 21 | 22 | /** 23 | * 搜索关键字,补全 24 | * @param query 25 | * @param callBack 26 | * @return 27 | */ 28 | Subscription autoComplete(String query , RequestCallBack callBack); 29 | 30 | /** 31 | * 搜索书籍 32 | * @param query 33 | * @param callBack 34 | * @return 35 | */ 36 | Subscription searchBook(String query , RequestCallBack callBack); 37 | } 38 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/boge/bogebook/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook; 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.boge.bogebook", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/entity/AutoComplete.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.entity; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/13 9 | */ 10 | 11 | public class AutoComplete { 12 | 13 | 14 | /** 15 | * keywords : ["tfboys之十二星座的守护","tfboys殿下的专宠萌物","tfboys之玫瑰的秘密","tfboys之凯皇溺宠","tfboys之追梦女孩","tfboys阳光之夏","tfboys先婚后爱","tfboys之追心不追星","tfboys我是你的谁","tfboys之棉花糖之恋"] 16 | * ok : true 17 | */ 18 | 19 | private boolean ok; 20 | private List keywords; 21 | 22 | public boolean isOk() { 23 | return ok; 24 | } 25 | 26 | public void setOk(boolean ok) { 27 | this.ok = ok; 28 | } 29 | 30 | public List getKeywords() { 31 | return keywords; 32 | } 33 | 34 | public void setKeywords(List keywords) { 35 | this.keywords = keywords; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/CategortBookPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/11/4 9 | */ 10 | 11 | public interface CategortBookPresenter extends BasePresenter { 12 | 13 | /** 14 | * 加载二级分类 15 | * @param major 1级分类 16 | */ 17 | void loadCategortLv2(String gender, String major); 18 | 19 | /** 20 | * 按分类获取书籍列表 21 | * 22 | * @param gender male、female、press 23 | * @param type hot(热门)、new(新书)、reputation(好评)、over(完结) 24 | * @param major 玄幻 25 | * @param minor 东方玄幻、异界大陆、异界争霸、远古神话 26 | * @return 27 | */ 28 | void loadBookInfos(String gender, String type, String major, String minor); 29 | 30 | /** 31 | * 加载更多 32 | */ 33 | void loadBookInfos(); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_category.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/ThemeBookInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.listener.RequestCallBack; 4 | 5 | import rx.Subscription; 6 | 7 | /** 8 | * @author boge 9 | * @version 1.0 10 | * @date 2016/11/8 11 | */ 12 | 13 | public interface ThemeBookInteractor { 14 | 15 | /** 16 | * 加载主题书单标签 17 | * @param callBack 18 | * @return 19 | */ 20 | Subscription loadTagType(RequestCallBack callBack); 21 | 22 | /** 23 | * 获取主题书单列表 24 | * @param duration 25 | * @param sort 26 | * @param start 27 | * @param limit 28 | * @param tag 29 | * @param gender 30 | * @param callBack 31 | * @return 32 | */ 33 | Subscription loadBookLists(String duration, String sort, int start, 34 | int limit, String tag, String gender, RequestCallBack callBack); 35 | 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/adapter/ReviewAdapter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.support.v7.widget.RecyclerView; 5 | 6 | import com.boge.bogebook.mvp.ui.adapter.base.BaseRecyclerViewAdapter; 7 | import com.boge.bogebook.mvp.ui.adapter.base.BaseViewHolder; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @author boge 13 | * @version 1.0 14 | * @date 2017/3/16 15 | */ 16 | 17 | public class ReviewAdapter extends BaseRecyclerViewAdapter { 18 | 19 | public ReviewAdapter(Context mContext, List mList, int... layoutIds) { 20 | super(mContext, mList, layoutIds); 21 | } 22 | 23 | @Override 24 | protected void onBindData(BaseViewHolder holder, int position, Object item) { 25 | 26 | } 27 | 28 | @Override 29 | public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 30 | 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_tags_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/fragments/BlankFragment.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.fragments; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.Fragment; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | 9 | import com.boge.bogebook.R; 10 | 11 | /** 12 | * A simple {@link Fragment} subclass. 13 | * Activities that contain this fragment must implement the 14 | * {@link BlankFragment.OnFragmentInteractionListener} interface 15 | * to handle interaction events. 16 | * Use the {@link BlankFragment#newInstance} factory method to 17 | * create an instance of this fragment. 18 | */ 19 | public class BlankFragment extends Fragment { 20 | 21 | @Override 22 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 23 | Bundle savedInstanceState) { 24 | return inflater.inflate(R.layout.fragment_blank, container, false); 25 | } 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/CategortBookInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.common.Constant; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | 6 | import rx.Subscription; 7 | 8 | /** 9 | * @author boge 10 | * @version 1.0 11 | * @date 2016/11/4 12 | */ 13 | 14 | public interface CategortBookInteractor { 15 | 16 | /** 17 | * 获取二级分类 18 | */ 19 | Subscription loadCategortLv2(RequestCallBack callBack); 20 | 21 | 22 | /** 23 | * 按分类获取书籍列表 24 | * 25 | * @param gender male、female、press 26 | * @param type hot(热门)、new(新书)、reputation(好评)、over(完结) 27 | * @param major 玄幻 28 | * @param minor 东方玄幻、异界大陆、异界争霸、远古神话 29 | * @param start 开始下标 30 | * @param limit 结束下标 分页 31 | * @return 32 | */ 33 | Subscription loadBookInfos(String gender, @Constant.CateType String type, String major, String minor, int start, int limit, RequestCallBack callBack); 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/entity/HotWord.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.entity; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/13 9 | * 热门搜索 10 | */ 11 | 12 | public class HotWord { 13 | 14 | 15 | /** 16 | * hotWords : ["暖妻成瘾","Boss太嚣张:老公,结婚吧","都市奇门医圣","九幽天帝","我欲封天","余罪","绝宠妖妃:邪王,太闷骚!","娇宠令","地府朋友圈","苗疆蛊事","鬼王盛宠:纨绔医妃有点野","妖孽狂妃:邪君宠溺小妖妃","无敌秒杀系统","新夫上任,早安老婆大人!","仙武道纪","盛宠妻宝","契约婚姻,娶一赠一","百万萌妻:总裁的私密眷宠","英雄联盟之谁与争锋","惹火燃情:总裁,慢点追","豪门重生之妇贵逼人","圣魔猎手","痴傻废柴三小姐:医手遮天","绝色元素师:邪王的小野妃","318女生宿舍"] 17 | * ok : true 18 | */ 19 | 20 | private boolean ok; 21 | private List hotWords; 22 | 23 | public boolean isOk() { 24 | return ok; 25 | } 26 | 27 | public void setOk(boolean ok) { 28 | this.ok = ok; 29 | } 30 | 31 | public List getHotWords() { 32 | return hotWords; 33 | } 34 | 35 | public void setHotWords(List hotWords) { 36 | this.hotWords = hotWords; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/RecommendPresenter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter; 2 | 3 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 4 | import com.boge.entity.LocalAndRecomendBook; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author boge 10 | * @version 1.0 11 | * @date 2016/10/14 12 | */ 13 | 14 | public interface RecommendPresenter extends BasePresenter{ 15 | 16 | /** 17 | * 根据性别加载推荐小说 18 | * @param gender 19 | */ 20 | void loadRecommendBook(String gender); 21 | 22 | /** 23 | * 加载更新信息 24 | */ 25 | void loadUpdateInfo(); 26 | 27 | /** 28 | * 往书架添加书籍 29 | * @param books 30 | */ 31 | void addBookcase(List books); 32 | 33 | /** 34 | * 书籍置顶 35 | * @param book 36 | */ 37 | void bookStickied(LocalAndRecomendBook book); 38 | 39 | /** 40 | * 点击书籍,更换位置 41 | * @param book 42 | */ 43 | void bookOnclick(LocalAndRecomendBook book , int location); 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_read_theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 18 | 19 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/popupwindow_chapter.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 19 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/entity/support/FindBean.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.entity.support; 2 | 3 | /** 4 | * @author boge 5 | * @version 1.0 6 | * @date 2016/10/17 7 | * 发现类 8 | */ 9 | 10 | public class FindBean { 11 | 12 | private String title; 13 | private int iconResId; 14 | 15 | public FindBean(String title, int iconResId) { 16 | this.title = title; 17 | this.iconResId = iconResId; 18 | } 19 | 20 | public FindBean() { 21 | } 22 | 23 | public String getTitle() { 24 | return title; 25 | } 26 | 27 | public void setTitle(String title) { 28 | this.title = title; 29 | } 30 | 31 | public int getIconResId() { 32 | return iconResId; 33 | } 34 | 35 | public void setIconResId(int iconResId) { 36 | this.iconResId = iconResId; 37 | } 38 | 39 | @Override 40 | public String toString() { 41 | return "FindBean{" + 42 | "title='" + title + '\'' + 43 | ", iconResId=" + iconResId + 44 | '}'; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/adapter/RankFragmentPagerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.adapter; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentPagerAdapter; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Created by Administrator on 2016/10/20. 11 | */ 12 | 13 | public class RankFragmentPagerAdapter extends FragmentPagerAdapter { 14 | 15 | private List fragments; 16 | private List datas; 17 | 18 | public RankFragmentPagerAdapter(FragmentManager fm , List fragments , List datas) { 19 | super(fm); 20 | this.fragments = fragments; 21 | this.datas = datas; 22 | } 23 | 24 | @Override 25 | public Fragment getItem(int position) { 26 | return fragments.get(position); 27 | } 28 | 29 | @Override 30 | public int getCount() { 31 | return fragments == null ? 0 :fragments.size(); 32 | } 33 | 34 | @Override 35 | public CharSequence getPageTitle(int position) { 36 | return datas.get(position); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_ranking_group.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 21 | 22 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/RecommendInteractor.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor; 2 | 3 | import com.boge.bogebook.listener.RequestCallBack; 4 | import com.boge.entity.LocalAndRecomendBook; 5 | 6 | import java.util.List; 7 | 8 | import rx.Subscription; 9 | 10 | /** 11 | * @author boge 12 | * @version 1.0 13 | * @date 2016/10/14 14 | */ 15 | 16 | public interface RecommendInteractor { 17 | /** 18 | * 加载书架的书籍 19 | * @param gender 20 | * @param callBack 21 | * @return 22 | */ 23 | Subscription loadRecommendBook(String gender , RequestCallBack callBack); 24 | 25 | /** 26 | * 加载书架网络图书的更新信息 27 | * @param view 28 | * @param id 29 | * @param callBack 30 | * @return 31 | */ 32 | Subscription loadBookupdateInfo(String view, String id, RequestCallBack callBack); 33 | 34 | /** 35 | * 添加书籍到书架 36 | * @param books 37 | */ 38 | void addBookcase(List books); 39 | 40 | /** 41 | * 书籍置顶 42 | * @param book 43 | */ 44 | void bookStickied(LocalAndRecomendBook book); 45 | 46 | void bookOnclick(LocalAndRecomendBook book , int location); 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 8dp 7 | 72dp 8 | 96dp 9 | 8dp 10 | 8dp 11 | 4dp 12 | 12sp 13 | 14sp 14 | 16sp 15 | 18sp 16 | 20sp 17 | 22sp 18 | 8dp 19 | 8dp 20 | 180dp 21 | 16dp 22 | 12dp 23 | 25dp 24 | 25 | 12dp 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/values/attr.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 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_find.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 24 | 25 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_ranking.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_book_list_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 | 26 | 27 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /daogenerator/src/main/java/com/boge/DaoAutoGenerator.java: -------------------------------------------------------------------------------- 1 | package com.boge; 2 | 3 | import org.greenrobot.greendao.generator.DaoGenerator; 4 | import org.greenrobot.greendao.generator.Entity; 5 | import org.greenrobot.greendao.generator.Schema; 6 | 7 | public class DaoAutoGenerator { 8 | 9 | public static void main(String[] args){ 10 | 11 | Schema schema = new Schema(1 , "com.boge.entity"); 12 | schema.setDefaultJavaPackageDao("com.boge.dao"); 13 | 14 | addLocalAndRecomendBook(schema); 15 | 16 | try { 17 | new DaoGenerator().generateAll(schema , "./app/src/main/java-gen"); 18 | } catch (Exception e) { 19 | e.printStackTrace(); 20 | } 21 | } 22 | 23 | private static void addLocalAndRecomendBook(Schema schema) { 24 | Entity entity = schema.addEntity("LocalAndRecomendBook"); 25 | 26 | entity.addIdProperty(); 27 | entity.addStringProperty("Path"); 28 | entity.addLongProperty("size"); 29 | entity.addStringProperty("bookId"); 30 | entity.addStringProperty("cover"); 31 | entity.addStringProperty("title").notNull(); 32 | entity.addStringProperty("lastChapter"); 33 | entity.addBooleanProperty("isLocal"); 34 | entity.addBooleanProperty("hasUp"); 35 | entity.addBooleanProperty("isTop"); 36 | entity.addIntProperty("location"); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/adapter/ImgAndTextAdapter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.listener.OnBaseItemClick; 8 | import com.boge.bogebook.mvp.ui.adapter.base.BaseRecyclerViewAdapter; 9 | import com.boge.bogebook.mvp.ui.adapter.base.BaseViewHolder; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * @author boge 15 | * @version 1.0 16 | * @date 2016/11/3 17 | */ 18 | 19 | public class ImgAndTextAdapter extends BaseRecyclerViewAdapter { 20 | private OnBaseItemClick onBaseItemClick; 21 | private int imgId; 22 | 23 | public ImgAndTextAdapter(Context mContext, List mList, int imgId, OnBaseItemClick itemClick) { 24 | super(mContext, mList, R.layout.item_img_text); 25 | onBaseItemClick = itemClick; 26 | this.imgId = imgId; 27 | } 28 | 29 | @Override 30 | protected void onBindData(BaseViewHolder holder, final int position, final String item) { 31 | holder.setText(R.id.tv_key_book , item) 32 | .setImageResource(R.id.iv_image , imgId); 33 | holder.setOnItemViewClickListener(new View.OnClickListener() { 34 | @Override 35 | public void onClick(View view) { 36 | onBaseItemClick.onItemClick(view , position , item); 37 | } 38 | }); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.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 | 本周最热 25 | 最新发布 26 | 最多收藏 27 | 28 | 29 | 30 | 全部 31 | 男生 32 | 女生 33 | 玄幻 34 | 都市 35 | 总裁 36 | 37 | 38 | 39 | 置顶 40 | 书籍详情 41 | 移入养肥区 42 | 缓存全本 43 | 删除 44 | 批量管理 45 | 46 | 47 | 置顶 48 | 删除 49 | 批量管理 50 | 51 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/base/BasePresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter.base; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import com.boge.bogebook.listener.RequestCallBack; 6 | import com.boge.bogebook.mvp.view.base.BaseView; 7 | 8 | import rx.Subscription; 9 | 10 | /** 11 | * @author boge 12 | * @version 1.0 13 | * @date 2016/10/14 14 | */ 15 | 16 | public class BasePresenterImpl implements BasePresenter,RequestCallBack { 17 | 18 | protected T mView; 19 | 20 | protected Subscription mSubscription; 21 | 22 | 23 | @Override 24 | public void attachView(@NonNull BaseView view) { 25 | mView = (T) view; 26 | } 27 | 28 | @Override 29 | public void onDestroy() { 30 | if (mSubscription != null && !mSubscription.isUnsubscribed()) { 31 | mSubscription.unsubscribe(); 32 | } 33 | } 34 | 35 | @Override 36 | public void beforeRequest() { 37 | if(mView != null){ 38 | mView.showProgress(); 39 | } 40 | } 41 | 42 | @Override 43 | public void success(E data) { 44 | if(mView != null){ 45 | mView.hideProgress(); 46 | } 47 | } 48 | 49 | @Override 50 | public void onError(String errorMsg) { 51 | if(mView != null){ 52 | mView.hideProgress(); 53 | mView.showErrorMsg(errorMsg); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_author.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/util/Tools.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.util; 2 | 3 | import java.text.DecimalFormat; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/21 9 | */ 10 | 11 | public class Tools { 12 | 13 | /** 14 | * 数量大于10000时转换 15 | * @param n 16 | * @return 17 | */ 18 | public static String intToStr(int n){ 19 | if(n>10000){ 20 | return n/10000+"."+n%10000/1000+"万"; 21 | }else{ 22 | return String.valueOf(n); 23 | } 24 | } 25 | 26 | public static String longToDateString(long l) { 27 | long l1 = 1000 * 60 * 60 * 24; 28 | long l2 = 30; 29 | long l3 = 12; 30 | 31 | if(l < l1){ 32 | return (l / (1000 * 60 * 60)) + "小时前"; 33 | }else if(l >= l1 && l/l1 < l2){ 34 | if(l / l1 == 1){ 35 | return "昨天"; 36 | }else{ 37 | return (l / l1)+"天前"; 38 | } 39 | } else if(l/l1 >= l2 && l/l1/l2 < l3){ 40 | return (l/l1 / l2)+"月前"; 41 | } else { 42 | return (l/l1/l2 / l3)+"年前"; 43 | } 44 | } 45 | 46 | 47 | public static String longToSize(long l){ 48 | DecimalFormat df = new DecimalFormat("#.##"); 49 | if(l / 1024 > 0 && l /(1024*1024) <= 0){ 50 | return df.format(l/1024.0)+"KB"; 51 | } else if(l / 1024 == 0){ 52 | return l+"B"; 53 | } else { 54 | return df.format(l/(1024*1024.0))+"MB"; 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/impl/ReviewPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter.impl; 2 | 3 | import com.boge.bogebook.entity.HotReview; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | import com.boge.bogebook.mvp.interactor.ReviewInteractor; 6 | import com.boge.bogebook.mvp.interactor.impl.ReviewInteractorImpl; 7 | import com.boge.bogebook.mvp.presenter.ReviewPresenter; 8 | import com.boge.bogebook.mvp.presenter.base.BasePresenterImpl; 9 | import com.boge.bogebook.mvp.view.BookDetailView; 10 | 11 | import javax.inject.Inject; 12 | 13 | /** 14 | * @author boge 15 | * @version 1.0 16 | * @date 2017/3/16 17 | */ 18 | 19 | public class ReviewPresenterImpl extends BasePresenterImpl implements ReviewPresenter, 20 | RequestCallBack { 21 | 22 | private ReviewInteractor reviewInteractor; 23 | 24 | @Inject 25 | public ReviewPresenterImpl(ReviewInteractorImpl reviewInteractor) { 26 | this.reviewInteractor = reviewInteractor; 27 | } 28 | 29 | @Override 30 | public void loadBookHotReview(String bookId) { 31 | reviewInteractor.loadBookHotReview(bookId, this); 32 | } 33 | 34 | @Override 35 | public void success(Object data) { 36 | super.success(data); 37 | if(mView != null){ 38 | if(data instanceof HotReview){ 39 | if(mView instanceof BookDetailView){ 40 | BookDetailView view = (BookDetailView) mView; 41 | view.setBookHotReview((HotReview) data); 42 | } 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/view/DrawableCenterButton.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.view; 2 | 3 | import android.content.Context; 4 | import android.graphics.Canvas; 5 | import android.graphics.drawable.Drawable; 6 | import android.util.AttributeSet; 7 | import android.util.Log; 8 | import android.widget.Button; 9 | 10 | /** 11 | * @author boge 12 | * @version 1.0 13 | * @date 2016/10/21 14 | */ 15 | 16 | public class DrawableCenterButton extends Button { 17 | public DrawableCenterButton(Context context) { 18 | super(context); 19 | } 20 | 21 | public DrawableCenterButton(Context context, AttributeSet attrs) { 22 | super(context, attrs); 23 | } 24 | 25 | public DrawableCenterButton(Context context, AttributeSet attrs, int defStyleAttr) { 26 | super(context, attrs, defStyleAttr); 27 | } 28 | 29 | 30 | @Override 31 | protected void onDraw(Canvas canvas) { 32 | Drawable[] drawables = getCompoundDrawables(); 33 | if (drawables != null) { 34 | Drawable drawableLeft = drawables[0]; 35 | if (drawableLeft != null) { 36 | float textWidth = getPaint().measureText(getText().toString()); 37 | int drawablePadding = getCompoundDrawablePadding(); 38 | int drawableWidth = 0; 39 | drawableWidth = drawableLeft.getIntrinsicWidth(); 40 | float bodyWidth = textWidth + drawableWidth + drawablePadding; 41 | canvas.translate((getWidth() - bodyWidth) / 2, 0); 42 | } 43 | } 44 | super.onDraw(canvas); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java-gen/com/boge/dao/DaoSession.java: -------------------------------------------------------------------------------- 1 | package com.boge.dao; 2 | 3 | import java.util.Map; 4 | 5 | import org.greenrobot.greendao.AbstractDao; 6 | import org.greenrobot.greendao.AbstractDaoSession; 7 | import org.greenrobot.greendao.database.Database; 8 | import org.greenrobot.greendao.identityscope.IdentityScopeType; 9 | import org.greenrobot.greendao.internal.DaoConfig; 10 | 11 | import com.boge.entity.LocalAndRecomendBook; 12 | 13 | import com.boge.dao.LocalAndRecomendBookDao; 14 | 15 | // THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. 16 | 17 | /** 18 | * {@inheritDoc} 19 | * 20 | * @see org.greenrobot.greendao.AbstractDaoSession 21 | */ 22 | public class DaoSession extends AbstractDaoSession { 23 | 24 | private final DaoConfig localAndRecomendBookDaoConfig; 25 | 26 | private final LocalAndRecomendBookDao localAndRecomendBookDao; 27 | 28 | public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig> 29 | daoConfigMap) { 30 | super(db); 31 | 32 | localAndRecomendBookDaoConfig = daoConfigMap.get(LocalAndRecomendBookDao.class).clone(); 33 | localAndRecomendBookDaoConfig.initIdentityScope(type); 34 | 35 | localAndRecomendBookDao = new LocalAndRecomendBookDao(localAndRecomendBookDaoConfig, this); 36 | 37 | registerDao(LocalAndRecomendBook.class, localAndRecomendBookDao); 38 | } 39 | 40 | public void clear() { 41 | localAndRecomendBookDaoConfig.clearIdentityScope(); 42 | } 43 | 44 | public LocalAndRecomendBookDao getLocalAndRecomendBookDao() { 45 | return localAndRecomendBookDao; 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/impl/RankingListPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter.impl; 2 | 3 | import com.boge.bogebook.entity.RankingList; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | import com.boge.bogebook.mvp.interactor.RankingInteractor; 6 | import com.boge.bogebook.mvp.interactor.impl.RankingInteractorImpl; 7 | import com.boge.bogebook.mvp.presenter.base.BasePresenterImpl; 8 | import com.boge.bogebook.mvp.presenter.RankingListPresenter; 9 | import com.boge.bogebook.mvp.view.RankingView; 10 | 11 | import javax.inject.Inject; 12 | 13 | /** 14 | * Created by Administrator on 2016/10/19. 15 | */ 16 | 17 | public class RankingListPresenterImpl extends BasePresenterImpl implements 18 | RankingListPresenter,RequestCallBack { 19 | 20 | private RankingInteractor rankingInteractor; 21 | 22 | @Inject 23 | public RankingListPresenterImpl(RankingInteractorImpl rankingInteractor) { 24 | this.rankingInteractor = rankingInteractor; 25 | } 26 | 27 | @Override 28 | public void loadRankingList() { 29 | this.beforeRequest(); 30 | mSubscription = rankingInteractor.loadRankingList(this); 31 | } 32 | 33 | @Override 34 | public void success(RankingList data) { 35 | super.success(data); 36 | if(mView != null){ 37 | mView.setRankingList(data); 38 | } 39 | } 40 | 41 | @Override 42 | public void onError(String errorMsg) { 43 | super.onError(errorMsg); 44 | if(mView != null){ 45 | mView.showErrorMsg(errorMsg); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/impl/BookDetailPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter.impl; 2 | 3 | import com.boge.bogebook.entity.BookDetail; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | import com.boge.bogebook.mvp.interactor.BookDetailInteractor; 6 | import com.boge.bogebook.mvp.interactor.impl.BookDetailInteractorImpl; 7 | import com.boge.bogebook.mvp.presenter.BookDetailPresenter; 8 | import com.boge.bogebook.mvp.presenter.base.BasePresenterImpl; 9 | import com.boge.bogebook.mvp.view.BookDetailView; 10 | 11 | import javax.inject.Inject; 12 | 13 | /** 14 | * @author boge 15 | * @version 1.0 16 | * @date 2016/10/21 17 | */ 18 | 19 | public class BookDetailPresenterImpl extends BasePresenterImpl 20 | implements BookDetailPresenter,RequestCallBack { 21 | 22 | private BookDetailInteractor bookDetailInteractor; 23 | 24 | @Inject 25 | public BookDetailPresenterImpl(BookDetailInteractorImpl bookDetailInteractor) { 26 | this.bookDetailInteractor = bookDetailInteractor; 27 | } 28 | 29 | @Override 30 | public void loadBookDetail(String bookID) { 31 | mSubscription = bookDetailInteractor.loadBookDetail(bookID , this); 32 | } 33 | 34 | @Override 35 | public void success(BookDetail data) { 36 | super.success(data); 37 | if(mView != null){ 38 | mView.setBookDetail(data); 39 | } 40 | } 41 | 42 | @Override 43 | public void onError(String errorMsg) { 44 | super.onError(errorMsg); 45 | if(mView != null){ 46 | mView.showErrorMsg(errorMsg); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/impl/CategoryPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter.impl; 2 | 3 | import com.boge.bogebook.entity.CategoryList; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | import com.boge.bogebook.mvp.interactor.CategoryInteractor; 6 | import com.boge.bogebook.mvp.interactor.impl.CategoryInteractorImpl; 7 | import com.boge.bogebook.mvp.presenter.base.BasePresenterImpl; 8 | import com.boge.bogebook.mvp.presenter.CategoryPresenter; 9 | import com.boge.bogebook.mvp.view.CategoryView; 10 | 11 | import javax.inject.Inject; 12 | 13 | /** 14 | * @author boge 15 | * @version 1.0 16 | * @date 2016/10/21 17 | */ 18 | 19 | public class CategoryPresenterImpl extends BasePresenterImpl 20 | implements CategoryPresenter,RequestCallBack { 21 | 22 | private CategoryInteractor categoryInteractor; 23 | 24 | @Inject 25 | public CategoryPresenterImpl(CategoryInteractorImpl categoryInteractor) { 26 | this.categoryInteractor = categoryInteractor; 27 | } 28 | 29 | @Override 30 | public void loadCategoryList() { 31 | this.beforeRequest(); 32 | mSubscription = categoryInteractor.loadCategoryList(this); 33 | } 34 | 35 | @Override 36 | public void success(CategoryList data) { 37 | super.success(data); 38 | if(mView != null){ 39 | mView.setCategoryList(data); 40 | } 41 | } 42 | 43 | @Override 44 | public void onError(String errorMsg) { 45 | super.onError(errorMsg); 46 | if(mView != null){ 47 | mView.showErrorMsg(errorMsg); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/impl/RankDetailPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter.impl; 2 | 3 | import com.boge.bogebook.entity.support.BookInfo; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | import com.boge.bogebook.mvp.interactor.RankDetailInteractor; 6 | import com.boge.bogebook.mvp.interactor.impl.RankDetailInteractorImpl; 7 | import com.boge.bogebook.mvp.presenter.RankDetailPresenter; 8 | import com.boge.bogebook.mvp.presenter.base.BasePresenterImpl; 9 | import com.boge.bogebook.mvp.view.RankDetailView; 10 | 11 | import java.util.List; 12 | 13 | import javax.inject.Inject; 14 | 15 | /** 16 | * @author boge 17 | * @version 1.0 18 | * @date 2016/10/21 19 | */ 20 | 21 | public class RankDetailPresenterImpl extends BasePresenterImpl> 22 | implements RankDetailPresenter,RequestCallBack> { 23 | 24 | private RankDetailInteractor> rankDetailInteractor; 25 | 26 | @Inject 27 | public RankDetailPresenterImpl(RankDetailInteractorImpl rankDetailInteractor) { 28 | this.rankDetailInteractor = rankDetailInteractor; 29 | } 30 | 31 | @Override 32 | public void loadRankDetail(String rankingId) { 33 | this.beforeRequest(); 34 | mSubscription = rankDetailInteractor.loadRankDetail(rankingId , this); 35 | } 36 | 37 | @Override 38 | public void success(List data) { 39 | super.success(data); 40 | if(mView != null){ 41 | mView.setRankings(data); 42 | } 43 | } 44 | 45 | @Override 46 | public void onError(String errorMsg) { 47 | super.onError(errorMsg); 48 | if(mView != null){ 49 | mView.showErrorMsg(errorMsg); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/adapter/ChapterAdapter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.entity.BookToc; 8 | import com.boge.bogebook.listener.OnBaseItemClick; 9 | import com.boge.bogebook.mvp.ui.adapter.base.BaseRecyclerViewAdapter; 10 | import com.boge.bogebook.mvp.ui.adapter.base.BaseViewHolder; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * @author boge 16 | * @version 1.0 17 | * @date 2017/2/20 18 | */ 19 | 20 | public class ChapterAdapter extends BaseRecyclerViewAdapter { 21 | 22 | private OnBaseItemClick onBaseItemClick; 23 | private int index = 0; 24 | 25 | public ChapterAdapter(Context mContext, List mList, int index, OnBaseItemClick itemClick) { 26 | super(mContext, mList, R.layout.item_chapter); 27 | this.index = index; 28 | this.onBaseItemClick = itemClick; 29 | } 30 | 31 | @Override 32 | protected void onBindData(BaseViewHolder holder, final int position, final BookToc.ChaptersBean item) { 33 | holder.setText(R.id.tv_chapter, item.getTitle()); 34 | if(index == position){ 35 | holder.setTextColorRes(R.id.tv_chapter, R.color.red); 36 | }else { 37 | holder.setTextColorRes(R.id.tv_chapter, R.color.black); 38 | } 39 | 40 | holder.setOnItemViewClickListener(new View.OnClickListener() { 41 | @Override 42 | public void onClick(View view) { 43 | if(onBaseItemClick != null){ 44 | onBaseItemClick.onItemClick(view , position , item); 45 | } 46 | } 47 | }); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/impl/RankingInteractorImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor.impl; 2 | 3 | import com.boge.bogebook.BookApplication; 4 | import com.boge.bogebook.R; 5 | import com.boge.bogebook.api.BookRetrofitManager; 6 | import com.boge.bogebook.entity.RankingList; 7 | import com.boge.bogebook.listener.RequestCallBack; 8 | import com.boge.bogebook.mvp.interactor.RankingInteractor; 9 | 10 | import javax.inject.Inject; 11 | 12 | import rx.Observer; 13 | import rx.Subscription; 14 | import rx.android.schedulers.AndroidSchedulers; 15 | import rx.schedulers.Schedulers; 16 | 17 | /** 18 | * Created by Administrator on 2016/10/19. 19 | */ 20 | 21 | public class RankingInteractorImpl implements RankingInteractor { 22 | 23 | @Inject 24 | public RankingInteractorImpl() {} 25 | 26 | 27 | @Override 28 | public Subscription loadRankingList(final RequestCallBack callBack) { 29 | return BookRetrofitManager.getInstance().getRankingList() 30 | .subscribeOn(Schedulers.io()) 31 | .observeOn(AndroidSchedulers.mainThread()) 32 | .subscribe(new Observer() { 33 | @Override 34 | public void onCompleted() { 35 | 36 | } 37 | 38 | @Override 39 | public void onError(Throwable e) { 40 | callBack.onError(BookApplication.getmContext().getResources().getString(R.string.net_error)); 41 | } 42 | 43 | @Override 44 | public void onNext(RankingList rankingList) { 45 | callBack.success(rankingList); 46 | } 47 | }); 48 | } 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/impl/BookListDetailPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter.impl; 2 | 3 | import com.boge.bogebook.entity.BookListDetail; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | import com.boge.bogebook.mvp.interactor.BookListDetailInteractor; 6 | import com.boge.bogebook.mvp.interactor.impl.BookListDetailInteractorImpl; 7 | import com.boge.bogebook.mvp.presenter.BookListDetailPresenter; 8 | import com.boge.bogebook.mvp.presenter.base.BasePresenterImpl; 9 | import com.boge.bogebook.mvp.view.BookListDetailView; 10 | 11 | import javax.inject.Inject; 12 | 13 | /** 14 | * @author boge 15 | * @version 1.0 16 | * @date 2016/11/11 17 | */ 18 | 19 | public class BookListDetailPresenterImpl extends BasePresenterImpl 20 | implements BookListDetailPresenter,RequestCallBack { 21 | 22 | private BookListDetailInteractor bookListDetailInteractor; 23 | 24 | @Inject 25 | public BookListDetailPresenterImpl(BookListDetailInteractorImpl bookListDetailInteractor) { 26 | this.bookListDetailInteractor = bookListDetailInteractor; 27 | } 28 | 29 | @Override 30 | public void loadBookListDetail(String bookListId) { 31 | mSubscription = bookListDetailInteractor.loadBookListDetail(bookListId, this); 32 | } 33 | 34 | @Override 35 | public void success(BookListDetail data) { 36 | super.success(data); 37 | if(mView != null){ 38 | mView.setBookListDetail(data.getBookList()); 39 | } 40 | } 41 | 42 | @Override 43 | public void onError(String errorMsg) { 44 | super.onError(errorMsg); 45 | if(mView != null){ 46 | mView.showErrorMsg(errorMsg); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/component/ActivityComponent.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.component; 2 | 3 | import com.boge.bogebook.module.ActivityModule; 4 | import com.boge.bogebook.mvp.ui.activity.AuthorActivity; 5 | import com.boge.bogebook.mvp.ui.activity.BookDetailActivity; 6 | import com.boge.bogebook.mvp.ui.activity.BookListDetailActivity; 7 | import com.boge.bogebook.mvp.ui.activity.CategortBookActivity; 8 | import com.boge.bogebook.mvp.ui.activity.CategoryActivity; 9 | import com.boge.bogebook.mvp.ui.activity.LocalBookActivity; 10 | import com.boge.bogebook.mvp.ui.activity.MainActivity; 11 | import com.boge.bogebook.mvp.ui.activity.RankDetailActivity; 12 | import com.boge.bogebook.mvp.ui.activity.RankingActivity; 13 | import com.boge.bogebook.mvp.ui.activity.ReaderActivity; 14 | import com.boge.bogebook.mvp.ui.activity.SearchActivity; 15 | import com.boge.bogebook.mvp.ui.activity.ThemeBookActivity; 16 | 17 | import dagger.Component; 18 | 19 | /** 20 | * @author boge 21 | * @version 1.0 22 | * @date 2016/10/13 23 | */ 24 | 25 | @Component( 26 | dependencies = ApplicationComponent.class, 27 | modules = ActivityModule.class 28 | ) 29 | public interface ActivityComponent { 30 | 31 | void inject(MainActivity activity); 32 | 33 | void inject(RankingActivity activity); 34 | 35 | void inject(RankDetailActivity activity); 36 | 37 | void inject(BookDetailActivity activity); 38 | 39 | void inject(CategoryActivity activity); 40 | 41 | void inject(CategortBookActivity activity); 42 | 43 | void inject(LocalBookActivity activity); 44 | 45 | void inject(ReaderActivity readerActivity); 46 | 47 | void inject(SearchActivity activity); 48 | 49 | void inject(ThemeBookActivity activity); 50 | 51 | void inject(BookListDetailActivity activity); 52 | 53 | void inject(AuthorActivity activity); 54 | } -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/entity/BookUpdateInfo.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.entity; 2 | 3 | /** 4 | * @author boge 5 | * @version 1.0 6 | * @date 2016/10/31 7 | */ 8 | 9 | public class BookUpdateInfo { 10 | 11 | 12 | /** 13 | * _id : 510f60ec59762e9453000007 14 | * author : 带玉 15 | * referenceSource : sogou 16 | * updated : 2016-10-30T08:04:29.399Z 17 | * chaptersCount : 6773 18 | * lastChapter : VIP卷 6774以后 19 | */ 20 | 21 | private String _id; 22 | private String author; 23 | private String referenceSource; 24 | private String updated; 25 | private int chaptersCount; 26 | private String lastChapter; 27 | 28 | public String get_id() { 29 | return _id; 30 | } 31 | 32 | public void set_id(String _id) { 33 | this._id = _id; 34 | } 35 | 36 | public String getAuthor() { 37 | return author; 38 | } 39 | 40 | public void setAuthor(String author) { 41 | this.author = author; 42 | } 43 | 44 | public String getReferenceSource() { 45 | return referenceSource; 46 | } 47 | 48 | public void setReferenceSource(String referenceSource) { 49 | this.referenceSource = referenceSource; 50 | } 51 | 52 | public String getUpdated() { 53 | return updated; 54 | } 55 | 56 | public void setUpdated(String updated) { 57 | this.updated = updated; 58 | } 59 | 60 | public int getChaptersCount() { 61 | return chaptersCount; 62 | } 63 | 64 | public void setChaptersCount(int chaptersCount) { 65 | this.chaptersCount = chaptersCount; 66 | } 67 | 68 | public String getLastChapter() { 69 | return lastChapter; 70 | } 71 | 72 | public void setLastChapter(String lastChapter) { 73 | this.lastChapter = lastChapter; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/adapter/TagBookRecyclerViewAdapter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.common.Constant; 8 | import com.boge.bogebook.entity.support.BookInfo; 9 | import com.boge.bogebook.listener.OnBaseItemClick; 10 | import com.boge.bogebook.mvp.ui.adapter.base.BaseRecyclerViewAdapter; 11 | import com.boge.bogebook.mvp.ui.adapter.base.BaseViewHolder; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * @author boge 17 | * @version 1.0 18 | * @date 2017/3/8 19 | */ 20 | 21 | public class TagBookRecyclerViewAdapter extends BaseRecyclerViewAdapter{ 22 | 23 | private OnBaseItemClick onBaseItemClick; 24 | 25 | public TagBookRecyclerViewAdapter(Context mContext, List mList, OnBaseItemClick onBaseItemClick) { 26 | super(mContext, mList, R.layout.item_tag_book); 27 | this.onBaseItemClick = onBaseItemClick; 28 | } 29 | 30 | @Override 31 | protected void onBindData(BaseViewHolder holder, final int position, final BookInfo item) { 32 | String cat = item.getCat(); 33 | cat = cat.replace("\"", "").replace(",", "|"); 34 | cat = cat.substring(1, cat.length()-1); 35 | holder.setText(R.id.tv_book_title, item.getTitle()) 36 | .setText(R.id.tv_shortIntro, item.getShortIntro()) 37 | .setImageUrl(R.id.iv_book_icon, Constant.IMG_BASE_URL+item.getCover()) 38 | .setText(R.id.tv_tags, cat); 39 | holder.setOnItemViewClickListener(new View.OnClickListener() { 40 | @Override 41 | public void onClick(View v) { 42 | if(onBaseItemClick != null){ 43 | onBaseItemClick.onItemClick(v, position, item); 44 | } 45 | } 46 | }); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/adapter/ReadThemeAdapter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.listener.OnBaseItemClick; 8 | import com.boge.bogebook.manager.ThemeManager; 9 | import com.boge.bogebook.mvp.ui.adapter.base.BaseRecyclerViewAdapter; 10 | import com.boge.bogebook.mvp.ui.adapter.base.BaseViewHolder; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * @author boge 16 | * @version 1.0 17 | * @date 2017/2/17 18 | */ 19 | 20 | public class ReadThemeAdapter extends BaseRecyclerViewAdapter { 21 | 22 | private OnBaseItemClick onBaseItemClick; 23 | private int selected = 0; 24 | 25 | public ReadThemeAdapter(Context mContext, List mList, int select, OnBaseItemClick itemClick) { 26 | super(mContext, mList, R.layout.item_read_theme); 27 | this.selected = select; 28 | onBaseItemClick = itemClick; 29 | } 30 | 31 | @Override 32 | protected void onBindData(BaseViewHolder holder, final int position, final Integer item) { 33 | ThemeManager.setReaderTheme(item, holder.getView(R.id.ivThemeBg)); 34 | 35 | if (selected == position) { 36 | holder.setVisibility(R.id.ivSelected, View.VISIBLE); 37 | } else { 38 | holder.setVisibility(R.id.ivSelected, View.GONE); 39 | } 40 | 41 | holder.setOnItemViewClickListener(new View.OnClickListener() { 42 | @Override 43 | public void onClick(View view) { 44 | if(onBaseItemClick != null){ 45 | onBaseItemClick.onItemClick(view , position , item); 46 | } 47 | } 48 | }); 49 | } 50 | 51 | public void setSelected(int selected) { 52 | this.selected = selected; 53 | notifyDataSetChanged(); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/impl/ReviewInteractorImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor.impl; 2 | 3 | import android.util.Log; 4 | 5 | import com.boge.bogebook.BookApplication; 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.api.BookRetrofitManager; 8 | import com.boge.bogebook.entity.HotReview; 9 | import com.boge.bogebook.listener.RequestCallBack; 10 | import com.boge.bogebook.mvp.interactor.ReviewInteractor; 11 | 12 | import javax.inject.Inject; 13 | 14 | import rx.Observer; 15 | import rx.Subscription; 16 | import rx.android.schedulers.AndroidSchedulers; 17 | import rx.schedulers.Schedulers; 18 | 19 | /** 20 | * @author boge 21 | * @version 1.0 22 | * @date 2017/3/16 23 | */ 24 | 25 | public class ReviewInteractorImpl implements ReviewInteractor { 26 | 27 | @Inject 28 | public ReviewInteractorImpl() { 29 | } 30 | 31 | @Override 32 | public Subscription loadBookHotReview(String bookId, final RequestCallBack callBack) { 33 | return BookRetrofitManager.getInstance().getHotReview(bookId) 34 | .subscribeOn(Schedulers.io()) 35 | .observeOn(AndroidSchedulers.mainThread()) 36 | .subscribe(new Observer() { 37 | @Override 38 | public void onCompleted() { 39 | 40 | } 41 | @Override 42 | public void onError(Throwable e) { 43 | callBack.onError(BookApplication.getmContext().getResources().getString(R.string.net_error)); 44 | Log.i("test" , e.getMessage()); 45 | e.printStackTrace(); 46 | } 47 | 48 | @Override 49 | public void onNext(HotReview hotReview) { 50 | callBack.success(hotReview); 51 | } 52 | }); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/impl/CategoryInteractorImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor.impl; 2 | 3 | import android.util.Log; 4 | 5 | import com.boge.bogebook.BookApplication; 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.api.BookRetrofitManager; 8 | import com.boge.bogebook.entity.CategoryList; 9 | import com.boge.bogebook.listener.RequestCallBack; 10 | import com.boge.bogebook.mvp.interactor.CategoryInteractor; 11 | 12 | import javax.inject.Inject; 13 | 14 | import rx.Observer; 15 | import rx.Subscription; 16 | import rx.android.schedulers.AndroidSchedulers; 17 | import rx.schedulers.Schedulers; 18 | 19 | /** 20 | * @author boge 21 | * @version 1.0 22 | * @date 2016/10/21 23 | */ 24 | 25 | public class CategoryInteractorImpl implements CategoryInteractor { 26 | 27 | @Inject 28 | public CategoryInteractorImpl() {} 29 | 30 | @Override 31 | public Subscription loadCategoryList(final RequestCallBack callBack) { 32 | return BookRetrofitManager.getInstance().getCategoryList() 33 | .subscribeOn(Schedulers.io()) 34 | .observeOn(AndroidSchedulers.mainThread()) 35 | .subscribe(new Observer() { 36 | @Override 37 | public void onCompleted() { 38 | 39 | } 40 | 41 | @Override 42 | public void onError(Throwable e) { 43 | callBack.onError(BookApplication.getmContext().getResources().getString(R.string.net_error)); 44 | Log.i("test" , e.getMessage()); 45 | e.printStackTrace(); 46 | } 47 | 48 | @Override 49 | public void onNext(CategoryList categoryList) { 50 | callBack.success(categoryList); 51 | } 52 | }); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/impl/BookDetailInteractorImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor.impl; 2 | 3 | import android.util.Log; 4 | 5 | import com.boge.bogebook.BookApplication; 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.api.BookRetrofitManager; 8 | import com.boge.bogebook.entity.BookDetail; 9 | import com.boge.bogebook.listener.RequestCallBack; 10 | import com.boge.bogebook.mvp.interactor.BookDetailInteractor; 11 | 12 | import javax.inject.Inject; 13 | 14 | import rx.Observer; 15 | import rx.Subscription; 16 | import rx.android.schedulers.AndroidSchedulers; 17 | import rx.schedulers.Schedulers; 18 | 19 | /** 20 | * @author boge 21 | * @version 1.0 22 | * @date 2016/10/21 23 | */ 24 | 25 | public class BookDetailInteractorImpl implements BookDetailInteractor { 26 | 27 | @Inject 28 | public BookDetailInteractorImpl() {} 29 | 30 | @Override 31 | public Subscription loadBookDetail(String bookId, final RequestCallBack callBack) { 32 | return BookRetrofitManager.getInstance().getBookDetail(bookId) 33 | .subscribeOn(Schedulers.io()) 34 | .observeOn(AndroidSchedulers.mainThread()) 35 | .subscribe(new Observer() { 36 | @Override 37 | public void onCompleted() { 38 | 39 | } 40 | @Override 41 | public void onError(Throwable e) { 42 | callBack.onError(BookApplication.getmContext().getResources().getString(R.string.net_error)); 43 | Log.i("test" , e.getMessage()); 44 | e.printStackTrace(); 45 | } 46 | 47 | @Override 48 | public void onNext(BookDetail bookDetail) { 49 | callBack.success(bookDetail); 50 | } 51 | }); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/adapter/BookListInfoAdapter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.common.Constant; 8 | import com.boge.bogebook.entity.BookListDetail.BookListBean.BooksBean; 9 | import com.boge.bogebook.listener.OnBaseItemClick; 10 | import com.boge.bogebook.mvp.ui.adapter.base.BaseRecyclerViewAdapter; 11 | import com.boge.bogebook.mvp.ui.adapter.base.BaseViewHolder; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * @author boge 17 | * @version 1.0 18 | * @date 2016/11/11 19 | */ 20 | 21 | public class BookListInfoAdapter extends BaseRecyclerViewAdapter { 22 | 23 | private OnBaseItemClick onBaseItemClick; 24 | 25 | public BookListInfoAdapter(Context mContext, List mList) { 26 | super(mContext, mList, R.layout.item_book_list_info); 27 | } 28 | 29 | public void setOnBaseItemClick(OnBaseItemClick onBaseItemClick) { 30 | this.onBaseItemClick = onBaseItemClick; 31 | } 32 | 33 | @Override 34 | protected void onBindData(BaseViewHolder holder, final int position, final BooksBean item) { 35 | holder.setImageUrl(R.id.iv_book_icon, Constant.IMG_BASE_URL+item.getBook().getCover() 36 | , R.mipmap.cover_default); 37 | holder.setText(R.id.tv_book_title, item.getBook().getTitle()); 38 | holder.setText(R.id.tv_book_info, item.getBook().getAuthor()+" | "+ 39 | item.getBook().getCat()+" | "+item.getBook().getLatelyFollower()+"人追"); 40 | holder.setOnItemViewClickListener(new View.OnClickListener() { 41 | @Override 42 | public void onClick(View view) { 43 | if(onBaseItemClick != null){ 44 | onBaseItemClick.onItemClick(view, position, item); 45 | } 46 | } 47 | }); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/adapter/BookListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.common.Constant; 8 | import com.boge.bogebook.entity.BookLists; 9 | import com.boge.bogebook.listener.OnBaseItemClick; 10 | import com.boge.bogebook.mvp.ui.adapter.base.BaseRecyclerViewAdapter; 11 | import com.boge.bogebook.mvp.ui.adapter.base.BaseViewHolder; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * 书单列表适配器 17 | * @author boge 18 | * @version 1.0 19 | * @date 2016/11/9 20 | */ 21 | 22 | public class BookListAdapter extends BaseRecyclerViewAdapter { 23 | 24 | private OnBaseItemClick onBaseItemClick; 25 | 26 | public BookListAdapter(Context mContext, List mList) { 27 | super(mContext, mList, R.layout.item_book_list); 28 | } 29 | 30 | public void setOnBaseItemClick(OnBaseItemClick onBaseItemClick) { 31 | this.onBaseItemClick = onBaseItemClick; 32 | } 33 | 34 | @Override 35 | protected void onBindData(BaseViewHolder holder, final int position, final BookLists.BookListsBean item) { 36 | holder.setText(R.id.tv_book_title, item.getTitle()); 37 | holder.setText(R.id.tv_author_cat, item.getAuthor()); 38 | holder.setText(R.id.tv_shortIntro, item.getDesc()); 39 | holder.setText(R.id.tv_follower_ratio, "共"+item.getBookCount()+ 40 | "本书 | "+item.getCollectorCount()+"人收藏"); 41 | holder.setImageUrl(R.id.iv_book_icon, Constant.IMG_BASE_URL+item.getCover(), R.mipmap.cover_default); 42 | 43 | holder.setOnItemViewClickListener(new View.OnClickListener() { 44 | @Override 45 | public void onClick(View view) { 46 | if(onBaseItemClick != null){ 47 | onBaseItemClick.onItemClick(view, position, item); 48 | } 49 | } 50 | }); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/impl/BookListDetailInteractorImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor.impl; 2 | 3 | import android.util.Log; 4 | 5 | import com.boge.bogebook.BookApplication; 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.api.BookRetrofitManager; 8 | import com.boge.bogebook.entity.BookListDetail; 9 | import com.boge.bogebook.listener.RequestCallBack; 10 | import com.boge.bogebook.mvp.interactor.BookListDetailInteractor; 11 | 12 | import javax.inject.Inject; 13 | 14 | import rx.Observer; 15 | import rx.Subscription; 16 | import rx.android.schedulers.AndroidSchedulers; 17 | import rx.schedulers.Schedulers; 18 | 19 | /** 20 | * @author boge 21 | * @version 1.0 22 | * @date 2016/11/11 23 | */ 24 | 25 | public class BookListDetailInteractorImpl implements BookListDetailInteractor { 26 | 27 | @Inject 28 | public BookListDetailInteractorImpl() { 29 | } 30 | 31 | @Override 32 | public Subscription loadBookListDetail(String bookListId, final RequestCallBack callBack) { 33 | return BookRetrofitManager.getInstance().getBookListDetail(bookListId) 34 | .subscribeOn(Schedulers.io()) 35 | .observeOn(AndroidSchedulers.mainThread()) 36 | .subscribe(new Observer() { 37 | @Override 38 | public void onCompleted() { 39 | 40 | } 41 | 42 | @Override 43 | public void onError(Throwable e) { 44 | callBack.onError(BookApplication.getmContext().getResources().getString(R.string.net_error)); 45 | Log.i("test" , e.getMessage()); 46 | e.printStackTrace(); 47 | } 48 | 49 | @Override 50 | public void onNext(BookListDetail bookListDetail) { 51 | callBack.success(bookListDetail); 52 | } 53 | }); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_rank_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 17 | 18 | 25 | 26 | 33 | 34 | 35 | 36 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 22 | 23 | 34 | 35 | 36 | 37 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/common/Constant.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.common; 2 | 3 | import android.support.annotation.StringDef; 4 | 5 | import com.boge.bogebook.util.FileUtil; 6 | 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | 10 | /** 11 | * @author boge 12 | * @version 1.0 13 | * @date 2016/10/12 14 | */ 15 | 16 | public class Constant { 17 | 18 | public static final String BASE_URL = "http://api.zhuishushenqi.com"; 19 | 20 | public static final String IMG_BASE_URL = "http://statics.zhuishushenqi.com"; 21 | 22 | /**性别**/ 23 | public static final String GENDER = "gender"; 24 | 25 | public static final String MALE = "male"; 26 | public static final String FEMALE = "female"; 27 | public static final String PRESS = "press"; 28 | 29 | public static final String BOOKLIST_ID = "booklist_id"; 30 | 31 | /**排行榜id**/ 32 | public static final String RANKINGID = "rankingId"; 33 | public static final String PATH = "PATH" ; 34 | public static final String LOCAL = "local"; 35 | public static final String TITLE = "title"; 36 | 37 | public static final String SUMMARY = "summary"; 38 | public static final String CHAPTERS = "chapters"; 39 | 40 | public static final String DIRECTORY = "BogeBook"; 41 | 42 | public static final String BASE_PATH = FileUtil.getSDCardPath(); 43 | 44 | /*** 历史记录*/ 45 | public static final String HISTORY = "history"; 46 | 47 | /*** 书单标签*/ 48 | public static final String BOOK_TAG = "tags"; 49 | /***当前选中的标签*/ 50 | public static final String CHOOSE_TAG = "tag"; 51 | 52 | @StringDef({ 53 | CateType.HOT, 54 | CateType.NEW, 55 | CateType.REPUTATION, 56 | CateType.MONTHLY, 57 | CateType.OVER 58 | }) 59 | /** 60 | * 分类类型 61 | */ 62 | @Retention(RetentionPolicy.SOURCE) 63 | public @interface CateType{ 64 | String HOT = "hot"; 65 | String NEW = "new"; 66 | String REPUTATION = "reputation"; 67 | String OVER = "over"; 68 | String MONTHLY = "monthly"; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_tag_book.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 23 | 31 | 38 | 44 | 45 | 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/presenter/impl/AuthorPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.presenter.impl; 2 | 3 | import com.boge.bogebook.entity.support.BookInfo; 4 | import com.boge.bogebook.listener.RequestCallBack; 5 | import com.boge.bogebook.mvp.interactor.AuthorInteractor; 6 | import com.boge.bogebook.mvp.interactor.impl.AuthorInteractorImpl; 7 | import com.boge.bogebook.mvp.presenter.AuthorPresenter; 8 | import com.boge.bogebook.mvp.presenter.base.BasePresenterImpl; 9 | import com.boge.bogebook.mvp.view.AuthorView; 10 | 11 | import java.util.List; 12 | 13 | import javax.inject.Inject; 14 | 15 | /** 16 | * @author boge 17 | * @version 1.0 18 | * @date 2017/3/8 19 | */ 20 | 21 | public class AuthorPresenterImpl extends BasePresenterImpl> implements AuthorPresenter, 22 | RequestCallBack>{ 23 | 24 | private AuthorInteractor> authorInteractor; 25 | 26 | private int start = 0; 27 | private int limit = 50; 28 | private String tags; 29 | private boolean isTags = false; 30 | 31 | @Inject 32 | public AuthorPresenterImpl(AuthorInteractorImpl authorInteractor) { 33 | this.authorInteractor = authorInteractor; 34 | } 35 | 36 | @Override 37 | public void loadAuthorToBook(String author) { 38 | isTags = false; 39 | authorInteractor.loadAuthorToBook(author, this); 40 | } 41 | 42 | @Override 43 | public void loadTagToBook(String tags) { 44 | isTags = true; 45 | this.tags = tags; 46 | authorInteractor.loadTagToBook(tags, start, limit, this); 47 | } 48 | 49 | @Override 50 | public void loadBooks() { 51 | isTags = true; 52 | start += limit; 53 | authorInteractor.loadTagToBook(tags, start, limit, this); 54 | } 55 | 56 | @Override 57 | public void success(List data) { 58 | if(mView != null){ 59 | mView.setBooks(data, isTags); 60 | } 61 | } 62 | 63 | @Override 64 | public void onError(String errorMsg) { 65 | super.onError(errorMsg); 66 | if(mView != null){ 67 | mView.showErrorMsg(errorMsg); 68 | } 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/entity/BookListTags.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.entity; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author boge 7 | * @version 1.0 8 | * @date 2016/10/12 9 | * 主题书单标签列表 10 | */ 11 | 12 | public class BookListTags { 13 | 14 | 15 | /** 16 | * data : [{"name":"时空","tags":["都市","古代","科幻","架空","重生","未来","穿越","历史","快穿","末世","异界位面"]},{"name":"情感","tags":["纯爱","热血","言情","现言","古言","情有独钟","搞笑","青春","欢喜冤家","爽文","虐文"]},{"name":"流派","tags":["变身","悬疑","系统","网游","推理","玄幻","武侠","仙侠","恐怖","奇幻","洪荒","犯罪","百合","种田","惊悚","轻小说","技术流","耽美","竞技","无限"]},{"name":"人设","tags":["同人","娱乐明星","女强","帝王","职场","女配","网配","火影","金庸","豪门","扮猪吃虎","谋士","特种兵","教师"]}] 17 | * ok : true 18 | */ 19 | 20 | private boolean ok; 21 | /** 22 | * name : 时空 23 | * tags : ["都市","古代","科幻","架空","重生","未来","穿越","历史","快穿","末世","异界位面"] 24 | */ 25 | 26 | private List data; 27 | 28 | public boolean isOk() { 29 | return ok; 30 | } 31 | 32 | public void setOk(boolean ok) { 33 | this.ok = ok; 34 | } 35 | 36 | public List getData() { 37 | return data; 38 | } 39 | 40 | public void setData(List data) { 41 | this.data = data; 42 | } 43 | 44 | public static class DataBean { 45 | private String name; 46 | private List tags; 47 | 48 | public DataBean() { 49 | } 50 | 51 | public DataBean(String name, List tags) { 52 | this.name = name; 53 | this.tags = tags; 54 | } 55 | 56 | public String getName() { 57 | return name; 58 | } 59 | 60 | public void setName(String name) { 61 | this.name = name; 62 | } 63 | 64 | public List getTags() { 65 | return tags; 66 | } 67 | 68 | public void setTags(List tags) { 69 | this.tags = tags; 70 | } 71 | 72 | @Override 73 | public String toString() { 74 | return "DataBean{" + 75 | "name='" + name + '\'' + 76 | ", tags=" + tags + 77 | '}'; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/adapter/LocalBookAdapter.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.widget.CheckBox; 6 | import android.widget.CompoundButton; 7 | 8 | import com.boge.bogebook.R; 9 | import com.boge.bogebook.listener.OnBaseItemClick; 10 | import com.boge.bogebook.mvp.ui.adapter.base.BaseRecyclerViewAdapter; 11 | import com.boge.bogebook.mvp.ui.adapter.base.BaseViewHolder; 12 | import com.boge.bogebook.util.Tools; 13 | import com.boge.entity.LocalAndRecomendBook; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * @author boge 19 | * @version 1.0 20 | * @date 2016/10/28 21 | */ 22 | 23 | public class LocalBookAdapter extends BaseRecyclerViewAdapter { 24 | private OnBaseItemClick onBaseItemClick; 25 | 26 | public LocalBookAdapter(Context mContext, List mList , OnBaseItemClick itemClick) { 27 | super(mContext, mList, R.layout.item_recommend); 28 | onBaseItemClick = itemClick; 29 | } 30 | 31 | @Override 32 | protected void onBindData(BaseViewHolder holder, final int position, final LocalAndRecomendBook item) { 33 | holder.setImageResource(R.id.iv_txt_icon,R.mipmap.home_shelf_txt_icon) 34 | .setText(R.id.tv_bookTitle,item.getTitle()) 35 | .setText(R.id.tv_lastChapter, Tools.longToSize(item.getSize())) 36 | .setVisibility(R.id.iv_not_read , View.GONE) 37 | .setVisibility(R.id.ck_boxSelect , View.VISIBLE) 38 | .setChecked(R.id.ck_boxSelect , item.isSelect()); 39 | CheckBox ckBoxSelect = holder.getView(R.id.ck_boxSelect); 40 | ckBoxSelect.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 41 | @Override 42 | public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 43 | item.setSelect(b); 44 | } 45 | }); 46 | holder.setOnItemViewClickListener(new View.OnClickListener() { 47 | @Override 48 | public void onClick(View view) { 49 | onBaseItemClick.onItemClick(view , position , item); 50 | } 51 | }); 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/fragments/base/BaseFragment.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.fragments.base; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.v4.app.Fragment; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | 10 | import com.boge.bogebook.BookApplication; 11 | import com.boge.bogebook.component.DaggerFragmentComponent; 12 | import com.boge.bogebook.component.FragmentComponent; 13 | import com.boge.bogebook.mvp.presenter.base.BasePresenter; 14 | 15 | import butterknife.ButterKnife; 16 | 17 | /** 18 | * @author boge 19 | * @version 1.0 20 | * @date 2016/10/14 21 | */ 22 | 23 | public abstract class BaseFragment extends Fragment { 24 | 25 | private View view; 26 | 27 | protected FragmentComponent mFragmentComponent; 28 | 29 | protected abstract int getLayoutResId(); 30 | 31 | protected abstract void initDatas(); 32 | 33 | protected abstract void initInjector(); 34 | 35 | protected BasePresenter basePresenter; 36 | @Override 37 | public void onCreate(@Nullable Bundle savedInstanceState) { 38 | super.onCreate(savedInstanceState); 39 | mFragmentComponent = DaggerFragmentComponent.builder() 40 | .applicationComponent(((BookApplication) getActivity().getApplication()).getmApplicationComponent()) 41 | // .fragmentModule(new FragmentModule(this)) 42 | .build(); 43 | initInjector(); 44 | } 45 | 46 | @Override 47 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 48 | Bundle savedInstanceState) { 49 | if(view == null){ 50 | view = inflater.inflate(getLayoutResId(), container, false); 51 | ButterKnife.bind(this, view); 52 | initDatas(); 53 | } 54 | return view; 55 | } 56 | 57 | 58 | 59 | @Override 60 | public void onDestroyView() { 61 | super.onDestroyView(); 62 | ButterKnife.unbind(this); 63 | view = null; 64 | if(basePresenter != null){ 65 | basePresenter.onDestroy(); 66 | } 67 | } 68 | 69 | public FragmentComponent getFragmentComponent() { 70 | return mFragmentComponent; 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 项目地址 https://github.com/mianmian520/BogeBook 2 | # BogeBook 3 | #####实现追书推荐、排行榜检索、搜索书籍、分类检索、标签检索、模拟翻页效果、文章阅读、缓存章节等功能 4 | ###项目简介 5 | 一款遵循Material Design风格的小说阅读器 6 | * Android一些次新的技术的一个合集示例 7 | * API均来自追书神器,纯属共享学习之用,不得用于商业!! 8 | * 使用MVP的设计模式 9 | * RxJava,Retrofit2,Dagger2等一些主流开源框架的使用 10 | * Glide加载图片 11 | 12 | ###版本 13 | 项目正在完善,请等待 14 | 15 | ###截图 16 | * ####首页 17 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/recommend.png) 18 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/find.png) 19 | 20 | * ####排行榜 21 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/ranking1.png) 22 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/ranking2.png) 23 | 24 | * ####分类 25 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/cate1.png) 26 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/cate2.png) 27 | 28 | * ####主题书单 29 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/booklist.png) 30 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/booklist_tag.png) 31 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/booklist_detail.png) 32 | 33 | * ####搜索 34 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/search1.png) 35 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/search2.png) 36 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/search3.png) 37 | 38 | * ####其他 39 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/book_detail.png) 40 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/local.png) 41 | ![](https://github.com/mianmian520/BogeBook/blob/master/screenshot/read1.png) 42 | 43 | ###引入的第三方库 44 | ####squareup出品 45 | * retrofit(https://github.com/square/retrofit) 46 | * okhttp3(https://github.com/square/okhttp)(网络请求框架) 47 | * Dagger(https://github.com/square/dagger)(依赖注入) 48 | 49 | ####Rx系列 50 | * RxJava(https://github.com/ReactiveX/RxJava) 51 | * RxAndroid(https://github.com/ReactiveX/RxAndroid) 52 | 53 | ####其他 54 | * Glide(https://github.com/bumptech/glide)(Google官方推荐图片加载库) 55 | * Butter Knife(https://github.com/JakeWharton/butterknife)(专注于控件的注解) 56 | * Greendao(https://github.com/greenrobot/greenDAO)(专注数据库的框架) 57 | * Eventbus(https://github.com/greenrobot/EventBus)(针对Android优化的发布/订阅事件总线) 58 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_book_list_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 14 | 19 | 26 | 34 | 40 | 48 | 49 | 50 | 54 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_book_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 23 | 31 | 37 | 44 | 51 | 52 | 59 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | // 应用插件 3 | apply plugin: 'android-apt' 4 | 5 | android { 6 | compileSdkVersion 24 7 | buildToolsVersion "24.0.1" 8 | defaultConfig { 9 | applicationId "com.boge.bogebook" 10 | minSdkVersion 19 11 | targetSdkVersion 24 12 | versionCode 1 13 | versionName "1.0" 14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 15 | } 16 | 17 | packagingOptions { 18 | exclude 'META-INF/NOTICE' 19 | exclude 'META-INF/LICENSE' 20 | } 21 | 22 | buildTypes { 23 | release { 24 | minifyEnabled false 25 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 26 | } 27 | } 28 | sourceSets { 29 | main{ 30 | java.srcDirs = ['src/main/java' , 'src/main/java-gen'] 31 | } 32 | } 33 | } 34 | 35 | dependencies { 36 | compile fileTree(include: ['*.jar'], dir: 'libs') 37 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 38 | exclude group: 'com.android.support', module: 'support-annotations' 39 | }) 40 | 41 | testCompile 'junit:junit:4.12' 42 | 43 | compile 'com.android.support:appcompat-v7:24.2.0' 44 | compile 'com.android.support:design:24.2.0' 45 | compile 'com.android.support:cardview-v7:24.2.0' 46 | compile 'com.android.support:recyclerview-v7:24.2.0' 47 | compile 'com.android.support:support-v4:24.2.0' 48 | 49 | compile 'com.jakewharton:butterknife:7.0.1' 50 | 51 | compile 'io.reactivex:rxandroid:1.2.0' 52 | compile 'io.reactivex:rxjava:1.1.5' 53 | compile 'com.google.code.gson:gson:2.4' 54 | compile 'com.squareup.retrofit2:retrofit:2.0.2' 55 | compile 'com.squareup.retrofit2:converter-gson:2.0.2' 56 | compile 'com.squareup.retrofit2:converter-jackson:2.0.0' 57 | compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2' 58 | compile 'com.squareup.okhttp3:okhttp:3.0.1' 59 | compile 'com.squareup.okhttp3:logging-interceptor:3.0.1' 60 | compile 'com.squareup.okio:okio:1.6.0' 61 | compile 'com.github.bumptech.glide:glide:3.7.0' 62 | 63 | compile 'com.google.dagger:dagger:2.4' 64 | compile 'org.glassfish:javax.annotation:10.0-b28' 65 | apt 'com.google.dagger:dagger-compiler:2.4' 66 | 67 | compile 'org.greenrobot:greendao:3.2.0' 68 | compile 'org.greenrobot:eventbus:3.0.0' 69 | } 70 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/interactor/impl/RankDetailInteractorImpl.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.interactor.impl; 2 | 3 | import android.util.Log; 4 | 5 | import com.boge.bogebook.BookApplication; 6 | import com.boge.bogebook.R; 7 | import com.boge.bogebook.api.BookRetrofitManager; 8 | import com.boge.bogebook.entity.Rankings; 9 | import com.boge.bogebook.entity.support.BookInfo; 10 | import com.boge.bogebook.listener.RequestCallBack; 11 | import com.boge.bogebook.mvp.interactor.RankDetailInteractor; 12 | import com.boge.bogebook.util.ClassUtil; 13 | 14 | import java.util.List; 15 | 16 | import javax.inject.Inject; 17 | 18 | import rx.Observer; 19 | import rx.Subscription; 20 | import rx.android.schedulers.AndroidSchedulers; 21 | import rx.functions.Func1; 22 | import rx.schedulers.Schedulers; 23 | 24 | /** 25 | * @author boge 26 | * @version 1.0 27 | * @date 2016/10/21 28 | */ 29 | 30 | public class RankDetailInteractorImpl implements RankDetailInteractor> { 31 | 32 | @Inject 33 | public RankDetailInteractorImpl() { 34 | } 35 | 36 | @Override 37 | public Subscription loadRankDetail(String rankingId, final RequestCallBack> callBack) { 38 | return BookRetrofitManager.getInstance().getRankings(rankingId) 39 | .map(new Func1>() { 40 | @Override 41 | public List call(Rankings rankings) { 42 | 43 | return ClassUtil.RankingsToBookInfo(rankings); 44 | } 45 | }) 46 | .subscribeOn(Schedulers.io()) 47 | .observeOn(AndroidSchedulers.mainThread()) 48 | .subscribe(new Observer>() { 49 | @Override 50 | public void onCompleted() { 51 | 52 | } 53 | 54 | @Override 55 | public void onError(Throwable e) { 56 | callBack.onError(BookApplication.getmContext().getResources().getString(R.string.net_error)); 57 | Log.i("test" , e.getMessage()); 58 | e.printStackTrace(); 59 | } 60 | 61 | @Override 62 | public void onNext(List rankings) { 63 | callBack.success(rankings); 64 | } 65 | }); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 19 | 25 | 31 | 37 | 43 | 49 | 55 | 61 | 62 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/util/ToastUtils.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.util; 2 | 3 | import android.content.Context; 4 | import android.widget.Toast; 5 | 6 | import com.boge.bogebook.BookApplication; 7 | 8 | /** 9 | * Toast工具类,解决多个Toast同时出现的问题 10 | * 11 | * @author yuyh. 12 | * @date 16/4/9. 13 | */ 14 | public class ToastUtils { 15 | 16 | private static Toast mToast; 17 | private static Context context = BookApplication.getmContext(); 18 | 19 | /********************** 非连续弹出的Toast ***********************/ 20 | public static void showSingleToast(int resId) { //R.string.** 21 | getSingleToast(resId, Toast.LENGTH_SHORT).show(); 22 | } 23 | 24 | public static void showSingleToast(String text) { 25 | getSingleToast(text, Toast.LENGTH_SHORT).show(); 26 | } 27 | 28 | public static void showSingleLongToast(int resId) { 29 | getSingleToast(resId, Toast.LENGTH_LONG).show(); 30 | } 31 | 32 | public static void showSingleLongToast(String text) { 33 | getSingleToast(text, Toast.LENGTH_LONG).show(); 34 | } 35 | 36 | /*********************** 连续弹出的Toast ************************/ 37 | public static void showToast(int resId) { 38 | getToast(resId, Toast.LENGTH_SHORT).show(); 39 | } 40 | 41 | public static void showToast(String text) { 42 | getToast(text, Toast.LENGTH_SHORT).show(); 43 | } 44 | 45 | public static void showLongToast(int resId) { 46 | getToast(resId, Toast.LENGTH_LONG).show(); 47 | } 48 | 49 | public static void showLongToast(String text) { 50 | getToast(text, Toast.LENGTH_LONG).show(); 51 | } 52 | 53 | public static Toast getSingleToast(int resId, int duration) { // 连续调用不会连续弹出,只是替换文本 54 | return getSingleToast(context.getResources().getText(resId).toString(), duration); 55 | } 56 | 57 | public static Toast getSingleToast(String text, int duration) { 58 | if (mToast == null) { 59 | mToast = Toast.makeText(context, text, duration); 60 | } else { 61 | mToast.setText(text); 62 | } 63 | return mToast; 64 | } 65 | 66 | public static Toast getToast(int resId, int duration) { // 连续调用会连续弹出 67 | return getToast(context.getResources().getText(resId).toString(), duration); 68 | } 69 | 70 | public static Toast getToast(String text, int duration) { 71 | return Toast.makeText(context, text, duration); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/src/main/java/com/boge/bogebook/mvp/ui/activity/RankDetailActivity.java: -------------------------------------------------------------------------------- 1 | package com.boge.bogebook.mvp.ui.activity; 2 | 3 | import android.content.Intent; 4 | import android.support.design.widget.TabLayout; 5 | import android.support.v4.app.Fragment; 6 | import android.support.v4.view.ViewPager; 7 | import android.view.View; 8 | 9 | import com.boge.bogebook.R; 10 | import com.boge.bogebook.entity.RankingList; 11 | import com.boge.bogebook.mvp.ui.activity.base.BaseActivity; 12 | import com.boge.bogebook.mvp.ui.adapter.RankFragmentPagerAdapter; 13 | import com.boge.bogebook.mvp.ui.fragments.RankDetailFragment; 14 | 15 | import java.util.ArrayList; 16 | import java.util.Arrays; 17 | import java.util.List; 18 | 19 | import butterknife.Bind; 20 | 21 | public class RankDetailActivity extends BaseActivity { 22 | 23 | @Bind(R.id.container) 24 | ViewPager mViewPager; 25 | @Bind(R.id.tabs) 26 | TabLayout tabs; 27 | 28 | private List datas = new ArrayList(); 29 | private List fragments = new ArrayList(); 30 | 31 | @Override 32 | protected int getLayoutId() { 33 | return R.layout.activity_rank_detail; 34 | } 35 | 36 | @Override 37 | protected void initInjector() { 38 | activityComponent.inject(this); 39 | } 40 | 41 | @Override 42 | protected void initViews() { 43 | initIntent(); 44 | RankFragmentPagerAdapter fragmentPagerAdapter = new RankFragmentPagerAdapter(getSupportFragmentManager() , fragments , datas); 45 | mViewPager.setAdapter(fragmentPagerAdapter); 46 | tabs.setupWithViewPager(mViewPager); 47 | } 48 | 49 | /** 50 | * 获取上个页面传递过来的排行榜信息 51 | */ 52 | private void initIntent() { 53 | Intent intent = getIntent(); 54 | RankingList.MaleBean maleBean = intent.getParcelableExtra("maleBean"); 55 | if(!maleBean.isCollapse()){ 56 | datas = Arrays.asList(getResources().getStringArray(R.array.rang_tabs)); 57 | //周榜 58 | fragments.add(RankDetailFragment.newInstance(maleBean.get_id())); 59 | //月榜 60 | fragments.add(RankDetailFragment.newInstance(maleBean.getMonthRank())); 61 | //总榜 62 | fragments.add(RankDetailFragment.newInstance(maleBean.getTotalRank())); 63 | } else { 64 | tabs.setVisibility(View.GONE);datas.add(""); 65 | fragments.add(RankDetailFragment.newInstance(maleBean.get_id())); 66 | } 67 | toolbar.setTitle(maleBean.getTitle()); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_recommend.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 16 | 17 | 18 | 19 | 20 | 25 | 30 | 37 |