├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── apk └── wanandroid-release-v1.1.0.apk ├── app ├── .gitignore ├── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew.bat ├── mutidex-config.pro ├── proguard-rules.pro └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── pers │ │ │ └── jay │ │ │ └── wanandroid │ │ │ ├── api │ │ │ ├── ApiService.java │ │ │ └── WanAndroidService.java │ │ │ ├── base │ │ │ ├── BaseActivity.java │ │ │ ├── BaseFragment.java │ │ │ ├── BaseLazyLoadFragment.java │ │ │ ├── BaseMVPActivity.java │ │ │ ├── BaseMVPFragment.java │ │ │ ├── BaseObserver.java │ │ │ ├── BaseTabActivity.java │ │ │ ├── BaseWanObserver.java │ │ │ └── IView.java │ │ │ ├── common │ │ │ ├── AppConfig.java │ │ │ ├── BaseApp.java │ │ │ ├── CollectHelper.java │ │ │ ├── CommonTextWatcher.java │ │ │ ├── Const.java │ │ │ ├── CookiesManager.java │ │ │ ├── GlideImageLoader.java │ │ │ ├── GlobalConfiguration.java │ │ │ ├── ICollectView.java │ │ │ ├── JApplication.java │ │ │ ├── ScrollTopListener.java │ │ │ ├── SearchHelper.java │ │ │ ├── TodoTypeHelper.java │ │ │ ├── WanComponent.java │ │ │ └── WanModule.java │ │ │ ├── di │ │ │ ├── component │ │ │ │ ├── CollectionComponent.java │ │ │ │ ├── ContainerComponent.java │ │ │ │ ├── HomeComponent.java │ │ │ │ ├── LoginComponent.java │ │ │ │ ├── MainComponent.java │ │ │ │ ├── MyCoinComponent.java │ │ │ │ ├── MySharesComponent.java │ │ │ │ ├── NavComponent.java │ │ │ │ ├── ProjectComponent.java │ │ │ │ ├── QAComponent.java │ │ │ │ ├── RankComponent.java │ │ │ │ ├── SearchComponent.java │ │ │ │ ├── SearchResultComponent.java │ │ │ │ ├── SettingsComponent.java │ │ │ │ ├── ShareComponent.java │ │ │ │ ├── SignupComponent.java │ │ │ │ ├── SquareComponent.java │ │ │ │ ├── TabComponent.java │ │ │ │ ├── TodoComponent.java │ │ │ │ ├── TodoEditComponent.java │ │ │ │ ├── TreeComponent.java │ │ │ │ ├── UserComponent.java │ │ │ │ ├── WebComponent.java │ │ │ │ ├── WeixinComponent.java │ │ │ │ └── X5Component.java │ │ │ └── module │ │ │ │ ├── CollectionModule.java │ │ │ │ ├── ContainerModule.java │ │ │ │ ├── HomeModule.java │ │ │ │ ├── LoginModule.java │ │ │ │ ├── MainModule.java │ │ │ │ ├── MyCoinModule.java │ │ │ │ ├── MySharesModule.java │ │ │ │ ├── NavModule.java │ │ │ │ ├── ProjectModule.java │ │ │ │ ├── QAModule.java │ │ │ │ ├── RankModule.java │ │ │ │ ├── SearchModule.java │ │ │ │ ├── SearchResultModule.java │ │ │ │ ├── SettingsModule.java │ │ │ │ ├── ShareModule.java │ │ │ │ ├── SignupModule.java │ │ │ │ ├── SquareModule.java │ │ │ │ ├── TabModule.java │ │ │ │ ├── TodoEditModule.java │ │ │ │ ├── TodoModule.java │ │ │ │ ├── TreeModule.java │ │ │ │ ├── UserModule.java │ │ │ │ ├── WebModule.java │ │ │ │ ├── WeixinModule.java │ │ │ │ └── X5Module.java │ │ │ ├── event │ │ │ └── Event.java │ │ │ ├── http │ │ │ ├── AddCookiesInterceptor.java │ │ │ ├── ApiException.java │ │ │ ├── GsonConverterFactory.java │ │ │ ├── NetWorkManager.java │ │ │ ├── RetryWithDelay.java │ │ │ └── SaveCookiesInterceptor.java │ │ │ ├── model │ │ │ ├── Article.java │ │ │ ├── ArticleInfo.java │ │ │ ├── BannerImg.java │ │ │ ├── BingDailyImage.java │ │ │ ├── Coin.java │ │ │ ├── CoinHistory.java │ │ │ ├── HotKey.java │ │ │ ├── MxWhether.java │ │ │ ├── Navi.java │ │ │ ├── PageInfo.java │ │ │ ├── ProjectCat.java │ │ │ ├── ShareUserArticles.java │ │ │ ├── Tab.java │ │ │ ├── Tag.java │ │ │ ├── Todo.java │ │ │ ├── TodoSection.java │ │ │ ├── TodoType.java │ │ │ ├── TodoWrapper.java │ │ │ ├── User.java │ │ │ ├── Website.java │ │ │ └── enums │ │ │ │ └── TodoType.java │ │ │ ├── mvp │ │ │ ├── contract │ │ │ │ ├── CollectionContract.java │ │ │ │ ├── ContainerContract.java │ │ │ │ ├── HomeContract.java │ │ │ │ ├── KnowledgeContract.java │ │ │ │ ├── LoginContract.java │ │ │ │ ├── MainContract.java │ │ │ │ ├── MyCoinContract.java │ │ │ │ ├── MySharesContract.java │ │ │ │ ├── NavContract.java │ │ │ │ ├── ProjectContract.java │ │ │ │ ├── QAContract.java │ │ │ │ ├── RankContract.java │ │ │ │ ├── SearchContract.java │ │ │ │ ├── SearchResultContract.java │ │ │ │ ├── SettingsContract.java │ │ │ │ ├── ShareContract.java │ │ │ │ ├── SignupContract.java │ │ │ │ ├── SplashContract.java │ │ │ │ ├── SquareContract.java │ │ │ │ ├── TabContract.java │ │ │ │ ├── TodoContract.java │ │ │ │ ├── TodoEditContract.java │ │ │ │ ├── TreeContract.java │ │ │ │ ├── UserContract.java │ │ │ │ ├── WebContract.java │ │ │ │ ├── WeixinContract.java │ │ │ │ └── X5Contract.java │ │ │ ├── model │ │ │ │ ├── CollectionModel.java │ │ │ │ ├── ContainerModel.java │ │ │ │ ├── HomeModel.java │ │ │ │ ├── KnowledgeModel.java │ │ │ │ ├── LoginModel.java │ │ │ │ ├── MainModel.java │ │ │ │ ├── MyCoinModel.java │ │ │ │ ├── MySharesModel.java │ │ │ │ ├── NavModel.java │ │ │ │ ├── ProjectModel.java │ │ │ │ ├── QAModel.java │ │ │ │ ├── RankModel.java │ │ │ │ ├── SearchModel.java │ │ │ │ ├── SearchResultModel.java │ │ │ │ ├── SettingsModel.java │ │ │ │ ├── ShareModel.java │ │ │ │ ├── SignupModel.java │ │ │ │ ├── SplashModel.java │ │ │ │ ├── SquareModel.java │ │ │ │ ├── TabModel.java │ │ │ │ ├── TodoEditModel.java │ │ │ │ ├── TodoModel.java │ │ │ │ ├── UserModel.java │ │ │ │ ├── WebModel.java │ │ │ │ ├── WeixinModel.java │ │ │ │ └── X5Model.java │ │ │ ├── presenter │ │ │ │ ├── CollectionPresenter.java │ │ │ │ ├── ContainerPresenter.java │ │ │ │ ├── HomePresenter.java │ │ │ │ ├── KnowledgePresenter.java │ │ │ │ ├── LoginPresenter.java │ │ │ │ ├── MainPresenter.java │ │ │ │ ├── MyCoinPresenter.java │ │ │ │ ├── MySharesPresenter.java │ │ │ │ ├── NavPresenter.java │ │ │ │ ├── ProjectPresenter.java │ │ │ │ ├── QAPresenter.java │ │ │ │ ├── RankPresenter.java │ │ │ │ ├── SearchPresenter.java │ │ │ │ ├── SearchResultPresenter.java │ │ │ │ ├── SettingsPresenter.java │ │ │ │ ├── SharePresenter.java │ │ │ │ ├── SignupPresenter.java │ │ │ │ ├── SplashPresenter.java │ │ │ │ ├── SquarePresenter.java │ │ │ │ ├── TabPresenter.java │ │ │ │ ├── TodoEditPresenter.java │ │ │ │ ├── TodoPresenter.java │ │ │ │ ├── UserPresenter.java │ │ │ │ ├── WebPresenter.java │ │ │ │ ├── WeixinPresenter.java │ │ │ │ └── X5Presenter.java │ │ │ └── ui │ │ │ │ ├── activity │ │ │ │ ├── MainActivity.java │ │ │ │ ├── SearchActivity.java │ │ │ │ ├── SettingsActivity.java │ │ │ │ ├── TabActivity.java │ │ │ │ ├── TodoEditActivity.java │ │ │ │ ├── WebActivity.java │ │ │ │ └── X5WebActivity.java │ │ │ │ ├── adapter │ │ │ │ ├── ArticleAdapter.java │ │ │ │ ├── KnowledgeAdapter.java │ │ │ │ ├── MyCoinAdapter.java │ │ │ │ ├── NaviAdapter.java │ │ │ │ ├── RankAdapter.java │ │ │ │ ├── SimpleListAdapter.java │ │ │ │ ├── TabFragmentStatePagerAdapter.java │ │ │ │ ├── TodoAdapter.java │ │ │ │ ├── TodoListAdapter.java │ │ │ │ └── TodoTypeAdapter.java │ │ │ │ └── fragment │ │ │ │ ├── CollectionFragment.java │ │ │ │ ├── ContainerFragment.java │ │ │ │ ├── DoneFragment.java │ │ │ │ ├── HomeFragment.java │ │ │ │ ├── KnowledgeFragment.java │ │ │ │ ├── LoginFragment.java │ │ │ │ ├── MyCoinFragment.java │ │ │ │ ├── MySharesFragment.java │ │ │ │ ├── NavFragment.java │ │ │ │ ├── ProjectFragment.java │ │ │ │ ├── QAFragment.java │ │ │ │ ├── RankFragment.java │ │ │ │ ├── SearchHisFragment.java │ │ │ │ ├── SearchResultFragment.java │ │ │ │ ├── ShareFragment.java │ │ │ │ ├── SignupFragment.java │ │ │ │ ├── SplashFragment.java │ │ │ │ ├── SquareFragment.java │ │ │ │ ├── StructureFragment.java │ │ │ │ ├── TabFragment.java │ │ │ │ ├── TodoFragment.java │ │ │ │ ├── TodoTabFragment.java │ │ │ │ ├── UserFragment.java │ │ │ │ └── WeixinFragment.java │ │ │ ├── result │ │ │ ├── BaseBean.java │ │ │ ├── BaseWanBean.java │ │ │ ├── BaseWhetherBean.java │ │ │ └── WanAndroidResponse.java │ │ │ ├── utils │ │ │ ├── ADFilterTool.java │ │ │ ├── AndroidQUtils.java │ │ │ ├── BottomNavigationViewHelper.java │ │ │ ├── DarkModeUtils.java │ │ │ ├── DrawableUtil.java │ │ │ ├── JUtils.java │ │ │ ├── PoemUtils.java │ │ │ ├── RouterHelper.java │ │ │ ├── RvAnimUtils.java │ │ │ ├── RvScrollTopUtils.java │ │ │ ├── RxPhotoTool.java │ │ │ ├── SmartRefreshUtils.java │ │ │ ├── ThemeHelper.java │ │ │ ├── TimberUtils.java │ │ │ ├── UIUtils.java │ │ │ ├── WebViewClient.java │ │ │ ├── WrapContentLinearLayoutManager.java │ │ │ └── rx │ │ │ │ └── RxScheduler.java │ │ │ └── widgets │ │ │ ├── ChooseImageDialog.java │ │ │ ├── CircleProgress.java │ │ │ ├── CollapsingWebView.java │ │ │ ├── ConfirmDialog.java │ │ │ ├── CustomWebView.java │ │ │ ├── DashboardView.java │ │ │ ├── DividerItemDecoration.java │ │ │ ├── HandWritingTextView.java │ │ │ ├── KeyboardLayout.java │ │ │ ├── LabelView.java │ │ │ ├── PoemHeader.java │ │ │ ├── PoemTextView.java │ │ │ ├── ScaleLikeView.java │ │ │ ├── ScrollWebView.java │ │ │ ├── SwipeItemLayout.java │ │ │ ├── VerticalLineTextView.java │ │ │ ├── WebProgressView.java │ │ │ ├── WebViewProgress.java │ │ │ └── behavior │ │ │ ├── BottomNavigationBehavior.java │ │ │ └── FloatingActionBarBehavior.java │ └── res │ │ ├── anim │ │ ├── anim_fade_in.xml │ │ ├── anim_fade_out.xml │ │ ├── anim_launcher.xml │ │ ├── anim_scale_from_center_out.xml │ │ ├── anim_scale_to_center_in.xml │ │ ├── translate_center_to_left.xml │ │ ├── translate_center_to_right.xml │ │ ├── translate_left_to_center.xml │ │ └── translate_right_to_center.xml │ │ ├── color-night │ │ └── color_state_menu_navi.xml │ │ ├── color │ │ └── color_state_menu_navi.xml │ │ ├── drawable-night │ │ └── launch_screen.xml │ │ ├── drawable │ │ ├── bg_article_new.xml │ │ ├── bg_article_qa.xml │ │ ├── bg_article_top.xml │ │ ├── bg_avatar.xml │ │ ├── bg_corner_dialog.xml │ │ ├── bg_corner_top_dialog.xml │ │ ├── bg_delete.xml │ │ ├── bg_done.xml │ │ ├── bg_edit_text_common.xml │ │ ├── bg_edit_text_search.xml │ │ ├── bg_image_placeholder.xml │ │ ├── bg_line_vertical.xml │ │ ├── bg_press_color_surface.xml │ │ ├── bg_triangle.xml │ │ ├── dk_title_back.png │ │ ├── ic_about_us.xml │ │ ├── ic_add_24dp.xml │ │ ├── ic_arrow_upward.xml │ │ ├── ic_avatar.png │ │ ├── ic_chevron_left.xml │ │ ├── ic_chevron_right.xml │ │ ├── ic_clear.xml │ │ ├── ic_coin.xml │ │ ├── ic_collection.xml │ │ ├── ic_del_all.png │ │ ├── ic_delete_red.png │ │ ├── ic_error.xml │ │ ├── ic_exit.xml │ │ ├── ic_first.xml │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.xml │ │ ├── ic_like.xml │ │ ├── ic_like_fill.xml │ │ ├── ic_menu.xml │ │ ├── ic_more_vert.xml │ │ ├── ic_nav_home.xml │ │ ├── ic_nav_knowledge.xml │ │ ├── ic_nav_navigation.xml │ │ ├── ic_nav_project.xml │ │ ├── ic_nav_wechat.xml │ │ ├── ic_no_network.png │ │ ├── ic_question.xml │ │ ├── ic_question_answer.xml │ │ ├── ic_ranking.png │ │ ├── ic_refresh.xml │ │ ├── ic_search.xml │ │ ├── ic_second.xml │ │ ├── ic_setting.xml │ │ ├── ic_share.xml │ │ ├── ic_splash.png │ │ ├── ic_swap_horiz_black_24dp.xml │ │ ├── ic_third.xml │ │ ├── ic_thumb_up.xml │ │ ├── ic_todo.xml │ │ ├── ic_upload.xml │ │ ├── launch_screen.xml │ │ ├── line_divider.xml │ │ ├── placeholder_wanandroid.webp │ │ ├── ripple_gray.xml │ │ ├── selector_bottom_navigation.xml │ │ ├── selector_collect.xml │ │ ├── selector_pop_item.xml │ │ ├── selector_text.xml │ │ └── vector_drawable_ic_edit.xml │ │ ├── layout │ │ ├── activity_base_tab.xml │ │ ├── activity_main.xml │ │ ├── activity_search.xml │ │ ├── activity_settings.xml │ │ ├── activity_tab.xml │ │ ├── activity_todo_edit.xml │ │ ├── activity_user.xml │ │ ├── activity_web.xml │ │ ├── activity_x5_web.xml │ │ ├── base_popup_item_list.xml │ │ ├── fragment_collection.xml │ │ ├── fragment_container.xml │ │ ├── fragment_home.xml │ │ ├── fragment_knowledge.xml │ │ ├── fragment_login.xml │ │ ├── fragment_main.xml │ │ ├── fragment_nav.xml │ │ ├── fragment_project.xml │ │ ├── fragment_qa.xml │ │ ├── fragment_search.xml │ │ ├── fragment_search_result.xml │ │ ├── fragment_share.xml │ │ ├── fragment_signup.xml │ │ ├── fragment_splash.xml │ │ ├── fragment_square.xml │ │ ├── fragment_tab.xml │ │ ├── fragment_user.xml │ │ ├── fragment_weixin.xml │ │ ├── include_base_recycler_view.xml │ │ ├── include_progressbar.xml │ │ ├── include_toolbar.xml │ │ ├── include_toolbar_collapse.xml │ │ ├── include_toolbar_search.xml │ │ ├── include_toolbar_web.xml │ │ ├── item_article.xml │ │ ├── item_knowledge_child.xml │ │ ├── item_my_coin.xml │ │ ├── item_rank.xml │ │ ├── item_search_history.xml │ │ ├── item_title.xml │ │ ├── item_todo_content.xml │ │ ├── item_todo_title.xml │ │ ├── layout_appbar_recyclerview.xml │ │ ├── layout_banner.xml │ │ ├── layout_drawer_header.xml │ │ ├── layout_empty_view.xml │ │ ├── layout_error_view.xml │ │ ├── layout_loading_view.xml │ │ ├── layout_no_network_view.xml │ │ ├── layout_popup_choose_image.xml │ │ ├── layout_popup_list.xml │ │ ├── popup_todo_item_list.xml │ │ ├── recycle_list.xml │ │ └── view_banner.xml │ │ ├── menu │ │ ├── menu_drawer_navigation.xml │ │ ├── menu_navigation_bottom.xml │ │ └── menu_todo_operation.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_arrow_back_white_24dp.png │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_arrow_back_white_24dp.png │ │ ├── ic_launcher.png │ │ ├── ic_launcher_round.png │ │ └── ic_launcher_web.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_arrow_back_white_24dp.png │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── values-night │ │ └── colors-night.xml │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-v29 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ ├── values │ │ ├── AdUrlString.Xml │ │ ├── Keyboardlayout_attrs.xml │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dashboard_attrs.xml │ │ ├── dimens.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ ├── avatar_file_paths.xml │ │ ├── network_security_config.xml │ │ └── provider_paths.xml │ └── test │ └── java │ └── ExampleUnitTest.java ├── build.gradle ├── commonLibs ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── pers │ │ └── zjc │ │ └── commonlibs │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── pers │ │ │ └── zjc │ │ │ └── commonlibs │ │ │ ├── constant │ │ │ ├── CacheConstants.java │ │ │ ├── DateFormatConst.java │ │ │ ├── MainThread.java │ │ │ ├── MemoryConstants.java │ │ │ ├── PermissionConstants.java │ │ │ ├── RegexConstants.java │ │ │ ├── ThreadExecutor.java │ │ │ └── TimeConstants.java │ │ │ ├── intf │ │ │ └── HandleBackInterface.java │ │ │ ├── ui │ │ │ ├── BasePagerAdapter.java │ │ │ ├── BaseStatePagerAdapter.java │ │ │ └── MyFragmentPagerAdapter.java │ │ │ ├── util │ │ │ ├── ActivityUtils.java │ │ │ ├── AdaptScreenUtils.java │ │ │ ├── AppUtils.java │ │ │ ├── BackPressUtil.java │ │ │ ├── BarUtils.java │ │ │ ├── BrightnessUtils.java │ │ │ ├── BusUtils.java │ │ │ ├── CacheDiskStaticUtils.java │ │ │ ├── CacheDiskUtils.java │ │ │ ├── CacheDoubleStaticUtils.java │ │ │ ├── CacheDoubleUtils.java │ │ │ ├── CacheMemoryStaticUtils.java │ │ │ ├── CacheMemoryUtils.java │ │ │ ├── CleanUtils.java │ │ │ ├── ClickUtils.java │ │ │ ├── ClipboardUtils.java │ │ │ ├── CloneUtils.java │ │ │ ├── CloseUtils.java │ │ │ ├── ColorUtils.java │ │ │ ├── ConvertUtils.java │ │ │ ├── CoordinateUtils.java │ │ │ ├── CrashUtils.java │ │ │ ├── DeviceUtils.java │ │ │ ├── EncodeUtils.java │ │ │ ├── EncryptUtils.java │ │ │ ├── FileIOUtils.java │ │ │ ├── FileUtils.java │ │ │ ├── FlashlightUtils.java │ │ │ ├── FragmentUtils.java │ │ │ ├── GsonUtils.java │ │ │ ├── ImageUtils.java │ │ │ ├── IntentUtils.java │ │ │ ├── JsonUtils.java │ │ │ ├── KeyboardUtils.java │ │ │ ├── LocationUtils.java │ │ │ ├── LogUtils.java │ │ │ ├── MetaDataUtils.java │ │ │ ├── NetworkUtils.java │ │ │ ├── NotificationUtils.java │ │ │ ├── ObjectUtils.java │ │ │ ├── PathUtils.java │ │ │ ├── PermissionUtils.java │ │ │ ├── PhoneUtils.java │ │ │ ├── PinyinUtils.java │ │ │ ├── ProcessUtils.java │ │ │ ├── ReflectUtils.java │ │ │ ├── RegexUtils.java │ │ │ ├── ResourceUtils.java │ │ │ ├── RomUtils.java │ │ │ ├── SDCardUtils.java │ │ │ ├── SPStaticUtils.java │ │ │ ├── SPUtils.java │ │ │ ├── ScreenUtils.java │ │ │ ├── ServiceUtils.java │ │ │ ├── ShellUtils.java │ │ │ ├── SizeUtils.java │ │ │ ├── SnackbarUtils.java │ │ │ ├── SpanUtils.java │ │ │ ├── StringUtils.java │ │ │ ├── ThreadUtils.java │ │ │ ├── ThrowableUtils.java │ │ │ ├── TimeUtils.java │ │ │ ├── ToastUtils.java │ │ │ ├── UriUtils.java │ │ │ ├── Utils.java │ │ │ ├── VibrateUtils.java │ │ │ ├── ViewUtils.java │ │ │ └── ZipUtils.java │ │ │ └── widgets │ │ │ └── DashboardView.java │ └── res │ │ └── values │ │ ├── colors.xml │ │ ├── dashboard_attrs.xml │ │ └── strings.xml │ └── test │ └── java │ └── pers │ └── zjc │ └── commonlibs │ └── ExampleUnitTest.java ├── config.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew.bat ├── imgs ├── TODO编辑.jpg ├── 二级标签.jpg ├── 侧滑菜单.jpg ├── 公众号.jpg ├── 分享文章.jpg ├── 回到顶部.png ├── 头像设置.jpg ├── 导航.jpg ├── 导航网站详情.jpg ├── 广场.jpg ├── 待办.jpg ├── 我的分享.jpg ├── 我的收藏.jpg ├── 我的积分.jpg ├── 搜索.jpg ├── 收藏.png ├── 暗黑模式.jpg ├── 注册.jpg ├── 登录.jpg ├── 知识体系.jpg ├── 积分排行榜 (2).jpg ├── 积分排行榜.jpg ├── 系统设置.jpg ├── 项目.jpg ├── 项目详情.jpg └── 首页.jpg ├── keystore └── RookieJay.jks └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | # #*.apk 3 | *.ap_ 4 | 5 | # Files for the ART/Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | out/ 15 | 16 | # Gradle files 17 | .gradle/ 18 | build/ 19 | gradlew 20 | gralew.bat 21 | 22 | # Local configuration file (sdk path, etc) 23 | local.properties 24 | 25 | # Proguard folder generated by Eclipse 26 | proguard/ 27 | 28 | # Log Files 29 | *.log 30 | 31 | # Android Studio Navigation editor temp files 32 | .navigation/ 33 | 34 | # Android Studio captures folder 35 | captures/ 36 | 37 | # Intellij 38 | *.iml 39 | .idea 40 | 41 | # MacOS 42 | .DS_Store 43 | 44 | # keystore 45 | #keystore 46 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | jdk: oraclejdk8 3 | before_install: 4 | - yes | sdkmanager "platforms;android-28" 5 | 6 | env: 7 | global: 8 | - ANDROID_API_LEVEL=28 9 | - ANDROID_BUILD_TOOLS_VERSION=28.0.3 10 | - TRAVIS_SECURE_ENV_VARS=true 11 | 12 | android: 13 | components: 14 | # The BuildTools version used by your project 15 | - tools 16 | - platform-tools 17 | - build-tools-$ANDROID_BUILD_TOOLS_VERSION 18 | - extra-android-m2repository 19 | - extra-google-android-support 20 | 21 | # The SDK version used to compile your project 22 | - android-$ANDROID_API_LEVEL 23 | licenses: 24 | - '.+' 25 | 26 | script: 27 | - ./gradlew clean 28 | # - ./gradlew install 29 | # - ./gradlew bintrayUpload 30 | - ./gradlew assembleDebug -------------------------------------------------------------------------------- /apk/wanandroid-release-v1.1.0.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/apk/wanandroid-release-v1.1.0.apk -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Jul 02 15:58:35 CST 2019 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-5.1.1-all.zip 7 | -------------------------------------------------------------------------------- /app/mutidex-config.pro: -------------------------------------------------------------------------------- 1 | -keep class com.jess.arms.di.module.GlobalConfigModule; 2 | -------------------------------------------------------------------------------- /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 /Users/jess/Library/Android/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 | 19 | # 混淆规则在 arms moudule 下的 proguard-rules.pro 中, 混淆前先参阅 https://github.com/JessYanCoding/MVPArms/wiki#1.5 20 | # 21 | -dontwarn com.tencent.bugly.** 22 | -keep public class com.tencent.bugly.**{*;} 23 | -keep class android.support.**{*;} 24 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/api/ApiService.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.api; 2 | 3 | import io.reactivex.Observable; 4 | import okhttp3.ResponseBody; 5 | import retrofit2.http.GET; 6 | import retrofit2.http.Url; 7 | 8 | public interface ApiService { 9 | 10 | /** 11 | * 必应每日一图(郭霖) 12 | */ 13 | @GET 14 | Observable bingImgUrl(@Url String url); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/base/BaseMVPActivity.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.base; 2 | 3 | 4 | import com.jess.arms.base.BaseActivity; 5 | import com.jess.arms.mvp.IPresenter; 6 | 7 | public abstract class BaseMVPActivity

