├── .gitignore ├── .idea ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── dictionaries │ └── lixiuhao.xml ├── gradle.xml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── google-services.json ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── cn │ │ └── xhl │ │ └── client │ │ └── manga │ │ └── ExampleInstrumentedTest.java │ ├── debug │ └── google-services.json │ ├── main │ ├── AndroidManifest.xml │ ├── arrow_left-web.png │ ├── arrow_right-web.png │ ├── broom-web.png │ ├── comment-web.png │ ├── edit-web.png │ ├── favorite-web.png │ ├── filter-web.png │ ├── history-web.png │ ├── ic_setting_pink-web.png │ ├── icon_book-web.png │ ├── icon_brightness-web.png │ ├── icon_brightness2-web.png │ ├── icon_check-web.png │ ├── icon_check_normal-web.png │ ├── icon_folder-web.png │ ├── icon_lock-web.png │ ├── icon_plane-web.png │ ├── icon_setting-web.png │ ├── java │ │ └── cn │ │ │ └── xhl │ │ │ └── client │ │ │ └── manga │ │ │ ├── MyActivityManager.java │ │ │ ├── MyApplication.java │ │ │ ├── MyFragmentManager.java │ │ │ ├── UserInfo.java │ │ │ ├── adapter │ │ │ ├── HomePagerAdapter.java │ │ │ ├── MainPagerAdapter.java │ │ │ ├── gallery │ │ │ │ ├── CommentAdapter.java │ │ │ │ ├── ConcreteMangaPagerAdapter.java │ │ │ │ ├── FavoriteFolderAdapter.java │ │ │ │ ├── FavoriteFolderDialogAdapter.java │ │ │ │ └── SummaryAdapter.java │ │ │ └── main │ │ │ │ ├── CategoryAdapter.java │ │ │ │ ├── FilterAdapter.java │ │ │ │ ├── GalleryListAdapter.java │ │ │ │ ├── MineAdapter.java │ │ │ │ └── SettingAdapter.java │ │ │ ├── base │ │ │ ├── BaseActivity.java │ │ │ ├── BaseFragment.java │ │ │ ├── BaseObserver.java │ │ │ ├── BasePresenter.java │ │ │ └── BaseView.java │ │ │ ├── config │ │ │ ├── HttpRespCode.java │ │ │ └── IConstants.java │ │ │ ├── contract │ │ │ ├── SplashContract.java │ │ │ ├── auth │ │ │ │ ├── LoginContract.java │ │ │ │ ├── RegisterContract.java │ │ │ │ └── ResetPasswdContract.java │ │ │ ├── gallery │ │ │ │ ├── BrowseImageContract.java │ │ │ │ ├── CommentContract.java │ │ │ │ ├── ConcreteMangaContract.java │ │ │ │ ├── FavoriteContract.java │ │ │ │ └── SummaryContract.java │ │ │ └── main │ │ │ │ ├── CategoryContract.java │ │ │ │ ├── HomeContract.java │ │ │ │ ├── LatestContract.java │ │ │ │ ├── MineContract.java │ │ │ │ └── SettingContract.java │ │ │ ├── custom │ │ │ ├── CommentItemDecoration.java │ │ │ ├── CountDownButton.java │ │ │ ├── CustomDialog.java │ │ │ ├── DefaultLoading.java │ │ │ ├── DownloadProgressbar.java │ │ │ ├── EmailAutoCompleteTextView.java │ │ │ ├── EmptyView.java │ │ │ ├── FavoriteFolderItemDecoration.java │ │ │ ├── MineItemDecoration.java │ │ │ ├── QMUILoadingView.java │ │ │ ├── QMUITipDialog.java │ │ │ ├── SettingItemDecoration.java │ │ │ ├── SlipBackLayout.java │ │ │ ├── StickyItemDecoration.kt │ │ │ ├── TextImageSpan.java │ │ │ ├── VerticalViewPager.java │ │ │ ├── behavior │ │ │ │ └── OppositeBehavior.java │ │ │ └── zoomable │ │ │ │ ├── AbstractAnimatedZoomableController.java │ │ │ │ ├── AnimatedZoomableController.java │ │ │ │ ├── AnimatedZoomableControllerSupport.java │ │ │ │ ├── DefaultZoomableController.java │ │ │ │ ├── DoubleTapGestureListener.java │ │ │ │ ├── GestureListenerWrapper.java │ │ │ │ ├── MultiGestureListener.java │ │ │ │ ├── ZoomableController.java │ │ │ │ ├── ZoomableDraweeView.java │ │ │ │ ├── ZoomableDraweeViewSupport.java │ │ │ │ └── gestures │ │ │ │ ├── MultiPointerGestureDetector.java │ │ │ │ └── TransformGestureDetector.java │ │ │ ├── listener │ │ │ └── GalleryListScrollListener.java │ │ │ ├── model │ │ │ ├── api │ │ │ │ ├── ApiComics.java │ │ │ │ ├── ApiEh.java │ │ │ │ ├── ApiGithub.java │ │ │ │ ├── ApiUser.java │ │ │ │ └── RetrofitFactory.java │ │ │ └── bean │ │ │ │ ├── request │ │ │ │ ├── BaseRequest.java │ │ │ │ ├── auth │ │ │ │ │ └── Req_Login.java │ │ │ │ ├── gallery │ │ │ │ │ ├── Req_BrowseImage.java │ │ │ │ │ ├── Req_Comment.java │ │ │ │ │ ├── Req_CommentList.java │ │ │ │ │ ├── Req_DeleteComment.java │ │ │ │ │ ├── Req_DeleteFolder.java │ │ │ │ │ ├── Req_EncryptFolder.java │ │ │ │ │ ├── Req_FavoriteFolder.java │ │ │ │ │ ├── Req_FavoriteFolderOther.java │ │ │ │ │ ├── Req_GalleryList.java │ │ │ │ │ ├── Req_RenameFolder.java │ │ │ │ │ ├── Req_Subscribe.java │ │ │ │ │ └── Req_Viewed.java │ │ │ │ └── user │ │ │ │ │ ├── Req_Attention.java │ │ │ │ │ ├── Req_CheckUpdate.java │ │ │ │ │ ├── Req_FollowExist.java │ │ │ │ │ ├── Req_ModifyProfileHeader.java │ │ │ │ │ └── Req_ModifyUsername.java │ │ │ │ └── response │ │ │ │ ├── BaseResponse.java │ │ │ │ ├── auth │ │ │ │ ├── Res_GetVerify.java │ │ │ │ ├── Res_Login.java │ │ │ │ ├── Res_RefreshToken.java │ │ │ │ ├── Res_Register.java │ │ │ │ └── Res_ResetPassword.java │ │ │ │ ├── gallery │ │ │ │ ├── Res_BrowseImage.java │ │ │ │ ├── Res_Comment.java │ │ │ │ ├── Res_CommentList.java │ │ │ │ ├── Res_DeleteComment.java │ │ │ │ ├── Res_FavoriteFolder.java │ │ │ │ ├── Res_Folder.java │ │ │ │ ├── Res_GalleryList.java │ │ │ │ ├── Res_Subscribe.java │ │ │ │ └── Res_Viewed.java │ │ │ │ └── user │ │ │ │ ├── Res_CheckUpdate.java │ │ │ │ └── Res_FollowExist.java │ │ │ ├── presenter │ │ │ ├── SplashPresenter.java │ │ │ ├── auth │ │ │ │ ├── LoginPresenter.java │ │ │ │ ├── RegisterPresenter.java │ │ │ │ └── ResetPasswdPresenter.java │ │ │ ├── gallery │ │ │ │ ├── BrowseImagePresenter.java │ │ │ │ ├── CommentPresenter.java │ │ │ │ ├── ConcreteMangaPresenter.java │ │ │ │ ├── FavoritePresenter.java │ │ │ │ └── SummaryPresenter.java │ │ │ └── main │ │ │ │ ├── CategoryPresenter.java │ │ │ │ ├── HomePresenter.java │ │ │ │ ├── LatestPresenter.java │ │ │ │ ├── MinePresenter.java │ │ │ │ └── SettingPresenter.kt │ │ │ ├── service │ │ │ ├── ApkDownloadService.kt │ │ │ └── ComicsDownloadService.java │ │ │ ├── utils │ │ │ ├── ActivityUtil.java │ │ │ ├── AnalyticsUtil.java │ │ │ ├── AppUtil.java │ │ │ ├── BCrypt.java │ │ │ ├── ControlUtil.java │ │ │ ├── CrashUtil.java │ │ │ ├── DateUtil.java │ │ │ ├── DeviceUtil.java │ │ │ ├── DpUtil.java │ │ │ ├── FileUtil.java │ │ │ ├── HttpsUtil.java │ │ │ ├── ImageUtil.java │ │ │ ├── LogUtil.java │ │ │ ├── MD5Util.java │ │ │ ├── PrefUtil.java │ │ │ ├── ProgressInterceptor.java │ │ │ ├── QMUIDeviceHelper.java │ │ │ ├── QMUIStatusBarHelper.java │ │ │ ├── ResourceUtil.java │ │ │ ├── RxSchedulesHelper.java │ │ │ ├── SignUtil.java │ │ │ ├── StringUtil.java │ │ │ ├── SystemUtil.java │ │ │ ├── UserAgentInterceptor.java │ │ │ └── WindowUtil.java │ │ │ └── view │ │ │ ├── SplashActivity.java │ │ │ ├── auth │ │ │ ├── AuthActivity.java │ │ │ └── fragment │ │ │ │ ├── LoginFragment.java │ │ │ │ ├── RegisterFragment.java │ │ │ │ └── ResetPasswdFragment.java │ │ │ ├── gallery │ │ │ ├── BrowseImageActivity.java │ │ │ ├── ConcreteCategoryActivity.kt │ │ │ ├── ConcreteMangaActivity.java │ │ │ ├── FavoriteActivity.java │ │ │ └── fragment │ │ │ │ ├── CommentFragment.java │ │ │ │ ├── FavoriteFolderFragment.java │ │ │ │ └── SummaryFragment.java │ │ │ └── main │ │ │ ├── FilterActivity.kt │ │ │ ├── MainActivity.java │ │ │ ├── SettingActivity.kt │ │ │ └── fragment │ │ │ ├── CategoryFragment.java │ │ │ ├── HomeFragment.java │ │ │ ├── LatestFragment.java │ │ │ ├── MineFragment.java │ │ │ └── SettingFragment.kt │ ├── loading-web.png │ ├── night_mode-web.png │ ├── no_data-web.png │ ├── res │ │ ├── anim │ │ │ ├── activity_alpha_in.xml │ │ │ ├── activity_alpha_out.xml │ │ │ ├── activity_slide_in.xml │ │ │ ├── activity_slide_out.xml │ │ │ ├── popup_alpha_in.xml │ │ │ └── popup_alpha_out.xml │ │ ├── drawable │ │ │ ├── browse_button.xml │ │ │ ├── custom_dialog.xml │ │ │ ├── dotted_line.xml │ │ │ ├── ic_dashboard_black_24dp.xml │ │ │ ├── ic_home_black_24dp.xml │ │ │ ├── ic_notifications_black_24dp.xml │ │ │ ├── icon_check.xml │ │ │ ├── item_gallery_background.xml │ │ │ ├── loading.xml │ │ │ ├── login_button.xml │ │ │ ├── mine_divider.xml │ │ │ ├── progressbar_style.xml │ │ │ ├── qmui_tip_dialog_bg.xml │ │ │ └── retry_button.xml │ │ ├── layout │ │ │ ├── activity_auth.xml │ │ │ ├── activity_base.xml │ │ │ ├── activity_browse_image.xml │ │ │ ├── activity_concrete_category.xml │ │ │ ├── activity_concrete_manga.xml │ │ │ ├── activity_favorite.xml │ │ │ ├── activity_filter.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_setting.xml │ │ │ ├── activity_splash.xml │ │ │ ├── bottomsheet_favorite_folder.xml │ │ │ ├── dialog_default.xml │ │ │ ├── dialog_edittext.xml │ │ │ ├── dialog_progressbar.xml │ │ │ ├── dialog_search.xml │ │ │ ├── dialog_single_select.xml │ │ │ ├── empty_layout.xml │ │ │ ├── fragment_category.xml │ │ │ ├── fragment_favorite.xml │ │ │ ├── fragment_home.xml │ │ │ ├── fragment_latest.xml │ │ │ ├── fragment_login.xml │ │ │ ├── fragment_manga_comment.xml │ │ │ ├── fragment_manga_summary.xml │ │ │ ├── fragment_mine.xml │ │ │ ├── fragment_register.xml │ │ │ ├── fragment_reset_password.xml │ │ │ ├── item_bottomsheet_favorite_folder.xml │ │ │ ├── item_category.xml │ │ │ ├── item_comment.xml │ │ │ ├── item_favorite_folder.xml │ │ │ ├── item_filter.xml │ │ │ ├── item_gallery.xml │ │ │ ├── item_mine.xml │ │ │ ├── item_setting.xml │ │ │ ├── item_summary.xml │ │ │ ├── popup_browse_image_config.xml │ │ │ ├── progressbar_default.xml │ │ │ ├── qmui_tip_dialog_layout.xml │ │ │ ├── recycler_only.xml │ │ │ └── titlebar_main.xml │ │ ├── menu │ │ │ └── navigation.xml │ │ ├── mipmap-hdpi │ │ │ ├── arrow_left.png │ │ │ ├── arrow_right.png │ │ │ ├── broom.png │ │ │ ├── comment.png │ │ │ ├── edit.png │ │ │ ├── favorite.png │ │ │ ├── filter.png │ │ │ ├── history.png │ │ │ ├── ic_setting_pink.png │ │ │ ├── icon_book.png │ │ │ ├── icon_brightness_high.png │ │ │ ├── icon_brightness_low.png │ │ │ ├── icon_check.png │ │ │ ├── icon_check_normal.png │ │ │ ├── icon_folder.png │ │ │ ├── icon_lock.png │ │ │ ├── icon_plane.png │ │ │ ├── icon_setting.png │ │ │ ├── loading.png │ │ │ ├── night_mode.png │ │ │ ├── no_data.png │ │ │ ├── search.png │ │ │ ├── span_author.png │ │ │ ├── span_category.png │ │ │ ├── span_filecount.png │ │ │ ├── span_posted.png │ │ │ ├── span_rating.png │ │ │ ├── span_uploader.png │ │ │ └── viewed.png │ │ ├── mipmap-mdpi │ │ │ ├── arrow_left.png │ │ │ ├── arrow_right.png │ │ │ ├── broom.png │ │ │ ├── comment.png │ │ │ ├── edit.png │ │ │ ├── favorite.png │ │ │ ├── filter.png │ │ │ ├── history.png │ │ │ ├── ic_setting_pink.png │ │ │ ├── icon_book.png │ │ │ ├── icon_brightness_high.png │ │ │ ├── icon_brightness_low.png │ │ │ ├── icon_check.png │ │ │ ├── icon_check_normal.png │ │ │ ├── icon_folder.png │ │ │ ├── icon_lock.png │ │ │ ├── icon_plane.png │ │ │ ├── icon_setting.png │ │ │ ├── loading.png │ │ │ ├── night_mode.png │ │ │ ├── no_data.png │ │ │ ├── search.png │ │ │ ├── span_author.png │ │ │ ├── span_category.png │ │ │ ├── span_filecount.png │ │ │ ├── span_posted.png │ │ │ ├── span_rating.png │ │ │ ├── span_uploader.png │ │ │ └── viewed.png │ │ ├── mipmap-nodpi │ │ │ ├── artist_cg_sets.webp │ │ │ ├── chinese.webp │ │ │ ├── cosplay.webp │ │ │ ├── doujinshi.webp │ │ │ ├── english.webp │ │ │ ├── failure_img.png │ │ │ ├── french.webp │ │ │ ├── game_cg.webp │ │ │ ├── german.webp │ │ │ ├── greek.webp │ │ │ ├── image_sets.webp │ │ │ ├── italian.webp │ │ │ ├── japanese.webp │ │ │ ├── korean.webp │ │ │ ├── logo.png │ │ │ ├── manga.webp │ │ │ ├── misc.webp │ │ │ ├── non_h.webp │ │ │ ├── polish.webp │ │ │ ├── portuguese.webp │ │ │ ├── profile_cover.webp │ │ │ ├── profile_header.webp │ │ │ ├── russian.webp │ │ │ ├── spanish.webp │ │ │ ├── splash.webp │ │ │ ├── thai.webp │ │ │ ├── vietnamese.webp │ │ │ └── western.webp │ │ ├── mipmap-xhdpi │ │ │ ├── arrow_left.png │ │ │ ├── arrow_right.png │ │ │ ├── broom.png │ │ │ ├── comment.png │ │ │ ├── edit.png │ │ │ ├── favorite.png │ │ │ ├── filter.png │ │ │ ├── history.png │ │ │ ├── ic_setting_pink.png │ │ │ ├── icon_book.png │ │ │ ├── icon_brightness_high.png │ │ │ ├── icon_brightness_low.png │ │ │ ├── icon_check.png │ │ │ ├── icon_check_normal.png │ │ │ ├── icon_folder.png │ │ │ ├── icon_lock.png │ │ │ ├── icon_plane.png │ │ │ ├── icon_setting.png │ │ │ ├── loading.png │ │ │ ├── night_mode.png │ │ │ ├── no_data.png │ │ │ ├── search.png │ │ │ ├── span_author.png │ │ │ ├── span_category.png │ │ │ ├── span_filecount.png │ │ │ ├── span_posted.png │ │ │ ├── span_rating.png │ │ │ ├── span_uploader.png │ │ │ └── viewed.png │ │ ├── mipmap-xxhdpi │ │ │ ├── arrow_left.png │ │ │ ├── arrow_right.png │ │ │ ├── broom.png │ │ │ ├── comment.png │ │ │ ├── edit.png │ │ │ ├── favorite.png │ │ │ ├── filter.png │ │ │ ├── history.png │ │ │ ├── ic_setting_pink.png │ │ │ ├── icon_book.png │ │ │ ├── icon_brightness_high.png │ │ │ ├── icon_brightness_low.png │ │ │ ├── icon_check.png │ │ │ ├── icon_check_normal.png │ │ │ ├── icon_folder.png │ │ │ ├── icon_lock.png │ │ │ ├── icon_plane.png │ │ │ ├── icon_setting.png │ │ │ ├── loading.png │ │ │ ├── night_mode.png │ │ │ ├── no_data.png │ │ │ ├── search.png │ │ │ ├── span_author.png │ │ │ ├── span_category.png │ │ │ ├── span_filecount.png │ │ │ ├── span_posted.png │ │ │ ├── span_rating.png │ │ │ ├── span_uploader.png │ │ │ └── viewed.png │ │ ├── mipmap-xxxhdpi │ │ │ ├── arrow_left.png │ │ │ ├── arrow_right.png │ │ │ ├── broom.png │ │ │ ├── comment.png │ │ │ ├── edit.png │ │ │ ├── favorite.png │ │ │ ├── filter.png │ │ │ ├── history.png │ │ │ ├── ic_setting_pink.png │ │ │ ├── icon_book.png │ │ │ ├── icon_brightness_high.png │ │ │ ├── icon_brightness_low.png │ │ │ ├── icon_check.png │ │ │ ├── icon_check_normal.png │ │ │ ├── icon_folder.png │ │ │ ├── icon_lock.png │ │ │ ├── icon_plane.png │ │ │ ├── icon_setting.png │ │ │ ├── loading.png │ │ │ ├── night_mode.png │ │ │ ├── no_data.png │ │ │ ├── search.png │ │ │ ├── span_author.png │ │ │ ├── span_category.png │ │ │ ├── span_filecount.png │ │ │ ├── span_posted.png │ │ │ ├── span_rating.png │ │ │ ├── span_uploader.png │ │ │ └── viewed.png │ │ ├── transition │ │ │ └── explode.xml │ │ ├── values-night │ │ │ └── colors.xml │ │ ├── values │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ids.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── xml │ │ │ └── filepaths.xml │ ├── search-web.png │ ├── span_author-web.png │ ├── span_category-web.png │ ├── span_filecount-web.png │ ├── span_posted-web.png │ ├── span_rating-web.png │ ├── span_uploader-web.png │ └── viewed-web.png │ └── test │ └── java │ └── cn │ └── xhl │ └── client │ └── manga │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── img ├── content.jpg └── list.jpg └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /screenBuilder 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/dictionaries/lixiuhao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 26 | 27 | 28 | 29 | 30 | 31 | 33 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Manga 2 | 3 | An application like https://github.com/seven332/EhViewer 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /screenBuilder 2 | -------------------------------------------------------------------------------- /app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "429869167014", 4 | "project_id": "ehconvert" 5 | }, 6 | "client": [ 7 | { 8 | "client_info": { 9 | "mobilesdk_app_id": "1:429869167014:android:ae8c8948177fdd2f", 10 | "android_client_info": { 11 | "package_name": "cn.xhl.client.manga" 12 | } 13 | }, 14 | "oauth_client": [ 15 | { 16 | "client_id": "429869167014-ef9md7hhn8r2loa6mpnpjs3murejpkid.apps.googleusercontent.com", 17 | "client_type": 1, 18 | "android_info": { 19 | "package_name": "cn.xhl.client.manga", 20 | "certificate_hash": "2f1b518e960b40983e39677e4a86740d3e43352a" 21 | } 22 | }, 23 | { 24 | "client_id": "429869167014-ghqsf5stfsfa3k050aptl0hukrqta3fc.apps.googleusercontent.com", 25 | "client_type": 3 26 | } 27 | ], 28 | "api_key": [ 29 | { 30 | "current_key": "AIzaSyA65kFBCJ02EnvqZ2_ShjJoBMUg9jAtKY8" 31 | } 32 | ], 33 | "services": { 34 | "analytics_service": { 35 | "status": 2, 36 | "analytics_property": { 37 | "tracking_id": "UA-109771729-1" 38 | } 39 | }, 40 | "appinvite_service": { 41 | "status": 1, 42 | "other_platform_oauth_client": [] 43 | }, 44 | "ads_service": { 45 | "status": 1 46 | } 47 | } 48 | } 49 | ], 50 | "configuration_version": "1" 51 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/cn/xhl/client/manga/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("cn.xhl.client.manga", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/debug/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "429869167014", 4 | "project_id": "ehconvert" 5 | }, 6 | "client": [ 7 | { 8 | "client_info": { 9 | "mobilesdk_app_id": "1:429869167014:android:ae8c8948177fdd2f", 10 | "android_client_info": { 11 | "package_name": "cn.xhl.client.manga" 12 | } 13 | }, 14 | "oauth_client": [ 15 | { 16 | "client_id": "429869167014-ef9md7hhn8r2loa6mpnpjs3murejpkid.apps.googleusercontent.com", 17 | "client_type": 1, 18 | "android_info": { 19 | "package_name": "cn.xhl.client.manga", 20 | "certificate_hash": "2f1b518e960b40983e39677e4a86740d3e43352a" 21 | } 22 | }, 23 | { 24 | "client_id": "429869167014-ghqsf5stfsfa3k050aptl0hukrqta3fc.apps.googleusercontent.com", 25 | "client_type": 3 26 | } 27 | ], 28 | "api_key": [ 29 | { 30 | "current_key": "AIzaSyA65kFBCJ02EnvqZ2_ShjJoBMUg9jAtKY8" 31 | } 32 | ], 33 | "services": { 34 | "analytics_service": { 35 | "status": 2, 36 | "analytics_property": { 37 | "tracking_id": "UA-109771729-1" 38 | } 39 | }, 40 | "appinvite_service": { 41 | "status": 1, 42 | "other_platform_oauth_client": [] 43 | }, 44 | "ads_service": { 45 | "status": 1 46 | } 47 | } 48 | } 49 | ], 50 | "configuration_version": "1" 51 | } -------------------------------------------------------------------------------- /app/src/main/arrow_left-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/arrow_left-web.png -------------------------------------------------------------------------------- /app/src/main/arrow_right-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/arrow_right-web.png -------------------------------------------------------------------------------- /app/src/main/broom-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/broom-web.png -------------------------------------------------------------------------------- /app/src/main/comment-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/comment-web.png -------------------------------------------------------------------------------- /app/src/main/edit-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/edit-web.png -------------------------------------------------------------------------------- /app/src/main/favorite-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/favorite-web.png -------------------------------------------------------------------------------- /app/src/main/filter-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/filter-web.png -------------------------------------------------------------------------------- /app/src/main/history-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/history-web.png -------------------------------------------------------------------------------- /app/src/main/ic_setting_pink-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/ic_setting_pink-web.png -------------------------------------------------------------------------------- /app/src/main/icon_book-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/icon_book-web.png -------------------------------------------------------------------------------- /app/src/main/icon_brightness-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/icon_brightness-web.png -------------------------------------------------------------------------------- /app/src/main/icon_brightness2-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/icon_brightness2-web.png -------------------------------------------------------------------------------- /app/src/main/icon_check-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/icon_check-web.png -------------------------------------------------------------------------------- /app/src/main/icon_check_normal-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/icon_check_normal-web.png -------------------------------------------------------------------------------- /app/src/main/icon_folder-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/icon_folder-web.png -------------------------------------------------------------------------------- /app/src/main/icon_lock-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/icon_lock-web.png -------------------------------------------------------------------------------- /app/src/main/icon_plane-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/icon_plane-web.png -------------------------------------------------------------------------------- /app/src/main/icon_setting-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/icon_setting-web.png -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/MyActivityManager.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga; 2 | 3 | import android.app.Activity; 4 | import android.support.annotation.NonNull; 5 | import android.support.annotation.Nullable; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | /** 11 | * @author Mike on 2017/9/26 0026. 12 | */ 13 | public class MyActivityManager { 14 | private static List activities = new ArrayList<>(); 15 | 16 | public static void add(@NonNull Activity activity) { 17 | activities.add(activity); 18 | } 19 | 20 | public static void remove(@NonNull Activity activity) { 21 | activities.remove(activity); 22 | } 23 | 24 | @Nullable 25 | public static Activity pop() { 26 | int length = activities.size(); 27 | if (length == 0) { 28 | return null; 29 | } 30 | return activities.remove(length - 1); 31 | } 32 | 33 | @Nullable 34 | public static Activity peek() { 35 | int length = activities.size(); 36 | if (length == 0) { 37 | return null; 38 | } 39 | return activities.get(length - 1); 40 | } 41 | 42 | public static boolean isTop(@NonNull Activity activity) { 43 | return activity.equals(peek()); 44 | } 45 | 46 | public static void finishAll() { 47 | Activity activity; 48 | while (null != (activity = pop())) { 49 | if (!activity.isFinishing()) { 50 | activity.finish(); 51 | } 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/MyFragmentManager.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga; 2 | 3 | 4 | import android.support.annotation.NonNull; 5 | import android.support.annotation.Nullable; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | import cn.xhl.client.manga.base.BaseFragment; 11 | 12 | /** 13 | * @author Mike on 2017/9/30 0030. 14 | */ 15 | 16 | public class MyFragmentManager { 17 | private static List fragments = new ArrayList<>(); 18 | 19 | public static void add(@NonNull BaseFragment fragment) { 20 | fragments.add(fragment); 21 | } 22 | 23 | public static void remove(@NonNull BaseFragment fragment) { 24 | fragments.remove(fragment); 25 | } 26 | 27 | @Nullable public static BaseFragment pop() { 28 | int length = fragments.size(); 29 | if (length == 0) { 30 | return null; 31 | } 32 | return fragments.remove(length - 1); 33 | } 34 | 35 | @Nullable public static BaseFragment peek() { 36 | int length = fragments.size(); 37 | if (length == 0) { 38 | return null; 39 | } 40 | return fragments.get(length - 1); 41 | } 42 | 43 | public static int size() { 44 | return fragments.size(); 45 | } 46 | 47 | public static void clear() { 48 | fragments.clear(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/adapter/MainPagerAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.adapter; 2 | 3 | import android.support.v4.app.FragmentManager; 4 | import android.support.v4.app.FragmentPagerAdapter; 5 | import android.view.ViewGroup; 6 | 7 | import cn.xhl.client.manga.presenter.main.CategoryPresenter; 8 | import cn.xhl.client.manga.presenter.main.HomePresenter; 9 | import cn.xhl.client.manga.presenter.main.MinePresenter; 10 | import cn.xhl.client.manga.view.main.fragment.CategoryFragment; 11 | import cn.xhl.client.manga.view.main.fragment.HomeFragment; 12 | import cn.xhl.client.manga.view.main.fragment.MineFragment; 13 | 14 | /** 15 | * @author Mike on 2017/10/10 0010. 16 | *

