├── .gitignore ├── .idea ├── codeStyleSettings.xml ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── dictionaries │ ├── Rae.xml │ ├── YM.xml │ └── qq798.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── CHANGES.md ├── README.md ├── app ├── .gitignore ├── build.gradle ├── channel ├── config.json ├── debug.keystore ├── libs │ ├── SocialSDK_QQ_Simplify.jar │ ├── SocialSDK_Sina_Simplify.jar │ ├── SocialSDK_WeChat_Simplify.jar │ ├── umeng_social_api.jar │ ├── umeng_social_net.jar │ └── umeng_social_tool.jar ├── proguard-rules.pro ├── src │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── rae │ │ │ └── cnblogs │ │ │ ├── CacheTest.java │ │ │ ├── ExampleInstrumentedTest.java │ │ │ └── RaeTest.java │ ├── debug │ │ ├── AndroidManifest.xml │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── 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 │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ ├── 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 │ │ │ ├── test.html │ │ │ └── view.html │ │ ├── ic_launcher-web.png │ │ ├── java │ │ │ ├── android │ │ │ │ └── support │ │ │ │ │ └── design │ │ │ │ │ └── widget │ │ │ │ │ ├── DesignTabLayout.java │ │ │ │ │ └── RaeSkinDesignTabLayout.java │ │ │ └── com │ │ │ │ └── rae │ │ │ │ └── cnblogs │ │ │ │ ├── AppConstant.java │ │ │ │ ├── AppDataManager.java │ │ │ │ ├── AppMobclickAgent.java │ │ │ │ ├── AppRoute.java │ │ │ │ ├── AppStatusBar.java │ │ │ │ ├── AppUI.java │ │ │ │ ├── CnblogsApplication.java │ │ │ │ ├── CnblogsApplicationProxy.java │ │ │ │ ├── CnblogsGlideModule.java │ │ │ │ ├── CnblogsLayoutInflater.java │ │ │ │ ├── IPageView.java │ │ │ │ ├── PageObservable.java │ │ │ │ ├── RaeAnim.java │ │ │ │ ├── RaeImageLoader.java │ │ │ │ ├── RaeViewCompat.java │ │ │ │ ├── RxObservable.java │ │ │ │ ├── SkinActivityLifecycleCompat.java │ │ │ │ ├── ThemeCompat.java │ │ │ │ ├── activity │ │ │ │ ├── AboutMeActivity.java │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── BaseFragmentActivity.java │ │ │ │ ├── BlogContentActivity.java │ │ │ │ ├── BloggerActivity.java │ │ │ │ ├── BookmarkActivity.java │ │ │ │ ├── CategoryActivity.java │ │ │ │ ├── CommentActivity.java │ │ │ │ ├── FavoritesActivity.java │ │ │ │ ├── FeedbackActivity.java │ │ │ │ ├── FontSettingActivity.java │ │ │ │ ├── FriendsActivity.java │ │ │ │ ├── ImageSelectionActivity.java │ │ │ │ ├── LauncherActivity.java │ │ │ │ ├── LoginActivity.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── MomentAtMeActivity.java │ │ │ │ ├── MomentDetailActivity.java │ │ │ │ ├── MomentMessageActivity.java │ │ │ │ ├── PostMomentActivity.java │ │ │ │ ├── SearchActivity.java │ │ │ │ ├── SettingActivity.java │ │ │ │ ├── SwipeBackBaseActivity.java │ │ │ │ ├── SystemMessageActivity.java │ │ │ │ ├── TestActivity.java │ │ │ │ ├── WBShareActivity.java │ │ │ │ ├── WebActivity.java │ │ │ │ └── WebLoginActivity.java │ │ │ │ ├── adapter │ │ │ │ ├── BaseItemAdapter.java │ │ │ │ ├── BlogCommentItemAdapter.java │ │ │ │ ├── BlogContentAdapter.java │ │ │ │ ├── BlogListAdapter.java │ │ │ │ ├── BlogListItemAdapter.java │ │ │ │ ├── BookmarksAdapter.java │ │ │ │ ├── CategoriesOverallAdapter.java │ │ │ │ ├── FeedItemAdapter.java │ │ │ │ ├── FriendsAdapter.java │ │ │ │ ├── ImagePreviewAdapter.java │ │ │ │ ├── MomentAdapter.java │ │ │ │ ├── MomentDetailAdapter.java │ │ │ │ ├── MomentImageAdapter.java │ │ │ │ ├── MomentMessageAdapter.java │ │ │ │ ├── SearchSuggestionAdapter.java │ │ │ │ ├── SystemMessageAdapter.java │ │ │ │ └── anim │ │ │ │ │ └── BlogListItemAnimator.java │ │ │ │ ├── dialog │ │ │ │ ├── CategoryDialog.java │ │ │ │ ├── DialogProvider.java │ │ │ │ ├── IAppDialog.java │ │ │ │ ├── IAppDialogClickListener.java │ │ │ │ └── impl │ │ │ │ │ ├── AppDialog.java │ │ │ │ │ ├── BlogShareDialog.java │ │ │ │ │ ├── CommentMenuDialog.java │ │ │ │ │ ├── DefaultDialog.java │ │ │ │ │ ├── EditCommentDialog.java │ │ │ │ │ ├── HintCardDialog.java │ │ │ │ │ ├── LoadingDialog.java │ │ │ │ │ ├── MenuDeleteDialog.java │ │ │ │ │ ├── MenuDialog.java │ │ │ │ │ ├── ShareDialog.java │ │ │ │ │ ├── SlideDialog.java │ │ │ │ │ └── VersionUpdateDialog.java │ │ │ │ ├── fragment │ │ │ │ ├── BaseFragment.java │ │ │ │ ├── BlogCommentFragment.java │ │ │ │ ├── BlogContentFragment.java │ │ │ │ ├── BlogListFragment.java │ │ │ │ ├── BlogTypeListFragment.java │ │ │ │ ├── BloggerFragment.java │ │ │ │ ├── CategoriesFragment.java │ │ │ │ ├── DiscoverFragment.java │ │ │ │ ├── HomeFragment.java │ │ │ │ ├── ImagePreviewFragment.java │ │ │ │ ├── MineFragment.java │ │ │ │ ├── MomentDetailFragment.java │ │ │ │ ├── MomentFragment.java │ │ │ │ ├── MomentMessageFragment.java │ │ │ │ ├── SNSFragment.java │ │ │ │ ├── SearchBlogFragment.java │ │ │ │ ├── SearchBloggerFragment.java │ │ │ │ ├── SearchFragment.java │ │ │ │ ├── WebLoginFragment.java │ │ │ │ └── WebViewFragment.java │ │ │ │ ├── image │ │ │ │ ├── ImageAdapter.java │ │ │ │ ├── ImagePreviewActivity.java │ │ │ │ └── RaeImageView.java │ │ │ │ ├── message │ │ │ │ ├── EditCommentEvent.java │ │ │ │ ├── FontChangedEvent.java │ │ │ │ ├── PostMomentEvent.java │ │ │ │ ├── SearchEvent.java │ │ │ │ ├── TabEvent.java │ │ │ │ ├── ThemeChangedEvent.java │ │ │ │ └── UserInfoEvent.java │ │ │ │ ├── model │ │ │ │ ├── BlogCommentViewHolder.java │ │ │ │ ├── BlogItemViewHolder.java │ │ │ │ ├── BookmarksViewHolder.java │ │ │ │ ├── CategoriesOverallItem.java │ │ │ │ ├── FeedListFragment.java │ │ │ │ ├── FeedViewHolder.java │ │ │ │ ├── FriendsViewHolder.java │ │ │ │ ├── ImagePreviewHolder.java │ │ │ │ ├── ItemLoadingViewHolder.java │ │ │ │ ├── MenuDialogItem.java │ │ │ │ ├── MenuDialogViewHolder.java │ │ │ │ ├── MomentCommentHolder.java │ │ │ │ ├── MomentDetailHolder.java │ │ │ │ ├── MomentHolder.java │ │ │ │ ├── MomentImageHolder.java │ │ │ │ ├── MomentMessageHolder.java │ │ │ │ ├── SearchSuggestionHolder.java │ │ │ │ ├── SimpleViewHolder.java │ │ │ │ └── SystemMessageHolder.java │ │ │ │ ├── presenter │ │ │ │ ├── CnblogsPresenterFactory.java │ │ │ │ ├── IAppPresenter.java │ │ │ │ ├── IBlogCommentPresenter.java │ │ │ │ ├── IBlogContentPresenter.java │ │ │ │ ├── IBlogListPresenter.java │ │ │ │ ├── IBloggerPresenter.java │ │ │ │ ├── IFeedPresenter.java │ │ │ │ ├── IHomePresenter.java │ │ │ │ ├── ILauncherPresenter.java │ │ │ │ ├── ILoginPresenter.java │ │ │ │ ├── IMomentContract.java │ │ │ │ ├── IMomentDetailContract.java │ │ │ │ ├── IMomentMessageContract.java │ │ │ │ ├── IPostMomentContract.java │ │ │ │ ├── IRaePresenter.java │ │ │ │ ├── ISearchContract.java │ │ │ │ └── impl │ │ │ │ │ ├── BasePresenter.java │ │ │ │ │ ├── BloggerPresenterImpl.java │ │ │ │ │ ├── FeedPresenterImpl.java │ │ │ │ │ ├── HomePresenterImpl.java │ │ │ │ │ ├── LauncherPresenterImpl.java │ │ │ │ │ ├── LoginPresenterImpl.java │ │ │ │ │ ├── MomentDetailPresenterImpl.java │ │ │ │ │ ├── MomentMessagePresenterImpl.java │ │ │ │ │ ├── MomentPresenterImpl.java │ │ │ │ │ ├── PostMomentPresenterImpl.java │ │ │ │ │ ├── SearchPresenterImpl.java │ │ │ │ │ ├── blog │ │ │ │ │ ├── BlogCommentPresenterImpl.java │ │ │ │ │ ├── BlogContentPresenterImpl.java │ │ │ │ │ ├── BlogListPresenterImpl.java │ │ │ │ │ ├── BloggerListPresenterImpl.java │ │ │ │ │ └── SearchBlogPresenterImpl.java │ │ │ │ │ ├── kb │ │ │ │ │ ├── KBContentPresenterImpl.java │ │ │ │ │ ├── KBListPresenterImpl.java │ │ │ │ │ └── KbCommentPresenterImpl.java │ │ │ │ │ └── news │ │ │ │ │ ├── NewsCommentPresenterImpl.java │ │ │ │ │ ├── NewsContentPresenterImpl.java │ │ │ │ │ └── NewsListPresenterImpl.java │ │ │ │ ├── service │ │ │ │ ├── CnblogsService.java │ │ │ │ ├── CnblogsServiceBinder.java │ │ │ │ ├── JobScheduler.java │ │ │ │ ├── MomentIntentService.java │ │ │ │ ├── job │ │ │ │ │ ├── AsyncDownloadJob.java │ │ │ │ │ ├── BlogContentJob.java │ │ │ │ │ ├── IJob.java │ │ │ │ │ └── JobEvent.java │ │ │ │ └── task │ │ │ │ │ └── BlogContentTask.java │ │ │ │ ├── utils │ │ │ │ ├── BitmapCompressor.java │ │ │ │ └── ViewCaptureUtils.java │ │ │ │ ├── widget │ │ │ │ ├── AppLayout.java │ │ │ │ ├── BloggerLayout.java │ │ │ │ ├── CountDownTextView.java │ │ │ │ ├── HintCardLayout.java │ │ │ │ ├── HomeSearchHeader.java │ │ │ │ ├── ImageLoadingView.java │ │ │ │ ├── ImagePreviewLayout.java │ │ │ │ ├── LoginPlaceholderView.java │ │ │ │ ├── PlaceholderView.java │ │ │ │ ├── QMUISpanTouchFixTextView.java │ │ │ │ ├── RaeDrawerLayout.java │ │ │ │ ├── RaeEditText.java │ │ │ │ ├── RaeLoadMoreView.java │ │ │ │ ├── RaeRecyclerView.java │ │ │ │ ├── RaeSeekBar.java │ │ │ │ ├── RaeSkinImageView.java │ │ │ │ ├── RaeSkinImageViewV4.java │ │ │ │ ├── RaeTabLayout.java │ │ │ │ ├── RaeTextView.java │ │ │ │ ├── RaeViewPager.java │ │ │ │ ├── RaeWebView.java │ │ │ │ ├── SkinCardView.java │ │ │ │ ├── SkinRoundedImageView.java │ │ │ │ ├── ToolbarToastView.java │ │ │ │ ├── compat │ │ │ │ │ ├── HintCardDragCompat.java │ │ │ │ │ └── RaeDragDownCompat.java │ │ │ │ ├── span │ │ │ │ │ ├── ISpanTouchFix.java │ │ │ │ │ ├── ITouchableSpan.java │ │ │ │ │ ├── QMUILinkTouchDecorHelper.java │ │ │ │ │ ├── QMUILinkTouchMovementMethod.java │ │ │ │ │ └── QMUITouchableSpan.java │ │ │ │ └── webclient │ │ │ │ │ ├── RaeJavaScriptBridge.java │ │ │ │ │ ├── RaeWebChromeClient.java │ │ │ │ │ └── RaeWebViewClient.java │ │ │ │ └── wxapi │ │ │ │ └── WXEntryActivity.java │ │ └── res │ │ │ ├── anim │ │ │ ├── ad_scale_fade_in.xml │ │ │ ├── at_slide_fade_in.xml │ │ │ ├── image_scale_in.xml │ │ │ ├── image_scale_out.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_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_tab_selector.xml │ │ │ └── text_color_tab_selector_night.xml │ │ │ ├── drawable-xhdpi │ │ │ ├── account_top_bg.jpg │ │ │ ├── bg_login.png │ │ │ ├── bg_moment_reference.9.png │ │ │ ├── bg_new_version.png │ │ │ ├── boy.png │ │ │ ├── channel_edit_grid_item_del_icon.png │ │ │ ├── comment_empty.png │ │ │ ├── default_right_arrow.png │ │ │ ├── ic_action_bar_avatar.png │ │ │ ├── ic_action_bar_search.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_logo.png │ │ │ ├── ic_logo_small.png │ │ │ ├── ic_menu_gallery.png │ │ │ ├── ic_nav_home_search.png │ │ │ ├── ic_network_error_placeholder.png │ │ │ ├── ic_search.png │ │ │ ├── ic_search_del.png │ │ │ ├── ic_share_app.png │ │ │ ├── ic_task_finish.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 │ │ │ ├── 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_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_like_badge.9.png │ │ │ ├── ic_like_badge_selected.9.png │ │ │ ├── ic_loading.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 │ │ │ ├── launcher_background.jpg │ │ │ ├── link_allshare_normal.png │ │ │ ├── link_allshare_pressed.png │ │ │ ├── login_btn_close.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_drak.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_category.xml │ │ │ ├── bg_category_lock.xml │ │ │ ├── bg_category_lock_night.xml │ │ │ ├── bg_category_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_font_setting_message.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_toast.xml │ │ │ ├── bg_toast_home.xml │ │ │ ├── bg_user_avatar.xml │ │ │ ├── bg_write_comment.xml │ │ │ ├── bg_write_comment_night.xml │ │ │ ├── button_image_selected_borderless.xml │ │ │ ├── channel_edit_grid_item_del.xml │ │ │ ├── default_loading.xml │ │ │ ├── ic_comment_toolbar.xml │ │ │ ├── ic_eyes.xml │ │ │ ├── ic_favorite.xml │ │ │ ├── ic_like_content_badge.xml │ │ │ ├── ic_photo_select.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 │ │ │ ├── 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_about_me.xml │ │ │ ├── activity_blog_content.xml │ │ │ ├── activity_bookmark.xml │ │ │ ├── activity_category.xml │ │ │ ├── activity_favorites.xml │ │ │ ├── activity_font_setting.xml │ │ │ ├── activity_friends.xml │ │ │ ├── activity_image_preview.xml │ │ │ ├── activity_image_selection.xml │ │ │ ├── activity_launcher.xml │ │ │ ├── activity_login.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_moment_detail.xml │ │ │ ├── activity_moment_message.xml │ │ │ ├── activity_post_moment.xml │ │ │ ├── activity_search.xml │ │ │ ├── activity_setting.xml │ │ │ ├── activity_single_fragment.xml │ │ │ ├── activity_system_message.xml │ │ │ ├── activity_test.xml │ │ │ ├── activity_web.xml │ │ │ ├── avoscloud_feedback_activity_conversation.xml │ │ │ ├── cube_ptr_classic_default_header.xml │ │ │ ├── dialog_blog_comment.xml │ │ │ ├── dialog_blog_comment_edit.xml │ │ │ ├── dialog_blog_default.xml │ │ │ ├── dialog_blog_menu.xml │ │ │ ├── dialog_hint_card.xml │ │ │ ├── dialog_loading.xml │ │ │ ├── dialog_share.xml │ │ │ ├── dialog_version_card.xml │ │ │ ├── fm_blog_comment.xml │ │ │ ├── fm_blog_content.xml │ │ │ ├── fm_blog_list.xml │ │ │ ├── fm_blogger.xml │ │ │ ├── fm_blogger_info.xml │ │ │ ├── fm_categories.xml │ │ │ ├── fm_discover.xml │ │ │ ├── fm_home.xml │ │ │ ├── fm_kb_list.xml │ │ │ ├── fm_mine.xml │ │ │ ├── fm_moment.xml │ │ │ ├── fm_moment_detail.xml │ │ │ ├── fm_search.xml │ │ │ ├── fm_sns.xml │ │ │ ├── fm_web.xml │ │ │ ├── fm_web_login.xml │ │ │ ├── item_blog_comment.xml │ │ │ ├── item_blog_list.xml │ │ │ ├── item_blogger_feed.xml │ │ │ ├── item_bookmark_list.xml │ │ │ ├── item_category.xml │ │ │ ├── item_comment_placeholder.xml │ │ │ ├── item_dialog_menu.xml │ │ │ ├── item_fragment_view.xml │ │ │ ├── item_friends.xml │ │ │ ├── item_home_search.xml │ │ │ ├── item_image_preview.xml │ │ │ ├── item_image_selected.xml │ │ │ ├── item_image_selection.xml │ │ │ ├── item_list_loading.xml │ │ │ ├── item_moment_comment.xml │ │ │ ├── item_moment_detail_info.xml │ │ │ ├── item_moment_image.xml │ │ │ ├── item_moment_image_single.xml │ │ │ ├── item_moment_list.xml │ │ │ ├── item_moment_message.xml │ │ │ ├── item_news_list.xml │ │ │ ├── item_post_moment_image.xml │ │ │ ├── item_search_suggestion.xml │ │ │ ├── item_system_message.xml │ │ │ ├── tab_view.xml │ │ │ ├── umeng_socialize_oauth_dialog.xml │ │ │ ├── view_account_info.xml │ │ │ ├── view_placeholder.xml │ │ │ ├── view_placeholder_login_retry.xml │ │ │ ├── view_title.xml │ │ │ └── view_toast_home.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 │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ ├── umeng_socialize_colors.xml │ │ │ ├── umeng_socialize_strings.xml │ │ │ └── umeng_socialize_style.xml │ │ │ └── xml │ │ │ └── lc_fileprovider_path.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── rae │ │ │ └── cnblogs │ │ │ └── ExampleUnitTest.java │ └── xiaomi │ │ └── res │ │ └── values │ │ └── strings.xml ├── tinker-support.gradle └── xiaomiChannel ├── build.gradle ├── doc ├── docs │ └── index.md └── mkdocs.yml ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── guide.jpg ├── jar2dex.bat ├── push-sdk-patch.bat ├── 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 │ │ │ ├── CnblogsReportException.java │ │ │ ├── DefaultCnblogsApiProvider.java │ │ │ ├── Empty.java │ │ │ ├── JsonBody.java │ │ │ ├── JsonParser.java │ │ │ ├── OKHttpUrl.java │ │ │ ├── Parser.java │ │ │ ├── PatchCnblogsApiProvider.java │ │ │ ├── UserProvider.java │ │ │ ├── api │ │ │ ├── ApiUrls.java │ │ │ ├── IBlogApi.java │ │ │ ├── IBookmarksApi.java │ │ │ ├── ICategoryApi.java │ │ │ ├── IFriendsApi.java │ │ │ ├── IMomentApi.java │ │ │ ├── INewsApi.java │ │ │ ├── IPostApi.java │ │ │ ├── IRaeServerApi.java │ │ │ ├── ISearchApi.java │ │ │ ├── IUserApi.java │ │ │ └── impl │ │ │ │ └── CategoryApiImpl.java │ │ │ ├── bean │ │ │ ├── AdvertBean.java │ │ │ ├── BlogBean.java │ │ │ ├── BlogCommentBean.java │ │ │ ├── BlogCommentModel.java │ │ │ ├── BlogType.java │ │ │ ├── BookmarksBean.java │ │ │ ├── CategoryBean.java │ │ │ ├── CnblogsApiErrorBean.java │ │ │ ├── FriendsInfoBean.java │ │ │ ├── LoginToken.java │ │ │ ├── LoginTokenBean.java │ │ │ ├── MomentBean.java │ │ │ ├── MomentCommentBean.java │ │ │ ├── MomentPrimaryBean.java │ │ │ ├── SinaShotenBean.java │ │ │ ├── SystemMessageBean.java │ │ │ ├── UserFeedBean.java │ │ │ ├── UserInfoBean.java │ │ │ └── VersionInfo.java │ │ │ ├── config │ │ │ ├── CnblogSdkConfig.java │ │ │ └── OfflineConfig.java │ │ │ ├── converter │ │ │ ├── ConverterFactory.java │ │ │ └── TextResponseBodyConverter.java │ │ │ ├── db │ │ │ ├── CnblogsContentProvider.java │ │ │ ├── DbAdvert.java │ │ │ ├── DbBlog.java │ │ │ ├── DbCategory.java │ │ │ ├── DbCnblogs.java │ │ │ ├── DbFactory.java │ │ │ └── model │ │ │ │ └── UserBlogInfo.java │ │ │ ├── interceptor │ │ │ └── RequestInterceptor.java │ │ │ ├── model │ │ │ ├── ImageMetaData.java │ │ │ └── MomentMetaData.java │ │ │ ├── parser │ │ │ ├── AbsUserInfoParser.java │ │ │ ├── BaiduSuggestionParser.java │ │ │ ├── BlogCommentParser.java │ │ │ ├── BlogContentParser.java │ │ │ ├── BlogListParser.java │ │ │ ├── BlogOpenStatusParser.java │ │ │ ├── BookmarksDelParser.java │ │ │ ├── BookmarksParser.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 │ │ │ ├── UserInfoParser.java │ │ │ └── UserTimelineParser.java │ │ │ └── utils │ │ │ ├── ApiEncrypt.java │ │ │ └── ApiUtils.java │ │ └── res │ │ ├── raw │ │ └── cb │ │ └── values │ │ └── strings.xml └── test.html └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | /doc/site 11 | /app/*.apk 12 | /app/release 13 | app/release/ 14 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/dictionaries/Rae.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bugly 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/dictionaries/YM.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | appkey 5 | cnblog 6 | cnblogs 7 | umeng 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/dictionaries/qq798.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | baidu 5 | blogs 6 | mobclick 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /CHANGES.md: -------------------------------------------------------------------------------- 1 | # 版本更新记录 2 | 3 | ## V1.1.3 4 | 5 | *开发中* 6 | 7 | > **2018-01-25** 8 | 9 | - 修复搜索退出导致崩溃问题 10 | - 修复博客评论Html解析器为空问题 11 | - 修复闪存登录状态没有显示评论问题 12 | - 修复添加/删除收藏问题 13 | - 新闻知识库查看时显示作者信息 14 | 15 | ## V1.0.1 16 | 17 | *发布于:2017-09-11 13:00* 18 | 19 | > **2017-09-01 ~ 2017-09-11** 20 | 21 | - 首页UI优化 22 | - 登录界面添加注册入口 23 | - 博文正文优化H5复制代码功能 24 | - 解决Web登录错误问题 25 | - 添加系统消息功能 26 | - 添加检查更新 27 | 28 | > **2017-08-30** 29 | 30 | - 添加搜索功能 31 | - 添加夜间模式功能 32 | 33 | > **2017-08-28** 34 | 35 | - 知识库显示图文模式 36 | - 解决友盟没统计到分类问题 37 | - WebView支持下载链接 38 | - 首页点击分类回顶部 39 | - 分类列表长按提示分类名称 40 | - 调整收藏界面背景颜色 41 | - 版本更新接口添加渠道参数 42 | 43 | > **2017-08-27** 44 | 45 | - 解决登录出现 Null is not a valid element的问题 46 | - 解决查看评论界面列表下拉不了问题 47 | - 解决分享到新浪微博报错问题 48 | - 登录界面添加忘记密码入口、查看明文密码、删除密码功能 49 | 50 | 51 | ## V1.0.0 52 | 53 | *发布于:2017-08-20* 54 | 55 | - 界面净白风格,专注阅读,给你极简体验。 56 | - 首页分类阅读,定制你喜欢的栏目。 57 | - 首页列表图文结合,让阅读不在单调。 58 | - 博文阅读代码高亮,大图查看。 59 | - 博文支持评论、点赞、收藏。 60 | - 博主界面更加清爽,博主动态显示,博客列表,一起来关注大牛吧。 61 | - 新闻阅读、知识库该有的都有了 62 | - 你要的登录!登录!登录!来啦~~~~ 63 | - WIFI自动离线下载,无需配置。 64 | 65 | 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | `博客园非官方客户端` `博客园,从轻出发!` 3 | 4 | 新的项目迁移到[这里](https://github.com/raedev/android-cnblogs),代码结构更加清晰,维护更方便。 5 | 6 | 7 | 8 | 博客园APP介绍 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/channel: -------------------------------------------------------------------------------- 1 | Dev 2 | yinyongbao 3 | pp 4 | meizu 5 | huawei 6 | official -------------------------------------------------------------------------------- /app/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "channelInfoList": [ 3 | { 4 | "channel": "xiaomi", 5 | "extraInfo": { 6 | "UMENG_CHANNEL": "xiaomi" 7 | } 8 | } 9 | ] 10 | } -------------------------------------------------------------------------------- /app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/debug.keystore -------------------------------------------------------------------------------- /app/libs/SocialSDK_QQ_Simplify.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/libs/SocialSDK_QQ_Simplify.jar -------------------------------------------------------------------------------- /app/libs/SocialSDK_Sina_Simplify.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/libs/SocialSDK_Sina_Simplify.jar -------------------------------------------------------------------------------- /app/libs/SocialSDK_WeChat_Simplify.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/libs/SocialSDK_WeChat_Simplify.jar -------------------------------------------------------------------------------- /app/libs/umeng_social_api.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/libs/umeng_social_api.jar -------------------------------------------------------------------------------- /app/libs/umeng_social_net.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/libs/umeng_social_net.jar -------------------------------------------------------------------------------- /app/libs/umeng_social_tool.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/libs/umeng_social_tool.jar -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\AndroidStudio\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/rae/cnblogs/CacheTest.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Before; 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | /** 12 | * app data cache test 13 | * Created by ChenRui on 2017/7/28 0028 22:12. 14 | */ 15 | @RunWith(AndroidJUnit4.class) 16 | public class CacheTest { 17 | 18 | private Context mContext; 19 | 20 | @Before 21 | public void setup() { 22 | mContext = InstrumentationRegistry.getContext(); 23 | 24 | } 25 | 26 | @Test 27 | public void testCacheSize() { 28 | // new AppDataManager(mContext).getDatabaseTotalSize(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 博客园开发版 4 | -------------------------------------------------------------------------------- /app/src/main/assets/css/rae.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/assets/css/rae.css -------------------------------------------------------------------------------- /app/src/main/assets/css/shCoreDefault.css: -------------------------------------------------------------------------------- 1 | /*blog-common.css已经定义了该主题*/ -------------------------------------------------------------------------------- /app/src/main/assets/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/assets/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /app/src/main/assets/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/assets/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/assets/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /app/src/main/assets/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/assets/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /app/src/main/assets/js/highlighter/shBrushPlain.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SyntaxHighlighter 3 | * http://alexgorbatchev.com/SyntaxHighlighter 4 | * 5 | * SyntaxHighlighter is donationware. If you are using it, please donate. 6 | * http://alexgorbatchev.com/SyntaxHighlighter/donate.html 7 | * 8 | * @version 9 | * 3.0.83 (July 02 2010) 10 | * 11 | * @copyright 12 | * Copyright (C) 2004-2010 Alex Gorbatchev. 13 | * 14 | * @license 15 | * Dual licensed under the MIT and GPL licenses. 16 | */ 17 | ;(function() 18 | { 19 | // CommonJS 20 | typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; 21 | 22 | function Brush() 23 | { 24 | }; 25 | 26 | Brush.prototype = new SyntaxHighlighter.Highlighter(); 27 | Brush.aliases = ['text', 'plain']; 28 | 29 | SyntaxHighlighter.brushes.Plain = Brush; 30 | 31 | // CommonJS 32 | typeof(exports) != 'undefined' ? exports.Brush = Brush : null; 33 | })(); 34 | -------------------------------------------------------------------------------- /app/src/main/assets/js/rae-login.js: -------------------------------------------------------------------------------- 1 | /* 2 | * ===================================== 3 | * 博客园登录脚本注入 4 | * ====================================== 5 | ***/ 6 | 7 | alert("登录脚本注入成功!"); 8 | 9 | var rae={ 10 | 11 | /*登录*/ 12 | login:function(u,p,c){ 13 | 14 | alert("登录:"+u+p+c); 15 | 16 | 17 | } 18 | }; -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/AppConstant.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs; 2 | 3 | /** 4 | * 常量定义 5 | * Created by ChenRui on 2017/1/11 00:30. 6 | */ 7 | public final class AppConstant { 8 | /** 9 | * 微信APP ID 10 | */ 11 | public final static String WECHAT_APP_ID = BuildConfig.WECHAT_APP_ID; 12 | /** 13 | * 微信APPSecret 14 | */ 15 | public final static String WECHAT_APP_SECRET = BuildConfig.WECHAT_APP_SECRET; 16 | /** 17 | * 微博APP ID 18 | */ 19 | public final static String WEIBO_APP_ID = BuildConfig.WEIBO_APP_ID; 20 | /** 21 | * 微博APPSecret 22 | */ 23 | public final static String WEIBO_APP_SECRET = BuildConfig.WEIBO_APP_SECRET; 24 | /** 25 | * QQ APP ID 26 | */ 27 | public final static String QQ_APP_ID = BuildConfig.QQ_APP_ID; 28 | /** 29 | * QQ APPSecret 30 | */ 31 | public final static String QQ_APP_SECRET = BuildConfig.QQ_APP_SECRET; 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/CnblogsGlideModule.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs; 2 | 3 | import com.bumptech.glide.annotation.GlideModule; 4 | import com.bumptech.glide.module.AppGlideModule; 5 | 6 | /** 7 | * glide 8 | * Created by ChenRui on 2017/8/10 0010 23:15. 9 | */ 10 | @GlideModule 11 | public class CnblogsGlideModule extends AppGlideModule { 12 | 13 | @Override 14 | public boolean isManifestParsingEnabled() { 15 | return false; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/CnblogsLayoutInflater.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs; 2 | 3 | import android.content.Context; 4 | import android.support.annotation.NonNull; 5 | import android.util.AttributeSet; 6 | import android.view.View; 7 | 8 | import com.rae.cnblogs.widget.SkinCardView; 9 | import com.rae.cnblogs.widget.SkinRoundedImageView; 10 | 11 | import skin.support.app.SkinLayoutInflater; 12 | 13 | /** 14 | * 自定义View不支持的皮肤扩展 15 | * Created by ChenRui on 2017/8/30 0030 17:25. 16 | */ 17 | public class CnblogsLayoutInflater implements SkinLayoutInflater { 18 | 19 | @Override 20 | public View createView(@NonNull Context context, String name, @NonNull AttributeSet attrs) { 21 | switch (name) { 22 | case "com.makeramen.roundedimageview.RoundedImageView": 23 | return new SkinRoundedImageView(context, attrs); 24 | case "android.support.v7.widget.CardView": 25 | return new SkinCardView(context, attrs); 26 | } 27 | return null; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/IPageView.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs; 2 | 3 | 4 | import java.util.List; 5 | 6 | public interface IPageView { 7 | void onNoMoreData(); 8 | 9 | void onEmptyData(String msg); 10 | 11 | void onLoadData(List data); 12 | 13 | void onLoginExpired(); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/activity/AboutMeActivity.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.activity; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | 6 | import com.rae.cnblogs.R; 7 | 8 | /** 9 | * 关于我们 10 | * Created by ChenRui on 2018/2/9 0009 17:21. 11 | */ 12 | public class AboutMeActivity extends BaseActivity { 13 | @Override 14 | protected void onCreate(@Nullable Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | setContentView(R.layout.activity_about_me); 17 | showHomeAsUp(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/activity/BaseFragmentActivity.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.activity; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.v4.app.Fragment; 6 | 7 | import com.rae.cnblogs.R; 8 | 9 | /** 10 | * 单个Fragment页面 11 | * Created by ChenRui on 2017/8/29 0029 22:59. 12 | */ 13 | public abstract class BaseFragmentActivity extends SwipeBackBaseActivity { 14 | 15 | @Override 16 | protected void onCreate(@Nullable Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(getLayoutId()); 19 | showHomeAsUp(); 20 | getSupportFragmentManager() 21 | .beginTransaction() 22 | .replace(R.id.content, newFragment()) 23 | .commitNowAllowingStateLoss(); 24 | 25 | } 26 | 27 | protected abstract Fragment newFragment(); 28 | 29 | public int getLayoutId() { 30 | return R.layout.activity_single_fragment; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/activity/BookmarkActivity.java: -------------------------------------------------------------------------------- 1 | //package com.rae.cnblogs.activity; 2 | // 3 | //import android.os.Bundle; 4 | //import android.support.annotation.Nullable; 5 | // 6 | //import com.rae.cnblogs.R; 7 | // 8 | ///** 9 | // * 我的收藏 10 | // * Created by ChenRui on 2017/3/16 23:33. 11 | // */ 12 | //public class BookmarkActivity extends BaseActivity { 13 | // 14 | // @Override 15 | // protected void onCreate(@Nullable Bundle savedInstanceState) { 16 | // super.onCreate(savedInstanceState); 17 | // setContentView(R.layout.activity_bookmark); 18 | // } 19 | //} 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/activity/WBShareActivity.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.activity; 2 | 3 | import com.umeng.socialize.media.WBShareCallBackActivity; 4 | 5 | /** 6 | * 微博分享回调 7 | * Created by ChenRui on 2017/7/15 0015 1:23. 8 | */ 9 | public class WBShareActivity extends WBShareCallBackActivity { 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/activity/WebLoginActivity.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.activity; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.NonNull; 5 | import android.support.annotation.Nullable; 6 | import android.view.View; 7 | 8 | import com.rae.cnblogs.fragment.WebLoginFragment; 9 | import com.rae.cnblogs.fragment.WebViewFragment; 10 | 11 | /** 12 | * 网页版登录 13 | * Created by ChenRui on 2017/2/3 0003 10:47. 14 | */ 15 | public class WebLoginActivity extends WebActivity { 16 | 17 | 18 | @Override 19 | protected void onCreate(@Nullable Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | mShareView.setVisibility(View.GONE); 22 | mWebViewFragment.enablePullToRefresh(false); 23 | } 24 | 25 | @Override 26 | protected WebViewFragment getWebViewFragment(String url) { 27 | return WebLoginFragment.newInstance(url); 28 | } 29 | 30 | 31 | 32 | @Override 33 | @NonNull 34 | protected String getUrl() { 35 | return "https://passport.cnblogs.com/user/signin"; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/adapter/FriendsAdapter.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.adapter; 2 | 3 | import android.text.TextUtils; 4 | import android.view.LayoutInflater; 5 | import android.view.ViewGroup; 6 | 7 | import com.rae.cnblogs.R; 8 | import com.rae.cnblogs.RaeImageLoader; 9 | import com.rae.cnblogs.model.FriendsViewHolder; 10 | import com.rae.cnblogs.sdk.bean.UserInfoBean; 11 | 12 | /** 13 | * 朋友适配器 14 | * Created by ChenRui on 2017/2/23 01:36. 15 | */ 16 | public class FriendsAdapter extends BaseItemAdapter { 17 | 18 | 19 | @Override 20 | public FriendsViewHolder onCreateViewHolder(LayoutInflater inflater, ViewGroup parent, int viewType) { 21 | return new FriendsViewHolder(inflateView(parent, R.layout.item_friends)); 22 | } 23 | 24 | @Override 25 | public void onBindViewHolder(FriendsViewHolder holder, int position, UserInfoBean m) { 26 | RaeImageLoader.displayHeaderImage(m.getAvatar(), holder.avatarView); 27 | holder.nameView.setText(TextUtils.isEmpty(m.getRemarkName()) ? m.getDisplayName() : m.getRemarkName()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/dialog/IAppDialogClickListener.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.dialog; 2 | 3 | /** 4 | * 弹出窗口监听 5 | * Created by ChenRui on 2017/1/24 0024 13:56. 6 | */ 7 | public interface IAppDialogClickListener { 8 | 9 | 10 | /** 11 | * 点击时候触发 12 | * 13 | * @param dialog 窗口 14 | * @param buttonType 参考字段:{@link IAppDialog#BUTTON_NEGATIVE},Button_*的常量 15 | */ 16 | void onClick(IAppDialog dialog, int buttonType); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/dialog/impl/CommentMenuDialog.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.dialog.impl; 2 | 3 | import android.content.Context; 4 | 5 | import com.rae.cnblogs.sdk.bean.BlogCommentBean; 6 | 7 | /** 8 | * 评论的菜单 9 | * Created by ChenRui on 2017/2/5 23:04. 10 | */ 11 | public class CommentMenuDialog extends MenuDialog { 12 | 13 | private BlogCommentBean mBlogComment; 14 | 15 | public CommentMenuDialog(Context context) { 16 | super(context); 17 | } 18 | 19 | public void setBlogComment(BlogCommentBean blogComment) { 20 | mBlogComment = blogComment; 21 | } 22 | 23 | public BlogCommentBean getBlogComment() { 24 | return mBlogComment; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/fragment/BlogTypeListFragment.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.fragment; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.rae.cnblogs.sdk.bean.BlogType; 6 | import com.rae.cnblogs.sdk.bean.CategoryBean; 7 | 8 | /** 9 | * 博客类型的列表 10 | * Created by ChenRui on 2017/1/18 23:49. 11 | */ 12 | public class BlogTypeListFragment extends BlogListFragment { 13 | 14 | public static BlogTypeListFragment newInstance(int position, CategoryBean category, BlogType type) { 15 | Bundle args = new Bundle(); 16 | args.putParcelable("category", category); 17 | args.putString("type", type.getTypeName()); 18 | args.putInt("position", position); 19 | BlogTypeListFragment fragment = new BlogTypeListFragment(); 20 | fragment.setArguments(args); 21 | return fragment; 22 | } 23 | 24 | @Override 25 | protected void performTabEvent() { 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/message/EditCommentEvent.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.message; 2 | 3 | /** 4 | * 评论成功消息 5 | * Created by ChenRui on 2017/2/1 00:36. 6 | */ 7 | public class EditCommentEvent { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/message/FontChangedEvent.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.message; 2 | 3 | /** 4 | * 字体大小改变 5 | */ 6 | public class FontChangedEvent { 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/message/SearchEvent.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.message; 2 | 3 | /** 4 | * 搜索事件 5 | * Created by ChenRui on 2017/8/29 0029 12:46. 6 | */ 7 | public class SearchEvent { 8 | private String searchText; 9 | 10 | public SearchEvent(String searchText) { 11 | this.searchText = searchText; 12 | } 13 | 14 | public String getSearchText() { 15 | return searchText; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/message/TabEvent.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.message; 2 | 3 | /** 4 | * 选项卡事件 5 | * Created by ChenRui on 2017/7/20 0020 0:40. 6 | */ 7 | public class TabEvent { 8 | private int mPosition; 9 | 10 | public TabEvent(int position) { 11 | mPosition = position; 12 | } 13 | 14 | public int getPosition() { 15 | return mPosition; 16 | } 17 | 18 | public void setPosition(int position) { 19 | mPosition = position; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/message/ThemeChangedEvent.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.message; 2 | 3 | /** 4 | * 主题更改事件 5 | */ 6 | public class ThemeChangedEvent { 7 | private boolean isNight; // 是否为夜间模式 8 | 9 | public ThemeChangedEvent(boolean isNight) { 10 | this.isNight = isNight; 11 | } 12 | 13 | public boolean isNight() { 14 | return isNight; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/message/UserInfoEvent.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.message; 2 | 3 | /** 4 | * 用户信息事件 5 | * Created by ChenRui on 2017/10/10 0010 23:29. 6 | */ 7 | public class UserInfoEvent { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/BookmarksViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | 6 | import com.rae.cnblogs.R; 7 | import com.rae.cnblogs.widget.RaeTextView; 8 | 9 | import butterknife.BindView; 10 | import butterknife.ButterKnife; 11 | 12 | /** 13 | * Created by ChenRui on 2017/7/16 0016 14:00. 14 | */ 15 | public class BookmarksViewHolder extends RecyclerView.ViewHolder { 16 | 17 | @BindView(R.id.tv_blog_title) 18 | public RaeTextView mBlogTitle; 19 | @BindView(R.id.tv_blog_summary) 20 | public RaeTextView mBlogSummary; 21 | @BindView(R.id.tv_blog_date) 22 | public RaeTextView mBlogDate; 23 | 24 | public BookmarksViewHolder(View itemView) { 25 | super(itemView); 26 | ButterKnife.bind(this, itemView); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/FeedViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.view.View; 4 | import android.widget.ImageView; 5 | import android.widget.TextView; 6 | 7 | import com.rae.cnblogs.R; 8 | 9 | import butterknife.BindView; 10 | 11 | /** 12 | * 动态 13 | * Created by ChenRui on 2017/3/16 15:58. 14 | */ 15 | public class FeedViewHolder extends BlogCommentViewHolder { 16 | 17 | @BindView(R.id.img_blog_action) 18 | public ImageView feedActionView; 19 | 20 | @BindView(R.id.ll_feed) 21 | public View feedLayout; 22 | 23 | @BindView(R.id.tv_blog_action_title) 24 | public TextView feedActionTitleView; 25 | 26 | public FeedViewHolder(View itemView) { 27 | super(itemView); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/FriendsViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | import android.widget.ImageView; 6 | import android.widget.TextView; 7 | 8 | import com.rae.cnblogs.R; 9 | 10 | import butterknife.BindView; 11 | import butterknife.ButterKnife; 12 | 13 | /** 14 | * 粉丝和关注 15 | * Created by ChenRui on 2017/2/23 01:36. 16 | */ 17 | public class FriendsViewHolder extends RecyclerView.ViewHolder { 18 | 19 | @BindView(R.id.tv_user_name) 20 | public TextView nameView; 21 | 22 | @BindView(R.id.img_user_avatar) 23 | public ImageView avatarView; 24 | 25 | public FriendsViewHolder(View itemView) { 26 | super(itemView); 27 | ButterKnife.bind(this, itemView); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/ImagePreviewHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | import android.widget.ImageView; 6 | 7 | import com.rae.cnblogs.R; 8 | 9 | import butterknife.BindView; 10 | import butterknife.ButterKnife; 11 | 12 | /** 13 | * 预览图模型 14 | * Created by ChenRui on 2017/2/6 0006 15:51. 15 | */ 16 | public class ImagePreviewHolder extends RecyclerView.ViewHolder { 17 | 18 | @BindView(R.id.img_preview) 19 | public ImageView mImageView; 20 | 21 | public ImagePreviewHolder(View itemView) { 22 | super(itemView); 23 | ButterKnife.bind(this, itemView); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/ItemLoadingViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * 正在加载 7 | * Created by ChenRui on 2017/1/31 20:28. 8 | */ 9 | public class ItemLoadingViewHolder extends SimpleViewHolder { 10 | 11 | public ItemLoadingViewHolder(View itemView) { 12 | super(itemView); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/MenuDialogItem.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.support.annotation.ColorRes; 4 | 5 | /** 6 | * 菜单选项 7 | * Created by ChenRui on 2017/2/4 0004 17:49. 8 | */ 9 | public class MenuDialogItem { 10 | private String name; 11 | private int colorId; 12 | 13 | public MenuDialogItem(String name) { 14 | this.name = name; 15 | } 16 | 17 | public MenuDialogItem(String name, @ColorRes int colorId) { 18 | this.colorId = colorId; 19 | this.name = name; 20 | } 21 | 22 | public int getColorId() { 23 | return colorId; 24 | } 25 | 26 | public void setColorId(int colorId) { 27 | this.colorId = colorId; 28 | } 29 | 30 | public String getName() { 31 | return name; 32 | } 33 | 34 | public void setName(String name) { 35 | this.name = name; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/MenuDialogViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | import android.widget.TextView; 6 | 7 | import com.rae.cnblogs.R; 8 | 9 | import butterknife.BindView; 10 | import butterknife.ButterKnife; 11 | 12 | /** 13 | * 菜单对话框 14 | * Created by ChenRui on 2017/2/4 0004 17:20. 15 | */ 16 | public class MenuDialogViewHolder extends RecyclerView.ViewHolder { 17 | 18 | @BindView(R.id.tv_menu_title) 19 | public TextView titleView; 20 | 21 | public MenuDialogViewHolder(View itemView) { 22 | super(itemView); 23 | ButterKnife.bind(this, itemView); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/MomentDetailHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * 闪存详情 7 | * Created by ChenRui on 2017/11/2 0002 15:55. 8 | */ 9 | public class MomentDetailHolder extends SimpleViewHolder { 10 | public MomentDetailHolder(View itemView) { 11 | super(itemView); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/MomentImageHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.view.View; 4 | import android.widget.ImageView; 5 | 6 | import com.rae.cnblogs.R; 7 | 8 | /** 9 | * Created by ChenRui on 2017/11/1 0001 0:51. 10 | */ 11 | public class MomentImageHolder extends SimpleViewHolder { 12 | ImageView mImageView; 13 | 14 | public ImageView getImageView() { 15 | return mImageView; 16 | } 17 | 18 | public MomentImageHolder(View itemView) { 19 | super(itemView); 20 | mImageView = itemView.findViewById(R.id.img_thumb); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/MomentMessageHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.view.View; 4 | import android.widget.ImageView; 5 | import android.widget.TextView; 6 | 7 | import com.rae.cnblogs.R; 8 | 9 | import butterknife.BindView; 10 | import butterknife.ButterKnife; 11 | 12 | /** 13 | * 闪存 14 | * Created by ChenRui on 2017/10/27 0027 10:50. 15 | */ 16 | public class MomentMessageHolder extends SimpleViewHolder { 17 | 18 | @BindView(R.id.img_blog_avatar) 19 | public ImageView avatarView; 20 | 21 | @BindView(R.id.tv_blog_author) 22 | public TextView authorView; 23 | 24 | @BindView(R.id.tv_blog_summary) 25 | public TextView summaryView; 26 | 27 | @BindView(R.id.tv_blog_date) 28 | public TextView dateView; 29 | @BindView(R.id.tv_source) 30 | public TextView sourceView; 31 | 32 | 33 | public MomentMessageHolder(View itemView) { 34 | super(itemView); 35 | ButterKnife.bind(this, itemView); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/SearchSuggestionHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | import android.widget.ImageView; 6 | import android.widget.TextView; 7 | 8 | import com.rae.cnblogs.R; 9 | 10 | import butterknife.BindView; 11 | import butterknife.ButterKnife; 12 | 13 | /** 14 | * 搜索建议 15 | * Created by ChenRui on 2017/8/29 0029 9:57. 16 | */ 17 | public class SearchSuggestionHolder extends RecyclerView.ViewHolder { 18 | 19 | @BindView(R.id.img_selected) 20 | ImageView mSelectedView; 21 | 22 | @BindView(R.id.tv_title) 23 | TextView mTitleView; 24 | 25 | public SearchSuggestionHolder(View itemView) { 26 | super(itemView); 27 | ButterKnife.bind(this, itemView); 28 | } 29 | 30 | public ImageView getSelectedView() { 31 | return mSelectedView; 32 | } 33 | 34 | public TextView getTitleView() { 35 | return mTitleView; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/SimpleViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | 6 | public class SimpleViewHolder extends RecyclerView.ViewHolder { 7 | 8 | public SimpleViewHolder(View itemView) { 9 | super(itemView); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/model/SystemMessageHolder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.model; 2 | 3 | import android.view.View; 4 | import android.widget.ImageView; 5 | import android.widget.TextView; 6 | 7 | import com.rae.cnblogs.R; 8 | 9 | import butterknife.BindView; 10 | import butterknife.ButterKnife; 11 | 12 | public class SystemMessageHolder extends SimpleViewHolder { 13 | @BindView(R.id.img_thumb) 14 | ImageView mThumbImageView; 15 | @BindView(R.id.tv_title) 16 | TextView mTitleView; 17 | @BindView(R.id.tv_date) 18 | TextView mDateView; 19 | 20 | public SystemMessageHolder(View itemView) { 21 | super(itemView); 22 | ButterKnife.bind(this, itemView); 23 | } 24 | 25 | public ImageView getThumbImageView() { 26 | return mThumbImageView; 27 | } 28 | 29 | public TextView getTitleView() { 30 | return mTitleView; 31 | } 32 | 33 | public TextView getDateView() { 34 | return mDateView; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/IAppPresenter.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | /** 4 | * 逻辑处理 5 | * Created by ChenRui on 2016/12/22 22:52. 6 | */ 7 | public interface IAppPresenter { 8 | void start(); 9 | 10 | void destroy(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/IBlogListPresenter.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | import com.rae.cnblogs.sdk.bean.BlogBean; 4 | import com.rae.cnblogs.sdk.bean.CategoryBean; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 首页 10 | * Created by ChenRui on 2016/12/2 00:21. 11 | */ 12 | public interface IBlogListPresenter extends IRaePresenter { 13 | 14 | void loadMore(); 15 | 16 | /** 17 | * 刷新数据集 18 | */ 19 | void refreshDataSet(); 20 | 21 | void destroy(); 22 | 23 | interface IBlogListView { 24 | 25 | void onLoadBlogList(int pageIndex, List data); 26 | 27 | void onLoadFailed(int pageIndex, String msg); 28 | 29 | CategoryBean getCategory(); 30 | 31 | void onLoadMoreEmpty(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/IBloggerPresenter.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | import com.rae.cnblogs.sdk.bean.FriendsInfoBean; 4 | 5 | /** 6 | * 博主逻辑处理 7 | * Created by ChenRui on 2017/2/24 0024 16:22. 8 | */ 9 | public interface IBloggerPresenter extends IAppPresenter { 10 | 11 | /** 12 | * 关注/取消关注 13 | */ 14 | void doFollow(); 15 | 16 | boolean isFollowed(); 17 | 18 | interface IBloggerView { 19 | void onLoadBloggerInfo(FriendsInfoBean userInfo); 20 | 21 | String getBlogApp(); 22 | 23 | void onLoadBloggerInfoFailed(String msg); 24 | 25 | void onFollowFailed(String msg); 26 | 27 | void onFollowSuccess(); 28 | 29 | void onNotLogin(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/IFeedPresenter.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | import com.rae.cnblogs.sdk.bean.UserFeedBean; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Created by ChenRui on 2017/3/16 16:20. 9 | */ 10 | public interface IFeedPresenter extends IAppPresenter { 11 | 12 | 13 | void loadMore(); 14 | 15 | interface IFeedView { 16 | String getBlogApp(); 17 | 18 | void onLoadFeedFailed(String msg); 19 | 20 | void onLoadMoreFeedFailed(String msg); 21 | 22 | void onLoadFeedSuccess(List dataList); 23 | 24 | void onLoadMoreFinish(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/IHomePresenter.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | import com.rae.cnblogs.sdk.bean.CategoryBean; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 首页 9 | * Created by ChenRui on 2016/12/2 00:21. 10 | */ 11 | public interface IHomePresenter extends IRaePresenter { 12 | 13 | interface IHomeView { 14 | void onLoadCategory(List data); 15 | 16 | /** 17 | * 加载热搜 18 | */ 19 | void onLoadHotSearchData(String keyword); 20 | 21 | // /** 22 | // * 加载用户信息 23 | // */ 24 | // void onLoadUserInfo(UserInfoBean userInfo); 25 | // 26 | // /** 27 | // * 正常加载 28 | // */ 29 | // void onLoadNormal(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/ILauncherPresenter.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | /** 4 | * 启动页 5 | * Created by ChenRui on 2016/12/22 22:52. 6 | */ 7 | public interface ILauncherPresenter extends IAppPresenter { 8 | 9 | void advertClick(); 10 | 11 | void cancel(); 12 | 13 | void stop(); 14 | 15 | 16 | interface ILauncherView { 17 | 18 | void onLoadImage(String name, String url); 19 | 20 | void onJumpToWeb(String url); 21 | 22 | void onJumpToBlog(String id); 23 | 24 | void onNormalImage(); 25 | 26 | void onJumpToMain(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/ILoginPresenter.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | import com.rae.cnblogs.sdk.bean.UserInfoBean; 4 | 5 | /** 6 | * 登录逻辑 7 | * Created by ChenRui on 2017/1/19 0019 14:55. 8 | */ 9 | public interface ILoginPresenter extends IRaePresenter { 10 | // void login(); 11 | 12 | void loadUserInfo(); 13 | 14 | /** 15 | * 取消登录 16 | */ 17 | void cancel(); 18 | 19 | interface ILoginView { 20 | 21 | // String getUserName(); 22 | // 23 | // String getPassword(); 24 | 25 | void onLoginSuccess(UserInfoBean userInfo); 26 | 27 | void onLoginError(String message); 28 | 29 | void onLoading(String msg); 30 | // 31 | // /** 32 | // * 登录验证码错误 33 | // */ 34 | // void onLoginVerifyCodeError(); 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/IMomentContract.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | import com.rae.cnblogs.IPageView; 4 | import com.rae.cnblogs.sdk.bean.MomentBean; 5 | 6 | /** 7 | * 闪存 8 | * Created by ChenRui on 2017/10/27 0027 10:54. 9 | */ 10 | public interface IMomentContract { 11 | 12 | interface Presenter extends IAppPresenter { 13 | void loadMore(); 14 | 15 | // void delete(String ingId); 16 | } 17 | 18 | interface View extends IPageView { 19 | 20 | /** 21 | * 参考 {@link com.rae.cnblogs.sdk.api.IMomentApi#MOMENT_TYPE_ALL} 22 | */ 23 | String getType(); 24 | 25 | // /** 26 | // * 删除失败 27 | // */ 28 | // void onDeleteMomentFailed(String msg); 29 | // 30 | // /** 31 | // * 删除成功 32 | // */ 33 | // void onDeleteMomentSuccess(); 34 | 35 | /** 36 | * 消息数量改变 37 | * @param replyMeCount 有回复我的消息数量 38 | * @param atMeCount 有提到我的数量 39 | */ 40 | void onMessageCountChanged(int replyMeCount, int atMeCount); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/IMomentMessageContract.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | import com.rae.cnblogs.IPageView; 4 | import com.rae.cnblogs.sdk.bean.MomentCommentBean; 5 | 6 | /** 7 | * 闪存 8 | * Created by ChenRui on 2017/10/27 0027 10:54. 9 | */ 10 | public interface IMomentMessageContract { 11 | 12 | interface Presenter extends IAppPresenter { 13 | void loadMore(); 14 | 15 | void postComment(String ingId, String userId, String commentId, String content); 16 | } 17 | 18 | interface View extends IPageView { 19 | 20 | /** 21 | * 评论失败 22 | */ 23 | void onPostCommentFailed(String message); 24 | 25 | /** 26 | * 评论成功 27 | */ 28 | void onPostCommentSuccess(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/IPostMomentContract.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 发布闪存 7 | * Created by ChenRui on 2017/10/27 0027 14:37. 8 | */ 9 | public interface IPostMomentContract { 10 | 11 | interface Presenter extends IAppPresenter { 12 | boolean post(); 13 | 14 | boolean isBlogOpened(); 15 | } 16 | 17 | interface View { 18 | 19 | String getContent(); 20 | 21 | void onPostMomentFailed(String msg); 22 | 23 | void onPostMomentSuccess(); 24 | 25 | List getImageUrls(); 26 | 27 | /** 28 | * 后台发送 29 | */ 30 | void onPostMomentInProgress(); 31 | 32 | /** 33 | * 博客开通状态 34 | */ 35 | void onLoadBlogOpenStatus(Boolean value); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/IRaePresenter.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | /** 4 | * Created by ChenRui on 2016/12/2 00:21. 5 | */ 6 | public interface IRaePresenter { 7 | void start(); 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/ISearchContract.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 搜索 7 | * Created by ChenRui on 2017/8/29 0029 9:37. 8 | */ 9 | public class ISearchContract { 10 | 11 | public interface Presenter extends IAppPresenter { 12 | /** 13 | * 搜索建议 14 | */ 15 | void suggest(); 16 | } 17 | 18 | public interface View { 19 | 20 | /** 21 | * 搜索文本 22 | */ 23 | String getSearchText(); 24 | 25 | /** 26 | * 加载搜索建议成功 27 | */ 28 | void onSuggestionSuccess(List data); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/impl/blog/BloggerListPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter.impl.blog; 2 | 3 | import android.content.Context; 4 | 5 | import com.rae.cnblogs.sdk.api.IFriendsApi; 6 | import com.rae.cnblogs.sdk.bean.CategoryBean; 7 | 8 | /** 9 | * 知识库 10 | * Created by ChenRui on 2017/2/4 0004 14:09. 11 | */ 12 | public class BloggerListPresenterImpl extends BlogListPresenterImpl { 13 | 14 | private IFriendsApi mFriendsApi; 15 | 16 | public BloggerListPresenterImpl(Context context, IBlogListView view) { 17 | super(context, view); 18 | mFriendsApi = getApiProvider().getFriendApi(); 19 | } 20 | 21 | @Override 22 | protected void onLoadData(CategoryBean category, int pageIndex) { 23 | createObservable(mFriendsApi.getBlogList(Math.max(1, pageIndex), category.getCategoryId())).subscribe(getBlogObserver()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/impl/kb/KBListPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter.impl.kb; 2 | 3 | import android.content.Context; 4 | 5 | import com.rae.cnblogs.RxObservable; 6 | import com.rae.cnblogs.presenter.impl.blog.BlogListPresenterImpl; 7 | import com.rae.cnblogs.sdk.bean.CategoryBean; 8 | 9 | /** 10 | * 知识库 11 | * Created by ChenRui on 2017/2/4 0004 14:09. 12 | */ 13 | public class KBListPresenterImpl extends BlogListPresenterImpl { 14 | 15 | public KBListPresenterImpl(Context context, IBlogListView view) { 16 | super(context, view); 17 | } 18 | 19 | @Override 20 | protected void onLoadData(CategoryBean category, int pageIndex) { 21 | createObservable(mApi.getKbArticles(pageIndex)).subscribe(getBlogObserver()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/impl/kb/KbCommentPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter.impl.kb; 2 | 3 | import android.content.Context; 4 | 5 | import com.rae.cnblogs.presenter.impl.blog.BlogCommentPresenterImpl; 6 | 7 | /** 8 | * 评论 9 | * Created by ChenRui on 2016/12/26 0026 8:49. 10 | */ 11 | public class KbCommentPresenterImpl extends BlogCommentPresenterImpl { 12 | public KbCommentPresenterImpl(Context context, IBlogCommentView view) { 13 | super(context, view); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/presenter/impl/news/NewsListPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.presenter.impl.news; 2 | 3 | import android.content.Context; 4 | 5 | import com.rae.cnblogs.RxObservable; 6 | import com.rae.cnblogs.presenter.impl.blog.BlogListPresenterImpl; 7 | import com.rae.cnblogs.sdk.api.INewsApi; 8 | import com.rae.cnblogs.sdk.bean.CategoryBean; 9 | 10 | /** 11 | * 新闻 12 | * Created by ChenRui on 2017/2/4 0004 14:09. 13 | */ 14 | public class NewsListPresenterImpl extends BlogListPresenterImpl { 15 | private INewsApi mNewsApi; 16 | 17 | public NewsListPresenterImpl(Context context, IBlogListView view) { 18 | super(context, view); 19 | mNewsApi = getApiProvider().getNewsApi(); 20 | 21 | } 22 | 23 | @Override 24 | protected void onLoadData(CategoryBean category, int pageIndex) { 25 | createObservable(mNewsApi.getNews(pageIndex)).subscribe(getBlogObserver()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/service/CnblogsServiceBinder.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.service; 2 | 3 | import android.content.Context; 4 | import android.os.Binder; 5 | 6 | /** 7 | * 服务进程绑定器 8 | * Created by ChenRui on 2017/7/28 0028 17:52. 9 | */ 10 | public class CnblogsServiceBinder extends Binder { 11 | 12 | private JobScheduler mJobScheduler; 13 | 14 | public CnblogsServiceBinder(Context context) { 15 | mJobScheduler = new JobScheduler(context); 16 | } 17 | 18 | public JobScheduler getJobScheduler() { 19 | return mJobScheduler; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/service/job/IJob.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.service.job; 2 | 3 | /** 4 | * 工作 5 | * Created by ChenRui on 2017/7/27 0027 15:36. 6 | */ 7 | public interface IJob { 8 | 9 | /** 10 | * 运行 11 | */ 12 | void run(); 13 | 14 | /** 15 | * 取消 16 | */ 17 | void cancel(); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/service/job/JobEvent.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.service.job; 2 | 3 | /** 4 | * JOB event 5 | * Created by ChenRui on 2017/7/28 0028 18:33. 6 | */ 7 | public class JobEvent { 8 | private int action; 9 | 10 | 11 | public JobEvent(int action) { 12 | this.action = action; 13 | } 14 | 15 | public int getAction() { 16 | return action; 17 | } 18 | 19 | public void setAction(int action) { 20 | this.action = action; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/widget/HomeSearchHeader.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.widget; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | 6 | import in.srain.cube.views.ptr.PtrClassicDefaultHeader; 7 | 8 | public class HomeSearchHeader extends PtrClassicDefaultHeader { 9 | 10 | public HomeSearchHeader(Context context) { 11 | super(context); 12 | } 13 | 14 | public HomeSearchHeader(Context context, AttributeSet attrs) { 15 | super(context, attrs); 16 | } 17 | 18 | public HomeSearchHeader(Context context, AttributeSet attrs, int defStyle) { 19 | super(context, attrs, defStyle); 20 | } 21 | 22 | @Override 23 | protected void initViews(AttributeSet attrs) { 24 | super.initViews(attrs); 25 | // LayoutInflater.from(getContext()).inflate(R.layout.item_home_search, this, true); 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/widget/RaeEditText.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.widget; 2 | 3 | import android.annotation.TargetApi; 4 | import android.content.Context; 5 | import android.os.Build; 6 | import android.util.AttributeSet; 7 | import android.widget.EditText; 8 | 9 | /** 10 | * Created by ChenRui on 2017/1/19 0019 14:35. 11 | */ 12 | public class RaeEditText extends EditText { 13 | public RaeEditText(Context context) { 14 | super(context); 15 | } 16 | 17 | public RaeEditText(Context context, AttributeSet attrs) { 18 | super(context, attrs); 19 | } 20 | 21 | public RaeEditText(Context context, AttributeSet attrs, int defStyleAttr) { 22 | super(context, attrs, defStyleAttr); 23 | } 24 | 25 | @TargetApi(Build.VERSION_CODES.LOLLIPOP) 26 | public RaeEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 27 | super(context, attrs, defStyleAttr, defStyleRes); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/widget/RaeTextView.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.widget; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | 6 | import skin.support.widget.SkinCompatTextView; 7 | 8 | /** 9 | * 文本 10 | * Created by ChenRui on 2016/12/1 23:00. 11 | */ 12 | public class RaeTextView extends SkinCompatTextView { 13 | public RaeTextView(Context context) { 14 | super(context); 15 | init(); 16 | } 17 | 18 | public RaeTextView(Context context, AttributeSet attrs) { 19 | super(context, attrs); 20 | init(); 21 | 22 | } 23 | 24 | public RaeTextView(Context context, AttributeSet attrs, int defStyleAttr) { 25 | super(context, attrs, defStyleAttr); 26 | init(); 27 | 28 | } 29 | 30 | void init() { 31 | // Typeface tf = Typeface.createFromAsset(getResources().getAssets(),"fonts/cnblogs.ttf"); 32 | // setTypeface(tf); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/widget/span/ISpanTouchFix.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.widget.span; 2 | 3 | /** 4 | * @author cginechen 5 | * @date 2017-08-07 6 | */ 7 | 8 | public interface ISpanTouchFix { 9 | /** 10 | * 记录当前 Touch 事件对应的点是不是点在了 span 上面 11 | */ 12 | void setTouchSpanHit(boolean hit); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/widget/span/ITouchableSpan.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.widget.span; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * @author cginechen 7 | * @date 2017-03-20 8 | */ 9 | 10 | public interface ITouchableSpan { 11 | void setPressed(boolean pressed); 12 | void onClick(View widget); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/rae/cnblogs/wxapi/WXEntryActivity.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.wxapi; 2 | 3 | 4 | import com.umeng.weixin.callback.WXCallbackActivity; 5 | 6 | //import com.umeng.socialize.weixin.view.WXCallbackActivity; 7 | 8 | public class WXEntryActivity extends WXCallbackActivity { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/ad_scale_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/anim/at_slide_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/image_scale_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/anim/image_scale_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/anim/keep_status.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/like_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 15 | 16 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/anim/login_slide_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 11 | 12 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/anim/login_slide_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 11 | 12 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/anim/scale_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/anim/scale_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 15 | 16 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_in_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/anim/slide_out_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 10 | 11 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/anim/toolbar_toast_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/color/text_color_default_tab.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/color/text_color_default_tab_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/color/text_color_login_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/color/text_color_post_moment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/color/text_color_search_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/color/text_color_tab_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/text_color_tab_selector_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/account_top_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/account_top_bg.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bg_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/bg_login.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bg_moment_reference.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/bg_moment_reference.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bg_new_version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/bg_new_version.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/boy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/boy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/channel_edit_grid_item_del_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/channel_edit_grid_item_del_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/comment_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/comment_empty.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/default_right_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/default_right_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_bar_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_action_bar_avatar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_bar_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_action_bar_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_bookmark_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_bookmark_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_category_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_category_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_checked_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_checked_checked.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_checked_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_checked_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_close_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_close_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_default_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_default_placeholder.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_default_user_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_default_user_avatar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_download.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_edit_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_edit_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_empty_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_empty_placeholder.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_empty_placeholder_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_empty_placeholder_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_eyes_closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_eyes_closed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_eyes_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_eyes_open.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_left_top_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_left_top_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_loading_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_loading_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_login_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_login_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_logo_small.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_menu_gallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_menu_gallery.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_nav_home_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_nav_home_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_network_error_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_network_error_placeholder.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_search_del.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_search_del.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_share_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_share_app.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_task_finish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/ic_task_finish.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/pic_msg_unlogin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/pic_msg_unlogin.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/picture_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/picture_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/picture_viewer_no_pic_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/picture_viewer_no_pic_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_channel_background.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/tab_channel_background.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_channel_background_night.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/tab_channel_background_night.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_main_background.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/tab_main_background.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tab_main_background_night.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/tab_main_background_night.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/toast_failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/toast_failed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/toast_success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xhdpi/toast_success.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bg_blogger_blur.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/bg_blogger_blur.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/browser_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/browser_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/browser_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/browser_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/channel_manager_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/channel_manager_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/day_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/day_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/day_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/day_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/hint_card_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/hint_card_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/hint_card_close_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/hint_card_close_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_bar_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_action_bar_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_action_bar_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_action_bar_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_add_photo_holder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_add_photo_holder.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_back_closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_back_closed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_back_closed_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_back_closed_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_back_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_back_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_back_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_back_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_blog_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_blog_comment.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_blog_content_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_blog_content_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_blog_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_blog_like.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_blog_read.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_blog_read.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_collect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_collect.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_comment_badge.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_comment_badge.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_comment_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_comment_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_edit_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_edit_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_empty_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_empty_message.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_eyes_closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_eyes_closed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_eyes_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_eyes_open.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_favorite_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_favorite_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_favorite_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_favorite_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_like_badge.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_like_badge.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_like_badge_selected.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_like_badge_selected.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_logo_small.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_menu_gallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_menu_gallery.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_moment_at_me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_moment_at_me.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_moment_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_moment_comment.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_moment_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_moment_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_moment_post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_moment_post.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_nightmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_nightmode.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_nightmode_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_nightmode_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_official_flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_official_flag.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_photo_select_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_photo_select_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_photo_select_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_photo_select_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_progress_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_progress_loading.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_pull_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/ic_pull_down.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/launcher_background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/launcher_background.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/link_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/link_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/link_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/link_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/login_btn_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/login_btn_close.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/moment_share_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/moment_share_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/night_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/night_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/night_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/night_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/qq_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/qq_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/qq_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/qq_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/qqkj_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/qqkj_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/qqkj_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/qqkj_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/sina_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/sina_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/sina_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/sina_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_home_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_home_h.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_home_h_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_home_h_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_home_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_home_n.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_home_n_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_home_n_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_library_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_library_h.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_library_h_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_library_h_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_library_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_library_n.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_library_n_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_library_n_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_mine_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_mine_h.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_mine_h_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_mine_h_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_mine_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_mine_n.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_mine_n_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_mine_n_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_news_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_news_h.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_news_h_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_news_h_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_news_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_news_n.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/tab_news_n_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/tab_news_n_night.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/text_allshare_font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/text_allshare_font.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/text_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/text_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/text_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/text_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/weixin_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/weixin_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/weixin_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/weixin_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/weixinpyq_allshare_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/weixinpyq_allshare_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/weixinpyq_allshare_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable-xxhdpi/weixinpyq_allshare_pressed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/abc_checked.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/anim_picture_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/avoscloud_feedback_contact_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/avoscloud_feedback_contact_background_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/avoscloud_feedback_text_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/avoscloud_feedback_text_background_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_action_bar_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_badge.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_blog_content_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_blog_content_bottom_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_blog_item_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_blog_item_selector_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_btn_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_btn_default_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_btn_follow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_btn_follow_drak.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_btn_send.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_btn_send_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_button_while.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_button_while_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_button_white_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_button_white_selector_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_category.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_category_lock.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_category_lock_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_category_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_count_down.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_default_action_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_dialog_default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_dialog_default_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_dialog_hint_card.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_dialog_hint_card_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_dialog_hint_card_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_edit_comment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_edit_comment_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_font_setting_message.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_login_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_menu_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_message_card.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_message_card_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_nav_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_nav_search_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_quote_comment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_quote_comment_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_tab_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_tab_home_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_tab_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_tag.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_tag_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_toast.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_toast_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_user_avatar.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_write_comment.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_write_comment_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_image_selected_borderless.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/channel_edit_grid_item_del.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/default_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_comment_toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_eyes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_favorite.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_like_content_badge.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_photo_select.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_browser.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_link.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_night_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_qq.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_qzone.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_sina.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_wechat.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_wechat_sns.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_divider_while_primary.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_divider_while_primary_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_bar_loading.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_bar_loading_white.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/public_button_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/public_button_login_borderless.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/sb_default_back_drawable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/sb_default_thumb_drawable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/seekbar_progress_material_font_setting.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/seekbar_tickmark_font_setting.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/setting_divider_while_primary.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/setting_divider_while_primary_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_home_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_library.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_library_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_mine.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_mine_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_news.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_news_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/text_cursor.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_back_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable/umeng_socialize_back_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_btn_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable/umeng_socialize_copy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_copyurl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable/umeng_socialize_copyurl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable/umeng_socialize_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_edit_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_menu_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable/umeng_socialize_menu_default.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable/umeng_socialize_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_share_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable/umeng_socialize_share_music.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_share_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable/umeng_socialize_share_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/umeng_socialize_share_web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/drawable/umeng_socialize_share_web.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_about_me.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_bookmark.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_category.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | 20 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_favorites.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 15 | 16 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_friends.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_single_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_blog_comment.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_blog_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fm_blog_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 15 | 16 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fm_blogger.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fm_moment.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fm_web.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 14 | 18 | 19 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fm_web_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_comment_placeholder.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_dialog_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_fragment_view.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_home_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_image_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_moment_image.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_moment_image_single.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_post_moment_image.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/tab_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_toast_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-v19/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 24dp 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values-v19/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values-v23/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 52dp 3 | 52dp 4 | 56dp 5 | 48dp 6 | 16sp 7 | 14sp 8 | 12sp 9 | 10sp 10 | 12dp 11 | 15sp 12 | 45dp 13 | 4dp 14 | 40dp 15 | 2dp 16 | 45dp 17 | 36dp 18 | 86dp 19 | 180dp 20 | 0dp 21 | 22 | 70 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/values/umeng_socialize_colors.xml: -------------------------------------------------------------------------------- 1 | 2 | #F4F4F4 3 | #2c3035 4 | #333333 5 | #FFFFFF 6 | #E6E6E6 7 | #999999 8 | #464f61 9 | #959696 10 | #666666 11 | #EEEEEE 12 | #595959 13 | #C4C4C4 14 | #F8F8F8 15 | #F4F4F4 16 | #D4E0E5 17 | #ffffff 18 | -------------------------------------------------------------------------------- /app/src/main/res/xml/lc_fileprovider_path.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/test/java/com/rae/cnblogs/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs; 2 | 3 | import org.junit.Test; 4 | 5 | /** 6 | * Example local unit test, which will execute on the development machine (host). 7 | * 8 | * @see Testing documentation 9 | */ 10 | public class ExampleUnitTest { 11 | @Test 12 | public void addition_isCorrect() throws Exception { 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /app/src/xiaomi/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 博客园APP 3 | 4 | -------------------------------------------------------------------------------- /app/xiaomiChannel: -------------------------------------------------------------------------------- 1 | #小米特殊渠道包 2 | xiaomi -------------------------------------------------------------------------------- /doc/mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: My Docs 2 | theme: readthedocs 3 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # Enable/Disable Tinker HotFix 15 | enableHotfix=false -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Mar 01 11:25:28 CST 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip 7 | -------------------------------------------------------------------------------- /guide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raee/android-cnblogs/651b1b879e4aea76df1165f2ceff1e16306550ad/guide.jpg -------------------------------------------------------------------------------- /jar2dex.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | d:\sdk\build-tools\27.0.1\dx.bat --dex --output="sdk\build\intermediates\bundles\debug\sdk.dex" sdk\build\intermediates\bundles\debug\classes.jar 3 | 4 | -------------------------------------------------------------------------------- /push-sdk-patch.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | adb shell mkdir /sdcard/Android/data/com.rae.cnblogs/cache 3 | adb push sdk\build\intermediates\bundles\debug\sdk.dex /sdcard/Android/data/com.rae.cnblogs/cache/sdk-hotfix.patch 4 | 5 | -------------------------------------------------------------------------------- /sdk/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /sdk/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\AndroidStudio\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /sdk/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 7 | 8 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/ApiErrorCode.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk; 2 | 3 | /** 4 | * 错误代码 5 | * Created by ChenRui on 2017/7/20 0020 12:42. 6 | */ 7 | public final class ApiErrorCode { 8 | 9 | public static final int LOGIN_EXPIRED = 7000; 10 | } 11 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/ApiOptions.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.Target; 6 | 7 | import static java.lang.annotation.ElementType.METHOD; 8 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 9 | 10 | /** 11 | * 接口选项 12 | * Created by ChenRui on 2017/5/22 0022 23:30. 13 | */ 14 | @Documented 15 | @Target(METHOD) 16 | @Retention(RUNTIME) 17 | public @interface ApiOptions { 18 | 19 | /** 20 | * 是否忽略登录 21 | */ 22 | boolean ignoreLogin() default false; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/AppGson.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | 6 | import java.lang.reflect.Modifier; 7 | 8 | /** 9 | * Created by ChenRui on 2017/6/12 0012 18:00. 10 | */ 11 | public final class AppGson { 12 | private static Gson sGson; 13 | 14 | static { 15 | GsonBuilder builder = new GsonBuilder(); 16 | builder.excludeFieldsWithModifiers(Modifier.FINAL, Modifier.TRANSIENT, Modifier.STATIC); 17 | sGson = builder.create(); 18 | } 19 | 20 | public static Gson get() { 21 | return sGson; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/CnblogsReportException.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk; 2 | 3 | /** 4 | * 上报的异常 5 | * Created by ChenRui on 2017/9/7 0007 19:05. 6 | */ 7 | public class CnblogsReportException extends RuntimeException { 8 | 9 | public CnblogsReportException(String message, Throwable cause) { 10 | super(message, cause); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/Empty.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk; 2 | 3 | /** 4 | * 空数据 5 | * Created by ChenRui on 2017/5/24 0024 23:26. 6 | */ 7 | public final class Empty { 8 | 9 | public static Empty value() { 10 | return new Empty(); 11 | } 12 | 13 | private Empty() { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/JsonParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk; 2 | 3 | import com.rae.cnblogs.sdk.parser.IJsonParser; 4 | 5 | import java.lang.annotation.Documented; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.Target; 8 | 9 | import static java.lang.annotation.ElementType.METHOD; 10 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 11 | 12 | /** 13 | * JSON解析器 14 | * Created by ChenRui on 2017/6/7 0007 19:18. 15 | */ 16 | @Documented 17 | @Target(METHOD) 18 | @Retention(RUNTIME) 19 | public @interface JsonParser { 20 | 21 | /** 22 | * JSON解析器 23 | */ 24 | Class value(); 25 | } 26 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/Parser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk; 2 | 3 | import com.rae.cnblogs.sdk.parser.IHtmlParser; 4 | 5 | import java.lang.annotation.Documented; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.Target; 8 | 9 | import static java.lang.annotation.ElementType.METHOD; 10 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 11 | 12 | /** 13 | * 解析器 14 | * Created by ChenRui on 2017/5/22 0022 23:30. 15 | */ 16 | @Documented 17 | @Target(METHOD) 18 | @Retention(RUNTIME) 19 | public @interface Parser { 20 | /** 21 | * HTML解析器 22 | */ 23 | Class value(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/PatchCnblogsApiProvider.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk; 2 | 3 | import android.content.Context; 4 | 5 | /** 6 | * 用于动态下发的接口工厂提供者 7 | * Created by ChenRui on 2018/1/26 0026 14:28. 8 | */ 9 | public class PatchCnblogsApiProvider extends DefaultCnblogsApiProvider { 10 | 11 | public PatchCnblogsApiProvider(Context applicationContext) { 12 | super(applicationContext); 13 | } 14 | 15 | @Override 16 | public int getApiVersion() { 17 | return 3; 18 | } 19 | 20 | @Override 21 | public String toString() { 22 | return "this is cnblogs patch api provider! version is " + getApiVersion(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/api/ICategoryApi.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.api; 2 | 3 | import com.rae.cnblogs.sdk.Empty; 4 | import com.rae.cnblogs.sdk.bean.CategoryBean; 5 | 6 | import java.util.List; 7 | 8 | import io.reactivex.Observable; 9 | 10 | /** 11 | * 分类接口 12 | * Created by ChenRui on 2016/11/30 0030 17:19. 13 | */ 14 | public interface ICategoryApi { 15 | 16 | /** 17 | * 获取分类 18 | */ 19 | Observable> getCategories(); 20 | 21 | /** 22 | * 获取分类 23 | */ 24 | Observable> getHomeCategories(); 25 | 26 | /** 27 | * 更新分类 28 | */ 29 | Observable updateCategories(List categoryList); 30 | } 31 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/bean/BlogCommentModel.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.bean; 2 | 3 | /** 4 | * 实体 5 | * Created by ChenRui on 2016/12/10 18:28. 6 | */ 7 | public class BlogCommentModel { 8 | 9 | private int commentCount; 10 | private String commentsHtml; 11 | 12 | public int getCommentCount() { 13 | return commentCount; 14 | } 15 | 16 | public void setCommentCount(int commentCount) { 17 | this.commentCount = commentCount; 18 | } 19 | 20 | public String getCommentsHtml() { 21 | return commentsHtml; 22 | } 23 | 24 | public void setCommentsHtml(String commentsHtml) { 25 | this.commentsHtml = commentsHtml; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/bean/LoginToken.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.bean; 2 | 3 | /** 4 | * 登录凭证 5 | * Created by ChenRui on 2017/10/7 0007 23:58. 6 | */ 7 | public class LoginToken { 8 | 9 | // 登录界面校验的TOKEN 10 | private String verificationToken; 11 | 12 | public String getVerificationToken() { 13 | return verificationToken; 14 | } 15 | 16 | public void setVerificationToken(String verificationToken) { 17 | this.verificationToken = verificationToken; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/bean/MomentPrimaryBean.java: -------------------------------------------------------------------------------- 1 | //package com.rae.cnblogs.sdk.bean; 2 | // 3 | ///** 4 | // * 主要的闪存 5 | // * Created by ChenRui on 2017/9/25 0025 17:09. 6 | // */ 7 | //public class MomentPrimaryBean extends MomentBean { 8 | // 9 | //} 10 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/db/CnblogsContentProvider.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.db; 2 | 3 | import com.activeandroid.content.ContentProvider; 4 | 5 | /** 6 | * 博客园数据库提供者 7 | * Created by ChenRui on 2017/11/17 0017 11:23. 8 | */ 9 | public class CnblogsContentProvider extends ContentProvider { 10 | 11 | @Override 12 | public boolean onCreate() { 13 | // 初始化数据库 14 | DbFactory.init(getContext()); 15 | return super.onCreate(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/db/DbCategory.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.db; 2 | 3 | import com.activeandroid.query.Select; 4 | import com.rae.cnblogs.sdk.bean.CategoryBean; 5 | 6 | import java.util.List; 7 | 8 | 9 | /** 10 | * 分类表 11 | * Created by ChenRui on 2016/12/1 00:24. 12 | */ 13 | public class DbCategory extends DbCnblogs { 14 | 15 | DbCategory() { 16 | } 17 | 18 | // public void clear() { 19 | // new Delete().from(CategoryBean.class).execute(); 20 | // } 21 | 22 | /** 23 | * 重置分类 24 | * 25 | * @param list 数据 26 | */ 27 | public void reset(final List list) { 28 | 29 | executeTransaction(new Runnable() { 30 | @Override 31 | public void run() { 32 | for (CategoryBean category : list) { 33 | category.save(); 34 | } 35 | } 36 | }); 37 | 38 | } 39 | 40 | public List list() { 41 | return new Select().from(CategoryBean.class).orderBy("orderNo").execute(); 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/BlogContentParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import org.w3c.dom.Document; 4 | 5 | import java.io.ByteArrayInputStream; 6 | 7 | import javax.xml.parsers.DocumentBuilderFactory; 8 | 9 | /** 10 | * 博文解析 11 | * Created by ChenRui on 2016/11/30 0030 17:00. 12 | */ 13 | public class BlogContentParser implements IHtmlParser { 14 | 15 | @Override 16 | public String parse(org.jsoup.nodes.Document document, String html) { 17 | // 解析XML 18 | try { 19 | ByteArrayInputStream inputStream = new ByteArrayInputStream(html.getBytes("UTF-8")); 20 | Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputStream); 21 | return doc.getDocumentElement().getTextContent(); 22 | } catch (Exception e) { 23 | e.printStackTrace(); 24 | } 25 | return null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/BlogOpenStatusParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import org.jsoup.nodes.Document; 4 | 5 | import java.io.IOException; 6 | 7 | /** 8 | * 博客开通状态 9 | * Created by ChenRui on 2017/11/8 0008 16:57. 10 | */ 11 | public class BlogOpenStatusParser implements IHtmlParser { 12 | 13 | @Override 14 | public Boolean parse(Document document, String html) throws IOException { 15 | return document.select(".topic_title:contains(开通博客)").size() <= 0; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/BookmarksDelParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import android.text.TextUtils; 4 | 5 | import com.rae.cnblogs.sdk.CnblogsApiException; 6 | import com.rae.cnblogs.sdk.Empty; 7 | 8 | import org.jsoup.nodes.Document; 9 | 10 | import java.io.IOException; 11 | 12 | /** 13 | * 删除收藏 14 | * Created by ChenRui on 2017/6/11 0011 1:28. 15 | */ 16 | public class BookmarksDelParser implements IHtmlParser { 17 | 18 | @Override 19 | public Empty parse(Document document, String html) throws IOException { 20 | if (TextUtils.equals(html, "1")) { 21 | // 成功 22 | return Empty.value(); 23 | } 24 | throw new CnblogsApiException(html); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/IHtmlParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import org.jsoup.nodes.Document; 4 | 5 | import java.io.IOException; 6 | 7 | /** 8 | * 解析器 9 | * Created by ChenRui on 2017/5/22 0022 0:07. 10 | */ 11 | public interface IHtmlParser { 12 | T parse(Document document, String html) throws IOException; 13 | } 14 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/IJsonParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import java.io.IOException; 4 | 5 | /** 6 | * JSON解析器 7 | * Created by ChenRui on 2017/6/7 0007 19:16. 8 | */ 9 | public interface IJsonParser { 10 | T parse(String json) throws IOException; 11 | } 12 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/ImagePostParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import com.rae.cnblogs.sdk.CnblogsApiException; 4 | 5 | import org.json.JSONException; 6 | import org.json.JSONObject; 7 | 8 | import java.io.IOException; 9 | 10 | /** 11 | * 图片上传返回解析 12 | * Created by ChenRui on 2017/10/27 0027 17:31. 13 | */ 14 | public class ImagePostParser implements IJsonParser { 15 | 16 | @Override 17 | public String parse(String json) throws IOException { 18 | try { 19 | JSONObject object = new JSONObject(json); 20 | boolean isSuccess = object.getBoolean("success"); 21 | String url = object.getString("message"); 22 | if (isSuccess) { 23 | return url; 24 | } 25 | throw new CnblogsApiException(url); 26 | } catch (JSONException e) { 27 | throw new CnblogsApiException(e); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/KBContentParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import org.jsoup.nodes.Document; 4 | 5 | /** 6 | * 知识库内容解析器 7 | * Created by ChenRui on 2017/1/18 0018 18:27. 8 | */ 9 | public class KBContentParser implements IHtmlParser { 10 | 11 | @Override 12 | public String parse(Document document, String html) { 13 | return document.select(".contents_main").html(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/LoginParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import com.rae.cnblogs.sdk.ApiErrorCode; 4 | import com.rae.cnblogs.sdk.CnblogsApiException; 5 | import com.rae.cnblogs.sdk.Empty; 6 | 7 | import org.jsoup.nodes.Document; 8 | 9 | import java.io.IOException; 10 | 11 | /** 12 | * 登录错误,通过博客园接口登录成功的都会返回JSON数据,所以这里处理返回HTML时候的逻辑,一般都是登录错误了 13 | * Created by ChenRui on 2017/7/20 0020 10:41. 14 | */ 15 | public class LoginParser implements IHtmlParser { 16 | 17 | @Override 18 | public Empty parse(Document document, String html) throws IOException { 19 | 20 | if (document.title().contains("用户登录")) { 21 | throw new CnblogsApiException(ApiErrorCode.LOGIN_EXPIRED, "用户名或者密码错误"); 22 | } 23 | 24 | throw new CnblogsApiException("未知的登录错误"); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/MomentCommentParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import com.rae.cnblogs.sdk.bean.MomentCommentBean; 4 | 5 | import org.jsoup.nodes.Document; 6 | 7 | import java.io.IOException; 8 | import java.util.List; 9 | 10 | /** 11 | * 闪存解析器 12 | * Created by ChenRui on 2017/9/25 0025 17:16. 13 | */ 14 | public class MomentCommentParser implements IHtmlParser> { 15 | 16 | private final MomentCommentHelper mMomentCommentHelper = new MomentCommentHelper(); 17 | 18 | @Override 19 | public List parse(Document doc, String html) throws IOException { 20 | return mMomentCommentHelper.parseCommentInList(doc); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/MomentDelParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import com.rae.cnblogs.sdk.CnblogsApiException; 4 | import com.rae.cnblogs.sdk.Empty; 5 | 6 | import org.jsoup.nodes.Document; 7 | 8 | import java.io.IOException; 9 | 10 | /** 11 | * 删除闪存 12 | * Created by ChenRui on 2017/11/3 0003 0:45. 13 | */ 14 | public class MomentDelParser implements IHtmlParser { 15 | 16 | @Override 17 | public Empty parse(Document document, String html) throws IOException { 18 | if (html.contains("成功")) { 19 | return Empty.value(); 20 | } 21 | 22 | throw new CnblogsApiException(html); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/NewsAddCommentParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import android.text.TextUtils; 4 | 5 | import com.rae.cnblogs.sdk.CnblogsApiException; 6 | import com.rae.cnblogs.sdk.Empty; 7 | 8 | import org.jsoup.Jsoup; 9 | import org.jsoup.nodes.Document; 10 | 11 | import java.io.IOException; 12 | 13 | /** 14 | * 发布新闻评论 15 | * Created by ChenRui on 2017/1/18 0018 18:27. 16 | */ 17 | public class NewsAddCommentParser implements IHtmlParser { 18 | 19 | @Override 20 | public Empty parse(Document document, String json) throws IOException { 21 | if (!TextUtils.isEmpty(json) && json.startsWith(" { 13 | 14 | @Override 15 | public String parse(Document document, String html) { 16 | Elements elements = document.select("Content"); 17 | String text = Html.fromHtml(elements.html()).toString().replace("src=\"//", "src=\"http://"); 18 | return text; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/NewsDelCommentParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import android.text.TextUtils; 4 | 5 | import com.rae.cnblogs.sdk.Empty; 6 | 7 | import org.jsoup.nodes.Document; 8 | 9 | import java.io.IOException; 10 | 11 | /** 12 | * 删除新闻评论 13 | * Created by ChenRui on 2017/1/18 0018 18:27. 14 | */ 15 | public class NewsDelCommentParser implements IHtmlParser { 16 | 17 | @Override 18 | public Empty parse(Document document, String json) throws IOException { 19 | if (!TextUtils.isEmpty(json) && json.startsWith("0")) { 20 | return null; 21 | } 22 | return Empty.value(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/SearchKbListParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import com.rae.cnblogs.sdk.bean.BlogType; 4 | 5 | /** 6 | * 搜索知识库列表解析 7 | * Created by ChenRui on 2017/2/8 0008 10:05. 8 | */ 9 | public class SearchKbListParser extends SearchBlogListParser { 10 | 11 | public SearchKbListParser() { 12 | super(BlogType.KB); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/SearchNewsListParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import com.rae.cnblogs.sdk.bean.BlogType; 4 | 5 | /** 6 | * 搜索新闻列表解析 7 | * Created by ChenRui on 2017/2/8 0008 10:05. 8 | */ 9 | public class SearchNewsListParser extends SearchBlogListParser { 10 | 11 | public SearchNewsListParser() { 12 | super(BlogType.NEWS); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/SinaShotenParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import com.rae.cnblogs.sdk.CnblogsApiException; 4 | 5 | import org.json.JSONArray; 6 | import org.json.JSONException; 7 | import org.json.JSONObject; 8 | 9 | import java.io.IOException; 10 | 11 | /** 12 | * 新浪短连接 13 | * Created by ChenRui on 2017/10/31 0031 17:11. 14 | */ 15 | public class SinaShotenParser implements IJsonParser { 16 | 17 | @Override 18 | public String parse(String json) throws IOException { 19 | json = json.trim(); 20 | if (!json.startsWith("[")) throw new CnblogsApiException("新浪接口返回错误"); 21 | try { 22 | JSONArray array = new JSONArray(json); 23 | int length = array.length(); 24 | for (int i = 0; i < length; i++) { 25 | JSONObject o = array.getJSONObject(i); 26 | return o.getString("url_short"); 27 | } 28 | } catch (JSONException e) { 29 | e.printStackTrace(); 30 | } 31 | throw new CnblogsApiException("新浪接口返回错误"); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /sdk/src/main/java/com/rae/cnblogs/sdk/parser/UserInfoParser.java: -------------------------------------------------------------------------------- 1 | package com.rae.cnblogs.sdk.parser; 2 | 3 | import android.text.TextUtils; 4 | 5 | import com.rae.cnblogs.sdk.UserProvider; 6 | import com.rae.cnblogs.sdk.bean.UserInfoBean; 7 | 8 | import org.jsoup.nodes.Document; 9 | 10 | /** 11 | * 用户信息解析 12 | * Created by ChenRui on 2017/2/7 0007 15:31. 13 | */ 14 | public class UserInfoParser extends AbsUserInfoParser { 15 | 16 | @Override 17 | public UserInfoBean parse(Document document, String html) { 18 | UserInfoBean result = new UserInfoBean(); 19 | onParseUserInfo(result, document); 20 | // 保存登录信息 21 | if (!TextUtils.isEmpty(result.getUserId())) { 22 | UserProvider.getInstance().setLoginUserInfo(result); 23 | } 24 | return result; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /sdk/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | CnblogsSdk 3 | 提供博客离线下载,节省流量,建议开启。 4 | 离线下载服务 5 | 6 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':sdk', ':app' 2 | --------------------------------------------------------------------------------