extends BaseActivity

{ 8 | 9 | 10 | 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/base/BaseMVPFragment.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.base; 2 | 3 | import pers.jay.wanandroid.base.BaseFragment; 4 | import com.jess.arms.mvp.BasePresenter; 5 | 6 | public abstract class BaseMVPFragment

extends BaseFragment

{ 7 | 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/base/BaseTabActivity.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.base; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | 6 | import com.jess.arms.base.BaseActivity; 7 | import com.jess.arms.mvp.BasePresenter; 8 | 9 | import pers.jay.wanandroid.R; 10 | 11 | public abstract class BaseTabActivity

extends BaseActivity

{ 12 | 13 | @Override 14 | public int initView(@Nullable Bundle savedInstanceState) { 15 | return R.layout.activity_base_tab; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/common/CommonTextWatcher.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.common; 2 | 3 | import android.text.TextWatcher; 4 | 5 | public abstract class CommonTextWatcher implements TextWatcher { 6 | 7 | public CommonTextWatcher() { 8 | } 9 | 10 | @Override 11 | public void beforeTextChanged(CharSequence s, int start, int count, int after) { 12 | 13 | } 14 | 15 | @Override 16 | public void onTextChanged(CharSequence s, int start, int before, int count) { 17 | 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/common/CookiesManager.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.common; 2 | 3 | import pers.zjc.commonlibs.util.SPUtils; 4 | 5 | 6 | public class CookiesManager { 7 | 8 | private static SPUtils spUtils; 9 | 10 | private static class CookiesManagerHolder { 11 | private static final CookiesManager INSTANCE = new CookiesManager(); 12 | } 13 | 14 | public static CookiesManager getInstance() { 15 | spUtils = SPUtils.getInstance(Const.Local.COOKIE_PREF); 16 | return CookiesManagerHolder.INSTANCE; 17 | } 18 | 19 | public void clearCookies() { 20 | spUtils.clear(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/common/GlideImageLoader.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.common; 2 | 3 | import android.content.Context; 4 | import android.widget.ImageView; 5 | 6 | import com.bumptech.glide.Glide; 7 | import com.bumptech.glide.load.engine.DiskCacheStrategy; 8 | import com.bumptech.glide.request.RequestOptions; 9 | import com.youth.banner.loader.ImageLoader; 10 | 11 | import pers.jay.wanandroid.R; 12 | 13 | public class GlideImageLoader extends ImageLoader { 14 | 15 | RequestOptions options = RequestOptions.placeholderOf(R.color.gray) 16 | .error(R.color.gray) 17 | .diskCacheStrategy(DiskCacheStrategy.NONE) 18 | .centerCrop(); 19 | 20 | @Override 21 | public void displayImage(Context context, Object path, ImageView imageView) { 22 | /** 23 | 注意: 24 | 1.图片加载器由自己选择,这里不限制,只是提供几种使用方法 25 | 2.返回的图片路径为Object类型,由于不能确定你到底使用的那种图片加载器, 26 | 传输的到的是什么格式,那么这种就使用Object接收和返回,你只需要强转成你传输的类型就行, 27 | 切记不要胡乱强转! 28 | */ 29 | 30 | //Glide 加载图片简单用法 31 | Glide.with(context) 32 | .load(path) 33 | .thumbnail(0.1f)//设置缩略图支持:先加载缩略图 然后在加载全图 传了一个 0.1f 作为参数,Glide 将会显示原始图像的10%的大小。 34 | .apply(options).into(imageView); 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/common/ICollectView.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.common; 2 | 3 | import com.jess.arms.mvp.IView; 4 | 5 | import pers.jay.wanandroid.model.Article; 6 | 7 | /** 8 | * 需要实现收藏功能的界面实现此接口 9 | */ 10 | public interface ICollectView extends IView { 11 | 12 | /** 13 | * 收藏成功 使用第三方库时无需回调,立即展示点击动画 14 | */ 15 | void onCollectSuccess(Article article, int position); 16 | 17 | /** 18 | * 收藏失败 19 | */ 20 | void onCollectFail(Article article, int position); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/common/ScrollTopListener.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.common; 2 | 3 | public interface ScrollTopListener { 4 | 5 | void scrollToTop(); 6 | 7 | default void scrollToTopRefresh() {}; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/common/TodoTypeHelper.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.common; 2 | 3 | import com.google.gson.Gson; 4 | 5 | import java.util.LinkedHashMap; 6 | 7 | import pers.zjc.commonlibs.util.SPUtils; 8 | 9 | public class TodoTypeHelper { 10 | 11 | public static final String TODO_TYPE = "todo_type"; 12 | 13 | private static SPUtils spUtils; 14 | private static Gson gson; 15 | 16 | private LinkedHashMap mTypeMap = new LinkedHashMap<>(); 17 | 18 | private static class TodoTypeHolder { 19 | private static final TodoTypeHelper INSTANCE = new TodoTypeHelper(); 20 | } 21 | 22 | public static TodoTypeHelper getInstance() { 23 | if (spUtils == null) { 24 | spUtils = SPUtils.getInstance(TODO_TYPE); 25 | } 26 | if (gson == null) { 27 | gson = JApplication.getInstance().getAppComponent().gson(); 28 | } 29 | return TodoTypeHolder.INSTANCE; 30 | } 31 | 32 | public LinkedHashMap getmTypeMap() { 33 | 34 | return mTypeMap; 35 | } 36 | 37 | public void setmTypeMap(LinkedHashMap mTypeMap) { 38 | this.mTypeMap = mTypeMap; 39 | spUtils.put(TODO_TYPE, gson.toJson(mTypeMap)); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/common/WanComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.common; 2 | 3 | import com.jess.arms.di.component.AppComponent; 4 | 5 | import javax.inject.Singleton; 6 | 7 | import dagger.Component; 8 | 9 | @Singleton 10 | @Component(modules = WanModule.class) 11 | public interface WanComponent { 12 | 13 | AppConfig appconfig(); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/common/WanModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.common; 2 | 3 | import javax.inject.Singleton; 4 | 5 | import dagger.Module; 6 | import dagger.Provides; 7 | 8 | @Module 9 | public class WanModule { 10 | 11 | @Provides 12 | @Singleton 13 | public AppConfig provideAppConfig() { 14 | return AppConfig.getInstance(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/CollectionComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.CollectionModule; 9 | import pers.jay.wanandroid.mvp.contract.CollectionContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.CollectionFragment; 14 | 15 | @FragmentScope 16 | @Component(modules = CollectionModule.class, dependencies = AppComponent.class) 17 | public interface CollectionComponent { 18 | 19 | void inject(CollectionFragment fragment); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | CollectionComponent.Builder view(CollectionContract.View view); 26 | 27 | CollectionComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | CollectionComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/ContainerComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.common.AppConfig; 9 | import pers.jay.wanandroid.common.CookiesManager; 10 | import pers.jay.wanandroid.di.module.ContainerModule; 11 | import pers.jay.wanandroid.mvp.contract.ContainerContract; 12 | 13 | import com.jess.arms.di.scope.FragmentScope; 14 | 15 | import pers.jay.wanandroid.mvp.ui.fragment.ContainerFragment; 16 | 17 | @FragmentScope 18 | @Component(modules = ContainerModule.class, dependencies = AppComponent.class) 19 | public interface ContainerComponent { 20 | 21 | void inject(ContainerFragment fragment); 22 | 23 | @Component.Builder 24 | interface Builder { 25 | 26 | @BindsInstance 27 | ContainerComponent.Builder view(ContainerContract.View view); 28 | 29 | ContainerComponent.Builder appComponent(AppComponent appComponent); 30 | 31 | ContainerComponent build(); 32 | } 33 | 34 | AppConfig appConfig(); 35 | 36 | CookiesManager cookiesManager(); 37 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/HomeComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.HomeModule; 9 | import pers.jay.wanandroid.mvp.contract.HomeContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.HomeFragment; 14 | 15 | @FragmentScope 16 | @Component(modules = HomeModule.class, dependencies = AppComponent.class) 17 | public interface HomeComponent { 18 | 19 | void inject(HomeFragment fragment); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | HomeComponent.Builder view(HomeContract.View view); 26 | 27 | HomeComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | HomeComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/MySharesComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.MySharesModule; 9 | import pers.jay.wanandroid.mvp.contract.MySharesContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.MySharesFragment; 14 | 15 | @FragmentScope 16 | @Component(modules = MySharesModule.class, dependencies = AppComponent.class) 17 | public interface MySharesComponent { 18 | 19 | void inject(MySharesFragment fragment); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | MySharesComponent.Builder view(MySharesContract.View view); 26 | 27 | MySharesComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | MySharesComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/NavComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.NavModule; 9 | import pers.jay.wanandroid.mvp.contract.NavContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.NavFragment; 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 10/18/2019 11:25 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @FragmentScope 28 | @Component(modules = NavModule.class, dependencies = AppComponent.class) 29 | public interface NavComponent { 30 | 31 | void inject(NavFragment fragment); 32 | 33 | @Component.Builder 34 | interface Builder { 35 | 36 | @BindsInstance 37 | NavComponent.Builder view(NavContract.View view); 38 | 39 | NavComponent.Builder appComponent(AppComponent appComponent); 40 | 41 | NavComponent build(); 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/QAComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.QAModule; 9 | import pers.jay.wanandroid.mvp.contract.QAContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.QAFragment; 14 | 15 | @FragmentScope 16 | @Component(modules = QAModule.class, dependencies = AppComponent.class) 17 | public interface QAComponent { 18 | 19 | void inject(QAFragment fragment); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | QAComponent.Builder view(QAContract.View view); 26 | 27 | QAComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | QAComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/SettingsComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.SettingsModule; 9 | import pers.jay.wanandroid.mvp.contract.SettingsContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.activity.SettingsActivity; 14 | 15 | @ActivityScope 16 | @Component(modules = SettingsModule.class, dependencies = AppComponent.class) 17 | public interface SettingsComponent { 18 | 19 | void inject(SettingsActivity activity); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | SettingsComponent.Builder view(SettingsContract.View view); 26 | 27 | SettingsComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | SettingsComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/ShareComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.ShareModule; 9 | import pers.jay.wanandroid.mvp.contract.ShareContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.ShareFragment; 14 | 15 | @FragmentScope 16 | @Component(modules = ShareModule.class, dependencies = AppComponent.class) 17 | public interface ShareComponent { 18 | 19 | void inject(ShareFragment fragment); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | ShareComponent.Builder view(ShareContract.View view); 26 | 27 | ShareComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | ShareComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/SignupComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.SignupModule; 9 | import pers.jay.wanandroid.mvp.contract.SignupContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.SignupFragment; 14 | 15 | @FragmentScope 16 | @Component(modules = SignupModule.class, dependencies = AppComponent.class) 17 | public interface SignupComponent { 18 | 19 | void inject(SignupFragment fragment); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | SignupComponent.Builder view(SignupContract.View view); 26 | 27 | SignupComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | SignupComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/SquareComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.SquareModule; 9 | import pers.jay.wanandroid.mvp.contract.SquareContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.SquareFragment; 14 | 15 | @FragmentScope 16 | @Component(modules = SquareModule.class, dependencies = AppComponent.class) 17 | public interface SquareComponent { 18 | 19 | void inject(SquareFragment fragment); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | SquareComponent.Builder view(SquareContract.View view); 26 | 27 | SquareComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | SquareComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/TabComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.TabModule; 9 | import pers.jay.wanandroid.mvp.contract.TabContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.TabFragment; 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 11/18/2019 10:05 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @FragmentScope 28 | @Component(modules = TabModule.class, dependencies = AppComponent.class) 29 | public interface TabComponent { 30 | 31 | void inject(TabFragment fragment); 32 | 33 | @Component.Builder 34 | interface Builder { 35 | 36 | @BindsInstance 37 | TabComponent.Builder view(TabContract.View view); 38 | 39 | TabComponent.Builder appComponent(AppComponent appComponent); 40 | 41 | TabComponent build(); 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/TodoComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.TodoModule; 9 | import pers.jay.wanandroid.mvp.contract.TodoContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.TodoFragment; 14 | 15 | @FragmentScope 16 | @Component(modules = TodoModule.class, dependencies = AppComponent.class) 17 | public interface TodoComponent { 18 | 19 | void inject(TodoFragment fragment); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | TodoComponent.Builder view(TodoContract.View view); 26 | 27 | TodoComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | TodoComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/TodoEditComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.TodoEditModule; 9 | import pers.jay.wanandroid.mvp.contract.TodoEditContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.activity.TodoEditActivity; 14 | 15 | @ActivityScope 16 | @Component(modules = TodoEditModule.class, dependencies = AppComponent.class) 17 | public interface TodoEditComponent { 18 | 19 | void inject(TodoEditActivity activity); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | TodoEditComponent.Builder view(TodoEditContract.View view); 26 | 27 | TodoEditComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | TodoEditComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/WebComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.WebModule; 9 | import pers.jay.wanandroid.mvp.contract.WebContract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.activity.WebActivity; 14 | 15 | /** 16 | * ================================================ 17 | * Description: 18 | *

19 | * Created by MVPArmsTemplate on 08/19/2019 15:29 20 | * Contact me 21 | * Follow me 22 | * Star me 23 | * See me 24 | * 模版请保持更新 25 | * ================================================ 26 | */ 27 | @ActivityScope 28 | @Component(modules = WebModule.class, dependencies = AppComponent.class) 29 | public interface WebComponent { 30 | 31 | void inject(WebActivity activity); 32 | 33 | @Component.Builder 34 | interface Builder { 35 | 36 | @BindsInstance 37 | WebComponent.Builder view(WebContract.View view); 38 | 39 | WebComponent.Builder appComponent(AppComponent appComponent); 40 | 41 | WebComponent build(); 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/WeixinComponent.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.WeixinModule; 9 | import pers.jay.wanandroid.mvp.contract.WeixinContract; 10 | 11 | import com.jess.arms.di.scope.FragmentScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.fragment.WeixinFragment; 14 | 15 | @FragmentScope 16 | @Component(modules = WeixinModule.class, dependencies = AppComponent.class) 17 | public interface WeixinComponent { 18 | 19 | void inject(WeixinFragment fragment); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | WeixinComponent.Builder view(WeixinContract.View view); 26 | 27 | WeixinComponent.Builder appComponent(AppComponent appComponent); 28 | 29 | WeixinComponent build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/component/X5Component.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.component; 2 | 3 | import dagger.BindsInstance; 4 | import dagger.Component; 5 | 6 | import com.jess.arms.di.component.AppComponent; 7 | 8 | import pers.jay.wanandroid.di.module.X5Module; 9 | import pers.jay.wanandroid.mvp.contract.X5Contract; 10 | 11 | import com.jess.arms.di.scope.ActivityScope; 12 | 13 | import pers.jay.wanandroid.mvp.ui.activity.X5WebActivity; 14 | 15 | @ActivityScope 16 | @Component(modules = X5Module.class, dependencies = AppComponent.class) 17 | public interface X5Component { 18 | 19 | void inject(X5WebActivity activity); 20 | 21 | @Component.Builder 22 | interface Builder { 23 | 24 | @BindsInstance 25 | X5Component.Builder view(X5Contract.View view); 26 | 27 | X5Component.Builder appComponent(AppComponent appComponent); 28 | 29 | X5Component build(); 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/CollectionModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.integration.IRepositoryManager; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | import pers.jay.wanandroid.api.WanAndroidService; 9 | import pers.jay.wanandroid.http.NetWorkManager; 10 | import pers.jay.wanandroid.mvp.contract.CollectionContract; 11 | import pers.jay.wanandroid.mvp.model.CollectionModel; 12 | 13 | @Module 14 | public abstract class CollectionModule { 15 | 16 | @Binds 17 | abstract CollectionContract.Model bindCollectionModel(CollectionModel model); 18 | 19 | @Provides 20 | static WanAndroidService provideWanAndroidService(IRepositoryManager repositoryManager) { 21 | return NetWorkManager.getInstance().getWanAndroidService(repositoryManager); 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/ContainerModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.integration.IRepositoryManager; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | import pers.jay.wanandroid.api.WanAndroidService; 9 | import pers.jay.wanandroid.common.AppConfig; 10 | import pers.jay.wanandroid.common.CookiesManager; 11 | import pers.jay.wanandroid.http.NetWorkManager; 12 | import pers.jay.wanandroid.mvp.contract.ContainerContract; 13 | import pers.jay.wanandroid.mvp.model.ContainerModel; 14 | 15 | @Module 16 | public abstract class ContainerModule { 17 | 18 | @Binds 19 | abstract ContainerContract.Model bindContainerModel(ContainerModel model); 20 | 21 | @Provides 22 | static AppConfig provideAppConfig() { 23 | return AppConfig.getInstance(); 24 | } 25 | 26 | @Provides 27 | static CookiesManager provideCookiesManager() { 28 | return CookiesManager.getInstance(); 29 | } 30 | 31 | @Provides 32 | static WanAndroidService provideWanAndroidService(IRepositoryManager repositoryManager) { 33 | return NetWorkManager.getInstance().getWanAndroidService(repositoryManager); 34 | } 35 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/HomeModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.integration.IRepositoryManager; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | 9 | import pers.jay.wanandroid.api.WanAndroidService; 10 | import pers.jay.wanandroid.http.NetWorkManager; 11 | import pers.jay.wanandroid.mvp.contract.HomeContract; 12 | import pers.jay.wanandroid.mvp.model.HomeModel; 13 | 14 | 15 | @Module 16 | public abstract class HomeModule { 17 | 18 | @Binds 19 | abstract HomeContract.Model bindHomeModel(HomeModel model); 20 | 21 | @Provides 22 | static WanAndroidService provideService(IRepositoryManager repositoryManager) { 23 | return NetWorkManager.getInstance().getWanAndroidService(repositoryManager); 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/LoginModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.LoginContract; 7 | import pers.jay.wanandroid.mvp.model.LoginModel; 8 | 9 | /** 10 | * ================================================ 11 | * Description: 12 | *

13 | * Created by MVPArmsTemplate on 07/12/2019 15:38 14 | * Contact me 15 | * Follow me 16 | * Star me 17 | * See me 18 | * 模版请保持更新 19 | * ================================================ 20 | */ 21 | @Module 22 | public abstract class LoginModule { 23 | 24 | @Binds 25 | abstract LoginContract.Model bindLoginModel(LoginModel model); 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/MainModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.MainContract; 7 | import pers.jay.wanandroid.mvp.model.MainModel; 8 | 9 | /** 10 | * ================================================ 11 | * Description: 12 | *

13 | * Created by MVPArmsTemplate on 07/12/2019 15:19 14 | * Contact me 15 | * Follow me 16 | * Star me 17 | * See me 18 | * 模版请保持更新 19 | * ================================================ 20 | */ 21 | @Module 22 | public abstract class MainModule { 23 | 24 | @Binds 25 | abstract MainContract.Model bindMainModel(MainModel model); 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/MyCoinModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.integration.IRepositoryManager; 4 | import com.jess.arms.integration.RepositoryManager; 5 | 6 | import dagger.Binds; 7 | import dagger.Module; 8 | import dagger.Provides; 9 | 10 | import pers.jay.wanandroid.api.WanAndroidService; 11 | import pers.jay.wanandroid.http.NetWorkManager; 12 | import pers.jay.wanandroid.mvp.contract.MyCoinContract; 13 | import pers.jay.wanandroid.mvp.model.MyCoinModel; 14 | 15 | @Module 16 | public abstract class MyCoinModule { 17 | 18 | @Binds 19 | abstract MyCoinContract.Model bindMyCoinModel(MyCoinModel model); 20 | 21 | @Provides 22 | static WanAndroidService provideWanAndroidService(IRepositoryManager repositoryManager) { 23 | return NetWorkManager.getInstance().getWanAndroidService(repositoryManager); 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/MySharesModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.di.scope.FragmentScope; 4 | import com.jess.arms.integration.IRepositoryManager; 5 | 6 | import dagger.Binds; 7 | import dagger.Module; 8 | import dagger.Provides; 9 | 10 | import pers.jay.wanandroid.api.WanAndroidService; 11 | import pers.jay.wanandroid.http.NetWorkManager; 12 | import pers.jay.wanandroid.mvp.contract.MySharesContract; 13 | import pers.jay.wanandroid.mvp.model.MySharesModel; 14 | 15 | @Module 16 | public abstract class MySharesModule { 17 | 18 | @Binds 19 | abstract MySharesContract.Model bindMySharesModel(MySharesModel model); 20 | 21 | @Provides 22 | static WanAndroidService provideService(IRepositoryManager mRepositoryManager) { 23 | return NetWorkManager.getInstance().getWanAndroidService(mRepositoryManager); 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/NavModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.NavContract; 7 | import pers.jay.wanandroid.mvp.model.NavModel; 8 | 9 | /** 10 | * ================================================ 11 | * Description: 12 | *

13 | * Created by MVPArmsTemplate on 10/18/2019 11:25 14 | * Contact me 15 | * Follow me 16 | * Star me 17 | * See me 18 | * 模版请保持更新 19 | * ================================================ 20 | */ 21 | @Module 22 | public abstract class NavModule { 23 | 24 | @Binds 25 | abstract NavContract.Model bindNavModel(NavModel model); 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/ProjectModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.ProjectContract; 7 | import pers.jay.wanandroid.mvp.model.ProjectModel; 8 | 9 | /** 10 | * ================================================ 11 | * Description: 12 | *

13 | * Created by MVPArmsTemplate on 10/18/2019 11:25 14 | * Contact me 15 | * Follow me 16 | * Star me 17 | * See me 18 | * 模版请保持更新 19 | * ================================================ 20 | */ 21 | @Module 22 | public abstract class ProjectModule { 23 | 24 | @Binds 25 | abstract ProjectContract.Model bindProjectModel(ProjectModel model); 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/QAModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.di.scope.FragmentScope; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | 9 | import pers.jay.wanandroid.mvp.contract.QAContract; 10 | import pers.jay.wanandroid.mvp.model.QAModel; 11 | 12 | @Module 13 | public abstract class QAModule { 14 | 15 | @Binds 16 | abstract QAContract.Model bindQAModel(QAModel model); 17 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/RankModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.RankContract; 7 | import pers.jay.wanandroid.mvp.model.RankModel; 8 | 9 | /** 10 | * ================================================ 11 | * Description: 12 | *

13 | * Created by MVPArmsTemplate on 12/13/2019 17:02 14 | * Contact me 15 | * Follow me 16 | * Star me 17 | * See me 18 | * 模版请保持更新 19 | * ================================================ 20 | */ 21 | @Module 22 | public abstract class RankModule { 23 | 24 | @Binds 25 | abstract RankContract.Model bindRankModel(RankModel model); 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/SearchModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | import pers.jay.wanandroid.mvp.contract.SearchContract; 6 | import pers.jay.wanandroid.mvp.model.SearchModel; 7 | 8 | @Module 9 | public abstract class SearchModule { 10 | 11 | @Binds 12 | abstract SearchContract.Model bindSearchModel(SearchModel model); 13 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/SearchResultModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.SearchResultContract; 7 | import pers.jay.wanandroid.mvp.model.SearchResultModel; 8 | 9 | /** 10 | * ================================================ 11 | * Description: 12 | *

13 | * Created by MVPArmsTemplate on 12/09/2019 16:34 14 | * Contact me 15 | * Follow me 16 | * Star me 17 | * See me 18 | * 模版请保持更新 19 | * ================================================ 20 | */ 21 | @Module 22 | public abstract class SearchResultModule { 23 | 24 | @Binds 25 | abstract SearchResultContract.Model bindSearchResultModel(SearchResultModel model); 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/SettingsModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.SettingsContract; 7 | import pers.jay.wanandroid.mvp.model.SettingsModel; 8 | 9 | @Module 10 | public abstract class SettingsModule { 11 | 12 | @Binds 13 | abstract SettingsContract.Model bindSettingsModel(SettingsModel model); 14 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/ShareModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.di.scope.FragmentScope; 4 | import com.jess.arms.integration.IRepositoryManager; 5 | 6 | import dagger.Binds; 7 | import dagger.Module; 8 | import dagger.Provides; 9 | 10 | import pers.jay.wanandroid.api.WanAndroidService; 11 | import pers.jay.wanandroid.http.NetWorkManager; 12 | import pers.jay.wanandroid.mvp.contract.ShareContract; 13 | import pers.jay.wanandroid.mvp.model.ShareModel; 14 | 15 | @Module 16 | public abstract class ShareModule { 17 | 18 | @Binds 19 | abstract ShareContract.Model bindShareModel(ShareModel model); 20 | 21 | @Provides 22 | static WanAndroidService provideService(IRepositoryManager repositoryManager) { 23 | return NetWorkManager.getInstance().getWanAndroidService(repositoryManager); 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/SignupModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.di.scope.FragmentScope; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | 9 | import pers.jay.wanandroid.mvp.contract.SignupContract; 10 | import pers.jay.wanandroid.mvp.model.SignupModel; 11 | 12 | @Module 13 | public abstract class SignupModule { 14 | 15 | @Binds 16 | abstract SignupContract.Model bindSignupModel(SignupModel model); 17 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/SquareModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.integration.IRepositoryManager; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | 8 | import dagger.Provides; 9 | import pers.jay.wanandroid.api.WanAndroidService; 10 | import pers.jay.wanandroid.http.NetWorkManager; 11 | import pers.jay.wanandroid.mvp.contract.SquareContract; 12 | import pers.jay.wanandroid.mvp.model.SquareModel; 13 | 14 | @Module 15 | public abstract class SquareModule { 16 | 17 | @Binds 18 | abstract SquareContract.Model bindsquareModel(SquareModel model); 19 | 20 | @Provides 21 | static WanAndroidService provideService(IRepositoryManager repositoryManager) { 22 | return NetWorkManager.getInstance().getWanAndroidService(repositoryManager); 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/TabModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.TabContract; 7 | import pers.jay.wanandroid.mvp.model.TabModel; 8 | 9 | /** 10 | * ================================================ 11 | * Description: 12 | *

13 | * Created by MVPArmsTemplate on 11/18/2019 10:05 14 | * Contact me 15 | * Follow me 16 | * Star me 17 | * See me 18 | * 模版请保持更新 19 | * ================================================ 20 | */ 21 | @Module 22 | public abstract class TabModule { 23 | 24 | @Binds 25 | abstract TabContract.Model bindTreeTabModel(TabModel model); 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/TodoEditModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.integration.IRepositoryManager; 4 | 5 | import dagger.Binds; 6 | import dagger.Module; 7 | import dagger.Provides; 8 | import pers.jay.wanandroid.api.WanAndroidService; 9 | import pers.jay.wanandroid.http.NetWorkManager; 10 | import pers.jay.wanandroid.mvp.contract.TodoEditContract; 11 | import pers.jay.wanandroid.mvp.model.TodoEditModel; 12 | 13 | @Module 14 | public abstract class TodoEditModule { 15 | 16 | @Binds 17 | abstract TodoEditContract.Model bindTodoEditModel(TodoEditModel model); 18 | 19 | @Provides 20 | static WanAndroidService provideService(IRepositoryManager repositoryManager) { 21 | return NetWorkManager.getInstance().getWanAndroidService(repositoryManager); 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/TodoModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | 4 | import com.jess.arms.integration.IRepositoryManager; 5 | 6 | import dagger.Binds; 7 | import dagger.Module; 8 | 9 | import dagger.Provides; 10 | import pers.jay.wanandroid.api.WanAndroidService; 11 | import pers.jay.wanandroid.http.NetWorkManager; 12 | import pers.jay.wanandroid.mvp.contract.TodoContract; 13 | import pers.jay.wanandroid.mvp.model.TodoModel; 14 | 15 | @Module 16 | public abstract class TodoModule { 17 | 18 | @Binds 19 | abstract TodoContract.Model bindTodoModel(TodoModel model); 20 | 21 | @Provides 22 | static WanAndroidService provideService(IRepositoryManager repositoryManager) { 23 | return NetWorkManager.getInstance().getWanAndroidService(repositoryManager); 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/TreeModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.TreeContract; 7 | import pers.jay.wanandroid.mvp.model.KnowledgeModel; 8 | 9 | @Module 10 | public abstract class TreeModule { 11 | 12 | @Binds 13 | abstract TreeContract.Model bindTreeModel(KnowledgeModel model); 14 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/UserModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.UserContract; 7 | import pers.jay.wanandroid.mvp.model.UserModel; 8 | 9 | /** 10 | * ================================================ 11 | * Description: 12 | *

13 | * Created by MVPArmsTemplate on 01/28/2020 18:33 14 | * Contact me 15 | * Follow me 16 | * Star me 17 | * See me 18 | * 模版请保持更新 19 | * ================================================ 20 | */ 21 | @Module 22 | public abstract class UserModule { 23 | 24 | @Binds 25 | abstract UserContract.Model bindUserModel(UserModel model); 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/WebModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | 6 | import pers.jay.wanandroid.mvp.contract.WebContract; 7 | import pers.jay.wanandroid.mvp.model.WebModel; 8 | 9 | /** 10 | * ================================================ 11 | * Description: 12 | *

13 | * Created by MVPArmsTemplate on 08/19/2019 15:29 14 | * Contact me 15 | * Follow me 16 | * Star me 17 | * See me 18 | * 模版请保持更新 19 | * ================================================ 20 | */ 21 | @Module 22 | public abstract class WebModule { 23 | 24 | @Binds 25 | abstract WebContract.Model bindWebModel(WebModel model); 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/WeixinModule.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import com.jess.arms.integration.IRepositoryManager; 4 | 5 | import javax.inject.Singleton; 6 | 7 | import dagger.Binds; 8 | import dagger.Module; 9 | import dagger.Provides; 10 | import pers.jay.wanandroid.api.WanAndroidService; 11 | import pers.jay.wanandroid.http.NetWorkManager; 12 | import pers.jay.wanandroid.mvp.contract.WeixinContract; 13 | import pers.jay.wanandroid.mvp.model.WeixinModel; 14 | 15 | @Module 16 | public abstract class WeixinModule { 17 | 18 | @Binds 19 | abstract WeixinContract.Model bindWeixinModel(WeixinModel model); 20 | 21 | @Singleton 22 | @Provides 23 | static WanAndroidService provideService(IRepositoryManager repositoryManager) { 24 | return NetWorkManager.getInstance().getWanAndroidService(repositoryManager); 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/di/module/X5Module.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.di.module; 2 | 3 | import dagger.Binds; 4 | import dagger.Module; 5 | import pers.jay.wanandroid.mvp.contract.X5Contract; 6 | import pers.jay.wanandroid.mvp.model.X5Model; 7 | 8 | @Module 9 | public abstract class X5Module { 10 | 11 | @Binds 12 | abstract X5Contract.Model bindX5Model(X5Model model); 13 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/event/Event.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.event; 2 | 3 | 4 | public class Event { 5 | 6 | public Event(int eventCode, T data) { 7 | this.eventCode = eventCode; 8 | this.data = data; 9 | } 10 | 11 | private int eventCode; 12 | 13 | private T data; 14 | 15 | public int getEventCode() { 16 | return eventCode; 17 | } 18 | 19 | public void setEventCode(int eventCode) { 20 | this.eventCode = eventCode; 21 | } 22 | 23 | public T getData() { 24 | return data; 25 | } 26 | 27 | public void setData(T data) { 28 | this.data = data; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/http/ApiException.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.http; 2 | 3 | public class ApiException extends RuntimeException{ 4 | 5 | private int errorCode; 6 | 7 | public ApiException(String message, int errorCode) { 8 | super(message); 9 | this.errorCode = errorCode; 10 | } 11 | 12 | public int getErrorCode() { 13 | return errorCode; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/model/BingDailyImage.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.model; 2 | 3 | public class BingDailyImage { 4 | 5 | private String url; 6 | 7 | public String getUrl() { 8 | return url == null ? "" : url; 9 | } 10 | 11 | public void setUrl(String url) { 12 | this.url = url; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/model/HotKey.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.model; 2 | 3 | public class HotKey { 4 | 5 | /** 6 | * id : 6 7 | * link : 8 | * name : 面试 9 | * order : 1 10 | * visible : 1 11 | */ 12 | 13 | private int id; 14 | private String link; 15 | private String name; 16 | private int order; 17 | private int visible; 18 | 19 | public int getId() { return id;} 20 | 21 | public void setId(int id) { this.id = id;} 22 | 23 | public String getLink() { return link;} 24 | 25 | public void setLink(String link) { this.link = link;} 26 | 27 | public String getName() { return name;} 28 | 29 | public void setName(String name) { this.name = name;} 30 | 31 | public int getOrder() { return order;} 32 | 33 | public void setOrder(int order) { this.order = order;} 34 | 35 | public int getVisible() { return visible;} 36 | 37 | public void setVisible(int visible) { this.visible = visible;} 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/model/Tag.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.model; 2 | 3 | import android.os.Parcel; 4 | import android.os.Parcelable; 5 | 6 | public class Tag implements Parcelable { 7 | 8 | /** 9 | * name : 项目 10 | * url : /project/list/1?cid=314 11 | */ 12 | 13 | private String name; 14 | private String url; 15 | 16 | public String getName() { return name;} 17 | 18 | public void setName(String name) { this.name = name;} 19 | 20 | public String getUrl() { return url;} 21 | 22 | public void setUrl(String url) { this.url = url;} 23 | 24 | @Override 25 | public int describeContents() { return 0; } 26 | 27 | @Override 28 | public void writeToParcel(Parcel dest, int flags) { 29 | dest.writeString(this.name); 30 | dest.writeString(this.url); 31 | } 32 | 33 | public Tag() {} 34 | 35 | protected Tag(Parcel in) { 36 | this.name = in.readString(); 37 | this.url = in.readString(); 38 | } 39 | 40 | public static final Creator CREATOR = new Creator() { 41 | @Override 42 | public Tag createFromParcel(Parcel source) {return new Tag(source);} 43 | 44 | @Override 45 | public Tag[] newArray(int size) {return new Tag[size];} 46 | }; 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/model/TodoSection.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.model; 2 | 3 | import com.chad.library.adapter.base.entity.SectionEntity; 4 | 5 | public class TodoSection extends SectionEntity { 6 | 7 | public TodoSection(boolean isHeader, String header) { 8 | super(isHeader, header); 9 | } 10 | 11 | public TodoSection(Todo todo) { 12 | super(todo); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/model/TodoType.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.model; 2 | 3 | import android.os.Parcel; 4 | import android.os.Parcelable; 5 | 6 | public enum TodoType implements Parcelable { 7 | 8 | WORK("1"), LIFE("2"), ENTERTAINMAINT("3"), UNKNOWN("999"); 9 | 10 | private String type; 11 | 12 | TodoType(String type) { 13 | this.type = type; 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | return type; 19 | } 20 | 21 | public static final Creator CREATOR = new Creator() { 22 | @Override 23 | public TodoType createFromParcel(Parcel in) { 24 | return TodoType.values()[in.readInt()]; 25 | } 26 | 27 | @Override 28 | public TodoType[] newArray(int size) { 29 | return new TodoType[size]; 30 | } 31 | }; 32 | 33 | public static TodoType parse(int type) { 34 | switch (type) { 35 | case 1: 36 | return WORK; 37 | case 2: 38 | return LIFE; 39 | case 3: 40 | return ENTERTAINMAINT; 41 | default: 42 | return UNKNOWN; 43 | 44 | } 45 | } 46 | 47 | @Override 48 | public int describeContents() { 49 | return 0; 50 | } 51 | 52 | @Override 53 | public void writeToParcel(Parcel dest, int flags) {dest.writeString(type);} 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/model/TodoWrapper.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.model; 2 | 3 | import com.chad.library.adapter.base.entity.MultiItemEntity; 4 | 5 | public class TodoWrapper implements MultiItemEntity { 6 | 7 | private long date; 8 | private String dateStr; 9 | private Todo todo; 10 | 11 | public long getDate() { 12 | return date; 13 | } 14 | 15 | public void setDate(long date) { 16 | this.date = date; 17 | } 18 | 19 | public String getDateStr() { 20 | return dateStr; 21 | } 22 | 23 | public void setDateStr(String dateStr) { 24 | this.dateStr = dateStr; 25 | } 26 | 27 | public Todo getTodo() { 28 | return todo; 29 | } 30 | 31 | public void setTodo(Todo todo) { 32 | this.todo = todo; 33 | } 34 | 35 | @Override 36 | public int getItemType() { 37 | return 2; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/model/enums/TodoType.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.model.enums; 2 | 3 | public enum TodoType { 4 | 5 | 6 | 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/CollectionContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.common.ICollectView; 8 | import pers.jay.wanandroid.model.Article; 9 | import pers.jay.wanandroid.model.ArticleInfo; 10 | import pers.jay.wanandroid.result.WanAndroidResponse; 11 | 12 | public interface CollectionContract { 13 | 14 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 15 | interface View extends IView, ICollectView { 16 | 17 | void showData(ArticleInfo data); 18 | 19 | void updateStatus(Article article, int position); 20 | } 21 | 22 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 23 | interface Model extends IModel { 24 | 25 | Observable> getCollection(int page); 26 | 27 | Observable unCollect(int id, int originId); 28 | 29 | Observable collect(int id, int originId); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/ContainerContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IModel; 4 | import com.jess.arms.mvp.IView; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.model.Coin; 8 | import pers.jay.wanandroid.result.WanAndroidResponse; 9 | 10 | public interface ContainerContract { 11 | 12 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 13 | interface View extends IView { 14 | 15 | void showCoin(Coin data); 16 | 17 | void showLogoutSuccess(); 18 | 19 | void showPoem(String content); 20 | } 21 | 22 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 23 | interface Model extends IModel { 24 | 25 | Observable> personalCoin(); 26 | 27 | Observable logout(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/KnowledgeContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.model.Coin; 8 | import pers.jay.wanandroid.result.WanAndroidResponse; 9 | 10 | public interface KnowledgeContract { 11 | 12 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 13 | interface View extends IView { 14 | 15 | void showCoin(Coin data); 16 | } 17 | 18 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 19 | interface Model extends IModel { 20 | 21 | Observable> personalCoin(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/LoginContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.model.User; 8 | import pers.jay.wanandroid.result.WanAndroidResponse; 9 | 10 | public interface LoginContract { 11 | 12 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 13 | interface View extends IView { 14 | 15 | void loginSuccess(); 16 | } 17 | 18 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 19 | interface Model extends IModel { 20 | 21 | Observable> login(String userName, String password); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/MainContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | /** 7 | * ================================================ 8 | * Description: 9 | *

10 | * Created by MVPArmsTemplate on 07/12/2019 15:19 11 | * Contact me 12 | * Follow me 13 | * Star me 14 | * See me 15 | * 模版请保持更新 16 | * ================================================ 17 | */ 18 | public interface MainContract { 19 | 20 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 21 | interface View extends IView { 22 | 23 | } 24 | 25 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 26 | interface Model extends IModel { 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/MySharesContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import java.util.function.DoubleUnaryOperator; 7 | 8 | import io.reactivex.Observable; 9 | import pers.jay.wanandroid.common.ICollectView; 10 | import pers.jay.wanandroid.model.ArticleInfo; 11 | import pers.jay.wanandroid.model.ShareUserArticles; 12 | import pers.jay.wanandroid.result.WanAndroidResponse; 13 | 14 | public interface MySharesContract { 15 | 16 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 17 | interface View extends ICollectView { 18 | 19 | void showData(ArticleInfo articleInfo); 20 | 21 | void deleteSuccess(int position); 22 | } 23 | 24 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 25 | interface Model extends IModel { 26 | 27 | Observable> getMyShares(int page); 28 | 29 | Observable deleteShare(int id); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/NavContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import java.util.List; 7 | 8 | import io.reactivex.Observable; 9 | import pers.jay.wanandroid.model.Navi; 10 | import pers.jay.wanandroid.result.WanAndroidResponse; 11 | 12 | public interface NavContract { 13 | 14 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 15 | interface View extends IView { 16 | 17 | void showNaviData(List data); 18 | } 19 | 20 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 21 | interface Model extends IModel { 22 | 23 | Observable>> getNavData(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/ProjectContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import java.util.List; 7 | 8 | import io.reactivex.Observable; 9 | import pers.jay.wanandroid.model.Tab; 10 | import pers.jay.wanandroid.result.WanAndroidResponse; 11 | 12 | public interface ProjectContract { 13 | 14 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 15 | interface View extends IView { 16 | 17 | void showData(List data); 18 | } 19 | 20 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 21 | interface Model extends IModel { 22 | 23 | Observable>> getProjectTab(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/QAContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.common.ICollectView; 8 | import pers.jay.wanandroid.model.ArticleInfo; 9 | import pers.jay.wanandroid.result.WanAndroidResponse; 10 | 11 | public interface QAContract { 12 | 13 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 14 | interface View extends ICollectView { 15 | 16 | void showData(ArticleInfo info); 17 | } 18 | 19 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 20 | interface Model extends IModel { 21 | 22 | Observable> getQAList(int page); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/RankContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.model.Coin; 8 | import pers.jay.wanandroid.model.PageInfo; 9 | import pers.jay.wanandroid.result.WanAndroidResponse; 10 | 11 | public interface RankContract { 12 | 13 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 14 | interface View extends IView { 15 | 16 | void showData(PageInfo data); 17 | 18 | void showCoin(Coin data); 19 | } 20 | 21 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 22 | interface Model extends IModel { 23 | 24 | Observable>> getRank(int page); 25 | 26 | Observable> personalCoin(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/SearchContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import java.util.List; 7 | 8 | import io.reactivex.Observable; 9 | import pers.jay.wanandroid.model.HotKey; 10 | import pers.jay.wanandroid.result.WanAndroidResponse; 11 | 12 | public interface SearchContract { 13 | 14 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 15 | interface View extends IView { 16 | 17 | void showHotKeys(List data); 18 | 19 | void showEmpty(); 20 | } 21 | 22 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 23 | interface Model extends IModel { 24 | 25 | Observable>> getHotKeys(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/SearchResultContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.common.ICollectView; 8 | import pers.jay.wanandroid.model.Article; 9 | import pers.jay.wanandroid.model.ArticleInfo; 10 | import pers.jay.wanandroid.result.WanAndroidResponse; 11 | 12 | public interface SearchResultContract { 13 | 14 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 15 | interface View extends ICollectView { 16 | 17 | void showEmpty(); 18 | 19 | void showData(ArticleInfo data, boolean refresh); 20 | 21 | void updateCollectStatus(boolean collect, Article article, int position); 22 | } 23 | 24 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 25 | interface Model extends IModel { 26 | 27 | Observable> search(int page, String key); 28 | 29 | Observable collect(int id); 30 | 31 | Observable unCollect(int id); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/SettingsContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | public interface SettingsContract { 7 | 8 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 9 | interface View extends IView { 10 | 11 | } 12 | 13 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 14 | interface Model extends IModel { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/ShareContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.result.WanAndroidResponse; 8 | 9 | public interface ShareContract { 10 | 11 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 12 | interface View extends IView { 13 | 14 | void success(); 15 | 16 | void parseOut(String title); 17 | } 18 | 19 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 20 | interface Model extends IModel { 21 | 22 | Observable share(String title, String link); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/SignupContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import io.reactivex.ObservableSource; 8 | import pers.jay.wanandroid.model.User; 9 | import pers.jay.wanandroid.result.WanAndroidResponse; 10 | 11 | public interface SignupContract { 12 | 13 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 14 | interface View extends IView { 15 | 16 | void showSignUpSuccess(User user); 17 | } 18 | 19 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 20 | interface Model extends IModel { 21 | 22 | Observable> signUp(String username, String password, String repassword); 23 | 24 | Observable> login(String userName, String password); 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/SplashContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | /** 7 | * ================================================ 8 | * Description: 9 | *

10 | * Created by MVPArmsTemplate on 07/22/2019 11:33 11 | * Contact me 12 | * Follow me 13 | * Star me 14 | * See me 15 | * 模版请保持更新 16 | * ================================================ 17 | */ 18 | public interface SplashContract { 19 | 20 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 21 | interface View extends IView { 22 | 23 | } 24 | 25 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 26 | interface Model extends IModel { 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/SquareContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.common.ICollectView; 8 | import pers.jay.wanandroid.model.Article; 9 | import pers.jay.wanandroid.model.ArticleInfo; 10 | import pers.jay.wanandroid.result.WanAndroidResponse; 11 | 12 | public interface SquareContract { 13 | 14 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 15 | interface View extends ICollectView { 16 | 17 | void showData(ArticleInfo articleInfo); 18 | } 19 | 20 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 21 | interface Model extends IModel { 22 | 23 | Observable> getUserArticles(int page); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/TabContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.common.ICollectView; 8 | import pers.jay.wanandroid.model.Article; 9 | import pers.jay.wanandroid.model.ArticleInfo; 10 | import pers.jay.wanandroid.result.WanAndroidResponse; 11 | 12 | public interface TabContract { 13 | 14 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 15 | interface View extends ICollectView { 16 | 17 | void showData(ArticleInfo data); 18 | 19 | void updateCollectStatus(boolean isCollect, Article item, int position); 20 | } 21 | 22 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 23 | interface Model extends IModel { 24 | 25 | Observable> getKnowledgeArticles(int childId, int page); 26 | 27 | Observable collect(int id); 28 | 29 | Observable unCollect(int id); 30 | 31 | Observable> getWxArticles(int cid, int page); 32 | 33 | Observable> getProjectArticles(int page, int childId); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/TodoContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import java.util.LinkedHashMap; 7 | import java.util.List; 8 | 9 | import io.reactivex.Observable; 10 | import pers.jay.wanandroid.model.PageInfo; 11 | import pers.jay.wanandroid.model.Todo; 12 | import pers.jay.wanandroid.model.TodoSection; 13 | import pers.jay.wanandroid.result.WanAndroidResponse; 14 | 15 | /** 16 | * @author ZJC 17 | */ 18 | public interface TodoContract { 19 | 20 | interface View extends IView { 21 | 22 | void showData(PageInfo info, List todoSections, boolean switchType); 23 | 24 | void setTodoType(List todoType); 25 | 26 | void deleteSuccess(Todo todo, int position); 27 | 28 | void updateSuccess(Todo todo, int position); 29 | } 30 | 31 | interface Model extends IModel { 32 | 33 | Observable>> getTodoList(int page, LinkedHashMap map); 34 | 35 | Observable updateTodo(int id, LinkedHashMap map); 36 | 37 | Observable deleteTodo(int id); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/TodoEditContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import java.util.LinkedHashMap; 7 | 8 | import io.reactivex.Observable; 9 | import pers.jay.wanandroid.result.WanAndroidResponse; 10 | 11 | public interface TodoEditContract { 12 | 13 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 14 | interface View extends IView { 15 | 16 | void commitSuccess(); 17 | } 18 | 19 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 20 | interface Model extends IModel { 21 | 22 | Observable addTodo(LinkedHashMap map); 23 | 24 | Observable updateTodo(int id, LinkedHashMap map); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/TreeContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import java.util.List; 7 | 8 | import io.reactivex.Observable; 9 | import pers.jay.wanandroid.model.Tab; 10 | import pers.jay.wanandroid.result.WanAndroidResponse; 11 | 12 | public interface TreeContract { 13 | 14 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 15 | interface View extends IView { 16 | 17 | void showTreeData(List tabs); 18 | } 19 | 20 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 21 | interface Model extends IModel { 22 | 23 | Observable>> getTreeData(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/UserContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.common.ICollectView; 8 | import pers.jay.wanandroid.model.ArticleInfo; 9 | import pers.jay.wanandroid.model.Coin; 10 | import pers.jay.wanandroid.model.ShareUserArticles; 11 | import pers.jay.wanandroid.result.WanAndroidResponse; 12 | public interface UserContract { 13 | 14 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 15 | interface View extends ICollectView { 16 | 17 | void showArticles(ArticleInfo info); 18 | 19 | void showCoin(Coin coin); 20 | } 21 | 22 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 23 | interface Model extends IModel { 24 | 25 | Observable> getUserArticles(long userId, int page); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/WebContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.model.Article; 8 | import pers.jay.wanandroid.result.WanAndroidResponse; 9 | 10 | /** 11 | * ================================================ 12 | * Description: 13 | *

14 | * Created by MVPArmsTemplate on 08/19/2019 15:29 15 | * Contact me 16 | * Follow me 17 | * Star me 18 | * See me 19 | * 模版请保持更新 20 | * ================================================ 21 | */ 22 | public interface WebContract { 23 | 24 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 25 | interface View extends IView { 26 | 27 | void updateCollectStatus(boolean collect, Article article); 28 | } 29 | 30 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 31 | interface Model extends IModel { 32 | 33 | Observable collect(int id); 34 | 35 | Observable unCollect(int id); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/WeixinContract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import java.util.List; 7 | 8 | import io.reactivex.Observable; 9 | import pers.jay.wanandroid.model.Tab; 10 | import pers.jay.wanandroid.result.WanAndroidResponse; 11 | 12 | /** 13 | * ================================================ 14 | * Description: 15 | *

16 | * Created by MVPArmsTemplate on 10/18/2019 11:24 17 | * Contact me 18 | * Follow me 19 | * Star me 20 | * See me 21 | * 模版请保持更新 22 | * ================================================ 23 | */ 24 | public interface WeixinContract { 25 | 26 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 27 | interface View extends IView { 28 | 29 | void showData(List data); 30 | } 31 | 32 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 33 | interface Model extends IModel { 34 | 35 | Observable>> getWxTabs(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/contract/X5Contract.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.contract; 2 | 3 | import com.jess.arms.mvp.IView; 4 | import com.jess.arms.mvp.IModel; 5 | 6 | import io.reactivex.Observable; 7 | import pers.jay.wanandroid.model.Article; 8 | import pers.jay.wanandroid.result.WanAndroidResponse; 9 | 10 | public interface X5Contract { 11 | 12 | //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息 13 | interface View extends IView { 14 | 15 | void updateCollectStatus(boolean b, Article article); 16 | } 17 | 18 | //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 19 | interface Model extends IModel { 20 | 21 | Observable collect(int id); 22 | 23 | Observable unCollect(int id); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/model/MainModel.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | 7 | import com.jess.arms.integration.IRepositoryManager; 8 | import com.jess.arms.mvp.BaseModel; 9 | 10 | import com.jess.arms.di.scope.ActivityScope; 11 | 12 | import javax.inject.Inject; 13 | 14 | import pers.jay.wanandroid.mvp.contract.MainContract; 15 | 16 | /** 17 | * ================================================ 18 | * Description: 19 | *

20 | * Created by MVPArmsTemplate on 07/12/2019 15:19 21 | * Contact me 22 | * Follow me 23 | * Star me 24 | * See me 25 | * 模版请保持更新 26 | * ================================================ 27 | */ 28 | @ActivityScope 29 | public class MainModel extends BaseModel implements MainContract.Model { 30 | 31 | @Inject 32 | Gson mGson; 33 | @Inject 34 | Application mApplication; 35 | 36 | @Inject 37 | public MainModel(IRepositoryManager repositoryManager) { 38 | super(repositoryManager); 39 | } 40 | 41 | @Override 42 | public void onDestroy() { 43 | super.onDestroy(); 44 | this.mGson = null; 45 | this.mApplication = null; 46 | } 47 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/model/NavModel.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | 7 | import com.jess.arms.integration.IRepositoryManager; 8 | import com.jess.arms.mvp.BaseModel; 9 | 10 | import com.jess.arms.di.scope.FragmentScope; 11 | 12 | import java.nio.file.WatchService; 13 | import java.util.List; 14 | 15 | import javax.inject.Inject; 16 | 17 | import io.reactivex.Observable; 18 | import pers.jay.wanandroid.api.WanAndroidService; 19 | import pers.jay.wanandroid.http.NetWorkManager; 20 | import pers.jay.wanandroid.model.Navi; 21 | import pers.jay.wanandroid.mvp.contract.NavContract; 22 | import pers.jay.wanandroid.result.WanAndroidResponse; 23 | 24 | @FragmentScope 25 | public class NavModel extends BaseModel implements NavContract.Model { 26 | 27 | @Inject 28 | Gson mGson; 29 | @Inject 30 | Application mApplication; 31 | 32 | @Inject 33 | public NavModel(IRepositoryManager repositoryManager) { 34 | super(repositoryManager); 35 | } 36 | 37 | @Override 38 | public void onDestroy() { 39 | super.onDestroy(); 40 | this.mGson = null; 41 | this.mApplication = null; 42 | } 43 | 44 | @Override 45 | public Observable>> getNavData() { 46 | return mRepositoryManager.obtainRetrofitService(WanAndroidService.class).naviData(); 47 | } 48 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/model/QAModel.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | 7 | import com.jess.arms.integration.IRepositoryManager; 8 | import com.jess.arms.mvp.BaseModel; 9 | 10 | import com.jess.arms.di.scope.FragmentScope; 11 | 12 | import javax.inject.Inject; 13 | 14 | import io.reactivex.Observable; 15 | import pers.jay.wanandroid.api.WanAndroidService; 16 | import pers.jay.wanandroid.http.NetWorkManager; 17 | import pers.jay.wanandroid.model.ArticleInfo; 18 | import pers.jay.wanandroid.mvp.contract.QAContract; 19 | import pers.jay.wanandroid.result.WanAndroidResponse; 20 | 21 | @FragmentScope 22 | public class QAModel extends BaseModel implements QAContract.Model { 23 | 24 | @Inject 25 | Gson mGson; 26 | @Inject 27 | Application mApplication; 28 | 29 | @Inject 30 | public QAModel(IRepositoryManager repositoryManager) { 31 | super(repositoryManager); 32 | } 33 | 34 | @Override 35 | public void onDestroy() { 36 | super.onDestroy(); 37 | this.mGson = null; 38 | this.mApplication = null; 39 | } 40 | 41 | @Override 42 | public Observable> getQAList(int page) { 43 | return mRepositoryManager.obtainRetrofitService(WanAndroidService.class).qaList(page); 44 | } 45 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/model/SettingsModel.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | 7 | import com.jess.arms.integration.IRepositoryManager; 8 | import com.jess.arms.mvp.BaseModel; 9 | 10 | import com.jess.arms.di.scope.ActivityScope; 11 | 12 | import javax.inject.Inject; 13 | 14 | import pers.jay.wanandroid.mvp.contract.SettingsContract; 15 | 16 | @ActivityScope 17 | public class SettingsModel extends BaseModel implements SettingsContract.Model { 18 | 19 | @Inject 20 | Gson mGson; 21 | @Inject 22 | Application mApplication; 23 | 24 | @Inject 25 | public SettingsModel(IRepositoryManager repositoryManager) { 26 | super(repositoryManager); 27 | } 28 | 29 | @Override 30 | public void onDestroy() { 31 | super.onDestroy(); 32 | this.mGson = null; 33 | this.mApplication = null; 34 | } 35 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/model/ShareModel.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | 7 | import com.jess.arms.integration.IRepositoryManager; 8 | import com.jess.arms.mvp.BaseModel; 9 | 10 | import com.jess.arms.di.scope.FragmentScope; 11 | 12 | import javax.inject.Inject; 13 | 14 | import io.reactivex.Observable; 15 | import pers.jay.wanandroid.api.WanAndroidService; 16 | import pers.jay.wanandroid.mvp.contract.ShareContract; 17 | import pers.jay.wanandroid.result.WanAndroidResponse; 18 | 19 | @FragmentScope 20 | public class ShareModel extends BaseModel implements ShareContract.Model { 21 | 22 | @Inject 23 | Gson mGson; 24 | @Inject 25 | Application mApplication; 26 | @Inject 27 | WanAndroidService wanAndroidService; 28 | 29 | @Inject 30 | public ShareModel(IRepositoryManager repositoryManager) { 31 | super(repositoryManager); 32 | } 33 | 34 | @Override 35 | public void onDestroy() { 36 | super.onDestroy(); 37 | this.mGson = null; 38 | this.mApplication = null; 39 | } 40 | 41 | @Override 42 | public Observable share(String title, String link) { 43 | return wanAndroidService.shareArticle(title, link); 44 | } 45 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/model/SquareModel.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | 7 | import com.jess.arms.integration.IRepositoryManager; 8 | import com.jess.arms.mvp.BaseModel; 9 | 10 | import com.jess.arms.di.scope.FragmentScope; 11 | 12 | import javax.inject.Inject; 13 | 14 | import io.reactivex.Observable; 15 | import pers.jay.wanandroid.api.WanAndroidService; 16 | import pers.jay.wanandroid.model.ArticleInfo; 17 | import pers.jay.wanandroid.mvp.contract.SquareContract; 18 | import pers.jay.wanandroid.result.WanAndroidResponse; 19 | 20 | @FragmentScope 21 | public class SquareModel extends BaseModel implements SquareContract.Model { 22 | 23 | @Inject 24 | Gson mGson; 25 | @Inject 26 | Application mApplication; 27 | @Inject 28 | WanAndroidService wanAndroidService; 29 | 30 | @Inject 31 | public SquareModel(IRepositoryManager repositoryManager) { 32 | super(repositoryManager); 33 | } 34 | 35 | @Override 36 | public void onDestroy() { 37 | super.onDestroy(); 38 | this.mGson = null; 39 | this.mApplication = null; 40 | } 41 | 42 | @Override 43 | public Observable> getUserArticles(int page) { 44 | return wanAndroidService.squareArticles(page); 45 | } 46 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/model/UserModel.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.model; 2 | 3 | import android.app.Application; 4 | 5 | import com.google.gson.Gson; 6 | 7 | import com.jess.arms.integration.IRepositoryManager; 8 | import com.jess.arms.mvp.BaseModel; 9 | 10 | import com.jess.arms.di.scope.FragmentScope; 11 | 12 | import javax.inject.Inject; 13 | 14 | import io.reactivex.Observable; 15 | import pers.jay.wanandroid.api.WanAndroidService; 16 | import pers.jay.wanandroid.http.NetWorkManager; 17 | import pers.jay.wanandroid.model.ShareUserArticles; 18 | import pers.jay.wanandroid.mvp.contract.UserContract; 19 | import pers.jay.wanandroid.result.WanAndroidResponse; 20 | 21 | @FragmentScope 22 | public class UserModel extends BaseModel implements UserContract.Model { 23 | 24 | @Inject 25 | Gson mGson; 26 | @Inject 27 | Application mApplication; 28 | 29 | @Inject 30 | public UserModel(IRepositoryManager repositoryManager) { 31 | super(repositoryManager); 32 | } 33 | 34 | @Override 35 | public void onDestroy() { 36 | super.onDestroy(); 37 | this.mGson = null; 38 | this.mApplication = null; 39 | } 40 | 41 | @Override 42 | public Observable> getUserArticles(long userId, int page) { 43 | return mRepositoryManager.obtainRetrofitService(WanAndroidService.class).shareUserArticles(userId, page); 44 | } 45 | } -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/presenter/SettingsPresenter.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.presenter; 2 | 3 | import android.app.Application; 4 | 5 | import com.jess.arms.integration.AppManager; 6 | import com.jess.arms.di.scope.ActivityScope; 7 | import com.jess.arms.mvp.BasePresenter; 8 | import com.jess.arms.http.imageloader.ImageLoader; 9 | 10 | import me.jessyan.rxerrorhandler.core.RxErrorHandler; 11 | 12 | import javax.inject.Inject; 13 | 14 | import pers.jay.wanandroid.mvp.contract.SettingsContract; 15 | 16 | @ActivityScope 17 | public class SettingsPresenter extends BasePresenter { 18 | 19 | @Inject 20 | RxErrorHandler mErrorHandler; 21 | @Inject 22 | Application mApplication; 23 | @Inject 24 | ImageLoader mImageLoader; 25 | @Inject 26 | AppManager mAppManager; 27 | 28 | @Inject 29 | public SettingsPresenter(SettingsContract.Model model, SettingsContract.View rootView) { 30 | super(model, rootView); 31 | } 32 | 33 | @Override 34 | public void onDestroy() { 35 | super.onDestroy(); 36 | this.mErrorHandler = null; 37 | this.mAppManager = null; 38 | this.mImageLoader = null; 39 | this.mApplication = null; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/presenter/SplashPresenter.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.presenter; 2 | 3 | import android.app.Application; 4 | 5 | import com.jess.arms.integration.AppManager; 6 | import com.jess.arms.di.scope.FragmentScope; 7 | import com.jess.arms.mvp.BasePresenter; 8 | import com.jess.arms.http.imageloader.ImageLoader; 9 | 10 | import me.jessyan.rxerrorhandler.core.RxErrorHandler; 11 | 12 | import javax.inject.Inject; 13 | 14 | import pers.jay.wanandroid.mvp.contract.SplashContract; 15 | 16 | @FragmentScope 17 | public class SplashPresenter extends BasePresenter { 18 | 19 | @Inject 20 | RxErrorHandler mErrorHandler; 21 | @Inject 22 | Application mApplication; 23 | @Inject 24 | ImageLoader mImageLoader; 25 | @Inject 26 | AppManager mAppManager; 27 | 28 | @Inject 29 | public SplashPresenter(SplashContract.Model model, SplashContract.View rootView) { 30 | super(model, rootView); 31 | } 32 | 33 | @Override 34 | public void onDestroy() { 35 | super.onDestroy(); 36 | this.mErrorHandler = null; 37 | this.mAppManager = null; 38 | this.mImageLoader = null; 39 | this.mApplication = null; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/ui/adapter/MyCoinAdapter.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.ui.adapter; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.annotation.Nullable; 5 | 6 | import com.chad.library.adapter.base.BaseQuickAdapter; 7 | import com.chad.library.adapter.base.BaseViewHolder; 8 | 9 | import java.util.List; 10 | 11 | import pers.jay.wanandroid.R; 12 | import pers.jay.wanandroid.model.CoinHistory; 13 | 14 | public class MyCoinAdapter extends BaseQuickAdapter { 15 | 16 | public MyCoinAdapter(int layoutResId, @Nullable List data) { 17 | super(layoutResId, data); 18 | } 19 | 20 | @Override 21 | protected void convert(@NonNull BaseViewHolder helper, CoinHistory item) { 22 | helper.setText(R.id.tvReason, item.getReason()) 23 | .setText(R.id.tvDesc, item.getDesc()) 24 | .setText(R.id.tvCoinCount, String.format("+%s", item.getCoinCount())); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/ui/adapter/SimpleListAdapter.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.ui.adapter; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.annotation.Nullable; 5 | 6 | import com.chad.library.adapter.base.BaseQuickAdapter; 7 | import com.chad.library.adapter.base.BaseViewHolder; 8 | 9 | import java.util.List; 10 | 11 | import pers.jay.wanandroid.R; 12 | 13 | public class SimpleListAdapter extends BaseQuickAdapter { 14 | 15 | public SimpleListAdapter(@Nullable List data) { 16 | super(R.layout.base_popup_item_list, data); 17 | } 18 | 19 | @Override 20 | protected void convert(@NonNull BaseViewHolder helper, String item) { 21 | helper.setText(R.id.tvItem, item); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/ui/adapter/TodoAdapter.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.ui.adapter; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.view.View; 5 | 6 | import com.chad.library.adapter.base.BaseSectionQuickAdapter; 7 | import com.chad.library.adapter.base.BaseViewHolder; 8 | 9 | import java.util.List; 10 | 11 | import pers.jay.wanandroid.R; 12 | import pers.jay.wanandroid.model.Todo; 13 | import pers.jay.wanandroid.model.TodoSection; 14 | import pers.jay.wanandroid.widgets.LabelView; 15 | 16 | public class TodoAdapter extends BaseSectionQuickAdapter { 17 | 18 | public TodoAdapter(int layoutResId, int sectionHeadResId, List data) { 19 | super(layoutResId, sectionHeadResId, data); 20 | } 21 | 22 | @Override 23 | protected void convertHead(BaseViewHolder helper, TodoSection item) { 24 | helper.setText(R.id.tvDate, item.header); 25 | } 26 | 27 | @Override 28 | protected void convert(@NonNull BaseViewHolder helper, TodoSection item) { 29 | Todo todo = item.t; 30 | helper.setText(R.id.tvTitle, todo.getTitle()); 31 | helper.setText(R.id.dvCoin, todo.getContent()); 32 | helper.setText(R.id.tvDate, todo.getDateStr()); 33 | LabelView view = helper.itemView.findViewById(R.id.viewImportant); 34 | view.setVisibility(todo.important() ? View.VISIBLE : View.GONE); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/mvp/ui/adapter/TodoTypeAdapter.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.mvp.ui.adapter; 2 | 3 | import android.support.annotation.NonNull; 4 | import android.support.annotation.Nullable; 5 | 6 | import com.chad.library.adapter.base.BaseQuickAdapter; 7 | import com.chad.library.adapter.base.BaseViewHolder; 8 | 9 | import java.util.List; 10 | 11 | import pers.jay.wanandroid.R; 12 | 13 | public class TodoTypeAdapter extends BaseQuickAdapter { 14 | 15 | public TodoTypeAdapter(int layoutResId, @Nullable List data) { 16 | super(layoutResId, data); 17 | } 18 | 19 | @Override 20 | protected void convert(@NonNull BaseViewHolder helper, String type) { 21 | helper.setText(R.id.tvItem, type); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/result/BaseBean.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.result; 2 | 3 | public abstract class BaseBean { 4 | 5 | private int code; 6 | 7 | private String msg; 8 | 9 | private T data; 10 | 11 | public abstract int getCode(); 12 | 13 | public abstract String getMsg(); 14 | 15 | public abstract T getData(); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/result/BaseWanBean.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.result; 2 | 3 | import pers.jay.wanandroid.common.Const; 4 | 5 | public class BaseWanBean { 6 | 7 | private int errorCode; 8 | private String errorMsg; 9 | 10 | public int getErrorCode() { 11 | return errorCode; 12 | } 13 | 14 | public void setErrorCode(int errorCode) { 15 | this.errorCode = errorCode; 16 | } 17 | 18 | public String getErrorMsg() { 19 | return errorMsg; 20 | } 21 | 22 | public void setErrorMsg(String errorMsg) { 23 | this.errorMsg = errorMsg; 24 | } 25 | 26 | public boolean isSuccess() { 27 | return errorCode == Const.HttpConst.HTTP_CODE_SUCCESS; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/result/BaseWhetherBean.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.result; 2 | 3 | import java.util.List; 4 | 5 | import pers.jay.wanandroid.model.MxWhether; 6 | 7 | public class BaseWhetherBean { 8 | 9 | private String code; 10 | 11 | private String message; 12 | 13 | private String redirect; 14 | 15 | private List value; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/result/WanAndroidResponse.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.result; 2 | 3 | public class WanAndroidResponse extends BaseWanBean { 4 | 5 | /** 6 | * data : {"admin":false,"chapterTops":[],"collectIds":[7484,2696,7654,5573,7958,8252,8227,8080,3365,2439,1467,3596,2897,979,8247,8438,8694],"email":"","icon":"","id":12331,"nickname":"RookieJay","password":"","token":"","type":0,"username":"RookieJay"} 7 | * errorCode : 0 8 | * errorMsg : 9 | */ 10 | 11 | private T data; 12 | 13 | public T getData() { return data;} 14 | 15 | public void setData(T data) { this.data = data;} 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/utils/ADFilterTool.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.utils; 2 | 3 | import android.content.Context; 4 | import android.content.res.Resources; 5 | 6 | import pers.jay.wanandroid.R; 7 | 8 | /** 9 | * 广告过滤工具类 10 | */ 11 | public class ADFilterTool { 12 | 13 | public static boolean hasAd(Context context, String url) { 14 | Resources res = context.getResources(); 15 | String[] adUrls = res.getStringArray(R.array.adBlockUrl); 16 | for (String adUrl : adUrls) { 17 | if (url.contains(adUrl)) { 18 | return true; 19 | } 20 | } 21 | return false; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/utils/JUtils.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.utils; 2 | 3 | import android.text.Html; 4 | 5 | public final class JUtils { 6 | 7 | public static String html2String(String str) { 8 | return Html.fromHtml(str).toString(); 9 | } 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/utils/RvScrollTopUtils.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.utils; 2 | 3 | import android.support.v7.widget.LinearLayoutManager; 4 | import android.support.v7.widget.RecyclerView; 5 | 6 | /** 7 | * @author CuiZhen 8 | * @date 2019/5/30 9 | * QQ: 302833254 10 | * E-mail: goweii@163.com 11 | * GitHub: https://github.com/goweii 12 | */ 13 | public class RvScrollTopUtils { 14 | 15 | public static void smoothScrollTop(RecyclerView rv){ 16 | if (rv != null) { 17 | RecyclerView.LayoutManager layoutManager = rv.getLayoutManager(); 18 | if (layoutManager instanceof LinearLayoutManager) { 19 | LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager; 20 | int first = linearLayoutManager.findFirstVisibleItemPosition(); 21 | int last = linearLayoutManager.findLastVisibleItemPosition(); 22 | int visibleCount = last - first + 1; 23 | int scrollIndex = visibleCount * 2 - 1; 24 | if (first > scrollIndex) { 25 | rv.scrollToPosition(scrollIndex); 26 | } 27 | } 28 | rv.smoothScrollToPosition(0); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/utils/ThemeHelper.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.utils; 2 | 3 | import android.os.Build; 4 | import android.support.annotation.NonNull; 5 | import android.support.v7.app.AppCompatDelegate; 6 | 7 | public class ThemeHelper { 8 | 9 | public static final String LIGHT_MODE = "light"; 10 | public static final String DARK_MODE = "dark"; 11 | public static final String DEFAULT_MODE = "default"; 12 | 13 | public static void applyTheme(@NonNull String themePref) { 14 | switch (themePref) { 15 | case LIGHT_MODE: { 16 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); 17 | break; 18 | } 19 | case DARK_MODE: { 20 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); 21 | break; 22 | } 23 | default: { 24 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { 25 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); 26 | } else { 27 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO); 28 | } 29 | break; 30 | } 31 | } 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/utils/WrapContentLinearLayoutManager.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.utils; 2 | 3 | import android.content.Context; 4 | import android.support.v7.widget.LinearLayoutManager; 5 | import android.support.v7.widget.RecyclerView; 6 | import android.util.AttributeSet; 7 | 8 | /** 9 | * 包装LinearLauoutManager,避免Recyclerview的IndexOutOfBoundsException 10 | * 11 | * 异常信息 属于google bug:Inconsistency detected. Invalid view holder adapter positionViewHolder 12 | */ 13 | public class WrapContentLinearLayoutManager extends LinearLayoutManager { 14 | 15 | public WrapContentLinearLayoutManager(Context context) { 16 | super(context); 17 | } 18 | 19 | public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { 20 | super(context, orientation, reverseLayout); 21 | } 22 | 23 | public WrapContentLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, 24 | int defStyleRes) { 25 | super(context, attrs, defStyleAttr, defStyleRes); 26 | } 27 | 28 | @Override 29 | public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { 30 | try { 31 | super.onLayoutChildren(recycler, state); 32 | } 33 | catch (IndexOutOfBoundsException e) { 34 | e.printStackTrace(); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/widgets/ConfirmDialog.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.widgets; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | 6 | import per.goweii.anylayer.AnyLayer; 7 | import per.goweii.anylayer.DialogLayer; 8 | import pers.jay.wanandroid.R; 9 | 10 | public class ConfirmDialog extends DialogLayer { 11 | 12 | public ConfirmDialog(Activity activity) { 13 | super(activity); 14 | } 15 | 16 | public ConfirmDialog(Context context) { 17 | super(context); 18 | } 19 | 20 | public void show() { 21 | // AnyLayer.dialog().contentView(R.layout.base_ui_layout_dialog_confirm). 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/widgets/HandWritingTextView.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.widgets; 2 | 3 | import android.content.Context; 4 | import android.graphics.Typeface; 5 | import android.support.annotation.Nullable; 6 | import android.support.v7.widget.AppCompatTextView; 7 | import android.util.AttributeSet; 8 | 9 | import pers.jay.wanandroid.common.JApplication; 10 | 11 | /** 12 | * 方正沈尹默行书 简繁 13 | */ 14 | public class HandWritingTextView extends AppCompatTextView { 15 | 16 | public HandWritingTextView(Context context) { 17 | this(context, null); 18 | } 19 | 20 | public HandWritingTextView(Context context, 21 | @Nullable AttributeSet attrs) { 22 | this(context, attrs, 0); 23 | } 24 | 25 | public HandWritingTextView(Context context, 26 | @Nullable AttributeSet attrs, 27 | int defStyleAttr) { 28 | super(context, attrs, defStyleAttr); 29 | // Typeface tf = genTypeface(); 30 | // setTypeface(tf); 31 | } 32 | 33 | /** 34 | * 获取自定义字体 35 | * @return 36 | */ 37 | private Typeface genTypeface() { 38 | return Typeface.createFromAsset(JApplication.getInstance().getAssets(), "fonts/FZShenYMXSJF.TTF"); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/pers/jay/wanandroid/widgets/ScaleLikeView.java: -------------------------------------------------------------------------------- 1 | package pers.jay.wanandroid.widgets; 2 | 3 | import android.content.Context; 4 | import android.graphics.Canvas; 5 | import android.graphics.Paint; 6 | import android.support.annotation.Nullable; 7 | import android.util.AttributeSet; 8 | import android.view.View; 9 | 10 | public class ScaleLikeView extends View { 11 | 12 | private Paint mPaint = new Paint(); 13 | 14 | public ScaleLikeView(Context context, @Nullable AttributeSet attrs) { 15 | super(context, attrs); 16 | } 17 | 18 | @Override 19 | protected void onDraw(Canvas canvas) { 20 | super.onDraw(canvas); 21 | } 22 | 23 | @Override 24 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 25 | super.onMeasure(widthMeasureSpec, heightMeasureSpec); 26 | } 27 | 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_scale_from_center_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/anim_scale_to_center_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_center_to_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_center_to_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_left_to_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_right_to_center.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/color-night/color_state_menu_navi.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/color/color_state_menu_navi.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-night/launch_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_article_new.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_article_qa.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_article_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_avatar.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_corner_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_corner_top_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_delete.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_done.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_edit_text_common.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_edit_text_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_image_placeholder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_line_vertical.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_press_color_surface.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_triangle.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dk_title_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/drawable/dk_title_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_about_us.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_upward.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/drawable/ic_avatar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_chevron_left.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_clear.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 12 | 13 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_coin.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_collection.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_del_all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/drawable/ic_del_all.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/drawable/ic_delete_red.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/drawable/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_like.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_like_fill.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more_vert.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_nav_home.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_nav_knowledge.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_nav_navigation.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_nav_project.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_no_network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/drawable/ic_no_network.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_question.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_question_answer.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_ranking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/drawable/ic_ranking.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/drawable/ic_splash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_swap_horiz_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_thumb_up.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_todo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/launch_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/line_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/placeholder_wanandroid.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/drawable/placeholder_wanandroid.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/ripple_gray.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_bottom_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_collect.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_pop_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/vector_drawable_ic_edit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_user.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 19 | 20 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/base_popup_item_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_collection.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_knowledge.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_nav.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_qa.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_search_result.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_tab.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_weixin.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 25 | 26 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /app/src/main/res/layout/include_base_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/include_progressbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_knowledge_child.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_search_history.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 21 | 22 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_title.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 22 | 23 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_todo_title.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_banner.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_empty_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_error_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_loading_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_no_network_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_popup_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/popup_todo_item_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/recycle_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 18 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_banner.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_drawer_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 |

4 | 5 | 10 | 11 | 15 | 16 | 20 | 21 | 25 | 26 | 30 | 31 | 35 | 36 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_navigation_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | 23 | 24 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_todo_operation.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_arrow_back_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xhdpi/ic_arrow_back_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_arrow_back_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xxhdpi/ic_arrow_back_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xxhdpi/ic_launcher_web.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_arrow_back_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xxxhdpi/ic_arrow_back_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values-v29/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/AdUrlString.Xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ubmcmm.baidustatic.com 5 | cpro2.baidustatic.com 6 | cpro.baidustatic.com 7 | s.lianmeng.360.cn 8 | nsclick.baidu.com 9 | pos.baidu.com 10 | cbjs.baidu.com 11 | cpro.baidu.com 12 | images.sohu.com/cs/jsfile/js/c.js 13 | union.sogou.com/ 14 | sogou.com/ 15 | a.baidu.com 16 | c.baidu.com 17 | hm.baidu.com 18 | ad.lflucky.com 19 | js.hbssjd.cn 20 | yun.lvehaisen.com 21 | zz.bdstatic.com 22 | ws2.hbssjd.cn 23 | nw44.zmlled.cn 24 | a.urlet.cn 25 | org.urlaw.cn 26 | yun.tuisnake.com 27 | yun.tuitiger.com 28 | engine.tuistone.com 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/values/Keyboardlayout_attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/dashboard_attrs.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 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #00CCFF 4 | -------------------------------------------------------------------------------- /app/src/main/res/xml/avatar_file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/xml/provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/test/java/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | import org.junit.Test; 2 | 3 | import static org.junit.Assert.assertEquals; 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 | 12 | @Test 13 | public void addition_isCorrect() throws Exception { 14 | assertEquals(4, 2 + 2); 15 | } 16 | } -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | apply from: "config.gradle" 3 | buildscript { 4 | repositories { 5 | google() 6 | // jcenter(){ url 'http://jcenter.bintray.com/'} 7 | //阿里云镜像库 8 | maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } 9 | } 10 | dependencies { 11 | classpath 'com.android.tools.build:gradle:3.4.0' 12 | //Gradle Android Maven plugin 13 | classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' 14 | //Gradle Bintray Plugin 15 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0' 16 | } 17 | } 18 | 19 | allprojects { 20 | repositories { 21 | google() 22 | // jcenter(){ url 'http://jcenter.bintray.com/'} 23 | maven { url "https://jitpack.io" } 24 | //阿里云镜像库 25 | maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } 26 | } 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /commonLibs/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /commonLibs/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 29 5 | 6 | 7 | defaultConfig { 8 | minSdkVersion 21 9 | targetSdkVersion 28 10 | versionCode 1 11 | versionName "1.0" 12 | 13 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 14 | 15 | } 16 | 17 | buildTypes { 18 | release { 19 | minifyEnabled false 20 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 21 | } 22 | } 23 | 24 | } 25 | 26 | dependencies { 27 | implementation fileTree(dir: 'libs', include: ['*.jar']) 28 | 29 | implementation 'com.android.support:appcompat-v7:28.0.0' 30 | testImplementation 'junit:junit:4.12' 31 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 32 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 33 | implementation 'com.android.support:design:28.0.0' 34 | implementation rootProject.ext.dependencies["gson"] 35 | 36 | //test 37 | api rootProject.ext.dependencies["timber"] 38 | } 39 | -------------------------------------------------------------------------------- /commonLibs/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /commonLibs/src/androidTest/java/pers/zjc/commonlibs/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getTargetContext(); 24 | 25 | assertEquals("pers.zjc.commonlibs.test", appContext.getPackageName()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /commonLibs/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /commonLibs/src/main/java/pers/zjc/commonlibs/constant/CacheConstants.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs.constant; 2 | 3 | /** 4 | *
 5 |  *     author: Blankj
 6 |  *     blog  : http://blankj.com
 7 |  *     time  : 2018/06/13
 8 |  *     desc  : constants of cache
 9 |  * 
10 | */ 11 | public interface CacheConstants { 12 | int SEC = 1; 13 | int MIN = 60; 14 | int HOUR = 3600; 15 | int DAY = 86400; 16 | } 17 | -------------------------------------------------------------------------------- /commonLibs/src/main/java/pers/zjc/commonlibs/constant/DateFormatConst.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs.constant; 2 | 3 | import android.annotation.SuppressLint; 4 | 5 | import java.text.SimpleDateFormat; 6 | 7 | @SuppressLint("SimpleDateFormat") 8 | public interface DateFormatConst { 9 | 10 | SimpleDateFormat WITH_HMS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 11 | SimpleDateFormat WITHOUT_HMS = new SimpleDateFormat("yyyy-MM-dd"); 12 | SimpleDateFormat WITHOUT_HMS_00 = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); 13 | SimpleDateFormat HHMM = new SimpleDateFormat("HH:mm"); 14 | SimpleDateFormat HMM = new SimpleDateFormat("H:mm"); 15 | SimpleDateFormat MMDDHHmm = new SimpleDateFormat("MM-dd HH:mm"); 16 | SimpleDateFormat CN_M_D = new SimpleDateFormat("M月d日"); 17 | SimpleDateFormat CN_MM_DD = new SimpleDateFormat("MM月dd日"); 18 | SimpleDateFormat CN_MD_H_m = new SimpleDateFormat("M月d日 H时m分"); 19 | SimpleDateFormat CN_WITHOUT_HMS = new SimpleDateFormat("yyyy年MM月dd日"); 20 | } 21 | -------------------------------------------------------------------------------- /commonLibs/src/main/java/pers/zjc/commonlibs/constant/MainThread.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs.constant; 2 | 3 | import android.os.Handler; 4 | import android.os.Looper; 5 | 6 | public class MainThread { 7 | 8 | private Handler mHandler; 9 | 10 | public MainThread() { 11 | mHandler = new Handler(Looper.getMainLooper()); 12 | } 13 | 14 | public void post(Runnable runnable) { 15 | postDelayed(runnable, 0); 16 | } 17 | 18 | public void postDelayed(Runnable runnable, long delayMillis) { 19 | mHandler.postDelayed(runnable, delayMillis); 20 | } 21 | 22 | public void removeCallbacks(Runnable runnable) { 23 | mHandler.removeCallbacks(runnable); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /commonLibs/src/main/java/pers/zjc/commonlibs/constant/MemoryConstants.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs.constant; 2 | 3 | import android.support.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | 9 | /** 10 | *
11 |  *     author: Blankj
12 |  *     blog  : http://blankj.com
13 |  *     time  : 2017/03/13
14 |  *     desc  : constants of memory
15 |  * 
16 | */ 17 | public final class MemoryConstants { 18 | 19 | public static final int BYTE = 1; 20 | public static final int KB = 1024; 21 | public static final int MB = 1048576; 22 | public static final int GB = 1073741824; 23 | 24 | @IntDef({BYTE, KB, MB, GB}) 25 | @Retention(RetentionPolicy.SOURCE) 26 | public @interface Unit { 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /commonLibs/src/main/java/pers/zjc/commonlibs/constant/TimeConstants.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs.constant; 2 | 3 | import android.support.annotation.IntDef; 4 | 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | 8 | 9 | public final class TimeConstants { 10 | 11 | public static final int MSEC = 1; 12 | public static final int SEC = 1000; 13 | public static final int MIN = 60000; 14 | public static final int HOUR = 3600000; 15 | public static final int DAY = 86400000; 16 | 17 | @IntDef({MSEC, SEC, MIN, HOUR, DAY}) 18 | @Retention(RetentionPolicy.SOURCE) 19 | public @interface Unit { 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /commonLibs/src/main/java/pers/zjc/commonlibs/intf/HandleBackInterface.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs.intf; 2 | 3 | public interface HandleBackInterface { 4 | 5 | boolean onBackPress(); 6 | } 7 | -------------------------------------------------------------------------------- /commonLibs/src/main/java/pers/zjc/commonlibs/ui/MyFragmentPagerAdapter.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs.ui; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentPagerAdapter; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 自定义FragmentPagerAdapter,用于底部tab+viewPager切换Fragment场景 11 | */ 12 | public class MyFragmentPagerAdapter extends FragmentPagerAdapter { 13 | 14 | private List mFragmentList; 15 | 16 | public MyFragmentPagerAdapter(FragmentManager fm, List fragments) { 17 | super(fm); 18 | mFragmentList = fragments; 19 | } 20 | 21 | /** 22 | * getItem是创建一个新的Fragment,但是这个方法名可能会被误认为是返回一个已经存在的Fragment。 23 | */ 24 | @Override 25 | public Fragment getItem(int i) { 26 | return mFragmentList.get(i); 27 | } 28 | 29 | @Override 30 | public int getCount() { 31 | return mFragmentList.size(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /commonLibs/src/main/java/pers/zjc/commonlibs/util/CloneUtils.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs.util; 2 | 3 | import com.google.gson.Gson; 4 | 5 | import java.lang.reflect.Type; 6 | 7 | /** 8 | *
 9 |  *     author: Blankj
10 |  *     blog  : http://blankj.com
11 |  *     time  : 2018/01/30
12 |  *     desc  : utils about clone
13 |  * 
14 | */ 15 | public final class CloneUtils { 16 | 17 | private CloneUtils() { 18 | throw new UnsupportedOperationException("u can't instantiate me..."); 19 | } 20 | 21 | /** 22 | * Deep clone. 23 | * 24 | * @param data The data. 25 | * @param type The type. 26 | * @param The value type. 27 | * @return The object of cloned. 28 | */ 29 | public static T deepClone(final T data, final Type type) { 30 | try { 31 | Gson gson = new Gson(); 32 | return gson.fromJson(gson.toJson(data), type); 33 | } catch (Exception e) { 34 | e.printStackTrace(); 35 | return null; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /commonLibs/src/main/java/pers/zjc/commonlibs/util/ViewUtils.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs.util; 2 | 3 | import android.view.View; 4 | import android.view.ViewGroup; 5 | 6 | /** 7 | *
 8 |  *     author: blankj
 9 |  *     blog  : http://blankj.com
10 |  *     time  : 2019/06/18
11 |  *     desc  : utils about view
12 |  * 
13 | */ 14 | public class ViewUtils { 15 | 16 | public static void setViewEnabled(View view, boolean enabled) { 17 | setViewEnabled(view, enabled, (View) null); 18 | } 19 | 20 | public static void setViewEnabled(View view, boolean enabled, View... excludes) { 21 | if (view == null) return; 22 | if (view instanceof ViewGroup) { 23 | ViewGroup viewGroup = (ViewGroup) view; 24 | int childCount = viewGroup.getChildCount(); 25 | for (int i = 0; i < childCount; i++) { 26 | setViewEnabled(viewGroup.getChildAt(i), enabled, excludes); 27 | } 28 | } 29 | if (excludes != null) { 30 | for (View exclude : excludes) { 31 | if (view == exclude) return; 32 | } 33 | } 34 | view.setEnabled(enabled); 35 | } 36 | } -------------------------------------------------------------------------------- /commonLibs/src/main/res/values/dashboard_attrs.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 | -------------------------------------------------------------------------------- /commonLibs/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | common-libs 3 | 4 | -------------------------------------------------------------------------------- /commonLibs/src/test/java/pers/zjc/commonlibs/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package pers.zjc.commonlibs; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | 14 | @Test 15 | public void addition_isCorrect() { 16 | assertEquals(4, 2 + 2); 17 | } 18 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | ## Project-wide Gradle settings. 2 | # 3 | # For more details on how to configure your build environment visit 4 | # http://www.gradle.org/docs/current/userguide/build_environment.html 5 | # 6 | # Specifies the JVM arguments used for the daemon process. 7 | # The setting is particularly useful for tweaking memory settings. 8 | # Default value: -Xmx1024m -XX:MaxPermSize=256m 9 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 10 | # 11 | # When configured, Gradle will run in incubating parallel mode. 12 | # This option should only be used with decoupled projects. More details, visit 13 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 14 | # org.gradle.parallel=true 15 | #Thu May 25 20:59:18 CST 2017 16 | org.gradle.jvmargs=-Xmx1536m 17 | android.enableBuildCache=true 18 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Jul 09 12:01:50 CST 2019 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-5.1.1-all.zip 7 | -------------------------------------------------------------------------------- /imgs/TODO编辑.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/TODO编辑.jpg -------------------------------------------------------------------------------- /imgs/二级标签.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/二级标签.jpg -------------------------------------------------------------------------------- /imgs/侧滑菜单.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/侧滑菜单.jpg -------------------------------------------------------------------------------- /imgs/公众号.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/公众号.jpg -------------------------------------------------------------------------------- /imgs/分享文章.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/分享文章.jpg -------------------------------------------------------------------------------- /imgs/回到顶部.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/回到顶部.png -------------------------------------------------------------------------------- /imgs/头像设置.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/头像设置.jpg -------------------------------------------------------------------------------- /imgs/导航.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/导航.jpg -------------------------------------------------------------------------------- /imgs/导航网站详情.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/导航网站详情.jpg -------------------------------------------------------------------------------- /imgs/广场.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/广场.jpg -------------------------------------------------------------------------------- /imgs/待办.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/待办.jpg -------------------------------------------------------------------------------- /imgs/我的分享.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/我的分享.jpg -------------------------------------------------------------------------------- /imgs/我的收藏.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/我的收藏.jpg -------------------------------------------------------------------------------- /imgs/我的积分.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/我的积分.jpg -------------------------------------------------------------------------------- /imgs/搜索.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/搜索.jpg -------------------------------------------------------------------------------- /imgs/收藏.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/收藏.png -------------------------------------------------------------------------------- /imgs/暗黑模式.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/暗黑模式.jpg -------------------------------------------------------------------------------- /imgs/注册.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/注册.jpg -------------------------------------------------------------------------------- /imgs/登录.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/登录.jpg -------------------------------------------------------------------------------- /imgs/知识体系.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/知识体系.jpg -------------------------------------------------------------------------------- /imgs/积分排行榜 (2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/积分排行榜 (2).jpg -------------------------------------------------------------------------------- /imgs/积分排行榜.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/积分排行榜.jpg -------------------------------------------------------------------------------- /imgs/系统设置.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/系统设置.jpg -------------------------------------------------------------------------------- /imgs/项目.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/项目.jpg -------------------------------------------------------------------------------- /imgs/项目详情.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/项目详情.jpg -------------------------------------------------------------------------------- /imgs/首页.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/imgs/首页.jpg -------------------------------------------------------------------------------- /keystore/RookieJay.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RookieJay/JWanandroid/5f8231b98b636acfc1a691810a3169b78787556c/keystore/RookieJay.jks --------------------------------------------------------------------------------