The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .github
    └── FUNDING.yml
├── .gitignore
├── LICENSE
├── README.md
├── _config.yml
├── app
    ├── build.gradle
    ├── proguard-rules.pro
    └── src
    │   ├── androidTest
    │       └── java
    │       │   └── com
    │       │       └── example
    │       │           └── jingbin
    │       │               └── cloudreader
    │       │                   └── ExampleInstrumentedTest.java
    │   ├── main
    │       ├── AndroidManifest.xml
    │       ├── ic_launcher-web.png
    │       ├── java
    │       │   └── com
    │       │   │   └── example
    │       │   │       └── jingbin
    │       │   │           └── cloudreader
    │       │   │               ├── adapter
    │       │   │                   ├── CategoryArticleAdapter.java
    │       │   │                   ├── CoinAdapter.java
    │       │   │                   ├── CollectUrlAdapter.java
    │       │   │                   ├── DouBanTopAdapter.java
    │       │   │                   ├── EverydayAdapter.java
    │       │   │                   ├── FilmAdapter.kt
    │       │   │                   ├── FilmComingAdapter.kt
    │       │   │                   ├── FilmDetailActorAdapter.kt
    │       │   │                   ├── FilmDetailImageAdapter.java
    │       │   │                   ├── GankAndroidAdapter.java
    │       │   │                   ├── GankAndroidSearchAdapter.java
    │       │   │                   ├── JokeAdapter.kt
    │       │   │                   ├── MovieDetailAdapter.kt
    │       │   │                   ├── NavigationAdapter.java
    │       │   │                   ├── NavigationContentAdapter.java
    │       │   │                   ├── OneAdapter.java
    │       │   │                   ├── TreeAdapter.java
    │       │   │                   ├── WanAndroidAdapter.java
    │       │   │                   └── WxArticleAdapter.java
    │       │   │               ├── app
    │       │   │                   ├── Constants.kt
    │       │   │                   ├── ConstantsImageUrl.kt
    │       │   │                   ├── RxCodeConstants.kt
    │       │   │                   └── app.kt
    │       │   │               ├── base
    │       │   │                   └── BaseHeaderActivity.java
    │       │   │               ├── bean
    │       │   │                   ├── AndroidBean.java
    │       │   │                   ├── BannerItemBean.kt
    │       │   │                   ├── CoinBean.kt
    │       │   │                   ├── CoinLogBean.kt
    │       │   │                   ├── CollectUrlBean.java
    │       │   │                   ├── ComingFilmBean.java
    │       │   │                   ├── FrontpageBean.java
    │       │   │                   ├── GankIoDataBean.java
    │       │   │                   ├── GankIoDayBean.java
    │       │   │                   ├── HotMovieBean.java
    │       │   │                   ├── ImageItemsBean.java
    │       │   │                   ├── MovieDetailBean.java
    │       │   │                   ├── MovieDetailBean.kt
    │       │   │                   ├── MtimeFilmeBean.java
    │       │   │                   ├── ShareArticleBean.kt
    │       │   │                   ├── UpdateBean.kt
    │       │   │                   ├── moviechild
    │       │   │                   │   ├── FilmItemBean.java
    │       │   │                   │   ├── ImagesBean.java
    │       │   │                   │   ├── PersonBean.java
    │       │   │                   │   ├── RatingBean.java
    │       │   │                   │   └── SubjectsBean.java
    │       │   │                   └── wanandroid
    │       │   │                   │   ├── ArticlesBean.java
    │       │   │                   │   ├── BaseResultBean.java
    │       │   │                   │   ├── CoinUserInfoBean.java
    │       │   │                   │   ├── DuanZiBean.java
    │       │   │                   │   ├── HomeListBean.java
    │       │   │                   │   ├── LoginBean.java
    │       │   │                   │   ├── NaviJsonBean.java
    │       │   │                   │   ├── QsbkListBean.java
    │       │   │                   │   ├── SearchTagBean.java
    │       │   │                   │   ├── TreeBean.java
    │       │   │                   │   ├── TreeItemBean.java
    │       │   │                   │   ├── WanAndroidBannerBean.java
    │       │   │                   │   ├── WxarticleDetailItemBean.java
    │       │   │                   │   └── WxarticleItemBean.java
    │       │   │               ├── data
    │       │   │                   ├── OnUserInfoListener.kt
    │       │   │                   ├── UserUtil.java
    │       │   │                   └── model
    │       │   │                   │   ├── CollectModel.java
    │       │   │                   │   ├── EverydayModel.java
    │       │   │                   │   ├── GankOtherModel.java
    │       │   │                   │   ├── JokeModel.java
    │       │   │                   │   ├── LoginModel.java
    │       │   │                   │   └── OneRepository.java
    │       │   │               ├── http
    │       │   │                   ├── HttpClient.java
    │       │   │                   ├── RequestImpl.java
    │       │   │                   └── cache
    │       │   │                   │   └── ACache.java
    │       │   │               ├── ui
    │       │   │                   ├── LoadingActivity.java
    │       │   │                   ├── MainActivity.java
    │       │   │                   ├── WebViewActivity.java
    │       │   │                   ├── douban
    │       │   │                   │   ├── DoubanTopActivity.java
    │       │   │                   │   ├── OneFragment.java
    │       │   │                   │   └── OneMovieDetailActivity.java
    │       │   │                   ├── film
    │       │   │                   │   ├── FilmFragment.java
    │       │   │                   │   └── child
    │       │   │                   │   │   ├── FilmComingFragment.java
    │       │   │                   │   │   ├── FilmDetailActivity.java
    │       │   │                   │   │   └── FilmShowingFragment.java
    │       │   │                   ├── gank
    │       │   │                   │   ├── GankFragment.java
    │       │   │                   │   └── child
    │       │   │                   │   │   ├── AndroidFragment.java
    │       │   │                   │   │   ├── CustomFragment.java
    │       │   │                   │   │   ├── EverydayFragment.java
    │       │   │                   │   │   ├── GankHomeFragment.java
    │       │   │                   │   │   └── WelfareFragment.java
    │       │   │                   ├── menu
    │       │   │                   │   ├── NavAboutActivity.java
    │       │   │                   │   ├── NavAdmireActivity.java
    │       │   │                   │   ├── NavDeedBackActivity.java
    │       │   │                   │   ├── NavDownloadActivity.java
    │       │   │                   │   ├── NavHomePageActivity.java
    │       │   │                   │   ├── NavNightModeActivity.kt
    │       │   │                   │   └── SearchActivity.java
    │       │   │                   └── wan
    │       │   │                   │   ├── WanCenterFragment.kt
    │       │   │                   │   ├── WanFragment.java
    │       │   │                   │   ├── WanProjectFragment.kt
    │       │   │                   │   └── child
    │       │   │                   │       ├── ArticleListActivity.java
    │       │   │                   │       ├── CategoryArticleFragment.java
    │       │   │                   │       ├── CategoryDetailActivity.java
    │       │   │                   │       ├── CoinDetailFragment.java
    │       │   │                   │       ├── CoinRankFragment.java
    │       │   │                   │       ├── CollectArticleFragment.java
    │       │   │                   │       ├── CollectLinkFragment.java
    │       │   │                   │       ├── HomeFragment.java
    │       │   │                   │       ├── JokeFragment.java
    │       │   │                   │       ├── LoginActivity.java
    │       │   │                   │       ├── MyCoinActivity.java
    │       │   │                   │       ├── MyCollectActivity.java
    │       │   │                   │       ├── MyShareActivity.kt
    │       │   │                   │       ├── NavigationFragment.java
    │       │   │                   │       ├── PublishActivity.kt
    │       │   │                   │       ├── SquareFragment.kt
    │       │   │                   │       ├── TreeFragment.java
    │       │   │                   │       ├── WanFindFragment.java
    │       │   │                   │       └── WendaFragment.kt
    │       │   │               ├── utils
    │       │   │                   ├── BaseTools.java
    │       │   │                   ├── DataUtil.java
    │       │   │                   ├── DebugUtil.java
    │       │   │                   ├── DensityUtil.java
    │       │   │                   ├── DialogBuild.java
    │       │   │                   ├── GlideUtil.java
    │       │   │                   ├── NightModeUtil.java
    │       │   │                   ├── PerfectClickListener.java
    │       │   │                   ├── PermissionHandler.java
    │       │   │                   ├── QRCodeUtil.java
    │       │   │                   ├── RefreshHelper.java
    │       │   │                   ├── RxSaveImage.java
    │       │   │                   ├── SDCardDirUtil.java
    │       │   │                   ├── SPUtils.java
    │       │   │                   ├── ShareUtils.java
    │       │   │                   ├── StatusBarUtil.java
    │       │   │                   ├── StringFormatUtil.java
    │       │   │                   ├── TimeUtil.java
    │       │   │                   ├── ToastUtil.java
    │       │   │                   ├── ToolbarHelper.java
    │       │   │                   ├── UpdateUtil.kt
    │       │   │                   └── WebUtil.java
    │       │   │               ├── view
    │       │   │                   ├── CommonTabPagerAdapter.kt
    │       │   │                   ├── CustomChangeBounds.java
    │       │   │                   ├── Listener.kt
    │       │   │                   ├── MyFragmentPagerAdapter.java
    │       │   │                   ├── MyNestedScrollView.java
    │       │   │                   ├── MyTextWatch.kt
    │       │   │                   ├── OnMyPageChangeListener.java
    │       │   │                   ├── ThinBoldSpan.java
    │       │   │                   ├── ViewPagerFixed.kt
    │       │   │                   ├── bigimage
    │       │   │                   │   └── BigImagePagerActivity.java
    │       │   │                   ├── byview
    │       │   │                   │   ├── NeteaseLoadMoreView.java
    │       │   │                   │   └── NeteaseRefreshHeaderView.java
    │       │   │                   ├── sliding
    │       │   │                   │   ├── Instrument.java
    │       │   │                   │   └── SlidingLayout.java
    │       │   │                   ├── statue
    │       │   │                   │   └── StatusBarUtils.java
    │       │   │                   └── viewbigimage
    │       │   │                   │   ├── HackyViewPager.java
    │       │   │                   │   └── ViewBigImageActivity.java
    │       │   │               └── viewmodel
    │       │   │                   ├── gank
    │       │   │                       ├── EverydayViewModel.java
    │       │   │                       ├── GankHomeViewModel.java
    │       │   │                       ├── GankViewModel.java
    │       │   │                       └── WelfareViewModel.java
    │       │   │                   ├── menu
    │       │   │                       └── LoginViewModel.java
    │       │   │                   ├── movie
    │       │   │                       ├── DoubanTopViewModel.java
    │       │   │                       ├── FilmViewModel.java
    │       │   │                       ├── OnMovieLoadListener.java
    │       │   │                       └── OneViewModel.java
    │       │   │                   └── wan
    │       │   │                       ├── ArticleListViewModel.java
    │       │   │                       ├── CoinListViewModel.java
    │       │   │                       ├── CollectLinkModel.java
    │       │   │                       ├── JokeViewModel.java
    │       │   │                       ├── MainViewModel.java
    │       │   │                       ├── NavigationViewModel.java
    │       │   │                       ├── PublishViewModel.kt
    │       │   │                       ├── SearchViewModel.java
    │       │   │                       ├── TreeViewModel.java
    │       │   │                       ├── WanAndroidListViewModel.java
    │       │   │                       ├── WanCenterViewModel.kt
    │       │   │                       ├── WanFindViewModel.java
    │       │   │                       └── WanNavigator.java
    │       └── res
    │       │   ├── anim
    │       │       ├── activity_down_in.xml
    │       │       ├── activity_down_out.xml
    │       │       ├── activity_up_in.xml
    │       │       ├── activity_up_out.xml
    │       │       ├── push_fade_in.xml
    │       │       ├── push_fade_out.xml
    │       │       ├── screen_zoom_in.xml
    │       │       ├── screen_zoom_out.xml
    │       │       └── transition_anim.xml
    │       │   ├── color
    │       │       ├── select_book_text.xml
    │       │       ├── select_gank_day.xml
    │       │       ├── select_home_text.xml
    │       │       └── select_navi_text.xml
    │       │   ├── drawable-hdpi
    │       │       ├── actionbar_more.png
    │       │       ├── actionbar_search.png
    │       │       ├── actionbar_share.png
    │       │       ├── ic_cloudreader.png
    │       │       └── loading_everyday.png
    │       │   ├── drawable-mdpi
    │       │       └── ic_cloudreader.png
    │       │   ├── drawable-night-xxhdpi
    │       │       ├── ic_uncollect.png
    │       │       ├── img_transition_default.png
    │       │       ├── titlebar_discover_normal.png
    │       │       ├── titlebar_discover_prs.png
    │       │       ├── titlebar_discover_selected.png
    │       │       ├── titlebar_friends_normal.png
    │       │       ├── titlebar_friends_prs.png
    │       │       ├── titlebar_friends_selected.png
    │       │       ├── titlebar_menu.png
    │       │       ├── titlebar_music_normal.png
    │       │       ├── titlebar_music_prs.png
    │       │       └── titlebar_music_selected.png
    │       │   ├── drawable-v21
    │       │       ├── ic_menu_camera.xml
    │       │       ├── ic_menu_gallery.xml
    │       │       ├── ic_menu_manage.xml
    │       │       ├── ic_menu_send.xml
    │       │       ├── ic_menu_share.xml
    │       │       ├── ic_menu_slideshow.xml
    │       │       ├── ripple_category_back.xml
    │       │       ├── ripple_item_white_bg.xml
    │       │       ├── ripple_joke_item_bg.xml
    │       │       ├── ripple_one_item_bg.xml
    │       │       ├── ripple_tab_bg.xml
    │       │       ├── shape_bg_publish.xml
    │       │       └── shape_ripple_tag_bg.xml
    │       │   ├── drawable-xhdpi
    │       │       ├── actionbar_cha.png
    │       │       ├── ic_cloudreader.png
    │       │       └── ic_history_delete.png
    │       │   ├── drawable-xxhdpi
    │       │       ├── action_publish.png
    │       │       ├── actionbar_cha.png
    │       │       ├── actionbar_help.png
    │       │       ├── actionbar_more.png
    │       │       ├── actionbar_search.png
    │       │       ├── actionbar_share.png
    │       │       ├── actionbar_web.png
    │       │       ├── home_arrow_right.png
    │       │       ├── home_arrow_right_gray.png
    │       │       ├── home_icon_day.png
    │       │       ├── home_icon_day_prs.png
    │       │       ├── home_icon_fm.png
    │       │       ├── home_icon_fm_prs.png
    │       │       ├── home_icon_music.png
    │       │       ├── home_icon_music_prs.png
    │       │       ├── home_icon_rank.png
    │       │       ├── home_icon_rank_prs.png
    │       │       ├── home_title_all.png
    │       │       ├── home_title_android.png
    │       │       ├── home_title_app.png
    │       │       ├── home_title_backend.png
    │       │       ├── home_title_flutter.png
    │       │       ├── home_title_ios.png
    │       │       ├── home_title_meizi.png
    │       │       ├── home_title_movie.png
    │       │       ├── home_title_qian.png
    │       │       ├── home_title_source.png
    │       │       ├── home_title_xia.png
    │       │       ├── homepage_header.png
    │       │       ├── ic_avatar_default.png
    │       │       ├── ic_catalogue.png
    │       │       ├── ic_catalogue_bottom.png
    │       │       ├── ic_checked.png
    │       │       ├── ic_cloudreader.png
    │       │       ├── ic_cloudreader_mip.png
    │       │       ├── ic_collected.png
    │       │       ├── ic_cylinder.png
    │       │       ├── ic_nav_about.png
    │       │       ├── ic_nav_admire.png
    │       │       ├── ic_nav_admire_right.png
    │       │       ├── ic_nav_bg_drawerlayout.png
    │       │       ├── ic_nav_coin.png
    │       │       ├── ic_nav_collect.png
    │       │       ├── ic_nav_deedback.png
    │       │       ├── ic_nav_exit.png
    │       │       ├── ic_nav_homepage.png
    │       │       ├── ic_nav_login.png
    │       │       ├── ic_nav_scan.png
    │       │       ├── ic_shortcut_coin.png
    │       │       ├── ic_shortcut_search.png
    │       │       ├── ic_shortcut_send.png
    │       │       ├── ic_uncollect.png
    │       │       ├── icon_clear.png
    │       │       ├── icon_coin_rank.png
    │       │       ├── icon_film_play.png
    │       │       ├── icon_github.png
    │       │       ├── icon_nav_night.png
    │       │       ├── icon_new.png
    │       │       ├── icon_paste.png
    │       │       ├── icon_position.png
    │       │       ├── icon_share_article.png
    │       │       ├── icon_share_wan.png
    │       │       ├── icon_tag_checked.png
    │       │       ├── icon_tag_hot.png
    │       │       ├── icon_tag_normal.png
    │       │       ├── img_default_book.png
    │       │       ├── img_default_meizi.png
    │       │       ├── img_default_movie.png
    │       │       ├── img_four_bi_three.png
    │       │       ├── img_one_bi_one.png
    │       │       ├── img_transition_default.png
    │       │       ├── img_two_bi_one.png
    │       │       ├── loading_everyday.png
    │       │       ├── loading_everyday_red.png
    │       │       ├── loading_image.png
    │       │       ├── stackblur_default.png
    │       │       ├── titlebar_discover_normal.png
    │       │       ├── titlebar_discover_prs.png
    │       │       ├── titlebar_discover_selected.png
    │       │       ├── titlebar_friends_normal.png
    │       │       ├── titlebar_friends_prs.png
    │       │       ├── titlebar_friends_selected.png
    │       │       ├── titlebar_menu.png
    │       │       ├── titlebar_music_normal.png
    │       │       ├── titlebar_music_prs.png
    │       │       └── titlebar_music_selected.png
    │       │   ├── drawable
    │       │       ├── bg_frame_deep_gray.xml
    │       │       ├── bg_frame_gray.xml
    │       │       ├── bg_save_big_image.xml
    │       │       ├── home_adjust_background.xml
    │       │       ├── home_middle_day.xml
    │       │       ├── home_middle_fm.xml
    │       │       ├── home_middle_music.xml
    │       │       ├── home_middle_rank.xml
    │       │       ├── ic_launcher_background.xml
    │       │       ├── layer_splash.xml
    │       │       ├── process_bg.xml
    │       │       ├── process_bg_webview.xml
    │       │       ├── progress_cirle.xml
    │       │       ├── ripple_item_white_bg.xml
    │       │       ├── ripple_joke_item_bg.xml
    │       │       ├── ripple_one_item_bg.xml
    │       │       ├── ripple_tab_bg.xml
    │       │       ├── select_gank_custom.xml
    │       │       ├── select_navi_bg.xml
    │       │       ├── select_one_header.xml
    │       │       ├── selector_bg_tag.xml
    │       │       ├── selector_bg_tag_no_check.xml
    │       │       ├── selector_bg_tree_tag.xml
    │       │       ├── selector_collect_check.xml
    │       │       ├── shape_banner_select.xml
    │       │       ├── shape_banner_unselect.xml
    │       │       ├── shape_bg_level.xml
    │       │       ├── shape_bg_loading.xml
    │       │       ├── shape_bg_login.xml
    │       │       ├── shape_bg_publish.xml
    │       │       ├── shape_bg_tag_normal.xml
    │       │       ├── shape_bg_tag_selected.xml
    │       │       ├── shape_detail_mask.xml
    │       │       ├── shape_edit_cursor.xml
    │       │       ├── shape_edit_line.xml
    │       │       ├── shape_line.xml
    │       │       ├── shape_no_read.xml
    │       │       ├── shape_notclickbg.xml
    │       │       ├── shape_remove.xml
    │       │       ├── shape_ripple_tag_bg.xml
    │       │       ├── shape_tab_indicator.xml
    │       │       ├── shape_transparent.xml
    │       │       ├── shape_tree_tag.xml
    │       │       ├── titlebar_disco.xml
    │       │       ├── titlebar_friends.xml
    │       │       └── titlebar_music.xml
    │       │   ├── layout
    │       │       ├── activity_category_detail.xml
    │       │       ├── activity_douban_top.xml
    │       │       ├── activity_film_detail.xml
    │       │       ├── activity_header_base.xml
    │       │       ├── activity_login.xml
    │       │       ├── activity_main.xml
    │       │       ├── activity_movie_header.xml
    │       │       ├── activity_my_collect.xml
    │       │       ├── activity_nav_about.xml
    │       │       ├── activity_nav_admire.xml
    │       │       ├── activity_nav_deed_back.xml
    │       │       ├── activity_nav_download.xml
    │       │       ├── activity_nav_home_page.xml
    │       │       ├── activity_nav_night_mode.xml
    │       │       ├── activity_one_movie_detail.xml
    │       │       ├── activity_publish.xml
    │       │       ├── activity_search.xml
    │       │       ├── activity_transition.xml
    │       │       ├── activity_view_big_image.xml
    │       │       ├── activity_web_view.xml
    │       │       ├── app_bar_main.xml
    │       │       ├── base_header_title_bar.xml
    │       │       ├── content_base.xml
    │       │       ├── content_main.xml
    │       │       ├── content_scrolling.xml
    │       │       ├── dialog_eidt_url.xml
    │       │       ├── dialog_layout_private.xml
    │       │       ├── footer_item_everyday.xml
    │       │       ├── fragment_android.xml
    │       │       ├── fragment_category_article.xml
    │       │       ├── fragment_content.xml
    │       │       ├── fragment_everyday.xml
    │       │       ├── fragment_navi.xml
    │       │       ├── fragment_one.xml
    │       │       ├── fragment_square.xml
    │       │       ├── fragment_wan_android.xml
    │       │       ├── fragment_wan_find.xml
    │       │       ├── fragment_welfare.xml
    │       │       ├── header_coin_detail.xml
    │       │       ├── header_coin_rank.xml
    │       │       ├── header_film_detail.xml
    │       │       ├── header_item_everyday.xml
    │       │       ├── header_item_gank_custom.xml
    │       │       ├── header_item_one.xml
    │       │       ├── header_item_tree.xml
    │       │       ├── header_layout.xml
    │       │       ├── header_share_article.xml
    │       │       ├── header_slide_shape.xml
    │       │       ├── header_wan_android.xml
    │       │       ├── home_middle_layout.xml
    │       │       ├── item_android.xml
    │       │       ├── item_android_skeleton.xml
    │       │       ├── item_banner_wanandroid.xml
    │       │       ├── item_category_article.xml
    │       │       ├── item_collect_link.xml
    │       │       ├── item_douban_top.xml
    │       │       ├── item_everyday_one.xml
    │       │       ├── item_everyday_three.xml
    │       │       ├── item_everyday_title.xml
    │       │       ├── item_everyday_two.xml
    │       │       ├── item_film.xml
    │       │       ├── item_film_coming.xml
    │       │       ├── item_film_detail_actor.xml
    │       │       ├── item_film_detail_image.xml
    │       │       ├── item_joke.xml
    │       │       ├── item_movie_detail_person.xml
    │       │       ├── item_navigation.xml
    │       │       ├── item_navigation_content.xml
    │       │       ├── item_navigation_title.xml
    │       │       ├── item_one.xml
    │       │       ├── item_tree.xml
    │       │       ├── item_wan_android.xml
    │       │       ├── item_wan_android_skeleton.xml
    │       │       ├── item_wan_coin.xml
    │       │       ├── item_wan_coin_rank.xml
    │       │       ├── item_welfare.xml
    │       │       ├── item_wxarticle.xml
    │       │       ├── layout_knowledge_tag.xml
    │       │       ├── layout_navi_tag.xml
    │       │       ├── layout_tree_tag.xml
    │       │       ├── load_more_view_netease.xml
    │       │       ├── nav_header_main.xml
    │       │       ├── refresh_view_netease.xml
    │       │       ├── sliding_view_bg.xml
    │       │       ├── title_douban_top.xml
    │       │       ├── video_loading_progress.xml
    │       │       └── viewpager_very_image.xml
    │       │   ├── menu
    │       │       ├── activity_main_drawer.xml
    │       │       ├── base_header_menu.xml
    │       │       ├── gank_bottomsheet.xml
    │       │       ├── main.xml
    │       │       ├── menu_coin.xml
    │       │       ├── menu_night_mode.xml
    │       │       ├── menu_publish.xml
    │       │       ├── menu_web.xml
    │       │       ├── movie_detail.xml
    │       │       ├── slide.xml
    │       │       └── webview_menu.xml
    │       │   ├── mipmap-anydpi-v26
    │       │       ├── ic_launcher.xml
    │       │       └── ic_launcher_round.xml
    │       │   ├── mipmap-hdpi
    │       │       ├── ic_launcher.png
    │       │       ├── ic_launcher_foreground.png
    │       │       └── ic_launcher_round.png
    │       │   ├── mipmap-mdpi
    │       │       ├── ic_launcher.png
    │       │       ├── ic_launcher_foreground.png
    │       │       └── ic_launcher_round.png
    │       │   ├── mipmap-xhdpi
    │       │       ├── ic_launcher.png
    │       │       ├── ic_launcher_foreground.png
    │       │       └── ic_launcher_round.png
    │       │   ├── mipmap-xxhdpi
    │       │       ├── ic_launcher.png
    │       │       ├── ic_launcher_foreground.png
    │       │       └── ic_launcher_round.png
    │       │   ├── mipmap-xxxhdpi
    │       │       ├── ic_launcher.png
    │       │       ├── ic_launcher_foreground.png
    │       │       └── ic_launcher_round.png
    │       │   ├── values-en
    │       │       └── strings.xml
    │       │   ├── values-night
    │       │       └── colors.xml
    │       │   ├── values-v21
    │       │       └── styles.xml
    │       │   ├── values-v28
    │       │       └── styles.xml
    │       │   ├── values
    │       │       ├── attrs.xml
    │       │       ├── colors.xml
    │       │       ├── dimens.xml
    │       │       ├── drawables.xml
    │       │       ├── ids.xml
    │       │       ├── strings.xml
    │       │       ├── styles.xml
    │       │       └── transition.xml
    │       │   └── xml-v25
    │       │       └── shortcuts.xml
    │   └── test
    │       └── java
    │           └── com
    │               └── example
    │                   └── jingbin
    │                       └── cloudreader
    │                           └── ExampleUnitTest.java
