├── .gitignore ├── .idea ├── modules.xml └── vcs.xml ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── channel ├── proguard-rules.pro └── src │ ├── debug │ └── res │ │ └── values │ │ └── strings.xml │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── rae │ │ └── cnblogs │ │ ├── MainActivity.java │ │ └── TestActivity.java │ └── res │ ├── layout │ └── activity_test.xml │ ├── values │ └── strings.xml │ └── xml │ └── network_security_config.xml ├── build.gradle ├── debug.keystore ├── dependencies.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── images ├── guide.jpg └── icon.png ├── module-basic ├── .gitignore ├── build.gradle ├── libs │ ├── umeng-share-QQ-simplify-6.9.3.jar │ ├── umeng-share-core-6.9.3.jar │ ├── umeng-share-sina-simplify-6.9.3.jar │ ├── umeng-share-wechat-simplify-6.9.3.jar │ └── umeng-sharetool-6.9.3.jar ├── proguard-rules.pro └── src │ ├── debug │ └── AndroidManifest.xml │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── rae │ │ └── cnblogs │ │ └── basic │ │ ├── AppDataManager.java │ │ ├── AppFileProvider.java │ │ ├── AppFragmentAdapter.java │ │ ├── AppImageLoader.java │ │ ├── AppMobclickAgent.java │ │ ├── ApplicationCompat.java │ │ ├── BaseItemAdapter.java │ │ ├── BasicActivity.java │ │ ├── BasicApplication.java │ │ ├── BasicFragment.java │ │ ├── BasicPresenter.java │ │ ├── BitmapCompressor.java │ │ ├── ContentEntity.java │ │ ├── IPageView.java │ │ ├── IPresenter.java │ │ ├── IPresenterView.java │ │ ├── ImageGlideModule.java │ │ ├── RaeUIActivity.java │ │ ├── Rx.java │ │ ├── holder │ │ ├── ItemLoadingViewHolder.java │ │ └── SimpleViewHolder.java │ │ └── rx │ │ ├── AndroidObservable.java │ │ ├── DefaultEmptyObserver.java │ │ ├── LifecycleObserver.java │ │ └── LifecycleProvider.java │ └── res │ ├── drawable │ ├── umeng_socialize_back_icon.png │ ├── umeng_socialize_btn_bg.xml │ ├── umeng_socialize_copy.png │ ├── umeng_socialize_copyurl.png │ ├── umeng_socialize_delete.png │ ├── umeng_socialize_edit_bg.xml │ ├── umeng_socialize_fav.png │ ├── umeng_socialize_menu_default.png │ ├── umeng_socialize_more.png │ ├── umeng_socialize_qq.png │ ├── umeng_socialize_qzone.png │ ├── umeng_socialize_share_music.png │ ├── umeng_socialize_share_video.png │ ├── umeng_socialize_share_web.png │ ├── umeng_socialize_sina.png │ ├── umeng_socialize_wechat.png │ └── umeng_socialize_wxcircle.png │ ├── layout │ ├── socialize_share_menu_item.xml │ ├── umeng_socialize_oauth_dialog.xml │ └── umeng_socialize_share.xml │ └── values │ ├── strings.xml │ ├── umeng_socialize_shareview_strings.xml │ └── umeng_socialize_style.xml ├── module-blog ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── debug │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── rae │ │ └── cnblogs │ │ └── blog │ │ └── BlogTestActivity.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── rae │ │ └── cnblogs │ │ └── blog │ │ ├── BlogRouteDialogFragment.java │ │ ├── BloggerActivity.java │ │ ├── CategoryActivity.java │ │ ├── CnblogsService.java │ │ ├── CommentActivity.java │ │ ├── ContentDetailActivity.java │ │ ├── FavoritesActivity.java │ │ ├── HistoryActivity.java │ │ ├── adapter │ │ ├── BlogCommentItemAdapter.java │ │ ├── BlogHomeFragmentAdapter.java │ │ ├── CategoryDragAdapter.java │ │ ├── ContentItemAdapter.java │ │ ├── FavoriteFragmentAdapter.java │ │ ├── FavoriteItemAdapter.java │ │ ├── FeedItemAdapter.java │ │ ├── HistoryAdapter.java │ │ └── ICategoryItemListener.java │ │ ├── blogger │ │ ├── BloggerContract.java │ │ └── BloggerPresenterImpl.java │ │ ├── category │ │ ├── CategoryContract.java │ │ └── CategoryPresenterImpl.java │ │ ├── comm │ │ ├── ContentListContract.java │ │ └── IRefreshable.java │ │ ├── comment │ │ ├── CommentContract.java │ │ └── CommentPresenterImpl.java │ │ ├── content │ │ ├── BasicBlogPresenterImpl.java │ │ ├── BlogListPresenterImpl.java │ │ ├── BookmarkListContract.java │ │ ├── BookmarkListPresenterImpl.java │ │ ├── KbListPresenterImpl.java │ │ ├── NewsListPresenterImpl.java │ │ └── SearchBlogListPresenterImpl.java │ │ ├── detail │ │ ├── BlogDetailPresenterImpl.java │ │ ├── BlogRouteContract.java │ │ ├── BlogRoutePresenterImpl.java │ │ ├── ContentDetailContract.java │ │ ├── ContentDetailPresenterImpl.java │ │ ├── KbDetailPresenterImpl.java │ │ └── NewDetailPresenterImpl.java │ │ ├── favorite │ │ ├── FavoriteContract.java │ │ └── FavoritePresenterImpl.java │ │ ├── feed │ │ ├── FeedContract.java │ │ └── FeedPresenterImpl.java │ │ ├── fragment │ │ ├── BlogDetailFragment.java │ │ ├── BlogHomeFragment.java │ │ ├── BloggerListFragment.java │ │ ├── CategoryFragment.java │ │ ├── CommentFragment.java │ │ ├── ContentWebViewFragment.java │ │ ├── FavoritesFragment.java │ │ ├── FeedListFragment.java │ │ ├── IBlogDetailFragment.java │ │ ├── KbListFragment.java │ │ ├── MultipleTypeBlogListFragment.java │ │ ├── NewsListFragment.java │ │ └── SearchBlogListFragment.java │ │ ├── history │ │ ├── HistoryContract.java │ │ └── HistoryPresenterImpl.java │ │ ├── holder │ │ ├── BlogCommentViewHolder.java │ │ ├── CategoryHolder.java │ │ ├── ContentItemViewHolder.java │ │ ├── FavoriteItemHolder.java │ │ ├── FeedViewHolder.java │ │ └── HistoryHolder.java │ │ ├── home │ │ ├── BlogHomeContract.java │ │ └── BlogHomePresenterImpl.java │ │ └── job │ │ ├── AsyncDownloadJob.java │ │ ├── BlogContentJob.java │ │ ├── BlogContentTask.java │ │ ├── IJob.java │ │ └── JobEvent.java │ └── res │ ├── drawable │ ├── bg_blogger_info_card.xml │ └── bg_blogger_info_card_night.xml │ ├── layout │ ├── activity_blog_detail.xml │ ├── activity_blog_route.xml │ ├── activity_category.xml │ ├── activity_favorite.xml │ ├── activity_history.xml │ ├── fm_blog_comment.xml │ ├── fm_blog_detail.xml │ ├── fm_blog_home.xml │ ├── fm_blog_list.xml │ ├── fm_blogger_info.xml │ ├── fm_category.xml │ ├── fm_web_content.xml │ ├── item_blog_comment.xml │ ├── item_blog_list.xml │ ├── item_blogger_feed.xml │ ├── item_category.xml │ ├── item_favorite.xml │ ├── item_history.xml │ └── item_news_list.xml │ └── values │ └── strings.xml ├── module-discover ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── rae │ │ └── cnblogs │ │ └── discover │ │ ├── AntCodeBasicPresenter.java │ │ ├── AntPageObservable.java │ │ ├── AntSdkDefaultObserver.java │ │ ├── BannerImageLoader.java │ │ ├── RaeBaseQuickAdapter.java │ │ ├── SubscribeColumnMessage.java │ │ ├── column │ │ └── detail │ │ │ ├── AntColumnDetailAdapter.java │ │ │ ├── AntUserColumnDetailAdapter.java │ │ │ ├── ColumnDetailCatalogEntity.java │ │ │ ├── ColumnDetailHeaderEntity.java │ │ │ └── ColumnDetailSectionEntity.java │ │ ├── fragment │ │ ├── AntColumnFragment.java │ │ ├── AntLoginPlaceHolderFragment.java │ │ ├── BlogQuestionFragment.java │ │ ├── DiscoverFragment.java │ │ └── RankingFragment.java │ │ ├── holder │ │ ├── AntColumnHolder.java │ │ └── DiscoverItem.java │ │ ├── home │ │ ├── DiscoverHomeAdapter.java │ │ ├── DiscoverHomePresenterImpl.java │ │ └── IDiscoverHomeContract.java │ │ ├── presenter │ │ ├── AntColumnDetailPresenterImpl.java │ │ ├── AntColumnPresenterImpl.java │ │ ├── AntUserAuthPresenterImpl.java │ │ ├── AntUserColumnDetailPresenterImpl.java │ │ ├── BlogQuestionPresenterImpl.java │ │ ├── IAntColumnContract.java │ │ ├── IAntColumnDetailContract.java │ │ ├── IAntUserAuthContract.java │ │ ├── IAntUserColumnDetailContract.java │ │ ├── IBlogQuestionContract.java │ │ ├── IRankingContract.java │ │ └── RankingPresenterImpl.java │ │ ├── ui │ │ ├── AntAuthResultActivity.java │ │ ├── AntColumnActivity.java │ │ ├── AntColumnDetailActivity.java │ │ ├── AntUserAuthActivity.java │ │ ├── AntUserColumnDetailActivity.java │ │ ├── AntUserContractActivity.java │ │ ├── AntUserSmsCodeActivity.java │ │ ├── BlogQuestionActivity.java │ │ ├── BlogQuestionDetailActivity.java │ │ ├── KbActivity.java │ │ ├── NewsActivity.java │ │ └── RankingActivity.java │ │ └── web │ │ └── AntColumnWebViewActivity.java │ └── res │ ├── color │ ├── text_color_ant_button_default.xml │ └── text_color_ant_catalog.xml │ ├── drawable-xhdpi │ ├── bg_code_edit.xml │ ├── bg_hot_search_ranking.png │ ├── icon_arrow_up.png │ ├── icon_back_black.png │ ├── icon_back_white.png │ ├── icon_column.png │ ├── icon_column_question.png │ ├── icon_gift.png │ ├── icon_hot_ranking_fire.png │ ├── icon_kb.png │ ├── icon_news.png │ ├── icon_question.png │ ├── icon_ranking.png │ └── icon_share.png │ ├── drawable-xxhdpi │ ├── bg_hot_search_ranking.png │ ├── icon_arrow_up.png │ ├── icon_back_black.png │ ├── icon_back_white.png │ ├── icon_column.png │ ├── icon_column_question.png │ ├── icon_gift.png │ ├── icon_hot_ranking_fire.png │ ├── icon_kb.png │ ├── icon_news.png │ ├── icon_question.png │ ├── icon_ranking.png │ └── icon_share.png │ ├── drawable-xxxhdpi │ ├── icon_arrow_up.png │ ├── icon_back_black.png │ ├── icon_back_white.png │ ├── icon_column.png │ ├── icon_column_question.png │ ├── icon_gift.png │ ├── icon_hot_ranking_fire.png │ ├── icon_kb.png │ ├── icon_news.png │ ├── icon_question.png │ ├── icon_ranking.png │ └── icon_share.png │ ├── drawable │ ├── ant_item_divider_catalog_level1.xml │ ├── ant_item_divider_catalog_level1_night.xml │ ├── bg_ant_button_default.xml │ ├── bg_ant_catalog_button.xml │ ├── bg_ant_edit_input.xml │ ├── bg_badge_ranking.xml │ ├── bg_blog_question_answer.xml │ ├── bg_blog_question_tag.xml │ ├── bg_blog_question_top.xml │ ├── bg_discover_banner_tab_normal.xml │ ├── bg_discover_banner_tab_selected.xml │ ├── bg_discover_column_card.xml │ ├── bg_discover_section_title.xml │ ├── bg_mask_modal.xml │ └── icon_share_black.xml │ ├── layout │ ├── activity_ant_auth_result.xml │ ├── activity_ant_column.xml │ ├── activity_ant_column_detail.xml │ ├── activity_ant_user_auth.xml │ ├── activity_ant_user_column_detail.xml │ ├── activity_ant_user_contract.xml │ ├── activity_ant_user_smscode.xml │ ├── activity_ant_web.xml │ ├── activity_blog_question.xml │ ├── activity_question_detail.xml │ ├── activity_ranking.xml │ ├── banner.xml │ ├── fm_blog_question.xml │ ├── fm_discover.xml │ ├── fm_ranking.xml │ ├── item_banner.xml │ ├── item_blog_question.xml │ ├── item_column_category_end.xml │ ├── item_column_category_level0.xml │ ├── item_column_category_level1.xml │ ├── item_column_category_start.xml │ ├── item_column_detail_header.xml │ ├── item_column_section.xml │ ├── item_discover_home_column.xml │ ├── item_discover_home_section.xml │ ├── item_discover_home_tab.xml │ ├── item_discover_mine_column.xml │ ├── item_question_tag.xml │ ├── item_ranking.xml │ ├── item_user_column_detail.xml │ ├── item_user_column_detail_header.xml │ ├── item_user_column_title.xml │ ├── quick_view_load_more.xml │ ├── view_ant_login_placeholder.xml │ ├── view_discover_banner.xml │ └── view_discover_category.xml │ └── values │ ├── colors.xml │ └── strings.xml ├── module-home ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── rae │ │ └── cnblogs │ │ └── home │ │ ├── AboutMeActivity.java │ │ ├── FeedbackActivity.java │ │ ├── FontSettingActivity.java │ │ ├── LauncherActivity.java │ │ ├── MineFragment.java │ │ ├── SettingActivity.java │ │ ├── SystemMessageActivity.java │ │ ├── ToolActivity.java │ │ ├── adapter │ │ ├── SearchAdapter.java │ │ ├── SearchResultFragmentAdapter.java │ │ ├── SearchSuggestionAdapter.java │ │ └── SystemMessageAdapter.java │ │ ├── fragment │ │ ├── HotSearchFragment.java │ │ ├── SearchResultFragment.java │ │ └── SearchSuggestFragment.java │ │ ├── holder │ │ ├── SearchHolder.java │ │ ├── SearchSuggestionHolder.java │ │ └── SystemMessageHolder.java │ │ ├── launcher │ │ ├── LauncherContract.java │ │ └── LauncherPresenterImpl.java │ │ ├── main │ │ ├── MainContract.java │ │ └── MainPresenterImpl.java │ │ ├── mine │ │ ├── MineContract.java │ │ └── MinePresenterImpl.java │ │ ├── search │ │ ├── HotSearchContract.java │ │ ├── HotSearchPresenterImpl.java │ │ └── SearchActivity.java │ │ ├── setting │ │ ├── SettingContract.java │ │ └── SettingPresenterImpl.java │ │ └── system │ │ ├── SystemMessageContract.java │ │ └── SystemMessagePresenterImpl.java │ └── res │ ├── layout │ ├── activity_about_me.xml │ ├── activity_font_setting.xml │ ├── activity_launcher.xml │ ├── activity_main.xml │ ├── activity_search.xml │ ├── activity_setting.xml │ ├── activity_system_message.xml │ ├── activity_tool.xml │ ├── avoscloud_feedback_activity_conversation.xml │ ├── fm_hot_search.xml │ ├── fm_mine.xml │ ├── fm_search_result.xml │ ├── fm_search_suggest.xml │ ├── item_hot_search.xml │ ├── item_search.xml │ ├── item_search_suggestion.xml │ ├── item_system_message.xml │ └── tab_view.xml │ └── values │ └── strings.xml ├── module-middleware ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── rae │ │ └── cnblogs │ │ └── middleware │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── rae │ │ │ └── cnblogs │ │ │ ├── AppActivityLifecycle.java │ │ │ ├── AppRoute.java │ │ │ ├── CnblogsApplication.java │ │ │ ├── ContentEntityConverter.java │ │ │ ├── LoginRouteInterceptor.java │ │ │ ├── PageObservable.java │ │ │ ├── activity │ │ │ ├── ActionResultActivity.java │ │ │ ├── ImagePreviewActivity.java │ │ │ ├── ImageSelectionActivity.java │ │ │ ├── SwipeBackBasicActivity.java │ │ │ ├── WBShareActivity.java │ │ │ └── WebActivity.java │ │ │ ├── adapter │ │ │ └── ImageAdapter.java │ │ │ ├── dialog │ │ │ └── ShareDialogFragment.java │ │ │ ├── web │ │ │ ├── WebViewFragment.java │ │ │ └── client │ │ │ │ ├── AppJavaScript.java │ │ │ │ ├── JavaScriptConfig.java │ │ │ │ ├── RaeJavaScriptBridge.java │ │ │ │ ├── RaeWebChromeClient.java │ │ │ │ └── RaeWebViewClient.java │ │ │ └── wxapi │ │ │ └── WXEntryActivity.java │ └── res │ │ ├── drawable │ │ └── bg_default_mask.xml │ │ ├── layout │ │ ├── activity_action_result.xml │ │ ├── activity_image_preview.xml │ │ ├── activity_image_selection.xml │ │ ├── activity_web.xml │ │ ├── item_image_selected.xml │ │ └── item_image_selection.xml │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── rae │ └── cnblogs │ └── middleware │ └── ExampleUnitTest.java ├── module-moment ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── debug │ ├── AndroidManifest.xml │ └── java │ │ └── com │ │ └── rae │ │ └── cnblogs │ │ └── moment │ │ └── MomentTestActivity.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── rae │ │ └── cnblogs │ │ └── moment │ │ ├── MomentAtMeActivity.java │ │ ├── MomentDetailActivity.java │ │ ├── MomentMessageActivity.java │ │ ├── PostMomentActivity.java │ │ ├── adapter │ │ ├── MomentAdapter.java │ │ ├── MomentDetailAdapter.java │ │ ├── MomentImageAdapter.java │ │ └── MomentMessageAdapter.java │ │ ├── detail │ │ ├── IMomentDetailContract.java │ │ └── MomentDetailPresenterImpl.java │ │ ├── fragment │ │ ├── MomentDetailFragment.java │ │ ├── MomentFragment.java │ │ ├── MomentHomeFragment.java │ │ └── MomentMessageFragment.java │ │ ├── holder │ │ ├── MomentCommentHolder.java │ │ ├── MomentHolder.java │ │ ├── MomentImageHolder.java │ │ └── MomentMessageHolder.java │ │ ├── main │ │ ├── IMomentContract.java │ │ └── MomentPresenterImpl.java │ │ ├── message │ │ ├── IMomentMessageContract.java │ │ └── MomentMessagePresenterImpl.java │ │ ├── post │ │ ├── IPostMomentContract.java │ │ └── PostMomentPresenterImpl.java │ │ └── service │ │ └── MomentIntentService.java │ └── res │ ├── layout │ ├── activity_moment_detail.xml │ ├── activity_moment_message.xml │ ├── activity_post_moment.xml │ ├── fm_moment.xml │ ├── fm_moment_detail.xml │ ├── fm_moment_home.xml │ ├── item_comment_placeholder.xml │ ├── item_moment_comment.xml │ ├── item_moment_detail_info.xml │ ├── item_moment_image.xml │ ├── item_moment_list.xml │ ├── item_moment_message.xml │ └── item_post_moment_image.xml │ └── values │ └── strings.xml ├── module-resource ├── .gitignore ├── assets │ ├── css │ │ ├── blog-common.css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap.css │ │ ├── bootstrap.min.css │ │ ├── rae-common.css │ │ ├── rae-night.css │ │ ├── rae.css │ │ ├── shCore.css │ │ ├── shCoreDefault.css │ │ ├── shThemeDefault.css │ │ ├── shThemeRDark.css │ │ └── weui.min.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── images │ │ └── placeholder.png │ ├── js │ │ ├── blog-common.js │ │ ├── bootstrap.min.js │ │ ├── clipboard.min.js │ │ ├── encode.js │ │ ├── highlight.min.js │ │ ├── highlighter │ │ │ ├── shAutoloader.js │ │ │ ├── shBrushAS3.js │ │ │ ├── shBrushAppleScript.js │ │ │ ├── shBrushBash.js │ │ │ ├── shBrushCSharp.js │ │ │ ├── shBrushColdFusion.js │ │ │ ├── shBrushCpp.js │ │ │ ├── shBrushCss.js │ │ │ ├── shBrushDelphi.js │ │ │ ├── shBrushDiff.js │ │ │ ├── shBrushErlang.js │ │ │ ├── shBrushGroovy.js │ │ │ ├── shBrushJScript.js │ │ │ ├── shBrushJava.js │ │ │ ├── shBrushJavaFX.js │ │ │ ├── shBrushPerl.js │ │ │ ├── shBrushPhp.js │ │ │ ├── shBrushPlain.js │ │ │ ├── shBrushPowerShell.js │ │ │ ├── shBrushPython.js │ │ │ ├── shBrushRuby.js │ │ │ ├── shBrushSass.js │ │ │ ├── shBrushScala.js │ │ │ ├── shBrushSql.js │ │ │ ├── shBrushVb.js │ │ │ ├── shBrushXml.js │ │ │ ├── shCore.js │ │ │ └── shLegacy.js │ │ ├── jquery.js │ │ ├── rae-login.js │ │ └── rae.js │ └── view.html ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── drawable-xhdpi │ └── icon_blog_share.png │ ├── drawable-xxhdpi │ └── icon_blog_share.png │ └── res │ ├── anim │ ├── ad_scale_fade_in.xml │ ├── at_slide_fade_in.xml │ ├── image_scale_in.xml │ ├── image_scale_out.xml │ ├── keep_current.xml │ ├── keep_status.xml │ ├── like_anim.xml │ ├── login_slide_in.xml │ ├── login_slide_out.xml │ ├── scale_in.xml │ ├── scale_out.xml │ ├── slide_in_bottom.xml │ ├── slide_in_bottom_overshoot.xml │ ├── slide_out_bottom.xml │ └── toolbar_toast_in.xml │ ├── color │ ├── text_color_default_tab.xml │ ├── text_color_default_tab_night.xml │ ├── text_color_login_button.xml │ ├── text_color_post_moment.xml │ ├── text_color_search_button.xml │ ├── text_color_search_button_night.xml │ ├── text_color_tab_selector.xml │ └── text_color_tab_selector_night.xml │ ├── drawable-xhdpi │ ├── account_top_bg.jpg │ ├── bg_moment_reference.9.png │ ├── bg_new_version.png │ ├── channel_edit_grid_item_del_icon.png │ ├── comment_empty.png │ ├── default_avatar_placeholder.png │ ├── default_placeholder_error.png │ ├── default_placeholder_normal.png │ ├── default_right_arrow.png │ ├── ic_action_bar_avatar.png │ ├── ic_action_bar_search.png │ ├── ic_arrow_left.png │ ├── ic_bookmark_delete.png │ ├── ic_category_arrow.png │ ├── ic_checked_checked.png │ ├── ic_checked_normal.png │ ├── ic_close.png │ ├── ic_close_light.png │ ├── ic_default_placeholder.png │ ├── ic_default_user_avatar.png │ ├── ic_download.png │ ├── ic_edit_delete.png │ ├── ic_empty_placeholder.png │ ├── ic_empty_placeholder_night.png │ ├── ic_eyes_closed.png │ ├── ic_eyes_open.png │ ├── ic_left_top_arrow.png │ ├── ic_loading_white.png │ ├── ic_login_close.png │ ├── ic_login_logo.png │ ├── ic_logo_small.png │ ├── ic_menu_gallery.png │ ├── ic_nav_home_search.png │ ├── ic_network_error_placeholder.png │ ├── ic_official_flag.png │ ├── ic_search.png │ ├── ic_search_del.png │ ├── ic_search_menu.png │ ├── ic_share_app.png │ ├── ic_success.png │ ├── ic_task_finish.png │ ├── ic_trash.png │ ├── icon_blog_share.png │ ├── icon_favorite.png │ ├── icon_feedback_small.png │ ├── icon_font_small.png │ ├── icon_history.png │ ├── icon_market_small.png │ ├── icon_message_center.png │ ├── icon_moom.png │ ├── icon_my_blog.png │ ├── icon_settings_small.png │ ├── icon_share_small.png │ ├── pic_msg_unlogin.png │ ├── picture_loading.png │ ├── picture_viewer_no_pic_icon.png │ ├── tab_channel_background.9.png │ ├── tab_channel_background_night.9.png │ ├── tab_main_background.9.png │ ├── tab_main_background_night.9.png │ ├── toast_failed.png │ └── toast_success.png │ ├── drawable-xxhdpi │ ├── bg_blogger_blur.png │ ├── browser_allshare_normal.png │ ├── browser_allshare_pressed.png │ ├── channel_manager_icon.png │ ├── day_allshare_normal.png │ ├── day_allshare_pressed.png │ ├── default_avatar_placeholder.png │ ├── hint_card_close.png │ ├── hint_card_close_night.png │ ├── ic_action_bar_more.png │ ├── ic_action_bar_search.png │ ├── ic_add_photo_holder.png │ ├── ic_arrow_left.png │ ├── ic_back.png │ ├── ic_back_closed.png │ ├── ic_back_closed_night.png │ ├── ic_back_night.png │ ├── ic_back_white.png │ ├── ic_blog_comment.png │ ├── ic_blog_content_more.png │ ├── ic_blog_like.png │ ├── ic_blog_read.png │ ├── ic_collect.png │ ├── ic_comment_badge.9.png │ ├── ic_comment_normal.png │ ├── ic_edit_delete.png │ ├── ic_empty_message.png │ ├── ic_eyes_closed.png │ ├── ic_eyes_open.png │ ├── ic_favorite_normal.png │ ├── ic_favorite_selected.png │ ├── ic_left_top_arrow.png │ ├── ic_like_badge.9.png │ ├── ic_like_badge_selected.9.png │ ├── ic_loading.png │ ├── ic_login_close.png │ ├── ic_login_logo.png │ ├── ic_logo_small.png │ ├── ic_menu_gallery.png │ ├── ic_moment_at_me.png │ ├── ic_moment_comment.png │ ├── ic_moment_notification.png │ ├── ic_moment_post.png │ ├── ic_nightmode.png │ ├── ic_nightmode_night.png │ ├── ic_official_flag.png │ ├── ic_photo_select_normal.png │ ├── ic_photo_select_selected.png │ ├── ic_progress_loading.png │ ├── ic_pull_down.png │ ├── ic_search_del.png │ ├── ic_search_menu.png │ ├── ic_success.png │ ├── ic_trash.png │ ├── icon_blog_share.png │ ├── icon_favorite.png │ ├── icon_feedback_small.png │ ├── icon_font_small.png │ ├── icon_history.png │ ├── icon_logo_about_me.png │ ├── icon_market_small.png │ ├── icon_message_center.png │ ├── icon_moom.png │ ├── icon_my_blog.png │ ├── icon_settings_small.png │ ├── icon_share_small.png │ ├── launcher_background.jpg │ ├── link_allshare_normal.png │ ├── link_allshare_pressed.png │ ├── moment_share_icon.png │ ├── night_allshare_normal.png │ ├── night_allshare_pressed.png │ ├── qq_allshare_normal.png │ ├── qq_allshare_pressed.png │ ├── qqkj_allshare_normal.png │ ├── qqkj_allshare_pressed.png │ ├── sina_allshare_normal.png │ ├── sina_allshare_pressed.png │ ├── tab_home_h.png │ ├── tab_home_h_night.png │ ├── tab_home_n.png │ ├── tab_home_n_night.png │ ├── tab_library_h.png │ ├── tab_library_h_night.png │ ├── tab_library_n.png │ ├── tab_library_n_night.png │ ├── tab_mine_h.png │ ├── tab_mine_h_night.png │ ├── tab_mine_n.png │ ├── tab_mine_n_night.png │ ├── tab_news_h.png │ ├── tab_news_h_night.png │ ├── tab_news_n.png │ ├── tab_news_n_night.png │ ├── text_allshare_font.png │ ├── text_allshare_normal.png │ ├── text_allshare_pressed.png │ ├── weixin_allshare_normal.png │ ├── weixin_allshare_pressed.png │ ├── weixinpyq_allshare_normal.png │ └── weixinpyq_allshare_pressed.png │ ├── drawable │ ├── abc_checked.xml │ ├── anim_picture_loading.xml │ ├── avoscloud_feedback_contact_background.xml │ ├── avoscloud_feedback_contact_background_night.xml │ ├── avoscloud_feedback_text_background.xml │ ├── avoscloud_feedback_text_background_night.xml │ ├── bg_action_bar_search.xml │ ├── bg_badge.xml │ ├── bg_blog_content_back.xml │ ├── bg_blog_content_bottom_bar.xml │ ├── bg_blog_item_selector.xml │ ├── bg_blog_item_selector_night.xml │ ├── bg_btn_default.xml │ ├── bg_btn_default_night.xml │ ├── bg_btn_follow.xml │ ├── bg_btn_follow_blogger.xml │ ├── bg_btn_follow_blogger_night.xml │ ├── bg_btn_follow_drak.xml │ ├── bg_btn_follow_night.xml │ ├── bg_btn_primary.xml │ ├── bg_btn_send.xml │ ├── bg_btn_send_night.xml │ ├── bg_button_while.xml │ ├── bg_button_while_night.xml │ ├── bg_button_white_selector.xml │ ├── bg_button_white_selector_night.xml │ ├── bg_card_item_selector.xml │ ├── bg_category.xml │ ├── bg_category_lock.xml │ ├── bg_category_lock_night.xml │ ├── bg_category_night.xml │ ├── bg_comment_content.xml │ ├── bg_comment_content_night.xml │ ├── bg_count_down.xml │ ├── bg_default_action_bar.xml │ ├── bg_dialog_default.xml │ ├── bg_dialog_default_night.xml │ ├── bg_dialog_hint_card.xml │ ├── bg_dialog_hint_card_header.xml │ ├── bg_dialog_hint_card_night.xml │ ├── bg_edit_comment.xml │ ├── bg_edit_comment_night.xml │ ├── bg_follow_search.xml │ ├── bg_follow_search_night.xml │ ├── bg_font_setting_message.xml │ ├── bg_hot_search_flag_one.xml │ ├── bg_hot_search_flag_three.xml │ ├── bg_hot_search_flag_two.xml │ ├── bg_login.xml │ ├── bg_login_night.xml │ ├── bg_menu_item.xml │ ├── bg_message_card.xml │ ├── bg_message_card_night.xml │ ├── bg_nav_search.xml │ ├── bg_nav_search_night.xml │ ├── bg_quote_comment.xml │ ├── bg_quote_comment_night.xml │ ├── bg_tab_home.xml │ ├── bg_tab_home_night.xml │ ├── bg_tab_main.xml │ ├── bg_tag.xml │ ├── bg_tag_night.xml │ ├── bg_text_badge.xml │ ├── bg_toast.xml │ ├── bg_toast_home.xml │ ├── bg_user_avatar.xml │ ├── bg_write_comment.xml │ ├── bg_write_comment_night.xml │ ├── boy_night.xml │ ├── button_image_selected_borderless.xml │ ├── channel_edit_grid_item_del.xml │ ├── default_loading.xml │ ├── ic_arrow_left_night.xml │ ├── ic_comment_toolbar.xml │ ├── ic_eyes.xml │ ├── ic_favorite.xml │ ├── ic_like_content_badge.xml │ ├── ic_photo_select.xml │ ├── ic_search_del_night.xml │ ├── ic_share_browser.xml │ ├── ic_share_link.xml │ ├── ic_share_night.xml │ ├── ic_share_night_night.xml │ ├── ic_share_qq.xml │ ├── ic_share_qzone.xml │ ├── ic_share_sina.xml │ ├── ic_share_text.xml │ ├── ic_share_wechat.xml │ ├── ic_share_wechat_sns.xml │ ├── item_divider_while_primary.xml │ ├── item_divider_while_primary_night.xml │ ├── progress_bar_loading.xml │ ├── progress_bar_loading_white.xml │ ├── progress_web_view.xml │ ├── public_button_login.xml │ ├── public_button_login_borderless.xml │ ├── public_divider_while_primary.xml │ ├── public_divider_while_primary_night.xml │ ├── public_setting_item_selector.xml │ ├── public_setting_item_selector_night.xml │ ├── public_top_divider_while_primary.xml │ ├── public_top_divider_while_primary_night.xml │ ├── sb_default_back_drawable.xml │ ├── sb_default_thumb_drawable.xml │ ├── seekbar_progress_material_font_setting.xml │ ├── seekbar_thumb_material_anim_font_setting.xml │ ├── seekbar_tickmark_font_setting.xml │ ├── seekbar_track_material_font_setting.xml │ ├── setting_divider_while_primary.xml │ ├── setting_divider_while_primary_night.xml │ ├── tab_home.xml │ ├── tab_home_night.xml │ ├── tab_library.xml │ ├── tab_library_night.xml │ ├── tab_mine.xml │ ├── tab_mine_night.xml │ ├── tab_news.xml │ ├── tab_news_night.xml │ ├── text_cursor.xml │ ├── umeng_socialize_back_icon.png │ ├── umeng_socialize_btn_bg.xml │ ├── umeng_socialize_copy.png │ ├── umeng_socialize_copyurl.png │ ├── umeng_socialize_delete.png │ ├── umeng_socialize_edit_bg.xml │ ├── umeng_socialize_menu_default.png │ ├── umeng_socialize_more.png │ ├── umeng_socialize_share_music.png │ ├── umeng_socialize_share_video.png │ └── umeng_socialize_share_web.png │ ├── layout │ ├── activity_fragment.xml │ ├── activity_single_fragment.xml │ ├── app_layout_list.xml │ ├── basic_toolbar.xml │ └── cube_ptr_classic_default_header.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.png │ ├── values-v19 │ ├── dimens.xml │ └── styles.xml │ ├── values-v21 │ └── styles.xml │ ├── values-v23 │ └── styles.xml │ ├── values │ ├── attrs.xml │ ├── colors.xml │ ├── colors_night.xml │ ├── dimens.xml │ ├── ids.xml │ ├── strings.xml │ ├── styles.xml │ ├── umeng_socialize_colors.xml │ ├── umeng_socialize_strings.xml │ └── umeng_socialize_style.xml │ └── xml │ └── app_file_paths.xml ├── module-sdk ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── rae │ │ └── com │ │ └── cnblogs │ │ └── sdk │ │ ├── BaseTest.java │ │ ├── BlogApiTest.java │ │ ├── BookmarksApiTest.java │ │ ├── FriendApiTest.java │ │ ├── MomentApiTest.java │ │ ├── NewsApiTest.java │ │ ├── RaeApiTest.java │ │ ├── SearchApiTest.java │ │ ├── UserApiTest.java │ │ └── db │ │ └── DbAdvertTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── category.json │ ├── java │ │ └── com │ │ │ └── rae │ │ │ └── cnblogs │ │ │ └── sdk │ │ │ ├── ApiDefaultObserver.java │ │ │ ├── ApiErrorCode.java │ │ │ ├── ApiOptions.java │ │ │ ├── AppGson.java │ │ │ ├── CnblogsApiException.java │ │ │ ├── CnblogsApiFactory.java │ │ │ ├── CnblogsApiProvider.java │ │ │ ├── CnblogsCookieManager.java │ │ │ ├── CnblogsReportException.java │ │ │ ├── DefaultCnblogsApiProvider.java │ │ │ ├── DefaultJsonParser.java │ │ │ ├── Empty.java │ │ │ ├── JsonBody.java │ │ │ ├── JsonParser.java │ │ │ ├── OKHttpUrl.java │ │ │ ├── Parser.java │ │ │ ├── UserProvider.java │ │ │ ├── api │ │ │ ├── ApiUrls.java │ │ │ ├── IBlogApi.java │ │ │ ├── IBlogQuestionApi.java │ │ │ ├── IBookmarksApi.java │ │ │ ├── ICategoryApi.java │ │ │ ├── IFriendsApi.java │ │ │ ├── IMomentApi.java │ │ │ ├── INewsApi.java │ │ │ ├── IPostApi.java │ │ │ ├── IRaeServerApi.java │ │ │ ├── IRankingApi.java │ │ │ ├── ISearchApi.java │ │ │ ├── IUserApi.java │ │ │ └── impl │ │ │ │ └── CategoryApiImpl.java │ │ │ ├── bean │ │ │ ├── AdvertBean.java │ │ │ ├── BlogBean.java │ │ │ ├── BlogCommentBean.java │ │ │ ├── BlogCommentModel.java │ │ │ ├── BlogQuestionBean.java │ │ │ ├── BlogType.java │ │ │ ├── BookmarksBean.java │ │ │ ├── CategoryBean.java │ │ │ ├── CnblogsApiErrorBean.java │ │ │ ├── FriendsInfoBean.java │ │ │ ├── HotSearchBean.java │ │ │ ├── LoginToken.java │ │ │ ├── LoginTokenBean.java │ │ │ ├── MomentBean.java │ │ │ ├── MomentCommentBean.java │ │ │ ├── MomentPrimaryBean.java │ │ │ ├── SinaShotenBean.java │ │ │ ├── SystemMessageBean.java │ │ │ ├── TagBean.java │ │ │ ├── UserFeedBean.java │ │ │ ├── UserInfoBean.java │ │ │ └── VersionInfo.java │ │ │ ├── config │ │ │ ├── CnblogAppConfig.java │ │ │ └── OfflineConfig.java │ │ │ ├── converter │ │ │ ├── ConverterFactory.java │ │ │ └── TextResponseBodyConverter.java │ │ │ ├── db │ │ │ ├── CnblogsContentProvider.java │ │ │ ├── DbAdvert.java │ │ │ ├── DbBlog.java │ │ │ ├── DbCategory.java │ │ │ ├── DbCnblogs.java │ │ │ ├── DbFactory.java │ │ │ ├── DbSearch.java │ │ │ └── model │ │ │ │ ├── DbSearchInfo.java │ │ │ │ └── UserBlogInfo.java │ │ │ ├── event │ │ │ ├── FontChangedEvent.java │ │ │ ├── LoginInfoEvent.java │ │ │ ├── PostMomentEvent.java │ │ │ ├── SearchEvent.java │ │ │ ├── TabEvent.java │ │ │ └── UserInfoChangedEvent.java │ │ │ ├── interceptor │ │ │ └── RequestInterceptor.java │ │ │ ├── model │ │ │ ├── ImageMetaData.java │ │ │ └── MomentMetaData.java │ │ │ ├── parser │ │ │ ├── AbsUserInfoParser.java │ │ │ ├── AccountParser.java │ │ │ ├── BaiduSuggestionParser.java │ │ │ ├── BlogCommentParser.java │ │ │ ├── BlogContentParser.java │ │ │ ├── BlogContentSourceParser.java │ │ │ ├── BlogInfoParser.java │ │ │ ├── BlogListParser.java │ │ │ ├── BlogOpenStatusParser.java │ │ │ ├── BookmarksDelParser.java │ │ │ ├── BookmarksParser.java │ │ │ ├── BookmarksTagParser.java │ │ │ ├── FriendsBlogListParser.java │ │ │ ├── FriendsInfoParser.java │ │ │ ├── FriendsListParser.java │ │ │ ├── IHtmlParser.java │ │ │ ├── IJsonParser.java │ │ │ ├── ImagePostParser.java │ │ │ ├── KBContentParser.java │ │ │ ├── KBListParser.java │ │ │ ├── LoginPageParser.java │ │ │ ├── LoginParser.java │ │ │ ├── MomentCommentHelper.java │ │ │ ├── MomentCommentParser.java │ │ │ ├── MomentDelParser.java │ │ │ ├── MomentDetailParser.java │ │ │ ├── MomentParser.java │ │ │ ├── MomentReplyParser.java │ │ │ ├── NewsAddCommentParser.java │ │ │ ├── NewsCommentParser.java │ │ │ ├── NewsContentParser.java │ │ │ ├── NewsDelCommentParser.java │ │ │ ├── NewsListParser.java │ │ │ ├── SearchBlogListParser.java │ │ │ ├── SearchBloggerParser.java │ │ │ ├── SearchKbListParser.java │ │ │ ├── SearchNewsListParser.java │ │ │ ├── SimpleUserInfoParser.java │ │ │ ├── SinaShotenParser.java │ │ │ ├── UploadAvatarParser.java │ │ │ ├── UserInfoParser.java │ │ │ └── UserTimelineParser.java │ │ │ └── utils │ │ │ └── ApiUtils.java │ └── res │ │ ├── raw │ │ └── cb │ │ └── values │ │ └── strings.xml │ └── patch │ └── java │ └── com │ └── rae │ └── cnblogs │ └── sdk │ └── PatchCnblogsApiProvider.java ├── module-user ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── rae │ │ └── cnblogs │ │ └── user │ │ ├── activity │ │ ├── AvatarActivity.java │ │ ├── FriendsActivity.java │ │ ├── LoginActivity.java │ │ ├── PersonalActivity.java │ │ ├── PersonalDetailActivity.java │ │ ├── SearchFriendsActivity.java │ │ └── WebLoginActivity.java │ │ ├── adapter │ │ └── FriendsAdapter.java │ │ ├── fragment │ │ ├── FansFragment.java │ │ ├── FollowFragment.java │ │ ├── FriendsFragment.java │ │ ├── PersonalAccountFragment.java │ │ ├── PersonalIntroduceFragment.java │ │ ├── PersonalNickNameFragment.java │ │ ├── PersonalPasswordFragment.java │ │ ├── SearchFriendsFragment.java │ │ └── WebLoginFragment.java │ │ ├── friends │ │ ├── FansPresenterImpl.java │ │ ├── FollowPresenterImpl.java │ │ ├── FriendsContract.java │ │ ├── FriendsPresenterImpl.java │ │ ├── ISearchListener.java │ │ └── SearchFriendsPresenterImpl.java │ │ ├── holder │ │ └── FriendsViewHolder.java │ │ ├── login │ │ ├── LoginContract.java │ │ └── LoginPresenterImpl.java │ │ └── personal │ │ ├── PersonalContract.java │ │ ├── PersonalPresenterImpl.java │ │ ├── UserAvatarContract.java │ │ └── UserAvatarPresenterImpl.java │ └── res │ ├── drawable │ └── bg_personal_edit.xml │ ├── layout │ ├── activity_avatar.xml │ ├── activity_friends.xml │ ├── activity_friends_search.xml │ ├── activity_login.xml │ ├── activity_personal.xml │ ├── activity_personal_detail.xml │ ├── fm_personal_account.xml │ ├── fm_personal_introduce.xml │ ├── fm_personal_pwd.xml │ └── item_friends.xml │ └── values │ └── strings.xml ├── module-widget ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── rae │ │ └── cnblogs │ │ ├── UICompat.java │ │ ├── dialog │ │ ├── BasicDialogFragment.java │ │ ├── DefaultDialog.java │ │ ├── DefaultDialogFragment.java │ │ ├── EditCommentDialogFragment.java │ │ ├── LoadingDialog.java │ │ ├── SlideDialog.java │ │ └── VersionDialogFragment.java │ │ ├── theme │ │ ├── AppThemeManager.java │ │ ├── CnblogsLayoutInflater.java │ │ ├── SkinActivityLifecycleCompat.java │ │ └── ThemeCompat.java │ │ └── widget │ │ ├── AppLayout.java │ │ ├── CodeEditText.java │ │ ├── CountDownTextView.java │ │ ├── ITopScrollable.java │ │ ├── ImageLoadingView.java │ │ ├── LoginPlaceholderView.java │ │ ├── PlaceholderView.java │ │ ├── RaeAppTabLayout.java │ │ ├── RaeLoadMoreView.java │ │ ├── RaeRecyclerView.java │ │ ├── RaeScrollTopTabListener.java │ │ ├── RaeSeekBar.java │ │ ├── RaeSkinDesignTabLayout.java │ │ ├── RaeSkinImageView.java │ │ ├── RaeSkinImageViewV4.java │ │ ├── RaeTextView.java │ │ ├── RaeViewPager.java │ │ ├── RaeWebView.java │ │ ├── SkinCardView.java │ │ ├── SkinDrawableTextView.java │ │ ├── SkinFitWindowsFrameLayout.java │ │ ├── SkinFitWindowsLinearLayout.java │ │ ├── SkinNestedScrollView.java │ │ ├── ToolbarToastView.java │ │ └── drag │ │ ├── DragRecylerViewAdapter.java │ │ ├── ItemTouchHelperAdapter.java │ │ ├── ItemTouchHelperViewHolder.java │ │ ├── OnStartDragListener.java │ │ └── SimpleItemTouchHelperCallback.java │ └── res │ ├── layout │ ├── dialog_blog_comment_edit.xml │ ├── dialog_loading.xml │ ├── dialog_share.xml │ ├── fm_dialog_default.xml │ ├── fm_dialog_version_card.xml │ ├── fm_web.xml │ ├── item_image_preview.xml │ ├── item_list_loading.xml │ ├── view_placeholder.xml │ └── view_placeholder_login_retry.xml │ └── values │ ├── attrs.xml │ ├── integers.xml │ ├── strings.xml │ └── styles.xml ├── properties.gradle └── settings.gradle /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/channel: -------------------------------------------------------------------------------- 1 | xiaomi 2 | official 3 | meizu 4 | huawei 5 | yinyongbao 6 | pp 7 | fir -------------------------------------------------------------------------------- /app/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 博客园测试版 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_test.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 |