├── 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 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_rank_detail.xml:
--------------------------------------------------------------------------------
1 |
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 |
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 |
--------------------------------------------------------------------------------
/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 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
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 |
17 |
18 |
19 |
20 |
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 | 
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 | ####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 |
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 |
48 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/content_ranking.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
15 |
19 |
26 |
31 |
32 |
33 |
40 |
45 |
46 |
47 |
48 |
49 |
54 |
55 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_recommend.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
15 |
22 |
29 |
30 |
37 |
38 |
46 |
54 |
62 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/app/src/main/java/com/boge/bogebook/mvp/ui/adapter/FindAdapter.java:
--------------------------------------------------------------------------------
1 | package com.boge.bogebook.mvp.ui.adapter;
2 |
3 | import android.support.v7.widget.RecyclerView;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ImageView;
8 | import android.widget.TextView;
9 |
10 | import com.boge.bogebook.R;
11 | import com.boge.bogebook.entity.support.FindBean;
12 | import com.boge.bogebook.listener.OnRecyclerViewItemClick;
13 |
14 | import java.util.List;
15 |
16 | import butterknife.Bind;
17 | import butterknife.ButterKnife;
18 |
19 | /**
20 | * @author boge
21 | * @version 1.0
22 | * @date 2016/10/17
23 | */
24 |
25 | public class FindAdapter extends RecyclerView.Adapter {
26 |
27 |
28 | private List findBeanList;
29 |
30 | public FindAdapter(List findBeanList) {
31 | this.findBeanList = findBeanList;
32 | }
33 |
34 | @Override
35 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
36 | View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_find, parent, false);
37 | final FindViewHolder viewHolder = new FindViewHolder(view);
38 | view.setOnClickListener(new View.OnClickListener() {
39 | @Override
40 | public void onClick(View view) {
41 | if(onRecyclerViewItemClick != null){
42 | onRecyclerViewItemClick.onItemClick(view , viewHolder.getLayoutPosition());
43 | }
44 | }
45 | });
46 |
47 | return viewHolder;
48 | }
49 |
50 | @Override
51 | public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
52 | FindViewHolder viewHolder = (FindViewHolder) holder;
53 |
54 | viewHolder.ivIcon.setImageResource(findBeanList.get(position).getIconResId());
55 | viewHolder.tvTitle.setText(findBeanList.get(position).getTitle());
56 | }
57 |
58 | class FindViewHolder extends RecyclerView.ViewHolder {
59 | @Bind(R.id.ivIcon)
60 | ImageView ivIcon;
61 | @Bind(R.id.tvTitle)
62 | TextView tvTitle;
63 |
64 | public FindViewHolder(View itemView) {
65 | super(itemView);
66 | ButterKnife.bind(this , itemView);
67 | }
68 | }
69 |
70 | @Override
71 | public int getItemCount() {
72 | return findBeanList == null ? 0 : findBeanList.size();
73 | }
74 |
75 |
76 |
77 | private OnRecyclerViewItemClick onRecyclerViewItemClick;
78 |
79 | public void setOnRecyclerViewItemClick(OnRecyclerViewItemClick onRecyclerViewItemClick) {
80 | this.onRecyclerViewItemClick = onRecyclerViewItemClick;
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/app/src/main/java/com/boge/bogebook/mvp/ui/fragments/FindFragment.java:
--------------------------------------------------------------------------------
1 | package com.boge.bogebook.mvp.ui.fragments;
2 |
3 | import android.content.Intent;
4 | import android.support.v7.widget.LinearLayoutManager;
5 | import android.support.v7.widget.RecyclerView;
6 | import android.view.View;
7 |
8 | import com.boge.bogebook.R;
9 | import com.boge.bogebook.entity.support.FindBean;
10 | import com.boge.bogebook.listener.OnRecyclerViewItemClick;
11 | import com.boge.bogebook.mvp.ui.activity.CategoryActivity;
12 | import com.boge.bogebook.mvp.ui.activity.RankingActivity;
13 | import com.boge.bogebook.mvp.ui.activity.ThemeBookActivity;
14 | import com.boge.bogebook.mvp.ui.adapter.FindAdapter;
15 | import com.boge.bogebook.mvp.ui.fragments.base.BaseFragment;
16 |
17 | import java.util.ArrayList;
18 | import java.util.List;
19 |
20 | import butterknife.Bind;
21 |
22 | public class FindFragment extends BaseFragment implements OnRecyclerViewItemClick {
23 |
24 | @Bind(R.id.recyclerView)
25 | RecyclerView recyclerView;
26 |
27 | private List findBeanList = new ArrayList();
28 |
29 | private FindAdapter adapter;
30 |
31 | @Override
32 | protected int getLayoutResId() {
33 | return R.layout.fragment_find;
34 | }
35 |
36 | @Override
37 | protected void initDatas() {
38 | initFindBeanList();
39 |
40 | recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
41 | recyclerView.setHasFixedSize(true);
42 |
43 | adapter = new FindAdapter(findBeanList);
44 | adapter.setOnRecyclerViewItemClick(this);
45 | recyclerView.setAdapter(adapter);
46 | }
47 |
48 | private void initFindBeanList() {
49 | findBeanList.clear();
50 | findBeanList.add(new FindBean("排行榜", R.mipmap.home_find_rank));
51 | findBeanList.add(new FindBean("分类", R.mipmap.home_find_category));
52 | findBeanList.add(new FindBean("主题书单", R.mipmap.home_find_topic));
53 | findBeanList.add(new FindBean("有声小说", R.mipmap.home_find_listen));
54 | }
55 |
56 | @Override
57 | protected void initInjector() {
58 | mFragmentComponent.inject(this);
59 | }
60 |
61 | @Override
62 | public void onItemClick(View v, int position) {
63 | switch (position){
64 | case 0:
65 | getActivity().startActivity(new Intent(getActivity() , RankingActivity.class));
66 | break;
67 | case 1:
68 | getActivity().startActivity(new Intent(getActivity() , CategoryActivity.class));
69 | break;
70 | case 2:
71 | getActivity().startActivity(new Intent(getActivity() , ThemeBookActivity.class));
72 | break;
73 | }
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/app/src/main/java/com/boge/bogebook/mvp/presenter/impl/RecommendPresenterImpl.java:
--------------------------------------------------------------------------------
1 | package com.boge.bogebook.mvp.presenter.impl;
2 |
3 | import com.boge.bogebook.manager.dbmanager.LARBManager;
4 | import com.boge.bogebook.listener.RequestCallBack;
5 | import com.boge.bogebook.mvp.interactor.RecommendInteractor;
6 | import com.boge.bogebook.mvp.interactor.impl.RecommendInteractorImpl;
7 | import com.boge.bogebook.mvp.presenter.RecommendPresenter;
8 | import com.boge.bogebook.mvp.presenter.base.BasePresenterImpl;
9 | import com.boge.bogebook.mvp.view.RecommendView;
10 | import com.boge.entity.LocalAndRecomendBook;
11 |
12 | import java.util.List;
13 |
14 | import javax.inject.Inject;
15 |
16 | /**
17 | * @author boge
18 | * @version 1.0
19 | * @date 2016/10/14
20 | */
21 |
22 | public class RecommendPresenterImpl extends BasePresenterImpl>
23 | implements RecommendPresenter , RequestCallBack>{
24 |
25 | private RecommendInteractor> recommendInteractor;
26 |
27 | private boolean isRefresh = false;
28 |
29 | @Inject
30 | public RecommendPresenterImpl(RecommendInteractorImpl recommendInteractor) {
31 | this.recommendInteractor = recommendInteractor;
32 | }
33 |
34 | @Override
35 | public void loadRecommendBook(String gender) {
36 | this.beforeRequest();
37 | mSubscription = recommendInteractor.loadRecommendBook(gender , this);
38 | }
39 |
40 | @Override
41 | public void loadUpdateInfo() {
42 | isRefresh = true;
43 | String bookID = LARBManager.getBookID();
44 | mSubscription = recommendInteractor.loadBookupdateInfo("updated" , bookID , this);
45 | }
46 |
47 | @Override
48 | public void addBookcase(List books) {
49 | recommendInteractor.addBookcase(books);
50 | mView.addBookCase(books);
51 | }
52 |
53 | @Override
54 | public void bookStickied(LocalAndRecomendBook book) {
55 | recommendInteractor.bookStickied(book);
56 | }
57 |
58 | @Override
59 | public void bookOnclick(LocalAndRecomendBook book, int location) {
60 | recommendInteractor.bookOnclick(book , location);
61 | }
62 |
63 | @Override
64 | public void success(List data) {
65 | super.success(data);
66 | if(mView != null){
67 | if(isRefresh){
68 | mView.setBookUpdateInfo(data);
69 | isRefresh = false;
70 | }else{
71 | mView.setReCommendBook(data);
72 | }
73 | }
74 | }
75 |
76 | @Override
77 | public void onError(String errorMsg) {
78 | super.onError(errorMsg);
79 | if(mView != null){
80 | mView.showErrorMsg(errorMsg);
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/.idea/misc.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 | 1.8
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/app/src/main/java/com/boge/bogebook/mvp/presenter/impl/ReaderPresenterImpl.java:
--------------------------------------------------------------------------------
1 | package com.boge.bogebook.mvp.presenter.impl;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import com.boge.bogebook.entity.BookToc;
6 | import com.boge.bogebook.entity.ChapterRead;
7 | import com.boge.bogebook.listener.RequestCallBack;
8 | import com.boge.bogebook.mvp.interactor.ReaderInteractor;
9 | import com.boge.bogebook.mvp.interactor.impl.ReaderInteractorImpl;
10 | import com.boge.bogebook.mvp.presenter.ReaderPresenter;
11 | import com.boge.bogebook.mvp.view.ReaderView;
12 | import com.boge.bogebook.mvp.view.base.BaseView;
13 |
14 | import javax.inject.Inject;
15 |
16 | import rx.Subscription;
17 |
18 | /**
19 | * @author boge
20 | * @version 1.0
21 | * @date 2016/11/2
22 | */
23 |
24 | public class ReaderPresenterImpl implements ReaderPresenter,RequestCallBack {
25 |
26 | private ReaderView mView;
27 |
28 | private Subscription mSubscription;
29 |
30 | private ReaderInteractor readerInteractor;
31 | private int chapter = 0;
32 |
33 | @Inject
34 | public ReaderPresenterImpl(ReaderInteractorImpl readerInteractor) {
35 | this.readerInteractor = readerInteractor;
36 | }
37 |
38 | @Override
39 | public void loadBookToc(String bookid) {
40 | mSubscription = readerInteractor.getChaptersId(bookid , this);
41 | }
42 |
43 | @Override
44 | public void loadChapterContent(String url, int chapter) {
45 | mSubscription = readerInteractor.loadChapterContent(url, chapter, this);
46 | }
47 |
48 | @Override
49 | public void beforeRequest() {
50 | if(mView != null){
51 | mView.showProgress();
52 | }
53 | }
54 |
55 | @Override
56 | public void success(Object data) {
57 | if(mView != null){
58 | mView.hideProgress();
59 | }
60 | if(data instanceof String){
61 | mSubscription = readerInteractor.loadBookToc((String) data, this);
62 | }else if(data instanceof BookToc){
63 | mView.setBookToc((BookToc) data);
64 | }else if(data instanceof ChapterRead){
65 | mView.showChapterRead(((ChapterRead)data).getChapter() , this.chapter);
66 | }else if(data instanceof Integer){
67 | this.chapter = (int) data;
68 | }
69 | }
70 |
71 | @Override
72 | public void onError(String errorMsg) {
73 | if(mView != null){
74 | mView.hideProgress();
75 | mView.showErrorMsg(errorMsg);
76 | }
77 | }
78 |
79 | @Override
80 | public void attachView(@NonNull BaseView view) {
81 | mView = (ReaderView) view;
82 | }
83 |
84 | @Override
85 | public void onDestroy() {
86 | if (mSubscription != null && !mSubscription.isUnsubscribed()) {
87 | mSubscription.unsubscribe();
88 | }
89 | }
90 | }
91 |
--------------------------------------------------------------------------------