├── build.gradle
├── bymvvm
    ├── build.gradle
    ├── consumer-rules.pro
    ├── libs
    │   └── commons-lang-2.6.jar
    ├── proguard-rules.pro
    └── src
    │   ├── androidTest
    │       └── java
    │       │   └── me
    │       │       └── jingbin
    │       │           └── bymvvm
    │       │               └── ExampleInstrumentedTest.java
    │   ├── main
    │       ├── AndroidManifest.xml
    │       ├── java
    │       │   └── me
    │       │   │   └── jingbin
    │       │   │       └── bymvvm
    │       │   │           ├── adapter
    │       │   │               ├── BaseBindingAdapter.java
    │       │   │               └── BaseBindingHolder.java
    │       │   │           ├── base
    │       │   │               ├── BaseActivity.java
    │       │   │               ├── BaseFragment.java
    │       │   │               ├── BaseListViewModel.java
    │       │   │               ├── BaseViewModel.java
    │       │   │               ├── NoViewModel.java
    │       │   │               └── RootApplication.java
    │       │   │           ├── http
    │       │   │               ├── HttpUtils.java
    │       │   │               ├── NullOnEmptyConverterFactory.java
    │       │   │               ├── ParamNames.java
    │       │   │               └── glide
    │       │   │               │   ├── OkHttpGlideModule.java
    │       │   │               │   ├── OkHttpStreamFetcher.java
    │       │   │               │   ├── OkHttpUrlLoader.java
    │       │   │               │   └── SSLSocketClient.java
    │       │   │           ├── room
    │       │   │               ├── AppExecutors.java
    │       │   │               ├── DiskIOThreadExecutor.java
    │       │   │               ├── Injection.java
    │       │   │               ├── User.java
    │       │   │               ├── UserDao.java
    │       │   │               ├── UserDataBase.java
    │       │   │               ├── UserDataBaseSource.java
    │       │   │               └── UserDataCallback.java
    │       │   │           ├── rxbus
    │       │   │               ├── RxBus.java
    │       │   │               └── RxBusBaseMessage.java
    │       │   │           └── utils
    │       │   │               ├── BuildFactory.java
    │       │   │               ├── CheckNetwork.java
    │       │   │               ├── ClassUtil.java
    │       │   │               ├── CommonUtils.java
    │       │   │               ├── StatusBarUtil.java
    │       │   │               └── StatusBarView.java
    │       └── res
    │       │   ├── drawable-xhdpi
    │       │       ├── app_loading0.png
    │       │       ├── app_loading1.png
    │       │       ├── app_loading2.png
    │       │       ├── app_loading3.png
    │       │       └── icon_back.png
    │       │   ├── drawable-xxhdpi
    │       │       ├── icon_back.png
    │       │       └── load_err.png
    │       │   ├── drawable
    │       │       └── yun_anim.xml
    │       │   ├── layout
    │       │       ├── activity_base.xml
    │       │       ├── fragment_base.xml
    │       │       ├── layout_loading_empty.xml
    │       │       ├── layout_loading_error.xml
    │       │       └── layout_loading_view.xml
    │       │   ├── values-en
    │       │       └── strings.xml
    │       │   ├── values-night
    │       │       └── colors.xml
    │       │   └── values
    │       │       ├── colors.xml
    │       │       ├── drawables.xml
    │       │       ├── strings.xml
    │       │       └── styles.xml
    │   └── test
    │       └── java
    │           └── me
    │               └── jingbin
    │                   └── bymvvm
    │                       └── ExampleUnitTest.java
├── file
    ├── Wechat-admire.jpg
    ├── admire.md
    ├── alipay-admire.jpg
    ├── cloudreader.gif
    ├── download_200.png
    ├── images.png
    ├── images2.png
    └── title.png
├── gradle.properties
├── gradle
    └── wrapper
    │   ├── gradle-wrapper.jar
    │   └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle


/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 | 
3 | # github: [youlookwhat]
4 | custom: https://github.com/youlookwhat/CloudReader/blob/master/file/admire.md
5 | 


--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
 1 | # Built application files
 2 | *.apk
 3 | *.ap_
 4 | 
 5 | # Files for the ART/Dalvik VM
 6 | *.dex
 7 | 
 8 | # Java class files
 9 | *.class
10 | 
11 | # Generated files
12 | bin/
13 | gen/
14 | out/
15 | 
16 | # Gradle files
17 | .gradle/
18 | build/
19 | .idea/
20 | 
21 | # Local configuration file (sdk path, etc)
22 | local.properties
23 | 
24 | # Proguard folder generated by Eclipse
25 | proguard/
26 | 
27 | # Log Files
28 | *.log
29 | 
30 | # Android Studio Navigation editor temp files
31 | .navigation/
32 | 
33 | # Android Studio captures folder
34 | captures/
35 | 
36 | # Intellij
37 | *.iml
38 | .idea/workspace.xml
39 | .idea/tasks.xml
40 | .idea/gradle.xml
41 | .idea/dictionaries
42 | .idea/libraries
43 | 
44 | # Keystore files
45 | *.jks
46 | 
47 | # External native build folder generated in Android Studio 2.2 and later
48 | .externalNativeBuild
49 | 
50 | # Google Services (e.g. APIs or Firebase)
51 | google-services.json
52 | 
53 | # Freeline
54 | freeline.py
55 | freeline/
56 | freeline_project_description.json
57 | 


--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme: jekyll-theme-cayman


--------------------------------------------------------------------------------
/app/src/androidTest/java/com/example/jingbin/cloudreader/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader;
 2 | 
 3 | import android.content.Context;
 4 | import androidx.test.platform.app.InstrumentationRegistry;
 5 | import androidx.test.ext.junit.runners.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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
16 |  */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 |     @Test
20 |     public void useAppContext() throws Exception {
21 |         // Context of the app under test.
22 |         Context appContext = InstrumentationRegistry.getTargetContext();
23 | 
24 |         assertEquals("com.example.jingbin.yunyue", appContext.getPackageName());
25 |     }
26 | }
27 | 


--------------------------------------------------------------------------------
/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/ic_launcher-web.png


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/adapter/FilmAdapter.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.adapter
 2 | 
 3 | import android.app.Activity
 4 | import android.view.animation.OvershootInterpolator
 5 | import com.example.jingbin.cloudreader.R
 6 | import com.example.jingbin.cloudreader.bean.moviechild.FilmItemBean
 7 | import com.example.jingbin.cloudreader.databinding.ItemFilmBinding
 8 | import com.nineoldandroids.view.ViewHelper
 9 | import com.nineoldandroids.view.ViewPropertyAnimator
