├── .gitignore
├── .idea
├── gradle.xml
├── misc.xml
├── runConfigurations.xml
└── vcs.xml
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── rdc
│ │ └── bms
│ │ └── q_comic
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── assets
│ │ └── litepal.xml
│ ├── java
│ │ └── com
│ │ │ └── rdc
│ │ │ └── bms
│ │ │ └── q_comic
│ │ │ ├── app
│ │ │ └── App.java
│ │ │ ├── base
│ │ │ ├── BaseAbsFragment.java
│ │ │ ├── BaseActivity.java
│ │ │ ├── BaseBookShelfCell.java
│ │ │ ├── BaseBookShelfTabFragment.java
│ │ │ ├── BaseBookShelfVO.java
│ │ │ ├── BaseDTO.java
│ │ │ ├── BaseFragment.java
│ │ │ ├── BaseLazyAbsFragment.java
│ │ │ ├── BaseLazyFragment.java
│ │ │ └── BasePresenter.java
│ │ │ ├── bean
│ │ │ ├── BannerBean.java
│ │ │ ├── BookBean.java
│ │ │ ├── BookBillBean.java
│ │ │ ├── BookDetailVO.java
│ │ │ ├── BookInfoBean.java
│ │ │ ├── ChapterBean.java
│ │ │ ├── ComicBean.java
│ │ │ ├── HotKeyBean.java
│ │ │ ├── ItemBean.java
│ │ │ ├── RankBean.java
│ │ │ ├── SearchHistoryBean.java
│ │ │ ├── TypeBean.java
│ │ │ └── rv_cell
│ │ │ │ ├── BannerCell.java
│ │ │ │ ├── BookBillCell.java
│ │ │ │ ├── BookBillDetailCell.java
│ │ │ │ ├── BookCell.java
│ │ │ │ ├── BookInfoCell.java
│ │ │ │ ├── BookListCell.java
│ │ │ │ ├── ChapterNumCell.java
│ │ │ │ ├── CollectCell.java
│ │ │ │ ├── ComicCell.java
│ │ │ │ ├── DirCell.java
│ │ │ │ ├── FanCell.java
│ │ │ │ ├── HistoryCell.java
│ │ │ │ ├── ItemCell.java
│ │ │ │ ├── MyBookBillCell.java
│ │ │ │ ├── RankCell.java
│ │ │ │ ├── SearchHistoryCell.java
│ │ │ │ ├── StatisticCell.java
│ │ │ │ └── TypeBeanCell.java
│ │ │ ├── config
│ │ │ ├── Constant.java
│ │ │ └── ItemType.java
│ │ │ ├── listener
│ │ │ ├── ILifeCycle.java
│ │ │ ├── OnComicClickListener.java
│ │ │ ├── OnEditListener.java
│ │ │ └── OnScrollYChangeForAlphaListener.java
│ │ │ ├── mvp
│ │ │ ├── contract
│ │ │ │ ├── IBookBillDetailContract.java
│ │ │ │ ├── IBookDetailContract.java
│ │ │ │ ├── IBookListContract.java
│ │ │ │ ├── ICollectContract.java
│ │ │ │ ├── IComicContract.java
│ │ │ │ ├── IHistoryContract.java
│ │ │ │ ├── IHomeContract.java
│ │ │ │ ├── IMainContract.java
│ │ │ │ ├── IMyBookBillContract.java
│ │ │ │ ├── IRankContract.java
│ │ │ │ ├── ISearchContract.java
│ │ │ │ ├── ISearchResultContract.java
│ │ │ │ └── ITypeContract.java
│ │ │ ├── model
│ │ │ │ ├── BookBillModel.java
│ │ │ │ ├── BookDetailModel.java
│ │ │ │ ├── BookModel.java
│ │ │ │ ├── CollectModel.java
│ │ │ │ ├── ComicModel.java
│ │ │ │ ├── FootPrintModel.java
│ │ │ │ ├── SearchModel.java
│ │ │ │ ├── SearchResultModel.java
│ │ │ │ ├── db
│ │ │ │ │ ├── CollectBean.java
│ │ │ │ │ └── HistoryBean.java
│ │ │ │ ├── dto
│ │ │ │ │ ├── BookBillDetailContainerDTO.java
│ │ │ │ │ ├── BookBillDetailHeadDTO.java
│ │ │ │ │ ├── BookListDTO.java
│ │ │ │ │ ├── ComicDTO.java
│ │ │ │ │ ├── ComicInfoDTO.java
│ │ │ │ │ ├── HomePageDTO.java
│ │ │ │ │ ├── HotKeyDTO.java
│ │ │ │ │ ├── PageDTO.java
│ │ │ │ │ ├── RankDTO.java
│ │ │ │ │ └── SearchDTO.java
│ │ │ │ ├── service
│ │ │ │ │ ├── BookBillService.java
│ │ │ │ │ ├── ComicService.java
│ │ │ │ │ └── SearchService.java
│ │ │ │ └── vo
│ │ │ │ │ ├── BookBillDetailVO.java
│ │ │ │ │ ├── BookTabDetailVO.java
│ │ │ │ │ ├── BookTabDirVO.java
│ │ │ │ │ ├── BookTabSupportVO.java
│ │ │ │ │ ├── BookTopInfoVO.java
│ │ │ │ │ ├── CollectVO.java
│ │ │ │ │ ├── HistoryVO.java
│ │ │ │ │ └── MyBookBillVO.java
│ │ │ ├── presenter
│ │ │ │ ├── BookBillDetailPresenter.java
│ │ │ │ ├── BookBillPresenter.java
│ │ │ │ ├── BookDetailPresenter.java
│ │ │ │ ├── CollectPresenter.java
│ │ │ │ ├── ComicPresenter.java
│ │ │ │ ├── HistoryPresenter.java
│ │ │ │ ├── HomePresenter.java
│ │ │ │ ├── MainPresenter.java
│ │ │ │ ├── MyBookBillPresenter.java
│ │ │ │ ├── RankPresenter.java
│ │ │ │ ├── SearchPresenter.java
│ │ │ │ ├── SearchResultPresenter.java
│ │ │ │ └── TypePresenter.java
│ │ │ └── view
│ │ │ │ ├── activity
│ │ │ │ ├── BookBillActivity.java
│ │ │ │ ├── BookBillDetailActivity.java
│ │ │ │ ├── BookDetailActivity.java
│ │ │ │ ├── ComicActivity.java
│ │ │ │ ├── LaunchActivity.java
│ │ │ │ ├── MainActivity.java
│ │ │ │ ├── SearchActivity.java
│ │ │ │ └── SearchResultActivity.java
│ │ │ │ └── fragment
│ │ │ │ ├── BookBillFragment.java
│ │ │ │ ├── BookDetail
│ │ │ │ ├── TabDetailFragment.java
│ │ │ │ ├── TabDirFragment.java
│ │ │ │ └── TabSupportFragment.java
│ │ │ │ ├── BookShelf
│ │ │ │ ├── BookShelfFragment.java
│ │ │ │ ├── CollectFragment.java
│ │ │ │ ├── HistoryFragment.java
│ │ │ │ └── MyBookBillFragment.java
│ │ │ │ ├── HomeFragment.java
│ │ │ │ ├── MineFragment.java
│ │ │ │ ├── RankFragment.java
│ │ │ │ ├── SearchResultFragment.java
│ │ │ │ ├── TypeContainerFragment.java
│ │ │ │ └── TypeFragment.java
│ │ │ ├── util
│ │ │ ├── ActivityCollectorUtil.java
│ │ │ ├── AnimateUtil.java
│ │ │ ├── GlideUtil.java
│ │ │ ├── GsonUtil.java
│ │ │ ├── ImageUtil.java
│ │ │ ├── JsoupUtil.java
│ │ │ ├── PhotoUtil.java
│ │ │ ├── RetrofitUtil.java
│ │ │ ├── ScreenUtil.java
│ │ │ ├── StartActUtil.java
│ │ │ ├── diffutil
│ │ │ │ ├── BookBillDiffUtil.java
│ │ │ │ ├── ChapterDiffUtil.java
│ │ │ │ ├── CollectDiffUtil.java
│ │ │ │ ├── ComicDiffUtil.java
│ │ │ │ └── HistoryDiffUtil.java
│ │ │ └── fileprovider.java
│ │ │ └── widget
│ │ │ ├── ListenOffsetYNestedScrollView.java
│ │ │ ├── NoScrollViewPager.java
│ │ │ └── ViewPagerForScrollView.java
│ └── res
│ │ ├── color
│ │ └── color_state_menu_navi.xml
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable-xhdpi
│ │ ├── bg_hot_key_blue.xml
│ │ ├── bg_hot_key_light_green.xml
│ │ ├── bg_hot_key_orange.xml
│ │ ├── bg_hot_key_purple.xml
│ │ ├── bg_support_statistics_green.xml
│ │ ├── bg_support_statistics_orange.xml
│ │ ├── ic_ach_award.png
│ │ ├── ic_ach_gift.png
│ │ ├── ic_ach_gradle.png
│ │ ├── ic_ach_month.png
│ │ ├── ic_ach_recommend.png
│ │ ├── ic_ach_share.png
│ │ ├── ic_launcher.png
│ │ ├── ic_read_brightness_b.png
│ │ ├── ic_read_catalog_ic.png
│ │ ├── ic_read_catalog_order.png
│ │ ├── ic_read_catalog_reverse.png
│ │ ├── ic_read_definition_high.png
│ │ ├── ic_read_definition_low.png
│ │ ├── ic_read_definition_middle.png
│ │ ├── ic_read_set.png
│ │ ├── ic_read_start.png
│ │ ├── ic_read_stop.png
│ │ ├── icon_chapter_read.png
│ │ ├── pic_load_error.png
│ │ ├── svg_arrow_bottom.png
│ │ ├── svg_arrow_left.png
│ │ ├── svg_arrow_right.png
│ │ ├── svg_arrow_top.png
│ │ ├── svg_author_dk.png
│ │ ├── svg_author_xr.png
│ │ ├── svg_blue_share.png
│ │ ├── svg_clock.png
│ │ ├── svg_delete.png
│ │ ├── svg_error.png
│ │ ├── svg_fire_grey.png
│ │ ├── svg_fire_red.png
│ │ ├── svg_fire_white.png
│ │ ├── svg_money_grey.png
│ │ ├── svg_money_red.png
│ │ ├── svg_money_white.png
│ │ ├── svg_orange_comment.png
│ │ ├── svg_red_book_count.png
│ │ ├── svg_red_like_normal.png
│ │ ├── svg_red_like_pressed.png
│ │ ├── svg_red_nav_bar_love.png
│ │ ├── svg_red_normal_like.png
│ │ ├── svg_red_point.png
│ │ ├── svg_red_pressed_like.png
│ │ ├── svg_red_select.png
│ │ ├── svg_red_work.png
│ │ ├── svg_tab_bar_find.png
│ │ ├── svg_tab_bar_find_hl.png
│ │ ├── svg_tab_bar_homepage.png
│ │ ├── svg_tab_bar_kind.png
│ │ ├── svg_tab_bar_kind_hl.png
│ │ ├── svg_tab_bar_main_hl.png
│ │ ├── svg_tab_bar_mine.png
│ │ ├── svg_tab_bar_mine_hl.png
│ │ ├── svg_ticket_grey.png
│ │ ├── svg_ticket_red.png
│ │ ├── svg_ticket_white.png
│ │ ├── svg_white_nav_bar_back.png
│ │ ├── svg_white_nav_bar_love.png
│ │ ├── svg_white_normal_like.png
│ │ ├── svg_white_pressed_like.png
│ │ └── svg_white_select.png
│ │ ├── drawable
│ │ ├── bg_black_transparent.xml
│ │ ├── bg_book_bill_detail_head.xml
│ │ ├── bg_btn_chapter.xml
│ │ ├── bg_btn_offline_cache.xml
│ │ ├── bg_btn_start_read.xml
│ │ ├── bg_edittext_search.xml
│ │ ├── bg_hot_key_dark_green.xml
│ │ ├── bg_hot_key_red.xml
│ │ ├── bg_oval_stroke.xml
│ │ ├── bg_support_statistics_red.xml
│ │ ├── bg_tag_black.xml
│ │ ├── black_oval_bg.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_reader_error.png
│ │ ├── selector_tab_bookshelf.xml
│ │ ├── selector_tab_home.xml
│ │ ├── selector_tab_kind.xml
│ │ └── selector_tab_mine.xml
│ │ ├── layout
│ │ ├── activity_book_bill.xml
│ │ ├── activity_book_bill_detail.xml
│ │ ├── activity_book_detail.xml
│ │ ├── activity_comic.xml
│ │ ├── activity_launch.xml
│ │ ├── activity_main.xml
│ │ ├── activity_search.xml
│ │ ├── activity_search_result.xml
│ │ ├── cell_banner.xml
│ │ ├── cell_book_bill.xml
│ │ ├── cell_book_bill_detaill.xml
│ │ ├── cell_book_collect.xml
│ │ ├── cell_book_history.xml
│ │ ├── cell_book_home.xml
│ │ ├── cell_book_info.xml
│ │ ├── cell_book_list.xml
│ │ ├── cell_chapter_num.xml
│ │ ├── cell_comic.xml
│ │ ├── cell_dir.xml
│ │ ├── cell_item.xml
│ │ ├── cell_rank.xml
│ │ ├── cell_search_history.xml
│ │ ├── cell_statistic.xml
│ │ ├── cell_support_fan.xml
│ │ ├── cell_support_fan_top3.xml
│ │ ├── cell_type.xml
│ │ ├── fragment_bookshelf.xml
│ │ ├── fragment_home.xml
│ │ ├── fragment_mine.xml
│ │ ├── fragment_tab_detail.xml
│ │ ├── fragment_tab_dir.xml
│ │ ├── fragment_tab_support.xml
│ │ ├── fragment_type.xml
│ │ ├── fragment_type_detail.xml
│ │ ├── hotkey_tagflowlayout.xml
│ │ ├── layout_check.xml
│ │ ├── layout_comic_list.xml
│ │ ├── layout_select.xml
│ │ ├── layout_top.xml
│ │ ├── loading_layout.xml
│ │ └── tag_tagflowlayout.xml
│ │ ├── menu
│ │ └── main_bottom_menus.xml
│ │ ├── mipmap-hdpi
│ │ ├── icon_new.png
│ │ ├── icon_ranking.png
│ │ ├── point_0.png
│ │ ├── point_1.png
│ │ └── svg_red_nav_bar_back.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_logo.png
│ │ ├── pic_main_boy.png
│ │ ├── pic_main_girl.png
│ │ ├── svg_pic_list_dream.png
│ │ ├── svg_pic_list_fast.png
│ │ ├── svg_pic_list_fire.png
│ │ ├── svg_pic_list_jd.png
│ │ ├── svg_pic_list_love.png
│ │ ├── svg_pic_list_new.png
│ │ ├── svg_red_nav_bar_search.png
│ │ └── svg_white_nav_bar_search.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimen.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── com
│ └── rdc
│ └── bms
│ └── q_comic
│ └── ExampleUnitTest.java
├── build.gradle
├── easy_rv_adapter
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── rdc
│ │ └── bms
│ │ └── easy_rv_adapter
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── rdc
│ │ │ └── bms
│ │ │ └── easy_rv_adapter
│ │ │ ├── OnClickViewRvListener.java
│ │ │ ├── Utils.java
│ │ │ ├── base
│ │ │ ├── BaseRvAdapter.java
│ │ │ ├── BaseRvCell.java
│ │ │ ├── BaseRvStateCell.java
│ │ │ ├── BaseRvViewHolder.java
│ │ │ ├── Cell.java
│ │ │ └── RvSimpleAdapter.java
│ │ │ ├── cell
│ │ │ ├── EmptyCell.java
│ │ │ ├── ErrorCell.java
│ │ │ ├── LoadMoreCell.java
│ │ │ └── LoadingCell.java
│ │ │ ├── config
│ │ │ └── ItemType.java
│ │ │ └── fragment
│ │ │ └── AbsFragment.java
│ └── res
│ │ ├── layout
│ │ ├── rv_base_fragment_layout.xml
│ │ ├── rv_empty_layout.xml
│ │ ├── rv_error_layout.xml
│ │ ├── rv_load_more_layout.xml
│ │ ├── rv_loading_layout.xml
│ │ └── rv_state_layout.xml
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── com
│ └── rdc
│ └── bms
│ └── easy_rv_adapter
│ └── ExampleUnitTest.java
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches/build_file_checksums.ser
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | .DS_Store
9 | /build
10 | /captures
11 | .externalNativeBuild
12 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Q_Comic
2 | 仿知音漫客APP,目前已经完成了基本浏览、搜索、收藏等基本功能。
3 | # 界面
4 | 
5 | 
6 | 
7 | 
8 | 
9 | # 结束
10 | 本应用所有数据均来自网络,未经允许,请勿用于商业用途。
11 |
12 | 如有侵权,请联系作者删除!
13 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 27
5 | defaultConfig {
6 | applicationId "com.rdc.bms.q_comic"
7 | minSdkVersion 21
8 | targetSdkVersion 27
9 | versionCode 1
10 | versionName "1.0"
11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
12 | }
13 | buildTypes {
14 | release {
15 | minifyEnabled false
16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
17 | }
18 | }
19 | }
20 |
21 | dependencies {
22 | implementation fileTree(dir: 'libs', include: ['*.jar'])
23 | implementation project(':easy_rv_adapter')
24 | implementation 'com.youth.banner:banner:1.4.10'
25 | implementation 'com.hyman:flowlayout-lib:1.1.2'
26 | implementation 'com.android.support:appcompat-v7:27.1.1'
27 | implementation 'com.android.support.constraint:constraint-layout:1.1.3'
28 | implementation 'com.android.support:cardview-v7:27.1.1'
29 | implementation 'com.android.support:design:27.1.1'
30 | implementation 'com.jakewharton:butterknife:8.8.1'
31 | implementation 'com.android.support:support-v4:27.1.1'
32 | annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
33 | implementation 'com.google.code.gson:gson:2.8.2'
34 |
35 | implementation 'de.hdodenhof:circleimageview:3.0.0'
36 | implementation 'org.jsoup:jsoup:1.9.2'
37 | implementation 'org.litepal.android:java:3.0.0'
38 | implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
39 | implementation 'jp.wasabeef:glide-transformations:3.0.1'
40 |
41 | implementation "io.reactivex.rxjava2:rxjava:2.2.5"
42 | implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
43 | implementation 'com.squareup.retrofit2:retrofit:2.5.0'
44 | implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
45 | implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
46 | implementation 'com.github.LinYaoTian:LeavesLoading:1.0.2'
47 |
48 | implementation 'com.android.support:recyclerview-v7:27.1.1'
49 | implementation 'com.github.bumptech.glide:glide:4.8.0'
50 | annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
51 | testImplementation 'junit:junit:4.12'
52 | androidTestImplementation 'com.android.support.test:runner:1.0.2'
53 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
54 | }
55 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/rdc/bms/q_comic/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic;
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 | * Instrumented 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() {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.rdc.bms.q_comic", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/assets/litepal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
12 |
13 |
22 |
23 |
24 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
53 |
54 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/app/App.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.app;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.app.Application;
5 | import android.content.Context;
6 |
7 | import org.litepal.LitePal;
8 |
9 | public class App extends Application {
10 |
11 | @SuppressLint("StaticFieldLeak")
12 | private static Context sContext;
13 |
14 | @Override
15 | public void onCreate() {
16 | super.onCreate();
17 | LitePal.initialize(this);
18 | LitePal.getDatabase();
19 | sContext = getApplicationContext();
20 | }
21 |
22 | public static Context getContext() {
23 | return sContext;
24 | }
25 |
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/base/BaseAbsFragment.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.base;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.NonNull;
5 | import android.support.annotation.Nullable;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.widget.Toast;
10 |
11 | import com.rdc.bms.easy_rv_adapter.fragment.AbsFragment;
12 |
13 | public abstract class BaseAbsFragment
extends AbsFragment {
14 |
15 | protected P mPresenter;
16 |
17 | protected abstract P getInstance();
18 |
19 | protected void showToast(String msg){
20 | Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT).show();
21 | }
22 |
23 | @Nullable
24 | @Override
25 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
26 | mPresenter = getInstance();
27 | if (mPresenter != null){
28 | mPresenter.attachView(this);
29 | }
30 | return super.onCreateView(inflater, container, savedInstanceState);
31 | }
32 |
33 | @Override
34 | public void onDestroyView() {
35 | super.onDestroyView();
36 | if (mPresenter != null){
37 | mPresenter.detachView();
38 | }
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/base/BaseActivity.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.base;
2 |
3 | import android.os.Build;
4 | import android.os.Bundle;
5 | import android.support.annotation.Nullable;
6 | import android.support.v7.app.AppCompatActivity;
7 | import android.view.View;
8 | import android.widget.EditText;
9 | import android.widget.Toast;
10 |
11 | import com.rdc.bms.q_comic.util.ActivityCollectorUtil;
12 |
13 | import butterknife.ButterKnife;
14 |
15 |
16 | public abstract class BaseActivity extends AppCompatActivity{
17 | protected String TAG;
18 | protected T mPresenter;
19 |
20 | @Override
21 | protected void onCreate(@Nullable Bundle savedInstanceState) {
22 | super.onCreate(savedInstanceState);
23 | setStatusTextColor(true);
24 | TAG = this.getClass().getSimpleName();
25 | ActivityCollectorUtil.addActivity(this);
26 | setContentView(setLayoutResID());
27 | ButterKnife.bind(this);
28 | mPresenter = getInstance();
29 | if (mPresenter !=null){
30 | mPresenter.attachView(this);
31 | }
32 | initData(savedInstanceState);
33 | initView();
34 | initListener();
35 | }
36 |
37 | /**
38 | * 设置状态栏字体颜色
39 | * @param isDark
40 | */
41 | protected void setStatusTextColor(boolean isDark){
42 | if (isDark){
43 | //黑色字体
44 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
45 | getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
46 | }
47 | }else {
48 | //白色字体
49 | getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
50 | }
51 | }
52 |
53 | @Override
54 | protected void onDestroy() {
55 | if (mPresenter != null) {
56 | mPresenter.detachView();
57 | }
58 | ActivityCollectorUtil.removeActivity(this);
59 | super.onDestroy();
60 | }
61 |
62 | protected abstract int setLayoutResID();
63 |
64 | protected abstract T getInstance();
65 |
66 | protected abstract void initData(Bundle savedInstanceState);
67 |
68 | protected abstract void initView();
69 |
70 | protected abstract void initListener();
71 |
72 | public void showToast(String text) {
73 | Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
74 | }
75 |
76 | protected static String getString(EditText et) {
77 | return et.getText().toString();
78 | }
79 |
80 |
81 |
82 | }
83 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/base/BaseBookShelfVO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.base;
2 |
3 | public class BaseBookShelfVO {
4 | public boolean isSelect;
5 | public boolean isStartSelect;
6 |
7 | public boolean isSelect() {
8 | return isSelect;
9 | }
10 |
11 | public void setSelect(boolean select) {
12 | isSelect = select;
13 | }
14 |
15 | public boolean isStartSelect() {
16 | return isStartSelect;
17 | }
18 |
19 | public void setStartSelect(boolean startSelect) {
20 | isStartSelect = startSelect;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/base/BaseDTO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.base;
2 |
3 | public abstract class BaseDTO {
4 |
5 | protected int code;
6 |
7 | protected String msg;
8 |
9 | public abstract E transform();
10 |
11 | public final boolean isSuccess(){
12 | return code == 0;
13 | }
14 |
15 | public int getCode() {
16 | return code;
17 | }
18 |
19 | public void setCode(int code) {
20 | this.code = code;
21 | }
22 |
23 | public String getMsg() {
24 | return msg == null ? "" : msg;
25 | }
26 |
27 | public void setMsg(String msg) {
28 | this.msg = msg == null ? "" : msg;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/base/BasePresenter.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.base;
2 |
3 |
4 | public class BasePresenter{
5 |
6 | public final String TAG = "LYT";
7 |
8 | private V view;
9 |
10 | public void attachView(V v){
11 | view = v;
12 | }
13 |
14 | public void detachView(){
15 | view = null;
16 | }
17 |
18 | public boolean isAttachView(){
19 | return view != null;
20 | }
21 |
22 | public V getMVPView(){
23 | return view;
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/BannerBean.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean;
2 |
3 | /**
4 | * 首页轮播图实体
5 | */
6 | public class BannerBean {
7 |
8 | private String title;
9 | private String imageUrl;
10 | private String bookId;
11 |
12 | @Override
13 | public String toString() {
14 | return "BannerBean{" +
15 | "title='" + title + '\'' +
16 | ", imageUrl='" + imageUrl + '\'' +
17 | ", bookId=" + bookId +
18 | '}';
19 | }
20 |
21 | public BannerBean(String title, String imageUrl, String bookId) {
22 | this.title = title;
23 | this.imageUrl = imageUrl;
24 | this.bookId = bookId;
25 | }
26 |
27 | public BannerBean(){
28 |
29 | }
30 |
31 | public String getTitle() {
32 | return title == null ? "" : title;
33 | }
34 |
35 | public void setTitle(String title) {
36 | this.title = title == null ? "" : title;
37 | }
38 |
39 | public String getImageUrl() {
40 | return imageUrl == null ? "" : imageUrl;
41 | }
42 |
43 | public void setImageUrl(String imageUrl) {
44 | this.imageUrl = imageUrl == null ? "" : imageUrl;
45 | }
46 |
47 | public String getBookId() {
48 | return bookId;
49 | }
50 |
51 | public void setBookId(String bookId) {
52 | this.bookId = bookId;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/BookBillBean.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean;
2 |
3 | import org.litepal.annotation.Column;
4 | import org.litepal.crud.LitePalSupport;
5 |
6 | import java.util.ArrayList;
7 | import java.util.List;
8 | import java.util.Objects;
9 |
10 | /**
11 | * 书单
12 | */
13 | public class BookBillBean extends LitePalSupport {
14 | private ArrayList bookIdList;
15 | private String title;
16 | private int num;
17 | private String intro;
18 | @Column(unique = true)
19 | private String bookBillId;
20 |
21 | public long getPrimaryKey(){
22 | return getBaseObjId();
23 | }
24 |
25 | @Override
26 | public boolean equals(Object o) {
27 | if (this == o) return true;
28 | if (o == null || getClass() != o.getClass()) return false;
29 | BookBillBean that = (BookBillBean) o;
30 | return Objects.equals(bookBillId, that.bookBillId);
31 | }
32 |
33 | @Override
34 | public int hashCode() {
35 | return Objects.hash(bookBillId);
36 | }
37 |
38 | @Override
39 | public String toString() {
40 | return "BookBillBean{" +
41 | "bookIdList=" + bookIdList.toString() +
42 | ", title='" + title + '\'' +
43 | ", num=" + num +
44 | ", intro='" + intro + '\'' +
45 | ", bookBillId='" + bookBillId + '\'' +
46 | '}';
47 | }
48 |
49 | public ArrayList getBookIdList() {
50 | return bookIdList;
51 | }
52 |
53 | public void setBookIdList(ArrayList bookIdList) {
54 | this.bookIdList = bookIdList;
55 | }
56 |
57 | public String getTitle() {
58 | return title == null ? "" : title;
59 | }
60 |
61 | public void setTitle(String title) {
62 | this.title = title == null ? "" : title;
63 | }
64 |
65 | public int getNum() {
66 | return num;
67 | }
68 |
69 | public void setNum(int num) {
70 | this.num = num;
71 | }
72 |
73 | public String getIntro() {
74 | return intro == null ? "" : intro;
75 | }
76 |
77 | public void setIntro(String intro) {
78 | this.intro = intro == null ? "" : intro;
79 | }
80 |
81 | public String getBookBillId() {
82 | return bookBillId == null ? "" : bookBillId;
83 | }
84 |
85 | public void setBookBillId(String bookBillId) {
86 | this.bookBillId = bookBillId == null ? "" : bookBillId;
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/BookInfoBean.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean;
2 |
3 | import com.rdc.bms.q_comic.mvp.model.vo.BookTabDetailVO;
4 |
5 | public class BookInfoBean {
6 | private String intro;
7 | private String authorName;
8 | private String authorCoverUrl;
9 | private String fansNum;
10 | private String notice;
11 | private int priorityResId;
12 |
13 | public static BookInfoBean toThis(BookTabDetailVO bean){
14 | BookInfoBean bookInfoBean = new BookInfoBean();
15 | bookInfoBean.intro = bean.getIntro();
16 | bookInfoBean.authorName = bean.getAuthorName();
17 | bookInfoBean.authorCoverUrl = bean.getAuthorCoverUrl();
18 | bookInfoBean.fansNum = bean.getFansNum();
19 | bookInfoBean.notice = bean.getNotice();
20 | bookInfoBean.priorityResId = bean.getPriorityResId();
21 | return bookInfoBean;
22 | }
23 |
24 | public int getPriorityResId() {
25 | return priorityResId;
26 | }
27 |
28 | public void setPriorityResId(int priorityResId) {
29 | this.priorityResId = priorityResId;
30 | }
31 |
32 | public String getIntro() {
33 | return intro == null ? "" : intro;
34 | }
35 |
36 | public void setIntro(String intro) {
37 | this.intro = intro == null ? "" : intro;
38 | }
39 |
40 | public String getAuthorName() {
41 | return authorName == null ? "" : authorName;
42 | }
43 |
44 | public void setAuthorName(String authorName) {
45 | this.authorName = authorName == null ? "" : authorName;
46 | }
47 |
48 | public String getAuthorCoverUrl() {
49 | return authorCoverUrl == null ? "" : authorCoverUrl;
50 | }
51 |
52 | public void setAuthorCoverUrl(String authorCoverUrl) {
53 | this.authorCoverUrl = authorCoverUrl == null ? "" : authorCoverUrl;
54 | }
55 |
56 | public String getFansNum() {
57 | return fansNum == null ? "" : fansNum;
58 | }
59 |
60 | public void setFansNum(String fansNum) {
61 | this.fansNum = fansNum == null ? "" : fansNum;
62 | }
63 |
64 | public String getNotice() {
65 | return notice == null ? "" : notice;
66 | }
67 |
68 | public void setNotice(String notice) {
69 | this.notice = notice == null ? "" : notice;
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/ComicBean.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean;
2 |
3 | public class ComicBean {
4 |
5 | private String imageUrl;//图片URL
6 | private boolean isFirstPage;//是否本章第一页漫画
7 | private boolean isLastPage;//是否时本章最后一个漫画
8 | private long chapterId;//所在章节ID
9 | private int page;//在本章节中的页数
10 |
11 | public String getComicId(){
12 | return "*"+chapterId+"*"+page;
13 | }
14 |
15 | public int getPage() {
16 | return page;
17 | }
18 |
19 | public void setPage(int page) {
20 | this.page = page;
21 | }
22 |
23 | public long getChapterId() {
24 | return chapterId;
25 | }
26 |
27 | public void setChapterId(long chapterId) {
28 | this.chapterId = chapterId;
29 | }
30 |
31 | public String getImageUrl() {
32 | return imageUrl == null ? "" : imageUrl;
33 | }
34 |
35 | public void setImageUrl(String imageUrl) {
36 | this.imageUrl = imageUrl == null ? "" : imageUrl;
37 | }
38 |
39 | public boolean isFirstPage() {
40 | return isFirstPage;
41 | }
42 |
43 | public void setFirstPage(boolean firstPage) {
44 | isFirstPage = firstPage;
45 | }
46 |
47 | public boolean isLastPage() {
48 | return isLastPage;
49 | }
50 |
51 | public void setLastPage(boolean lastPage) {
52 | isLastPage = lastPage;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/HotKeyBean.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean;
2 |
3 | public class HotKeyBean {
4 |
5 | private String key;
6 | private int colorResId;
7 |
8 | public String getKey() {
9 | return key == null ? "" : key;
10 | }
11 |
12 | public void setKey(String key) {
13 | this.key = key == null ? "" : key;
14 | }
15 |
16 | public int getColorResId() {
17 | return colorResId;
18 | }
19 |
20 | public void setColorResId(int colorResId) {
21 | this.colorResId = colorResId;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/SearchHistoryBean.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean;
2 |
3 | import org.litepal.crud.LitePalSupport;
4 |
5 | public class SearchHistoryBean extends LitePalSupport {
6 |
7 | private String key;
8 |
9 | public SearchHistoryBean(String key) {
10 | this.key = key;
11 | }
12 |
13 | public SearchHistoryBean() {
14 | }
15 |
16 | public String getKey() {
17 | return key == null ? "" : key;
18 | }
19 |
20 | public void setKey(String key) {
21 | this.key = key == null ? "" : key;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/TypeBean.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean;
2 |
3 | public class TypeBean {
4 | private String name;//分类名
5 | private String coverUrl;//分类封面
6 | private String typeId;//分类ID
7 |
8 | public String getName() {
9 | return name == null ? "" : name;
10 | }
11 |
12 | public void setName(String name) {
13 | this.name = name == null ? "" : name;
14 | }
15 |
16 | public String getCoverUrl() {
17 | return coverUrl == null ? "" : coverUrl;
18 | }
19 |
20 | public void setCoverUrl(String coverUrl) {
21 | this.coverUrl = coverUrl == null ? "" : coverUrl;
22 | }
23 |
24 | public String getTypeId() {
25 | return typeId == null ? "" : typeId;
26 | }
27 |
28 | public void setTypeId(String typeId) {
29 | this.typeId = typeId == null ? "" : typeId;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/BannerCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ImageView;
8 |
9 | import com.bumptech.glide.Glide;
10 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
11 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
12 | import com.rdc.bms.q_comic.R;
13 | import com.rdc.bms.q_comic.bean.BannerBean;
14 | import com.rdc.bms.q_comic.config.ItemType;
15 | import com.youth.banner.Banner;
16 | import com.youth.banner.BannerConfig;
17 | import com.youth.banner.loader.ImageLoader;
18 |
19 | import java.util.ArrayList;
20 | import java.util.List;
21 |
22 | public class BannerCell extends BaseRvCell> {
23 |
24 | private List mImageUrlList;
25 | private List mTitleList;
26 |
27 | public BannerCell(List bannerBeans) {
28 | super(bannerBeans);
29 | mImageUrlList = new ArrayList<>();
30 | mTitleList = new ArrayList<>();
31 | for (BannerBean bannerBean : bannerBeans) {
32 | mImageUrlList.add(bannerBean.getImageUrl());
33 | mTitleList.add(bannerBean.getTitle());
34 | }
35 | }
36 |
37 | @Override
38 | public void releaseResource() {
39 | }
40 |
41 | @Override
42 | public int getItemType() {
43 | return ItemType.TYPE_BANNER;
44 | }
45 |
46 | @Override
47 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
48 | View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_banner,parent,false);
49 | return new BaseRvViewHolder(view);
50 | }
51 |
52 | @Override
53 | public void onBindViewHolder(BaseRvViewHolder holder, int position) {
54 | Banner banner = (Banner) holder.getView(R.id.banner_cell_banner);
55 | banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);
56 | banner.setImageLoader(new ImageLoader() {
57 | @Override
58 | public void displayImage(Context context, Object path, ImageView imageView) {
59 | Glide.with(context).load(path).into(imageView);
60 | }
61 | });
62 |
63 | banner.setImages(mImageUrlList);
64 | banner.setBannerTitles(mTitleList);
65 | banner.start();
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/BookBillDetailCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.view.View;
4 | import android.view.ViewGroup;
5 | import android.widget.ImageView;
6 | import android.widget.TextView;
7 |
8 | import com.bumptech.glide.Glide;
9 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
10 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
11 | import com.rdc.bms.q_comic.R;
12 | import com.rdc.bms.q_comic.bean.BookBean;
13 | import com.rdc.bms.q_comic.config.ItemType;
14 |
15 | public class BookBillDetailCell extends BaseRvCell {
16 | public BookBillDetailCell(BookBean bookBean) {
17 | super(bookBean);
18 | }
19 |
20 | @Override
21 | public void releaseResource() {
22 |
23 | }
24 |
25 | @Override
26 | public int getItemType() {
27 | return ItemType.TYPE_BOOK_BILL;
28 | }
29 |
30 | @Override
31 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
32 | return createSimpleHolder(parent, R.layout.cell_book_bill_detaill);
33 | }
34 |
35 | @Override
36 | public void onBindViewHolder(final BaseRvViewHolder holder, final int position) {
37 | ImageView ivCover = holder.getImageView(R.id.iv_cover_cell_book_bill_detail);
38 | TextView tvTitle = holder.getTextView(R.id.tv_title_cell_book_bill_detail);
39 | TextView tvIntro = holder.getTextView(R.id.tv_intro_cell_book_bill_detail);
40 | TextView tvRecent = holder.getTextView(R.id.tv_recent_chapter_cell_book_bill_detail);
41 | Glide.with(holder.getContext())
42 | .load(mData.getCoverUrl())
43 | .into(ivCover);
44 | tvTitle.setText(mData.getName());
45 | tvRecent.setText(mData.getRecentChapter());
46 | tvIntro.setText(mData.getSummary());
47 |
48 |
49 | if (mListener != null){
50 | holder.itemView.setOnClickListener(new View.OnClickListener() {
51 | @Override
52 | public void onClick(View v) {
53 | mListener.onClickItem(mData,position);
54 | }
55 | });
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/ChapterNumCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.ImageView;
7 | import android.widget.TextView;
8 |
9 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
10 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
11 | import com.rdc.bms.q_comic.R;
12 | import com.rdc.bms.q_comic.bean.ChapterBean;
13 | import com.rdc.bms.q_comic.config.ItemType;
14 |
15 | /**
16 | * 单纯只有话数
17 | */
18 | public class ChapterNumCell extends BaseRvCell {
19 |
20 | public ChapterNumCell(ChapterBean chapter) {
21 | super(chapter);
22 | }
23 |
24 | @Override
25 | public void releaseResource() {
26 |
27 | }
28 |
29 | @Override
30 | public int getItemType() {
31 | return ItemType.TYPE_CHAPTER;
32 | }
33 |
34 | @Override
35 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
36 | return new BaseRvViewHolder(LayoutInflater.from(parent.getContext())
37 | .inflate(R.layout.cell_chapter_num,parent,false));
38 | }
39 |
40 | @Override
41 | public void onBindViewHolder(BaseRvViewHolder holder, final int position) {
42 | TextView tv = holder.getTextView(R.id.tv_num_cell_chapter_num);
43 | ImageView ivRead = holder.getImageView(R.id.iv_is_read_cell_chapter_num);
44 | ImageView ivUnRead = holder.getImageView(R.id.iv_un_read_cell_chapter_num);
45 | ivUnRead.setVisibility(mData.isHasRedPoint() && !mData.isRead()?View.VISIBLE:View.GONE);
46 | ivRead.setVisibility(mData.isRead()?View.VISIBLE:View.GONE);
47 | tv.setText(mData.getChapterNum());
48 | if (mListener != null){
49 | holder.itemView.setOnClickListener(new View.OnClickListener() {
50 | @Override
51 | public void onClick(View v) {
52 | mListener.onClickItem(mData,position);
53 | }
54 | });
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/CollectCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.view.View;
4 | import android.view.ViewGroup;
5 | import android.widget.ImageView;
6 | import android.widget.TextView;
7 |
8 | import com.bumptech.glide.Glide;
9 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
10 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
11 | import com.rdc.bms.q_comic.R;
12 | import com.rdc.bms.q_comic.base.BaseBookShelfCell;
13 | import com.rdc.bms.q_comic.base.BaseBookShelfVO;
14 | import com.rdc.bms.q_comic.bean.BookBean;
15 | import com.rdc.bms.q_comic.config.ItemType;
16 | import com.rdc.bms.q_comic.mvp.model.vo.CollectVO;
17 |
18 | public class CollectCell extends BaseBookShelfCell {
19 | public CollectCell(CollectVO collectVO) {
20 | super(collectVO);
21 | }
22 |
23 | @Override
24 | public void releaseResource() {
25 |
26 | }
27 |
28 | @Override
29 | public int getItemType() {
30 | return ItemType.TYPE_SUBSCRIBE;
31 | }
32 |
33 | @Override
34 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
35 | return createSimpleHolder(parent, R.layout.cell_book_collect);
36 | }
37 |
38 | @Override
39 | public void onBindViewHolder(final BaseRvViewHolder holder, final int position) {
40 | super.onBindViewHolder(holder,position);
41 | TextView tvIsUpdated = holder.getTextView(R.id.tv_is_update_cell_book_collect);
42 | TextView tvName = holder.getTextView(R.id.tv_name_cell_book_collect);
43 | TextView tvRecentChapter = holder.getTextView(R.id.tv_recent_cell_book_collect);
44 | TextView tvRecordChapter = holder.getTextView(R.id.tv_record_cell_book_collect);
45 | ImageView ivCover = holder.getImageView(R.id.iv_cover_cell_book_collect);
46 |
47 | tvIsUpdated.setVisibility(mData.getBookBean().isUpdate()?View.VISIBLE:View.GONE);
48 | tvName.setText(mData.getBookBean().getName());
49 | tvRecentChapter.setText(mData.getBookBean().getRecentChapter());
50 | tvRecordChapter.setText(mData.getBookBean().getLastRecordChapter());
51 | Glide.with(holder.getContext()).load(mData.getBookBean().getCoverUrl()).into(ivCover);
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/DirCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.view.View;
4 | import android.view.ViewGroup;
5 | import android.widget.ImageView;
6 | import android.widget.TextView;
7 |
8 | import com.bumptech.glide.Glide;
9 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
10 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
11 | import com.rdc.bms.q_comic.R;
12 | import com.rdc.bms.q_comic.bean.ChapterBean;
13 | import com.rdc.bms.q_comic.config.ItemType;
14 |
15 | public class DirCell extends BaseRvCell {
16 |
17 | public DirCell(ChapterBean chapterBean) {
18 | super(chapterBean);
19 | }
20 |
21 | @Override
22 | public void releaseResource() {
23 |
24 | }
25 |
26 | @Override
27 | public int getItemType() {
28 | return ItemType.TYPE_DIR;
29 | }
30 |
31 | @Override
32 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
33 | return createSimpleHolder(parent,R.layout.cell_dir);
34 | }
35 |
36 | @Override
37 | public void onBindViewHolder(final BaseRvViewHolder holder, final int position) {
38 | ImageView iv = holder.getImageView(R.id.iv_cover_cell_dir);
39 | TextView tvNum = holder.getTextView(R.id.tv_chapter_num_cell_dir);
40 | TextView tvName = holder.getTextView(R.id.tv_chapter_name_cell_dir);
41 |
42 | Glide.with(holder.getContext())
43 | .load(mData.getCoverUrl())
44 | .into(iv);
45 | tvNum.setText(mData.getChapterNum());
46 | tvName.setText(mData.getName());
47 | holder.itemView.setBackgroundResource(mData.isChecked()?
48 | R.color.colorRed:android.R.color.transparent);
49 | if (mListener != null){
50 | holder.itemView.setOnClickListener(new View.OnClickListener() {
51 | @Override
52 | public void onClick(View v) {
53 | mListener.onClickItem(mData,position);
54 | }
55 | });
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/FanCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.text.Html;
4 | import android.view.ViewGroup;
5 | import android.widget.TextView;
6 |
7 | import com.bumptech.glide.Glide;
8 | import com.bumptech.glide.request.RequestOptions;
9 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
10 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
11 | import com.rdc.bms.q_comic.R;
12 | import com.rdc.bms.q_comic.mvp.model.vo.BookTabSupportVO;
13 | import com.rdc.bms.q_comic.config.ItemType;
14 |
15 | import de.hdodenhof.circleimageview.CircleImageView;
16 |
17 | public class FanCell extends BaseRvCell {
18 | public FanCell(BookTabSupportVO.Fan fan) {
19 | super(fan);
20 | }
21 |
22 | @Override
23 | public void releaseResource() {
24 |
25 | }
26 |
27 | @Override
28 | public int getItemType() {
29 | return ItemType.TYPE_FAN;
30 | }
31 |
32 | @Override
33 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
34 | return createSimpleHolder(parent,R.layout.cell_support_fan);
35 | }
36 |
37 | @Override
38 | public void onBindViewHolder(BaseRvViewHolder holder, int position) {
39 | TextView tvRank = holder.getTextView(R.id.tv_rank_cell_fan);
40 | TextView tvName = holder.getTextView(R.id.tv_name_cell_fan);
41 | CircleImageView civCover = (CircleImageView) holder.getView(R.id.civ_cover_cell_fan);
42 | TextView tvInfluence = holder.getTextView(R.id.tv_influence_cell_fan);
43 |
44 | tvRank.setText(String.valueOf(position+4));
45 | tvName.setText(mData.getName());
46 | Glide.with(holder.getContext())
47 | .load(mData.getCoverUrl())
48 | .apply(new RequestOptions().error(R.drawable.ic_reader_error))
49 | .into(civCover);
50 | tvInfluence.setText(Html.fromHtml(mData.getInfluence()));
51 |
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/HistoryCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.ImageView;
7 | import android.widget.TextView;
8 |
9 | import com.bumptech.glide.Glide;
10 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
11 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
12 | import com.rdc.bms.q_comic.R;
13 | import com.rdc.bms.q_comic.base.BaseBookShelfCell;
14 | import com.rdc.bms.q_comic.bean.BookBean;
15 | import com.rdc.bms.q_comic.config.ItemType;
16 | import com.rdc.bms.q_comic.mvp.model.vo.HistoryVO;
17 |
18 | public class HistoryCell extends BaseBookShelfCell {
19 |
20 | public HistoryCell(HistoryVO h) {
21 | super(h);
22 | }
23 |
24 | @Override
25 | public void releaseResource() {
26 |
27 | }
28 |
29 | @Override
30 | public int getItemType() {
31 | return ItemType.TYPE_HISTORY;
32 | }
33 |
34 | @Override
35 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
36 | return createSimpleHolder(parent, R.layout.cell_book_history);
37 | }
38 |
39 | @SuppressLint("SetTextI18n")
40 | @Override
41 | public void onBindViewHolder(BaseRvViewHolder holder, final int position) {
42 | super.onBindViewHolder(holder, position);
43 | TextView tvName = holder.getTextView(R.id.tv_name_cell_book_history);
44 | TextView tvRecord = holder.getTextView(R.id.tv_record_cell_book_history);
45 | ImageView ivCover = holder.getImageView(R.id.iv_cover_cell_book_history);
46 | tvName.setText(mData.getBookBean().getName());
47 | tvRecord.setText("已读:"+mData.getBookBean().getLastRecordChapter());
48 | Glide.with(holder.getContext()).load(mData.getBookBean().getCoverUrl()).into(ivCover);
49 | if (mListener != null){
50 | holder.itemView.setOnClickListener(new View.OnClickListener() {
51 | @Override
52 | public void onClick(View v) {
53 | mListener.onClickItem(mData,position);
54 | }
55 | });
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/SearchHistoryCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.ImageView;
7 | import android.widget.TextView;
8 |
9 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
10 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
11 | import com.rdc.bms.q_comic.R;
12 | import com.rdc.bms.q_comic.bean.SearchHistoryBean;
13 | import com.rdc.bms.q_comic.config.ItemType;
14 |
15 | public class SearchHistoryCell extends BaseRvCell {
16 |
17 | public SearchHistoryCell(SearchHistoryBean searchHistoryBean) {
18 | super(searchHistoryBean);
19 | }
20 |
21 | @Override
22 | public void releaseResource() {
23 |
24 | }
25 |
26 | @Override
27 | public int getItemType() {
28 | return ItemType.TYPE_SEARCH_HISTORY;
29 | }
30 |
31 | @Override
32 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
33 | return new BaseRvViewHolder(LayoutInflater.from(parent.getContext())
34 | .inflate(R.layout.cell_search_history,parent,false));
35 | }
36 |
37 | @Override
38 | public void onBindViewHolder(final BaseRvViewHolder holder, final int position) {
39 | TextView tvHistory = holder.getTextView(R.id.tv_history_cell_search_history);
40 | ImageView ivDelete = holder.getImageView(R.id.iv_delete_cell_search_history);
41 | tvHistory.setText(mData.getKey());
42 | if (mListener != null){
43 | ivDelete.setOnClickListener(new View.OnClickListener() {
44 | @Override
45 | public void onClick(View v) {
46 | mListener.onClick(v,position);
47 | }
48 | });
49 | holder.itemView.setOnClickListener(new View.OnClickListener() {
50 | @Override
51 | public void onClick(View v) {
52 | mListener.onClickItem(mData,position);
53 | }
54 | });
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/StatisticCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.text.Html;
4 | import android.view.ViewGroup;
5 | import android.widget.ImageView;
6 | import android.widget.TextView;
7 |
8 | import com.bumptech.glide.Glide;
9 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
10 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
11 | import com.rdc.bms.q_comic.R;
12 | import com.rdc.bms.q_comic.mvp.model.vo.BookTabSupportVO;
13 | import com.rdc.bms.q_comic.config.ItemType;
14 |
15 | public class StatisticCell extends BaseRvCell {
16 |
17 | public StatisticCell(BookTabSupportVO.SupportItem supportItem) {
18 | super(supportItem);
19 | }
20 |
21 | @Override
22 | public void releaseResource() {
23 |
24 | }
25 |
26 | @Override
27 | public int getItemType() {
28 | return ItemType.TYPE_STATISTIC;
29 | }
30 |
31 | @Override
32 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
33 | return createSimpleHolder(parent, R.layout.cell_statistic);
34 | }
35 |
36 | @Override
37 | public void onBindViewHolder(BaseRvViewHolder holder, int position) {
38 | TextView tvName = holder.getTextView(R.id.tv_name_cell_statistic);
39 | TextView tvValue = holder.getTextView(R.id.tv_value_cell_statistic);
40 | ImageView ivCover = holder.getImageView(R.id.iv_icon_cell_statistic);
41 |
42 | tvName.setText(mData.getOption());
43 | tvName.setTextColor(holder.getContext().getResources().getColor(mData.getColorTextResId()));
44 | tvValue.setTextColor(holder.getContext().getResources().getColor(mData.getColorTextResId()));
45 | tvValue.setText(Html.fromHtml(mData.getNum()));
46 | holder.itemView.setBackgroundResource(mData.getDrawableBgResId());
47 | Glide.with(holder.getContext()).load(mData.getIconResId()).into(ivCover);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/bean/rv_cell/TypeBeanCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.bean.rv_cell;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 |
7 | import com.bumptech.glide.Glide;
8 | import com.rdc.bms.easy_rv_adapter.base.BaseRvCell;
9 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
10 | import com.rdc.bms.q_comic.R;
11 | import com.rdc.bms.q_comic.bean.TypeBean;
12 | import com.rdc.bms.q_comic.config.ItemType;
13 |
14 | public class TypeBeanCell extends BaseRvCell {
15 | public TypeBeanCell(TypeBean typeBean) {
16 | super(typeBean);
17 | }
18 |
19 | @Override
20 | public void releaseResource() {
21 |
22 | }
23 |
24 | @Override
25 | public int getItemType() {
26 | return ItemType.TYPE_BOOK;
27 | }
28 |
29 | @Override
30 | public BaseRvViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
31 | return new BaseRvViewHolder(LayoutInflater.from(parent.getContext())
32 | .inflate(R.layout.cell_type,parent,false));
33 | }
34 |
35 | @Override
36 | public void onBindViewHolder(final BaseRvViewHolder holder, final int position) {
37 | holder.getTextView(R.id.tv_name_cell_type).setText(mData.getName());
38 | Glide.with(holder.getContext())
39 | .load(mData.getCoverUrl())
40 | .into(holder.getImageView(R.id.iv_cover_cell_type));
41 | if (mListener != null){
42 | holder.itemView.setOnClickListener(new View.OnClickListener() {
43 | @Override
44 | public void onClick(View v) {
45 | mListener.onClickItem(mData,position);
46 | }
47 | });
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/config/ItemType.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.config;
2 |
3 | public class ItemType {
4 | public static final int TYPE_BANNER = 0;
5 | public static final int TYPE_BOOK_LIST = 1;
6 | public static final int TYPE_BOOK = 2;
7 | public static final int TYPE_BOOK_BILL = 3;
8 |
9 | public static final int TYPE_SEARCH_HISTORY = 4;
10 | public static final int TYPE_CHAPTER = 5;
11 |
12 | public static final int TYPE_TAB_COMIC_LIST_RECOMMEND = 6;
13 | public static final int TYPE_TAB_COMIC_LIST_OTHER_WORKS = 7;
14 | public static final int TYPE_TAB_COMIC_INFO = 8;
15 |
16 | public static final int TYPE_FAN = 9;
17 | public static final int TYPE_STATISTIC = 10;
18 |
19 | public static final int TYPE_COMIC = 11;
20 | public static final int TYPE_DIR = 12;
21 | public static final int TYPE_SUBSCRIBE = 13;
22 | public static final int TYPE_HISTORY = 14;
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/listener/ILifeCycle.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.listener;
2 |
3 |
4 | public interface ILifeCycle {
5 | void onCreate();
6 |
7 | void onReStart();
8 |
9 | void onStart();
10 |
11 | void onResume();
12 |
13 | void onPause();
14 |
15 | void onStop();
16 |
17 | void onDestroy();
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/listener/OnComicClickListener.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.listener;
2 |
3 | public interface OnComicClickListener {
4 | void onClick(String comicId);
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/listener/OnEditListener.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.listener;
2 |
3 | public interface OnEditListener {
4 | /**
5 | * 开始编辑
6 | */
7 | void onStartEdit();
8 |
9 | /**
10 | * 编辑结束
11 | */
12 | void onEndEdit();
13 |
14 | /**
15 | * 全选或取消全选
16 | * @param isSelect
17 | */
18 | void onSelectAll(boolean isSelect);
19 |
20 | /**
21 | * 点击删除
22 | */
23 | void onDelete();
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/listener/OnScrollYChangeForAlphaListener.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.listener;
2 |
3 | public interface OnScrollYChangeForAlphaListener {
4 | void changeTopLayoutTransport(int alpha);
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/IBookBillDetailContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.mvp.model.vo.BookBillDetailVO;
4 |
5 | import java.util.ArrayList;
6 |
7 | public interface IBookBillDetailContract {
8 | interface View{
9 | void setBookDetailData(BookBillDetailVO data);
10 | void onError(String msg);
11 | }
12 |
13 | interface Presenter {
14 | void getBookBillDetailData(String bookId);
15 | void collectBookBill(boolean isCollect);
16 | void updateBookBill();
17 | void setCoverBookIdList(ArrayList coverBookIdList);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/IBookDetailContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.bean.BookDetailVO;
4 | import com.rdc.bms.q_comic.bean.ChapterBean;
5 |
6 | import java.util.List;
7 |
8 | public interface IBookDetailContract {
9 | interface View{
10 | void setBookDetailData(BookDetailVO bean);
11 | void setReadRecord(List newList);
12 | void setLastRecordChapter(ChapterBean chapter,boolean first);
13 | void onError(String msg);
14 | }
15 |
16 | interface Presenter{
17 | void getBookDetailData(String bookId);
18 | //获取读者读了哪些章节
19 | void getAllRecord();
20 | //获取最近读的章节(用于btnStartRead显示,和保存数据库)
21 | void getLastRecordChapter();
22 | void collect(boolean isCollect);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/IBookListContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.bean.BookBillBean;
4 |
5 | import java.util.List;
6 |
7 | public interface IBookListContract{
8 | interface view{
9 | void setBookList(List list);
10 | void showError(String msg);
11 | void setNoMore();
12 | }
13 |
14 | interface presenter{
15 | void getBookBillList(String tagName);
16 | void clearFlag();//重新加载数据,清除之前的标志值
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/ICollectContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.bean.BookBean;
4 | import com.rdc.bms.q_comic.mvp.model.vo.CollectVO;
5 |
6 | import java.util.List;
7 |
8 | public interface ICollectContract {
9 | interface View{
10 | void setCollectData(List oldList, List newList);
11 | void onError(String msg);
12 | }
13 |
14 | interface Presenter{
15 | void getCollectData();
16 | void startEdit();
17 | void endEdit();
18 | void deleteBooks();
19 | void selectAll(boolean isSelect);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/IComicContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 |
4 | import com.rdc.bms.q_comic.bean.ChapterBean;
5 | import com.rdc.bms.q_comic.bean.ComicBean;
6 |
7 | import java.util.List;
8 |
9 | public interface IComicContract {
10 | interface View{
11 | void finishedGetComicData(List chapterList);
12 | void updateComic(List newComicList,List oldComicList);
13 | void rvDirScrollTo(int index);
14 | void rvComicScrollTo(int index);
15 | void onError(String msg);
16 | void setChapterTip(String title, String count, String total);
17 | void setDirItemSelected(int index);
18 | ComicBean getReadingComic();
19 | }
20 |
21 | interface Presenter{
22 | void setImageQuality(int quality);
23 | List getDirList();
24 | List getComicList();
25 | int getCurComicListFirstIndex();
26 | void indexRvDirFirst();
27 | void getComic(String comicId,long startChapterId);
28 | void updateComicData(ChapterBean data);
29 | void sendMessage(int what,Object obj);
30 | ChapterBean getChapterById(long chapterId);
31 | void onRecyclerViewScroll(int dy,int firstVisibleItemIndex,int lastVisibleItemIndex);
32 | ChapterBean getReadingChapter();
33 | void saveLastRecordChapter(ChapterBean chapterBean);
34 | void saveReadChapter(ChapterBean chapterBean);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/IHistoryContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.easy_rv_adapter.OnClickViewRvListener;
4 | import com.rdc.bms.q_comic.bean.BookBean;
5 | import com.rdc.bms.q_comic.mvp.model.vo.HistoryVO;
6 |
7 | import java.util.List;
8 |
9 | public interface IHistoryContract {
10 | interface View{
11 | void setHistoryData(List oldList, List newList);
12 | void onError(String msg);
13 | void noMore();
14 | }
15 |
16 | interface Presenter{
17 | void refresh();
18 | void getHistoryData();
19 | void startEdit();
20 | void endEdit();
21 | void deleteBooks();
22 | void selectAll(boolean isSelect);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/IHomeContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.bean.BannerBean;
4 | import com.rdc.bms.q_comic.bean.ItemBean;
5 |
6 | import java.util.List;
7 |
8 | public interface IHomeContract {
9 |
10 | interface Presenter{
11 | void getHomePageData();
12 | }
13 |
14 | interface View{
15 | void showData(List bannerList, List itemBeanList);
16 | void onError(String msg);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/IMainContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import java.util.List;
4 |
5 | public interface IMainContract {
6 |
7 | interface Presenter{
8 | void getKindTitleList();
9 | }
10 |
11 | interface View{
12 | void setKindTitle(List list);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/IMyBookBillContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.bean.BookBillBean;
4 | import com.rdc.bms.q_comic.mvp.model.vo.MyBookBillVO;
5 |
6 | import java.util.List;
7 |
8 | public interface IMyBookBillContract {
9 | interface View{
10 | void setMyBookBillData(List oldList, List newList);
11 | void onError(String msg);
12 | }
13 |
14 | interface Presenter{
15 | void getMyBookBillData();
16 | void startEdit();
17 | void endEdit();
18 | void deleteBooks();
19 | void selectAll(boolean isSelect);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/IRankContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.bean.RankBean;
4 |
5 | import java.util.List;
6 |
7 | public interface IRankContract {
8 | interface View{
9 | void setRankData(List list);
10 | void onError(String msg);
11 | }
12 |
13 | interface Presenter{
14 | void getRankData(int kind);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/ISearchContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.bean.SearchHistoryBean;
4 | import com.rdc.bms.q_comic.bean.HotKeyBean;
5 |
6 | import java.util.List;
7 |
8 | public interface ISearchContract {
9 | interface View{
10 | void setHotKeys(List list);
11 | void setHistoryList(List list);
12 | void onError(String msg);
13 | }
14 |
15 | interface Presenter{
16 | void getHotKeys();
17 | void getHistoryList();
18 | void addHistory(List list, SearchHistoryBean searchHistoryBean);
19 | void saveHistoryList(List list);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/ISearchResultContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.bean.BookBean;
4 |
5 | import java.util.List;
6 |
7 | public interface ISearchResultContract {
8 | interface View{
9 | void onError(String msg);
10 | void noMore();
11 | void setSearchResult(List list);
12 | }
13 |
14 | interface Presenter{
15 | void SearchKey(String key);
16 | void SearchType(String type);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/contract/ITypeContract.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.contract;
2 |
3 | import com.rdc.bms.q_comic.bean.TypeBean;
4 |
5 | import java.util.List;
6 |
7 | public interface ITypeContract {
8 | interface View{
9 | void setTypeList(List list);
10 | void onError(String msg);
11 | }
12 |
13 | interface Presenter{
14 | void getTypeList(int kind);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/ComicModel.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model;
2 |
3 | import com.rdc.bms.q_comic.config.Constant;
4 | import com.rdc.bms.q_comic.mvp.model.dto.ComicInfoDTO;
5 |
6 | import com.rdc.bms.q_comic.mvp.model.service.ComicService;
7 | import com.rdc.bms.q_comic.util.RetrofitUtil;
8 |
9 | import io.reactivex.Observer;
10 | import io.reactivex.android.schedulers.AndroidSchedulers;
11 | import io.reactivex.schedulers.Schedulers;
12 |
13 | public class ComicModel {
14 | public void getComic(Observer observer, String bookId){
15 | RetrofitUtil.bind(Constant.BASE_URL_WEB_JSON).create(ComicService.class)
16 | .getComicInfo(bookId)
17 | .subscribeOn(Schedulers.io())
18 | .unsubscribeOn(Schedulers.io())
19 | .observeOn(AndroidSchedulers.mainThread())
20 | .subscribe(observer);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/FootPrintModel.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model;
2 |
3 | import android.util.Log;
4 |
5 | import com.rdc.bms.q_comic.bean.BookBean;
6 |
7 | import org.litepal.LitePal;
8 |
9 | import java.util.List;
10 |
11 | import io.reactivex.Observable;
12 | import io.reactivex.ObservableEmitter;
13 | import io.reactivex.ObservableOnSubscribe;
14 | import io.reactivex.Observer;
15 | import io.reactivex.android.schedulers.AndroidSchedulers;
16 | import io.reactivex.schedulers.Schedulers;
17 |
18 | public class FootPrintModel {
19 |
20 | public void getMyCollect(Observer> observer){
21 | Observable.create(new ObservableOnSubscribe>() {
22 | @Override
23 | public void subscribe(ObservableEmitter> emitter){
24 | try {
25 | List list = LitePal.where("isCollect = ?","1").find(BookBean.class);
26 | Log.d("FootPrintModel", "subscribe: "+list.size());
27 | emitter.onNext(list);
28 | }catch (Exception e){
29 | e.printStackTrace();
30 | emitter.onError(e);
31 | }finally {
32 | emitter.onComplete();
33 | }
34 | }
35 | }).subscribeOn(Schedulers.io())
36 | .unsubscribeOn(Schedulers.io())
37 | .observeOn(AndroidSchedulers.mainThread())
38 | .subscribe(observer);
39 | }
40 |
41 | public void getHistoryRead(Observer> observer){
42 | Observable.create(new ObservableOnSubscribe>() {
43 | @Override
44 | public void subscribe(ObservableEmitter> emitter){
45 | try {
46 | emitter.onNext(LitePal.where("").find(BookBean.class));
47 | }catch (Exception e){
48 | e.printStackTrace();
49 | emitter.onError(e);
50 | }finally {
51 | emitter.onComplete();
52 | }
53 | }
54 | }).subscribeOn(Schedulers.io())
55 | .unsubscribeOn(Schedulers.io())
56 | .observeOn(AndroidSchedulers.mainThread())
57 | .subscribe(observer);
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/SearchModel.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model;
2 |
3 | import com.rdc.bms.q_comic.bean.SearchHistoryBean;
4 | import com.rdc.bms.q_comic.config.Constant;
5 | import com.rdc.bms.q_comic.mvp.model.dto.HotKeyDTO;
6 | import com.rdc.bms.q_comic.mvp.model.service.SearchService;
7 | import com.rdc.bms.q_comic.util.RetrofitUtil;
8 |
9 | import org.litepal.LitePal;
10 |
11 | import java.util.List;
12 |
13 | import io.reactivex.Observable;
14 | import io.reactivex.ObservableEmitter;
15 | import io.reactivex.ObservableOnSubscribe;
16 | import io.reactivex.Observer;
17 | import io.reactivex.android.schedulers.AndroidSchedulers;
18 | import io.reactivex.schedulers.Schedulers;
19 |
20 | public class SearchModel {
21 | public void getHotKeys(Observer observer){
22 | RetrofitUtil.bind(Constant.BASE_URL_WEB_JSON).create(SearchService.class)
23 | .getHotKeys()
24 | .subscribeOn(Schedulers.io())
25 | .unsubscribeOn(Schedulers.io())
26 | .observeOn(AndroidSchedulers.mainThread())
27 | .subscribe(observer);
28 | }
29 |
30 | public void getSearchHistory(Observer> observer){
31 | Observable.create(new ObservableOnSubscribe>() {
32 | @Override
33 | public void subscribe(ObservableEmitter> emitter) {
34 | List list = LitePal.findAll(SearchHistoryBean.class);
35 | emitter.onNext(list);
36 | }
37 | }).subscribeOn(Schedulers.io())
38 | .unsubscribeOn(Schedulers.io())
39 | .observeOn(AndroidSchedulers.mainThread())
40 | .subscribe(observer);
41 | }
42 |
43 | public void saveHistoryList(final List list){
44 | LitePal.deleteAll(SearchHistoryBean.class);
45 | LitePal.saveAll(list);
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/SearchResultModel.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model;
2 |
3 | import com.rdc.bms.q_comic.config.Constant;
4 | import com.rdc.bms.q_comic.mvp.model.dto.SearchDTO;
5 | import com.rdc.bms.q_comic.mvp.model.service.SearchService;
6 | import com.rdc.bms.q_comic.util.RetrofitUtil;
7 |
8 | import io.reactivex.Observer;
9 | import io.reactivex.android.schedulers.AndroidSchedulers;
10 | import io.reactivex.schedulers.Schedulers;
11 |
12 | public class SearchResultModel {
13 |
14 | public void searchType(Observer observer, final String type, int page){
15 | RetrofitUtil.bind(Constant.BASE_URL_WEB_JSON).create(SearchService.class)
16 | .search(type,"",page)
17 | .subscribeOn(Schedulers.io())
18 | .unsubscribeOn(Schedulers.io())
19 | .observeOn(AndroidSchedulers.mainThread())
20 | .subscribe(observer);
21 | }
22 |
23 | public void searchKey(Observer observer, int page, String key){
24 | RetrofitUtil.bind(Constant.BASE_URL_WEB_JSON).create(SearchService.class)
25 | .search("all",key,page)
26 | .subscribeOn(Schedulers.io())
27 | .unsubscribeOn(Schedulers.io())
28 | .observeOn(AndroidSchedulers.mainThread())
29 | .subscribe(observer);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/db/CollectBean.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.db;
2 |
3 | import org.litepal.annotation.Column;
4 | import org.litepal.crud.LitePalSupport;
5 |
6 | import java.util.Date;
7 |
8 | public class CollectBean extends LitePalSupport {
9 | @Column(unique = true)
10 | private long bookPrimaryKey;
11 | private Date time;
12 |
13 | public long getBookPrimaryKey() {
14 | return bookPrimaryKey;
15 | }
16 |
17 | public void setBookPrimaryKey(long bookPrimaryKey) {
18 | this.bookPrimaryKey = bookPrimaryKey;
19 | }
20 |
21 | public Date getTime() {
22 | return time;
23 | }
24 |
25 | public void setTime(Date time) {
26 | this.time = time;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/db/HistoryBean.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.db;
2 |
3 | import org.litepal.annotation.Column;
4 | import org.litepal.crud.LitePalSupport;
5 |
6 | import java.util.Date;
7 |
8 | public class HistoryBean extends LitePalSupport {
9 | @Column(unique = true)
10 | private long bookPrimaryKey;
11 | private Date time;
12 |
13 | public long getBookPrimaryKey() {
14 | return bookPrimaryKey;
15 | }
16 |
17 | public void setBookPrimaryKey(long bookPrimaryKey) {
18 | this.bookPrimaryKey = bookPrimaryKey;
19 | }
20 |
21 | public Date getTime() {
22 | return time;
23 | }
24 |
25 | public void setTime(Date time) {
26 | this.time = time;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/dto/HomePageDTO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.dto;
2 |
3 | import com.rdc.bms.q_comic.bean.BannerBean;
4 | import com.rdc.bms.q_comic.bean.ItemBean;
5 |
6 | import java.util.List;
7 |
8 | public class HomePageDTO {
9 |
10 | private List bannerList;
11 | private List itemList;
12 |
13 | public HomePageDTO(List bannerList, List itemList) {
14 | this.bannerList = bannerList;
15 | this.itemList = itemList;
16 | }
17 |
18 | public HomePageDTO(){
19 |
20 | }
21 |
22 | public List getBannerList() {
23 | return bannerList;
24 | }
25 |
26 | public void setBannerList(List bannerList) {
27 | this.bannerList = bannerList;
28 | }
29 |
30 | public List getItemList() {
31 | return itemList;
32 | }
33 |
34 | public void setItemList(List itemList) {
35 | this.itemList = itemList;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/dto/PageDTO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.dto;
2 |
3 | public class PageDTO {
4 | private int totalPage;
5 | private int currentPage;
6 |
7 | @Override
8 | public String toString() {
9 | return "PageDTO{" +
10 | "totalPage=" + totalPage +
11 | ", currentPage=" + currentPage +
12 | '}';
13 | }
14 |
15 | public PageDTO(){
16 |
17 | }
18 |
19 | public PageDTO(int totalPage, int currentPage) {
20 | this.totalPage = totalPage;
21 | this.currentPage = currentPage;
22 | }
23 |
24 | /**
25 | * 是否还有更多页
26 | * @return
27 | */
28 | public boolean hasMore(){
29 | return totalPage > currentPage;
30 | }
31 |
32 | public int getTotalPage() {
33 | return totalPage;
34 | }
35 |
36 | public void setTotalPage(int totalPage) {
37 | this.totalPage = totalPage;
38 | }
39 |
40 | public int getCurrentPage() {
41 | return currentPage;
42 | }
43 |
44 | public void setCurrentPage(int currentPage) {
45 | this.currentPage = currentPage;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/dto/RankDTO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.dto;
2 |
3 | import com.rdc.bms.q_comic.bean.RankBean;
4 |
5 | import java.util.List;
6 |
7 | public class RankDTO {
8 |
9 |
10 | List kinkList;
11 | List comicRankList;
12 |
13 | public RankDTO(List kinkList, List comicRankList) {
14 | this.kinkList = kinkList;
15 | this.comicRankList = comicRankList;
16 | }
17 |
18 | public RankDTO() {
19 | }
20 |
21 | public List getKinkList() {
22 | return kinkList;
23 | }
24 |
25 | public void setKinkList(List kinkList) {
26 | this.kinkList = kinkList;
27 | }
28 |
29 | public List getComicRankList() {
30 | return comicRankList;
31 | }
32 |
33 | public void setComicRankList(List comicRankList) {
34 | this.comicRankList = comicRankList;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/service/BookBillService.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.service;
2 |
3 | import com.rdc.bms.q_comic.config.Constant;
4 | import com.rdc.bms.q_comic.mvp.model.dto.BookBillDetailContainerDTO;
5 | import com.rdc.bms.q_comic.mvp.model.dto.BookBillDetailHeadDTO;
6 | import com.rdc.bms.q_comic.mvp.model.dto.BookListDTO;
7 |
8 | import io.reactivex.Observable;
9 | import io.reactivex.Observer;
10 | import retrofit2.http.POST;
11 | import retrofit2.http.Query;
12 |
13 | public interface BookBillService {
14 |
15 | @POST(Constant.BOOK_BILL)
16 | Observable getBookBillList(@Query("page") int page,
17 | @Query("tagname") String tagName,
18 | @Query("client-type") String clientType,
19 | @Query("client-version") String clientVersion,
20 | @Query("localtime") long localTime);
21 |
22 | @POST(Constant.BOOK_BILL_HEAD)
23 | Observable getBookBillDetailHead(@Query("book_id") String bookId);
24 |
25 | @POST(Constant.BOOK_BILL_CONTAINER)
26 | Observable getBookBillContainer(@Query("book_id") String bookId,@Query("page_size") int pageSize);
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/service/ComicService.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.service;
2 |
3 | import com.rdc.bms.q_comic.config.Constant;
4 | import com.rdc.bms.q_comic.mvp.model.dto.ComicDTO;
5 | import com.rdc.bms.q_comic.mvp.model.dto.ComicInfoDTO;
6 |
7 | import io.reactivex.Observable;
8 | import retrofit2.http.GET;
9 | import retrofit2.http.Query;
10 |
11 | public interface ComicService {
12 | @GET(Constant.COMIC_INFO)
13 | Observable getComicInfo(@Query("comic_id") String comicId);
14 | @GET(Constant.COMIC)
15 | Observable getComic(@Query("comic_id") String comicId);
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/service/SearchService.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.service;
2 |
3 | import com.rdc.bms.q_comic.config.Constant;
4 | import com.rdc.bms.q_comic.mvp.model.dto.HotKeyDTO;
5 | import com.rdc.bms.q_comic.mvp.model.dto.SearchDTO;
6 |
7 | import io.reactivex.Observable;
8 | import retrofit2.http.GET;
9 | import retrofit2.http.Query;
10 |
11 | public interface SearchService {
12 | @GET(Constant.SEARCH)
13 | Observable search(@Query("type") String type,
14 | @Query("key") String key,
15 | @Query("page") int page);
16 |
17 | @GET(Constant.HOT_KEYS)
18 | Observable getHotKeys();
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/vo/BookTabDirVO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.vo;
2 |
3 | import com.rdc.bms.q_comic.bean.ChapterBean;
4 |
5 | import java.util.List;
6 |
7 | public class BookTabDirVO {
8 |
9 | private String updateTime;
10 | private List chapterList;
11 |
12 | public String getUpdateTime() {
13 | return updateTime == null ? "" : updateTime;
14 | }
15 |
16 | public void setUpdateTime(String updateTime) {
17 | this.updateTime = updateTime == null ? "" : updateTime;
18 | }
19 |
20 | public List getChapterList() {
21 | return chapterList;
22 | }
23 |
24 | public void setChapterList(List chapterList) {
25 | this.chapterList = chapterList;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/vo/BookTopInfoVO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.vo;
2 |
3 | import java.util.List;
4 |
5 | public class BookTopInfoVO {
6 |
7 | private String name;
8 | private String score;
9 | private String coverUrl;
10 | private String author;
11 | private List mTagList;
12 | private String fireNum;//热度
13 | private boolean isCollected;//是否收藏
14 |
15 | @Override
16 | public String toString() {
17 | return "BookTopInfoVO{" +
18 | "name='" + name + '\'' +
19 | ", score='" + score + '\'' +
20 | ", coverUrl='" + coverUrl + '\'' +
21 | ", author='" + author + '\'' +
22 | ", mTagList=" + mTagList +
23 | ", fireNum='" + fireNum + '\'' +
24 | ", isCollected=" + isCollected +
25 | '}';
26 | }
27 |
28 | public String getScore() {
29 | return score == null ? "" : score;
30 | }
31 |
32 | public void setScore(String score) {
33 | this.score = score == null ? "" : score;
34 | }
35 |
36 | public String getName() {
37 | return name == null ? "" : name;
38 | }
39 |
40 | public void setName(String name) {
41 | this.name = name == null ? "" : name;
42 | }
43 |
44 | public String getCoverUrl() {
45 | return coverUrl == null ? "" : coverUrl;
46 | }
47 |
48 | public void setCoverUrl(String coverUrl) {
49 | this.coverUrl = coverUrl == null ? "" : coverUrl;
50 | }
51 |
52 | public String getAuthor() {
53 | return author == null ? "" : author;
54 | }
55 |
56 | public void setAuthor(String author) {
57 | this.author = author == null ? "" : author;
58 | }
59 |
60 | public List getmTagList() {
61 | return mTagList;
62 | }
63 |
64 | public void setmTagList(List mTagList) {
65 | this.mTagList = mTagList;
66 | }
67 |
68 | public String getFireNum() {
69 | return fireNum == null ? "" : fireNum;
70 | }
71 |
72 | public void setFireNum(String fireNum) {
73 | this.fireNum = fireNum == null ? "" : fireNum;
74 | }
75 |
76 | public boolean isCollected() {
77 | return isCollected;
78 | }
79 |
80 | public void setCollected(boolean collected) {
81 | isCollected = collected;
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/vo/CollectVO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.vo;
2 |
3 | import com.rdc.bms.q_comic.base.BaseBookShelfVO;
4 | import com.rdc.bms.q_comic.bean.BookBean;
5 |
6 | import java.util.Objects;
7 |
8 | public class CollectVO extends BaseBookShelfVO implements Cloneable {
9 | private BookBean bookBean;
10 | public CollectVO(BookBean bookBean) {
11 | this.bookBean = bookBean;
12 | }
13 |
14 |
15 | @Override
16 | public CollectVO clone(){
17 | CollectVO vo = null;
18 | try {
19 | vo = (CollectVO) super.clone();
20 | } catch (CloneNotSupportedException e) {
21 | e.printStackTrace();
22 | }
23 | return vo;
24 | }
25 |
26 | @Override
27 | public boolean equals(Object o) {
28 | if (this == o) return true;
29 | if (o == null || getClass() != o.getClass()) return false;
30 | CollectVO collectVO = (CollectVO) o;
31 | return Objects.equals(bookBean.getBookId(), collectVO.bookBean.getBookId());
32 | }
33 |
34 |
35 | @Override
36 | public int hashCode() {
37 | return Objects.hash(bookBean.getBookId());
38 | }
39 |
40 | public BookBean getBookBean() {
41 | return bookBean;
42 | }
43 |
44 | public void setBookBean(BookBean bookBean) {
45 | this.bookBean = bookBean;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/vo/HistoryVO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.vo;
2 |
3 | import com.rdc.bms.q_comic.base.BaseBookShelfVO;
4 | import com.rdc.bms.q_comic.bean.BookBean;
5 |
6 | import java.util.Objects;
7 |
8 | public class HistoryVO extends BaseBookShelfVO implements Cloneable {
9 | private BookBean bookBean;
10 | public HistoryVO(BookBean bookBean) {
11 | this.bookBean = bookBean;
12 | }
13 |
14 |
15 | @Override
16 | public HistoryVO clone(){
17 | HistoryVO vo = null;
18 | try {
19 | vo = (HistoryVO) super.clone();
20 | } catch (CloneNotSupportedException e) {
21 | e.printStackTrace();
22 | }
23 | return vo;
24 | }
25 |
26 | @Override
27 | public boolean equals(Object o) {
28 | if (this == o) return true;
29 | if (o == null || getClass() != o.getClass()) return false;
30 | HistoryVO historyVO = (HistoryVO) o;
31 | return Objects.equals(bookBean.getBookId(), historyVO.bookBean.getBookId());
32 | }
33 |
34 |
35 | @Override
36 | public int hashCode() {
37 | return Objects.hash(bookBean.getBookId());
38 | }
39 |
40 | public BookBean getBookBean() {
41 | return bookBean;
42 | }
43 |
44 | public void setBookBean(BookBean bookBean) {
45 | this.bookBean = bookBean;
46 | }
47 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/model/vo/MyBookBillVO.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.model.vo;
2 |
3 | import com.rdc.bms.q_comic.base.BaseBookShelfVO;
4 | import com.rdc.bms.q_comic.bean.BookBillBean;
5 |
6 | import java.util.Objects;
7 |
8 | public class MyBookBillVO extends BaseBookShelfVO implements Cloneable {
9 | private BookBillBean bookBillBean;
10 |
11 | public MyBookBillVO(BookBillBean bookBillBean) {
12 | this.bookBillBean = bookBillBean;
13 | }
14 |
15 | @Override
16 | public MyBookBillVO clone(){
17 | MyBookBillVO vo = null;
18 | try {
19 | vo = (MyBookBillVO) super.clone();
20 | } catch (CloneNotSupportedException e) {
21 | e.printStackTrace();
22 | }
23 | return vo;
24 | }
25 |
26 | @Override
27 | public boolean equals(Object o) {
28 | if (this == o) return true;
29 | if (o == null || getClass() != o.getClass()) return false;
30 | MyBookBillVO that = (MyBookBillVO) o;
31 | return Objects.equals(bookBillBean.getBookBillId(), that.bookBillBean.getBookBillId());
32 | }
33 |
34 | @Override
35 | public int hashCode() {
36 | return Objects.hash(bookBillBean.getBookBillId());
37 | }
38 |
39 | public BookBillBean getBookBillBean() {
40 | return bookBillBean;
41 | }
42 |
43 | public void setBookBillBean(BookBillBean bookBillBean) {
44 | this.bookBillBean = bookBillBean;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/presenter/BookBillPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.presenter;
2 |
3 | import android.util.Log;
4 |
5 | import com.rdc.bms.q_comic.base.BasePresenter;
6 | import com.rdc.bms.q_comic.mvp.model.dto.PageDTO;
7 | import com.rdc.bms.q_comic.mvp.contract.IBookListContract;
8 | import com.rdc.bms.q_comic.mvp.model.BookBillModel;
9 | import com.rdc.bms.q_comic.mvp.model.dto.BookListDTO;
10 |
11 | import io.reactivex.Observer;
12 | import io.reactivex.disposables.Disposable;
13 |
14 | public class BookBillPresenter extends BasePresenter
15 | implements IBookListContract.presenter {
16 |
17 | private BookBillModel mModel;
18 |
19 | private PageDTO mPageDTO;
20 |
21 | public BookBillPresenter(){
22 | mModel = new BookBillModel();
23 | mPageDTO = new PageDTO(2,0);
24 | }
25 |
26 | @Override
27 | public void getBookBillList(String tagName) {
28 | Log.d("BookBillPresenter", "getBookBillList: "+mPageDTO.toString());
29 | if (mPageDTO.hasMore()){
30 | mModel.getBookBillList(new Observer() {
31 | @Override
32 | public void onSubscribe(Disposable d) {
33 |
34 | }
35 |
36 | @Override
37 | public void onNext(BookListDTO bookListDTO) {
38 | mPageDTO = bookListDTO.getPageBean();
39 | getMVPView().setBookList(bookListDTO.getBookListBeanList());
40 | }
41 |
42 | @Override
43 | public void onError(Throwable e) {
44 | if(isAttachView()){
45 | getMVPView().showError(e.getMessage());
46 | }
47 | }
48 |
49 | @Override
50 | public void onComplete() {
51 |
52 | }
53 | },tagName, mPageDTO.getCurrentPage()+1);
54 | }else {
55 | if (isAttachView()){
56 | getMVPView().setNoMore();
57 | }
58 | }
59 | }
60 |
61 | @Override
62 | public void clearFlag() {
63 | mPageDTO = new PageDTO(2,0);
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/presenter/HomePresenter.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.presenter;
2 |
3 | import com.rdc.bms.q_comic.base.BasePresenter;
4 | import com.rdc.bms.q_comic.mvp.contract.IHomeContract;
5 | import com.rdc.bms.q_comic.mvp.model.BookModel;
6 | import com.rdc.bms.q_comic.mvp.model.dto.HomePageDTO;
7 |
8 | import io.reactivex.Observer;
9 | import io.reactivex.disposables.Disposable;
10 |
11 | public class HomePresenter extends BasePresenter implements IHomeContract.Presenter {
12 |
13 | private BookModel mBookModel;
14 |
15 | public HomePresenter(){
16 | mBookModel = new BookModel();
17 | }
18 |
19 |
20 | @Override
21 | public void getHomePageData() {
22 | mBookModel.getHomePageData(new Observer() {
23 | @Override
24 | public void onSubscribe(Disposable d) {
25 |
26 | }
27 |
28 | @Override
29 | public void onNext(HomePageDTO homePageDTO) {
30 | if (isAttachView()){
31 | getMVPView().showData(homePageDTO.getBannerList(),homePageDTO.getItemList());
32 | }
33 | }
34 |
35 | @Override
36 | public void onError(Throwable e) {
37 | if (isAttachView()){
38 | getMVPView().onError(e.getMessage());
39 | }
40 | }
41 |
42 | @Override
43 | public void onComplete() {
44 |
45 | }
46 | });
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/presenter/MainPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.presenter;
2 |
3 | import com.rdc.bms.q_comic.base.BasePresenter;
4 | import com.rdc.bms.q_comic.mvp.contract.IMainContract;
5 | import com.rdc.bms.q_comic.mvp.model.BookModel;
6 |
7 | import java.util.List;
8 |
9 | import io.reactivex.Observer;
10 | import io.reactivex.disposables.Disposable;
11 |
12 | public class MainPresenter extends BasePresenter
13 | implements IMainContract.Presenter {
14 |
15 | private BookModel mBookModel;
16 |
17 | public MainPresenter(){
18 | mBookModel = new BookModel();
19 | }
20 |
21 | @Override
22 | public void getKindTitleList() {
23 | mBookModel.getKindTitleList(new Observer>() {
24 | @Override
25 | public void onSubscribe(Disposable d) {
26 |
27 | }
28 |
29 | @Override
30 | public void onNext(List strings) {
31 | if (isAttachView()){
32 | getMVPView().setKindTitle(strings);
33 | }
34 | }
35 |
36 | @Override
37 | public void onError(Throwable e) {
38 |
39 | }
40 |
41 | @Override
42 | public void onComplete() {
43 |
44 | }
45 | });
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/presenter/RankPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.presenter;
2 |
3 | import com.rdc.bms.q_comic.base.BasePresenter;
4 | import com.rdc.bms.q_comic.bean.RankBean;
5 | import com.rdc.bms.q_comic.mvp.contract.IRankContract;
6 | import com.rdc.bms.q_comic.mvp.model.BookModel;
7 |
8 | import java.util.List;
9 |
10 | import io.reactivex.Observer;
11 | import io.reactivex.disposables.Disposable;
12 |
13 | public class RankPresenter extends BasePresenter
14 | implements IRankContract.Presenter {
15 |
16 | private BookModel mBookModel;
17 |
18 | public RankPresenter(){
19 | mBookModel = new BookModel();
20 | }
21 |
22 | @Override
23 | public void getRankData(int kind) {
24 | mBookModel.getRankData(new Observer>() {
25 | @Override
26 | public void onSubscribe(Disposable d) {
27 |
28 | }
29 |
30 | @Override
31 | public void onNext(List rankBeans) {
32 | if (isAttachView()){
33 | getMVPView().setRankData(rankBeans);
34 | }
35 | }
36 |
37 | @Override
38 | public void onError(Throwable e) {
39 | if (isAttachView()){
40 | getMVPView().onError(e.getMessage());
41 | }
42 | }
43 |
44 | @Override
45 | public void onComplete() {
46 |
47 | }
48 | },kind);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/presenter/TypePresenter.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.presenter;
2 |
3 | import com.rdc.bms.q_comic.base.BasePresenter;
4 | import com.rdc.bms.q_comic.bean.TypeBean;
5 | import com.rdc.bms.q_comic.mvp.contract.ITypeContract;
6 | import com.rdc.bms.q_comic.mvp.model.BookModel;
7 |
8 | import java.util.List;
9 |
10 | import io.reactivex.Observer;
11 | import io.reactivex.disposables.Disposable;
12 |
13 | public class TypePresenter extends BasePresenter implements ITypeContract.Presenter {
14 |
15 | private BookModel mBookModel;
16 |
17 | public TypePresenter(){
18 | mBookModel = new BookModel();
19 | }
20 |
21 | @Override
22 | public void getTypeList(int kind) {
23 | mBookModel.getTypeBeanList(new Observer>() {
24 | @Override
25 | public void onSubscribe(Disposable d) {
26 |
27 | }
28 |
29 | @Override
30 | public void onNext(List typeBeans) {
31 | if (isAttachView()){
32 | getMVPView().setTypeList(typeBeans);
33 | }
34 | }
35 |
36 | @Override
37 | public void onError(Throwable e) {
38 | if (isAttachView()){
39 | getMVPView().onError(e.getMessage());
40 | }
41 | }
42 |
43 | @Override
44 | public void onComplete() {
45 |
46 | }
47 | },kind);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/view/activity/LaunchActivity.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.view.activity;
2 |
3 | import android.os.Handler;
4 | import android.support.v7.app.AppCompatActivity;
5 | import android.os.Bundle;
6 |
7 | import com.rdc.bms.q_comic.R;
8 | import com.rdc.bms.q_comic.base.BaseActivity;
9 | import com.rdc.bms.q_comic.base.BasePresenter;
10 | import com.rdc.bms.q_comic.util.StartActUtil;
11 |
12 | public class LaunchActivity extends BaseActivity {
13 |
14 | @Override
15 | protected void onCreate(Bundle savedInstanceState) {
16 | super.onCreate(savedInstanceState);
17 | setContentView(R.layout.activity_launch);
18 | }
19 |
20 | @Override
21 | protected int setLayoutResID() {
22 | return R.layout.activity_launch;
23 | }
24 |
25 | @Override
26 | protected BasePresenter getInstance() {
27 | return null;
28 | }
29 |
30 | @Override
31 | protected void initData(Bundle savedInstanceState) {
32 | new Thread(new Runnable() {
33 | @Override
34 | public void run() {
35 | try {
36 | Thread.sleep(1500);
37 | } catch (InterruptedException e) {
38 | e.printStackTrace();
39 | }finally {
40 | StartActUtil.toMainAct(LaunchActivity.this);
41 | finish();
42 | }
43 | }
44 | }).start();
45 | }
46 |
47 | @Override
48 | protected void initView() {
49 |
50 | }
51 |
52 | @Override
53 | protected void initListener() {
54 |
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/view/activity/SearchResultActivity.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.view.activity;
2 |
3 | import android.content.Intent;
4 | import android.support.v4.app.FragmentTransaction;
5 | import android.os.Bundle;
6 | import android.view.View;
7 | import android.widget.ImageView;
8 | import android.widget.TextView;
9 |
10 | import com.rdc.bms.q_comic.R;
11 | import com.rdc.bms.q_comic.base.BaseActivity;
12 | import com.rdc.bms.q_comic.base.BasePresenter;
13 | import com.rdc.bms.q_comic.mvp.view.fragment.SearchResultFragment;
14 |
15 | import butterknife.BindView;
16 |
17 | public class SearchResultActivity extends BaseActivity {
18 |
19 | @BindView(R.id.iv_back_layout_top)
20 | ImageView mIvBack;
21 | @BindView(R.id.tv_title_layout_top)
22 | TextView mTvTitle;
23 |
24 | private String mTitle;
25 |
26 | @Override
27 | protected void onCreate(Bundle savedInstanceState) {
28 | super.onCreate(savedInstanceState);
29 | }
30 |
31 | @Override
32 | protected int setLayoutResID() {
33 | return R.layout.activity_search_result;
34 | }
35 |
36 | @Override
37 | protected BasePresenter getInstance() {
38 | return null;
39 | }
40 |
41 | @Override
42 | protected void initData(Bundle savedInstanceState) {
43 |
44 | }
45 |
46 | @Override
47 | protected void initView() {
48 | Intent intent = getIntent();
49 | if (intent != null){
50 | mTitle = intent.getStringExtra("title");
51 | SearchResultFragment f = new SearchResultFragment();
52 | f.setData(intent.getStringExtra("type"),
53 | intent.getStringExtra("key"));
54 | FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
55 | transaction.replace(R.id.fl_root_act_type_detail,f);
56 | transaction.commit();
57 | }
58 | }
59 |
60 | @Override
61 | protected void initListener() {
62 | mIvBack.setOnClickListener(new View.OnClickListener() {
63 | @Override
64 | public void onClick(View v) {
65 | onBackPressed();
66 | }
67 | });
68 | mTvTitle.setText(mTitle);
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/mvp/view/fragment/MineFragment.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.mvp.view.fragment;
2 |
3 | import android.os.Bundle;
4 |
5 | import com.rdc.bms.q_comic.R;
6 | import com.rdc.bms.q_comic.base.BaseFragment;
7 | import com.rdc.bms.q_comic.base.BaseLazyFragment;
8 | import com.rdc.bms.q_comic.base.BasePresenter;
9 |
10 | public class MineFragment extends BaseLazyFragment {
11 | @Override
12 | protected BasePresenter getInstance() {
13 | return null;
14 | }
15 |
16 | @Override
17 | protected int setLayoutResourceId() {
18 | return R.layout.fragment_mine;
19 | }
20 |
21 | @Override
22 | protected void initData(Bundle bundle) {
23 |
24 | }
25 |
26 | @Override
27 | protected void initView() {
28 |
29 | }
30 |
31 | @Override
32 | protected void setListener() {
33 |
34 | }
35 |
36 | @Override
37 | protected void lazyLoad() {
38 | if (!isVisible || !isPrepared || isLoaded){
39 | return;
40 | }
41 |
42 | isLoaded = true;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/ActivityCollectorUtil.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util;
2 |
3 | import android.app.Activity;
4 |
5 | import java.util.ArrayList;
6 | import java.util.List;
7 |
8 |
9 | /**
10 | * Created by Lin Yaotian on 2018/4/15.
11 | */
12 |
13 | public class ActivityCollectorUtil {
14 |
15 | private static List activities = new ArrayList<>();
16 |
17 | public static void addActivity(Activity activity){
18 | activities.add(activity);
19 | }
20 |
21 | public static void removeActivity(Activity activity){
22 | activities.remove(activity);
23 | }
24 |
25 | public static void finishAll(){
26 | for (Activity activity : activities) {
27 | if (!activity.isFinishing()){
28 | activity.finish();
29 | }
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/AnimateUtil.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util;
2 |
3 | import android.widget.ImageView;
4 |
5 | import com.rdc.bms.q_comic.R;
6 |
7 | public class AnimateUtil {
8 | /**
9 | * 点击喜欢时的动画
10 | * @param view
11 | * @param isLike 目前的状态(没点击前)
12 | */
13 | public static void likeAnimate(final ImageView view, boolean isLike) {
14 | if (isLike){
15 | //取消喜欢
16 | view.setImageResource(R.drawable.svg_red_like_normal);
17 | }else {
18 | //喜欢
19 | view.setImageResource(R.drawable.svg_red_like_pressed);
20 | }
21 | view.animate().scaleX(1.5f).scaleY(1.5f).withEndAction(new Runnable() {
22 | @Override
23 | public void run() {
24 | view.animate().scaleX(1f).scaleY(1f);
25 | }
26 | });
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/GlideUtil.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util;
2 |
3 | import android.content.Context;
4 | import android.widget.ImageView;
5 |
6 | public class GlideUtil {
7 |
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/RetrofitUtil.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util;
2 |
3 | import com.google.gson.Gson;
4 |
5 | import java.util.concurrent.TimeUnit;
6 |
7 | import okhttp3.OkHttpClient;
8 | import retrofit2.Retrofit;
9 | import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
10 | import retrofit2.converter.gson.GsonConverterFactory;
11 |
12 | /**
13 | * Created by yyj on 2018/07/31. email: 2209011667@qq.com
14 | */
15 |
16 | public class RetrofitUtil {
17 | public static Retrofit bind(String BASE_URL) {
18 |
19 | Retrofit retrofit = new Retrofit.Builder()
20 | .baseUrl(BASE_URL)
21 | .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
22 | .addConverterFactory(GsonConverterFactory.create())
23 | .client(getClient())
24 | .build();
25 |
26 | return retrofit;
27 | }
28 |
29 | public static Retrofit bind(String BASE_URL, Gson gson) {
30 |
31 | Retrofit retrofit = new Retrofit.Builder()
32 | .baseUrl(BASE_URL)
33 | .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
34 | .addConverterFactory(GsonConverterFactory.create(gson))
35 | .client(getClient())
36 | .build();
37 |
38 | return retrofit;
39 | }
40 |
41 | private static OkHttpClient getClient() {
42 | OkHttpClient.Builder builder = new OkHttpClient().newBuilder()
43 | .connectTimeout(10, TimeUnit.SECONDS)//设置超时时间
44 | .readTimeout(10, TimeUnit.SECONDS)//设置读取超时时间
45 | .writeTimeout(10, TimeUnit.SECONDS);//设置写入超时时间
46 | OkHttpClient mOkHttpClient = builder.build();
47 | return mOkHttpClient;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/diffutil/BookBillDiffUtil.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util.diffutil;
2 |
3 | import android.support.annotation.Nullable;
4 | import android.support.v7.util.DiffUtil;
5 |
6 | import com.rdc.bms.q_comic.bean.BookBillBean;
7 | import com.rdc.bms.q_comic.bean.rv_cell.MyBookBillCell;
8 | import com.rdc.bms.q_comic.mvp.model.vo.MyBookBillVO;
9 |
10 | import java.util.List;
11 |
12 | public class BookBillDiffUtil extends DiffUtil.Callback {
13 | private List mOldDatas,mNewDatas;
14 |
15 | public BookBillDiffUtil(List mOldDatas, List mNewDatas) {
16 | this.mOldDatas = mOldDatas;
17 | this.mNewDatas = mNewDatas;
18 | }
19 |
20 | @Override
21 | public int getOldListSize() {
22 | return mOldDatas == null?0:mOldDatas.size();
23 | }
24 |
25 | @Override
26 | public int getNewListSize() {
27 | return mNewDatas==null?0:mNewDatas.size();
28 | }
29 |
30 | @Override
31 | public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
32 | return mNewDatas.get(newItemPosition).getBookBillBean().getBookBillId()
33 | .equals(mOldDatas.get(oldItemPosition).getBookBillBean().getBookBillId());
34 | }
35 |
36 | @Override
37 | public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
38 | MyBookBillVO oldItem = mOldDatas.get(oldItemPosition);
39 | MyBookBillVO newItem = mNewDatas.get(newItemPosition);
40 | return oldItem.isSelect() == newItem.isSelect()
41 | && oldItem.isStartSelect() == newItem.isStartSelect()
42 | && oldItem.getBookBillBean().getNum() == newItem.getBookBillBean().getNum()
43 | && oldItem.getBookBillBean().getTitle().equals(newItem.getBookBillBean().getTitle())
44 | && newItem.getBookBillBean().getBookIdList().containsAll(oldItem.getBookBillBean().getBookIdList());
45 | }
46 |
47 | @Nullable
48 | @Override
49 | public Object getChangePayload(int oldItemPosition, int newItemPosition) {
50 | return super.getChangePayload(oldItemPosition, newItemPosition);
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/diffutil/ChapterDiffUtil.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util.diffutil;
2 |
3 | import android.support.annotation.Nullable;
4 | import android.support.v7.util.DiffUtil;
5 |
6 | import com.rdc.bms.q_comic.bean.ChapterBean;
7 | import com.rdc.bms.q_comic.bean.ComicBean;
8 |
9 | import java.util.List;
10 |
11 | public class ChapterDiffUtil extends DiffUtil.Callback{
12 |
13 | private List mOldDatas,mNewDatas;
14 |
15 | public ChapterDiffUtil(List mOldDatas, List mNewDatas) {
16 | this.mOldDatas = mOldDatas;
17 | this.mNewDatas = mNewDatas;
18 | }
19 |
20 | @Override
21 | public int getOldListSize() {
22 | return mOldDatas == null?0:mOldDatas.size();
23 | }
24 |
25 | @Override
26 | public int getNewListSize() {
27 | return mNewDatas==null?0:mNewDatas.size();
28 | }
29 |
30 | @Override
31 | public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
32 | return mNewDatas.get(newItemPosition).getChapterId()
33 | == (mOldDatas.get(oldItemPosition).getChapterId());
34 | }
35 |
36 | @Override
37 | public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
38 | return mNewDatas.get(newItemPosition).isRead() ==
39 | mOldDatas.get(oldItemPosition).isRead();
40 | }
41 |
42 | @Nullable
43 | @Override
44 | public Object getChangePayload(int oldItemPosition, int newItemPosition) {
45 | return super.getChangePayload(oldItemPosition, newItemPosition);
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/diffutil/CollectDiffUtil.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util.diffutil;
2 |
3 | import android.support.annotation.Nullable;
4 | import android.support.v7.util.DiffUtil;
5 |
6 | import com.rdc.bms.q_comic.bean.BookBean;
7 | import com.rdc.bms.q_comic.mvp.model.vo.CollectVO;
8 |
9 | import java.util.List;
10 |
11 | public class CollectDiffUtil extends DiffUtil.Callback {
12 | private List mOldDatas,mNewDatas;
13 |
14 | public CollectDiffUtil(List mOldDatas, List mNewDatas) {
15 | this.mOldDatas = mOldDatas;
16 | this.mNewDatas = mNewDatas;
17 | }
18 |
19 | @Override
20 | public int getOldListSize() {
21 | return mOldDatas == null?0:mOldDatas.size();
22 | }
23 |
24 | @Override
25 | public int getNewListSize() {
26 | return mNewDatas==null?0:mNewDatas.size();
27 | }
28 |
29 | @Override
30 | public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
31 | return mNewDatas.get(newItemPosition).getBookBean().getBookId()
32 | .equals(mOldDatas.get(oldItemPosition).getBookBean().getBookId());
33 | }
34 |
35 | @Override
36 | public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
37 | CollectVO newItem = mNewDatas.get(newItemPosition);
38 | CollectVO oldItem = mOldDatas.get(oldItemPosition);
39 | return oldItem.isStartSelect() == newItem.isStartSelect()
40 | && oldItem.isSelect() == newItem.isSelect()
41 | && newItem.getBookBean().getLastRecordChapterId() == (oldItem.getBookBean().getLastRecordChapterId())
42 | && newItem.getBookBean().isUpdate() == oldItem.getBookBean().isUpdate()
43 | && newItem.getBookBean().getRecentChapter().equals((oldItem.getBookBean().getRecentChapter()));
44 | }
45 |
46 | @Nullable
47 | @Override
48 | public Object getChangePayload(int oldItemPosition, int newItemPosition) {
49 | return super.getChangePayload(oldItemPosition, newItemPosition);
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/diffutil/ComicDiffUtil.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util.diffutil;
2 |
3 | import android.support.annotation.Nullable;
4 | import android.support.v7.util.DiffUtil;
5 |
6 | import com.rdc.bms.q_comic.bean.ComicBean;
7 |
8 | import java.util.List;
9 |
10 | public class ComicDiffUtil extends DiffUtil.Callback{
11 |
12 | private List mOldDatas,mNewDatas;
13 |
14 | public ComicDiffUtil(List mOldDatas, List mNewDatas) {
15 | this.mOldDatas = mOldDatas;
16 | this.mNewDatas = mNewDatas;
17 | }
18 |
19 | @Override
20 | public int getOldListSize() {
21 | return mOldDatas == null?0:mOldDatas.size();
22 | }
23 |
24 | @Override
25 | public int getNewListSize() {
26 | return mNewDatas==null?0:mNewDatas.size();
27 | }
28 |
29 | @Override
30 | public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
31 | return mNewDatas.get(newItemPosition).getComicId()
32 | .equals(mOldDatas.get(oldItemPosition).getComicId());
33 | }
34 |
35 | @Override
36 | public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
37 | return mNewDatas.get(newItemPosition).getImageUrl()
38 | .equals(mOldDatas.get(oldItemPosition).getImageUrl());
39 | }
40 |
41 | @Nullable
42 | @Override
43 | public Object getChangePayload(int oldItemPosition, int newItemPosition) {
44 | return super.getChangePayload(oldItemPosition, newItemPosition);
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/diffutil/HistoryDiffUtil.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util.diffutil;
2 |
3 | import android.support.annotation.Nullable;
4 | import android.support.v7.util.DiffUtil;
5 |
6 | import com.rdc.bms.q_comic.mvp.model.vo.CollectVO;
7 | import com.rdc.bms.q_comic.mvp.model.vo.HistoryVO;
8 |
9 | import java.util.List;
10 |
11 | public class HistoryDiffUtil extends DiffUtil.Callback {
12 | private List mOldDatas,mNewDatas;
13 |
14 | public HistoryDiffUtil(List mOldDatas, List mNewDatas) {
15 | this.mOldDatas = mOldDatas;
16 | this.mNewDatas = mNewDatas;
17 | }
18 |
19 | @Override
20 | public int getOldListSize() {
21 | return mOldDatas == null?0:mOldDatas.size();
22 | }
23 |
24 | @Override
25 | public int getNewListSize() {
26 | return mNewDatas==null?0:mNewDatas.size();
27 | }
28 |
29 | @Override
30 | public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
31 | return mNewDatas.get(newItemPosition).getBookBean().getBookId()
32 | .equals(mOldDatas.get(oldItemPosition).getBookBean().getBookId());
33 | }
34 |
35 | @Override
36 | public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
37 | HistoryVO newItem = mNewDatas.get(newItemPosition);
38 | HistoryVO oldItem = mOldDatas.get(oldItemPosition);
39 | return oldItem.isStartSelect() == newItem.isStartSelect()
40 | && oldItem.isSelect() == newItem.isSelect()
41 | && newItem.getBookBean().getLastRecordChapterId() == (oldItem.getBookBean().getLastRecordChapterId())
42 | && newItem.getBookBean().getRecentChapter().equals((oldItem.getBookBean().getRecentChapter()));
43 | }
44 |
45 | @Nullable
46 | @Override
47 | public Object getChangePayload(int oldItemPosition, int newItemPosition) {
48 | return super.getChangePayload(oldItemPosition, newItemPosition);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/util/fileprovider.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.util;
2 |
3 | import android.support.v4.content.FileProvider;
4 |
5 | public class fileprovider extends FileProvider {
6 | }
7 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/widget/NoScrollViewPager.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.widget;
2 |
3 | import android.content.Context;
4 | import android.support.annotation.NonNull;
5 | import android.support.annotation.Nullable;
6 | import android.support.v4.view.ViewPager;
7 | import android.util.AttributeSet;
8 | import android.view.MotionEvent;
9 |
10 | public class NoScrollViewPager extends ViewPager {
11 | private boolean isScroll;
12 |
13 | public NoScrollViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
14 | super(context, attrs);
15 | }
16 |
17 | public NoScrollViewPager(Context context) {
18 | super(context);
19 | }
20 | /**
21 | * 1.dispatchTouchEvent一般情况不做处理
22 | *,如果修改了默认的返回值,子孩子都无法收到事件
23 | */
24 | @Override
25 | public boolean dispatchTouchEvent(MotionEvent ev) {
26 | return super.dispatchTouchEvent(ev); // return true;不行
27 | }
28 | /**
29 | * 是否拦截
30 | * 拦截:会走到自己的onTouchEvent方法里面来
31 | * 不拦截:事件传递给子孩子
32 | */
33 | @Override
34 | public boolean onInterceptTouchEvent(MotionEvent ev) {
35 | // return false;//可行,不拦截事件,
36 | // return true;//不行,孩子无法处理事件
37 | //return super.onInterceptTouchEvent(ev);//不行,会有细微移动
38 | if (isScroll){
39 | return super.onInterceptTouchEvent(ev);
40 | }else{
41 | return false;
42 | }
43 | }
44 |
45 | /**
46 | * 是否消费事件
47 | * 消费:事件就结束
48 | * 不消费:往父控件传
49 | */
50 | @Override
51 | public boolean onTouchEvent(MotionEvent ev) {
52 | //return false;// 可行,不消费,传给父控件
53 | //return true;// 可行,消费,拦截事件
54 | //super.onTouchEvent(ev); //不行,
55 | //虽然onInterceptTouchEvent中拦截了,
56 | //但是如果viewpage里面子控件不是viewgroup,还是会调用这个方法.
57 | if (isScroll){
58 | return super.onTouchEvent(ev);
59 | }else {
60 | return true;// 可行,消费,拦截事件
61 | }
62 | }
63 | public void setScroll(boolean scroll) {
64 | isScroll = scroll;
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/app/src/main/java/com/rdc/bms/q_comic/widget/ViewPagerForScrollView.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic.widget;
2 |
3 | import android.content.Context;
4 | import android.support.v4.view.ViewPager;
5 | import android.util.AttributeSet;
6 | import android.view.View;
7 |
8 | public class ViewPagerForScrollView extends ViewPager {
9 | public ViewPagerForScrollView(Context context) {
10 | super(context);
11 | }
12 |
13 | public ViewPagerForScrollView(Context context, AttributeSet attrs) {
14 | super(context, attrs);
15 | }
16 |
17 | @Override
18 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
19 |
20 | int height = 0;
21 | for (int i = 0; i < getChildCount(); i++) {
22 | View child = getChildAt(i);
23 | child.measure(widthMeasureSpec, View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
24 | int h = child.getMeasuredHeight();
25 | if (h > height)
26 | height = h;
27 | }
28 |
29 | heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);
30 |
31 | super.onMeasure(widthMeasureSpec, heightMeasureSpec);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/res/color/color_state_menu_navi.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/bg_hot_key_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/bg_hot_key_light_green.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/bg_hot_key_orange.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/bg_hot_key_purple.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/bg_support_statistics_green.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/bg_support_statistics_orange.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_ach_award.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_ach_award.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_ach_gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_ach_gift.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_ach_gradle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_ach_gradle.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_ach_month.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_ach_month.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_ach_recommend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_ach_recommend.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_ach_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_ach_share.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_brightness_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_brightness_b.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_catalog_ic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_catalog_ic.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_catalog_order.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_catalog_order.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_catalog_reverse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_catalog_reverse.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_definition_high.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_definition_high.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_definition_low.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_definition_low.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_definition_middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_definition_middle.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_set.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_start.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_read_stop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/ic_read_stop.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/icon_chapter_read.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/icon_chapter_read.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/pic_load_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/pic_load_error.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_arrow_bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_arrow_bottom.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_arrow_left.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_arrow_right.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_arrow_top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_arrow_top.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_author_dk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_author_dk.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_author_xr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_author_xr.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_blue_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_blue_share.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_clock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_clock.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_delete.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_error.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_fire_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_fire_grey.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_fire_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_fire_red.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_fire_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_fire_white.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_money_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_money_grey.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_money_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_money_red.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_money_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_money_white.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_orange_comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_orange_comment.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_red_book_count.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_red_book_count.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_red_like_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_red_like_normal.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_red_like_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_red_like_pressed.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_red_nav_bar_love.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_red_nav_bar_love.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_red_normal_like.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_red_normal_like.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_red_point.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_red_point.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_red_pressed_like.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_red_pressed_like.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_red_select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_red_select.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_red_work.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_red_work.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_tab_bar_find.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_tab_bar_find.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_tab_bar_find_hl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_tab_bar_find_hl.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_tab_bar_homepage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_tab_bar_homepage.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_tab_bar_kind.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_tab_bar_kind.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_tab_bar_kind_hl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_tab_bar_kind_hl.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_tab_bar_main_hl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_tab_bar_main_hl.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_tab_bar_mine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_tab_bar_mine.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_tab_bar_mine_hl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_tab_bar_mine_hl.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_ticket_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_ticket_grey.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_ticket_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_ticket_red.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_ticket_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_ticket_white.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_white_nav_bar_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_white_nav_bar_back.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_white_nav_bar_love.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_white_nav_bar_love.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_white_normal_like.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_white_normal_like.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_white_pressed_like.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_white_pressed_like.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/svg_white_select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable-xhdpi/svg_white_select.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_black_transparent.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_book_bill_detail_head.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_btn_chapter.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_btn_offline_cache.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_btn_start_read.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_edittext_search.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_hot_key_dark_green.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_hot_key_red.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_oval_stroke.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_support_statistics_red.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_tag_black.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/black_oval_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reader_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/drawable/ic_reader_error.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_tab_bookshelf.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_tab_home.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_tab_kind.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_tab_mine.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_launch.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
24 |
25 |
36 |
37 |
52 |
53 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
18 |
19 |
20 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_search_result.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_banner.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_book_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
29 |
30 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_chapter_num.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
23 |
24 |
32 |
33 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_comic.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
15 |
16 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_dir.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
17 |
18 |
25 |
34 |
35 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_statistic.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
25 |
26 |
40 |
41 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/cell_type.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
15 |
16 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_mine.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_tab_detail.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_type.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
15 |
16 |
17 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_type_detail.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
14 |
15 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/hotkey_tagflowlayout.xml:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_check.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
17 |
18 |
26 |
27 |
31 |
32 |
40 |
41 |
42 |
43 |
44 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_comic_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
29 |
30 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_select.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_top.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
23 |
24 |
36 |
37 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
26 |
27 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/tag_tagflowlayout.xml:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/main_bottom_menus.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-hdpi/icon_new.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/icon_ranking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-hdpi/icon_ranking.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/point_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-hdpi/point_0.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/point_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-hdpi/point_1.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/svg_red_nav_bar_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-hdpi/svg_red_nav_bar_back.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/ic_logo.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/pic_main_boy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/pic_main_boy.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/pic_main_girl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/pic_main_girl.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/svg_pic_list_dream.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/svg_pic_list_dream.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/svg_pic_list_fast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/svg_pic_list_fast.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/svg_pic_list_fire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/svg_pic_list_fire.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/svg_pic_list_jd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/svg_pic_list_jd.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/svg_pic_list_love.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/svg_pic_list_love.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/svg_pic_list_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/svg_pic_list_new.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/svg_red_nav_bar_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/svg_red_nav_bar_search.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/svg_white_nav_bar_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LinYaoTian/Q_Comic/eff2d33aec4e8025ca3f84eb7de8b24bbadcdba2/app/src/main/res/mipmap-mdpi/svg_white_nav_bar_search.png
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @color/colorRed
4 | @color/colorRed
5 | @color/colorRed
6 |
7 | #ffffff
8 | #f3bd7e
9 | #F36653
10 | #7BC730
11 | #00CEBB
12 | #FFA742
13 | #5DBDFF
14 | #A1A8FF
15 | #ff3399
16 | #00bbff
17 | #979797
18 | #f6c90d
19 | #a7734b
20 | #000000
21 | #787878
22 |
23 | #00000000
24 |
25 | #eeeeff
26 | #fc7365
27 | #ff9f71
28 | #ffc477
29 | #f5f5f5
30 | #55000000
31 | #96000000
32 | #c7f36653
33 | #c7000000
34 | #d4ffffff
35 |
36 | #FC6352
37 | #FEE0DD
38 | #0AE1B5
39 | #CCF9F0
40 | #FF9116
41 | #FDF3D5
42 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 15sp
4 | 18sp
5 | 22sp
6 | 13sp
7 | 11sp
8 |
9 | 75dp
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Q漫
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 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
14 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/test/java/com/rdc/bms/q_comic/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.q_comic;
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() {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 |
5 | repositories {
6 | google()
7 | jcenter()
8 | }
9 | dependencies {
10 | classpath 'com.android.tools.build:gradle:3.2.1'
11 |
12 |
13 | // NOTE: Do not place your application dependencies here; they belong
14 | // in the individual module build.gradle files
15 | }
16 | }
17 |
18 | allprojects {
19 | repositories {
20 | google()
21 | jcenter()
22 | maven { url 'https://jitpack.io' }
23 | }
24 | }
25 |
26 | task clean(type: Delete) {
27 | delete rootProject.buildDir
28 | }
29 |
--------------------------------------------------------------------------------
/easy_rv_adapter/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/easy_rv_adapter/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 27
5 |
6 |
7 |
8 | defaultConfig {
9 | minSdkVersion 21
10 | targetSdkVersion 27
11 | versionCode 1
12 | versionName "1.0"
13 |
14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
15 |
16 | }
17 |
18 | buildTypes {
19 | release {
20 | minifyEnabled false
21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
22 | }
23 | }
24 |
25 | }
26 |
27 | dependencies {
28 | implementation fileTree(dir: 'libs', include: ['*.jar'])
29 | implementation 'com.android.support:recyclerview-v7:27.1.1'
30 | implementation 'com.android.support:appcompat-v7:27.1.1'
31 | implementation 'com.android.support.constraint:constraint-layout:1.1.3'
32 | implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
33 | testImplementation 'junit:junit:4.12'
34 | androidTestImplementation 'com.android.support.test:runner:1.0.2'
35 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
36 | }
37 |
--------------------------------------------------------------------------------
/easy_rv_adapter/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/easy_rv_adapter/src/androidTest/java/com/rdc/bms/easy_rv_adapter/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.easy_rv_adapter;
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 | * Instrumented 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() {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.rdc.bms.easy_rv_adapter.test", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/easy_rv_adapter/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/easy_rv_adapter/src/main/java/com/rdc/bms/easy_rv_adapter/OnClickViewRvListener.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.easy_rv_adapter;
2 |
3 | import android.view.View;
4 |
5 | import com.rdc.bms.easy_rv_adapter.base.BaseRvViewHolder;
6 |
7 | public interface OnClickViewRvListener {
8 | /**
9 | * RecyclerView中点击了Item中的View
10 | * @param view
11 | * @param view
12 | */
13 | void onClick(View view,int position);
14 |
15 | void onClickItem(C data,int position);
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/easy_rv_adapter/src/main/java/com/rdc/bms/easy_rv_adapter/Utils.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.easy_rv_adapter;
2 |
3 | import android.content.Context;
4 |
5 | public class Utils {
6 | /**
7 | * dp 转换 px
8 | * @param context
9 | * @param dip
10 | * @return
11 | */
12 | public static int dpToPx(Context context, float dip) {
13 | final float SCALE = context.getResources().getDisplayMetrics().density;
14 | float valueDips = dip;
15 | int valuePixels = (int) (valueDips * SCALE + 0.5f);
16 | return valuePixels;
17 | }
18 |
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/easy_rv_adapter/src/main/java/com/rdc/bms/easy_rv_adapter/base/BaseRvCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.easy_rv_adapter.base;
2 |
3 |
4 | import android.content.Context;
5 | import android.support.v7.widget.RecyclerView;
6 | import android.view.LayoutInflater;
7 | import android.view.ViewGroup;
8 |
9 | import com.rdc.bms.easy_rv_adapter.OnClickViewRvListener;
10 |
11 | public abstract class BaseRvCell implements Cell {
12 |
13 | public T mData;
14 |
15 | public OnClickViewRvListener mListener;
16 |
17 | public final BaseRvViewHolder createSimpleHolder(ViewGroup parent,int layoutResId){
18 | return new BaseRvViewHolder(LayoutInflater.from(parent.getContext())
19 | .inflate(layoutResId,parent,false));
20 | }
21 |
22 | @Override
23 | public long getItemId(int position) {
24 | return RecyclerView.NO_ID;
25 | }
26 |
27 | /**
28 | * 添加监听事件
29 | * @param mListener
30 | */
31 | public void setListener(OnClickViewRvListener mListener) {
32 | this.mListener = mListener;
33 | }
34 |
35 | public BaseRvCell(T t){
36 | mData = t;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/easy_rv_adapter/src/main/java/com/rdc/bms/easy_rv_adapter/base/BaseRvStateCell.java:
--------------------------------------------------------------------------------
1 | package com.rdc.bms.easy_rv_adapter.base;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.LinearLayout;
8 |
9 | import com.rdc.bms.easy_rv_adapter.R;
10 |
11 | /**
12 | * 用于存放特殊的ItemCell,
13 | * 例如HeaderView,FooterView
14 | */
15 | public abstract class BaseRvStateCell extends BaseRvCell