├── .gitignore ├── .idea ├── caches │ └── build_file_checksums.ser ├── codeStyles │ └── Project.xml ├── encodings.xml ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml ├── libraries │ ├── Gradle____local_aars___D__MyPractice_WanAndroid_library_libs_aspectjrt_jar_unspecified_jar.xml │ ├── Gradle__android_arch_core_common_1_1_1_jar.xml │ ├── Gradle__android_arch_core_runtime_1_1_1.xml │ ├── Gradle__android_arch_lifecycle_common_1_1_1_jar.xml │ ├── Gradle__android_arch_lifecycle_extensions_1_1_1.xml │ ├── Gradle__android_arch_lifecycle_livedata_1_1_1.xml │ ├── Gradle__android_arch_lifecycle_livedata_core_1_1_1.xml │ ├── Gradle__android_arch_lifecycle_reactivestreams_1_1_1.xml │ ├── Gradle__android_arch_lifecycle_runtime_1_1_1.xml │ ├── Gradle__android_arch_lifecycle_viewmodel_1_1_1.xml │ ├── Gradle__android_arch_navigation_navigation_common_1_0_0_alpha06.xml │ ├── Gradle__android_arch_navigation_navigation_fragment_1_0_0_alpha06.xml │ ├── Gradle__android_arch_navigation_navigation_runtime_1_0_0_alpha06.xml │ ├── Gradle__android_arch_navigation_navigation_testing_1_0_0_alpha06.xml │ ├── Gradle__android_arch_navigation_navigation_ui_1_0_0_alpha06.xml │ ├── Gradle__android_arch_paging_common_1_0_0_jar.xml │ ├── Gradle__android_arch_paging_runtime_1_0_0.xml │ ├── Gradle__android_arch_paging_rxjava2_1_0_0_rc1.xml │ ├── Gradle__android_arch_persistence_db_1_1_1.xml │ ├── Gradle__android_arch_persistence_db_framework_1_1_1.xml │ ├── Gradle__android_arch_persistence_room_common_1_1_1_jar.xml │ ├── Gradle__android_arch_persistence_room_guava_1_1_1.xml │ ├── Gradle__android_arch_persistence_room_migration_1_1_1_jar.xml │ ├── Gradle__android_arch_persistence_room_runtime_1_1_1.xml │ ├── Gradle__android_arch_persistence_room_rxjava2_1_1_1.xml │ ├── Gradle__android_arch_persistence_room_testing_1_1_1.xml │ ├── Gradle__com_android_support_animated_vector_drawable_28_0_0_beta01.xml │ ├── Gradle__com_android_support_animated_vector_drawable_28_0_0_rc01.xml │ ├── Gradle__com_android_support_appcompat_v7_28_0_0_beta01.xml │ ├── Gradle__com_android_support_appcompat_v7_28_0_0_rc01.xml │ ├── Gradle__com_android_support_asynclayoutinflater_28_0_0_beta01.xml │ ├── Gradle__com_android_support_asynclayoutinflater_28_0_0_rc01.xml │ ├── Gradle__com_android_support_cardview_v7_28_0_0_beta01.xml │ ├── Gradle__com_android_support_cardview_v7_28_0_0_rc01.xml │ ├── Gradle__com_android_support_collections_28_0_0_beta01_jar.xml │ ├── Gradle__com_android_support_collections_28_0_0_rc01_jar.xml │ ├── Gradle__com_android_support_constraint_constraint_layout_1_1_2.xml │ ├── Gradle__com_android_support_constraint_constraint_layout_solver_1_1_2_jar.xml │ ├── Gradle__com_android_support_coordinatorlayout_28_0_0_beta01.xml │ ├── Gradle__com_android_support_coordinatorlayout_28_0_0_rc01.xml │ ├── Gradle__com_android_support_cursoradapter_28_0_0_beta01.xml │ ├── Gradle__com_android_support_cursoradapter_28_0_0_rc01.xml │ ├── Gradle__com_android_support_customview_28_0_0_beta01.xml │ ├── Gradle__com_android_support_customview_28_0_0_rc01.xml │ ├── Gradle__com_android_support_design_28_0_0_beta01.xml │ ├── Gradle__com_android_support_design_28_0_0_rc01.xml │ ├── Gradle__com_android_support_documentfile_28_0_0_beta01.xml │ ├── Gradle__com_android_support_documentfile_28_0_0_rc01.xml │ ├── Gradle__com_android_support_drawerlayout_28_0_0_beta01.xml │ ├── Gradle__com_android_support_drawerlayout_28_0_0_rc01.xml │ ├── Gradle__com_android_support_interpolator_28_0_0_beta01.xml │ ├── Gradle__com_android_support_interpolator_28_0_0_rc01.xml │ ├── Gradle__com_android_support_loader_28_0_0_beta01.xml │ ├── Gradle__com_android_support_loader_28_0_0_rc01.xml │ ├── Gradle__com_android_support_localbroadcastmanager_28_0_0_beta01.xml │ ├── Gradle__com_android_support_localbroadcastmanager_28_0_0_rc01.xml │ ├── Gradle__com_android_support_multidex_1_0_2.xml │ ├── Gradle__com_android_support_multidex_instrumentation_1_0_2.xml │ ├── Gradle__com_android_support_print_28_0_0_beta01.xml │ ├── Gradle__com_android_support_print_28_0_0_rc01.xml │ ├── Gradle__com_android_support_recyclerview_v7_28_0_0_beta01.xml │ ├── Gradle__com_android_support_recyclerview_v7_28_0_0_rc01.xml │ ├── Gradle__com_android_support_slidingpanelayout_28_0_0_beta01.xml │ ├── Gradle__com_android_support_slidingpanelayout_28_0_0_rc01.xml │ ├── Gradle__com_android_support_support_annotations_28_0_0_beta01_jar.xml │ ├── Gradle__com_android_support_support_annotations_28_0_0_rc01_jar.xml │ ├── Gradle__com_android_support_support_compat_28_0_0_beta01.xml │ ├── Gradle__com_android_support_support_compat_28_0_0_rc01.xml │ ├── Gradle__com_android_support_support_core_ui_28_0_0_beta01.xml │ ├── Gradle__com_android_support_support_core_ui_28_0_0_rc01.xml │ ├── Gradle__com_android_support_support_core_utils_28_0_0_beta01.xml │ ├── Gradle__com_android_support_support_core_utils_28_0_0_rc01.xml │ ├── Gradle__com_android_support_support_fragment_28_0_0_beta01.xml │ ├── Gradle__com_android_support_support_fragment_28_0_0_rc01.xml │ ├── Gradle__com_android_support_support_media_compat_28_0_0_rc01.xml │ ├── Gradle__com_android_support_support_v4_28_0_0_rc01.xml │ ├── Gradle__com_android_support_support_vector_drawable_28_0_0_beta01.xml │ ├── Gradle__com_android_support_support_vector_drawable_28_0_0_rc01.xml │ ├── Gradle__com_android_support_swiperefreshlayout_28_0_0_beta01.xml │ ├── Gradle__com_android_support_swiperefreshlayout_28_0_0_rc01.xml │ ├── Gradle__com_android_support_test_espresso_espresso_core_3_0_2.xml │ ├── Gradle__com_android_support_test_espresso_espresso_idling_resource_3_0_2.xml │ ├── Gradle__com_android_support_test_monitor_1_0_2.xml │ ├── Gradle__com_android_support_test_runner_1_0_2.xml │ ├── Gradle__com_android_support_transition_28_0_0_beta01.xml │ ├── Gradle__com_android_support_transition_28_0_0_rc01.xml │ ├── Gradle__com_android_support_versionedparcelable_28_0_0_beta01.xml │ ├── Gradle__com_android_support_versionedparcelable_28_0_0_rc01.xml │ ├── Gradle__com_android_support_viewpager_28_0_0_beta01.xml │ ├── Gradle__com_android_support_viewpager_28_0_0_rc01.xml │ ├── Gradle__com_github_CymChad_BaseRecyclerViewAdapterHelper_2_9_34.xml │ ├── Gradle__com_github_bumptech_glide_annotations_4_6_1_jar.xml │ ├── Gradle__com_github_bumptech_glide_disklrucache_4_6_1_jar.xml │ ├── Gradle__com_github_bumptech_glide_gifdecoder_4_6_1.xml │ ├── Gradle__com_github_bumptech_glide_glide_4_6_1.xml │ ├── Gradle__com_google_android_gms_play_services_audience_15_0_1.xml │ ├── Gradle__com_google_android_gms_play_services_base_15_0_1.xml │ ├── Gradle__com_google_android_gms_play_services_basement_15_0_1.xml │ ├── Gradle__com_google_android_gms_play_services_plus_15_0_1.xml │ ├── Gradle__com_google_android_gms_play_services_tasks_15_0_1.xml │ ├── Gradle__com_google_code_findbugs_jsr305_1_3_9_jar.xml │ ├── Gradle__com_google_code_findbugs_jsr305_2_0_1_jar.xml │ ├── Gradle__com_google_code_gson_gson_2_7_jar.xml │ ├── Gradle__com_google_code_gson_gson_2_8_0_jar.xml │ ├── Gradle__com_google_errorprone_error_prone_annotations_2_1_3_jar.xml │ ├── Gradle__com_google_guava_guava_23_6_android_jar.xml │ ├── Gradle__com_google_j2objc_j2objc_annotations_1_1_jar.xml │ ├── Gradle__com_hyman_flowlayout_lib_1_1_2.xml │ ├── Gradle__com_jakewharton_butterknife_8_8_1.xml │ ├── Gradle__com_jakewharton_butterknife_annotations_8_8_1_jar.xml │ ├── Gradle__com_jakewharton_rxbinding2_rxbinding_2_1_1.xml │ ├── Gradle__com_jakewharton_rxbinding2_rxbinding_appcompat_v7_2_1_1.xml │ ├── Gradle__com_just_agentweb_agentweb_4_0_2.xml │ ├── Gradle__com_squareup_javawriter_2_1_1_jar.xml │ ├── Gradle__com_squareup_okhttp3_logging_interceptor_3_4_1_jar.xml │ ├── Gradle__com_squareup_okhttp3_okhttp_3_9_1_jar.xml │ ├── Gradle__com_squareup_okio_okio_1_13_0_jar.xml │ ├── Gradle__com_squareup_retrofit2_adapter_rxjava2_2_2_0_jar.xml │ ├── Gradle__com_squareup_retrofit2_converter_gson_2_2_0_jar.xml │ ├── Gradle__com_squareup_retrofit2_retrofit_2_2_0_jar.xml │ ├── Gradle__io_reactivex_rxjava2_rxandroid_2_0_0.xml │ ├── Gradle__io_reactivex_rxjava2_rxjava_2_0_6_jar.xml │ ├── Gradle__javax_inject_javax_inject_1_jar.xml │ ├── Gradle__junit_junit_4_12_jar.xml │ ├── Gradle__net_sf_kxml_kxml2_2_3_0_jar.xml │ ├── Gradle__org_checkerframework_checker_compat_qual_2_0_0_jar.xml │ ├── Gradle__org_codehaus_mojo_animal_sniffer_annotations_1_14_jar.xml │ ├── Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml │ ├── Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml │ ├── Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml │ ├── Gradle__org_jetbrains_annotations_13_0_jar.xml │ ├── Gradle__org_jetbrains_kotlin_kotlin_reflect_1_2_60_jar.xml │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_2_71_jar.xml │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_2_71_jar.xml │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_2_71_jar.xml │ └── Gradle__org_reactivestreams_reactive_streams_1_0_0_jar.xml ├── misc.xml ├── modules.xml ├── navEditor.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro ├── release │ ├── app-release.apk │ └── output.json ├── src │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── administrator │ │ │ └── wanandroid │ │ │ └── ExampleInstrumentedTest.kt │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-web.png │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── administrator │ │ │ │ └── wanandroid │ │ │ │ ├── Constants.kt │ │ │ │ ├── adapter │ │ │ │ ├── ArticleAdapter.kt │ │ │ │ ├── ArticleDiffUtil.kt │ │ │ │ ├── CategoryAdapter.kt │ │ │ │ ├── CollectArticleAdapter.kt │ │ │ │ ├── CollectArticleDiffUtil.kt │ │ │ │ ├── ProjectViewPageAdapter.kt │ │ │ │ ├── ReadPLanArticleDiffUtil.kt │ │ │ │ ├── ReadPlanArticleAdapter.kt │ │ │ │ ├── StudyPeojectDiffUtil.kt │ │ │ │ └── ViewPageAdapter.kt │ │ │ │ ├── bean │ │ │ │ ├── ArticleBean.kt │ │ │ │ ├── Bean.kt │ │ │ │ ├── CategoryBean.kt │ │ │ │ ├── CollectArticleBean.kt │ │ │ │ ├── HotTagBean.kt │ │ │ │ └── LoginBean.kt │ │ │ │ ├── database │ │ │ │ ├── AndroidDataBase.kt │ │ │ │ ├── CollectArticle.kt │ │ │ │ ├── CollectedDao.kt │ │ │ │ ├── ReadPlanArticle.kt │ │ │ │ ├── ReadPlanDao.kt │ │ │ │ ├── RecentSearch.kt │ │ │ │ ├── RecentSearchDao.kt │ │ │ │ ├── StudyProject.kt │ │ │ │ └── StudyProjectDao.kt │ │ │ │ ├── http │ │ │ │ ├── Api.kt │ │ │ │ └── RetrofitApi.kt │ │ │ │ ├── listener │ │ │ │ └── OnItemClickListener.kt │ │ │ │ ├── model │ │ │ │ ├── ArticleDetailModel.kt │ │ │ │ ├── ArticleViewModel.kt │ │ │ │ ├── CollectArticleViewModel.kt │ │ │ │ ├── LoginModel.kt │ │ │ │ ├── NavigationModel.kt │ │ │ │ ├── PlanArticleModel.kt │ │ │ │ └── TagArticleViewModel.kt │ │ │ │ ├── paging │ │ │ │ ├── ArticleDataSource.kt │ │ │ │ ├── ArticleDataSourceFactory.kt │ │ │ │ ├── ArticleRepository.kt │ │ │ │ ├── CollectArticleFactory.kt │ │ │ │ ├── CollectArticleRepository.kt │ │ │ │ ├── CollectArticleSource.kt │ │ │ │ ├── QueryArticleDataSource.kt │ │ │ │ ├── QueryArticleDataSourceFactory.kt │ │ │ │ ├── QueryArticleRepository.kt │ │ │ │ ├── SearchTagModel.kt │ │ │ │ ├── TagArticleRepository.kt │ │ │ │ ├── TagArticleSource.kt │ │ │ │ └── TagArticleSourceFactory.kt │ │ │ │ ├── respository │ │ │ │ ├── ArticleDetailRepository.kt │ │ │ │ └── LoginResposity.kt │ │ │ │ ├── ui │ │ │ │ ├── ArticleDetailActivity.kt │ │ │ │ ├── BottomBehavior.kt │ │ │ │ ├── Dialog.kt │ │ │ │ ├── FloatBehavior.kt │ │ │ │ ├── LoginActivity.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── SearchActivity.kt │ │ │ │ ├── SplashActivity.kt │ │ │ │ ├── TagArticleActivity.kt │ │ │ │ ├── UserDialogFragment.kt │ │ │ │ └── fragment │ │ │ │ │ ├── ArticleFragment.kt │ │ │ │ │ ├── CollectArticleFragment.kt │ │ │ │ │ ├── LoginFragment.kt │ │ │ │ │ ├── NavigationFragment.kt │ │ │ │ │ ├── PageFragment.kt │ │ │ │ │ ├── PlanArticleFragment.kt │ │ │ │ │ ├── ProjectFragment.kt │ │ │ │ │ ├── RegisterFragment.kt │ │ │ │ │ ├── SearchResultFragment.kt │ │ │ │ │ ├── SearchResultViewModel.kt │ │ │ │ │ ├── SearchTagFragment.kt │ │ │ │ │ ├── StudyProjectFragment.kt │ │ │ │ │ ├── TagArticleFragment.kt │ │ │ │ │ └── TagWeiXinFragment.kt │ │ │ │ └── utils │ │ │ │ └── AppExecutors.kt │ │ └── res │ │ │ ├── drawable │ │ │ ├── collect_article_bg.xml │ │ │ ├── ic_access_time_green_24dp.xml │ │ │ ├── ic_account_circle_black_24dp.xml │ │ │ ├── ic_blur_on_black_24dp.xml │ │ │ ├── ic_bookmark_border_black_24dp.xml │ │ │ ├── ic_close_black_24dp.xml │ │ │ ├── ic_home_black_24dp.xml │ │ │ ├── ic_more_vert_black_24dp.xml │ │ │ ├── ic_navigation_black_24dp.xml │ │ │ ├── ic_power_settings_new_black_24dp.xml │ │ │ ├── ic_search_black_24dp.xml │ │ │ ├── ic_star_border_black_24dp.xml │ │ │ ├── ic_star_border_green_24dp.xml │ │ │ ├── ic_star_green_24dp.xml │ │ │ ├── ic_timelapse_black_24dp.xml │ │ │ ├── ic_timelapse_green_24dp.xml │ │ │ ├── ic_view_headline_black_24dp.xml │ │ │ ├── item_bag.xml │ │ │ ├── item_text_view_bg.xml │ │ │ └── read_later_article_bg.xml │ │ │ ├── layout │ │ │ ├── activity_content.xml │ │ │ ├── activity_login.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_search.xml │ │ │ ├── activity_tag_article.xml │ │ │ ├── article_fragment.xml │ │ │ ├── fragment_container.xml │ │ │ ├── fragment_knowledge.xml │ │ │ ├── fragment_login.xml │ │ │ ├── fragment_navigation.xml │ │ │ ├── fragment_page.xml │ │ │ ├── fragment_project.xml │ │ │ ├── fragment_register.xml │ │ │ ├── header_layout.xml │ │ │ ├── item_flow_layout.xml │ │ │ ├── item_view.xml │ │ │ ├── layout_article_detail_action.xml │ │ │ ├── main_content.xml │ │ │ ├── navigation_item.xml │ │ │ ├── plan_read_layout.xml │ │ │ ├── search_result_fragment.xml │ │ │ ├── search_tag_fragment.xml │ │ │ ├── tag.xml │ │ │ └── toolbar_.xml │ │ │ ├── menu │ │ │ ├── article_detail_action.xml │ │ │ ├── bottom.xml │ │ │ ├── menu_toolbar.xml │ │ │ ├── navigation.xml │ │ │ └── search_menu.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── navigation │ │ │ └── login_navigation.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ └── test │ │ └── java │ │ └── com │ │ └── example │ │ └── administrator │ │ └── wanandroid │ │ └── ExampleUnitTest.kt └── wananzhuo.jks ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── library ├── .gitignore ├── build.gradle ├── libs │ └── aspectjrt.jar ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── example │ │ └── library │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── ic_launcher-web.png │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── library │ │ │ ├── anim │ │ │ ├── AnimManager.kt │ │ │ ├── AnimUtils.kt │ │ │ └── ToolbarAnimManager.kt │ │ │ ├── base │ │ │ ├── BaseCompatActivity.java │ │ │ ├── fragment │ │ │ │ └── BaseCompatFragment.kt │ │ │ ├── mvp │ │ │ │ ├── BaseActivityMvp.java │ │ │ │ ├── BaseFragmentMvp.java │ │ │ │ ├── BasePresenterMvp.java │ │ │ │ └── Contract.java │ │ │ └── recycler │ │ │ │ ├── BaseRecyclerFrgMvp.java │ │ │ │ ├── BaseRecyclerViewAdapter.java │ │ │ │ ├── RecyclerLoadView.java │ │ │ │ └── RecyclerMvpView.java │ │ │ ├── global │ │ │ ├── AppManager.java │ │ │ └── GlobalApplication.java │ │ │ ├── helper │ │ │ ├── RetrofitCreateHelper.java │ │ │ ├── RxHelper.java │ │ │ └── okhttp │ │ │ │ ├── TrustManager.java │ │ │ │ ├── cache │ │ │ │ ├── CacheInterceptor.java │ │ │ │ └── HttpCache.java │ │ │ │ └── cookies │ │ │ │ ├── CookieManger.java │ │ │ │ ├── OkHttpCookies.java │ │ │ │ └── PersistentCookieStore.java │ │ │ ├── login │ │ │ ├── ILoginView.kt │ │ │ ├── LoginAnimation.java │ │ │ ├── LoginAspect.java │ │ │ └── LoginAssistant.kt │ │ │ ├── paging │ │ │ ├── BaseDataSourceFactory.kt │ │ │ ├── BaseItemDataSource.kt │ │ │ ├── BasePagingAdapter.kt │ │ │ ├── BasePagingViewModel.kt │ │ │ ├── BaseRepository.kt │ │ │ ├── Listing.kt │ │ │ ├── Repository.kt │ │ │ └── Resource.kt │ │ │ └── utils │ │ │ ├── AppUtils.kt │ │ │ ├── BitmapUtils.kt │ │ │ ├── DateUtils.kt │ │ │ ├── DialogUtils.kt │ │ │ ├── DisplayUtils.kt │ │ │ ├── FileUtils.kt │ │ │ ├── HtmlUtils.kt │ │ │ ├── HttpUtils.kt │ │ │ ├── ImageUtils.kt │ │ │ ├── JsonUtils.kt │ │ │ ├── MD5Utils.kt │ │ │ ├── NetworkConnectionUtils.kt │ │ │ ├── PreferencesUtil.kt │ │ │ ├── ResourcesUtils.kt │ │ │ ├── ScreenAdapterUtils.kt │ │ │ ├── ScreenUtils.kt │ │ │ ├── SnackbarUtils.kt │ │ │ ├── StatusBarUtils.kt │ │ │ ├── StringUtils.kt │ │ │ ├── TimestampUtils.kt │ │ │ ├── ToastUtils.kt │ │ │ ├── UnicodeUtils.kt │ │ │ ├── WifiAutoConnectManager.kt │ │ │ └── glide │ │ │ ├── BlureTransformation.java │ │ │ ├── FastBlur.java │ │ │ ├── GlideExtend.java │ │ │ ├── GlideModel.java │ │ │ ├── ImageLoader.java │ │ │ ├── RoundCorner.java │ │ │ └── ShapeTransform.java │ └── res │ │ ├── anim │ │ ├── activity_finish_trans_in.xml │ │ ├── activity_finish_trans_out.xml │ │ ├── activity_start_zoom_in.xml │ │ └── activity_start_zoom_out.xml │ │ ├── drawable │ │ ├── ic_arrow_back_black_24dp.xml │ │ ├── ic_vector_empty.xml │ │ ├── ic_vector_loading.xml │ │ └── ic_vector_net_error.xml │ │ ├── layout │ │ ├── network_notice_layout.xml │ │ ├── view_empty.xml │ │ ├── view_loading.xml │ │ └── view_network_error.xml │ │ ├── menu │ │ └── navigation.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── values-sw360dp │ │ └── dimens.xml │ │ ├── values-sw400dp │ │ └── dimens.xml │ │ ├── values-sw420dp │ │ └── dimens.xml │ │ ├── values-sw480dp │ │ └── dimens.xml │ │ ├── values-sw560dp │ │ └── dimens.xml │ │ ├── values-sw640dp │ │ └── dimens.xml │ │ ├── values-v21 │ │ └── styles.xml │ │ └── values │ │ ├── colors.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ ├── styles.xml │ │ └── themes.xml │ └── test │ └── java │ └── com │ └── example │ └── library │ └── ExampleUnitTest.java ├── screenshot ├── wanandroid.gif ├── 截屏_20181114_105402.jpg ├── 截屏_20181114_105409.jpg ├── 截屏_20181114_105413.jpg ├── 截屏_20181114_105419.jpg ├── 截屏_20181114_105423.jpg ├── 截屏_20181114_105445.jpg ├── 截屏_20181114_105453.jpg └── 截屏_20181114_105510.jpg └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | .DS_Store 5 | /build 6 | /captures 7 | .externalNativeBuild 8 | -------------------------------------------------------------------------------- /.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle____local_aars___D__MyPractice_WanAndroid_library_libs_aspectjrt_jar_unspecified_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_core_common_1_1_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_core_runtime_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_extensions_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_livedata_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_reactivestreams_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_navigation_navigation_common_1_0_0_alpha06.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_navigation_navigation_fragment_1_0_0_alpha06.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_navigation_navigation_runtime_1_0_0_alpha06.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_navigation_navigation_testing_1_0_0_alpha06.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_navigation_navigation_ui_1_0_0_alpha06.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_paging_common_1_0_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_paging_runtime_1_0_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_paging_rxjava2_1_0_0_rc1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_persistence_db_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_persistence_db_framework_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_persistence_room_common_1_1_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_persistence_room_guava_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_persistence_room_migration_1_1_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_persistence_room_runtime_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_persistence_room_rxjava2_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__android_arch_persistence_room_testing_1_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_animated_vector_drawable_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_animated_vector_drawable_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_appcompat_v7_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_appcompat_v7_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_asynclayoutinflater_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_asynclayoutinflater_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_cardview_v7_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_cardview_v7_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_collections_28_0_0_beta01_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_collections_28_0_0_rc01_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_1_1_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_solver_1_1_2_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_coordinatorlayout_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_coordinatorlayout_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_cursoradapter_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_cursoradapter_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_customview_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_customview_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_design_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_design_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_documentfile_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_documentfile_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_drawerlayout_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_drawerlayout_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_interpolator_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_interpolator_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_loader_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_loader_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_localbroadcastmanager_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_localbroadcastmanager_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_multidex_1_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_multidex_instrumentation_1_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_print_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_print_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_recyclerview_v7_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_recyclerview_v7_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_slidingpanelayout_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_slidingpanelayout_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_annotations_28_0_0_beta01_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_annotations_28_0_0_rc01_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_compat_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_compat_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_core_ui_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_core_ui_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_core_utils_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_core_utils_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_fragment_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_fragment_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_media_compat_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_v4_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_vector_drawable_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_support_vector_drawable_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_swiperefreshlayout_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_swiperefreshlayout_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_3_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_3_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_test_monitor_1_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_test_runner_1_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_transition_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_transition_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_versionedparcelable_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_versionedparcelable_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_viewpager_28_0_0_beta01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_android_support_viewpager_28_0_0_rc01.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_github_CymChad_BaseRecyclerViewAdapterHelper_2_9_34.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_github_bumptech_glide_annotations_4_6_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_github_bumptech_glide_disklrucache_4_6_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_github_bumptech_glide_gifdecoder_4_6_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_github_bumptech_glide_glide_4_6_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_android_gms_play_services_audience_15_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_android_gms_play_services_base_15_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_android_gms_play_services_basement_15_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_android_gms_play_services_plus_15_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_android_gms_play_services_tasks_15_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_code_findbugs_jsr305_1_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_code_gson_gson_2_7_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_code_gson_gson_2_8_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_errorprone_error_prone_annotations_2_1_3_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_guava_guava_23_6_android_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_google_j2objc_j2objc_annotations_1_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_hyman_flowlayout_lib_1_1_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_jakewharton_butterknife_8_8_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_jakewharton_butterknife_annotations_8_8_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_jakewharton_rxbinding2_rxbinding_2_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_jakewharton_rxbinding2_rxbinding_appcompat_v7_2_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_just_agentweb_agentweb_4_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_squareup_javawriter_2_1_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_squareup_okhttp3_logging_interceptor_3_4_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_9_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_squareup_okio_okio_1_13_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_squareup_retrofit2_adapter_rxjava2_2_2_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_squareup_retrofit2_converter_gson_2_2_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__com_squareup_retrofit2_retrofit_2_2_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__io_reactivex_rxjava2_rxandroid_2_0_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_0_6_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__javax_inject_javax_inject_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__junit_junit_4_12_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__net_sf_kxml_kxml2_2_3_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_checkerframework_checker_compat_qual_2_0_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_codehaus_mojo_animal_sniffer_annotations_1_14_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_jetbrains_annotations_13_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_reflect_1_2_60_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_2_71_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_2_71_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_2_71_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/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 | -------------------------------------------------------------------------------- /app/release/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/release/app-release.apk -------------------------------------------------------------------------------- /app/release/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":1,"versionName":"1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] -------------------------------------------------------------------------------- /app/src/androidTest/java/com/example/administrator/wanandroid/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid 2 | 3 | import android.support.test.InstrumentationRegistry 4 | import android.support.test.runner.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getTargetContext() 22 | assertEquals("com.example.administrator.wanandroid", appContext.packageName) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/Constants.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid 2 | 3 | /** 4 | * @author : Alex 5 | * @date : 2018/09/05 6 | * @version : V 2.0.0 7 | */ 8 | object Constants { 9 | 10 | /** 11 | * 跳转WebView携带的参数 12 | */ 13 | const val CONTENT_TITLE = "contentTitle" 14 | const val CONTENT_URL = "contentUrl" 15 | const val CONTENT_Id = "contentID" 16 | const val CONTENT_AUTHOR = "contentAuthor" 17 | const val CONTENT_CHAPTER = "contentChapterName" 18 | const val CONTENT_CHAPTER_ID = "contentChapterID" 19 | 20 | val TITLE_FRAGMENTS = arrayOf("文章","收藏","计划") 21 | val PROJECT_FRAGMENTS = arrayOf("弘扬", "郭霖", "玉刚说", "Android群英传", "Google开发者", "美团技术团队") 22 | 23 | 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/adapter/ArticleDiffUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.adapter 2 | 3 | import android.support.v7.util.DiffUtil 4 | import com.example.administrator.wanandroid.bean.ArticleBean 5 | 6 | /** 7 | * @author : Alex 8 | * @date : 2018/10/18 9 | * @version : V 2.0.0 10 | */ 11 | class ArticleDiffUtil : DiffUtil.ItemCallback() { 12 | 13 | override fun areItemsTheSame(p0: ArticleBean, p1: ArticleBean): Boolean { 14 | return p0.id == p1.id 15 | } 16 | 17 | override fun areContentsTheSame(p0: ArticleBean, p1: ArticleBean): Boolean { 18 | return p0 == p1 19 | } 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/adapter/CollectArticleDiffUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.adapter 2 | 3 | import android.support.v7.util.DiffUtil 4 | import com.example.administrator.wanandroid.bean.ArticleBean 5 | import com.example.administrator.wanandroid.bean.CollectArticleBean 6 | 7 | /** 8 | * @author : Alex 9 | * @date : 2018/10/18 10 | * @version : V 2.0.0 11 | */ 12 | class CollectArticleDiffUtil : DiffUtil.ItemCallback() { 13 | 14 | override fun areItemsTheSame(p0: CollectArticleBean, p1: CollectArticleBean): Boolean { 15 | return p0.id == p1.id 16 | } 17 | 18 | override fun areContentsTheSame(p0: CollectArticleBean, p1: CollectArticleBean): Boolean { 19 | return p0 == p1 20 | } 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/adapter/ReadPLanArticleDiffUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.adapter 2 | 3 | import android.support.v7.util.DiffUtil 4 | import com.example.administrator.wanandroid.bean.ArticleBean 5 | import com.example.administrator.wanandroid.bean.CollectArticleBean 6 | import com.example.administrator.wanandroid.database.ReadPlanArticle 7 | 8 | /** 9 | * @author : Alex 10 | * @date : 2018/10/18 11 | * @version : V 2.0.0 12 | */ 13 | class ReadPLanArticleDiffUtil : DiffUtil.ItemCallback() { 14 | 15 | override fun areItemsTheSame(p0: ReadPlanArticle, p1: ReadPlanArticle): Boolean { 16 | return p0.id == p1.id 17 | } 18 | 19 | override fun areContentsTheSame(p0: ReadPlanArticle, p1: ReadPlanArticle): Boolean { 20 | return p0 == p1 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/adapter/StudyPeojectDiffUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.adapter 2 | 3 | import android.support.v7.util.DiffUtil 4 | import com.example.administrator.wanandroid.bean.ArticleBean 5 | import com.example.administrator.wanandroid.bean.CollectArticleBean 6 | import com.example.administrator.wanandroid.database.ReadPlanArticle 7 | import com.example.administrator.wanandroid.database.StudyProject 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/10/18 12 | * @version : V 2.0.0 13 | */ 14 | class StudyPeojectDiffUtil : DiffUtil.ItemCallback() { 15 | 16 | override fun areItemsTheSame(p0: StudyProject, p1: StudyProject): Boolean { 17 | return p0.id == p1.id 18 | } 19 | 20 | override fun areContentsTheSame(p0: StudyProject, p1: StudyProject): Boolean { 21 | return p0 == p1 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/adapter/ViewPageAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.adapter 2 | 3 | import android.support.v4.app.Fragment 4 | import android.support.v4.app.FragmentManager 5 | import android.support.v4.app.FragmentPagerAdapter 6 | import com.example.administrator.wanandroid.Constants.TITLE_FRAGMENTS 7 | import com.example.library.base.fragment.BaseCompatFragment 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/08/29 12 | * @version : V 2.0.0 13 | */ 14 | class ViewPageAdapter(fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager) { 15 | 16 | var fragment = mutableListOf() 17 | 18 | 19 | override fun getItem(p0: Int): Fragment { 20 | return fragment[p0] 21 | } 22 | 23 | override fun getCount() = fragment.size 24 | 25 | override fun getPageTitle(position: Int) = TITLE_FRAGMENTS[position] 26 | 27 | fun setFragments(fragments: MutableList) { 28 | fragment = fragments 29 | notifyDataSetChanged() 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/bean/Bean.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.bean 2 | 3 | /** 4 | * @author : Alex 5 | * @version : V 2.0.0 6 | * @date : 2018/10/19 7 | */ 8 | class Bean { 9 | 10 | 11 | /** 12 | * data : null 13 | * errorCode : 0 14 | * errorMsg : 15 | */ 16 | 17 | var data: Any? = null 18 | var errorCode: Int = 0 19 | var errorMsg: String? = null 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/bean/CategoryBean.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.bean 2 | 3 | /** 4 | * @author : Alex 5 | * @date : 2018/10/19 6 | * @version : V 2.0.0 7 | */ 8 | data class CategoryResponse( 9 | 10 | var data: List? = null, 11 | var errorCode: Int = 0, 12 | var errorMsg: String? = null 13 | ) 14 | 15 | 16 | 17 | data class CategoryBean( 18 | 19 | var courseId: Int = 0, 20 | var id: Int = 0, 21 | var name: String? = null, 22 | var order: Int = 0, 23 | var parentChapterId: Int = 0, 24 | var visible: Int = 0, 25 | var children: List? = null) { 26 | 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/bean/LoginBean.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.bean 2 | 3 | /** 4 | * @author : Alex 5 | * @version : V 2.0.0 6 | * @date : 2018/10/18 7 | */ 8 | data class LoginBean( var data: DataBean? = null, 9 | var errorCode: Int = 0, 10 | var errorMsg: String? = null 11 | ) { 12 | 13 | /** 14 | * data : {"chapterTops":[],"collectIds":[7360,7357,7356],"email":"","icon":"","id":11730,"password":"111111","token":"","type":0,"username":"ALEXALEX"} 15 | * errorCode : 0 16 | * errorMsg : 17 | */ 18 | 19 | 20 | 21 | data class DataBean ( var email: String? = null, 22 | var icon: String? = null, 23 | var id: Int = 0, 24 | var password: String? = null, 25 | var token: String? = null, 26 | var type: Int = 0, 27 | var username: String? = null, 28 | var chapterTops: List<*>? = null, 29 | var collectIds: List? = null) 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/database/CollectArticle.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.database 2 | 3 | import android.arch.persistence.room.Entity 4 | import android.arch.persistence.room.PrimaryKey 5 | 6 | /** 7 | * @author : Alex 8 | * @date : 2018/10/19 9 | * @version : V 2.0.0 10 | */ 11 | 12 | @Entity(tableName = "collect") 13 | data class CollectArticle ( var articleId : Int ){ 14 | 15 | @PrimaryKey(autoGenerate = true) 16 | var id : Int = 0 17 | 18 | 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/database/CollectedDao.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.database 2 | 3 | import android.arch.lifecycle.LiveData 4 | import android.arch.persistence.room.Dao 5 | import android.arch.persistence.room.Delete 6 | import android.arch.persistence.room.Insert 7 | import android.arch.persistence.room.Query 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/10/19 12 | * @version : V 2.0.0 13 | */ 14 | 15 | @Dao 16 | interface CollectedDao { 17 | 18 | @Query("SELECT * FROM collect WHERE articleId = :id") 19 | fun isCollected(id:Int):CollectArticle 20 | 21 | @Insert 22 | fun insert(collectArticle: CollectArticle) 23 | 24 | 25 | @Delete 26 | fun delete(collectArticle: CollectArticle) 27 | 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/database/ReadPlanArticle.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.database 2 | 3 | import android.arch.persistence.room.Entity 4 | import android.arch.persistence.room.PrimaryKey 5 | 6 | /** 7 | * @author : Alex 8 | * @date : 2018/10/19 9 | * @version : V 2.0.0 10 | */ 11 | @Entity(tableName = "read_plan") 12 | data class ReadPlanArticle(var author: String? = null, 13 | var chapterName: String? = null, 14 | var link: String? = null, 15 | var articleId: Int = 0, 16 | var title: String? = null 17 | ){ 18 | @PrimaryKey(autoGenerate = true) 19 | var id: Int = 0 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/database/ReadPlanDao.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.database 2 | 3 | import android.arch.lifecycle.LiveData 4 | import android.arch.paging.DataSource 5 | import android.arch.persistence.room.Dao 6 | import android.arch.persistence.room.Delete 7 | import android.arch.persistence.room.Insert 8 | import android.arch.persistence.room.Query 9 | 10 | /** 11 | * @author : Alex 12 | * @date : 2018/10/19 13 | * @version : V 2.0.0 14 | */ 15 | 16 | @Dao 17 | interface ReadPlanDao { 18 | @Insert 19 | fun insert(readPlanArticle: ReadPlanArticle) 20 | @Delete 21 | fun remove(readPlanArticle: ReadPlanArticle) 22 | @Query("SELECT * from read_plan") 23 | fun getArticleList():DataSource.Factory 24 | @Query("SELECT * from read_plan WHERE articleId = :id") 25 | fun getArticle(id :Int):ReadPlanArticle 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/database/RecentSearch.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.database 2 | 3 | import android.arch.persistence.room.Entity 4 | import android.arch.persistence.room.PrimaryKey 5 | 6 | /** 7 | * @author : Alex 8 | * @date : 2018/10/29 9 | * @version : V 2.0.2 10 | */ 11 | @Entity(tableName = "recent_search") 12 | class RecentSearch(val string: String) { 13 | 14 | @PrimaryKey(autoGenerate = true) 15 | var id: Int = 0 16 | 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/database/RecentSearchDao.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.database 2 | 3 | import android.arch.lifecycle.LiveData 4 | import android.arch.persistence.room.Dao 5 | import android.arch.persistence.room.Insert 6 | import android.arch.persistence.room.Query 7 | import io.reactivex.Observable 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/10/29 12 | * @version : V 2.0.2 13 | */ 14 | @Dao 15 | interface RecentSearchDao { 16 | @Insert 17 | fun insert(recentSearch: RecentSearch) 18 | 19 | @Query("SELECT * from recent_search ORDER BY id desc") 20 | fun getRecentSearch(): LiveData> 21 | 22 | @Query("SELECT * from recent_search WHERE string = :string") 23 | fun isExist(string: String): RecentSearch? 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/database/StudyProject.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.database 2 | 3 | import android.arch.persistence.room.Entity 4 | import android.arch.persistence.room.PrimaryKey 5 | 6 | /** 7 | * @author : Alex 8 | * @date : 2018/10/19 9 | * @version : V 2.0.0 10 | */ 11 | @Entity(tableName = "project") 12 | data class StudyProject(var author: String? = null, 13 | var chapterName: String? = null, 14 | var link: String? = null, 15 | var articleId: Int = 0, 16 | var title: String? = null, 17 | var envelopePic: String? = null 18 | ){ 19 | @PrimaryKey(autoGenerate = true) 20 | var id: Int = 0 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/database/StudyProjectDao.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.database 2 | 3 | import android.arch.lifecycle.LiveData 4 | import android.arch.paging.DataSource 5 | import android.arch.persistence.room.Dao 6 | import android.arch.persistence.room.Delete 7 | import android.arch.persistence.room.Insert 8 | import android.arch.persistence.room.Query 9 | 10 | /** 11 | * @author : Alex 12 | * @date : 2018/10/19 13 | * @version : V 2.0.0 14 | */ 15 | 16 | @Dao 17 | interface StudyProjectDao { 18 | 19 | @Insert 20 | fun insert(readPlanArticle: StudyProject) 21 | 22 | @Delete 23 | fun remove(readPlanArticle: StudyProject) 24 | 25 | @Query("SELECT * from project") 26 | fun getArticleList():DataSource.Factory 27 | 28 | @Query("SELECT * from project WHERE articleId = :id") 29 | fun getArticle(id :Int):StudyProject 30 | 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/http/RetrofitApi.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.http 2 | 3 | import com.example.library.helper.RetrofitCreateHelper 4 | 5 | /** 6 | * @author : Alex 7 | * @version : V 2.0.0 8 | * @date : 2018/10/18 9 | */ 10 | object RetrofitApi { 11 | 12 | private var api: Api? = null 13 | 14 | val instence: Api 15 | get() { 16 | if (api == null) { 17 | synchronized(RetrofitApi::class.java) { 18 | if (api == null) { 19 | api = RetrofitCreateHelper.createApi(Api::class.java, BASE_URL) 20 | } 21 | } 22 | } 23 | return api!! 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/listener/OnItemClickListener.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.listener 2 | 3 | import android.view.View 4 | import com.example.administrator.wanandroid.bean.CategoryBean 5 | import com.zhy.view.flowlayout.FlowLayout 6 | 7 | /** 8 | * @author : Alex 9 | * @date : 2018/09/05 10 | * @version : V 2.0.0 11 | *RecycleView单击事件监听接口 12 | */ 13 | interface OnItemClickListener { 14 | /** 15 | *单击事件 16 | */ 17 | fun itemClick(t: T, position: Int) 18 | } 19 | 20 | 21 | interface OnItemNavigationClickListener { 22 | /** 23 | *单击事件 24 | */ 25 | fun itemClick(view: View, position: Int, parent : FlowLayout, children : List) 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/model/ArticleViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.model 2 | 3 | import com.example.administrator.paging.paging.BasePagingViewModel 4 | import com.example.administrator.wanandroid.bean.ArticleBean 5 | import com.example.administrator.wanandroid.http.paging.ArticleRepository 6 | 7 | /** 8 | * @author : Alex 9 | * @date : 2018/08/31 10 | * @version : V 2.0.0 11 | */ 12 | class ArticleViewModel(articleResposity: ArticleRepository) : BasePagingViewModel(articleResposity) -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/model/CollectArticleViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.model 2 | 3 | import com.example.administrator.paging.paging.BasePagingViewModel 4 | import com.example.administrator.wanandroid.bean.CollectArticleBean 5 | import com.example.administrator.wanandroid.http.paging.CollectArticleRepository 6 | 7 | /** 8 | * @author : Alex 9 | * @date : 2018/10/19 10 | * @version : V 2.0.0 11 | */ 12 | class CollectArticleViewModel(collectArticleResposity: CollectArticleRepository) 13 | : BasePagingViewModel(collectArticleResposity) 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/model/LoginModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.model 2 | 3 | import android.arch.lifecycle.Transformations 4 | import android.arch.lifecycle.ViewModel 5 | import com.example.administrator.wanandroid.respository.LoginResposity 6 | 7 | /** 8 | * @author : Alex 9 | * @date : 2018/10/18 10 | * @version : V 2.0.0 11 | */ 12 | class LoginModel(val loginResposity: LoginResposity) : ViewModel() { 13 | 14 | val loginState = Transformations.map(loginResposity.login) { it }!! 15 | val register = Transformations.map(loginResposity.register) { it }!! 16 | 17 | public fun login(account: String, pswd: String) { 18 | loginResposity.login(account, pswd) 19 | } 20 | 21 | public fun register(account: String, pswd: String, rpswd: String) { 22 | loginResposity.register(account, pswd, rpswd) 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/model/NavigationModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.model 2 | 3 | import android.arch.lifecycle.MutableLiveData 4 | import android.arch.lifecycle.ViewModel 5 | import com.example.administrator.wanandroid.bean.CategoryBean 6 | import com.example.administrator.wanandroid.http.RetrofitApi 7 | import com.example.library.helper.RxHelper 8 | import io.reactivex.functions.Consumer 9 | 10 | /** 11 | * @author : Alex 12 | * @date : 2018/10/19 13 | * @version : V 2.0.0 14 | */ 15 | class NavigationModel : ViewModel() { 16 | 17 | 18 | val listLive = MutableLiveData>() 19 | 20 | fun getCategory(){ 21 | RetrofitApi.instence.getCategories() 22 | .compose(RxHelper.rxSchedulerHelper()) 23 | .subscribe(Consumer { 24 | listLive.value = it.data 25 | }) 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/model/TagArticleViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.model 2 | 3 | import com.example.administrator.paging.paging.BasePagingViewModel 4 | import com.example.administrator.wanandroid.bean.ArticleBean 5 | import com.example.administrator.wanandroid.http.paging.TagArticleRepository 6 | 7 | /** 8 | * @author : Alex 9 | * @date : 2018/08/31 10 | * @version : V 2.0.0 11 | */ 12 | class TagArticleViewModel(articleResposity: TagArticleRepository) : BasePagingViewModel(articleResposity) -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/paging/ArticleDataSourceFactory.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.http.paging 2 | 3 | import com.example.administrator.paging.paging.BaseItemDataSource 4 | import com.example.administrator.paging.paging.BaseDataSourceFactory 5 | import com.example.administrator.wanandroid.bean.ArticleBean 6 | import com.example.administrator.wanandroid.http.Api 7 | import java.util.concurrent.Executor 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/08/31 12 | * @version : V 2.0.0 13 | */ 14 | class ArticleDataSourceFactory(private val api: Api, private val retryExecutor: Executor) : BaseDataSourceFactory() { 15 | 16 | override fun createDataSource(): BaseItemDataSource { 17 | return ArticleDataSource(api, retryExecutor) 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/paging/ArticleRepository.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.http.paging 2 | 3 | import com.example.administrator.paging.paging.BaseDataSourceFactory 4 | import com.example.administrator.paging.paging.BaseRepository 5 | import com.example.administrator.wanandroid.bean.ArticleBean 6 | import com.example.administrator.wanandroid.http.Api 7 | import java.util.concurrent.Executor 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/08/31 12 | * @version : V 2.0.0 13 | */ 14 | class ArticleRepository(private val api: Api, private val retryExecutor: Executor) : BaseRepository() { 15 | 16 | override fun createDataBaseFactory(): BaseDataSourceFactory { 17 | return ArticleDataSourceFactory(api, retryExecutor) 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/paging/CollectArticleFactory.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.http.paging 2 | 3 | import com.example.administrator.paging.paging.BaseItemDataSource 4 | import com.example.administrator.paging.paging.BaseDataSourceFactory 5 | import com.example.administrator.wanandroid.bean.CollectArticleBean 6 | import com.example.administrator.wanandroid.http.Api 7 | import java.util.concurrent.Executor 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/10/19 12 | * @version : V 2.0.0 13 | */ 14 | class CollectArticleFactory(private val api: Api, private val retryExecutor: Executor) : BaseDataSourceFactory() { 15 | 16 | override fun createDataSource(): BaseItemDataSource { 17 | return CollectArticleSource(api, retryExecutor) 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/paging/CollectArticleRepository.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.http.paging 2 | 3 | import com.example.administrator.paging.paging.BaseDataSourceFactory 4 | import com.example.administrator.paging.paging.BaseRepository 5 | import com.example.administrator.wanandroid.bean.CollectArticleBean 6 | import com.example.administrator.wanandroid.http.Api 7 | import java.util.concurrent.Executor 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/10/19 12 | * @version : V 2.0.0 13 | */ 14 | class CollectArticleRepository(private val api: Api, private val retryExecutor: Executor) : BaseRepository() { 15 | override fun createDataBaseFactory(): BaseDataSourceFactory { 16 | return CollectArticleFactory(api, retryExecutor) 17 | } 18 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/paging/QueryArticleDataSourceFactory.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.http.paging 2 | 3 | import com.example.administrator.paging.paging.BaseDataSourceFactory 4 | import com.example.administrator.paging.paging.BaseItemDataSource 5 | import com.example.administrator.wanandroid.bean.ArticleBean 6 | import com.example.administrator.wanandroid.http.Api 7 | import java.util.concurrent.Executor 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/08/31 12 | * @version : V 2.0.0 13 | */ 14 | class QueryArticleDataSourceFactory(val key: String, private val api: Api, private val retryExecutor: Executor) : BaseDataSourceFactory() { 15 | 16 | override fun createDataSource(): BaseItemDataSource { 17 | return QueryArticleDataSource(key, api, retryExecutor) 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/paging/QueryArticleRepository.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.http.paging 2 | 3 | import com.example.administrator.paging.paging.BaseDataSourceFactory 4 | import com.example.administrator.paging.paging.BaseRepository 5 | import com.example.administrator.wanandroid.bean.ArticleBean 6 | import com.example.administrator.wanandroid.http.Api 7 | import java.util.concurrent.Executor 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/08/31 12 | * @version : V 2.0.0 13 | */ 14 | class QueryArticleRepository(val key: String, private val api: Api, private val retryExecutor: Executor) : BaseRepository() { 15 | 16 | override fun createDataBaseFactory(): BaseDataSourceFactory { 17 | return QueryArticleDataSourceFactory(key,api, retryExecutor) 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/paging/TagArticleRepository.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.http.paging 2 | 3 | import com.example.administrator.paging.paging.BaseDataSourceFactory 4 | import com.example.administrator.paging.paging.BaseRepository 5 | import com.example.administrator.wanandroid.bean.ArticleBean 6 | import com.example.administrator.wanandroid.http.Api 7 | import java.util.concurrent.Executor 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/08/31 12 | * @version : V 2.0.0 13 | */ 14 | class TagArticleRepository(private val api: Api, private val retryExecutor: Executor, val tagId : Int) : BaseRepository() { 15 | 16 | override fun createDataBaseFactory(): BaseDataSourceFactory { 17 | 18 | return TagArticleSourceFactory(api, retryExecutor,tagId) 19 | } 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/paging/TagArticleSourceFactory.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.http.paging 2 | 3 | import com.example.administrator.paging.paging.BaseItemDataSource 4 | import com.example.administrator.paging.paging.BaseDataSourceFactory 5 | import com.example.administrator.wanandroid.bean.ArticleBean 6 | import com.example.administrator.wanandroid.http.Api 7 | import java.util.concurrent.Executor 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/08/31 12 | * @version : V 2.0.0 13 | */ 14 | class TagArticleSourceFactory(private val api: Api, private val retryExecutor: Executor,val tagId:Int) : BaseDataSourceFactory() { 15 | 16 | override fun createDataSource(): BaseItemDataSource { 17 | return TagArticleSource(api, retryExecutor,tagId) 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/ui/BottomBehavior.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid 2 | 3 | import android.content.Context 4 | import android.support.design.widget.AppBarLayout 5 | import android.support.design.widget.CoordinatorLayout 6 | import android.util.AttributeSet 7 | import android.view.View 8 | 9 | /** 10 | * @author : Alex 11 | * @date : 2018/08/27 12 | * @version : V 2.0.0 13 | */ 14 | class BottomBehavior(context: Context, attrs: AttributeSet) : CoordinatorLayout.Behavior(context, attrs) { 15 | override fun layoutDependsOn(parent: CoordinatorLayout, child: View, dependency: View): Boolean { 16 | return dependency is AppBarLayout 17 | } 18 | 19 | override fun onDependentViewChanged(parent: CoordinatorLayout, child: View, dependency: View): Boolean { 20 | val distance = ((dependency.layoutParams as CoordinatorLayout.LayoutParams).behavior as AppBarLayout.Behavior).topAndBottomOffset 21 | child.translationY = -distance.toFloat() 22 | return true 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/ui/Dialog.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid 2 | 3 | import android.app.Dialog 4 | import android.os.Bundle 5 | import android.support.v4.app.DialogFragment 6 | 7 | /** 8 | * @author : Alex 9 | * @date : 2018/10/18 10 | * @version : V 2.0.0 11 | */ 12 | class Dialog : DialogFragment() { 13 | 14 | override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 15 | 16 | 17 | 18 | return super.onCreateDialog(savedInstanceState) 19 | } 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/ui/fragment/SearchResultViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid.ui.fragment 2 | 3 | import com.example.administrator.paging.paging.BasePagingViewModel 4 | import com.example.administrator.wanandroid.bean.ArticleBean 5 | import com.example.administrator.wanandroid.http.paging.QueryArticleRepository 6 | 7 | class SearchResultViewModel(articleResposity: QueryArticleRepository) : BasePagingViewModel(articleResposity) { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/wanandroid/utils/AppExecutors.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 Google LLC 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.example.administrator.wanandroid.utils 18 | 19 | import java.util.concurrent.Executors 20 | 21 | private val IO_EXECUTOR = Executors.newSingleThreadExecutor() 22 | public val FIXED_EXECUTOR = Executors.newFixedThreadPool(5)!! 23 | 24 | /** 25 | * Utility method to run blocks on a dedicated background thread, used for io/database work. 26 | */ 27 | fun runOnIoThread(f: () -> Unit) { 28 | IO_EXECUTOR.execute(f) 29 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/collect_article_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_access_time_green_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_account_circle_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bookmark_border_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more_vert_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_navigation_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_power_settings_new_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_border_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_border_green_24dp.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_green_24dp.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_timelapse_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_timelapse_green_24dp.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_view_headline_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_bag.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/read_later_article_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_tag_article.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/layout/article_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_container.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/plan_read_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/search_result_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/tag.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/toolbar_.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/menu/article_detail_action.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/menu/bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 12 | 16 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/menu/search_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /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/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/navigation/login_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 12 | 13 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #03f903 4 | #01be30 5 | #FF4081 6 | #005252 7 | #eeeeee 8 | #dddddd 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #34FE20 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | WanAndroid 3 | Open navigation drawer 4 | Close navigation drawer 5 | 收藏文章 6 | 取消收藏 7 | 加入阅读计划 8 | 删除阅读计划 9 | 账号和密码都不能为空! 10 | 取消 11 | 确定 12 | 提示 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/test/java/com/example/administrator/wanandroid/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.wanandroid 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/wananzhuo.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/app/wananzhuo.jks -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Oct 19 14:55:04 CST 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip 7 | -------------------------------------------------------------------------------- /library/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /library/libs/aspectjrt.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/libs/aspectjrt.jar -------------------------------------------------------------------------------- /library/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 | -------------------------------------------------------------------------------- /library/src/androidTest/java/com/example/library/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.example.library; 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 | @Test 20 | public void useAppContext() { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.example.library.test", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /library/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /library/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/base/mvp/BasePresenterMvp.java: -------------------------------------------------------------------------------- 1 | package com.example.library.base.mvp; 2 | 3 | /** 4 | *
 5 |  *
 6 |  *   @author   :   Alex
 7 |  *   @version  :   V 1.0.9
 8 |  */
 9 | 
10 | public abstract class BasePresenterMvp< V extends Contract.ViewMvp, M extends Contract.ModeMvp>  {
11 | 
12 |     public V mView;
13 |     public M model;
14 | 
15 |     public void onAttach(V mView) {
16 |         this.mView = mView;
17 |         this.model = createModel();
18 |     }
19 | 
20 |     public void disAttach() {
21 | 
22 |         if (mView != null) {
23 |             mView = null;
24 |         }
25 |         if (model != null){
26 |             model = null;
27 |         }
28 |     }
29 | 
30 |     /**
31 |      * 创建Model
32 |      * @return 返回Model
33 |      */
34 |     public abstract M createModel();
35 | 
36 | }
37 | 


--------------------------------------------------------------------------------
/library/src/main/java/com/example/library/base/mvp/Contract.java:
--------------------------------------------------------------------------------
 1 | package com.example.library.base.mvp;
 2 | 
 3 | /**
 4 |  * 
 5 |  *
 6 |  *   @author   :   Alex
 7 |  *   @version  :   V 1.0.9
 8 |  */
 9 | 
10 | public interface Contract {
11 | 
12 |     interface ModeMvp {
13 | 
14 |     }
15 | 
16 |     interface ViewMvp {
17 |         /**
18 |          * 请求成功
19 |          *
20 |          * @param t T
21 |          */
22 |         void loadSuccess(T t);
23 | 
24 |         /**
25 |          * 请求失败
26 |          *
27 |          * @param s 错误信息
28 |          */
29 |         void loadFailed(String s);
30 | 
31 | 
32 |     }
33 | 
34 |     interface PresenterMvp {
35 | 
36 |     }
37 | }
38 | 


--------------------------------------------------------------------------------
/library/src/main/java/com/example/library/base/recycler/RecyclerLoadView.java:
--------------------------------------------------------------------------------
 1 | package com.example.library.base.recycler;
 2 | 
 3 | import com.chad.library.adapter.base.loadmore.LoadMoreView;
 4 | import com.example.library.R;
 5 | 
 6 | 
 7 | /**
 8 |  * 
 9 |  *
10 |  *   @author   :   Alex
11 |  *   @e_mail   :   18238818283@sina.cn
12 |  *   @time     :   2018/01/18
13 |  *   @desc     :
14 |  *   @version  :   V 1.0.9
15 |  */
16 | 
17 | public class RecyclerLoadView extends LoadMoreView {
18 | 
19 |     @Override
20 |     public int getLayoutId() {
21 |         return R.layout.quick_view_load_more;
22 |     }
23 | 
24 |     @Override
25 |     protected int getLoadingViewId() {
26 |         return R.id.load_more_loading_view;
27 |     }
28 | 
29 |     @Override
30 |     protected int getLoadFailViewId() {
31 |         return R.id.load_more_load_fail_view;
32 |     }
33 | 
34 |     @Override
35 |     protected int getLoadEndViewId() {
36 |         return R.id.load_more_load_end_view;
37 |     }
38 | }
39 | 


--------------------------------------------------------------------------------
/library/src/main/java/com/example/library/base/recycler/RecyclerMvpView.java:
--------------------------------------------------------------------------------
 1 | package com.example.library.base.recycler;
 2 | 
 3 | import com.example.library.base.mvp.Contract;
 4 | 
 5 | /**
 6 |  * 
 7 |  *
 8 |  *   @author   :   Alex
 9 |  *   @e_mail   :   18238818283@sina.cn
10 |  *   @time     :   2018/01/22
11 |  *   @desc     :
12 |  *   @version  :   V 1.0.9
13 |  */
14 | 
15 | public interface RecyclerMvpView extends Contract.ViewMvp {
16 |     /**
17 |      *
18 |      *下拉加载
19 |      * @param t 数据类型
20 |      */
21 |     void showLoadMoreData(T t);
22 | 
23 |     /**
24 |      * 下拉加载失败
25 |      * @param errorMessage
26 |      */
27 |     void showLoadMoreError(String errorMessage);
28 | 
29 |     /**
30 |      * 刷新
31 |      * @param t
32 |      */
33 |     void showRefreshData(T t);
34 | 
35 |     /**
36 |      * 刷新失败
37 |      * @param errorMessage
38 |      */
39 |     void showRefreshError(String errorMessage);
40 | 
41 |     /**
42 |      * 单个状态改变
43 |      * @param position
44 |      */
45 |     void notifyItemChange(int position);
46 | 
47 |     /**
48 |      * 网络错误
49 |      */
50 |      void showNetWorkError();
51 | 
52 | 
53 | }
54 | 


--------------------------------------------------------------------------------
/library/src/main/java/com/example/library/helper/okhttp/cache/HttpCache.java:
--------------------------------------------------------------------------------
 1 | package com.example.library.helper.okhttp.cache;
 2 | 
 3 | import com.example.library.utils.AppUtils;
 4 | 
 5 | import java.io.File;
 6 | 
 7 | import okhttp3.Cache;
 8 | 
 9 | /**
10 |  * Created by Horrarndoo on 2017/9/12.
11 |  * 

12 | */ 13 | public class HttpCache { 14 | 15 | private static final int HTTP_RESPONSE_DISK_CACHE_MAX_SIZE = 50 * 1024 * 1024; 16 | 17 | public static Cache getCache() { 18 | return new Cache(new File(AppUtils.INSTANCE.getContext().getExternalCacheDir().getAbsolutePath() + File 19 | .separator + "data/NetCache"), 20 | HTTP_RESPONSE_DISK_CACHE_MAX_SIZE); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/login/ILoginView.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.login.aop.login 2 | 3 | /** 4 | * @author : Alex 5 | * @date : 2018/09/03 6 | * @version : V 2.0.0 7 | */ 8 | /** 9 | * 登陆接口 10 | */ 11 | interface ILoginView { 12 | 13 | /** 14 | * 判断是否登陆 15 | * @return true 表示登陆状态 16 | */ 17 | fun isLogin(): Boolean 18 | 19 | /** 20 | * 实现登陆(或跳转到登陆的功能) 21 | * @param userDefine 表示操作的标志 22 | */ 23 | fun login(userDefine: Int) 24 | 25 | /** 26 | * 推出登陆功能 27 | */ 28 | fun exitLogin() 29 | } -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/login/LoginAnimation.java: -------------------------------------------------------------------------------- 1 | package com.example.library.login; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * @author : Alex 10 | * @version : V 2.0.0 11 | * @date : 2018/09/03 12 | * 在任何需要判断登陆状态方法上添加 @LoginAnimation 注解,如: 13 | * ================================ 14 | * @LoginAnimation 15 | * public void click(){ 16 | * ... 17 | * } 18 | * ================================== 19 | */ 20 | @Retention(RetentionPolicy.RUNTIME) 21 | @Target(ElementType.METHOD) 22 | public @interface LoginAnimation { 23 | int value() default 0; 24 | } 25 | -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/login/LoginAssistant.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.login.aop.login 2 | 3 | 4 | 5 | /** 6 | * @author : Alex 7 | * @date : 2018/09/03 8 | * @version : V 2.0.0 9 | */ 10 | class LoginAssistant { 11 | 12 | companion object { 13 | private var loginAssistant: LoginAssistant? = null 14 | fun getInstance(): LoginAssistant { 15 | if (loginAssistant == null) { 16 | synchronized(LoginAssistant::class.java) { 17 | if (loginAssistant == null) { 18 | loginAssistant = LoginAssistant() 19 | } 20 | } 21 | } 22 | return loginAssistant!! 23 | } 24 | } 25 | 26 | var view: ILoginView? = null 27 | 28 | } -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/paging/BaseDataSourceFactory.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.paging.paging 2 | 3 | import android.arch.lifecycle.MutableLiveData 4 | import android.arch.paging.DataSource 5 | 6 | /** 7 | * 创建 DataSourceFactory,用于创建LiveData> 8 | * T:表示区分每个Item标志的类型 如:id : Int 9 | * M:表示获取数据的Bean 10 | * @author : Alex 11 | * @date : 2018/08/21 12 | * @version : V 2.0.0 13 | */ 14 | abstract class BaseDataSourceFactory : DataSource.Factory() { 15 | 16 | //创建观察的LivaData ,操作的改变都是修改sourceLivaData的值,触发系列操作 17 | val sourceLivaData = MutableLiveData>() 18 | 19 | override fun create(): BaseItemDataSource { 20 | val dataSource: BaseItemDataSource = createDataSource() 21 | sourceLivaData.postValue(dataSource) 22 | return dataSource 23 | } 24 | 25 | /** 26 | * 创建 实现的DataSources实例 27 | */ 28 | abstract fun createDataSource(): BaseItemDataSource 29 | 30 | } -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/paging/Listing.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.paging.paging.base 2 | 3 | import android.arch.lifecycle.LiveData 4 | import android.arch.paging.PagedList 5 | 6 | /** 7 | * 用于封装需要监听的对象和执行的操作,用于系统交互 8 | * pagedList : 观察获取数据列表 9 | * networkStatus:观察网络状态 10 | * refreshState : 观察刷新状态 11 | * refresh : 执行刷新操作 12 | * retry : 重试操作 13 | * @author : Alex 14 | * @date : 2018/08/21 15 | * @version : V 2.0.0 16 | */ 17 | data class Listing( 18 | val pagedList: LiveData>, 19 | val networkStatus: LiveData>, 20 | val refreshState: LiveData>, 21 | val refresh: () -> Unit, 22 | val retry: () -> Unit) 23 | -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/paging/Repository.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.paging.paging.base 2 | 3 | /** 4 | * Repository 创建Listing实例,封装所有要观察的属性和状态 5 | * @author : Alex 6 | * @date : 2018/08/21 7 | * @version : V 2.0.0 8 | */ 9 | interface Repository { 10 | fun getDataList(pageSize: Int): Listing 11 | } -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/paging/Resource.kt: -------------------------------------------------------------------------------- 1 | package com.example.administrator.paging.paging.base 2 | 3 | /** 4 | * Created by juan on 2018/05/23. 5 | */ 6 | data class Resource(val status: Status, val data: T?, val message: String?) { 7 | companion object { 8 | fun loading(msg: String? = null, data: T? = null): Resource { 9 | return Resource(Status.LOADING, data, msg) 10 | } 11 | 12 | fun success(data: T? = null): Resource { 13 | return Resource(Status.SUCCESS, data, null) 14 | } 15 | 16 | fun error(msg: String? = null, data: T? = null): Resource { 17 | return Resource(Status.ERROR, data, msg) 18 | } 19 | } 20 | } 21 | 22 | enum class Status { 23 | SUCCESS, 24 | ERROR, 25 | LOADING 26 | } -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/utils/MD5Utils.kt: -------------------------------------------------------------------------------- 1 | package com.example.library.utils 2 | 3 | import java.security.MessageDigest 4 | 5 | /** 6 | * Created by Horrarndoo on 2017/4/5. 7 | * 8 | * 9 | * MD5加密工具类 10 | */ 11 | object MD5Utils { 12 | /** 13 | * MD5加密,32位 14 | */ 15 | fun getMD5(str: String): String { 16 | val md5: MessageDigest 17 | try { 18 | md5 = MessageDigest.getInstance("MD5") 19 | } catch (e: Exception) { 20 | e.printStackTrace() 21 | return "" 22 | } 23 | 24 | val charArray = str.toCharArray() 25 | val byteArray = ByteArray(charArray.size) 26 | for (i in charArray.indices) { 27 | byteArray[i] = charArray[i].toByte() 28 | } 29 | val md5Bytes = md5.digest(byteArray) 30 | val hexValue = StringBuffer() 31 | for (i in md5Bytes.indices) { 32 | val `val` = md5Bytes[i].toInt() and 0xff 33 | if (`val` < 16) { 34 | hexValue.append("0") 35 | } 36 | hexValue.append(Integer.toHexString(`val`)) 37 | } 38 | return hexValue.toString() 39 | } 40 | } -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/utils/glide/GlideExtend.java: -------------------------------------------------------------------------------- 1 | package com.example.library.utils.glide; 2 | 3 | import com.bumptech.glide.annotation.GlideExtension; 4 | import com.bumptech.glide.annotation.GlideOption; 5 | import com.bumptech.glide.module.AppGlideModule; 6 | import com.bumptech.glide.request.RequestOptions; 7 | import com.example.library.R; 8 | 9 | /** 10 | * @author : Alex 11 | * @version : V 2.0.0 12 | * @date : 2018/06/01 13 | */ 14 | 15 | @GlideExtension 16 | public final class GlideExtend extends AppGlideModule { 17 | 18 | private GlideExtend() { 19 | } 20 | 21 | @GlideOption 22 | public static void simple(RequestOptions options) { 23 | options.centerCrop().placeholder(R.drawable.ic_vector_empty); 24 | } 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/utils/glide/GlideModel.java: -------------------------------------------------------------------------------- 1 | package com.example.library.utils.glide; 2 | 3 | import com.bumptech.glide.annotation.GlideModule; 4 | import com.bumptech.glide.module.AppGlideModule; 5 | 6 | /** 7 | * @author : Alex 8 | * @version : V 2.0.0 9 | * @date : 2018/06/01 10 | */ 11 | 12 | @GlideModule 13 | public class GlideModel extends AppGlideModule { 14 | } 15 | -------------------------------------------------------------------------------- /library/src/main/java/com/example/library/utils/glide/ImageLoader.java: -------------------------------------------------------------------------------- 1 | package com.example.library.utils.glide; 2 | 3 | import android.content.Context; 4 | import android.widget.ImageView; 5 | 6 | /** 7 | * @author : Alex 8 | * @version : V 2.0.0 9 | * @date : 2018/09/05 10 | */ 11 | public class ImageLoader { 12 | 13 | public static void loadImageFromUrlThumb(Context context, String url, Float thumbnail, ImageView imageView) { 14 | GlideApp.with(context).load(url).simple().thumbnail(thumbnail).into(imageView); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /library/src/main/res/anim/activity_finish_trans_in.xml: -------------------------------------------------------------------------------- 1 | 3 | 11 | -------------------------------------------------------------------------------- /library/src/main/res/anim/activity_finish_trans_out.xml: -------------------------------------------------------------------------------- 1 | 4 | 13 | 21 | -------------------------------------------------------------------------------- /library/src/main/res/anim/activity_start_zoom_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 12 | -------------------------------------------------------------------------------- /library/src/main/res/anim/activity_start_zoom_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 17 | -------------------------------------------------------------------------------- /library/src/main/res/drawable/ic_arrow_back_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /library/src/main/res/layout/network_notice_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 22 | 23 | -------------------------------------------------------------------------------- /library/src/main/res/layout/view_empty.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 19 | -------------------------------------------------------------------------------- /library/src/main/res/layout/view_network_error.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 21 | -------------------------------------------------------------------------------- /library/src/main/res/menu/navigation.xml: -------------------------------------------------------------------------------- 1 | 2 |

3 | 4 | 6 | -------------------------------------------------------------------------------- /library/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /library/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /library/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/library/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /library/src/main/res/values-sw360dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0000dp 4 | 10.0000dp 5 | 40.0000dp 6 | 72.0000dp 7 | 12.0000sp 8 | 14.0000sp 9 | 16.0000sp 10 | 11 | 12 | -------------------------------------------------------------------------------- /library/src/main/res/values-sw400dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.4444dp 4 | 11.1111dp 5 | 44.4444dp 6 | 80.0000dp 7 | 13.3333sp 8 | 15.5556sp 9 | 17.7778sp 10 | 11 | -------------------------------------------------------------------------------- /library/src/main/res/values-sw420dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.6667dp 4 | 11.6667dp 5 | 46.6667dp 6 | 84.0000dp 7 | 14.0000sp 8 | 16.3333sp 9 | 18.6667sp 10 | 11 | -------------------------------------------------------------------------------- /library/src/main/res/values-sw480dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5.3333dp 4 | 13.3333dp 5 | 53.3333dp 6 | 96.0000dp 7 | 16.0000sp 8 | 18.6667sp 9 | 21.3333sp 10 | 11 | -------------------------------------------------------------------------------- /library/src/main/res/values-sw560dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6.2222dp 4 | 15.5556dp 5 | 62.2222dp 6 | 112.0000dp 7 | 18.6667sp 8 | 21.7778sp 9 | 24.8889sp 10 | 11 | -------------------------------------------------------------------------------- /library/src/main/res/values-sw640dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7.1111dp 4 | 17.7778dp 5 | 71.1111dp 6 | 128.0000dp 7 | 21.3333sp 8 | 24.8889sp 9 | 28.4444sp 10 | 11 | -------------------------------------------------------------------------------- /library/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | -------------------------------------------------------------------------------- /library/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | -------------------------------------------------------------------------------- /library/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #2FFF0C 4 | -------------------------------------------------------------------------------- /library/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Library 3 | Confirm 4 | Cancel 5 | 6 | -------------------------------------------------------------------------------- /library/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | -------------------------------------------------------------------------------- /library/src/test/java/com/example/library/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.example.library; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /screenshot/wanandroid.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/screenshot/wanandroid.gif -------------------------------------------------------------------------------- /screenshot/截屏_20181114_105402.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/screenshot/截屏_20181114_105402.jpg -------------------------------------------------------------------------------- /screenshot/截屏_20181114_105409.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/screenshot/截屏_20181114_105409.jpg -------------------------------------------------------------------------------- /screenshot/截屏_20181114_105413.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/screenshot/截屏_20181114_105413.jpg -------------------------------------------------------------------------------- /screenshot/截屏_20181114_105419.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/screenshot/截屏_20181114_105419.jpg -------------------------------------------------------------------------------- /screenshot/截屏_20181114_105423.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/screenshot/截屏_20181114_105423.jpg -------------------------------------------------------------------------------- /screenshot/截屏_20181114_105445.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/screenshot/截屏_20181114_105445.jpg -------------------------------------------------------------------------------- /screenshot/截屏_20181114_105453.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/screenshot/截屏_20181114_105453.jpg -------------------------------------------------------------------------------- /screenshot/截屏_20181114_105510.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlexTiti/WanAndroid/24c79d885188c981c90a7f0cc101a8f12d5c48ff/screenshot/截屏_20181114_105510.jpg -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app',':library' 2 | --------------------------------------------------------------------------------