10 | import me.jingbin.bymvvm.adapter.BaseBindingAdapter
11 | import me.jingbin.bymvvm.adapter.BaseBindingHolder
12 | 
13 | /**
14 |  * Created by jingbin on 2020/12/5.
15 |  */
16 | class FilmAdapter(private val activity: Activity) : BaseBindingAdapter<FilmItemBean, ItemFilmBinding>(R.layout.item_film) {
17 | 
18 |     override fun bindView(holder: BaseBindingHolder<*, *>?, bean: FilmItemBean?, binding: ItemFilmBinding, position: Int) {
19 |         if (bean != null) {
20 |             binding.subjectsBean = bean
21 |             ViewHelper.setScaleX(binding.llOneItem, 0.8f)
22 |             ViewHelper.setScaleY(binding.llOneItem, 0.8f)
23 |             ViewPropertyAnimator.animate(binding.llOneItem).scaleX(1f).setDuration(350).setInterpolator(OvershootInterpolator()).start()
24 |             ViewPropertyAnimator.animate(binding.llOneItem).scaleY(1f).setDuration(350).setInterpolator(OvershootInterpolator()).start()
25 |         }
26 |     }
27 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/adapter/FilmComingAdapter.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.adapter
 2 | 
 3 | import android.content.Context
 4 | import com.example.jingbin.cloudreader.R
 5 | import com.example.jingbin.cloudreader.bean.ComingFilmBean
 6 | import com.example.jingbin.cloudreader.databinding.ItemFilmComingBinding
 7 | import com.example.jingbin.cloudreader.utils.DensityUtil
 8 | import me.jingbin.bymvvm.adapter.BaseBindingAdapter
 9 | import me.jingbin.bymvvm.adapter.BaseBindingHolder
10 | 
11 | /**
12 |  * Created by jingbin on 2020/12/5.
13 |  */
14 | class FilmComingAdapter(context: Context) : BaseBindingAdapter<ComingFilmBean.MoviecomingsBean, ItemFilmComingBinding>(R.layout.item_film_coming) {
15 | 
16 |     private val width: Int
17 | 
18 |     init {
19 |         val px = DensityUtil.dip2px(context, 36f)
20 |         width = (DensityUtil.getDisplayWidth() - px) / 3
21 |     }
22 | 
23 |     override fun bindView(holder: BaseBindingHolder<*, *>?, bean: ComingFilmBean.MoviecomingsBean?, binding: ItemFilmComingBinding, position: Int) {
24 |         binding.bean = bean
25 |         DensityUtil.setWidthHeight(binding.ivTopPhoto, width, 0.758f)
26 |     }
27 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/adapter/FilmDetailActorAdapter.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.adapter
 2 | 
 3 | import com.example.jingbin.cloudreader.R
 4 | import com.example.jingbin.cloudreader.bean.FilmDetailNewBean
 5 | import com.example.jingbin.cloudreader.databinding.ItemFilmDetailActorBinding
 6 | import me.jingbin.bymvvm.adapter.BaseBindingAdapter
 7 | import me.jingbin.bymvvm.adapter.BaseBindingHolder
 8 | 
 9 | /**
10 |  * Created by jingbin on 2020/12/5.
11 |  */
12 | class FilmDetailActorAdapter : BaseBindingAdapter<FilmDetailNewBean.ActorBean, ItemFilmDetailActorBinding>(R.layout.item_film_detail_actor) {
13 | 
14 |     override fun bindView(holder: BaseBindingHolder<*, *>?, bean: FilmDetailNewBean.ActorBean?, binding: ItemFilmDetailActorBinding, position: Int) {
15 |         binding.personBean = bean
16 |     }
17 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/adapter/JokeAdapter.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.adapter
 2 | 
 3 | import com.example.jingbin.cloudreader.R
 4 | import com.example.jingbin.cloudreader.bean.wanandroid.DuanZiBean
 5 | import com.example.jingbin.cloudreader.databinding.ItemJokeBinding
 6 | import com.example.jingbin.cloudreader.utils.TimeUtil
 7 | import me.jingbin.bymvvm.adapter.BaseBindingAdapter
 8 | import me.jingbin.bymvvm.adapter.BaseBindingHolder
 9 | 
10 | /**
11 |  * Created by jingbin on 2016/11/25.update 2020/12/5
12 |  */
13 | class JokeAdapter : BaseBindingAdapter<DuanZiBean, ItemJokeBinding>(R.layout.item_joke) {
14 | 
15 |     override fun bindView(holder: BaseBindingHolder<*, *>?, bean: DuanZiBean, binding: ItemJokeBinding, position: Int) {
16 |         binding.bean = bean
17 |         binding.time = TimeUtil.formatDataTime((bean.createTime.toString() + "000").toLong())
18 |     }
19 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/adapter/MovieDetailAdapter.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.adapter
 2 | 
 3 | import com.example.jingbin.cloudreader.R
 4 | import com.example.jingbin.cloudreader.bean.moviechild.PersonBean
 5 | import com.example.jingbin.cloudreader.databinding.ItemMovieDetailPersonBinding
 6 | import com.example.jingbin.cloudreader.ui.WebViewActivity
 7 | import me.jingbin.bymvvm.adapter.BaseBindingAdapter
 8 | import me.jingbin.bymvvm.adapter.BaseBindingHolder
 9 | 
10 | /**
11 |  * Created by jingbin on 2020/12/5.
12 |  */
13 | class MovieDetailAdapter : BaseBindingAdapter<PersonBean, ItemMovieDetailPersonBinding>(R.layout.item_movie_detail_person) {
14 | 
15 |     override fun bindView(holder: BaseBindingHolder<*, *>?, bean: PersonBean?, binding: ItemMovieDetailPersonBinding, position: Int) {
16 |         if (bean != null) {
17 |             binding.personBean = bean
18 |             binding.llItem.setOnClickListener {
19 |                 if (!bean.alt.isNullOrEmpty()) {
20 |                     WebViewActivity.loadUrl(it.context, bean.alt, bean.name)
21 |                 }
22 |             }
23 |         }
24 |     }
25 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/adapter/NavigationAdapter.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.adapter;
 2 | 
 3 | import com.example.jingbin.cloudreader.R;
 4 | import com.example.jingbin.cloudreader.bean.wanandroid.NaviJsonBean;
 5 | import com.example.jingbin.cloudreader.databinding.ItemNavigationBinding;
 6 | 
 7 | import me.jingbin.bymvvm.adapter.BaseBindingAdapter;
 8 | import me.jingbin.bymvvm.adapter.BaseBindingHolder;
 9 | 
10 | /**
11 |  * Created by jingbin on 2018/10/13.
12 |  */
13 | 
14 | public class NavigationAdapter extends BaseBindingAdapter<NaviJsonBean.DataBean, ItemNavigationBinding> {
15 | 
16 |     public NavigationAdapter() {
17 |         super(R.layout.item_navigation);
18 |     }
19 | 
20 |     @Override
21 |     protected void bindView(BaseBindingHolder holder, NaviJsonBean.DataBean dataBean, ItemNavigationBinding binding, int position) {
22 |         if (dataBean != null) {
23 |             binding.tvTitle.setSelected(dataBean.isSelected());
24 |             binding.setBean(dataBean);
25 |             binding.tvTitle.setOnClickListener(v -> {
26 |                 if (listener != null) {
27 |                     listener.onSelected(position);
28 |                 }
29 |             });
30 |         }
31 |     }
32 | 
33 |     private OnSelectListener listener;
34 | 
35 |     public void setOnSelectListener(OnSelectListener listener) {
36 |         this.listener = listener;
37 |     }
38 | 
39 |     public interface OnSelectListener {
40 |         void onSelected(int position);
41 |     }
42 | 
43 | }
44 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/app/Constants.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.app
 2 | 
 3 | /**
 4 |  * Created by jingbin on 2016/11/26.
 5 |  * 固定参数
 6 |  */
 7 | open class Constants {
 8 | 
 9 |     companion object {
10 |         // 下载的链接
11 |         const val DOWNLOAD_URL = "https://www.coolapk.com/apk/127875"
12 |         // 隐私政策
13 |         const val PRIVATE_URL = "https://jingbin127.gitee.io/apiserver/privacy.html"
14 | 
15 |         // 深色模式
16 |         const val KEY_MODE_NIGHT = "mode-night"
17 |         // 跟随系统
18 |         const val KEY_MODE_SYSTEM = "mode-system"
19 |         // 是否打开过酷安应用市场
20 |         const val SHOW_MARKET = "show_market"
21 |         // 酷安包名
22 |         const val COOLAPK_PACKAGE = "com.coolapk.market"
23 |         // 热映缓存
24 |         const val ONE_HOT_MOVIE = "one_hot_movie"
25 |         // 保存每日推荐轮播图url
26 |         const val BANNER_PIC = "gank_banner_pic"
27 |         // 保存每日推荐轮播图的跳转数据
28 |         const val BANNER_PIC_DATA = "gank_banner_data"
29 |         // 保存每日推荐recyclerview内容
30 |         const val EVERYDAY_CONTENT = "everyday_content"
31 |         // 干货订制类别
32 |         const val GANK_TYPE = "gank_type"
33 |         // 是否登录
34 |         const val IS_LOGIN = "is_login"
35 |         // 是否第一次收藏网址
36 |         const val IS_FIRST_COLLECTURL = "isFirstCollectUrl"
37 |         // 问题反馈消息提示
38 |         const val MESSAGE_READ_TIP = "message_read_tip"
39 |         // 深色模式消息提示
40 |         const val MESSAGE_READ_NIGHT_TIP = "message_read_night_tip"
41 |         // 发现页内容角标
42 |         const val FIND_POSITION = "find_position"
43 |         // 是否同意隐私政策
44 |         const val IS_AGREE_PRIVATE = "is_agree_private"
45 |     }
46 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/app/RxCodeConstants.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.app
 2 | 
 3 | /**
 4 |  * Created by jingbin on 2020/12/3.
 5 |  */
 6 | class RxCodeConstants {
 7 | 
 8 |     companion object {
 9 |         // 每日推荐跳转对应type下
10 |         const val JUMP_TYPE = 0
11 |         // 首页跳转到电影栏
12 |         const val JUMP_TYPE_TO_ONE = 1
13 |         // 滑动到当前图片的position
14 |         const val JUMP_CURRENT_POSITION = 2
15 |         // 登录状态处理
16 |         const val LOGIN = 3
17 |         // 发现页内容订制
18 |         const val FIND_CUSTOM = 4
19 |         // 刷新广场数据
20 |         const val REFRESH_SQUARE_DATA = 5
21 |     }
22 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/app/app.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.app
 2 | 
 3 | import com.example.jingbin.cloudreader.BuildConfig
 4 | import com.example.jingbin.cloudreader.utils.NightModeUtil
 5 | import com.tencent.bugly.crashreport.CrashReport
 6 | import me.jingbin.bymvvm.base.RootApplication
 7 | 
 8 | /**
 9 |  * Created by jingbin on 2016/11/22.
10 |  * Update  on 2020/12/02.
11 |  */
12 | open class App : RootApplication() {
13 | 
14 |     companion object {
15 |         // 是否是快捷方式进来
16 |         @JvmField
17 |         var isShortcuts: Boolean = false
18 | 
19 |         private lateinit var app: App
20 | 
21 |         // @JvmStatic 加上后可以直接 getInstance(),不然需要加上Companion
22 |         @JvmStatic
23 |         fun getInstance(): App {
24 |             return app
25 |         }
26 |     }
27 | 
28 |     override fun onCreate() {
29 |         super.onCreate()
30 |         app = this
31 | //        HttpUtils.getInstance().init(this);
32 |         NightModeUtil.initNightMode()
33 |         CrashReport.initCrashReport(applicationContext, "3977b2d86f", BuildConfig.DEBUG)
34 |     }
35 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/BannerItemBean.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean
 2 | 
 3 | import java.io.Serializable
 4 | 
 5 | /**
 6 |  * Created by jingbin on 2020/12/5.
 7 |  */
 8 | class BannerItemBean : Serializable {
 9 |     companion object {
10 |         private const val serialVersionUID = 1L
11 |     }
12 | 
13 |     val randpic: String? = null
14 |     val code: String? = null
15 |     val type = 0
16 |     val randpic_desc: String? = null
17 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/CoinBean.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean
 2 | 
 3 | /**
 4 |  * Created by jingbin on 2020/12/3.
 5 |  */
 6 | class CoinBean {
 7 | 
 8 |     /**
 9 |      * curPage : 1
10 |      * datas : []
11 |      * offset : 0
12 |      * over : false
13 |      * pageCount : 3
14 |      * size : 20
15 |      * total : 50
16 |      */
17 |     val curPage = 0
18 |     val over = false
19 |     val pageCount = 0
20 |     val size = 0
21 |     val total = 0
22 |     val datas: List<CoinLogBean>? = null
23 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/CoinLogBean.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean
 2 | 
 3 | /**
 4 |  * Created by jingbin on 2020/12/3.
 5 |  */
 6 | class CoinLogBean {
 7 |     /**
 8 |      * coinCount : 12
 9 |      * date : 1569468233000
10 |      * desc : 2019-09-26 11:23:53 分享文章 , 积分:10 + 2
11 |      * id : 53889
12 |      * reason : 分享文章
13 |      * type : 3
14 |      * userId : 1534
15 |      * userName : jingbin
16 |      */
17 |     val coinCount = 0
18 |     val date: Long = 0
19 |     val desc: String? = null
20 |     val id = 0
21 |     val reason: String? = null
22 |     val type = 0
23 |     val userId = 0
24 |     val username: String? = null
25 |     val nickname: String? = null
26 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/ImageItemsBean.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean;
 2 | 
 3 | import java.io.Serializable;
 4 | import java.util.ArrayList;
 5 | 
 6 | public class ImageItemsBean implements Serializable {
 7 |     private static final long serialVersionUID = 1L;
 8 |     private ArrayList<String> imageList;
 9 |     private ArrayList<String> imageTitles;
10 | 
11 |     public ArrayList<String> getImageList() {
12 |         return imageList;
13 |     }
14 | 
15 |     public void setImageList(ArrayList<String> imageList) {
16 |         this.imageList = imageList;
17 |     }
18 | 
19 |     public ArrayList<String> getImageTitles() {
20 |         return imageTitles;
21 |     }
22 | 
23 |     public void setImageTitles(ArrayList<String> imageTitles) {
24 |         this.imageTitles = imageTitles;
25 |     }
26 | }
27 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/MovieDetailBean.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean
 2 | 
 3 | class FilmDetailNewBean {
 4 | 
 5 |     val image: String? = null
 6 |     val titleCn: String? = null
 7 |     val titleEn: String? = null
 8 |     val rating: String? = null
 9 |     val scoreCount: String? = null
10 |     val year: String? = null
11 |     val content: String? = null
12 |     val type: List<String>? = null
13 |     val runTime: String? = null
14 |     val url: String? = null
15 |     val commonSpecial: String? = null
16 |     val wapUrl: String? = null
17 |     val director: DirectorBean? = null
18 |     val actorList: List<ActorBean>? = null
19 |     val directors: List<String>? = null
20 |     val actors: List<String>? = null
21 |     val release: ReleaseBean? = null
22 |     val images: List<String>? = null
23 |     val video: String? = null
24 |     val videos: List<VideoBean>? = null
25 | 
26 |     class VideoBean {
27 |         val url: String? = null
28 |         val image: String? = null
29 |         val title: String? = null
30 |         val length: Int = 0
31 |     }
32 | 
33 |     class ReleaseBean {
34 |         val location: String? = null
35 |         val date: String? = null
36 |     }
37 | 
38 |     class DirectorBean {
39 |         val directorName: String? = null
40 |         val directorNameEn: String? = null
41 |         val directorImg: String? = null
42 | 
43 |     }
44 | 
45 |     class ActorBean {
46 |         var actor: String? = null
47 |         var actorEn: String? = null
48 |         var actorImg: String? = null
49 |         var roleName: String? = null
50 |     }
51 | }
52 | 
53 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/MtimeFilmeBean.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean;
 2 | 
 3 | import com.example.jingbin.cloudreader.bean.moviechild.FilmItemBean;
 4 | 
 5 | import java.util.List;
 6 | 
 7 | /**
 8 |  * @author jingbin
 9 |  */
10 | public class MtimeFilmeBean {
11 | 
12 |     private List<FilmItemBean> ms;
13 | 
14 |     public List<FilmItemBean> getMs() {
15 |         return ms;
16 |     }
17 | 
18 |     public void setMs(List<FilmItemBean> ms) {
19 |         this.ms = ms;
20 |     }
21 | }
22 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/ShareArticleBean.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean
 2 | 
 3 | import com.example.jingbin.cloudreader.bean.wanandroid.WxarticleDetailItemBean
 4 | 
 5 | /**
 6 |  * Created by jingbin on 2021/1/22.
 7 |  */
 8 | class ShareArticleBean {
 9 | 
10 |     var shareArticles: WxarticleDetailItemBean? = null
11 |     var coinInfo: CoinInfoBean? = null
12 | 
13 |     class CoinInfoBean {
14 |         val coinCount: Int = 0
15 |         val userId: Int = 0
16 |         val level: Int = 0
17 |         val nickname: String = ""
18 |         val rank: String = ""
19 |         val username: String = ""
20 |     }
21 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/UpdateBean.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean
 2 | 
 3 | /**
 4 |  * Created by jingbin on 2020/12/3.
 5 |  */
 6 | open class UpdateBean {
 7 | 
 8 |     var name: String? = null
 9 |     // 版本号
10 |     val version: String = "1"
11 |     // 更新日志
12 |     var changelog: String? = null
13 |     // 1显示弹框,不然不显示
14 |     var isShow: String? = "0"
15 |     // 更新时间
16 |     var updated_at: Long = 0
17 |     // 版本名称
18 |     var versionShort: String? = null
19 |     var build: String? = null
20 |     var installUrl: String? = ""
21 |     var update_url: String? = null
22 |     // 是否跳应用市场
23 |     var isJumpMarket: Int = 1
24 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/moviechild/ImagesBean.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean.moviechild;
 2 | 
 3 | import androidx.databinding.BaseObservable;
 4 | import androidx.databinding.Bindable;
 5 | 
 6 | import com.example.jingbin.cloudreader.BR;
 7 | 
 8 | import java.io.Serializable;
 9 | 
10 | import me.jingbin.bymvvm.http.ParamNames;
11 | 
12 | /**
13 |  * Created by jingbin on 2016/11/25.
14 |  */
15 | 
16 | public class ImagesBean extends BaseObservable implements Serializable{
17 |     /**
18 |      * small : https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p2378133884.jpg
19 |      * large : https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p2378133884.jpg
20 |      * medium : https://img3.doubanio.com/view/movie_poster_cover/spst/public/p2378133884.jpg
21 |      */
22 |     @ParamNames("small")
23 |     private String small;
24 |     @ParamNames("large")
25 |     private String large;
26 |     @ParamNames("medium")
27 |     private String medium;
28 |     @Bindable
29 |     public String getSmall() {
30 |         return small;
31 |     }
32 |     @Bindable
33 |     public String getLarge() {
34 |         return large;
35 |     }
36 |     @Bindable
37 |     public String getMedium() {
38 |         return medium;
39 |     }
40 | 
41 |     public void setSmall(String small) {
42 |         this.small = small;
43 |         notifyPropertyChanged(BR.small);
44 |     }
45 | 
46 |     public void setLarge(String large) {
47 |         this.large = large;
48 |         notifyPropertyChanged(BR.large);
49 |     }
50 | 
51 |     public void setMedium(String medium) {
52 |         this.medium = medium;
53 |         notifyPropertyChanged(BR.medium);
54 |     }
55 | }
56 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/moviechild/RatingBean.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean.moviechild;
 2 | 
 3 | import androidx.databinding.BaseObservable;
 4 | import androidx.databinding.Bindable;
 5 | 
 6 | import com.example.jingbin.cloudreader.BR;
 7 | 
 8 | import java.io.Serializable;
 9 | 
10 | import me.jingbin.bymvvm.http.ParamNames;
11 | 
12 | /**
13 |  * Created by jingbin on 2016/11/25.
14 |  */
15 | 
16 | public class RatingBean extends BaseObservable implements Serializable {
17 |     /**
18 |      * max : 10
19 |      * average : 6.9
20 |      * stars : 35
21 |      * min : 0
22 |      */
23 |     @ParamNames("max")
24 |     private int max;
25 |     @ParamNames("average")
26 |     private double average;
27 |     @ParamNames("stars")
28 |     private String stars;
29 |     @ParamNames("min")
30 |     private int min;
31 | 
32 |     @Bindable
33 |     public int getMax() {
34 |         return max;
35 |     }
36 | 
37 |     @Bindable
38 |     public double getAverage() {
39 |         return average;
40 |     }
41 | 
42 |     @Bindable
43 |     public String getStars() {
44 |         return stars;
45 |     }
46 | 
47 |     @Bindable
48 |     public int getMin() {
49 |         return min;
50 |     }
51 | 
52 |     public void setMax(int max) {
53 |         this.max = max;
54 |         notifyPropertyChanged(BR.max);
55 |     }
56 | 
57 |     public void setAverage(double average) {
58 |         this.average = average;
59 |         notifyPropertyChanged(BR.average);
60 |     }
61 | 
62 |     public void setStars(String stars) {
63 |         this.stars = stars;
64 |         notifyPropertyChanged(BR.stars);
65 |     }
66 | 
67 |     public void setMin(int min) {
68 |         this.min = min;
69 |         notifyPropertyChanged(BR.min);
70 |     }
71 | }
72 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/wanandroid/BaseResultBean.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean.wanandroid;
 2 | 
 3 | import androidx.databinding.BaseObservable;
 4 | import androidx.databinding.Bindable;
 5 | 
 6 | import com.example.jingbin.cloudreader.BR;
 7 | 
 8 | public class BaseResultBean<T> extends BaseObservable {
 9 | 
10 |     private T data;
11 |     private int errorCode;
12 |     private String errorMsg;
13 | 
14 |     @Bindable
15 |     public T getData() {
16 |         return data;
17 |     }
18 | 
19 |     public void setData(T data) {
20 |         this.data = data;
21 |         notifyPropertyChanged(BR.data);
22 |     }
23 | 
24 |     @Bindable
25 |     public int getErrorCode() {
26 |         return errorCode;
27 |     }
28 | 
29 |     public void setErrorCode(int errorCode) {
30 |         this.errorCode = errorCode;
31 |         notifyPropertyChanged(BR.errorCode);
32 |     }
33 | 
34 |     @Bindable
35 |     public String getErrorMsg() {
36 |         return errorMsg;
37 |     }
38 | 
39 |     public void setErrorMsg(String errorMsg) {
40 |         this.errorMsg = errorMsg;
41 |         notifyPropertyChanged(BR.errorMsg);
42 |     }
43 | }
44 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/wanandroid/CoinUserInfoBean.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean.wanandroid;
 2 | 
 3 | import androidx.databinding.BaseObservable;
 4 | import androidx.databinding.Bindable;
 5 | 
 6 | import com.example.jingbin.cloudreader.BR;
 7 | 
 8 | public class CoinUserInfoBean extends BaseObservable {
 9 | 
10 |     /**
11 |      * coinCount : 451
12 |      * rank : 7
13 |      * userId : 2
14 |      * username : x**oyang
15 |      */
16 | 
17 |     private int coinCount;
18 |     private int rank;
19 |     private int userId;
20 |     // 有 **
21 |     private String username;
22 | 
23 |     @Bindable
24 |     public int getCoinCount() {
25 |         return coinCount;
26 |     }
27 | 
28 |     public void setCoinCount(int coinCount) {
29 |         this.coinCount = coinCount;
30 |         notifyPropertyChanged(BR.coinCount);
31 |     }
32 | 
33 |     @Bindable
34 |     public int getRank() {
35 |         return rank;
36 |     }
37 | 
38 |     public void setRank(int rank) {
39 |         this.rank = rank;
40 |         notifyPropertyChanged(BR.rank);
41 |     }
42 | 
43 |     @Bindable
44 |     public int getUserId() {
45 |         return userId;
46 |     }
47 | 
48 |     public void setUserId(int userId) {
49 |         this.userId = userId;
50 |         notifyPropertyChanged(BR.userId);
51 |     }
52 | 
53 |     @Bindable
54 |     public String getUsername() {
55 |         return username;
56 |     }
57 | 
58 |     public void setUsername(String username) {
59 |         this.username = username;
60 |         notifyPropertyChanged(BR.username);
61 |     }
62 | }
63 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/wanandroid/TreeBean.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean.wanandroid;
 2 | 
 3 | import androidx.databinding.BaseObservable;
 4 | import androidx.databinding.Bindable;
 5 | 
 6 | import com.example.jingbin.cloudreader.BR;
 7 | 
 8 | import java.io.Serializable;
 9 | import java.util.List;
10 | 
11 | /**
12 |  * @author jingbin
13 |  * @data 2018/9/15
14 |  * @description
15 |  */
16 | 
17 | public class TreeBean extends BaseObservable implements Serializable {
18 | 
19 |     private static final long serialVersionUID = 1L;
20 |     private int errorCode;
21 |     private String errorMsg;
22 |     private List<TreeItemBean> data;
23 | 
24 |     @Bindable
25 |     public int getErrorCode() {
26 |         return errorCode;
27 |     }
28 | 
29 |     public void setErrorCode(int errorCode) {
30 |         this.errorCode = errorCode;
31 |         notifyPropertyChanged(BR.errorCode);
32 |     }
33 | 
34 |     @Bindable
35 |     public String getErrorMsg() {
36 |         return errorMsg;
37 |     }
38 | 
39 |     public void setErrorMsg(String errorMsg) {
40 |         this.errorMsg = errorMsg;
41 |         notifyPropertyChanged(BR.errorMsg);
42 |     }
43 | 
44 |     @Bindable
45 |     public List<TreeItemBean> getData() {
46 |         return data;
47 |     }
48 | 
49 |     public void setData(List<TreeItemBean> data) {
50 |         this.data = data;
51 |         notifyPropertyChanged(BR.data);
52 |     }
53 | 
54 | }
55 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/bean/wanandroid/WxarticleDetailItemBean.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.bean.wanandroid;
 2 | 
 3 | import java.util.List;
 4 | 
 5 | /**
 6 |  * @author jingbin
 7 |  * @data 2019-09-29
 8 |  * @description
 9 |  */
10 | public class WxarticleDetailItemBean {
11 |     private int total;
12 |     private List<ArticlesBean> datas;
13 | 
14 |     public int getTotal() {
15 |         return total;
16 |     }
17 | 
18 |     public void setTotal(int total) {
19 |         this.total = total;
20 |     }
21 | 
22 |     public List<ArticlesBean> getDatas() {
23 |         return datas;
24 |     }
25 | 
26 |     public void setDatas(List<ArticlesBean> datas) {
27 |         this.datas = datas;
28 |     }
29 | }
30 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/data/OnUserInfoListener.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.data
 2 | 
 3 | import me.jingbin.bymvvm.room.User
 4 | 
 5 | /**
 6 |  * Created by jingbin on 2020/12/5.
 7 |  */
 8 | interface OnUserInfoListener {
 9 | 
10 |     fun onSuccess(user: User?)
11 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/http/RequestImpl.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.http;
 2 | 
 3 | import io.reactivex.disposables.Disposable;
 4 | 
 5 | /**
 6 |  * Created by jingbin on 2017/1/17.
 7 |  * 用于数据请求的回调
 8 |  */
 9 | 
10 | public interface RequestImpl {
11 |     void loadSuccess(Object object);
12 | 
13 |     void loadFailed();
14 | 
15 |     void addSubscription(Disposable subscription);
16 | }
17 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/ui/menu/NavDownloadActivity.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.ui.menu;
 2 | 
 3 | import android.content.Context;
 4 | import android.content.Intent;
 5 | import android.os.Bundle;
 6 | import android.view.View;
 7 | 
 8 | import com.example.jingbin.cloudreader.R;
 9 | import com.example.jingbin.cloudreader.app.Constants;
10 | import me.jingbin.bymvvm.base.BaseActivity;
11 | import com.example.jingbin.cloudreader.databinding.ActivityNavDownloadBinding;
12 | import com.example.jingbin.cloudreader.utils.PerfectClickListener;
13 | import com.example.jingbin.cloudreader.utils.QRCodeUtil;
14 | import com.example.jingbin.cloudreader.utils.ShareUtils;
15 | import me.jingbin.bymvvm.base.NoViewModel;
16 | 
17 | public class NavDownloadActivity extends BaseActivity<NoViewModel, ActivityNavDownloadBinding> {
18 | 
19 |     @Override
20 |     protected void onCreate(Bundle savedInstanceState) {
21 |         super.onCreate(savedInstanceState);
22 |         setContentView(R.layout.activity_nav_download);
23 |         showContentView();
24 | 
25 |         setTitle("扫码下载");
26 |         QRCodeUtil.showThreadImage(this, Constants.DOWNLOAD_URL, bindingView.ivErweima, R.drawable.ic_cloudreader_mip);
27 |         bindingView.tvShare.setOnClickListener(new PerfectClickListener() {
28 |             @Override
29 |             protected void onNoDoubleClick(View v) {
30 |                 ShareUtils.share(v.getContext(), R.string.string_share_text);
31 |             }
32 |         });
33 |     }
34 | 
35 |     public static void start(Context mContext) {
36 |         Intent intent = new Intent(mContext, NavDownloadActivity.class);
37 |         mContext.startActivity(intent);
38 |     }
39 | }
40 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/ui/wan/child/LoginActivity.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.ui.wan.child;
 2 | 
 3 | import android.content.Context;
 4 | import android.content.Intent;
 5 | import android.os.Bundle;
 6 | import android.view.View;
 7 | 
 8 | import com.example.jingbin.cloudreader.R;
 9 | import com.example.jingbin.cloudreader.app.RxCodeConstants;
10 | import com.example.jingbin.cloudreader.databinding.ActivityLoginBinding;
11 | import com.example.jingbin.cloudreader.viewmodel.menu.LoginViewModel;
12 | 
13 | import me.jingbin.bymvvm.base.BaseActivity;
14 | import me.jingbin.bymvvm.rxbus.RxBus;
15 | 
16 | /**
17 |  * 玩安卓登录
18 |  *
19 |  * @author jingbin
20 |  */
21 | public class LoginActivity extends BaseActivity<LoginViewModel, ActivityLoginBinding> {
22 | 
23 |     @Override
24 |     protected void onCreate(Bundle savedInstanceState) {
25 |         super.onCreate(savedInstanceState);
26 |         setContentView(R.layout.activity_login);
27 |         setTitle("玩安卓登录");
28 |         showContentView();
29 |         bindingView.setViewModel(viewModel);
30 |     }
31 | 
32 |     public void register(View view) {
33 |         viewModel.register().observe(this, this::loadSuccess);
34 |     }
35 | 
36 |     public void login(View view) {
37 |         viewModel.login().observe(this, this::loadSuccess);
38 |     }
39 | 
40 |     /**
41 |      * 注册或登录成功
42 |      */
43 |     public void loadSuccess(Boolean aBoolean) {
44 |         if (aBoolean != null && aBoolean) {
45 |             RxBus.getDefault().post(RxCodeConstants.LOGIN, true);
46 |             finish();
47 |         }
48 |     }
49 | 
50 |     public static void start(Context mContext) {
51 |         Intent intent = new Intent(mContext, LoginActivity.class);
52 |         mContext.startActivity(intent);
53 |     }
54 | }
55 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/utils/DebugUtil.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.utils;
 2 | 
 3 | import android.content.Context;
 4 | import android.os.Looper;
 5 | import android.util.Log;
 6 | import android.widget.Toast;
 7 | 
 8 | /**
 9 |  * @author jingbin
10 |  * @Description 在代码中要打印log, 就直接DebugUtil.debug(....).
11 |  * 然后如果发布的时候,就直接把这个类的DEBUG 改成false,这样所有的log就不会再打印在控制台.
12 |  */
13 | public class DebugUtil {
14 | 
15 |     public static final String TAG = "jingbin";
16 |     public static final boolean DEBUG = true;
17 | 
18 |     public static void toast(Context context, String content) {
19 |         Toast.makeText(context, content, Toast.LENGTH_SHORT).show();
20 |     }
21 | 
22 |     public static void debug(String tag, String msg) {
23 |         if (DEBUG) {
24 |             Log.d(tag, msg);
25 |         }
26 |     }
27 | 
28 |     public static void debug(String msg) {
29 |         if (DEBUG) {
30 |             Log.d(TAG, msg);
31 |         }
32 |     }
33 | 
34 |     public static void error(String tag, String error) {
35 | 
36 |         if (DEBUG) {
37 | 
38 |             Log.e(tag, error);
39 |         }
40 |     }
41 | 
42 |     public static void error(String error) {
43 | 
44 |         if (DEBUG) {
45 | 
46 |             Log.e(TAG, error);
47 |         }
48 |     }
49 | 
50 |     public static void isMainThread() {
51 |         if (DEBUG) {
52 |             Log.e(TAG, "---是否在主线程:" + (Thread.currentThread() == Looper.getMainLooper().getThread()));
53 |         }
54 |     }
55 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/utils/PerfectClickListener.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.utils;
 2 | 
 3 | import android.view.View;
 4 | import android.view.View.OnClickListener;
 5 | 
 6 | import java.util.Calendar;
 7 | 
 8 | /**
 9 |  * 避免在1秒内出发多次点击
10 |  */
11 | public abstract class PerfectClickListener implements OnClickListener {
12 |     public static final int MIN_CLICK_DELAY_TIME = 1000;
13 |     private long lastClickTime = 0;
14 |     private int id = -1;
15 | 
16 |     @Override
17 |     public void onClick(View v) {
18 |         long currentTime = Calendar.getInstance().getTimeInMillis();
19 |         int mId = v.getId();
20 |         if (id != mId) {
21 |             id = mId;
22 |             lastClickTime = currentTime;
23 |             onNoDoubleClick(v);
24 |             return;
25 |         }
26 |         if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
27 |             lastClickTime = currentTime;
28 |             onNoDoubleClick(v);
29 |         }
30 |     }
31 | 
32 |     protected abstract void onNoDoubleClick(View v);
33 | }
34 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/view/CommonTabPagerAdapter.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.view
 2 | 
 3 | import androidx.fragment.app.Fragment
 4 | import androidx.fragment.app.FragmentManager
 5 | import androidx.fragment.app.FragmentPagerAdapter
 6 | import com.example.jingbin.cloudreader.utils.DataUtil
 7 | 
 8 | class CommonTabPagerAdapter : FragmentPagerAdapter {
 9 | 
10 |     private var pageCount = 0
11 |     private var mList: List<String>? = null
12 |     var listener: TabPagerListener? = null
13 | 
14 |     constructor(fm: FragmentManager, list: List<String>?) : super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
15 |         initData(list)
16 |     }
17 | 
18 |     private fun initData(list: List<String>?) {
19 |         if (list == null || list.isEmpty()) {
20 |             throw ExceptionInInitializerError("list can't be null or empty")
21 |         }
22 |         mList = list
23 |         this.pageCount = list.size
24 |     }
25 | 
26 |     override fun getItem(position: Int): Fragment = listener?.getFragment(position)!!
27 | 
28 |     override fun getCount(): Int = pageCount
29 | 
30 |     override fun getPageTitle(position: Int): CharSequence? = DataUtil.getHtmlString(mList?.get(position))!!
31 | 
32 |     interface TabPagerListener {
33 |         fun getFragment(position: Int): Fragment?
34 |     }
35 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/view/Listener.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.view
 2 | 
 3 | import android.content.Context
 4 | import android.util.Log
 5 | import android.webkit.JavascriptInterface
 6 | 
 7 | /**
 8 |  * 登录监听
 9 |  */
10 | interface OnLoginListener {
11 | 
12 |     fun loginWanAndroid()
13 | 
14 |     fun loginGitHub()
15 | }
16 | 
17 | interface OnShareDialogListener {
18 |     fun look()
19 |     fun delete()
20 | }
21 | 
22 | /**
23 |  * js通信接口
24 |  */
25 | class ImageClickInterface(context: Context?) {
26 | 
27 |     @JavascriptInterface
28 |     fun imageClick(imgUrl: String, hasLink: String?) {
29 |         Log.e("----点击了图片 url: ", "$imgUrl- hasLink:$hasLink")
30 |     }
31 | 
32 |     @JavascriptInterface
33 |     fun textClick(type: String?, item_pk: String?) {
34 |         if (!type.isNullOrEmpty() && !item_pk.isNullOrEmpty()) {
35 |             Log.e("----点击了文字", "")
36 |         }
37 |     }
38 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/view/MyNestedScrollView.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.view;
 2 | 
 3 | import android.content.Context;
 4 | import androidx.core.widget.NestedScrollView;
 5 | import android.util.AttributeSet;
 6 | 
 7 | /**
 8 |  * Created by jingbin on 2016/12/6.
 9 |  * 系统的滚动监听只能api23以上用,这为了兼容
10 |  */
11 | 
12 | public class MyNestedScrollView extends NestedScrollView {
13 | 
14 |     private ScrollInterface scrollInterface;
15 | 
16 |     /**
17 |      * 定义滑动接口
18 |      */
19 |     public interface ScrollInterface {
20 |         void onScrollChange(int scrollX, int scrollY, int oldScrollX, int oldScrollY);
21 |     }
22 | 
23 |     public MyNestedScrollView(Context context) {
24 |         super(context);
25 |     }
26 | 
27 |     public MyNestedScrollView(Context context, AttributeSet attrs) {
28 |         super(context, attrs);
29 |     }
30 | 
31 |     public MyNestedScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
32 |         super(context, attrs, defStyleAttr);
33 |     }
34 | 
35 |     @Override
36 |     protected void onScrollChanged(int l, int t, int oldl, int oldt) {
37 |         if (scrollInterface != null) {
38 |             scrollInterface.onScrollChange(l, t, oldl, oldt);
39 |         }
40 |         super.onScrollChanged(l, t, oldl, oldt);
41 |     }
42 | 
43 |     public void setOnScrollChangeListener(ScrollInterface t) {
44 |         this.scrollInterface = t;
45 |     }
46 | }
47 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/view/MyTextWatch.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.view
 2 | 
 3 | import android.text.Editable
 4 | import android.text.TextWatcher
 5 | 
 6 | /**
 7 |  * Created by jingbin on 2021/1/17.
 8 |  */
 9 | abstract class MyTextWatch : TextWatcher {
10 | 
11 |     override fun afterTextChanged(s: Editable?) {
12 |     }
13 | 
14 |     override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
15 | 
16 |     }
17 | }


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/view/OnMyPageChangeListener.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.view;
 2 | 
 3 | import androidx.viewpager.widget.ViewPager;
 4 | 
 5 | public class OnMyPageChangeListener implements ViewPager.OnPageChangeListener {
 6 | 
 7 |     @Override
 8 |     public void onPageScrolled(int i, float v, int i1) {
 9 | 
10 |     }
11 | 
12 |     @Override
13 |     public void onPageSelected(int i) {
14 | 
15 |     }
16 | 
17 |     @Override
18 |     public void onPageScrollStateChanged(int i) {
19 | 
20 |     }
21 | }
22 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/view/ViewPagerFixed.kt:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.view
 2 | 
 3 | import android.content.Context
 4 | import android.util.AttributeSet
 5 | import android.view.MotionEvent
 6 | import androidx.viewpager.widget.ViewPager
 7 | 
 8 | /**
 9 |  * @author jingbin
10 |  * fix IllegalArgumentException (pointerIndex out of range)
11 |  */
12 | class ViewPagerFixed : ViewPager {
13 |     constructor(context: Context?) : super(context!!)
14 |     constructor(context: Context?, attrs: AttributeSet?) : super(
15 |         context!!, attrs
16 |     )
17 | 
18 |     override fun onTouchEvent(ev: MotionEvent): Boolean {
19 |         try {
20 |             return super.onTouchEvent(ev)
21 |         } catch (ex: IllegalArgumentException) {
22 |             ex.printStackTrace()
23 |         }
24 |         return false
25 |     }
26 | 
27 |     override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
28 |         try {
29 |             return super.onInterceptTouchEvent(ev)
30 |         } catch (ex: IllegalArgumentException) {
31 |             ex.printStackTrace()
32 |         }
33 |         return false
34 |     }
35 | }
36 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/view/viewbigimage/HackyViewPager.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.view.viewbigimage;
 2 | 
 3 | import android.content.Context;
 4 | import android.util.AttributeSet;
 5 | import android.view.MotionEvent;
 6 | 
 7 | import androidx.viewpager.widget.ViewPager;
 8 | 
 9 | /**
10 |  * Hacky fix for Issue #4 and
11 |  * http://code.google.com/p/android/issues/detail?id=18990
12 |  * 
13 |  * ScaleGestureDetector seems to mess up the touch events, which means that
14 |  * ViewGroups which make use of onInterceptTouchEvent throw a lot of
15 |  * IllegalArgumentException: pointerIndex out of range.
16 |  * 
17 |  * There's not much I can do in my code for now, but we can mask the result by
18 |  * just catching the problem and ignoring it.
19 |  * 
20 |  * @author Chris Banes
21 |  */
22 | public class HackyViewPager extends ViewPager {
23 | 
24 | //	public HackyViewPager(Context context) {
25 | //		super(context);
26 | //	}
27 | 	
28 | 	public HackyViewPager(Context context, AttributeSet attributeSet){
29 | 		super(context, attributeSet);
30 | 	}
31 | 
32 | 	@Override
33 | 	public boolean onInterceptTouchEvent(MotionEvent ev) {
34 | 		try {
35 | 			return super.onInterceptTouchEvent(ev);
36 | 		} catch (IllegalArgumentException e) {
37 | 			e.printStackTrace();
38 | 			return false;
39 | 		}
40 | 	}
41 | 
42 | }
43 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/viewmodel/movie/DoubanTopViewModel.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.viewmodel.movie;
 2 | 
 3 | import android.app.Application;
 4 | import androidx.lifecycle.MutableLiveData;
 5 | import androidx.annotation.NonNull;
 6 | 
 7 | import me.jingbin.bymvvm.base.BaseViewModel;
 8 | import com.example.jingbin.cloudreader.bean.HotMovieBean;
 9 | import com.example.jingbin.cloudreader.data.model.OneRepository;
10 | 
11 | /**
12 |  * @author jingbin
13 |  * @data 2017/12/15
14 |  * @Description 依赖注入:依赖注入允许类在不构造它们的情况下定义它们的依赖关系。在运行时,另一个类负责提供这些依赖关系。
15 |  * 我们推荐Google的Dagger 2库在Android应用程序中实现依赖注入。Dagger 2通过遍历依赖关系树来自动构造对象,并为依赖关系提供编译时间保证。
16 |  */
17 | 
18 | public class DoubanTopViewModel extends BaseViewModel {
19 | 
20 |     private int mStart = 0;
21 |     private int mCount = 21;
22 |     private OneRepository oneRepo;
23 | 
24 |     public DoubanTopViewModel(@NonNull Application application) {
25 |         super(application);
26 |         this.oneRepo = new OneRepository();
27 |     }
28 | 
29 |     public MutableLiveData<HotMovieBean> getHotMovie() {
30 |         final MutableLiveData<HotMovieBean> data = new MutableLiveData<>();
31 |         oneRepo.getMovieTop250(mStart, mCount, new OnMovieLoadListener() {
32 |             @Override
33 |             public void onSuccess(HotMovieBean hotMovieBean) {
34 |                 data.setValue(hotMovieBean);
35 |             }
36 | 
37 |             @Override
38 |             public void onFailure() {
39 |                 data.setValue(null);
40 |             }
41 |         });
42 |         return data;
43 |     }
44 | 
45 |     public int getStart() {
46 |         return mStart;
47 |     }
48 | 
49 |     public void handleNextStart() {
50 |         mStart += mCount;
51 |     }
52 | }
53 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/viewmodel/movie/OnMovieLoadListener.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.viewmodel.movie;
 2 | 
 3 | import com.example.jingbin.cloudreader.bean.HotMovieBean;
 4 | 
 5 | /**
 6 |  * @author jingbin
 7 |  * @data 2017/12/26
 8 |  * @Description
 9 |  */
10 | 
11 | public interface OnMovieLoadListener {
12 | 
13 |     void onSuccess(HotMovieBean bean);
14 | 
15 |     void onFailure();
16 | }
17 | 


--------------------------------------------------------------------------------
/app/src/main/java/com/example/jingbin/cloudreader/viewmodel/wan/WanNavigator.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader.viewmodel.wan;
 2 | 
 3 | import com.example.jingbin.cloudreader.bean.wanandroid.DuanZiBean;
 4 | 
 5 | import java.util.List;
 6 | 
 7 | import io.reactivex.disposables.Disposable;
 8 | 
 9 | /**
10 |  * @author jingbin
11 |  * @data 2018/2/8
12 |  * @Description
13 |  */
14 | 
15 | public interface WanNavigator {
16 | 
17 | 
18 |     interface JokeModelNavigator {
19 |         void loadSuccess(List<DuanZiBean> lists);
20 | 
21 |         void loadFailed();
22 | 
23 |         void addSubscription(Disposable disposable);
24 | 
25 |     }
26 | 
27 |     /**
28 |      * 收藏或取消收藏
29 |      */
30 |     interface OnCollectNavigator {
31 |         void onSuccess();
32 | 
33 |         void onFailure();
34 |     }
35 | 
36 | }
37 | 


--------------------------------------------------------------------------------
/app/src/main/res/anim/activity_down_in.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <alpha
4 |         android:duration="200"
5 |         android:interpolator="@android:anim/decelerate_interpolator"
6 |         android:fromAlpha="1.0"
7 |         android:toAlpha="1.0" />
8 | </set>


--------------------------------------------------------------------------------
/app/src/main/res/anim/activity_down_out.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
 3 |     <translate
 4 |         android:duration="200"
 5 |         android:fromYDelta="0"
 6 |         android:interpolator="@android:anim/decelerate_interpolator"
 7 |         android:toYDelta="12%p" />
 8 |     <alpha
 9 |         android:duration="200"
10 |         android:fromAlpha="1.0"
11 |         android:interpolator="@android:anim/decelerate_interpolator"
12 |         android:toAlpha="0.0" />
13 | </set>


--------------------------------------------------------------------------------
/app/src/main/res/anim/activity_up_in.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
 3 |     <translate
 4 |         android:duration="200"
 5 |         android:fromYDelta="12%p"
 6 |         android:interpolator="@android:anim/decelerate_interpolator"
 7 |         android:toYDelta="0" />
 8 |     <alpha
 9 |         android:duration="200"
10 |         android:fromAlpha="0.0"
11 |         android:interpolator="@android:anim/decelerate_interpolator"
12 |         android:toAlpha="1.0" />
13 | 
14 | </set>


--------------------------------------------------------------------------------
/app/src/main/res/anim/activity_up_out.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <set xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <alpha
4 |         android:duration="200"
5 |         android:fromAlpha="1.0"
6 |         android:interpolator="@android:anim/decelerate_interpolator"
7 |         android:toAlpha="1.0" />
8 | </set>


--------------------------------------------------------------------------------
/app/src/main/res/anim/push_fade_in.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <set xmlns:android="http://schemas.android.com/apk/res/android" >
 3 | 
 4 |     <alpha
 5 |         android:fromAlpha="1.0"
 6 |         android:toAlpha="0.0"
 7 |         android:duration="350"
 8 |         />
 9 | 
10 | </set>


--------------------------------------------------------------------------------
/app/src/main/res/anim/push_fade_out.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <set xmlns:android="http://schemas.android.com/apk/res/android" >
 3 | 
 4 |    <alpha
 5 |         android:fromAlpha="0"
 6 |         android:toAlpha="1.0"
 7 |         android:duration="350"
 8 |         />
 9 | 
10 | </set>


--------------------------------------------------------------------------------
/app/src/main/res/anim/screen_zoom_in.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <set xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:interpolator="@android:anim/accelerate_interpolator">
 4 |     <scale
 5 |         android:duration="@android:integer/config_mediumAnimTime"
 6 |         android:fromXScale="2.0"
 7 |         android:fromYScale="2.0"
 8 |         android:pivotX="50%p"
 9 |         android:pivotY="50%p"
10 |         android:toXScale="1.0"
11 |         android:toYScale="1.0" />
12 | 
13 |     <alpha
14 |         android:duration="@android:integer/config_mediumAnimTime"
15 |         android:fromAlpha="0"
16 |         android:toAlpha="1.0" />
17 | 
18 | </set>


--------------------------------------------------------------------------------
/app/src/main/res/anim/screen_zoom_out.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <set xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:interpolator="@android:anim/accelerate_interpolator">
 4 |     <scale
 5 |         android:duration="@android:integer/config_mediumAnimTime"
 6 |         android:fromXScale="1.0"
 7 |         android:fromYScale="1.0"
 8 |         android:pivotX="50%p"
 9 |         android:pivotY="50%p"
10 |         android:toXScale=".5"
11 |         android:toYScale=".5" />
12 |     <alpha
13 |         android:duration="@android:integer/config_mediumAnimTime"
14 |         android:fromAlpha="1.0"
15 |         android:toAlpha="0" />
16 | 
17 | </set>


--------------------------------------------------------------------------------
/app/src/main/res/anim/transition_anim.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <alpha xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:duration="2000"
4 |     android:fromAlpha="0"
5 |     android:interpolator="@android:anim/accelerate_interpolator"
6 |     android:toAlpha="1">
7 | </alpha>


--------------------------------------------------------------------------------
/app/src/main/res/color/select_book_text.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:color="@color/text_common" android:state_checked="true" />
5 |     <item android:color="@color/colorSubtitle" />
6 | 
7 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/color/select_gank_day.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:color="@color/colorWhite" android:state_pressed="true" />
5 |     <item android:color="@color/colorTheme" />
6 | 
7 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/color/select_home_text.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:color="@color/colorTheme" android:state_checked="true" />
5 |     <item android:color="@color/colorSubtitle" />
6 | 
7 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/color/select_navi_text.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:color="@color/colorWhite" android:state_checked="true" />
5 |     <item android:color="@color/colorWhite" android:state_selected="true" />
6 |     <item android:color="@color/colorContent" />
7 | 
8 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/actionbar_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-hdpi/actionbar_more.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/actionbar_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-hdpi/actionbar_search.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/actionbar_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-hdpi/actionbar_share.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_cloudreader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-hdpi/ic_cloudreader.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/loading_everyday.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-hdpi/loading_everyday.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_cloudreader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-mdpi/ic_cloudreader.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/ic_uncollect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/ic_uncollect.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/img_transition_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/img_transition_default.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_discover_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_discover_normal.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_discover_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_discover_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_discover_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_discover_selected.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_friends_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_friends_normal.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_friends_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_friends_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_friends_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_friends_selected.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_menu.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_music_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_music_normal.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_music_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_music_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-night-xxhdpi/titlebar_music_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-night-xxhdpi/titlebar_music_selected.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ic_menu_camera.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |         android:width="24dp"
 3 |         android:height="24dp"
 4 |         android:viewportWidth="24.0"
 5 |         android:viewportHeight="24.0">
 6 |     <path
 7 |         android:fillColor="#FF000000"
 8 |         android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/>
 9 |     <path
10 |         android:fillColor="#FF000000"
11 |         android:pathData="M9,2L7.17,4H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2H9zm3,15c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
12 | </vector>
13 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ic_menu_gallery.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |         android:width="24dp"
 3 |         android:height="24dp"
 4 |         android:viewportWidth="24.0"
 5 |         android:viewportHeight="24.0">
 6 |     <path
 7 |         android:fillColor="#FF000000"
 8 |         android:pathData="M22,16V4c0,-1.1 -0.9,-2 -2,-2H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zm-11,-4l2.03,2.71L16,11l4,5H8l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2H4V6H2z"/>
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ic_menu_manage.xml:
--------------------------------------------------------------------------------
1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
2 |     android:width="24dp"
3 |     android:height="24dp"
4 |     android:viewportWidth="24.0"
5 |     android:viewportHeight="24.0">
6 |     <path
7 |         android:fillColor="#FF000000"
8 |         android:pathData="M22.7,19l-9.1,-9.1c0.9,-2.3 0.4,-5 -1.5,-6.9 -2,-2 -5,-2.4 -7.4,-1.3L9,6 6,9 1.6,4.7C0.4,7.1 0.9,10.1 2.9,12.1c1.9,1.9 4.6,2.4 6.9,1.5l9.1,9.1c0.4,0.4 1,0.4 1.4,0l2.3,-2.3c0.5,-0.4 0.5,-1.1 0.1,-1.4z"/>
9 | </vector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ic_menu_send.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |         android:width="24dp"
 3 |         android:height="24dp"
 4 |         android:viewportWidth="24.0"
 5 |         android:viewportHeight="24.0">
 6 |     <path
 7 |         android:fillColor="#FF000000"
 8 |         android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z"/>
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ic_menu_share.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |         android:width="24dp"
 3 |         android:height="24dp"
 4 |         android:viewportWidth="24.0"
 5 |         android:viewportHeight="24.0">
 6 |     <path
 7 |         android:fillColor="#FF000000"
 8 |         android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ic_menu_slideshow.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |         android:width="24dp"
 3 |         android:height="24dp"
 4 |         android:viewportWidth="24.0"
 5 |         android:viewportHeight="24.0">
 6 |     <path
 7 |         android:fillColor="#FF000000"
 8 |         android:pathData="M4,6H2v14c0,1.1 0.9,2 2,2h14v-2H4V6zm16,-4H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2zm-8,12.5v-9l6,4.5 -6,4.5z"/>
 9 | </vector>
10 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ripple_category_back.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <ripple xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:color="@color/colorWhite"
4 |     android:radius="30dp"/>


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ripple_item_white_bg.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <ripple xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:color="@color/itemBackground">
4 |     <item>
5 |         <color android:color="@color/color_sheet_bg" />
6 |     </item>
7 | </ripple>


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ripple_joke_item_bg.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <ripple xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:color="@color/itemBackground">
4 |     <item android:id="@android:id/mask">
5 |         <color android:color="@android:color/white" />
6 |     </item>
7 | </ripple>


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ripple_one_item_bg.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <ripple xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:color="@color/itemBackground">
4 |     <item>
5 |         <color android:color="@color/color_page_bg" />
6 |     </item>
7 | </ripple>


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/ripple_tab_bg.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <ripple xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:color="@color/tabBackground">
4 |     <item>
5 |         <color android:color="@color/colorTabBgDefault" />
6 |     </item>
7 | </ripple>


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/shape_bg_publish.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <ripple xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:color="@color/colorBanTransparent">
 4 | 
 5 |     <!--背景透明色 android:id="@android:id/mask"-->
 6 |     <item>
 7 |         <shape android:shape="rectangle">
 8 |             <solid android:color="@color/colorTheme" />
 9 |             <corners android:radius="60dp" />
10 |         </shape>
11 |     </item>
12 | 
13 | </ripple>


--------------------------------------------------------------------------------
/app/src/main/res/drawable-v21/shape_ripple_tag_bg.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <ripple xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:color="@color/colorTheme">
 4 | 
 5 |     <!--背景透明色 android:id="@android:id/mask"-->
 6 |     <item>
 7 |         <shape android:shape="rectangle">
 8 |             <padding
 9 |                 android:bottom="5dp"
10 |                 android:left="15dp"
11 |                 android:right="15dp"
12 |                 android:top="5dp" />
13 |             <solid android:color="@color/color_tree_tab_bg" />
14 |             <corners android:radius="100dp" />
15 |         </shape>
16 |     </item>
17 | 
18 | </ripple>


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/actionbar_cha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xhdpi/actionbar_cha.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_cloudreader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xhdpi/ic_cloudreader.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_history_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xhdpi/ic_history_delete.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/action_publish.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/action_publish.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/actionbar_cha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/actionbar_cha.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/actionbar_help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/actionbar_help.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/actionbar_more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/actionbar_more.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/actionbar_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/actionbar_search.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/actionbar_share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/actionbar_share.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/actionbar_web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/actionbar_web.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_arrow_right.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_arrow_right_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_arrow_right_gray.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_icon_day.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_icon_day.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_icon_day_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_icon_day_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_icon_fm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_icon_fm.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_icon_fm_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_icon_fm_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_icon_music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_icon_music.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_icon_music_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_icon_music_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_icon_rank.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_icon_rank.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_icon_rank_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_icon_rank_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_all.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_android.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_android.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_app.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_backend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_backend.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_flutter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_flutter.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_ios.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_ios.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_meizi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_meizi.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_movie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_movie.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_qian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_qian.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_source.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_source.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/home_title_xia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/home_title_xia.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/homepage_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/homepage_header.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_avatar_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_avatar_default.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_catalogue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_catalogue.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_catalogue_bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_catalogue_bottom.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_checked.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_cloudreader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_cloudreader.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_cloudreader_mip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_cloudreader_mip.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_collected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_collected.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_cylinder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_cylinder.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_about.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_admire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_admire.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_admire_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_admire_right.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_bg_drawerlayout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_bg_drawerlayout.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_coin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_coin.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_collect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_collect.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_deedback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_deedback.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_exit.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_homepage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_homepage.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_login.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_nav_scan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_nav_scan.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_shortcut_coin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_shortcut_coin.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_shortcut_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_shortcut_search.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_shortcut_send.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_shortcut_send.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_uncollect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/ic_uncollect.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_clear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_clear.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_coin_rank.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_coin_rank.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_film_play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_film_play.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_github.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_nav_night.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_nav_night.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_new.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_paste.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_paste.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_position.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_position.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_share_article.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_share_article.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_share_wan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_share_wan.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_tag_checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_tag_checked.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_tag_hot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_tag_hot.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/icon_tag_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/icon_tag_normal.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/img_default_book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/img_default_book.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/img_default_meizi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/img_default_meizi.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/img_default_movie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/img_default_movie.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/img_four_bi_three.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/img_four_bi_three.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/img_one_bi_one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/img_one_bi_one.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/img_transition_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/img_transition_default.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/img_two_bi_one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/img_two_bi_one.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/loading_everyday.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/loading_everyday.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/loading_everyday_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/loading_everyday_red.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/loading_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/loading_image.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/stackblur_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/stackblur_default.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_discover_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_discover_normal.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_discover_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_discover_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_discover_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_discover_selected.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_friends_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_friends_normal.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_friends_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_friends_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_friends_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_friends_selected.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_menu.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_music_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_music_normal.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_music_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_music_prs.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/titlebar_music_selected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/drawable-xxhdpi/titlebar_music_selected.png


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_frame_deep_gray.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <solid android:color="@color/colorChoosePress" />
 5 |     <corners android:radius="2dp" />
 6 |     <stroke
 7 |         android:width="1px"
 8 |         android:color="@color/colorSubtitle" />
 9 | 
10 | 
11 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_frame_gray.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <solid android:color="@color/color_page_bg" />
 5 |     <corners android:radius="2dp" />
 6 |     <stroke
 7 |         android:width="1px"
 8 |         android:color="@color/colorSubtitle" />
 9 | 
10 | 
11 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_save_big_image.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <solid android:color="#4c000000" />
 5 | 
 6 |     <corners android:radius="3dp" />
 7 | 
 8 |     <stroke
 9 |         android:width="1dp"
10 |         android:color="#4cffffff" />
11 | 
12 |     <padding
13 |         android:bottom="7dp"
14 |         android:left="20dp"
15 |         android:right="20dp"
16 |         android:top="7dp" />
17 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/home_adjust_background.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
 3 |     <item android:state_pressed="false">
 4 |         <shape>
 5 |             <stroke android:width="1dp" android:color="@color/colorTheme" />
 6 | 
 7 |             <corners android:bottomLeftRadius="3dp" android:bottomRightRadius="3dp" android:topLeftRadius="3dp" android:topRightRadius="3dp" />
 8 |             <padding android:bottom="6dp" android:left="12dp" android:right="12dp" android:top="6dp" />
 9 |         </shape>
10 |     </item>
11 |     <item android:state_pressed="true">
12 |         <shape>
13 |             <stroke android:width="1dp" android:color="@color/colorTheme" />
14 | 
15 |             <corners android:bottomLeftRadius="3dp" android:bottomRightRadius="3dp" android:topLeftRadius="3dp" android:topRightRadius="3dp" />
16 |             <padding android:bottom="6dp" android:left="12dp" android:right="12dp" android:top="6dp" />
17 |             <solid android:color="@color/colorSmallRed" />
18 |         </shape>
19 |     </item>
20 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/home_middle_day.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <item android:drawable="@drawable/home_icon_day" android:state_pressed="false" />
4 |     <item android:drawable="@drawable/home_icon_day_prs" android:state_pressed="true" />
5 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/home_middle_fm.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <item android:drawable="@drawable/home_icon_fm" android:state_pressed="false" />
4 |     <item android:drawable="@drawable/home_icon_fm_prs" android:state_pressed="true" />
5 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/home_middle_music.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <item android:drawable="@drawable/home_icon_music" android:state_pressed="false" />
4 |     <item android:drawable="@drawable/home_icon_music_prs" android:state_pressed="true" />
5 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/home_middle_rank.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <item android:drawable="@drawable/home_icon_rank" android:state_pressed="false" />
4 |     <item android:drawable="@drawable/home_icon_rank_prs" android:state_pressed="true" />
5 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/layer_splash.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 3 |     <!-- 背景颜色 -->
 4 |     <item android:drawable="@color/colorTabBgDefault" />
 5 | 
 6 |     <!-- <item android:bottom="50dp">-->
 7 |     <item>
 8 |         <!-- 图片 clip_horizontal 如果尺寸不一致,那么周围的填充色就是背景色-->
 9 |         <bitmap
10 |             android:gravity="bottom"
11 |             android:src="@drawable/img_transition_default" />
12 |     </item>
13 | </layer-list>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/process_bg.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 3 | 
 4 |     <!-- 背景  gradient是渐变,corners定义的是圆角 -->
 5 |     <item android:id="@android:id/background">
 6 |         <shape>
 7 |             <corners android:radius="10dp" />
 8 | 
 9 |             <solid android:color="#00ffffff" />
10 |         </shape>
11 |     </item>
12 |     <!-- 第二条进度条颜色 -->
13 |     <item android:id="@android:id/secondaryProgress">
14 |         <clip>
15 |             <shape>
16 |                 <corners android:radius="10dip" />
17 | 
18 |                 <solid android:color="#00ffffff" />
19 |             </shape>
20 |         </clip>
21 |     </item>
22 |     <!-- 进度条 -->
23 |     <item android:id="@android:id/progress">
24 |         <clip>
25 |             <shape>
26 |                 <corners android:radius="10dip" />
27 |                 <gradient
28 |                     android:angle="180"
29 |                     android:endColor="#FFFFFF"
30 |                     android:startColor="#f00" />
31 |             </shape>
32 |         </clip>
33 |     </item>
34 | 
35 | </layer-list>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/process_bg_webview.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 3 | 
 4 |     <!-- 背景  gradient是渐变,corners定义的是圆角 -->
 5 |     <item android:id="@android:id/background">
 6 |         <shape>
 7 |             <corners android:radius="10dp" />
 8 | 
 9 |             <solid android:color="#00ffffff" />
10 |         </shape>
11 |     </item>
12 |     <!-- 第二条进度条颜色 -->
13 |     <item android:id="@android:id/secondaryProgress">
14 |         <clip>
15 |             <shape>
16 |                 <corners android:radius="10dip" />
17 | 
18 |                 <solid android:color="#00ffffff" />
19 |             </shape>
20 |         </clip>
21 |     </item>
22 |     <!-- 进度条 -->
23 |     <item android:id="@android:id/progress">
24 |         <clip>
25 |             <shape>
26 |                 <corners android:radius="10dip" />
27 |                 <gradient
28 |                     android:angle="180"
29 |                     android:endColor="#FFFFFF"
30 |                     android:startColor="@color/colorAccent" />
31 |             </shape>
32 |         </clip>
33 |     </item>
34 | 
35 | </layer-list>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/progress_cirle.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <rotate xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:drawable="@drawable/loading_image"
4 |     android:fromDegrees="0"
5 |     android:pivotX="50%"
6 |     android:pivotY="50%"
7 |     android:toDegrees="360">
8 | 
9 | </rotate>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ripple_item_white_bg.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <item android:state_enabled="false">
 5 |         <shape>
 6 |             <solid android:color="@color/color_sheet_bg" />
 7 |         </shape>
 8 |     </item>
 9 |     <item android:state_pressed="true">
10 |         <shape>
11 |             <solid android:color="@color/itemLowBackground" />
12 |         </shape>
13 |     </item>
14 |     <item android:state_pressed="false">
15 |         <shape>
16 |             <solid android:color="@color/color_sheet_bg" />
17 |         </shape>
18 |     </item>
19 | 
20 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ripple_joke_item_bg.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <item android:state_pressed="true">
 5 |         <shape>
 6 |             <solid android:color="@color/itemLowBackground" />
 7 |         </shape>
 8 |     </item>
 9 |     <item android:state_pressed="false">
10 |         <shape>
11 |             <solid android:color="@color/colorWhite" />
12 |         </shape>
13 |     </item>
14 | 
15 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ripple_one_item_bg.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <item android:state_enabled="false">
 5 |         <shape>
 6 |             <solid android:color="@color/color_page_bg" />
 7 |         </shape>
 8 |     </item>
 9 |     <item android:state_pressed="true">
10 |         <shape>
11 |             <solid android:color="@color/itemLowBackground" />
12 |         </shape>
13 |     </item>
14 |     <item android:state_pressed="false">
15 |         <shape>
16 |             <solid android:color="@color/color_page_bg" />
17 |         </shape>
18 |     </item>
19 | 
20 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/ripple_tab_bg.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <!--<item android:color="@color/colorWhite" android:state_selected="true" />-->
 5 | 
 6 |     <item android:state_enabled="false">
 7 |         <shape>
 8 |             <solid android:color="@color/colorTabBgDefault" />
 9 |         </shape>
10 |     </item>
11 |     <item android:state_pressed="true">
12 |         <shape>
13 |             <solid android:color="@color/itemLowBackground" />
14 |         </shape>
15 |     </item>
16 |     <item android:state_pressed="false">
17 |         <shape>
18 |             <solid android:color="@color/colorTabBgDefault" />
19 |         </shape>
20 |     </item>
21 | 
22 | 
23 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/select_gank_custom.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:drawable="@drawable/bg_frame_deep_gray" android:state_pressed="true" />
5 |     <item android:drawable="@drawable/bg_frame_gray" />
6 | 
7 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/select_navi_bg.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:drawable="@color/colorTransparent" android:state_selected="true" />
5 |     <item android:drawable="@color/colorNaviBg" />
6 | 
7 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/select_one_header.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:drawable="@color/colorItemBackground" android:state_pressed="true" />
5 |     <item android:drawable="@color/colorWhite" />
6 | 
7 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_bg_tag.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:drawable="@drawable/shape_bg_tag_selected" android:state_checked="true" />
5 |     <item android:drawable="@drawable/shape_bg_tag_selected" android:state_selected="true" />
6 |     <item android:drawable="@drawable/shape_bg_tag_selected" android:state_pressed="true" />
7 |     <item android:drawable="@drawable/shape_bg_tag_normal" />
8 | 
9 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_bg_tag_no_check.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:drawable="@drawable/shape_bg_tag_selected" android:state_pressed="true" />
5 |     <item android:drawable="@drawable/shape_bg_tag_normal" />
6 | 
7 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_bg_tree_tag.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
 3 |     <item android:state_pressed="false">
 4 |         <shape android:shape="rectangle">
 5 |             <solid android:color="@color/color_page_bg" />
 6 |             <corners android:radius="15dp" />
 7 |             <padding android:bottom="7dp" android:left="16dp" android:right="16dp" android:top="7dp" />
 8 |         </shape>
 9 |     </item>
10 |     <item android:state_pressed="true">
11 |         <shape>
12 |             <corners android:radius="15dp" />
13 |             <padding android:bottom="7dp" android:left="16dp" android:right="16dp" android:top="7dp" />
14 |             <solid android:color="@color/colorSmallRed" />
15 |         </shape>
16 |     </item>
17 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/selector_collect_check.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <item android:drawable="@drawable/ic_collected" android:state_checked="true" />
5 |     <item android:drawable="@drawable/ic_uncollect" />
6 | 
7 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_banner_select.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:shape="rectangle">
4 |     <solid android:color="@color/colorBannerSelect" />
5 |     <corners android:radius="20dp" />
6 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_banner_unselect.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:shape="rectangle">
4 |     <solid android:color="@color/colorBannerUnSelect" />
5 |     <corners android:radius="20dp" />
6 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_bg_level.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <solid android:color="@color/colorTransparent" />
 5 |     <stroke
 6 |         android:width="1dp"
 7 |         android:color="#bfff" />
 8 |     <corners android:radius="22dp" />
 9 | 
10 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_bg_loading.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
3 | 
4 |     <solid android:color="@color/colorLine" />
5 | 
6 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_bg_login.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <solid android:color="@color/colorTransparent" />
 5 |     <stroke
 6 |         android:width="1dp"
 7 |         android:color="#bfff" />
 8 |     <corners android:radius="2dp" />
 9 | 
10 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_bg_publish.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:shape="rectangle">
 4 | 
 5 |     <corners android:radius="60dp" />
 6 | 
 7 |     <gradient
 8 |         android:endColor="#ccce3d3a"
 9 |         android:startColor="#ccce3d3a" />
10 | 
11 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_bg_tag_normal.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:shape="rectangle">
4 | 
5 |     <solid android:color="@color/color_page_bg" />
6 |     <corners android:radius="15dp" />
7 |     <padding android:bottom="7dp" android:left="16dp" android:right="16dp" android:top="7dp" />
8 | 
9 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_bg_tag_selected.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:shape="rectangle">
 4 | 
 5 |     <corners android:radius="15dp" />
 6 |     <gradient
 7 |         android:endColor="#eece3d3a"
 8 |         android:startColor="#77ce3d3a" />
 9 |     <padding
10 |         android:bottom="7dp"
11 |         android:left="16dp"
12 |         android:right="16dp"
13 |         android:top="7dp" />
14 | 
15 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_detail_mask.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <gradient
4 |         android:angle="270"
5 |         android:endColor="#80000000"
6 |         android:startColor="#0eeeeeee" />
7 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_edit_cursor.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
3 |     <size android:width="1dp" />
4 |     <solid android:color="@color/colorWhiteHalf"  />
5 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_edit_line.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 3 |     <item
 4 |         android:id="@+id/shape"
 5 |         android:bottom="1dp"
 6 |         android:left="-10dp"
 7 |         android:right="-10dp"
 8 |         android:top="-10dp">
 9 |         <shape>
10 |             <solid android:color="@android:color/transparent" />
11 |             <stroke
12 |                 android:width="1dp"
13 |                 android:color="#aaffffff" />
14 |         </shape>
15 |     </item>
16 | </layer-list>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_line.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <size android:height="1px"/>
4 |     <solid android:color="@color/colorHomeLine"/>
5 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_no_read.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
3 |     android:shape="oval">
4 | 
5 |     <solid android:color="@color/colorTheme" />
6 | 
7 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_notclickbg.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape android:shape="rectangle"
3 |   xmlns:android="http://schemas.android.com/apk/res/android">
4 |     <solid android:color="@color/text_deed_bg" />
5 |     <stroke android:width="1.0px" android:color="#ffb1b1b1" />
6 |     <corners android:radius="4.0dip" />
7 | </shape>
8 | 


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_remove.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <size android:height="1px"/>
4 |     <solid android:color="@color/colorTransparent"/>
5 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_ripple_tag_bg.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:shape="rectangle" >
 4 | 
 5 |     <corners android:radius="100dp" />
 6 | 
 7 |     <solid android:color="@color/color_tree_tab_bg" />
 8 | 
 9 |     
10 |     <padding
11 |         android:bottom="5dp"
12 |         android:left="15dp"
13 |         android:right="15dp"
14 |         android:top="5dp" />
15 | 
16 | 
17 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_tab_indicator.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layer-list xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:shape="rectangle">
 4 | 
 5 |     <item android:gravity="center">
 6 |         <shape>
 7 | 
 8 |             <size
 9 |                 android:width="30dp"
10 |                 android:height="2dp" />
11 | 
12 |             <corners android:radius="1dp" />
13 | 
14 |             <solid android:color="@color/colorTheme" />
15 | 
16 |         </shape>
17 |     </item>
18 | 
19 | </layer-list>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_transparent.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <shape xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <size android:height="1px"/>
4 |     <solid android:color="#00ffffff"/>
5 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_tree_tag.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:shape="rectangle" >
 4 | 
 5 |     <corners android:radius="3dp" />
 6 | 
 7 |     <solid android:color="#F5F5F5" />
 8 | 
 9 |     
10 |     <padding
11 |         android:bottom="5dp"
12 |         android:left="10dp"
13 |         android:right="10dp"
14 |         android:top="5dp" />
15 | 
16 | 
17 |     <stroke
18 |         android:width="1dp"
19 |         android:color="@color/colorTheme" />
20 | 
21 | </shape>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/titlebar_disco.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <item android:drawable="@drawable/titlebar_discover_selected" android:state_selected="true" />
4 |     <item android:drawable="@drawable/titlebar_discover_normal" android:state_selected="false" />
5 |     <item android:drawable="@drawable/titlebar_discover_normal" android:state_pressed="false" />
6 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/titlebar_friends.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <item android:drawable="@drawable/titlebar_friends_selected" android:state_selected="true"/>
4 |     <item android:drawable="@drawable/titlebar_friends_normal" android:state_selected="false"/>
5 |     <item android:drawable="@drawable/titlebar_friends_normal" android:state_pressed="false"/>
6 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/drawable/titlebar_music.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <item android:drawable="@drawable/titlebar_music_selected" android:state_selected="true"/>
4 |     <item android:drawable="@drawable/titlebar_music_normal" android:state_selected="false"/>
5 |     <item android:drawable="@drawable/titlebar_music_normal" android:state_pressed="false"/>
6 | </selector>


--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_douban_top.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <me.jingbin.library.ByRecyclerView
 5 |         android:id="@+id/xrv_top"
 6 |         android:layout_width="match_parent"
 7 |         android:layout_height="wrap_content"
 8 |         android:scrollbarSize="4dp"
 9 |         android:scrollbarThumbVertical="@color/tabBackground"
10 |         android:scrollbars="vertical" />
11 | 
12 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <androidx.drawerlayout.widget.DrawerLayout xmlns:app="http://schemas.android.com/apk/res-auto"
 5 |         xmlns:tools="http://schemas.android.com/tools"
 6 |         android:id="@+id/drawer_layout"
 7 |         android:layout_width="match_parent"
 8 |         android:layout_height="match_parent"
 9 |         android:fitsSystemWindows="true"
10 |         tools:context=".ui.MainActivity">
11 | 
12 |         <include
13 |             android:id="@+id/include"
14 |             layout="@layout/app_bar_main"
15 |             android:layout_width="match_parent"
16 |             android:layout_height="match_parent" />
17 | 
18 |         <!--去掉background,会影响4.4系统的状态栏-->
19 |         <com.google.android.material.navigation.NavigationView
20 |             android:id="@+id/nav_view"
21 |             android:layout_width="match_parent"
22 |             android:layout_height="match_parent"
23 |             android:layout_gravity="start"
24 |             android:background="@color/color_page_bg"
25 |             android:fitsSystemWindows="true" />
26 | 
27 |         <!--app:headerLayout="@layout/nav_header_main"-->
28 |         <!--app:menu="@menu/activity_main_drawer"-->
29 |     </androidx.drawerlayout.widget.DrawerLayout>
30 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_my_collect.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
 5 |         android:layout_width="match_parent"
 6 |         android:layout_height="match_parent"
 7 |         android:orientation="vertical">
 8 | 
 9 |         <com.google.android.material.tabs.TabLayout
10 |             android:id="@+id/tab_my_collect"
11 |             android:layout_width="match_parent"
12 |             android:layout_height="38dp"
13 |             android:background="@color/color_sheet_bg"
14 |             app:layout_constraintStart_toStartOf="parent"
15 |             app:layout_constraintTop_toTopOf="parent"
16 |             app:tabBackground="?android:attr/selectableItemBackground"
17 |             app:tabIndicatorColor="@color/colorTheme"
18 |             app:tabMode="scrollable"
19 |             app:tabSelectedTextColor="@color/colorTheme"
20 |             app:tabTextColor="@color/colorTabText" />
21 | 
22 |         <View
23 |             android:id="@+id/view_line"
24 |             android:layout_width="match_parent"
25 |             android:layout_height="1px"
26 |             android:background="@color/colorHomeLine"
27 |             app:layout_constraintTop_toBottomOf="@+id/tab_my_collect" />
28 | 
29 |         <com.example.jingbin.cloudreader.view.ViewPagerFixed
30 |             android:id="@+id/vp_my_collect"
31 |             android:layout_width="match_parent"
32 |             android:layout_height="0dp"
33 |             app:layout_constraintBottom_toBottomOf="parent"
34 |             app:layout_constraintTop_toBottomOf="@+id/view_line" />
35 | 
36 |     </androidx.constraintlayout.widget.ConstraintLayout>
37 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_view_big_image.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:layout_width="match_parent"
 4 |     android:layout_height="match_parent"
 5 |     android:background="#000000">
 6 | 
 7 |     <com.example.jingbin.cloudreader.view.viewbigimage.HackyViewPager
 8 |         android:id="@+id/very_image_viewpager"
 9 |         android:layout_width="match_parent"
10 |         android:layout_height="match_parent" />
11 | 
12 |     <TextView
13 |         android:id="@+id/very_image_viewpager_text"
14 |         android:layout_width="wrap_content"
15 |         android:layout_height="wrap_content"
16 |         android:layout_alignParentBottom="true"
17 |         android:layout_centerHorizontal="true"
18 |         android:layout_marginBottom="25dp"
19 |         android:textColor="#fff"
20 |         android:textSize="14sp" />
21 | 
22 |     <TextView
23 |         android:id="@+id/tv_save_big_image"
24 |         android:layout_width="wrap_content"
25 |         android:layout_height="wrap_content"
26 |         android:layout_alignParentBottom="true"
27 |         android:layout_alignParentRight="true"
28 |         android:layout_marginBottom="17dp"
29 |         android:layout_marginRight="13dp"
30 |         android:background="@drawable/bg_save_big_image"
31 |         android:text="保存"
32 |         android:textColor="#fff"
33 |         android:textSize="13sp" />
34 | 
35 | </RelativeLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_web_view.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:tools="http://schemas.android.com/tools"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="match_parent"
 6 |     android:id="@+id/ll_webview"
 7 |     android:orientation="vertical"
 8 |     tools:context="com.example.jingbin.cloudreader.ui.WebViewActivity">
 9 | 
10 |     <androidx.appcompat.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
11 |         android:id="@+id/title_tool_bar"
12 |         android:layout_width="match_parent"
13 |         android:layout_height="?attr/actionBarSize"
14 |         android:background="@color/colorToolBar"
15 |         app:contentInsetStartWithNavigation="0dp"
16 |         app:layout_scrollFlags="enterAlways|scroll"
17 |         app:navigationContentDescription="返回"
18 |         app:navigationIcon="@drawable/icon_back"
19 |         app:popupTheme="@style/ThemeOverlay.AppCompat.ActionBar"
20 |         app:theme="@style/ToolbarStyle"
21 |         app:titleMarginStart="0dp">
22 | 
23 |         <TextView
24 |             android:id="@+id/tv_gun_title"
25 |             android:layout_width="match_parent"
26 |             android:layout_height="wrap_content"
27 |             android:ellipsize="marquee"
28 |             android:singleLine="true"
29 |             android:textColor="@color/colorWhite"
30 |             android:textSize="18sp"
31 |             android:visibility="visible"
32 |             tools:text="@string/app_name" />
33 | 
34 |     </androidx.appcompat.widget.Toolbar>
35 | 
36 | </LinearLayout>
37 | 


--------------------------------------------------------------------------------
/app/src/main/res/layout/base_header_title_bar.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
 5 |         android:id="@+id/rl_base_titlebar"
 6 |         android:layout_width="match_parent"
 7 |         android:layout_height="wrap_content"
 8 |         android:background="@android:color/transparent">
 9 | 
10 |         <ImageView
11 |             android:id="@+id/iv_base_titlebar_bg"
12 |             android:layout_width="match_parent"
13 |             android:layout_height="310dp"
14 |             android:scaleType="fitXY" />
15 | 
16 |         <androidx.appcompat.widget.Toolbar
17 |             android:id="@+id/tb_base_title"
18 |             android:layout_width="match_parent"
19 |             android:layout_height="?attr/actionBarSize"
20 |             android:background="@color/colorTransparent"
21 |             app:contentInsetStart="0.0dp"
22 |             app:contentInsetStartWithNavigation="0dp"
23 |             app:layout_scrollFlags="enterAlways|scroll"
24 |             app:popupTheme="@style/ThemeOverlay.AppCompat.ActionBar"
25 |             app:subtitleTextAppearance="@style/Toolbar.SubTitle"
26 |             app:theme="@style/ToolbarStyle"
27 |             app:titleMarginStart="0dp"
28 |             app:titleTextAppearance="@style/ToolBar.Title">
29 | 
30 |         </androidx.appcompat.widget.Toolbar>
31 | 
32 |     </RelativeLayout>
33 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/content_base.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 4 |     xmlns:tools="http://schemas.android.com/tools"
 5 |     android:id="@+id/content_base"
 6 |     android:layout_width="match_parent"
 7 |     android:layout_height="match_parent"
 8 |     android:paddingBottom="@dimen/activity_vertical_margin"
 9 |     android:paddingLeft="@dimen/activity_horizontal_margin"
10 |     android:paddingRight="@dimen/activity_horizontal_margin"
11 |     android:paddingTop="@dimen/activity_vertical_margin"
12 |     app:layout_behavior="@string/appbar_scrolling_view_behavior"
13 |     tools:context="me.jingbin.bymvvm.base.BaseActivity"
14 |     tools:showIn="@layout/activity_base">
15 | 
16 | </RelativeLayout>
17 | 


--------------------------------------------------------------------------------
/app/src/main/res/layout/content_main.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <RelativeLayout
 3 |     xmlns:android="http://schemas.android.com/apk/res/android"
 4 |     xmlns:tools="http://schemas.android.com/tools"
 5 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 6 |     android:id="@+id/content_main"
 7 |     android:layout_width="match_parent"
 8 |     android:layout_height="match_parent"
 9 |     android:paddingLeft="@dimen/activity_horizontal_margin"
10 |     android:paddingRight="@dimen/activity_horizontal_margin"
11 |     android:paddingTop="@dimen/activity_vertical_margin"
12 |     android:paddingBottom="@dimen/activity_vertical_margin"
13 |     app:layout_behavior="@string/appbar_scrolling_view_behavior"
14 |     tools:showIn="@layout/app_bar_main"
15 |     tools:context="com.example.jingbin.cloudreader.ui.MainActivity">
16 | 
17 |     <TextView
18 |         android:layout_width="wrap_content"
19 |         android:layout_height="wrap_content"
20 |         android:text="Hello World!" />
21 | </RelativeLayout>
22 | 


--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_eidt_url.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:layout_width="match_parent"
 4 |     android:layout_height="match_parent"
 5 |     android:orientation="vertical">
 6 | 
 7 |     <androidx.appcompat.widget.AppCompatEditText
 8 |         android:id="@+id/et_name"
 9 |         android:layout_width="match_parent"
10 |         android:layout_height="wrap_content"
11 |         android:layout_marginLeft="20dp"
12 |         android:layout_marginRight="20dp"
13 |         android:hint="请输入标题"
14 |         android:textSize="14sp" />
15 | 
16 |     <androidx.appcompat.widget.AppCompatEditText
17 |         android:id="@+id/et_link"
18 |         android:layout_width="match_parent"
19 |         android:layout_height="wrap_content"
20 |         android:layout_marginLeft="20dp"
21 |         android:layout_marginRight="20dp"
22 |         android:hint="请输入链接"
23 |         android:textSize="14sp" />
24 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_android.xml:
--------------------------------------------------------------------------------
 1 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 2 | 
 3 |     <FrameLayout xmlns:tools="http://schemas.android.com/tools"
 4 |         android:layout_width="match_parent"
 5 |         android:layout_height="match_parent"
 6 |         tools:context="com.example.jingbin.cloudreader.ui.gank.child.AndroidFragment">
 7 | 
 8 |         <me.jingbin.library.ByRecyclerView
 9 |             android:id="@+id/xrv_android"
10 |             android:layout_width="match_parent"
11 |             android:layout_height="match_parent"
12 |             android:scrollbars="vertical"
13 |             tools:itemCount="5"
14 |             tools:layoutManager="LinearLayoutManager"
15 |             tools:listitem="@layout/item_android" />
16 | 
17 |     </FrameLayout>
18 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_category_article.xml:
--------------------------------------------------------------------------------
 1 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 3 |     xmlns:tools="http://schemas.android.com/tools">
 4 | 
 5 |     <me.jingbin.library.ByRecyclerView
 6 |         android:id="@+id/recyclerView"
 7 |         android:layout_width="match_parent"
 8 |         android:layout_height="match_parent"
 9 |         android:scrollbarSize="4dp"
10 |         android:scrollbarThumbVertical="@color/tabBackground"
11 |         android:scrollbars="vertical"
12 |         tools:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
13 |         tools:listitem="@layout/item_category_article"
14 |         tools:orientation="vertical" />
15 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_content.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
 5 |         android:layout_width="match_parent"
 6 |         android:layout_height="match_parent"
 7 |         android:orientation="vertical">
 8 | 
 9 |         <com.google.android.material.tabs.TabLayout
10 |             android:id="@+id/tab_gank"
11 |             style="@style/tabLayoutStyle"
12 |             app:layout_constraintStart_toStartOf="parent"
13 |             app:layout_constraintTop_toTopOf="parent"
14 |             app:tabGravity="fill"
15 |             app:tabMaxWidth="0dp" />
16 | 
17 |         <View
18 |             android:id="@+id/line"
19 |             android:layout_width="match_parent"
20 |             android:layout_height="1px"
21 |             android:background="@color/colorHomeLine"
22 |             app:layout_constraintTop_toBottomOf="@+id/tab_gank" />
23 | 
24 |         <com.example.jingbin.cloudreader.view.ViewPagerFixed
25 |             android:id="@+id/vp_gank"
26 |             android:layout_width="match_parent"
27 |             android:layout_height="wrap_content"
28 |             app:layout_constrainedHeight="true"
29 |             app:layout_constraintBottom_toBottomOf="parent"
30 |             app:layout_constraintTop_toBottomOf="@+id/line" />
31 | 
32 |     </androidx.constraintlayout.widget.ConstraintLayout>
33 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_navi.xml:
--------------------------------------------------------------------------------
 1 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 3 |     xmlns:tools="http://schemas.android.com/tools">
 4 | 
 5 |     <androidx.constraintlayout.widget.ConstraintLayout
 6 |         android:layout_width="match_parent"
 7 |         android:layout_height="match_parent"
 8 |         android:orientation="horizontal">
 9 | 
10 |         <!--滑动置顶边距只支持paddingLeft,不然会显示屏幕等宽-->
11 |         <me.jingbin.library.ByRecyclerView
12 |             android:id="@+id/xrv_navi_detail"
13 |             android:layout_width="match_parent"
14 |             android:layout_height="match_parent"
15 |             android:paddingLeft="100dp"
16 |             android:scrollbars="vertical"
17 |             app:layoutManager="GridLayoutManager"
18 |             app:layout_constraintEnd_toEndOf="parent"
19 |             app:layout_constraintStart_toStartOf="parent"
20 |             app:spanCount="3"
21 |             tools:listitem="@layout/item_navigation_content" />
22 | 
23 |         <androidx.recyclerview.widget.RecyclerView
24 |             android:id="@+id/xrv_navi"
25 |             android:layout_width="100dp"
26 |             android:layout_height="match_parent"
27 |             android:scrollbars="none"
28 |             app:layout_constraintStart_toStartOf="parent"
29 |             app:layout_constraintTop_toTopOf="parent"
30 |             tools:listitem="@layout/item_navigation" />
31 | 
32 |     </androidx.constraintlayout.widget.ConstraintLayout>
33 | 
34 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_one.xml:
--------------------------------------------------------------------------------
 1 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 3 | 
 4 |     <data>
 5 | 
 6 |         <variable
 7 |             name="recyclerAdapter"
 8 |             type="com.example.jingbin.cloudreader.adapter.OneAdapter" />
 9 | 
10 |         <variable
11 |             name="viewmodel"
12 |             type="com.example.jingbin.cloudreader.viewmodel.movie.OneViewModel" />
13 |     </data>
14 | 
15 |     <!--为了出现下拉阴影效果(加了上面的控件后就没有了)-->
16 |     <FrameLayout
17 |         android:id="@+id/frameLayout"
18 |         android:layout_width="match_parent"
19 |         android:layout_height="match_parent"
20 |         android:scrollbarSize="4dp"
21 |         android:scrollbarThumbVertical="@color/tabBackground"
22 |         android:scrollbars="vertical"
23 |         app:layout_behavior="@string/appbar_scrolling_view_behavior">
24 | 
25 |         <me.jingbin.library.ByRecyclerView
26 |             android:id="@+id/list_one"
27 |             android:layout_width="match_parent"
28 |             android:layout_height="wrap_content"
29 |             android:orientation="vertical" />
30 |     </FrameLayout>
31 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_wan_android.xml:
--------------------------------------------------------------------------------
 1 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 3 | 
 4 |     <androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:tools="http://schemas.android.com/tools"
 5 |         android:id="@+id/srl_wan"
 6 |         android:layout_width="match_parent"
 7 |         android:layout_height="match_parent">
 8 | 
 9 |         <me.jingbin.library.ByRecyclerView
10 |             android:id="@+id/xrv_wan"
11 |             android:layout_width="match_parent"
12 |             android:layout_height="match_parent"
13 |             android:scrollbars="vertical"
14 |             tools:itemCount="5"
15 |             tools:layoutManager="LinearLayoutManager"
16 |             tools:listitem="@layout/item_wan_android" />
17 | 
18 |     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
19 | 
20 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_wan_find.xml:
--------------------------------------------------------------------------------
 1 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 3 |     xmlns:tools="http://schemas.android.com/tools">
 4 | 
 5 |     <androidx.constraintlayout.widget.ConstraintLayout
 6 |         android:layout_width="match_parent"
 7 |         android:layout_height="match_parent"
 8 |         android:orientation="horizontal">
 9 | 
10 |         <androidx.recyclerview.widget.RecyclerView
11 |             android:id="@+id/rv_wxarticle"
12 |             android:layout_width="80dp"
13 |             android:layout_height="match_parent"
14 |             android:layout_marginStart="10dp"
15 |             android:layout_marginEnd="10dp"
16 |             android:scrollbars="none"
17 |             app:layout_constraintStart_toStartOf="parent"
18 |             app:layout_constraintTop_toTopOf="parent" />
19 | 
20 |         <me.jingbin.library.ByRecyclerView
21 |             android:id="@+id/recyclerView"
22 |             android:layout_width="0dp"
23 |             android:layout_height="0dp"
24 |             android:layout_marginStart="10dp"
25 |             android:scrollbars="vertical"
26 |             app:layout_constraintBottom_toBottomOf="parent"
27 |             app:layout_constraintLeft_toRightOf="@+id/rv_wxarticle"
28 |             app:layout_constraintRight_toRightOf="parent"
29 |             app:layout_constraintTop_toTopOf="parent"
30 |             tools:layoutManager="LinearLayoutManager"
31 |             tools:listitem="@layout/item_wan_android" />
32 | 
33 |     </androidx.constraintlayout.widget.ConstraintLayout>
34 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_welfare.xml:
--------------------------------------------------------------------------------
 1 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 3 | 
 4 |     <FrameLayout xmlns:tools="http://schemas.android.com/tools"
 5 |         android:layout_width="match_parent"
 6 |         android:layout_height="match_parent"
 7 |         tools:context="com.example.jingbin.cloudreader.ui.gank.child.WelfareFragment">
 8 | 
 9 |         <me.jingbin.library.ByRecyclerView
10 |             android:id="@+id/xrv_welfare"
11 |             android:layout_width="match_parent"
12 |             android:layout_height="wrap_content"
13 |             android:scrollbarSize="4dp"
14 |             android:scrollbarThumbVertical="@color/tabBackground"
15 |             android:scrollbars="vertical"
16 |             tools:itemCount="6"
17 |             tools:layoutManager="StaggeredGridLayoutManager"
18 |             tools:listitem="@layout/item_welfare"
19 |             tools:spanCount="2" />
20 | 
21 |     </FrameLayout>
22 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/header_coin_detail.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 4 |     xmlns:tools="http://schemas.android.com/tools">
 5 | 
 6 |     <TextView
 7 |         android:id="@+id/tv_header_coin"
 8 |         android:layout_width="match_parent"
 9 |         android:layout_height="100dp"
10 |         android:gravity="center"
11 |         android:textColor="@color/colorTheme"
12 |         android:textSize="@dimen/sp_30"
13 |         app:layout_constraintStart_toStartOf="parent"
14 |         app:layout_constraintTop_toTopOf="parent"
15 |         tools:text="1120" />
16 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/header_item_everyday.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:tools="http://schemas.android.com/tools">
 4 | 
 5 |     <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
 6 |         android:layout_width="match_parent"
 7 |         android:layout_height="wrap_content"
 8 |         android:orientation="vertical">
 9 | 
10 |         <me.jingbin.banner.ByBannerView
11 |             android:id="@+id/banner"
12 |             android:layout_width="match_parent"
13 |             android:layout_height="145dp"
14 |             app:delay_time="4000"
15 |             app:indicator_drawable_selected="@drawable/shape_banner_select"
16 |             app:indicator_drawable_unselected="@drawable/shape_banner_unselect"
17 |             app:indicator_height="2dp"
18 |             app:indicator_margin="6dp"
19 |             app:indicator_padding="2dp"
20 |             app:indicator_width="8dp"
21 |             app:is_auto_play="true"
22 |             app:is_back_loop="false"
23 |             tools:background="@color/colorNaviBg" />
24 | 
25 |         <include
26 |             android:id="@+id/include_everyday"
27 |             layout="@layout/home_middle_layout" />
28 | 
29 |     </LinearLayout>
30 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/header_item_tree.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <RelativeLayout
 5 |         android:layout_width="match_parent"
 6 |         android:layout_height="wrap_content"
 7 |         android:orientation="vertical">
 8 | 
 9 |         <TextView
10 |             android:id="@+id/tv_position"
11 |             android:layout_width="wrap_content"
12 |             android:layout_height="wrap_content"
13 |             android:layout_alignParentRight="true"
14 |             android:layout_marginTop="8dp"
15 |             android:layout_marginRight="8dp"
16 |             android:background="?android:attr/selectableItemBackground"
17 |             android:drawableLeft="@drawable/icon_position"
18 |             android:drawablePadding="3dp"
19 |             android:gravity="center_vertical"
20 |             android:paddingLeft="3dp"
21 |             android:paddingTop="7dp"
22 |             android:paddingRight="3dp"
23 |             android:paddingBottom="7dp"
24 |             android:text="发现页内容订制"
25 |             android:textSize="13sp" />
26 | 
27 |     </RelativeLayout>
28 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/header_layout.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |               android:orientation="vertical"
 4 |               android:layout_width="match_parent"
 5 |               android:layout_height="match_parent">
 6 |    <ImageView
 7 |        android:src="@drawable/homepage_header"
 8 |        android:layout_width="match_parent"
 9 |        android:layout_height="wrap_content"
10 |        android:scaleType="centerCrop"
11 |        android:visibility="visible"
12 |        />
13 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/item_banner_wanandroid.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:tools="http://schemas.android.com/tools"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="match_parent">
 6 | 
 7 |     <ImageView
 8 |         android:id="@+id/iv_banner"
 9 |         android:layout_width="match_parent"
10 |         android:layout_height="200dp"
11 |         android:gravity="center"
12 |         android:scaleType="centerCrop"
13 |         tools:background="@color/color_page_bg" />
14 | 
15 |     <View
16 |         android:id="@+id/view_mask"
17 |         android:layout_width="match_parent"
18 |         android:layout_height="200dp"
19 |         android:background="@color/colorBannerMask" />
20 | </RelativeLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/item_collect_link.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 4 |     xmlns:tools="http://schemas.android.com/tools">
 5 | 
 6 |     <data>
 7 | 
 8 |         <variable
 9 |             name="adapter"
10 |             type="com.example.jingbin.cloudreader.adapter.CollectUrlAdapter" />
11 | 
12 |         <variable
13 |             name="bean"
14 |             type="com.example.jingbin.cloudreader.bean.CollectUrlBean.DataBean" />
15 | 
16 |         <import type="android.text.Html" />
17 | 
18 |         <import type="android.text.TextUtils" />
19 | 
20 |         <import type="android.view.View" />
21 |     </data>
22 | 
23 |     <androidx.constraintlayout.widget.ConstraintLayout
24 |         android:id="@+id/rl_item_link"
25 |         android:layout_width="match_parent"
26 |         android:layout_height="wrap_content"
27 |         android:background="?attr/selectableItemBackground"
28 |         android:onClick="@{()->adapter.openDetail(bean)}"
29 |         android:padding="10dp">
30 | 
31 |         <TextView
32 |             android:id="@+id/tv_title"
33 |             android:layout_width="wrap_content"
34 |             android:layout_height="wrap_content"
35 |             android:ellipsize="end"
36 |             android:lineSpacingExtra="1.6dp"
37 |             android:maxLines="2"
38 |             android:text="@{Html.fromHtml(bean.name)}"
39 |             android:textColor="@color/colorContent"
40 |             app:layout_constraintStart_toStartOf="parent"
41 |             app:layout_constraintTop_toTopOf="parent"
42 |             tools:text="MMKV——基于 mmap 的高性能通用 key-value 组件MMKV——基于 mmap 的高性能通用 key-value 组件" />
43 | 
44 |     </androidx.constraintlayout.widget.ConstraintLayout>
45 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/item_everyday_one.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <LinearLayout
 5 |         android:id="@+id/ll_one_photo"
 6 |         android:layout_width="match_parent"
 7 |         android:layout_height="wrap_content"
 8 |         android:layout_marginBottom="10dp"
 9 |         android:orientation="vertical">
10 | 
11 |         <View
12 |             android:id="@+id/ll_one_photo_line"
13 |             android:layout_width="match_parent"
14 |             android:layout_height="12dp"
15 |             android:visibility="gone" />
16 | 
17 |         <ImageView
18 |             android:id="@+id/iv_one_photo"
19 |             android:layout_width="match_parent"
20 |             android:layout_height="127dp"
21 |             android:scaleType="fitXY" />
22 | 
23 |         <TextView
24 |             android:id="@+id/tv_one_photo_title"
25 |             android:layout_width="match_parent"
26 |             android:layout_height="wrap_content"
27 |             android:layout_marginTop="3dp"
28 |             android:ellipsize="end"
29 |             android:maxLines="2"
30 |             android:paddingLeft="4dp"
31 |             android:paddingRight="4dp"
32 |             android:text=""
33 |             android:textColor="@color/colorContent"
34 |             android:textSize="12sp" />
35 | 
36 |     </LinearLayout>
37 | 
38 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/item_film_detail_image.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:bind="http://schemas.android.com/apk/res-auto">
 4 | 
 5 | 
 6 |     <data>
 7 | 
 8 |         <variable
 9 |             name="bean"
10 |             type="java.lang.String" />
11 |     </data>
12 | 
13 |     <RelativeLayout
14 |         android:layout_width="wrap_content"
15 |         android:layout_height="wrap_content">
16 | 
17 |         <ImageView
18 |             android:id="@+id/iv_image"
19 |             android:layout_width="140dp"
20 |             android:layout_height="100dp"
21 |             android:layout_marginRight="10dp"
22 |             android:imageWidthDp="@{140}"
23 |             android:imageHeightDp="@{100}"
24 |             android:imageUrl='@{bean}'
25 |             android:scaleType="centerCrop" />
26 | 
27 |     </RelativeLayout>
28 | </layout>
29 | 


--------------------------------------------------------------------------------
/app/src/main/res/layout/item_navigation_content.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 4 |     xmlns:tools="http://schemas.android.com/tools">
 5 | 
 6 |     <data>
 7 | 
 8 |         <variable
 9 |             name="bean"
10 |             type="com.example.jingbin.cloudreader.bean.wanandroid.ArticlesBean" />
11 | 
12 |         <import type="android.text.Html" />
13 |     </data>
14 | 
15 |     <TextView
16 |         android:id="@+id/tv_navi_tag"
17 |         android:layout_width="match_parent"
18 |         android:layout_height="wrap_content"
19 |         android:background="?attr/selectableItemBackground"
20 |         android:gravity="center"
21 |         android:paddingLeft="12dp"
22 |         android:paddingTop="@dimen/dp_10"
23 |         android:paddingRight="12dp"
24 |         android:paddingBottom="@dimen/dp_10"
25 |         android:text="@{Html.fromHtml(bean.title)}"
26 |         android:textSize="13sp"
27 |         tools:text="title" />
28 | 
29 | 
30 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/item_welfare.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:tools="http://schemas.android.com/tools">
 4 | 
 5 |     <data>
 6 | 
 7 |         <import type="android.view.View" />
 8 | 
 9 |         <variable
10 |             name="bean"
11 |             type="com.example.jingbin.cloudreader.bean.GankIoDataBean.ResultBean" />
12 | 
13 |     </data>
14 | 
15 |     <RelativeLayout
16 |         android:layout_width="match_parent"
17 |         android:layout_height="wrap_content">
18 | 
19 |         <ImageView
20 |             android:id="@+id/iv_welfare"
21 |             android:layout_width="match_parent"
22 |             android:layout_height="250dp"
23 |             android:defaultPicType="@{1}"
24 |             android:displayFadeImage="@{bean.url}"
25 |             android:scaleType="centerCrop"
26 |             tools:background="@color/tabBackground"
27 |             tools:layout_margin="5dp" />
28 | 
29 |         <View
30 |             android:id="@+id/view_mask"
31 |             android:layout_width="match_parent"
32 |             android:layout_height="250dp"
33 |             android:background="@color/colorBannerMask" />
34 |     </RelativeLayout>
35 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_knowledge_tag.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <TextView xmlns:tools="http://schemas.android.com/tools"
 5 |         android:id="@+id/tv_tag"
 6 |         android:layout_width="wrap_content"
 7 |         android:layout_height="wrap_content"
 8 |         android:background="@drawable/selector_bg_tag"
 9 |         android:textColor="@color/select_navi_text"
10 |         android:textSize="13sp"
11 |         tools:text="title" />
12 | 
13 | </layout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_navi_tag.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | 
 3 | <TextView xmlns:android="http://schemas.android.com/apk/res/android"
 4 |     xmlns:tools="http://schemas.android.com/tools"
 5 |     android:id="@+id/tv_navi_tag"
 6 |     android:layout_width="wrap_content"
 7 |     android:layout_height="wrap_content"
 8 |     android:background="@drawable/shape_ripple_tag_bg"
 9 |     android:textSize="13sp"
10 |     tools:text="title" />


--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_tree_tag.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <TextView xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:tools="http://schemas.android.com/tools"
 4 |     android:id="@+id/tv_tag"
 5 |     android:layout_width="wrap_content"
 6 |     android:layout_height="wrap_content"
 7 |     android:layout_margin="4dp"
 8 |     android:background="@drawable/shape_ripple_tag_bg"
 9 |     android:textSize="13sp"
10 |     tools:text="title" />


--------------------------------------------------------------------------------
/app/src/main/res/layout/sliding_view_bg.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:layout_width="match_parent"
 4 |     android:layout_height="match_parent"
 5 |     android:background="@color/color_page_bg"
 6 |     android:orientation="vertical">
 7 | 
 8 |     <TextView
 9 |         android:layout_width="match_parent"
10 |         android:layout_height="wrap_content"
11 |         android:gravity="center"
12 |         android:padding="12dp"
13 |         android:text="豆瓣api请求限制 40次/分"
14 |         android:textColor="@color/colorContent"
15 |         android:textSize="12sp" />
16 | 
17 |     <TextView
18 |         android:layout_width="match_parent"
19 |         android:layout_height="wrap_content"
20 |         android:gravity="center"
21 |         android:padding="2dp"
22 |         android:text="给您带来的不便深感抱歉"
23 |         android:textColor="@color/colorContent"
24 |         android:textSize="12sp" />
25 | 
26 |     <!--本项目由景彬开发-->
27 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/title_douban_top.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:tools="http://schemas.android.com/tools"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="wrap_content"
 6 |     android:orientation="vertical"
 7 |     android:paddingLeft="20dp"
 8 |     android:paddingRight="20dp"
 9 |     android:paddingTop="20dp">
10 | 
11 |     <TextView
12 |         android:id="@+id/title_top"
13 |         android:layout_width="wrap_content"
14 |         android:layout_height="wrap_content"
15 |         android:textColor="?android:attr/textColorPrimary"
16 |         android:textSize="14sp"
17 |         tools:text="Android:《云阅》- 一款看Android技术资讯的App,不只是用来看安卓~" />
18 | 
19 | </LinearLayout>
20 | 


--------------------------------------------------------------------------------
/app/src/main/res/layout/video_loading_progress.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2009 The Android Open Source Project
 2 | 
 3 |      Licensed under the Apache License, Version 2.0 (the "License");
 4 |      you may not use this file except in compliance with the License.
 5 |      You may obtain a copy of the License at
 6 | 
 7 |           http://www.apache.org/licenses/LICENSE-2.0
 8 | 
 9 |      Unless required by applicable law or agreed to in writing, software
10 |      distributed under the License is distributed on an "AS IS" BASIS,
11 |      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 |      See the License for the specific language governing permissions and
13 |      limitations under the License.
14 | -->
15 | 
16 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
17 |     android:id="@+id/progress_indicator"
18 |     android:layout_width="wrap_content"
19 |     android:layout_height="wrap_content"
20 |     android:layout_centerInParent="true"
21 |     android:orientation="vertical">
22 | 
23 |     <ProgressBar
24 |         android:id="@android:id/progress"
25 |         style="?android:attr/progressBarStyleLarge"
26 |         android:layout_width="wrap_content"
27 |         android:layout_height="wrap_content"
28 |         android:layout_gravity="center" />
29 | 
30 |     <TextView
31 |         android:layout_width="wrap_content"
32 |         android:layout_height="wrap_content"
33 |         android:layout_gravity="center"
34 |         android:paddingTop="5dip"
35 |         android:text="加载中..."
36 |         android:textColor="?android:attr/textColorPrimary"
37 |         android:textSize="14sp" />
38 | </LinearLayout>


--------------------------------------------------------------------------------
/app/src/main/res/layout/viewpager_very_image.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:layout_width="fill_parent"
 4 |     android:layout_height="fill_parent"
 5 |     android:background="#ff000000">
 6 | 
 7 |     <com.github.chrisbanes.photoview.PhotoView
 8 |         android:id="@+id/zoom_image_view"
 9 |         android:layout_width="match_parent"
10 |         android:layout_height="match_parent" />
11 | 
12 |     <View
13 |         android:id="@+id/view_mask"
14 |         android:layout_width="match_parent"
15 |         android:layout_height="match_parent"
16 |         android:background="@color/colorBannerMask"
17 |         android:visibility="visible" />
18 | 
19 |     <ProgressBar
20 |         android:id="@+id/loading"
21 |         android:layout_width="30dp"
22 |         android:layout_height="30dp"
23 |         android:layout_gravity="center" />
24 | 
25 | </FrameLayout>


--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_main_drawer.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android">
 3 |     <!--android:checkableBehavior="single"-->
 4 |     <group>
 5 |         <item
 6 |             android:id="@+id/nav_camera"
 7 |             android:icon="@drawable/ic_menu_camera"
 8 |             android:title="摄影" />
 9 |         <item
10 |             android:id="@+id/nav_gallery"
11 |             android:icon="@drawable/ic_menu_gallery"
12 |             android:title="照片" />
13 |         <item
14 |             android:id="@+id/nav_slideshow"
15 |             android:icon="@drawable/ic_menu_slideshow"
16 |             android:title="视频" />
17 |         <item
18 |             android:id="@+id/nav_manage"
19 |             android:icon="@drawable/ic_menu_manage"
20 |             android:title="工具" />
21 |     </group>
22 | 
23 |     <item android:title="Communicate">
24 |         <menu>
25 |             <item
26 |                 android:id="@+id/nav_share"
27 |                 android:icon="@drawable/ic_menu_share"
28 |                 android:title="分享" />
29 |             <item
30 |                 android:id="@+id/nav_send"
31 |                 android:icon="@drawable/ic_menu_send"
32 |                 android:title="关于" />
33 |         </menu>
34 |     </item>
35 | 
36 | </menu>
37 | 


--------------------------------------------------------------------------------
/app/src/main/res/menu/base_header_menu.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 | 
 5 |     <!--orderInCategory 优先级-->
 6 |     <!--android:icon="@drawable/actionbar_more"-->
 7 |     <item
 8 |         android:id="@+id/actionbar_more"
 9 |         android:orderInCategory="100"
10 |         android:title="@string/actionbar_image"
11 |         app:showAsAction="never" />
12 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/menu/gank_bottomsheet.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 |     <item
 5 |         android:id="@+id/gank_all"
 6 |         android:icon="@drawable/home_title_all"
 7 |         android:title="全部" />
 8 |     <item
 9 |         android:id="@+id/gank_flutter"
10 |         android:icon="@drawable/home_title_flutter"
11 |         android:title="Flutter" />
12 |     <item
13 |         android:id="@+id/gank_ios"
14 |         android:icon="@drawable/home_title_ios"
15 |         android:title="iOS" />
16 |     <item
17 |         android:id="@+id/gank_app"
18 |         android:icon="@drawable/home_title_app"
19 |         android:title="App" />
20 |     <item
21 |         android:id="@+id/gank_qian"
22 |         android:icon="@drawable/home_title_qian"
23 |         android:title="前端" />
24 |     <item
25 |         android:id="@+id/gank_backend"
26 |         android:icon="@drawable/home_title_backend"
27 |         android:title="后端" />
28 |     <item
29 |         android:id="@+id/gank_resouce"
30 |         android:icon="@drawable/home_title_source"
31 |         android:title="推荐" />
32 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/menu/main.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 |     <item
 5 |         android:id="@+id/action_search"
 6 |         android:icon="@drawable/actionbar_search"
 7 |         android:orderInCategory="100"
 8 |         android:title="@string/actionbar_search"
 9 |         app:showAsAction="always" />
10 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_coin.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 | 
 5 |     <item
 6 |         android:id="@+id/actionbar_help"
 7 |         android:icon="@drawable/actionbar_help"
 8 |         android:orderInCategory="100"
 9 |         android:title="@string/actionbar_help_coin"
10 |         app:showAsAction="always" />
11 | 
12 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_night_mode.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 | 
 5 |     <item
 6 |         android:id="@+id/actionbar_ok"
 7 |         android:orderInCategory="100"
 8 |         android:title="@string/actionbar_night_ok"
 9 |         app:showAsAction="always" />
10 | 
11 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_publish.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 | 
 5 |     <item
 6 |         android:id="@+id/actionbar_publish"
 7 |         android:icon="@drawable/action_publish"
 8 |         android:orderInCategory="100"
 9 |         android:title="@string/actionbar_publish"
10 |         app:showAsAction="always" />
11 | 
12 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_web.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 | 
 5 |     <item
 6 |         android:id="@+id/actionbar_web"
 7 |         android:icon="@drawable/actionbar_web"
 8 |         android:orderInCategory="100"
 9 |         android:title="@string/actionbar_web"
10 |         app:showAsAction="always" />
11 | 
12 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/menu/movie_detail.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 | 
 5 |     <!--orderInCategory 优先级-->
 6 |     <item
 7 |         android:id="@+id/actionbar_more"
 8 |         android:icon="@drawable/actionbar_more"
 9 |         android:orderInCategory="100"
10 |         android:title="@string/actionbar_more"
11 |         app:showAsAction="never" />
12 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/menu/slide.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 |     <item
 5 |         android:id="@+id/action_search"
 6 |         android:icon="@drawable/actionbar_search"
 7 |         android:orderInCategory="100"
 8 |         android:title="@string/actionbar_search"
 9 |         app:showAsAction="always" />
10 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/menu/webview_menu.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 | 
 5 |     <item
 6 |         android:id="@+id/actionbar_share"
 7 |         android:orderInCategory="100"
 8 |         android:title="@string/actionbar_webview_share"
 9 |         app:showAsAction="never" />
10 | 
11 |     <item
12 |         android:id="@+id/actionbar_webview_refresh"
13 |         android:orderInCategory="100"
14 |         android:title="@string/actionbar_webview_refresh"
15 |         app:showAsAction="never" />
16 | 
17 |     <item
18 |         android:id="@+id/actionbar_copy_title"
19 |         android:orderInCategory="100"
20 |         android:title="@string/actionbar_webview_copy_title"
21 |         app:showAsAction="never" />
22 | 
23 |     <item
24 |         android:id="@+id/actionbar_copy_link"
25 |         android:orderInCategory="100"
26 |         android:title="@string/actionbar_webview_copy_link"
27 |         app:showAsAction="never" />
28 | 
29 |     <item
30 |         android:id="@+id/actionbar_open"
31 |         android:orderInCategory="100"
32 |         android:title="@string/actionbar_webview_open"
33 |         app:showAsAction="never" />
34 | 
35 |     <item
36 |         android:id="@+id/actionbar_collect"
37 |         android:orderInCategory="100"
38 |         android:title="@string/actionbar_webview_collect"
39 |         app:showAsAction="never" />
40 | </menu>


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background"/>
4 |     <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background"/>
4 |     <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-hdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-mdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/app/src/main/res/values-v28/styles.xml:
--------------------------------------------------------------------------------
 1 | <resources xmlns:tools="http://schemas.android.com/tools">
 2 | 
 3 | 
 4 |     <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
 5 |         <item name="android:windowBackground">@drawable/layer_splash</item>
 6 |         <item name="android:windowFullscreen">true</item>
 7 |         <!--不让windowBackground延申到navigation bar区域-->
 8 |         <item name="android:windowDrawsSystemBarBackgrounds">false</item>
 9 |         <!--适配Android P刘海屏-->
10 |         <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
11 |     </style>
12 | 
13 | </resources>
14 | 


--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <resources>
 3 | 
 4 |     <!--SlidingLayout-->
 5 |     <declare-styleable name="SlidingLayout">
 6 |         <attr name="background_view" format="reference"/>
 7 |         <attr name="sliding_mode" format="enum">
 8 |             <enum name="both" value="0"/>
 9 |             <enum name="top" value="1"/>
10 |             <enum name="bottom" value="2"/>
11 |         </attr>
12 |         <attr name="sliding_pointer_mode" format="enum">
13 |             <enum name="one" value="0"/>
14 |             <enum name="more" value="1"/>
15 |         </attr>
16 |         <attr name="top_max" format="dimension"/>
17 |     </declare-styleable>
18 | </resources>
19 | 


--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 |     <!-- Default screen margins, per the Android Design guidelines. -->
 3 |     <dimen name="nav_header_vertical_spacing">16dp</dimen>
 4 |     <dimen name="nav_header_height">173dp</dimen>
 5 |     <!-- Default screen margins, per the Android Design guidelines. -->
 6 |     <dimen name="activity_horizontal_margin">16dp</dimen>
 7 |     <dimen name="activity_vertical_margin">16dp</dimen>
 8 |     <dimen name="fab_margin">16dp</dimen>
 9 |     <dimen name="titlebar_height">56dp</dimen>
10 | 
11 |     <!--渐变时还没到布局全部就已经不透明了,距离 45dp-->
12 |     <dimen name="base_header_activity_slide_more">45dp</dimen>
13 | 
14 |     <dimen name="home_header_size">291dp</dimen>
15 | 
16 |     <dimen name="nav_bar_height">56dp</dimen>
17 |     <dimen name="nav_bar_height_more">58dp</dimen>
18 | 
19 |     <!--用来测电影详情页-->
20 |     <dimen name="new_home_header_size">325dp</dimen>
21 | 
22 | 
23 |     <dimen name="slide_shape_title_ng">310dp</dimen>
24 | 
25 |     <!--电影详情图片的宽高-->
26 |     <dimen name="movie_detail_width">125dp</dimen>
27 |     <dimen name="movie_detail_height">165dp</dimen>
28 |     <!--书籍详情图片的宽高-->
29 |     <dimen name="book_detail_width">120dp</dimen>
30 |     <dimen name="book_detail_height">165dp</dimen>
31 |     <dimen name="size_16dp">16dp</dimen>
32 |     <dimen name="size_8dp">8dp</dimen>
33 |     <dimen name="size_7dp">7dp</dimen>
34 |     <dimen name="size_5dp">5dp</dimen>
35 |     <dimen name="size_30dp">30dp</dimen>
36 |     <dimen name="sp_30">30sp</dimen>
37 |     <dimen name="dp_10">10dp</dimen>
38 |     <dimen name="dp_4">4dp</dimen>
39 | 
40 | </resources>
41 | 


--------------------------------------------------------------------------------
/app/src/main/res/values/drawables.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <item name="toolbarItemBackground" type="drawable">@drawable/abc_item_background_holo_light
4 |     </item>
5 | 
6 | </resources>


--------------------------------------------------------------------------------
/app/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <item type="id" name="id_by_sticky_item"/>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/app/src/main/res/values/transition.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <string name="transition_movie_img">transition_movie_img</string>
4 |     <string name="transition_news_img">transition_news_img</string>
5 |     <string name="transition_book_img">transition_book_img</string>
6 |     <string name="transition_publish_bt">transition_publish_bt</string>
7 | 
8 | </resources>


--------------------------------------------------------------------------------
/app/src/test/java/com/example/jingbin/cloudreader/ExampleUnitTest.java:
--------------------------------------------------------------------------------
 1 | package com.example.jingbin.cloudreader;
 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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
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 | 
 5 |     // kotlin 版本
 6 |     ext.kotlin_version = '1.6.20'
 7 | 
 8 |     repositories {
 9 |         google()
10 |         mavenCentral()
11 |     }
12 |     dependencies {
13 |         classpath 'com.android.tools.build:gradle:8.0.2'
14 |         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
15 |         // NOTE: Do not place your application dependencies here; they belong
16 |         // in the individual module build.gradle files
17 |     }
18 | }
19 | 
20 | allprojects {
21 |     repositories {
22 |         google()
23 |         mavenCentral()
24 |         maven { url "https://jitpack.io" }
25 |         maven {
26 |             url "https://dl.google.com/dl/android/maven2/"
27 |         }
28 |     }
29 | }
30 | 
31 | task clean(type: Delete) {
32 |     delete rootProject.buildDir
33 | }
34 | 
35 | // Define versions in a single place
36 | ext {
37 |     // Support library and architecture components support minSdk 21 and above.
38 |     minSdkVersion = 21
39 |     targetSdkVersion = 34
40 |     compileSdkVersion = 34
41 |     buildToolsVersion = '34.0.0'
42 | 
43 |     // App dependencies
44 |     supportLibraryVersion = '28.0.0'
45 |     junitVersion = '4.13.2'
46 | }


--------------------------------------------------------------------------------
/bymvvm/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/bymvvm/consumer-rules.pro


--------------------------------------------------------------------------------
/bymvvm/libs/commons-lang-2.6.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/bymvvm/libs/commons-lang-2.6.jar


--------------------------------------------------------------------------------
/bymvvm/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # You can control the set of applied configuration files using the
 3 | # proguardFiles setting in build.gradle.
 4 | #
 5 | # For more details, see
 6 | #   http://developer.android.com/guide/developing/tools/proguard.html
 7 | 
 8 | # If your project uses WebView with JS, uncomment the following
 9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | #   public *;
13 | #}
14 | 
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 | 
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | 


--------------------------------------------------------------------------------
/bymvvm/src/androidTest/java/me/jingbin/bymvvm/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm;
 2 | 
 3 | import android.content.Context;
 4 | 
 5 | import androidx.test.platform.app.InstrumentationRegistry;
 6 | import androidx.test.ext.junit.runners.AndroidJUnit4;
 7 | 
 8 | import org.junit.Test;
 9 | import org.junit.runner.RunWith;
10 | 
11 | import static org.junit.Assert.*;
12 | 
13 | /**
14 |  * Instrumented test, which will execute on an Android device.
15 |  *
16 |  * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
17 |  */
18 | @RunWith(AndroidJUnit4.class)
19 | public class ExampleInstrumentedTest {
20 |     @Test
21 |     public void useAppContext() {
22 |         // Context of the app under test.
23 |         Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
24 | 
25 |         assertEquals("me.jingbin.bymvvm.test", appContext.getPackageName());
26 |     }
27 | }
28 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 |     package="me.jingbin.bymvvm" />
3 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/base/BaseListViewModel.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.base;
 2 | 
 3 | import android.app.Application;
 4 | 
 5 | import androidx.annotation.NonNull;
 6 | 
 7 | /**
 8 |  * @author jingbin
 9 |  * @data 2018/5/12
10 |  * @Description 有列表的页面
11 |  */
12 | 
13 | public class BaseListViewModel extends BaseViewModel {
14 | 
15 |     public int mPage = 0;
16 | 
17 |     public BaseListViewModel(@NonNull Application application) {
18 |         super(application);
19 |     }
20 | 
21 |     public int getPage() {
22 |         return mPage;
23 |     }
24 | 
25 |     public void setPage(int mPage) {
26 |         this.mPage = mPage;
27 |     }
28 | }
29 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/base/BaseViewModel.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.base;
 2 | 
 3 | import android.app.Application;
 4 | 
 5 | import androidx.annotation.NonNull;
 6 | import androidx.lifecycle.AndroidViewModel;
 7 | 
 8 | import java.util.concurrent.TimeUnit;
 9 | 
10 | import io.reactivex.Observable;
11 | import io.reactivex.Observer;
12 | import io.reactivex.android.schedulers.AndroidSchedulers;
13 | import io.reactivex.disposables.CompositeDisposable;
14 | import io.reactivex.disposables.Disposable;
15 | import io.reactivex.schedulers.Schedulers;
16 | 
17 | /**
18 |  * @author jingbin
19 |  * @data 2018/5/28
20 |  */
21 | public class BaseViewModel extends AndroidViewModel {
22 | 
23 |     private CompositeDisposable mCompositeDisposable;
24 | 
25 |     public BaseViewModel(@NonNull Application application) {
26 |         super(application);
27 |     }
28 | 
29 | 
30 |     protected <T> void execute(Observable<T> observable, Observer<T> observer) {
31 |         observable
32 |                 .throttleFirst(500, TimeUnit.MILLISECONDS)
33 |                 .subscribeOn(Schedulers.io())
34 |                 .observeOn(AndroidSchedulers.mainThread())
35 |                 .subscribe(observer);
36 |     }
37 | 
38 |     protected void addDisposable(Disposable disposable) {
39 |         if (this.mCompositeDisposable == null) {
40 |             this.mCompositeDisposable = new CompositeDisposable();
41 |         }
42 |         this.mCompositeDisposable.add(disposable);
43 |     }
44 | 
45 |     @Override
46 |     protected void onCleared() {
47 |         super.onCleared();
48 |         if (this.mCompositeDisposable != null && !mCompositeDisposable.isDisposed()) {
49 |             this.mCompositeDisposable.clear();
50 |         }
51 |     }
52 | }
53 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/base/NoViewModel.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.base;
 2 | 
 3 | import android.app.Application;
 4 | 
 5 | import androidx.annotation.NonNull;
 6 | import androidx.lifecycle.AndroidViewModel;
 7 | 
 8 | /**
 9 |  * @author jingbin
10 |  * @data 2018/12/22
11 |  * @Description 没有viewModel的情况
12 |  */
13 | 
14 | public class NoViewModel extends AndroidViewModel {
15 | 
16 |     public NoViewModel(@NonNull Application application) {
17 |         super(application);
18 |     }
19 | }
20 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/base/RootApplication.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.base;
 2 | 
 3 | 
 4 | import android.app.Application;
 5 | import android.content.Context;
 6 | import android.os.Build;
 7 | import android.webkit.WebView;
 8 | 
 9 | import androidx.multidex.MultiDex;
10 | 
11 | import me.jingbin.bymvvm.http.HttpUtils;
12 | 
13 | 
14 | public class RootApplication extends Application {
15 | 
16 |     private static Context mContext;
17 | 
18 |     @Override
19 |     public void onCreate() {
20 |         super.onCreate();
21 |         mContext = this;
22 |         HttpUtils.getInstance().init(this);
23 |     }
24 | 
25 |     public static Context getContext() {
26 |         return mContext;
27 |     }
28 | 
29 |     /**
30 |      * 方法数超64k 解决 https://developer.android.com/studio/build/multidex?hl=zh-cn
31 |      * 继承 MultiDexApplication 或 实现此方法。
32 |      */
33 |     @Override
34 |     protected void attachBaseContext(Context base) {
35 |         super.attachBaseContext(base);
36 |         initWebView();
37 |         MultiDex.install(this);
38 |     }
39 | 
40 |     /**
41 |      * Android P针对 WebView在不同进程下无法访问非自己进程中的webview目录
42 |      * fix Using WebView from more than one process at once with the same data directory is not supported
43 |      */
44 |     private void initWebView() {
45 |         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
46 |             String processName = getProcessName();
47 |             String packageName = this.getPackageName();
48 |             if (!packageName.equals(processName)) {
49 |                 WebView.setDataDirectorySuffix(processName);
50 |             }
51 |         }
52 |     }
53 | }
54 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/http/NullOnEmptyConverterFactory.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.http;
 2 | 
 3 | import java.io.IOException;
 4 | import java.lang.annotation.Annotation;
 5 | import java.lang.reflect.Type;
 6 | 
 7 | import okhttp3.ResponseBody;
 8 | import retrofit2.Converter;
 9 | import retrofit2.Retrofit;
10 | 
11 | /**
12 |  * Created by jingbin on 2017/2/14.
13 |  */
14 | 
15 | public class NullOnEmptyConverterFactory extends Converter.Factory {
16 | 
17 |     @Override
18 |     public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
19 |         final Converter<ResponseBody, ?> delegate = retrofit.nextResponseBodyConverter(this, type, annotations);
20 | 
21 |         return new Converter<ResponseBody, Object>() {
22 | 
23 |             @Override
24 |             public Object convert(ResponseBody value) throws IOException {
25 |                 if (value.contentLength() == 0)
26 |                     return null;
27 |                 return delegate.convert(value);
28 |             }
29 |         };
30 |     }
31 | }


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/http/ParamNames.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.http;
 2 | 
 3 | import java.lang.annotation.Documented;
 4 | import java.lang.annotation.ElementType;
 5 | import java.lang.annotation.Retention;
 6 | import java.lang.annotation.RetentionPolicy;
 7 | import java.lang.annotation.Target;
 8 | 
 9 | /**
10 |  * Created by jingbin on 2015/6/24.
11 |  */
12 | @Documented
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target(ElementType.FIELD)
15 | public @interface ParamNames {
16 |     String value();
17 | }
18 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/http/glide/OkHttpGlideModule.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.http.glide;
 2 | 
 3 | import android.content.Context;
 4 | 
 5 | import androidx.annotation.NonNull;
 6 | 
 7 | import com.bumptech.glide.Glide;
 8 | import com.bumptech.glide.Registry;
 9 | import com.bumptech.glide.annotation.GlideModule;
10 | import com.bumptech.glide.load.model.GlideUrl;
11 | import com.bumptech.glide.module.AppGlideModule;
12 | 
13 | import java.io.InputStream;
14 | 
15 | import okhttp3.Call;
16 | import okhttp3.OkHttpClient;
17 | 
18 | /**
19 |  * Created by jingbin on 10/19/21.
20 |  * 直接将Glide.with替换为GlideApp.with即可
21 |  */
22 | @GlideModule
23 | public class OkHttpGlideModule extends AppGlideModule {
24 | 
25 |     @Override
26 |     public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
27 |         // 忽略证书
28 |         OkHttpClient mHttpClient = new OkHttpClient().newBuilder()
29 |                 .sslSocketFactory(SSLSocketClient.getSSLSocketFactory(),SSLSocketClient.X509TrustManager())
30 |                 .hostnameVerifier(SSLSocketClient.getHostnameVerifier())
31 |                 .build();
32 |         registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory((Call.Factory) mHttpClient));
33 |     }
34 | }
35 | 
36 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/room/DiskIOThreadExecutor.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.room;
 2 | 
 3 | import androidx.annotation.NonNull;
 4 | 
 5 | import java.util.concurrent.Executor;
 6 | import java.util.concurrent.Executors;
 7 | 
 8 | /**
 9 |  * Executor that runs a task on a new background thread.
10 |  * 只开启一个核心线程,依次执行,不存在并发问题
11 |  */
12 | public class DiskIOThreadExecutor implements Executor {
13 | 
14 |     private final Executor mDiskIO;
15 | 
16 |     public DiskIOThreadExecutor() {
17 |         mDiskIO = Executors.newSingleThreadExecutor();
18 |     }
19 | 
20 |     @Override
21 |     public void execute(@NonNull Runnable command) {
22 |         mDiskIO.execute(command);
23 |     }
24 | }
25 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/room/Injection.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.room;
 2 | 
 3 | /**
 4 |  * @author jingbin
 5 |  * @data 2018/4/19
 6 |  * @Description
 7 |  */
 8 | 
 9 | public class Injection {
10 | 
11 |     public static UserDataBaseSource get() {
12 |         UserDataBase database = UserDataBase.getDatabase();
13 |         return UserDataBaseSource.getInstance(new AppExecutors(), database.waitDao());
14 |     }
15 | 
16 | }
17 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/room/UserDataCallback.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.room;
 2 | 
 3 | /**
 4 |  * @author jingbin
 5 |  * @data 2018/4/19
 6 |  * @Description
 7 |  */
 8 | 
 9 | public interface UserDataCallback {
10 | 
11 |     /**
12 |      * 返回数据为null
13 |      */
14 |     void onDataNotAvailable();
15 | 
16 |     /**
17 |      * @param bean 返回数据
18 |      */
19 |     void getData(User bean);
20 | }
21 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/rxbus/RxBusBaseMessage.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.rxbus;
 2 | 
 3 | /**
 4 |  * Created by jingbin on 16/5/17.
 5 |  */
 6 | public class RxBusBaseMessage {
 7 | 
 8 |     private int code;
 9 |     private Object object;
10 | 
11 |     public RxBusBaseMessage(int code, Object object) {
12 |         this.code = code;
13 |         this.object = object;
14 |     }
15 | 
16 |     public RxBusBaseMessage() {
17 |     }
18 | 
19 |     public int getCode() {
20 |         return code;
21 |     }
22 | 
23 |     public Object getObject() {
24 |         return object;
25 |     }
26 | }
27 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/utils/CheckNetwork.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.utils;
 2 | 
 3 | import android.content.Context;
 4 | import android.net.ConnectivityManager;
 5 | import android.net.NetworkInfo;
 6 | 
 7 | /**
 8 |  * 用于判断是不是联网状态
 9 |  *
10 |  * @author Dzy
11 |  */
12 | public class CheckNetwork {
13 | 
14 |     /**
15 |      * 判断网络是否连通
16 |      */
17 |     public static boolean isNetworkConnected(Context context) {
18 |         try {
19 |             if(context!=null){
20 |                 @SuppressWarnings("static-access")
21 |                 ConnectivityManager cm = (ConnectivityManager) context
22 |                         .getSystemService(context.CONNECTIVITY_SERVICE);
23 |                 NetworkInfo info = cm.getActiveNetworkInfo();
24 |                 return info != null && info.isConnected();
25 |             }else{
26 |                 /**如果context为空,就返回false,表示网络未连接*/
27 |                 return false;
28 |             }
29 |         }catch (Exception e){
30 |             e.printStackTrace();
31 |             return false;
32 |         }
33 | 
34 | 
35 |     }
36 | 
37 |     public static boolean isWifiConnected(Context context) {
38 |         if (context != null) {
39 |             ConnectivityManager cm = (ConnectivityManager) context
40 |                     .getSystemService(context.CONNECTIVITY_SERVICE);
41 |             NetworkInfo info = cm.getActiveNetworkInfo();
42 |             return info != null && (info.getType() == ConnectivityManager.TYPE_WIFI);
43 |         } else {
44 |             /**如果context为null就表示为未连接*/
45 |             return false;
46 |         }
47 | 
48 |     }
49 | 
50 | }
51 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/utils/ClassUtil.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.utils;
 2 | 
 3 | import androidx.lifecycle.AndroidViewModel;
 4 | 
 5 | import java.lang.reflect.ParameterizedType;
 6 | import java.lang.reflect.Type;
 7 | 
 8 | import me.jingbin.bymvvm.base.NoViewModel;
 9 | 
10 | /**
11 |  * Created by jingbin on 2018/12/26.
12 |  */
13 | 
14 | public class ClassUtil {
15 | 
16 |     /**
17 |      * 获取泛型ViewModel的class对象
18 |      */
19 |     public static <T> Class<T> getViewModel(Object obj) {
20 |         Class<?> currentClass = obj.getClass();
21 |         Class<T> tClass = getGenericClass(currentClass, AndroidViewModel.class);
22 |         if (tClass == null || tClass == AndroidViewModel.class || tClass == NoViewModel.class) {
23 |             return null;
24 |         }
25 |         return tClass;
26 |     }
27 | 
28 |     private static <T> Class<T> getGenericClass(Class<?> klass, Class<?> filterClass) {
29 |         Type type = klass.getGenericSuperclass();
30 |         if (type == null || !(type instanceof ParameterizedType)) return null;
31 |         ParameterizedType parameterizedType = (ParameterizedType) type;
32 |         Type[] types = parameterizedType.getActualTypeArguments();
33 |         for (Type t : types) {
34 |             Class<T> tClass = (Class<T>) t;
35 |             if (filterClass.isAssignableFrom(tClass)) {
36 |                 return tClass;
37 |             }
38 |         }
39 |         return null;
40 |     }
41 | }
42 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/utils/CommonUtils.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.utils;
 2 | 
 3 | import android.content.Context;
 4 | import android.content.res.Resources;
 5 | import android.graphics.Color;
 6 | import android.graphics.drawable.Drawable;
 7 | 
 8 | import androidx.core.content.ContextCompat;
 9 | 
10 | import java.util.Random;
11 | 
12 | import me.jingbin.bymvvm.base.RootApplication;
13 | 
14 | /**
15 |  * Created by jingbin on 2016/11/22.
16 |  * 获取原生资源
17 |  */
18 | public class CommonUtils {
19 | 
20 |     /**
21 |      * 随机颜色
22 |      */
23 |     public static int randomColor() {
24 |         Random random = new Random();
25 |         int red = random.nextInt(150) + 50;//50-199
26 |         int green = random.nextInt(150) + 50;//50-199
27 |         int blue = random.nextInt(150) + 50;//50-199
28 |         return Color.rgb(red, green, blue);
29 |     }
30 | 
31 |     public static Drawable getDrawable(Context context, int resId) {
32 |         return ContextCompat.getDrawable(context, resId);
33 |     }
34 | 
35 |     public static int getColor(Context context, int resId) {
36 |         return ContextCompat.getColor(context, resId);
37 |     }
38 | 
39 |     public static Resources getResources() {
40 |         return RootApplication.getContext().getResources();
41 |     }
42 | 
43 |     public static String getString(int resId) {
44 |         return getResources().getString(resId);
45 |     }
46 | 
47 |     public static String getString(Context context, int resId) {
48 |         return context.getResources().getString(resId);
49 |     }
50 | 
51 |     public static float getDimens(int resId) {
52 |         return getResources().getDimension(resId);
53 |     }
54 | 
55 | }
56 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/java/me/jingbin/bymvvm/utils/StatusBarView.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm.utils;
 2 | 
 3 | import android.content.Context;
 4 | import android.util.AttributeSet;
 5 | import android.view.View;
 6 | 
 7 | /**
 8 |  * Created by Jaeger on 16/6/8.
 9 |  *
10 |  * Email: chjie.jaeger@gmail.com
11 |  * GitHub: https://github.com/laobie
12 |  */
13 | public class StatusBarView extends View {
14 |     public StatusBarView(Context context, AttributeSet attrs) {
15 |         super(context, attrs);
16 |     }
17 | 
18 |     public StatusBarView(Context context) {
19 |         super(context);
20 |     }
21 | }
22 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/res/drawable-xhdpi/app_loading0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/bymvvm/src/main/res/drawable-xhdpi/app_loading0.png


--------------------------------------------------------------------------------
/bymvvm/src/main/res/drawable-xhdpi/app_loading1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/bymvvm/src/main/res/drawable-xhdpi/app_loading1.png


--------------------------------------------------------------------------------
/bymvvm/src/main/res/drawable-xhdpi/app_loading2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/bymvvm/src/main/res/drawable-xhdpi/app_loading2.png


--------------------------------------------------------------------------------
/bymvvm/src/main/res/drawable-xhdpi/app_loading3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/bymvvm/src/main/res/drawable-xhdpi/app_loading3.png


--------------------------------------------------------------------------------
/bymvvm/src/main/res/drawable-xhdpi/icon_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/bymvvm/src/main/res/drawable-xhdpi/icon_back.png


--------------------------------------------------------------------------------
/bymvvm/src/main/res/drawable-xxhdpi/icon_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/bymvvm/src/main/res/drawable-xxhdpi/icon_back.png


--------------------------------------------------------------------------------
/bymvvm/src/main/res/drawable-xxhdpi/load_err.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/bymvvm/src/main/res/drawable-xxhdpi/load_err.png


--------------------------------------------------------------------------------
/bymvvm/src/main/res/drawable/yun_anim.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:oneshot="false">
 4 | 
 5 |     <item
 6 |         android:drawable="@drawable/app_loading0"
 7 |         android:duration="150" />
 8 |     <item
 9 |         android:drawable="@drawable/app_loading1"
10 |         android:duration="150" />
11 |     <item
12 |         android:drawable="@drawable/app_loading2"
13 |         android:duration="150" />
14 |     <item
15 |         android:drawable="@drawable/app_loading3"
16 |         android:duration="150" />
17 | 
18 | </animation-list>  


--------------------------------------------------------------------------------
/bymvvm/src/main/res/layout/fragment_base.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <RelativeLayout
 5 |         android:id="@+id/container"
 6 |         android:layout_width="match_parent"
 7 |         android:layout_height="match_parent">
 8 | 
 9 |         <!--加载失败-->
10 |         <ViewStub
11 |             android:id="@+id/vs_error_refresh"
12 |             android:layout_width="match_parent"
13 |             android:layout_height="match_parent"
14 |             android:layout_centerHorizontal="true"
15 |             android:layout="@layout/layout_loading_error" />
16 | 
17 |         <!--加载中..-->
18 |         <ViewStub
19 |             android:id="@+id/vs_loading"
20 |             android:layout_width="wrap_content"
21 |             android:layout_height="wrap_content"
22 |             android:layout_centerHorizontal="true"
23 |             android:layout="@layout/layout_loading_view" />
24 | 
25 |         <!--数据为空-->
26 |         <ViewStub
27 |             android:id="@+id/vs_empty"
28 |             android:layout_width="wrap_content"
29 |             android:layout_height="wrap_content"
30 |             android:layout_centerHorizontal="true"
31 |             android:layout="@layout/layout_loading_empty" />
32 | 
33 |     </RelativeLayout>
34 | </layout>


--------------------------------------------------------------------------------
/bymvvm/src/main/res/layout/layout_loading_empty.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <layout xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
 5 |         xmlns:tools="http://schemas.android.com/tools"
 6 |         android:id="@+id/ll_progress_bar"
 7 |         android:layout_width="match_parent"
 8 |         android:layout_height="wrap_content"
 9 |         android:gravity="center">
10 | 
11 |         <TextView
12 |             android:id="@+id/tv_tip_empty"
13 |             android:layout_width="wrap_content"
14 |             android:layout_height="wrap_content"
15 |             android:gravity="center"
16 |             android:lineSpacingExtra="4dp"
17 |             android:layout_marginTop="100dp"
18 |             android:text="@string/by_string_empty"
19 |             android:textSize="14sp"
20 |             app:layout_constraintLeft_toLeftOf="parent"
21 |             app:layout_constraintRight_toRightOf="parent"
22 |             app:layout_constraintTop_toTopOf="parent" />
23 | 
24 |     </androidx.constraintlayout.widget.ConstraintLayout>
25 | </layout>
26 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/res/layout/layout_loading_error.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 4 |     android:id="@+id/ll_progress_bar"
 5 |     android:layout_width="match_parent"
 6 |     android:layout_height="match_parent"
 7 |     android:gravity="center">
 8 | 
 9 |     <ImageView
10 |         android:id="@+id/img_err"
11 |         android:layout_width="wrap_content"
12 |         android:layout_height="wrap_content"
13 |         android:layout_marginBottom="15dp"
14 |         android:src="@drawable/load_err"
15 |         app:layout_constraintBottom_toTopOf="@+id/text_tip"
16 |         app:layout_constraintLeft_toLeftOf="parent"
17 |         app:layout_constraintRight_toRightOf="parent" />
18 | 
19 |     <TextView
20 |         android:id="@+id/text_tip"
21 |         android:layout_width="wrap_content"
22 |         android:layout_height="wrap_content"
23 |         android:layout_below="@+id/img_err"
24 |         android:text="@string/by_string_try_load"
25 |         android:textSize="14sp"
26 |         app:layout_constraintBottom_toBottomOf="parent"
27 |         app:layout_constraintLeft_toLeftOf="parent"
28 |         app:layout_constraintRight_toRightOf="parent"
29 |         app:layout_constraintTop_toTopOf="parent" />
30 | 
31 | </androidx.constraintlayout.widget.ConstraintLayout>
32 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/res/layout/layout_loading_view.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 4 |     android:id="@+id/ll_progress_bar"
 5 |     android:layout_width="wrap_content"
 6 |     android:layout_height="wrap_content">
 7 | 
 8 |     <ImageView
 9 |         android:id="@+id/img_progress"
10 |         android:layout_width="wrap_content"
11 |         android:layout_height="wrap_content"
12 |         android:layout_marginTop="50dp"
13 |         android:src="@drawable/yun_anim"
14 |         app:layout_constraintStart_toStartOf="parent"
15 |         app:layout_constraintTop_toTopOf="parent" />
16 | 
17 |     <TextView
18 |         android:id="@+id/text_tip"
19 |         android:layout_width="wrap_content"
20 |         android:layout_height="wrap_content"
21 |         android:layout_marginStart="10dp"
22 |         android:layout_marginTop="50dp"
23 |         android:text="@string/by_string_loading"
24 |         android:textColor="@color/colorTabText"
25 |         android:textSize="14sp"
26 |         app:layout_constraintLeft_toRightOf="@+id/img_progress"
27 |         app:layout_constraintTop_toTopOf="parent" />
28 | 
29 | </androidx.constraintlayout.widget.ConstraintLayout>
30 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/res/values-en/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="by_string_try_load">Failed to load, click retry</string>
3 |     <string name="by_string_loading">Loading…</string>
4 |     <string name="by_string_empty">No content was found</string>
5 | </resources>
6 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <color name="colorTheme">#ffce3d3a</color>
4 |     <color name="colorToolBar">#181818</color>
5 |     <color name="colorWhite">#ffffffff</color>
6 |     <color name="colorTabText">#585858</color>
7 | </resources>
8 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <color name="colorTheme">#ffce3d3a</color>
4 |     <color name="colorToolBar">#ffce3d3a</color>
5 |     <color name="colorWhite">#ffffffff</color>
6 |     <color name="colorTabText">#585858</color>
7 | </resources>
8 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/res/values/drawables.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <item name="toolbarItemBackground" type="drawable">@drawable/abc_item_background_holo_light
4 |     </item>
5 | 
6 | </resources>


--------------------------------------------------------------------------------
/bymvvm/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="by_string_try_load">加载失败,点击重试</string>
3 |     <string name="by_string_loading">努力加载中…</string>
4 |     <string name="by_string_empty">未找到相关内容</string>
5 | </resources>
6 | 


--------------------------------------------------------------------------------
/bymvvm/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | <resources xmlns:tools="http://schemas.android.com/tools">
 2 | 
 3 | 
 4 |     <!--ToolBar 样式-->
 5 |     <style name="ToolbarStyle" parent="@style/ThemeOverlay.AppCompat.ActionBar">
 6 |         <item name="actionBarItemBackground">@drawable/toolbarItemBackground</item>
 7 |         <item name="selectableItemBackground">@drawable/toolbarItemBackground</item>
 8 |         <item name="titleTextAppearance">@style/ToolBar.Title</item>
 9 |         <item name="subtitleTextAppearance">@style/Toolbar.SubTitle</item>
10 |         <item name="android:windowNoTitle">true</item>
11 |     </style>
12 | 
13 |     <!--ToolBar 标题-->
14 |     <style name="ToolBar.Title" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
15 |         <item name="android:textSize">17sp</item>
16 |         <item name="android:textColor">@color/colorWhite</item>
17 |     </style>
18 | 
19 |     <!--ToolBar 副标题-->
20 |     <style name="Toolbar.SubTitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Subtitle">
21 |         <item name="android:textSize">9sp</item>
22 |         <item name="android:textColor">#99ffffff</item>
23 |     </style>
24 | 
25 | </resources>
26 | 


--------------------------------------------------------------------------------
/bymvvm/src/test/java/me/jingbin/bymvvm/ExampleUnitTest.java:
--------------------------------------------------------------------------------
 1 | package me.jingbin.bymvvm;
 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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
11 |  */
12 | public class ExampleUnitTest {
13 |     @Test
14 |     public void addition_isCorrect() {
15 |         assertEquals(4, 2 + 2);
16 |     }
17 | }


--------------------------------------------------------------------------------
/file/Wechat-admire.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/file/Wechat-admire.jpg


--------------------------------------------------------------------------------
/file/admire.md:
--------------------------------------------------------------------------------
 1 | <img src="https://raw.githubusercontent.com/youlookwhat/CloudReader/master/file/Wechat-admire.jpg" width="250" height="250" /><img src="https://raw.githubusercontent.com/youlookwhat/CloudReader/master/file/alipay-admire.jpg" width="250" height="250"/>
 2 | 
 3 | ### 捐赠列表
 4 | 非常感谢列表中的朋友,你们的肯定和支持是我前进的最大动力!
 5 | 
 6 | |昵称|日期|留言|
 7 | |:--:|:--:|:--:|
 8 | |Cheung|2018-11-14|👍|
 9 | |腾飞的明天|2018-05-31|GitHub推荐:[fly803/BaseProject](https://github.com/fly803/BaseProject)|
10 | |未留名|2018-05-10|多谢前辈关于云阅的解答|
11 | |未留名|2018-04-17|博主云阅很赞,希望博主能继续更新|
12 | |未留名|2018-04-01|大神啊|
13 | |未留名|2018-03-13|666|
14 | |未留名|2018-03-08||
15 | |凌云|2018-12-31|感谢作者,参考搭项目很不错<!--50元 感谢老铁-->|
16 | |Nordpol|2019-01-31|非常棒,希望有更多更好地开源项目|
17 | |Eren丶耶格尔|2019-03-03||
18 | |༺࿈༻|2019-03-22|感谢大佬<!--50元 感谢老铁-->|
19 | 
20 | 
21 | 注:因为之前的赞赏并未归纳,微信记录里看不到对应昵称,所以均显示为“未留名”,见谅。
22 | 
23 | 


--------------------------------------------------------------------------------
/file/alipay-admire.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/file/alipay-admire.jpg


--------------------------------------------------------------------------------
/file/cloudreader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/file/cloudreader.gif


--------------------------------------------------------------------------------
/file/download_200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/file/download_200.png


--------------------------------------------------------------------------------
/file/images.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/file/images.png


--------------------------------------------------------------------------------
/file/images2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/file/images2.png


--------------------------------------------------------------------------------
/file/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/file/title.png


--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
 1 | # Project-wide Gradle settings.
 2 | 
 3 | # IDE (e.g. Android Studio) users:
 4 | # Gradle settings configured through the IDE *will override*
 5 | # any settings specified in this file.
 6 | 
 7 | # For more details on how to configure your build environment visit
 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
 9 | 
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | org.gradle.jvmargs=-Xmx4096m
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 | 
19 | # vivo手机打包处理(不能打test)
20 | android.injected.testOnly = false
21 | 
22 | android.useAndroidX=true
23 | android.enableJetifier=true
24 | 
25 | # BuildConfig & swith
26 | android.defaults.buildfeatures.buildconfig=true
27 | android.nonTransitiveRClass=true
28 | android.nonFinalResIds=false


--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/youlookwhat/CloudReader/f5b9e67eef10225d15d3f256da23719b769a8c34/gradle/wrapper/gradle-wrapper.jar


--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Mar 06 15:15:46 CST 2024
2 | distributionBase=GRADLE_USER_HOME
3 | #distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
4 | distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip
5 | distributionPath=wrapper/dists
6 | zipStorePath=wrapper/dists
7 | zipStoreBase=GRADLE_USER_HOME
8 | 


--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 | include ':bymvvm'
3 | 


--------------------------------------------------------------------------------