17 | * MainActivity最外层的适配器 18 | */ 19 | public class MainPagerAdapter extends FragmentPagerAdapter { 20 | public MainPagerAdapter(FragmentManager fm) { 21 | super(fm); 22 | } 23 | 24 | @Override 25 | public android.support.v4.app.Fragment getItem(int position) { 26 | switch (position) { 27 | case 0: 28 | HomeFragment homeFragment = new HomeFragment(); 29 | new HomePresenter(homeFragment); 30 | return homeFragment; 31 | case 1: 32 | CategoryFragment categoryFragment = new CategoryFragment(); 33 | new CategoryPresenter(categoryFragment); 34 | return categoryFragment; 35 | case 2: 36 | MineFragment mineFragment = new MineFragment(); 37 | new MinePresenter(mineFragment); 38 | return mineFragment; 39 | default: 40 | return null; 41 | } 42 | } 43 | 44 | @Override 45 | public int getCount() { 46 | return 3; 47 | } 48 | 49 | @Override 50 | public void destroyItem(ViewGroup container, int position, Object object) { 51 | // 每次移除item会产生不可控的bug,比如导致一些fragment被回收不再初始化,同时也会造成Fragment反复初始化带来的资源消耗 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/adapter/gallery/FavoriteFolderAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.adapter.gallery; 2 | 3 | import android.support.annotation.Nullable; 4 | 5 | import com.chad.library.adapter.base.BaseQuickAdapter; 6 | import com.chad.library.adapter.base.BaseViewHolder; 7 | 8 | import java.util.List; 9 | 10 | import cn.xhl.client.manga.R; 11 | import cn.xhl.client.manga.model.bean.response.gallery.Res_FavoriteFolder; 12 | 13 | /** 14 | * Created by xiuhaoli on 2017/11/17. 15 | */ 16 | 17 | public class FavoriteFolderAdapter extends BaseQuickAdapter { 18 | public FavoriteFolderAdapter(@Nullable List data) { 19 | super(R.layout.item_favorite_folder, data); 20 | } 21 | 22 | @Override 23 | protected void convert(BaseViewHolder helper, Res_FavoriteFolder.Data item) { 24 | helper.setText(R.id.text_item_favorite_folder, item.getFolder()); 25 | helper.setText(R.id.content_item_favorite_folder, String.valueOf(item.getCount())); 26 | helper.setVisible(R.id.encrypt_item_favorite_folder, item.getEncrypt() == 1); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/adapter/gallery/FavoriteFolderDialogAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.adapter.gallery; 2 | 3 | import android.support.annotation.Nullable; 4 | 5 | import com.chad.library.adapter.base.BaseQuickAdapter; 6 | import com.chad.library.adapter.base.BaseViewHolder; 7 | 8 | import java.util.List; 9 | 10 | import cn.xhl.client.manga.R; 11 | import cn.xhl.client.manga.model.bean.response.gallery.Res_FavoriteFolder; 12 | 13 | /** 14 | * Created by xiuhaoli on 2017/11/18. 15 | */ 16 | 17 | public class FavoriteFolderDialogAdapter extends BaseQuickAdapter { 18 | public FavoriteFolderDialogAdapter(@Nullable List data) { 19 | super(R.layout.item_bottomsheet_favorite_folder, data); 20 | } 21 | 22 | @Override 23 | protected void convert(BaseViewHolder helper, Res_FavoriteFolder.Data item) { 24 | helper.setText(R.id.text_item_bottomsheet_favorite_folder, item.getFolder()); 25 | helper.setText(R.id.content_item_bottomsheet_favorite_folder, String.valueOf(item.getCount())); 26 | helper.setChecked(R.id.checkbox_item_bottomsheet_favorite_folder, item.isChecked()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/adapter/gallery/SummaryAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.adapter.gallery; 2 | 3 | import android.support.annotation.Nullable; 4 | import android.view.View; 5 | 6 | import com.chad.library.adapter.base.BaseQuickAdapter; 7 | import com.chad.library.adapter.base.BaseViewHolder; 8 | 9 | import java.util.List; 10 | 11 | import cn.xhl.client.manga.R; 12 | import cn.xhl.client.manga.custom.TextImageSpan; 13 | 14 | /** 15 | *

16 |  *     author : xiuhaoli
17 |  *     e-mail : xiuhaoli@outlook.com
18 |  *     time   : 2018/01/19
19 |  *     version: 1.0
20 |  * 
21 | */ 22 | public class SummaryAdapter extends BaseQuickAdapter { 24 | public SummaryAdapter(@Nullable List data) { 25 | super(R.layout.item_summary, data); 26 | } 27 | 28 | @Override 29 | protected void convert(SummaryViewHolder helper, SummaryItem item) { 30 | helper.setImageSpanLeft(R.id.imagespan_item_summary,item.getImgRes()); 31 | helper.setText(R.id.imagespan_item_summary, item.getLeft()); 32 | helper.setText(R.id.follow_item_summary, item.getRight()); 33 | helper.addOnClickListener(R.id.follow_item_summary); 34 | } 35 | 36 | class SummaryViewHolder extends BaseViewHolder { 37 | 38 | private SummaryViewHolder(View view) { 39 | super(view); 40 | } 41 | 42 | private void setImageSpanLeft(int resId, int imgId) { 43 | TextImageSpan imageSpan = getView(resId); 44 | imageSpan.setLeftImageSpan(imgId); 45 | } 46 | } 47 | 48 | public static class SummaryItem { 49 | private int imgRes; 50 | private String left; 51 | private String right; 52 | 53 | public int getImgRes() { 54 | return imgRes; 55 | } 56 | 57 | public void setImgRes(int imgRes) { 58 | this.imgRes = imgRes; 59 | } 60 | 61 | public String getLeft() { 62 | return left; 63 | } 64 | 65 | public void setLeft(String left) { 66 | this.left = left; 67 | } 68 | 69 | public String getRight() { 70 | return right; 71 | } 72 | 73 | public void setRight(String right) { 74 | this.right = right; 75 | } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/adapter/main/CategoryAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.adapter.main; 2 | 3 | import android.support.annotation.Nullable; 4 | import android.view.View; 5 | 6 | import com.chad.library.adapter.base.BaseQuickAdapter; 7 | import com.chad.library.adapter.base.BaseViewHolder; 8 | import com.facebook.drawee.view.SimpleDraweeView; 9 | 10 | import java.util.List; 11 | 12 | import cn.xhl.client.manga.R; 13 | 14 | /** 15 | * 分类页的适配器 16 | * 17 | * @author Mike on 2017/10/25 0025. 18 | */ 19 | public class CategoryAdapter extends BaseQuickAdapter { 20 | 21 | public CategoryAdapter(@Nullable List data) { 22 | super(R.layout.item_category, data); 23 | } 24 | 25 | @Override 26 | protected void convert(CategoryViewHolder helper, CategoryItem item) { 27 | helper.setText(R.id.text_item_category, item.getText()); 28 | helper.setImgRes(R.id.img_item_category, item.getImgId()); 29 | } 30 | 31 | class CategoryViewHolder extends BaseViewHolder { 32 | 33 | private CategoryViewHolder(View view) { 34 | super(view); 35 | } 36 | 37 | private void setImgRes(int resId, int imgId) { 38 | SimpleDraweeView simpleDraweeView = getView(resId); 39 | simpleDraweeView.setActualImageResource(imgId); 40 | } 41 | } 42 | 43 | public static class CategoryItem { 44 | private int imgId; 45 | private String text; 46 | 47 | public CategoryItem() { 48 | } 49 | 50 | public CategoryItem(int imgId, String text) { 51 | this.imgId = imgId; 52 | this.text = text; 53 | } 54 | 55 | public int getImgId() { 56 | return imgId; 57 | } 58 | 59 | public void setImgId(int imgId) { 60 | this.imgId = imgId; 61 | } 62 | 63 | public String getText() { 64 | return text; 65 | } 66 | 67 | public void setText(String text) { 68 | this.text = text; 69 | } 70 | 71 | @Override 72 | public String toString() { 73 | return "CategoryItem{" + 74 | "imgId=" + imgId + 75 | ", text=" + text + 76 | '}'; 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/adapter/main/FilterAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.adapter.main; 2 | 3 | import com.chad.library.adapter.base.BaseMultiItemQuickAdapter; 4 | import com.chad.library.adapter.base.BaseQuickAdapter; 5 | import com.chad.library.adapter.base.BaseViewHolder; 6 | 7 | import java.util.List; 8 | 9 | import cn.xhl.client.manga.R; 10 | 11 | /** 12 | *
13 |  *     author : xiuhaoli
14 |  *     e-mail : xiuhaoli@outlook.com
15 |  *     time   : 2018/01/13
16 |  *     version: 1.0
17 |  * 
18 | */ 19 | public class FilterAdapter extends BaseQuickAdapter { 20 | 21 | public FilterAdapter(List data) { 22 | super(R.layout.item_filter, data); 23 | } 24 | 25 | @Override 26 | protected void convert(BaseViewHolder helper, FilterItem item) { 27 | helper.setChecked(R.id.checkbox_item_filter, item.isChecked()); 28 | helper.setText(R.id.checkbox_item_filter, item.getText()); 29 | } 30 | 31 | public static class FilterItem { 32 | private boolean checked; 33 | private String text; 34 | 35 | public boolean isChecked() { 36 | return checked; 37 | } 38 | 39 | public void setChecked(boolean checked) { 40 | this.checked = checked; 41 | } 42 | 43 | public String getText() { 44 | return text; 45 | } 46 | 47 | public void setText(String text) { 48 | this.text = text; 49 | } 50 | 51 | } 52 | } 53 | 54 | 55 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/base/BaseFragment.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.base; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.os.Bundle; 6 | import android.support.annotation.Nullable; 7 | import android.support.v4.app.Fragment; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | 12 | 13 | /** 14 | * @author Mike on 2017/9/22 0022. 15 | */ 16 | public abstract class BaseFragment extends Fragment { 17 | protected BaseActivity mActivity; 18 | protected BackHandledInterface backHandledInterface; 19 | 20 | /** 21 | * 获得全局的,防止使用getActivity()为空 * @param context 22 | */ 23 | @Override 24 | public void onAttach(Context context) { 25 | super.onAttach(context); 26 | Activity activity = (Activity) context; 27 | mActivity = (BaseActivity) activity; 28 | if (mActivity instanceof BackHandledInterface) { 29 | backHandledInterface = (BackHandledInterface) mActivity; 30 | } 31 | } 32 | 33 | @Nullable 34 | @Override 35 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 36 | View view = inflater.inflate(layoutId(), container, false); 37 | initView(view, savedInstanceState); 38 | return view; 39 | } 40 | 41 | @Override 42 | public void onResume() { 43 | super.onResume(); 44 | if (backHandledInterface != null) { 45 | backHandledInterface.setSelectedFragment(this); 46 | } 47 | } 48 | 49 | /** 50 | * 获取fragment的layout 51 | */ 52 | protected abstract int layoutId(); 53 | 54 | /** 55 | * 该抽象方法就是 初始化view * @param view * @param savedInstanceState 56 | */ 57 | protected abstract void initView(View view, Bundle savedInstanceState); 58 | 59 | public void onBackPressed() { 60 | mActivity.finish(); 61 | } 62 | 63 | 64 | /** 65 | * 如果需要Fragment的返回监听,就在对应的activity中实现该接口 66 | *

67 | * 实现该接口后,就可以在fragment里面重写onBackPressed方法 68 | */ 69 | public interface BackHandledInterface { 70 | void setSelectedFragment(BaseFragment selectedFragment); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/base/BaseObserver.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.base; 2 | 3 | 4 | import cn.xhl.client.manga.config.HttpRespCode; 5 | import cn.xhl.client.manga.model.bean.response.BaseResponse; 6 | import cn.xhl.client.manga.utils.LogUtil; 7 | import cn.xhl.client.manga.utils.StringUtil; 8 | import io.reactivex.annotations.NonNull; 9 | import io.reactivex.observers.DisposableObserver; 10 | 11 | /** 12 | * @author Mike on 2017/9/18 0018. 13 | */ 14 | public abstract class BaseObserver extends DisposableObserver> { 15 | private static final String TAG = "BaseObserver"; 16 | 17 | // @Override 18 | // public void onSubscribe(@NonNull Disposable d) { 19 | // LogUtil.i(TAG, "onSubscribe: subscribe"); 20 | // } 21 | 22 | @Override 23 | public void onNext(@NonNull BaseResponse tBaseResponse) { 24 | LogUtil.e(TAG, tBaseResponse.toString()); 25 | long code = tBaseResponse.getCode(); 26 | String msg = tBaseResponse.getMsg(); 27 | if (code == HttpRespCode.SUCCESS_CODE) { 28 | T t = tBaseResponse.getData(); 29 | onHandleSuccess(t); 30 | } else { 31 | if (!StringUtil.isEmpty(msg)) { 32 | msg = StringUtil.utf_8(msg); 33 | } 34 | onHandleError(code, msg); 35 | } 36 | } 37 | 38 | @Override 39 | public void onError(@NonNull Throwable e) { 40 | // LogUtil.e(TAG, e.getCause().toString()); 41 | onHandleError(HttpRespCode.SERVER_ERR, "server error"); 42 | } 43 | 44 | @Override 45 | public void onComplete() { 46 | // LogUtil.e(TAG, "onComplete: ok"); 47 | } 48 | 49 | protected abstract void onHandleSuccess(T t); 50 | 51 | protected abstract void onHandleError(long code, String msg); 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.base; 2 | 3 | /** 4 | * @author Mike on 2017/9/22 0022. 5 | */ 6 | 7 | public interface BasePresenter { 8 | void subscribe(); 9 | void unSubscribe(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/base/BaseView.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.base; 2 | 3 | /** 4 | * @author Mike on 2017/9/22 0022. 5 | */ 6 | 7 | public interface BaseView { 8 | void setPresenter(T presenter); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/config/HttpRespCode.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.config; 2 | 3 | /** 4 | * @author Mike on 2017/4/29 0029. 5 | *

6 | * 网络请求的返回码 7 | */ 8 | public interface HttpRespCode { 9 | long SUCCESS_CODE = 200L; 10 | long CHECK_SIGN_FAILED = 406L; 11 | long TOKEN_TIMEOUT = 407L; 12 | long TOKEN_ERR = 408L; 13 | long UID_ERR = 409L; 14 | long PAGE_UNAVAILABLE = 410L; 15 | long HAVE_BEEN_REGISTERED = 411L; 16 | long ACCOUNT_ERR = 412L; 17 | long PASSWORD_ERR = 413L; 18 | long HYPELINK_ERR = 416L; 19 | long VERIFY_CODE_ERR = 418L; 20 | long SERVER_ERR = 500L; 21 | long REGISTER_FAILED = 511L; 22 | long RESET_FAILED = 514L; 23 | long OBTAIN_DATA_FAILED = 516L; 24 | long REFRESH_TOKEN_FAILED = 521L; 25 | long REFRESH_TOKEN_TIMEOUT_FAILED = 522L; 26 | long REFRESH_SALT_FAILED = 523L; 27 | long OBTAIN_VERIFY_CODE_FAILED = 524L; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/SplashContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | import cn.xhl.client.manga.model.bean.response.auth.Res_RefreshToken; 6 | 7 | /** 8 | * @author Mike on 2017/9/28 0028. 9 | *

10 | * Splash 协议 11 | */ 12 | public interface SplashContract { 13 | 14 | interface View extends BaseView { 15 | 16 | /** 17 | * 通过SharedPreferences获取用户信息,等初始化操作 18 | */ 19 | void initUserInfo(); 20 | 21 | /** 22 | * expire_time没过期且token等信息不为空,跳转主界面 23 | */ 24 | void change2MainActivity(); 25 | 26 | /** 27 | * 当本地存储的token、salt、uid为空或者expire_time过期了,就会调用此方法跳转登录 28 | */ 29 | void change2AuthActivity(); 30 | 31 | /** 32 | * 处理刷新token接口返回的数据 33 | * 34 | * @param res_refreshToken 返回信息实体类 35 | */ 36 | void handleUserInfo(Res_RefreshToken res_refreshToken); 37 | } 38 | 39 | interface Presenter extends BasePresenter { 40 | 41 | /** 42 | * 校验登录信息是否完备 43 | * 44 | * @param token 45 | * @param uid 46 | * @param salt 47 | * @param expire_time 48 | * @return 49 | */ 50 | boolean isUserInfoAvailable(String token, int uid, String salt, int expire_time); 51 | 52 | /** 53 | * 刷新登录信息 54 | * 55 | * @param token 56 | * @param uid 57 | * @param salt 58 | * @param expire_time 59 | */ 60 | void refreshToken(String token, int uid, String salt, int expire_time); 61 | 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/auth/LoginContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.auth; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | import cn.xhl.client.manga.model.bean.response.auth.Res_Login; 6 | 7 | /** 8 | * @author Mike on 2017/9/22 0022. 9 | * 10 | * login 协议 11 | */ 12 | public interface LoginContract { 13 | interface View extends BaseView { 14 | void createView(); 15 | 16 | void showLoading(); 17 | 18 | void hideLoading(); 19 | 20 | void showTipMsg(String msg); 21 | 22 | void change2MainActivity(); 23 | 24 | void change2Register(); 25 | 26 | void change2Reset(); 27 | 28 | void hideKeyboard(); 29 | 30 | void saveLoginInfo(Res_Login res_login); 31 | } 32 | 33 | interface Presenter extends BasePresenter { 34 | 35 | boolean isEmailValid(String email); 36 | 37 | boolean isPasswordValid(String password); 38 | 39 | void activateLoginTask(String email, String password); 40 | 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/auth/RegisterContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.auth; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | 6 | /** 7 | * @author Mike on 2017/9/29 0029. 8 | */ 9 | 10 | public interface RegisterContract { 11 | interface View extends BaseView { 12 | void createView(); 13 | 14 | void showLoading(); 15 | 16 | void hideLoading(); 17 | 18 | void showTipMsg(String msg); 19 | 20 | void back2Login(); 21 | 22 | void countDown(); 23 | 24 | void hideKeyboard(); 25 | 26 | } 27 | 28 | interface Presenter extends BasePresenter { 29 | @Deprecated 30 | void obtainVerify(String email); 31 | 32 | boolean isEmailValid(String email); 33 | 34 | boolean isPasswordValid(String password); 35 | 36 | void submit(String email, String password, String verify); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/auth/ResetPasswdContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.auth; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | 6 | /** 7 | * @author Mike on 2017/9/29 0029. 8 | *

9 | * 重置密码页面协议 10 | */ 11 | public interface ResetPasswdContract { 12 | 13 | interface View extends BaseView { 14 | void createView(); 15 | 16 | void showLoading(); 17 | 18 | void hideLoading(); 19 | 20 | void showTipMsg(String msg); 21 | 22 | void back2Login(); 23 | 24 | void countDown(); 25 | 26 | void hideKeyboard(); 27 | } 28 | 29 | interface Presenter extends BasePresenter { 30 | void obtainVerify(String email); 31 | 32 | boolean isEmailValid(String email); 33 | 34 | boolean isPasswordValid(String password); 35 | 36 | void submit(String email, String password, String verify); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/gallery/CommentContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.gallery; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | import cn.xhl.client.manga.model.bean.response.gallery.Res_CommentList; 6 | 7 | /** 8 | *

 9 |  *     author : xiuhaoli
10 |  *     e-mail : xiuhaoli@outlook.com
11 |  *     time   : 2017/12/18
12 |  *     version: 1.0
13 |  * 
14 | */ 15 | public interface CommentContract { 16 | interface View extends BaseView { 17 | void showToast(String msg); 18 | 19 | void showLoading(); 20 | 21 | void hideLoading(); 22 | 23 | void failLoadMore(); 24 | 25 | void noMoreToLoad(); 26 | 27 | void showReTry(); 28 | 29 | void hideReTry(); 30 | 31 | void notifyAdapter(Res_CommentList res_commentList); 32 | 33 | void notifyAddSingleComment(Res_CommentList.CommentEntity commentEntity); 34 | 35 | void notifyDeleteComment(int position); 36 | 37 | void showNoData(); 38 | 39 | void hideNoData(); 40 | 41 | void showEmptyLoading(); 42 | 43 | void hideEmptyLoading(); 44 | 45 | void clearEditText(); 46 | } 47 | 48 | interface Presenter extends BasePresenter { 49 | void listComment(int gid, boolean isLoadMore); 50 | 51 | void comment(int gid, String comment); 52 | 53 | /** 54 | * 删除评论 55 | * 56 | * @param id 这是评论在数据库中的主键id 57 | * @param gid galleryId 58 | * @param position 删除的item所在的位置索引 59 | */ 60 | void deleteComment(int id, int gid, int position); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/gallery/ConcreteMangaContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.gallery; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | import cn.xhl.client.manga.model.bean.response.gallery.Res_FavoriteFolder; 6 | 7 | /** 8 | * @author lixiuhao on 2017/10/30 0030. 9 | */ 10 | public interface ConcreteMangaContract { 11 | interface View extends BaseView { 12 | 13 | void showReadLoading(); 14 | 15 | void hideReadLoading(); 16 | 17 | void showLoading(); 18 | 19 | void hideLoading(); 20 | 21 | void showToastMsg(String msg); 22 | 23 | void changeStarNumber(int delta); 24 | 25 | void plusViewedNumber(); 26 | 27 | void failLoadMore(); 28 | 29 | void noMoreToLoad(); 30 | 31 | void showReTry(); 32 | 33 | void hideReTry(); 34 | 35 | void notifyAdapterFolder(Res_FavoriteFolder favoriteFolder); 36 | 37 | void showNoData(); 38 | 39 | void hideNoData(); 40 | 41 | void showEmptyLoading(); 42 | 43 | void hideEmptyLoading(); 44 | 45 | void createBottomSheet(); 46 | 47 | /** 48 | * 在BottomSheet这个dialog上创建一个浮在底部的button 49 | */ 50 | void createBottomSheetCheckButton(); 51 | 52 | void showBottomSheet(); 53 | 54 | void dismissBottomSheet(); 55 | } 56 | 57 | interface Presenter extends BasePresenter { 58 | 59 | /** 60 | * 初始化请求folder列表的相关参数 61 | */ 62 | void initReqListData(); 63 | 64 | void favorite(int galleryId, String folder); 65 | 66 | void viewed(int galleryId); 67 | 68 | void listFolder(boolean isLoadMore, int id); 69 | 70 | void sort(Res_FavoriteFolder favoriteFolder); 71 | 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/gallery/FavoriteContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.gallery; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | import cn.xhl.client.manga.model.bean.response.gallery.Res_FavoriteFolder; 6 | import cn.xhl.client.manga.model.bean.response.gallery.Res_GalleryList; 7 | 8 | /** 9 | * Created by xiuhaoli on 2017/11/17. 10 | */ 11 | 12 | public interface FavoriteContract { 13 | interface View extends BaseView { 14 | 15 | void showLoading(); 16 | 17 | void hideLoading(); 18 | 19 | void showTipMsg(String msg); 20 | 21 | void failLoadMore(); 22 | 23 | void noMoreToLoad(); 24 | 25 | void showReTry(); 26 | 27 | void hideReTry(); 28 | 29 | void notifyAdapterFolder(Res_FavoriteFolder favoriteFolder); 30 | 31 | void showNoData(); 32 | 33 | void hideNoData(); 34 | 35 | void showEmptyLoading(); 36 | 37 | void hideEmptyLoading(); 38 | 39 | void notifyAdapter2Remove(); 40 | 41 | void notifyAdapter2Rename(String newFolder); 42 | 43 | void notifyAdapter2Encrypt(); 44 | } 45 | 46 | interface Presenter extends BasePresenter { 47 | /** 48 | * 请求文件夹 49 | * 50 | * @param isLoadMore 是否是在加载更多, 该值用于判断是否展示加载圈 51 | */ 52 | void listFolder(boolean isLoadMore); 53 | 54 | void renameFolder(String oldName, String newName); 55 | 56 | void deleteFolder(String folder); 57 | 58 | void encryptFolder(String folder); 59 | 60 | void listOthersFolder(boolean isLoadMore, int uid); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/gallery/SummaryContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.gallery; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | import cn.xhl.client.manga.model.bean.response.gallery.Res_GalleryList; 6 | 7 | /** 8 | *
 9 |  *     author : xiuhaoli
10 |  *     e-mail : xiuhaoli@outlook.com
11 |  *     time   : 2017/12/19
12 |  *     version: 1.0
13 |  * 
14 | */ 15 | public interface SummaryContract { 16 | interface View extends BaseView { 17 | void showLoading(); 18 | 19 | void hideLoading(); 20 | 21 | void showToastMsg(String msg); 22 | 23 | void changeArtistFollowButton(boolean isFollowed); 24 | 25 | void changeUploaderFollowButton(boolean isFollowed); 26 | 27 | void notifyActivity(); 28 | } 29 | 30 | interface Presenter extends BasePresenter { 31 | void parsePage(Res_GalleryList.GalleryEntity galleryEntity); 32 | 33 | String getShowKey(); 34 | 35 | String getImgKey(); 36 | 37 | String getFirstImg(); 38 | 39 | void attendArtist(String artist); 40 | 41 | void attendUploader(String uploader); 42 | 43 | void isFollowed(String artist, String uploader); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/main/CategoryContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.main; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | 6 | /** 7 | * @author Mike on 2017/10/9 0009. 8 | *

9 | * 分类页的协议 10 | */ 11 | public interface CategoryContract { 12 | interface View extends BaseView { 13 | void initRecyclerData(); 14 | } 15 | 16 | interface Presenter extends BasePresenter { 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/main/HomeContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.main; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | 6 | /** 7 | * @author Mike on 2017/10/9 0009. 8 | *

9 | * 主页协议 10 | */ 11 | public interface HomeContract { 12 | interface View extends BaseView { 13 | 14 | void showLoading(); 15 | 16 | void hideLoading(); 17 | 18 | void showTipMsg(String msg); 19 | 20 | void hideKeyboard(); 21 | 22 | void showSearchDialog(); 23 | } 24 | 25 | interface Presenter extends BasePresenter { 26 | void search(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/main/LatestContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.main; 2 | 3 | 4 | import cn.xhl.client.manga.base.BasePresenter; 5 | import cn.xhl.client.manga.base.BaseView; 6 | import cn.xhl.client.manga.model.bean.response.gallery.Res_GalleryList; 7 | 8 | /** 9 | * @author Mike on 2017/10/23 0023. 10 | */ 11 | 12 | public interface LatestContract { 13 | interface View extends BaseView { 14 | 15 | void showLoading(); 16 | 17 | void hideLoading(); 18 | 19 | void showTipMsg(String msg); 20 | 21 | void failLoadMore(); 22 | 23 | void noMoreToLoad(); 24 | 25 | void showReTry(); 26 | 27 | void hideReTry(); 28 | 29 | void notifyAdapter(Res_GalleryList galleryList); 30 | 31 | void showNoData(); 32 | 33 | void hideNoData(); 34 | 35 | void showEmptyLoading(); 36 | 37 | void hideEmptyLoading(); 38 | 39 | void filterItem(Res_GalleryList galleryList); 40 | } 41 | 42 | interface Presenter extends BasePresenter { 43 | /** 44 | * 请求列表 45 | * 46 | * @param category 书籍类型 47 | * @param type 请求类型 48 | * @param isLoadMore 是否是在加载更多, 该值用于判断是否展示加载圈 49 | */ 50 | void list(String category, String type, boolean isLoadMore); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/main/MineContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.main; 2 | 3 | import cn.xhl.client.manga.base.BasePresenter; 4 | import cn.xhl.client.manga.base.BaseView; 5 | 6 | /** 7 | * 我的协议 8 | *

9 | * 10 | * @author Mike on 2017/10/9 0009. 11 | */ 12 | public interface MineContract { 13 | interface View extends BaseView { 14 | void initAdapter(); 15 | 16 | void showLoading(); 17 | 18 | void hideLoading(); 19 | 20 | void showTipMsg(String msg); 21 | 22 | void changeThemeMode(boolean isNightMode); 23 | 24 | void notifyUI2ChangeUsername(String username); 25 | 26 | void notifyUI2ChangeHeader(String url); 27 | } 28 | 29 | interface Presenter extends BasePresenter { 30 | 31 | void modifyUsername(String newName); 32 | 33 | void modifyProfileHeader(String url); 34 | 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/contract/main/SettingContract.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.contract.main; 2 | 3 | import java.io.File; 4 | 5 | import cn.xhl.client.manga.base.BasePresenter; 6 | import cn.xhl.client.manga.base.BaseView; 7 | import cn.xhl.client.manga.model.bean.response.user.Res_CheckUpdate; 8 | 9 | /** 10 | *

11 |  *     author : xiuhaoli
12 |  *     e-mail : xiuhaoli@outlook.com
13 |  *     time   : 2018/01/04
14 |  *     version: 1.0
15 |  * 
16 | */ 17 | public interface SettingContract { 18 | interface View extends BaseView { 19 | 20 | void showLoading(); 21 | 22 | void hideLoading(); 23 | 24 | void showTipMsg(String msg); 25 | 26 | void createClearCachePromptDialog(); 27 | 28 | void createLogoutPromptDialog(); 29 | 30 | /** 31 | * 更新缓存item 32 | * 33 | * @param cacheSize 清除缓存后的大小 34 | */ 35 | void notifyAdapterForCacheItem(String cacheSize); 36 | 37 | void showNewVersionPrompt(Res_CheckUpdate res_checkUpdate); 38 | 39 | void install(File apkPath); 40 | } 41 | 42 | interface Presenter extends BasePresenter { 43 | String cacheSize(); 44 | 45 | void clearCache(); 46 | 47 | void checkNewVersion(int versionCode, String versionName); 48 | 49 | void startDownloadApk(String url); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/custom/CommentItemDecoration.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.custom; 2 | 3 | import android.content.Context; 4 | import android.graphics.Rect; 5 | import android.graphics.drawable.Drawable; 6 | import android.support.v7.widget.DividerItemDecoration; 7 | import android.support.v7.widget.RecyclerView; 8 | import android.view.View; 9 | import android.widget.LinearLayout; 10 | 11 | import cn.xhl.client.manga.R; 12 | import cn.xhl.client.manga.utils.DpUtil; 13 | 14 | /** 15 | * Created by xiuhaoli on 2017/11/18. 16 | */ 17 | 18 | public class CommentItemDecoration extends DividerItemDecoration { 19 | private Context mContext; 20 | 21 | public CommentItemDecoration(Context context) { 22 | super(context, LinearLayout.VERTICAL); 23 | this.mContext = context; 24 | // the default drawable will lead to draw a white line, so I should change the color as same as background 25 | Drawable drawable = mContext.getDrawable(R.drawable.mine_divider); 26 | if (drawable != null) { 27 | setDrawable(drawable); 28 | } 29 | } 30 | 31 | @Override 32 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 33 | int position = parent.getChildAdapterPosition(view); 34 | if (position == 0) { 35 | outRect.top = DpUtil.dp2Px(mContext, 5); 36 | outRect.bottom = DpUtil.dp2Px(mContext, 1); 37 | } else { 38 | outRect.bottom = DpUtil.dp2Px(mContext, 1); 39 | } 40 | } 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/custom/DefaultLoading.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.custom; 2 | 3 | import android.app.Dialog; 4 | import android.content.Context; 5 | import android.os.Bundle; 6 | import android.support.annotation.NonNull; 7 | import android.widget.TextView; 8 | 9 | import cn.xhl.client.manga.R; 10 | 11 | 12 | /** 13 | * @author lixiuhao on 2017/5/13 0013. 14 | * 自定义加载圈 15 | */ 16 | 17 | public class DefaultLoading extends Dialog { 18 | private TextView tv; 19 | 20 | public DefaultLoading(@NonNull Context context) { 21 | super(context, R.style.customDialogStyle); 22 | } 23 | 24 | @Override 25 | protected void onCreate(Bundle savedInstanceState) { 26 | super.onCreate(savedInstanceState); 27 | setContentView(R.layout.progressbar_default); 28 | 29 | tv = findViewById(R.id.tv_progressbar_default); 30 | // 默认点击外界不被取消 31 | this.setCanceledOnTouchOutside(false); 32 | } 33 | 34 | public void setText(String str) { 35 | tv.setText(str); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/custom/DownloadProgressbar.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.custom; 2 | 3 | import android.app.Dialog; 4 | import android.content.Context; 5 | import android.os.Bundle; 6 | import android.support.annotation.NonNull; 7 | 8 | import cn.xhl.client.manga.R; 9 | 10 | /** 11 | *
12 |  *     author : xiuhaoli
13 |  *     e-mail : xiuhaoli@outlook.com
14 |  *     time   : 2018/01/09
15 |  *     version: 1.0
16 |  * 
17 | */ 18 | public class DownloadProgressbar extends Dialog { 19 | public DownloadProgressbar(@NonNull Context context) { 20 | this(context, 0); 21 | } 22 | 23 | public DownloadProgressbar(@NonNull Context context, int themeResId) { 24 | super(context, themeResId); 25 | } 26 | 27 | @Override 28 | protected void onCreate(Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | setContentView(R.layout.dialog_progressbar); 31 | 32 | setCanceledOnTouchOutside(false); 33 | setCancelable(false); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/custom/FavoriteFolderItemDecoration.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.custom; 2 | 3 | import android.content.Context; 4 | import android.graphics.Canvas; 5 | import android.graphics.Rect; 6 | import android.graphics.drawable.Drawable; 7 | import android.support.v7.widget.DividerItemDecoration; 8 | import android.support.v7.widget.RecyclerView; 9 | import android.view.View; 10 | import android.widget.LinearLayout; 11 | 12 | import cn.xhl.client.manga.R; 13 | import cn.xhl.client.manga.utils.DpUtil; 14 | 15 | /** 16 | * Created by xiuhaoli on 2017/11/18. 17 | */ 18 | 19 | public class FavoriteFolderItemDecoration extends DividerItemDecoration { 20 | private Context mContext; 21 | 22 | public FavoriteFolderItemDecoration(Context context) { 23 | super(context, LinearLayout.VERTICAL); 24 | this.mContext = context; 25 | // the default drawable will lead to draw a white line, so I should change the color as same as background 26 | Drawable drawable = mContext.getDrawable(R.drawable.mine_divider); 27 | if (drawable != null) { 28 | setDrawable(drawable); 29 | } 30 | } 31 | 32 | @Override 33 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 34 | int position = parent.getChildAdapterPosition(view); 35 | if (position == 0) { 36 | outRect.top = DpUtil.dp2Px(mContext, 20); 37 | outRect.bottom = DpUtil.dp2Px(mContext, 1); 38 | } else { 39 | outRect.bottom = DpUtil.dp2Px(mContext, 1); 40 | } 41 | } 42 | 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/custom/MineItemDecoration.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.custom; 2 | 3 | import android.content.Context; 4 | import android.graphics.Rect; 5 | import android.graphics.drawable.Drawable; 6 | import android.support.v7.widget.DividerItemDecoration; 7 | import android.support.v7.widget.RecyclerView; 8 | import android.view.View; 9 | import android.widget.LinearLayout; 10 | 11 | import cn.xhl.client.manga.R; 12 | import cn.xhl.client.manga.utils.DpUtil; 13 | 14 | 15 | /** 16 | * Decoration for MineFragment RecyclerView 17 | * 18 | * @author Mike on 2017/4/15 0015. 19 | */ 20 | public class MineItemDecoration extends DividerItemDecoration { 21 | private Context mContext; 22 | private int size; 23 | 24 | public MineItemDecoration(Context context, int size) { 25 | super(context, LinearLayout.VERTICAL); 26 | this.mContext = context; 27 | this.size = size; 28 | // the default drawable will lead to draw a white line, so I should change the color as same as background 29 | Drawable drawable = mContext.getDrawable(R.drawable.mine_divider); 30 | if (drawable != null) { 31 | setDrawable(drawable); 32 | } 33 | } 34 | 35 | @Override 36 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 37 | int position = parent.getChildAdapterPosition(view); 38 | if (position == 0) { 39 | outRect.top = DpUtil.dp2Px(mContext, 5); 40 | outRect.bottom = DpUtil.dp2Px(mContext, 10); 41 | } else if (position == size - 1) { 42 | outRect.bottom = 0; 43 | } else { 44 | outRect.bottom = DpUtil.dp2Px(mContext, 1); 45 | } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/custom/SettingItemDecoration.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.custom; 2 | 3 | import android.content.Context; 4 | import android.graphics.Rect; 5 | import android.graphics.drawable.Drawable; 6 | import android.support.v7.widget.DividerItemDecoration; 7 | import android.support.v7.widget.RecyclerView; 8 | import android.view.View; 9 | import android.widget.LinearLayout; 10 | 11 | import cn.xhl.client.manga.R; 12 | import cn.xhl.client.manga.utils.DpUtil; 13 | 14 | 15 | /** 16 | * Decoration for MineFragment RecyclerView 17 | * 18 | * @author Mike on 2017/4/15 0015. 19 | */ 20 | public class SettingItemDecoration extends DividerItemDecoration { 21 | private Context mContext; 22 | private int size; 23 | 24 | public SettingItemDecoration(Context context, int size) { 25 | super(context, LinearLayout.VERTICAL); 26 | this.mContext = context; 27 | this.size = size; 28 | // the default drawable will lead to draw a white line, so I should change the color as same as background 29 | Drawable drawable = mContext.getDrawable(R.drawable.mine_divider); 30 | if (drawable != null) { 31 | setDrawable(drawable); 32 | } 33 | } 34 | 35 | @Override 36 | public void getItemOffsets(Rect outRect, View view, 37 | RecyclerView parent, RecyclerView.State state) { 38 | int position = parent.getChildAdapterPosition(view); 39 | if (position == 0) { 40 | outRect.bottom = DpUtil.dp2Px(mContext, 1); 41 | outRect.top = DpUtil.dp2Px(mContext, 20); 42 | } else if (position == size - 1) { 43 | outRect.top = DpUtil.dp2Px(mContext, 10); 44 | } else { 45 | outRect.bottom = DpUtil.dp2Px(mContext, 1); 46 | } 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/custom/zoomable/ZoomableDraweeViewSupport.java: -------------------------------------------------------------------------------- 1 | /* 2 | * This file provided by Facebook is for non-commercial testing and evaluation 3 | * purposes only. Facebook reserves all rights not expressly granted. 4 | * 5 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 6 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 7 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 8 | * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 9 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 10 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 11 | */ 12 | 13 | package cn.xhl.client.manga.custom.zoomable; 14 | 15 | import android.content.Context; 16 | import android.util.AttributeSet; 17 | 18 | import com.facebook.drawee.generic.GenericDraweeHierarchy; 19 | 20 | /** 21 | * DraweeView that has zoomable capabilities. 22 | *

23 | * Once the image loads, pinch-to-zoom and translation gestures are enabled. 24 | */ 25 | public class ZoomableDraweeViewSupport extends ZoomableDraweeView { 26 | 27 | private static final Class TAG = ZoomableDraweeViewSupport.class; 28 | 29 | public ZoomableDraweeViewSupport(Context context, GenericDraweeHierarchy hierarchy) { 30 | super(context, hierarchy); 31 | } 32 | 33 | public ZoomableDraweeViewSupport(Context context) { 34 | super(context); 35 | } 36 | 37 | public ZoomableDraweeViewSupport(Context context, AttributeSet attrs) { 38 | super(context, attrs); 39 | } 40 | 41 | public ZoomableDraweeViewSupport(Context context, AttributeSet attrs, int defStyle) { 42 | super(context, attrs, defStyle); 43 | } 44 | 45 | @Override 46 | protected Class getLogTag() { 47 | return TAG; 48 | } 49 | 50 | @Override 51 | protected ZoomableController createZoomableController() { 52 | return AnimatedZoomableControllerSupport.newInstance(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/listener/GalleryListScrollListener.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.listener; 2 | 3 | import android.support.v7.widget.LinearLayoutManager; 4 | import android.support.v7.widget.RecyclerView; 5 | 6 | 7 | /** 8 | * 自定义滑动监听,用于清除RecyclerView的不可见图片 9 | *

10 | * Created by xiuhaoli on 2017/11/13. 11 | */ 12 | public abstract class GalleryListScrollListener extends RecyclerView.OnScrollListener { 13 | 14 | @Override 15 | public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 16 | if (dx == 0 && dy == 0) { 17 | return; 18 | } 19 | LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); 20 | int firstVisible = linearLayoutManager.findFirstVisibleItemPosition(); 21 | int lastVisible = linearLayoutManager.findLastVisibleItemPosition(); 22 | if (dy > 0) { 23 | onScrolledUp(firstVisible, lastVisible); 24 | } else { 25 | onScrolledDown(firstVisible, lastVisible); 26 | } 27 | } 28 | 29 | @Override 30 | public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 31 | super.onScrollStateChanged(recyclerView, newState); 32 | } 33 | 34 | public abstract void onScrolledUp(int firstVisible, int lastVisible); 35 | 36 | public abstract void onScrolledDown(int firstVisible, int lastVisible); 37 | 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/api/ApiEh.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.api; 2 | 3 | import cn.xhl.client.manga.config.IConstants; 4 | import cn.xhl.client.manga.model.bean.response.gallery.Res_BrowseImage; 5 | import io.reactivex.Observable; 6 | import okhttp3.RequestBody; 7 | import okhttp3.ResponseBody; 8 | import retrofit2.http.Body; 9 | import retrofit2.http.GET; 10 | import retrofit2.http.Headers; 11 | import retrofit2.http.POST; 12 | import retrofit2.http.Url; 13 | 14 | /** 15 | * Eh的相关接口放这儿 16 | *

17 | * Created by xiuhaoli on 2017/12/4. 18 | */ 19 | public interface ApiEh { 20 | /** 21 | * 获取图片的url 22 | * 23 | * @param requestBody 24 | * @return 25 | */ 26 | @Headers({"Content-Type: application/json", "Accept: application/json"}) 27 | @POST(IConstants.POST_URL) 28 | Observable obtainImageUrl(@Body RequestBody requestBody); 29 | 30 | /** 31 | * 这玩意是用来访问三级页面来获取ImageKey的 32 | * 33 | * @param url 34 | * @return 35 | */ 36 | @GET 37 | Observable parseThirdPage(@Url String url); 38 | 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/api/ApiGithub.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.api; 2 | 3 | import cn.xhl.client.manga.config.IConstants; 4 | import cn.xhl.client.manga.model.bean.response.user.Res_CheckUpdate; 5 | import io.reactivex.Observable; 6 | import okhttp3.ResponseBody; 7 | import retrofit2.http.GET; 8 | import retrofit2.http.Url; 9 | 10 | /** 11 | *

12 |  *     author : xiuhaoli
13 |  *     e-mail : xiuhaoli@outlook.com
14 |  *     time   : 2018/01/23
15 |  *     version: 1.0
16 |  * 
17 | */ 18 | public interface ApiGithub { 19 | @GET(IConstants.APK_URL) 20 | Observable checkNewVersion(); 21 | 22 | /** 23 | * 下载apk 24 | * 25 | * @param url 26 | * @return 27 | */ 28 | @GET 29 | Observable downloadApk(@Url String url); 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/auth/Req_Login.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.auth; 2 | 3 | /** 4 | * @author Mike on 2017/9/22 0022. 5 | */ 6 | 7 | public class Req_Login { 8 | private String account; 9 | private String password; 10 | 11 | public String getAccount() { 12 | return account; 13 | } 14 | 15 | public void setAccount(String account) { 16 | this.account = account; 17 | } 18 | 19 | public String getPassword() { 20 | return password; 21 | } 22 | 23 | public void setPassword(String password) { 24 | this.password = password; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_BrowseImage.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | * @author lixiuhao on 2017/10/30 0030. 5 | */ 6 | 7 | public class Req_BrowseImage { 8 | private String method = "showpage"; 9 | private int gid; 10 | private int page; 11 | private String imgkey; 12 | private String showkey; 13 | 14 | public Req_BrowseImage() { 15 | } 16 | 17 | public Req_BrowseImage(String method, int gid, int page, String imgkey, String showkey) { 18 | this.method = method; 19 | this.gid = gid; 20 | this.page = page; 21 | this.imgkey = imgkey; 22 | this.showkey = showkey; 23 | } 24 | 25 | public String getMethod() { 26 | return method; 27 | } 28 | 29 | public void setMethod(String method) { 30 | this.method = method; 31 | } 32 | 33 | public int getGid() { 34 | return gid; 35 | } 36 | 37 | public void setGid(int gid) { 38 | this.gid = gid; 39 | } 40 | 41 | public int getPage() { 42 | return page; 43 | } 44 | 45 | public void setPage(int page) { 46 | this.page = page; 47 | } 48 | 49 | public String getImgkey() { 50 | return imgkey; 51 | } 52 | 53 | public void setImgkey(String imgkey) { 54 | this.imgkey = imgkey; 55 | } 56 | 57 | public String getShowkey() { 58 | return showkey; 59 | } 60 | 61 | public void setShowkey(String showkey) { 62 | this.showkey = showkey; 63 | } 64 | 65 | @Override 66 | public String toString() { 67 | return "Req_BrowseImage{" + 68 | "method='" + method + '\'' + 69 | ", gid=" + gid + 70 | ", page=" + page + 71 | ", imgkey='" + imgkey + '\'' + 72 | ", showkey='" + showkey + '\'' + 73 | '}'; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_Comment.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2017/12/21
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Req_Comment { 11 | private int galleryId; 12 | private String content; 13 | 14 | public Req_Comment(int galleryId, String content) { 15 | this.galleryId = galleryId; 16 | this.content = content; 17 | } 18 | 19 | public Req_Comment() { 20 | } 21 | 22 | 23 | public int getGalleryId() { 24 | return galleryId; 25 | } 26 | 27 | public void setGalleryId(int galleryId) { 28 | this.galleryId = galleryId; 29 | } 30 | 31 | public String getContent() { 32 | return content; 33 | } 34 | 35 | public void setContent(String content) { 36 | this.content = content; 37 | } 38 | 39 | @Override 40 | public String toString() { 41 | return "Req_Comment{" + 42 | ", galleryId=" + galleryId + 43 | ", content='" + content + '\'' + 44 | '}'; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_CommentList.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2017/12/21
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Req_CommentList { 11 | /** 12 | * 页码 13 | */ 14 | private int page; 15 | /** 16 | * 每页的长度 17 | */ 18 | private int size; 19 | 20 | private int galleryId; 21 | 22 | public Req_CommentList(int page, int size, int galleryId) { 23 | this.page = page; 24 | this.size = size; 25 | this.galleryId = galleryId; 26 | } 27 | 28 | public Req_CommentList() { 29 | } 30 | 31 | public int getGalleryId() { 32 | return galleryId; 33 | } 34 | 35 | public void setGalleryId(int galleryId) { 36 | this.galleryId = galleryId; 37 | } 38 | 39 | public int getPage() { 40 | return page; 41 | } 42 | 43 | public void setPage(int page) { 44 | this.page = page; 45 | } 46 | 47 | public int getSize() { 48 | return size; 49 | } 50 | 51 | public void setSize(int size) { 52 | this.size = size; 53 | } 54 | 55 | @Override 56 | public String toString() { 57 | return "Req_CommentList{" + 58 | "page=" + page + 59 | "galleryId=" + galleryId + 60 | ", size=" + size + 61 | '}'; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_DeleteComment.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2017/12/21
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Req_DeleteComment { 11 | private int id; 12 | private int galleryId; 13 | 14 | public Req_DeleteComment(int id, int galleryId) { 15 | this.id = id; 16 | this.galleryId = galleryId; 17 | } 18 | 19 | public Req_DeleteComment() { 20 | } 21 | 22 | public int getId() { 23 | return id; 24 | } 25 | 26 | public void setId(int id) { 27 | this.id = id; 28 | } 29 | 30 | public int getGalleryId() { 31 | return galleryId; 32 | } 33 | 34 | public void setGalleryId(int galleryId) { 35 | this.galleryId = galleryId; 36 | } 37 | 38 | @Override 39 | public String toString() { 40 | return "Req_DeleteComment{" + 41 | "id=" + id + 42 | ", galleryId=" + galleryId + 43 | '}'; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_DeleteFolder.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | * Created by xiuhaoli on 2017/12/5. 5 | */ 6 | public class Req_DeleteFolder { 7 | private String folder; 8 | 9 | public Req_DeleteFolder() { 10 | } 11 | 12 | public Req_DeleteFolder(String folder) { 13 | this.folder = folder; 14 | } 15 | 16 | public String getFolder() { 17 | return folder; 18 | } 19 | 20 | public void setFolder(String folder) { 21 | this.folder = folder; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | return "Req_DeleteFolder{" + 27 | "folder='" + folder + '\'' + 28 | '}'; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_EncryptFolder.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | * Created by xiuhaoli on 2017/12/5. 5 | */ 6 | public class Req_EncryptFolder { 7 | private String folder; 8 | 9 | public Req_EncryptFolder() { 10 | } 11 | 12 | public Req_EncryptFolder(String folder) { 13 | this.folder = folder; 14 | } 15 | 16 | public String getFolder() { 17 | return folder; 18 | } 19 | 20 | public void setFolder(String folder) { 21 | this.folder = folder; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | return "Req_DeleteFolder{" + 27 | "folder='" + folder + '\'' + 28 | '}'; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_FavoriteFolder.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | * Created by xiuhaoli on 2017/11/17. 5 | */ 6 | public class Req_FavoriteFolder { 7 | private int page; 8 | private int size; 9 | private int id;// 被点击收藏的书籍id(在请求收藏列表时是带0上来) 10 | 11 | 12 | public Req_FavoriteFolder() { 13 | } 14 | 15 | public Req_FavoriteFolder(int page, int size, int id) { 16 | this.page = page; 17 | this.size = size; 18 | this.id = id; 19 | } 20 | 21 | public int getId() { 22 | return id; 23 | } 24 | 25 | public void setId(int id) { 26 | this.id = id; 27 | } 28 | 29 | public int getPage() { 30 | return page; 31 | } 32 | 33 | public void setPage(int page) { 34 | this.page = page; 35 | } 36 | 37 | public int getSize() { 38 | return size; 39 | } 40 | 41 | public void setSize(int size) { 42 | this.size = size; 43 | } 44 | 45 | @Override 46 | public String toString() { 47 | return "Req_FavoriteFolder{" + 48 | "page=" + page + 49 | ", size=" + size + 50 | ", id=" + id + 51 | '}'; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_FavoriteFolderOther.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2018/1/18
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Req_FavoriteFolderOther { 11 | private int uid; 12 | private int page; 13 | private int size; 14 | 15 | public Req_FavoriteFolderOther() { 16 | } 17 | 18 | public Req_FavoriteFolderOther(int uid, int page, int size) { 19 | this.uid = uid; 20 | this.page = page; 21 | this.size = size; 22 | } 23 | 24 | public int getUid() { 25 | return uid; 26 | } 27 | 28 | public void setUid(int uid) { 29 | this.uid = uid; 30 | } 31 | 32 | public int getPage() { 33 | return page; 34 | } 35 | 36 | public void setPage(int page) { 37 | this.page = page; 38 | } 39 | 40 | public int getSize() { 41 | return size; 42 | } 43 | 44 | public void setSize(int size) { 45 | this.size = size; 46 | } 47 | 48 | @Override 49 | public String toString() { 50 | return "Req_FavoriteFolderOther{" + 51 | "uid=" + uid + 52 | ", page=" + page + 53 | ", size=" + size + 54 | '}'; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_GalleryList.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | * @author Mike on 2017/10/23 0023. 5 | */ 6 | public class Req_GalleryList { 7 | /** 8 | * 书籍的类型 9 | */ 10 | private String category; 11 | /** 12 | * 页码 13 | */ 14 | private int page; 15 | /** 16 | * 每页的长度 17 | */ 18 | private int size; 19 | /** 20 | * 请求的类型 21 | */ 22 | private String type; 23 | 24 | public Req_GalleryList() { 25 | } 26 | 27 | public Req_GalleryList(String category, int page, int size, String type) { 28 | this.category = category; 29 | this.page = page; 30 | this.size = size; 31 | this.type = type; 32 | } 33 | 34 | public String getType() { 35 | return type; 36 | } 37 | 38 | public void setType(String type) { 39 | this.type = type; 40 | } 41 | 42 | public String getCategory() { 43 | return category; 44 | } 45 | 46 | public void setCategory(String category) { 47 | this.category = category; 48 | } 49 | 50 | public int getPage() { 51 | return page; 52 | } 53 | 54 | public void setPage(int page) { 55 | this.page = page; 56 | } 57 | 58 | public int getSize() { 59 | return size; 60 | } 61 | 62 | public void setSize(int size) { 63 | this.size = size; 64 | } 65 | 66 | @Override 67 | public String toString() { 68 | return "Req_GalleryList{" + 69 | "category='" + category + '\'' + 70 | ", page=" + page + 71 | ", size=" + size + 72 | ", type='" + type + '\'' + 73 | '}'; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_RenameFolder.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | * Created by xiuhaoli on 2017/11/17. 5 | */ 6 | public class Req_RenameFolder { 7 | /** 8 | * 收藏夹 9 | */ 10 | private String oldFolder; 11 | private String newFolder; 12 | 13 | public Req_RenameFolder() { 14 | } 15 | 16 | public Req_RenameFolder(String oldFolder, String newFolder) { 17 | this.oldFolder = oldFolder; 18 | this.newFolder = newFolder; 19 | } 20 | 21 | public String getOldFolder() { 22 | return oldFolder; 23 | } 24 | 25 | public void setOldFolder(String oldFolder) { 26 | this.oldFolder = oldFolder; 27 | } 28 | 29 | public String getNewFolder() { 30 | return newFolder; 31 | } 32 | 33 | public void setNewFolder(String newFolder) { 34 | this.newFolder = newFolder; 35 | } 36 | 37 | @Override 38 | public String toString() { 39 | return "Req_RenameFolder{" + 40 | "oldFolder='" + oldFolder + '\'' + 41 | ", newFolder='" + newFolder + '\'' + 42 | '}'; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_Subscribe.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | * @author lixiuhao on 2017/11/1 0001. 5 | */ 6 | public class Req_Subscribe { 7 | private int id; 8 | private String folder; 9 | 10 | public Req_Subscribe() { 11 | } 12 | 13 | public Req_Subscribe(int id, String folder) { 14 | this.id = id; 15 | this.folder = folder; 16 | } 17 | 18 | public int getId() { 19 | return id; 20 | } 21 | 22 | public void setId(int id) { 23 | this.id = id; 24 | } 25 | 26 | public String getFolder() { 27 | return folder; 28 | } 29 | 30 | public void setFolder(String folder) { 31 | this.folder = folder; 32 | } 33 | 34 | @Override 35 | public String toString() { 36 | return "Req_Subscribe{" + 37 | "id=" + id + 38 | ", folder='" + folder + '\'' + 39 | '}'; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/gallery/Req_Viewed.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.gallery; 2 | 3 | /** 4 | * @author lixiuhao on 2017/11/2 0002. 5 | */ 6 | public class Req_Viewed { 7 | private int id; 8 | 9 | public Req_Viewed() { 10 | } 11 | 12 | public Req_Viewed(int id) { 13 | this.id = id; 14 | } 15 | 16 | public int getId() { 17 | return id; 18 | } 19 | 20 | public void setId(int id) { 21 | this.id = id; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | return "Req_Subscribe{" + 27 | "id=" + id + 28 | '}'; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_Attention.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.user; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2018/1/16
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Req_Attention { 11 | private String follow; 12 | 13 | public Req_Attention() { 14 | } 15 | 16 | public Req_Attention(String follow) { 17 | this.follow = follow; 18 | } 19 | 20 | public String getFollow() { 21 | return follow; 22 | } 23 | 24 | public void setFollow(String follow) { 25 | this.follow = follow; 26 | } 27 | 28 | @Override 29 | public String toString() { 30 | return "Req_Attention{" + 31 | "follow='" + follow + '\'' + 32 | '}'; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_CheckUpdate.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.user; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2018/1/9
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | @Deprecated 11 | public class Req_CheckUpdate { 12 | private int version_code; 13 | private String version_name; 14 | 15 | public Req_CheckUpdate() { 16 | } 17 | 18 | public Req_CheckUpdate(int version_code, String version_name) { 19 | this.version_code = version_code; 20 | this.version_name = version_name; 21 | } 22 | 23 | public String getVersion_name() { 24 | return version_name; 25 | } 26 | 27 | public void setVersion_name(String version_name) { 28 | this.version_name = version_name; 29 | } 30 | 31 | public int getVersion_code() { 32 | return version_code; 33 | } 34 | 35 | public void setVersion_code(int version_code) { 36 | this.version_code = version_code; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_FollowExist.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.user; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2018/1/16
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Req_FollowExist { 11 | private String artist; 12 | private String uploader; 13 | 14 | public Req_FollowExist() { 15 | } 16 | 17 | public Req_FollowExist(String artist, String uploader) { 18 | this.artist = artist; 19 | this.uploader = uploader; 20 | } 21 | 22 | public String getArtist() { 23 | return artist; 24 | } 25 | 26 | public void setArtist(String artist) { 27 | this.artist = artist; 28 | } 29 | 30 | public String getUploader() { 31 | return uploader; 32 | } 33 | 34 | public void setUploader(String uploader) { 35 | this.uploader = uploader; 36 | } 37 | 38 | @Override 39 | public String toString() { 40 | return "Req_FollowExist{" + 41 | "uploader='" + uploader + '\'' + 42 | ", artist='" + artist + '\'' + 43 | '}'; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_ModifyProfileHeader.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.user; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2017/12/23
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Req_ModifyProfileHeader { 11 | private String url; 12 | 13 | public Req_ModifyProfileHeader(String url) { 14 | this.url = url; 15 | } 16 | 17 | public String getUrl() { 18 | return url; 19 | } 20 | 21 | public void setUrl(String url) { 22 | this.url = url; 23 | } 24 | 25 | @Override 26 | public String toString() { 27 | return "Req_ModifyProfileHeader{" + 28 | "url='" + url + '\'' + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/request/user/Req_ModifyUsername.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.request.user; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2017/12/23
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Req_ModifyUsername { 11 | private String username; 12 | 13 | public Req_ModifyUsername(String username) { 14 | this.username = username; 15 | } 16 | 17 | public String getUsername() { 18 | return username; 19 | } 20 | 21 | public void setUsername(String username) { 22 | this.username = username; 23 | } 24 | 25 | @Override 26 | public String toString() { 27 | return "Req_ModifyProfileHeader{" + 28 | "username='" + username + '\'' + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/BaseResponse.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * @author Mike on 2017/9/18 0018. 7 | *

8 | * 返回的json外层 9 | */ 10 | public class BaseResponse { 11 | @SerializedName("code") 12 | private int code; 13 | @SerializedName("msg") 14 | private String msg; 15 | @SerializedName("data") 16 | private E data; 17 | 18 | public int getCode() { 19 | return code; 20 | } 21 | 22 | public void setCode(int code) { 23 | this.code = code; 24 | } 25 | 26 | public String getMsg() { 27 | return msg; 28 | } 29 | 30 | public void setMsg(String msg) { 31 | this.msg = msg; 32 | } 33 | 34 | public E getData() { 35 | return data; 36 | } 37 | 38 | public void setData(E data) { 39 | this.data = data; 40 | } 41 | 42 | @Override 43 | public String toString() { 44 | return "BaseResponse[code = " + code + ", msg = " + msg + ", data = " + data + "]"; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/auth/Res_GetVerify.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.auth; 2 | 3 | /** 4 | * @author Mike on 2017/9/29 0029. 5 | */ 6 | 7 | public class Res_GetVerify { 8 | private String msg; 9 | 10 | public String getMsg() { 11 | return msg; 12 | } 13 | 14 | public void setMsg(String msg) { 15 | this.msg = msg; 16 | } 17 | 18 | @Override 19 | public String toString() { 20 | return "Res_GetVerify[msg = " + msg + "]"; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/auth/Res_RefreshToken.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.auth; 2 | 3 | /** 4 | * @author Mike on 2017/9/28 0028. 5 | */ 6 | 7 | public class Res_RefreshToken { 8 | private String token; 9 | private int expire_time; 10 | 11 | public String getToken() { 12 | return token; 13 | } 14 | 15 | public void setToken(String token) { 16 | this.token = token; 17 | } 18 | 19 | public int getExpire_time() { 20 | return expire_time; 21 | } 22 | 23 | public void setExpire_time(int expire_time) { 24 | this.expire_time = expire_time; 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | return "Res_RefreshToken[token = " + token + ", expire_time = " + expire_time + "]"; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/auth/Res_Register.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.auth; 2 | 3 | /** 4 | * @author Mike on 2017/9/29 0029. 5 | */ 6 | 7 | public class Res_Register { 8 | private String msg; 9 | 10 | public String getMsg() { 11 | return msg; 12 | } 13 | 14 | public void setMsg(String msg) { 15 | this.msg = msg; 16 | } 17 | 18 | @Override 19 | public String toString() { 20 | return "Res_Register[msg = " + msg + "]"; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/auth/Res_ResetPassword.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.auth; 2 | 3 | /** 4 | * @author Mike on 2017/9/29 0029. 5 | */ 6 | 7 | public class Res_ResetPassword { 8 | private String msg; 9 | 10 | public String getMsg() { 11 | return msg; 12 | } 13 | 14 | public void setMsg(String msg) { 15 | this.msg = msg; 16 | } 17 | 18 | @Override 19 | public String toString() { 20 | return "Res_ResetPassword[msg = " + msg + "]"; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_BrowseImage.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.gallery; 2 | 3 | /** 4 | * @author lixiuhao on 2017/10/30 0030. 5 | */ 6 | 7 | public class Res_BrowseImage { 8 | private String n; 9 | private String i3; 10 | 11 | public Res_BrowseImage(String n, String i3) { 12 | this.n = n; 13 | this.i3 = i3; 14 | } 15 | 16 | public Res_BrowseImage() { 17 | } 18 | 19 | public String getI3() { 20 | return i3; 21 | } 22 | 23 | public void setI3(String i3) { 24 | this.i3 = i3; 25 | } 26 | 27 | public String getN() { 28 | return n; 29 | } 30 | 31 | public void setN(String n) { 32 | this.n = n; 33 | } 34 | 35 | @Override 36 | public String toString() { 37 | return "Res_BrowseImage{" + 38 | "n='" + n + '\'' + 39 | ", i3='" + i3 + '\'' + 40 | '}'; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_Comment.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.gallery; 2 | 3 | /** 4 | * Created by lixiuhao on 2017/11/2 0002. 5 | */ 6 | public class Res_Comment { 7 | private String msg; 8 | private int id; 9 | private int create_time; 10 | 11 | public Res_Comment(String msg, int id,int create_time) { 12 | this.msg = msg; 13 | this.id = id; 14 | this.create_time = create_time; 15 | } 16 | 17 | public Res_Comment() { 18 | } 19 | 20 | public int getId() { 21 | return id; 22 | } 23 | 24 | public void setId(int id) { 25 | this.id = id; 26 | } 27 | 28 | public String getMsg() { 29 | return msg; 30 | } 31 | 32 | public void setMsg(String msg) { 33 | this.msg = msg; 34 | } 35 | 36 | public int getCreate_time() { 37 | return create_time; 38 | } 39 | 40 | public void setCreate_time(int create_time) { 41 | this.create_time = create_time; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "Res_Comment{" + 47 | "id='" + id + '\'' + 48 | "msg='" + msg + '\'' + 49 | "create_time='" + create_time + '\'' + 50 | '}'; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_DeleteComment.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.gallery; 2 | 3 | /** 4 | *

 5 |  *      author xiuhaoli
 6 |  *      time   2017/12/21
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Res_DeleteComment { 11 | private String msg; 12 | 13 | public Res_DeleteComment(String msg) { 14 | this.msg = msg; 15 | } 16 | 17 | public Res_DeleteComment() { 18 | } 19 | 20 | public String getMsg() { 21 | return msg; 22 | } 23 | 24 | public void setMsg(String msg) { 25 | this.msg = msg; 26 | } 27 | 28 | @Override 29 | public String toString() { 30 | return "Res_DeleteComment{" + 31 | "msg='" + msg + '\'' + 32 | '}'; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_Folder.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.gallery; 2 | 3 | /** 4 | * Created by xiuhaoli on 2017/12/5. 5 | */ 6 | 7 | public class Res_Folder { 8 | private String msg; 9 | 10 | public Res_Folder() { 11 | } 12 | 13 | public Res_Folder(String msg) { 14 | this.msg = msg; 15 | } 16 | 17 | public String getMsg() { 18 | return msg; 19 | } 20 | 21 | public void setMsg(String msg) { 22 | this.msg = msg; 23 | } 24 | 25 | @Override 26 | public String toString() { 27 | return "Res_Folder{" + 28 | "msg='" + msg + '\'' + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_Subscribe.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.gallery; 2 | 3 | /** 4 | * @author lixiuhao on 2017/11/2 0002. 5 | */ 6 | 7 | public class Res_Subscribe { 8 | private int delta; 9 | private String msg; 10 | 11 | public Res_Subscribe(int delta, String msg) { 12 | this.delta = delta; 13 | this.msg = msg; 14 | } 15 | 16 | public Res_Subscribe() { 17 | } 18 | 19 | public int getDelta() { 20 | return delta; 21 | } 22 | 23 | public void setDelta(int delta) { 24 | this.delta = delta; 25 | } 26 | 27 | public String getMsg() { 28 | return msg; 29 | } 30 | 31 | public void setMsg(String msg) { 32 | this.msg = msg; 33 | } 34 | 35 | @Override 36 | public String toString() { 37 | return "Res_Subscribe{" + 38 | "delta=" + delta + 39 | ", msg='" + msg + '\'' + 40 | '}'; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/gallery/Res_Viewed.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.gallery; 2 | 3 | /** 4 | * @author lixiuhao on 2017/11/2 0002. 5 | */ 6 | public class Res_Viewed { 7 | private String msg; 8 | 9 | public Res_Viewed(String msg) { 10 | this.msg = msg; 11 | } 12 | 13 | public Res_Viewed() { 14 | } 15 | 16 | public String getMsg() { 17 | return msg; 18 | } 19 | 20 | public void setMsg(String msg) { 21 | this.msg = msg; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | return "Res_Viewed{" + 27 | "msg='" + msg + '\'' + 28 | '}'; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/user/Res_CheckUpdate.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.user; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2018/1/9
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Res_CheckUpdate { 11 | private String tag_name; 12 | private String name; 13 | private String body; 14 | 15 | public Res_CheckUpdate() { 16 | } 17 | 18 | public Res_CheckUpdate(String tag_name, String name, String body) { 19 | this.tag_name = tag_name; 20 | this.name = name; 21 | this.body = body; 22 | } 23 | 24 | public String getTag_name() { 25 | return tag_name; 26 | } 27 | 28 | public void setTag_name(String tag_name) { 29 | this.tag_name = tag_name; 30 | } 31 | 32 | public String getName() { 33 | return name; 34 | } 35 | 36 | public void setName(String name) { 37 | this.name = name; 38 | } 39 | 40 | public String getBody() { 41 | return body; 42 | } 43 | 44 | public void setBody(String body) { 45 | this.body = body; 46 | } 47 | 48 | @Override 49 | public String toString() { 50 | return "Res_CheckUpdate{" + 51 | "tag_name='" + tag_name + '\'' + 52 | ", name='" + name + '\'' + 53 | ", body='" + body + '\'' + 54 | '}'; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/model/bean/response/user/Res_FollowExist.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.model.bean.response.user; 2 | 3 | /** 4 | *
 5 |  *      author xiuhaoli
 6 |  *      time   2018/1/16
 7 |  *      e-mail 526193779@qq.com
 8 |  * 
9 | */ 10 | public class Res_FollowExist { 11 | private boolean artist; 12 | private boolean uploader; 13 | 14 | public Res_FollowExist() { 15 | } 16 | 17 | public Res_FollowExist(boolean artist, boolean uploader) { 18 | this.artist = artist; 19 | this.uploader = uploader; 20 | } 21 | 22 | public boolean isArtist() { 23 | return artist; 24 | } 25 | 26 | public void setArtist(boolean artist) { 27 | this.artist = artist; 28 | } 29 | 30 | public boolean isUploader() { 31 | return uploader; 32 | } 33 | 34 | public void setUploader(boolean uploader) { 35 | this.uploader = uploader; 36 | } 37 | 38 | @Override 39 | public String toString() { 40 | return "Res_FollowExist{" + 41 | "artist=" + artist + 42 | ", uploader=" + uploader + 43 | '}'; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/presenter/main/CategoryPresenter.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.presenter.main; 2 | 3 | import cn.xhl.client.manga.contract.main.CategoryContract; 4 | 5 | /** 6 | * @author Mike on 2017/10/9 0009. 7 | */ 8 | 9 | public class CategoryPresenter implements CategoryContract.Presenter { 10 | private CategoryContract.View view; 11 | 12 | public CategoryPresenter(CategoryContract.View view) { 13 | this.view = view; 14 | view.setPresenter(this); 15 | } 16 | 17 | @Override 18 | public void subscribe() { 19 | // view.initRecyclerData(); 20 | } 21 | 22 | @Override 23 | public void unSubscribe() { 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/presenter/main/HomePresenter.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.presenter.main; 2 | 3 | import cn.xhl.client.manga.contract.main.HomeContract; 4 | 5 | /** 6 | * @author Mike on 2017/10/9 0009. 7 | *

8 | * 首页的Presenter 9 | */ 10 | public class HomePresenter implements HomeContract.Presenter { 11 | private HomeContract.View view; 12 | 13 | public HomePresenter(HomeContract.View view) { 14 | this.view = view; 15 | view.setPresenter(this); 16 | } 17 | 18 | @Override 19 | public void subscribe() { 20 | 21 | } 22 | 23 | @Override 24 | public void unSubscribe() { 25 | } 26 | 27 | @Override 28 | public void search() { 29 | view.showSearchDialog(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/utils/ControlUtil.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.utils; 2 | 3 | import android.app.Activity; 4 | import android.view.View; 5 | 6 | /** 7 | * @author Mike on 2017/4/18 0018. 8 | */ 9 | 10 | public class ControlUtil { 11 | /** 12 | * 初始化控件 13 | * 14 | * @param resId 控件id 15 | * @param listener 监听器 16 | * @param activity 上下文 17 | * @return 18 | */ 19 | public static View initControlOnClick(int resId, View.OnClickListener listener, Activity activity) { 20 | if (activity == null) return null; 21 | View view = activity.findViewById(resId); 22 | view.setOnClickListener(listener); 23 | return view; 24 | } 25 | 26 | /** 27 | * @param resId 28 | * @param listener 29 | * @param view parent View 30 | * @return 31 | */ 32 | public static View initControlOnClick(int resId, View view, View.OnClickListener listener) { 33 | if (view == null) return null; 34 | view = view.findViewById(resId); 35 | view.setOnClickListener(listener); 36 | return view; 37 | } 38 | 39 | public static View initControlOnClick(int resId, Activity activity) { 40 | return initControlOnClick(resId, null, activity); 41 | } 42 | 43 | public static View initControlOnClick(int resId, View view) { 44 | return initControlOnClick(resId, view, null); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/utils/DpUtil.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.utils; 2 | 3 | import android.content.Context; 4 | import android.view.WindowManager; 5 | 6 | /** 7 | * @author lixiuhao on 2017/5/12 0012. 8 | */ 9 | public class DpUtil { 10 | /** 11 | * Dp---->Px 12 | * 13 | * @param context 14 | * @param dp 15 | * @return 16 | */ 17 | public static int dp2Px(Context context, float dp) { 18 | final float scale = context.getResources().getDisplayMetrics().density; 19 | return (int) (dp * scale + 0.5f); 20 | } 21 | 22 | /** 23 | * px转dip 24 | * 25 | * @param context 26 | * @param pxValue 27 | * @return 28 | */ 29 | public static int px2Dp(Context context, float pxValue) { 30 | final float scale = context.getResources().getDisplayMetrics().density; 31 | return (int) (pxValue / scale + 0.5f); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/utils/ResourceUtil.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.utils; 2 | 3 | import android.content.Context; 4 | import android.graphics.drawable.GradientDrawable; 5 | import android.support.annotation.AttrRes; 6 | import android.support.annotation.IdRes; 7 | import android.support.v4.app.ActivityCompat; 8 | import android.util.TypedValue; 9 | 10 | import cn.xhl.client.manga.MyActivityManager; 11 | import cn.xhl.client.manga.MyApplication; 12 | import cn.xhl.client.manga.R; 13 | 14 | /** 15 | *

16 |  *     author : xiuhaoli
17 |  *     e-mail : xiuhaoli@outlook.com
18 |  *     time   : 2017/12/09
19 |  *     version: 1.0
20 |  * 
21 | */ 22 | public class ResourceUtil { 23 | public static int getAttrData(@AttrRes int attrId) { 24 | return getAttrData(attrId, new TypedValue()); 25 | } 26 | 27 | public static int getAttrData(@AttrRes int attrId, TypedValue typedValue) { 28 | Context context = MyActivityManager.peek(); 29 | if (context != null) { 30 | context.getTheme().resolveAttribute(attrId, typedValue, true); 31 | } 32 | return typedValue.data; 33 | } 34 | 35 | public static GradientDrawable getDrawableWithRound5(@AttrRes int attrId) { 36 | int attr = getAttrData(attrId); 37 | Context context = MyApplication.getAppContext(); 38 | GradientDrawable drawable = new GradientDrawable(); 39 | drawable.setCornerRadius(DpUtil.dp2Px(context, 5)); 40 | drawable.setStroke(1, attr); 41 | drawable.setColor(attr); 42 | return drawable; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/utils/RxSchedulesHelper.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.utils; 2 | 3 | import io.reactivex.Observable; 4 | import io.reactivex.ObservableSource; 5 | import io.reactivex.ObservableTransformer; 6 | import io.reactivex.android.schedulers.AndroidSchedulers; 7 | import io.reactivex.annotations.NonNull; 8 | import io.reactivex.schedulers.Schedulers; 9 | 10 | /** 11 | * @author Mike on 2017/9/25 0025. 12 | */ 13 | public class RxSchedulesHelper { 14 | public static ObservableTransformer io_ui() { 15 | return new ObservableTransformer() { 16 | @Override 17 | public ObservableSource apply(@NonNull Observable upstream) { 18 | return upstream 19 | .subscribeOn(Schedulers.io()) 20 | .observeOn(AndroidSchedulers.mainThread()); 21 | } 22 | }; 23 | } 24 | 25 | public static ObservableTransformer computation_ui() { 26 | return new ObservableTransformer() { 27 | @Override 28 | public ObservableSource apply(@NonNull Observable upstream) { 29 | return upstream 30 | .subscribeOn(Schedulers.computation()) 31 | .observeOn(AndroidSchedulers.mainThread()); 32 | } 33 | }; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/utils/SignUtil.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.utils; 2 | 3 | import java.util.Iterator; 4 | import java.util.Map; 5 | import java.util.TreeMap; 6 | 7 | import cn.xhl.client.manga.UserInfo; 8 | import cn.xhl.client.manga.config.IConstants; 9 | import cn.xhl.client.manga.model.bean.request.BaseRequest; 10 | 11 | /** 12 | * @author Mike on 2017/9/28 0028. 13 | *

14 | * 签名工具类 15 | */ 16 | public class SignUtil { 17 | private static UserInfo userInfo = UserInfo.getInstance(); 18 | 19 | /** 20 | * 获取URL签名,按照字典序进行加签 21 | * sign = md5(md5(salt + 字典排序的参数value + salt) + 固定salt) 22 | * salt在登录时获取并存于本地,只要salt不被知道,签名就会不过, 23 | * 因此在登录的时候,salt要采用三次握手的方式加密下发, 24 | * 这样可以确保,第三方拿到token等参数由于没有salt而无法过验签 25 | * 26 | * @param params 需要进行加签的参数 27 | * @return 28 | */ 29 | public static String generateSign(String... params) { 30 | String salt = userInfo.getSalt(); 31 | String[] p = new String[params.length + 3]; 32 | p[0] = userInfo.getToken(); 33 | p[1] = SystemUtil.getTimeStamp(); 34 | p[2] = String.valueOf(userInfo.getUid()); 35 | for (int i = 0, size = params.length; i < size; i++) { 36 | p[i + 3] = params[i]; 37 | } 38 | params = StringUtil.bubbleSort(p); 39 | StringBuilder stringBuilder = new StringBuilder(""); 40 | for (String param : params) { 41 | stringBuilder.append(param); 42 | } 43 | return MD5Util.encrypt(MD5Util.encrypt(salt + stringBuilder.toString() + salt) + IConstants.SALT); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/utils/StringUtil.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.utils; 2 | 3 | 4 | import java.io.UnsupportedEncodingException; 5 | import java.util.regex.Matcher; 6 | import java.util.regex.Pattern; 7 | 8 | import okhttp3.MediaType; 9 | import okhttp3.RequestBody; 10 | 11 | /** 12 | * @author Mike on 2017/9/25 0025. 13 | */ 14 | 15 | public class StringUtil { 16 | private static final Pattern p = Pattern.compile("^(?!_)(?!.*?_$)[a-zA-Z0-9_\\u4e00-\\u9fa5]+$"); 17 | 18 | public static boolean isEmpty(Object str) { 19 | return str == null || "".equals(str); 20 | } 21 | 22 | public static boolean isNotEmpty(Object str) { 23 | return !isEmpty(str); 24 | } 25 | 26 | public static String utf_8(String str) { 27 | String result = null; 28 | try { 29 | result = new String(str.getBytes("UTF-8"), "UTF-8"); 30 | } catch (UnsupportedEncodingException e) { 31 | e.printStackTrace(); 32 | } 33 | return result; 34 | } 35 | 36 | public static RequestBody getRequestBody(String jsonText) { 37 | return RequestBody.create(MediaType.parse("Content-Type, application/json"), jsonText); 38 | } 39 | 40 | /** 41 | * 按照ascii码表排序 42 | * 43 | * @param s array 44 | * @return array 45 | */ 46 | public static String[] bubbleSort(String s[]) { 47 | for (int i = 0, size = s.length; i < size; i++) { 48 | for (int j = 0; j < size - 1; j++) { 49 | String temp; 50 | if (s[j].compareTo(s[j + 1]) > 0) { 51 | temp = s[j + 1]; 52 | s[j + 1] = s[j]; 53 | s[j] = temp; 54 | } 55 | } 56 | } 57 | return s; 58 | } 59 | 60 | public static boolean isValidName(String str) { 61 | Matcher matcher = p.matcher(str); 62 | return matcher.matches(); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/utils/SystemUtil.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.utils; 2 | 3 | import android.content.Context; 4 | import android.content.pm.PackageInfo; 5 | import android.content.pm.PackageManager; 6 | 7 | import java.util.List; 8 | import java.util.regex.Pattern; 9 | 10 | /** 11 | * @author Mike on 2017/5/5 0005. 12 | */ 13 | 14 | public class SystemUtil { 15 | 16 | public static String getTimeStamp() { 17 | return String.valueOf(System.currentTimeMillis() / 1000); 18 | } 19 | 20 | public static int getTimestamp() { 21 | return Long.valueOf(System.currentTimeMillis() / 1000).intValue(); 22 | } 23 | 24 | /** 25 | * 判断str是否为数字 26 | * 27 | * @param str 传入的字符串 28 | * @return 29 | */ 30 | public static boolean isInteger(String str) { 31 | Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); 32 | // Pattern pattern = Pattern.compile("[0-9]*"); 33 | return pattern.matcher(str).matches(); 34 | } 35 | 36 | /** 37 | * 检查手机上是否安装了指定的软件 38 | * 39 | * @param context 40 | * @param packageName:应用包名 41 | * @return 42 | */ 43 | public static boolean isInstalled(Context context, String packageName) { 44 | final PackageManager packageManager = context.getPackageManager(); 45 | List packageInfos = packageManager.getInstalledPackages(0); 46 | if (packageInfos != null) { 47 | for (int i = 0; i < packageInfos.size(); i++) { 48 | String pkName = packageInfos.get(i).packageName; 49 | if (pkName.equals(packageName)) { 50 | return true; 51 | } 52 | } 53 | } 54 | return false; 55 | } 56 | 57 | public static String formatNumber6(double d) { 58 | java.text.DecimalFormat df = new java.text.DecimalFormat("#.######"); 59 | return df.format(d); 60 | } 61 | 62 | public static String formatNumber2(double d) { 63 | java.text.DecimalFormat df = new java.text.DecimalFormat("#.##"); 64 | return df.format(d); 65 | } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/view/auth/AuthActivity.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.view.auth; 2 | 3 | import android.os.Bundle; 4 | 5 | import cn.xhl.client.manga.base.BaseActivity; 6 | import cn.xhl.client.manga.R; 7 | import cn.xhl.client.manga.base.BaseFragment; 8 | import cn.xhl.client.manga.presenter.auth.LoginPresenter; 9 | import cn.xhl.client.manga.utils.ActivityUtil; 10 | import cn.xhl.client.manga.view.auth.fragment.LoginFragment; 11 | 12 | /** 13 | * 登录认证、注册等页面 14 | */ 15 | public class AuthActivity extends BaseActivity implements BaseFragment.BackHandledInterface { 16 | 17 | public static final String LOGIN_TAG = "loginFragment"; 18 | public static final String RESET_TAG = "resetFragment"; 19 | public static final String REGISTER_TAG = "registerFragment"; 20 | 21 | private BaseFragment selectedFragment; 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | this.overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_alpha_out);// 载入载出动画 27 | LoginFragment loginFragment = (LoginFragment) getSupportFragmentManager() 28 | .findFragmentByTag(LOGIN_TAG); 29 | if (loginFragment == null) { 30 | loginFragment = LoginFragment.newInstance(); 31 | } 32 | ActivityUtil.switchContentHideCurrent(this, null, loginFragment, LOGIN_TAG, R.id.content_activity_auth);// google的demo里是把这句话放到上面的判空括号中 33 | new LoginPresenter(loginFragment); 34 | } 35 | 36 | @Override 37 | protected int layoutId() { 38 | return R.layout.activity_auth; 39 | } 40 | 41 | @Override 42 | public void setSelectedFragment(BaseFragment selectedFragment) { 43 | this.selectedFragment = selectedFragment; 44 | } 45 | 46 | @Override 47 | public void onBackPressed() { 48 | selectedFragment.onBackPressed(); 49 | } 50 | 51 | 52 | } 53 | 54 | -------------------------------------------------------------------------------- /app/src/main/java/cn/xhl/client/manga/view/main/SettingActivity.kt: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga.view.main 2 | 3 | import android.os.Bundle 4 | import cn.xhl.client.manga.R 5 | import cn.xhl.client.manga.base.BaseActivity 6 | import cn.xhl.client.manga.base.BaseFragment 7 | import cn.xhl.client.manga.presenter.main.SettingPresenter 8 | import cn.xhl.client.manga.utils.ActivityUtil 9 | import cn.xhl.client.manga.view.main.fragment.SettingFragment 10 | 11 | class SettingActivity : BaseActivity(), BaseFragment.BackHandledInterface { 12 | private lateinit var baseFragment: BaseFragment 13 | 14 | override fun layoutId(): Int { 15 | return R.layout.activity_setting 16 | } 17 | 18 | override fun onCreate(savedInstanceState: Bundle?) { 19 | super.onCreate(savedInstanceState) 20 | val settingFragment = SettingFragment() 21 | SettingPresenter(settingFragment) 22 | ActivityUtil.switchContentHideCurrent(this, null, 23 | settingFragment, 24 | SettingFragment.TAG, R.id.framelayout_activity_setting) 25 | setSlipClose() 26 | 27 | } 28 | 29 | override fun setSelectedFragment(selectedFragment: BaseFragment) { 30 | baseFragment = selectedFragment 31 | } 32 | 33 | override fun onBackPressed() { 34 | baseFragment.onBackPressed() 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/loading-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/loading-web.png -------------------------------------------------------------------------------- /app/src/main/night_mode-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/night_mode-web.png -------------------------------------------------------------------------------- /app/src/main/no_data-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/no_data-web.png -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_alpha_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_alpha_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_slide_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_slide_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/popup_alpha_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/popup_alpha_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/browse_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/custom_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dotted_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_dashboard_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notifications_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_check.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_gallery_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/loading.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/login_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/mine_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progressbar_style.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/qmui_tip_dialog_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/retry_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_auth.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_base.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_concrete_category.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_favorite.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 19 | 20 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_setting.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_splash.xml: -------------------------------------------------------------------------------- 1 | 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 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_progressbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 26 | 27 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_category.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_favorite.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_latest.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_manga_summary.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_bottomsheet_favorite_folder.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 | 29 | 30 | 38 | 39 | 49 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_category.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 17 | 18 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_summary.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 26 | 27 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/progressbar_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 25 | 26 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/layout/qmui_tip_dialog_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/recycler_only.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/layout/titlebar_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 25 | 26 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/menu/navigation.xml: -------------------------------------------------------------------------------- 1 | 2 |

3 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/arrow_left.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/arrow_right.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/broom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/broom.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/comment.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/edit.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/favorite.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/filter.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/history.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_setting_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/ic_setting_pink.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/icon_book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_book.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/icon_brightness_high.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_brightness_high.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/icon_brightness_low.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_brightness_low.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/icon_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_check.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/icon_check_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_check_normal.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/icon_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_folder.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/icon_lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_lock.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/icon_plane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_plane.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/icon_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/icon_setting.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/night_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/night_mode.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/no_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/no_data.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/search.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/span_author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_author.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/span_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_category.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/span_filecount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_filecount.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/span_posted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_posted.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/span_rating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_rating.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/span_uploader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/span_uploader.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/viewed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-hdpi/viewed.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/arrow_left.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/arrow_right.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/broom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/broom.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/comment.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/edit.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/favorite.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/filter.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/history.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_setting_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/ic_setting_pink.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/icon_book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_book.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/icon_brightness_high.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_brightness_high.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/icon_brightness_low.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_brightness_low.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/icon_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_check.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/icon_check_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_check_normal.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/icon_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_folder.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/icon_lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_lock.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/icon_plane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_plane.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/icon_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/icon_setting.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/night_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/night_mode.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/no_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/no_data.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/search.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/span_author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_author.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/span_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_category.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/span_filecount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_filecount.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/span_posted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_posted.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/span_rating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_rating.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/span_uploader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/span_uploader.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/viewed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-mdpi/viewed.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/artist_cg_sets.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/artist_cg_sets.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/chinese.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/chinese.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/cosplay.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/cosplay.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/doujinshi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/doujinshi.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/english.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/english.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/failure_img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/failure_img.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/french.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/french.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/game_cg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/game_cg.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/german.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/german.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/greek.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/greek.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/image_sets.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/image_sets.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/italian.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/italian.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/japanese.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/japanese.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/korean.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/korean.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/manga.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/manga.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/misc.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/misc.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/non_h.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/non_h.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/polish.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/polish.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/portuguese.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/portuguese.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/profile_cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/profile_cover.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/profile_header.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/profile_header.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/russian.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/russian.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/spanish.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/spanish.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/splash.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/splash.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/thai.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/thai.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/vietnamese.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/vietnamese.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-nodpi/western.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-nodpi/western.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/arrow_left.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/arrow_right.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/broom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/broom.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/comment.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/edit.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/favorite.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/filter.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/history.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_setting_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/ic_setting_pink.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_book.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_brightness_high.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_brightness_high.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_brightness_low.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_brightness_low.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_check.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_check_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_check_normal.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_folder.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_lock.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_plane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_plane.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/icon_setting.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/night_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/night_mode.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/no_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/no_data.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/search.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/span_author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_author.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/span_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_category.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/span_filecount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_filecount.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/span_posted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_posted.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/span_rating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_rating.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/span_uploader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/span_uploader.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/viewed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xhdpi/viewed.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/arrow_left.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/arrow_right.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/broom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/broom.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/comment.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/edit.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/favorite.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/filter.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/history.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_setting_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/ic_setting_pink.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_book.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_brightness_high.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_brightness_high.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_brightness_low.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_brightness_low.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_check.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_check_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_check_normal.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_folder.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_lock.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_plane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_plane.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/icon_setting.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/night_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/night_mode.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/no_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/no_data.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/search.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/span_author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_author.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/span_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_category.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/span_filecount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_filecount.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/span_posted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_posted.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/span_rating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_rating.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/span_uploader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/span_uploader.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/viewed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxhdpi/viewed.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/arrow_left.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/arrow_right.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/broom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/broom.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/comment.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/edit.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/favorite.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/filter.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/history.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_setting_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/ic_setting_pink.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_book.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_brightness_high.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_brightness_high.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_brightness_low.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_brightness_low.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_check.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_check_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_check_normal.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_folder.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_lock.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_plane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_plane.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/icon_setting.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/loading.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/night_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/night_mode.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/no_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/no_data.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/search.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/span_author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_author.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/span_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_category.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/span_filecount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_filecount.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/span_posted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_posted.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/span_rating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_rating.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/span_uploader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/span_uploader.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/viewed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/res/mipmap-xxxhdpi/viewed.png -------------------------------------------------------------------------------- /app/src/main/res/transition/explode.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | #2C2C2C 12 | #373737 13 | #747474 14 | 15 | 16 | 17 | 18 | 19 | #2C2C2C 20 | #B3FFFFFF 21 | 22 | 23 | #B3333333 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | #FFFFFF 7 | #000000 8 | #94989B 9 | #333333 10 | #66000000 11 | #F4F4F4 12 | #FFFFFF 13 | #333333 14 | #E3E3E3 15 | #00A8E1 16 | #010101 17 | #323232 18 | 19 | #FFFFFF 20 | #333333 21 | 22 | #373737 23 | #747474 24 | #2C2C2C 25 | #B3FFFFFF 26 | #3B3B3B 27 | 28 | #FFFFFF 29 | #333333 30 | #F4F4F4 31 | #333333 32 | #F4F4F4 33 | 34 | 35 | #B3FFFFFF 36 | #66FFFFFF 37 | #80000000 38 | #66000000 39 | #4D000000 40 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/xml/filepaths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 10 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/search-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/search-web.png -------------------------------------------------------------------------------- /app/src/main/span_author-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_author-web.png -------------------------------------------------------------------------------- /app/src/main/span_category-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_category-web.png -------------------------------------------------------------------------------- /app/src/main/span_filecount-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_filecount-web.png -------------------------------------------------------------------------------- /app/src/main/span_posted-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_posted-web.png -------------------------------------------------------------------------------- /app/src/main/span_rating-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_rating-web.png -------------------------------------------------------------------------------- /app/src/main/span_uploader-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/span_uploader-web.png -------------------------------------------------------------------------------- /app/src/main/viewed-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/app/src/main/viewed-web.png -------------------------------------------------------------------------------- /app/src/test/java/cn/xhl/client/manga/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package cn.xhl.client.manga; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext.kotlin_version = '1.2.20' 5 | repositories { 6 | google() 7 | jcenter() 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:3.0.1' 11 | 12 | classpath 'com.google.gms:google-services:3.1.0' 13 | // NOTE: Do not place your application dependencies here; they belong 14 | // in the individual module build.gradle files 15 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 16 | } 17 | } 18 | 19 | allprojects { 20 | repositories { 21 | jcenter() 22 | google() 23 | maven { 24 | url "https://jitpack.io" 25 | } 26 | // maven { 27 | // url 'https://dl.google.com/dl/android/maven2/' 28 | // } 29 | } 30 | } 31 | 32 | task clean(type: Delete) { 33 | delete rootProject.buildDir 34 | } 35 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your screenBuilder environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | org.gradle.parallel=true 19 | org.gradle.daemon=true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Nov 13 11:12:21 CST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip 7 | -------------------------------------------------------------------------------- /img/content.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/img/content.jpg -------------------------------------------------------------------------------- /img/list.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiuhaoli/Manga/0453fe1af5213abfb6ecea38d7038376d40382c4/img/list.jpg -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | --------------------------------------------------------------------------------