├── .gitignore
├── .idea
├── caches
│ └── build_file_checksums.ser
├── codeStyles
│ └── Project.xml
├── gradle.xml
├── inspectionProfiles
│ └── Project_Default.xml
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── vcs.xml
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── xiaochen
│ │ │ └── emvp
│ │ │ ├── MainActivity.java
│ │ │ ├── MyApplication.java
│ │ │ ├── presenter
│ │ │ └── TestPresenter.java
│ │ │ └── view
│ │ │ └── ITestView.java
│ └── res
│ │ ├── color
│ │ └── btn_text_selector.xml
│ │ ├── layout
│ │ └── activity_main.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ │ └── xml
│ │ └── file_paths.xml
│ ├── vdev
│ └── java
│ │ └── com
│ │ └── xiaochen
│ │ └── emvp
│ │ └── ApiConstants.java
│ └── vtest
│ └── java
│ └── com.eflagcomm.emvp
│ └── ApiConstants.java
├── base
├── build.gradle
├── build
│ ├── .transforms
│ │ ├── ab6cbc8153b5cd24f9e974d532b4020a.bin
│ │ ├── ab6cbc8153b5cd24f9e974d532b4020a
│ │ │ └── classes
│ │ │ │ └── classes.dex
│ │ ├── ed32d1a579dde87817b5077a92496ffd.bin
│ │ ├── ed32d1a579dde87817b5077a92496ffd
│ │ │ └── classes
│ │ │ │ └── classes.dex
│ │ ├── fd90b8982ee9f30fb13687f7270bccc1.bin
│ │ └── fd90b8982ee9f30fb13687f7270bccc1
│ │ │ └── classes
│ │ │ └── classes.dex
│ ├── generated
│ │ ├── ap_generated_sources
│ │ │ └── debug
│ │ │ │ └── out
│ │ │ │ └── com
│ │ │ │ ├── bumptech
│ │ │ │ └── glide
│ │ │ │ │ ├── GeneratedAppGlideModuleImpl.java
│ │ │ │ │ └── GeneratedRequestManagerFactory.java
│ │ │ │ └── xiaochen
│ │ │ │ └── emvp
│ │ │ │ └── base
│ │ │ │ ├── GlideApp.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ ├── GlideRequest.java
│ │ │ │ └── GlideRequests.java
│ │ └── source
│ │ │ └── buildConfig
│ │ │ └── debug
│ │ │ └── com
│ │ │ └── xiaochen
│ │ │ └── emvp
│ │ │ └── base
│ │ │ └── BuildConfig.java
│ ├── intermediates
│ │ ├── aapt_friendly_merged_manifests
│ │ │ └── debug
│ │ │ │ └── aapt
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── output.json
│ │ ├── annotation_processor_list
│ │ │ └── debug
│ │ │ │ └── annotationProcessors.json
│ │ ├── compile_library_classes
│ │ │ └── debug
│ │ │ │ └── classes.jar
│ │ ├── compile_only_not_namespaced_r_class_jar
│ │ │ └── debug
│ │ │ │ └── R.jar
│ │ ├── incremental
│ │ │ ├── debug-mergeNativeLibs
│ │ │ │ └── merge-state
│ │ │ ├── mergeDebugJniLibFolders
│ │ │ │ └── merger.xml
│ │ │ ├── mergeDebugShaders
│ │ │ │ └── merger.xml
│ │ │ ├── packageDebugAssets
│ │ │ │ └── merger.xml
│ │ │ └── packageDebugResources
│ │ │ │ ├── compile-file-map.properties
│ │ │ │ ├── merged.dir
│ │ │ │ └── values
│ │ │ │ │ └── values.xml
│ │ │ │ └── merger.xml
│ │ ├── javac
│ │ │ └── debug
│ │ │ │ └── classes
│ │ │ │ └── com
│ │ │ │ ├── bumptech
│ │ │ │ └── glide
│ │ │ │ │ ├── GeneratedAppGlideModuleImpl.class
│ │ │ │ │ └── GeneratedRequestManagerFactory.class
│ │ │ │ └── xiaochen
│ │ │ │ └── emvp
│ │ │ │ └── base
│ │ │ │ ├── BaseApplication.class
│ │ │ │ ├── BuildConfig.class
│ │ │ │ ├── GlideApp.class
│ │ │ │ ├── GlideOptions.class
│ │ │ │ ├── GlideRequest.class
│ │ │ │ ├── GlideRequests.class
│ │ │ │ ├── MyAppGlideModule.class
│ │ │ │ ├── dialog
│ │ │ │ ├── LoadingDialog.class
│ │ │ │ ├── MyDialog$OnDialogBtnClickListener.class
│ │ │ │ └── MyDialog.class
│ │ │ │ ├── event
│ │ │ │ └── BaseEvent.class
│ │ │ │ ├── presenter
│ │ │ │ ├── AbsBasePresenter$ResponseObserverCallBack.class
│ │ │ │ ├── AbsBasePresenter.class
│ │ │ │ └── BasePresenter.class
│ │ │ │ ├── ui
│ │ │ │ ├── AbsBaseActivity.class
│ │ │ │ ├── AbsBaseFragment.class
│ │ │ │ ├── BaseActivity.class
│ │ │ │ └── BaseFragment.class
│ │ │ │ ├── utils
│ │ │ │ ├── ChartUtils.class
│ │ │ │ ├── ContextUtil.class
│ │ │ │ ├── DensityUtil.class
│ │ │ │ ├── GeometryUtil.class
│ │ │ │ ├── ImageUtil.class
│ │ │ │ ├── LogUtil.class
│ │ │ │ ├── NumberUtil.class
│ │ │ │ ├── SPUtil$SharedPreferencesCompat.class
│ │ │ │ ├── SPUtil.class
│ │ │ │ └── ToastUtil.class
│ │ │ │ └── view
│ │ │ │ └── IBaseView.class
│ │ ├── library_java_res
│ │ │ └── debug
│ │ │ │ └── res.jar
│ │ ├── library_manifest
│ │ │ └── debug
│ │ │ │ └── AndroidManifest.xml
│ │ ├── local_only_symbol_list
│ │ │ └── debug
│ │ │ │ └── parseDebugLibraryResources
│ │ │ │ └── R-def.txt
│ │ ├── manifest_merge_blame_file
│ │ │ └── debug
│ │ │ │ └── manifest-merger-blame-debug-report.txt
│ │ ├── merged_manifests
│ │ │ └── debug
│ │ │ │ └── output.json
│ │ ├── packaged_res
│ │ │ └── debug
│ │ │ │ ├── drawable-xhdpi-v4
│ │ │ │ ├── common_back.png
│ │ │ │ ├── icon_common_head.png
│ │ │ │ ├── icon_pull.png
│ │ │ │ └── loading.gif
│ │ │ │ ├── drawable
│ │ │ │ ├── common_dialog_cancel_shape.xml
│ │ │ │ ├── common_dialog_confirm_shape.xml
│ │ │ │ └── common_dialog_shape.xml
│ │ │ │ ├── layout
│ │ │ │ ├── layout_common_head_title.xml
│ │ │ │ ├── layout_common_right_text.xml
│ │ │ │ ├── layout_dialog.xml
│ │ │ │ ├── layout_loading.xml
│ │ │ │ └── layout_loading_dialog.xml
│ │ │ │ └── values
│ │ │ │ └── values.xml
│ │ ├── res
│ │ │ └── symbol-table-with-package
│ │ │ │ └── debug
│ │ │ │ └── package-aware-r.txt
│ │ ├── runtime_library_classes
│ │ │ └── debug
│ │ │ │ └── classes.jar
│ │ └── symbols
│ │ │ └── debug
│ │ │ └── R.txt
│ └── outputs
│ │ └── logs
│ │ └── manifest-merger-debug-report.txt
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── xiaochen
│ │ └── emvp
│ │ └── base
│ │ ├── BaseApplication.java
│ │ ├── MyAppGlideModule.java
│ │ ├── dialog
│ │ ├── LoadingDialog.java
│ │ └── MyDialog.java
│ │ ├── event
│ │ └── BaseEvent.java
│ │ ├── presenter
│ │ ├── AbsBasePresenter.java
│ │ └── BasePresenter.java
│ │ ├── ui
│ │ ├── AbsBaseActivity.java
│ │ ├── AbsBaseFragment.java
│ │ ├── BaseActivity.java
│ │ └── BaseFragment.java
│ │ ├── utils
│ │ ├── ChartUtils.java
│ │ ├── ContextUtil.java
│ │ ├── DensityUtil.java
│ │ ├── GeometryUtil.java
│ │ ├── ImageUtil.java
│ │ ├── LogUtil.java
│ │ ├── NumberUtil.java
│ │ ├── SPUtil.java
│ │ └── ToastUtil.java
│ │ └── view
│ │ └── IBaseView.java
│ └── res
│ ├── drawable-xhdpi
│ ├── common_back.png
│ ├── icon_common_head.png
│ ├── icon_pull.png
│ └── loading.gif
│ ├── drawable
│ ├── common_dialog_cancel_shape.xml
│ ├── common_dialog_confirm_shape.xml
│ └── common_dialog_shape.xml
│ ├── layout
│ ├── layout_common_head_title.xml
│ ├── layout_common_right_text.xml
│ ├── layout_dialog.xml
│ ├── layout_loading.xml
│ └── layout_loading_dialog.xml
│ └── values
│ ├── attrs.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
├── build.gradle
├── config.gradle
├── data
├── build.gradle
├── build
│ ├── .transforms
│ │ ├── 287b3e9bb38b6152fcf26ebb8f7f4c2b.bin
│ │ ├── 287b3e9bb38b6152fcf26ebb8f7f4c2b
│ │ │ └── classes
│ │ │ │ └── classes.dex
│ │ ├── 545a93c8d282430072b6d1f73986a1ec.bin
│ │ ├── 545a93c8d282430072b6d1f73986a1ec
│ │ │ └── classes
│ │ │ │ └── classes.dex
│ │ ├── f73e67748aedaeb4f5ed462d857a8517.bin
│ │ └── f73e67748aedaeb4f5ed462d857a8517
│ │ │ └── classes
│ │ │ └── classes.dex
│ ├── generated
│ │ └── source
│ │ │ └── buildConfig
│ │ │ └── debug
│ │ │ └── com
│ │ │ └── xiaochen
│ │ │ └── emvp
│ │ │ └── data
│ │ │ └── BuildConfig.java
│ ├── intermediates
│ │ ├── aapt_friendly_merged_manifests
│ │ │ └── debug
│ │ │ │ └── aapt
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ └── output.json
│ │ ├── annotation_processor_list
│ │ │ └── debug
│ │ │ │ └── annotationProcessors.json
│ │ ├── compile_library_classes
│ │ │ └── debug
│ │ │ │ └── classes.jar
│ │ ├── compile_only_not_namespaced_r_class_jar
│ │ │ └── debug
│ │ │ │ └── R.jar
│ │ ├── incremental
│ │ │ ├── debug-mergeNativeLibs
│ │ │ │ └── merge-state
│ │ │ ├── mergeDebugJniLibFolders
│ │ │ │ └── merger.xml
│ │ │ ├── mergeDebugShaders
│ │ │ │ └── merger.xml
│ │ │ ├── packageDebugAssets
│ │ │ │ └── merger.xml
│ │ │ └── packageDebugResources
│ │ │ │ ├── compile-file-map.properties
│ │ │ │ ├── merged.dir
│ │ │ │ └── values
│ │ │ │ │ └── values.xml
│ │ │ │ └── merger.xml
│ │ ├── javac
│ │ │ └── debug
│ │ │ │ └── classes
│ │ │ │ └── com
│ │ │ │ └── xiaochen
│ │ │ │ └── emvp
│ │ │ │ └── data
│ │ │ │ ├── ApiManager$1.class
│ │ │ │ ├── ApiManager$SingleHolder.class
│ │ │ │ ├── ApiManager.class
│ │ │ │ ├── BaseResponseCallBack.class
│ │ │ │ ├── BaseResponseObserver.class
│ │ │ │ ├── BuildConfig.class
│ │ │ │ ├── HttpManager$1.class
│ │ │ │ ├── HttpManager$2.class
│ │ │ │ ├── HttpManager.class
│ │ │ │ ├── api
│ │ │ │ └── IServiceApi.class
│ │ │ │ ├── interceptor
│ │ │ │ ├── CommonHeaderInterceptor.class
│ │ │ │ ├── CommonParamInterceptor.class
│ │ │ │ ├── HttpLogerInterceptor$Level.class
│ │ │ │ ├── HttpLogerInterceptor$Logger$1.class
│ │ │ │ ├── HttpLogerInterceptor$Logger.class
│ │ │ │ └── HttpLogerInterceptor.class
│ │ │ │ ├── model
│ │ │ │ └── BaseInfo.class
│ │ │ │ ├── request
│ │ │ │ └── BaseReqVO.class
│ │ │ │ ├── response
│ │ │ │ ├── BaseResponseVO.class
│ │ │ │ ├── HomeArticleRespVO$Data.class
│ │ │ │ └── HomeArticleRespVO.class
│ │ │ │ └── utils
│ │ │ │ ├── SSLUtil$1.class
│ │ │ │ ├── SSLUtil$MyTrustManager.class
│ │ │ │ ├── SSLUtil$SSLParams.class
│ │ │ │ ├── SSLUtil$UnSafeHostnameVerifier.class
│ │ │ │ ├── SSLUtil$UnSafeTrustManager.class
│ │ │ │ └── SSLUtil.class
│ │ ├── library_java_res
│ │ │ └── debug
│ │ │ │ └── res.jar
│ │ ├── library_manifest
│ │ │ └── debug
│ │ │ │ └── AndroidManifest.xml
│ │ ├── local_only_symbol_list
│ │ │ └── debug
│ │ │ │ └── parseDebugLibraryResources
│ │ │ │ └── R-def.txt
│ │ ├── manifest_merge_blame_file
│ │ │ └── debug
│ │ │ │ └── manifest-merger-blame-debug-report.txt
│ │ ├── merged_manifests
│ │ │ └── debug
│ │ │ │ └── output.json
│ │ ├── packaged_res
│ │ │ └── debug
│ │ │ │ └── values
│ │ │ │ └── values.xml
│ │ ├── res
│ │ │ └── symbol-table-with-package
│ │ │ │ └── debug
│ │ │ │ └── package-aware-r.txt
│ │ ├── runtime_library_classes
│ │ │ └── debug
│ │ │ │ └── classes.jar
│ │ └── symbols
│ │ │ └── debug
│ │ │ └── R.txt
│ └── outputs
│ │ └── logs
│ │ └── manifest-merger-debug-report.txt
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── xiaochen
│ │ └── emvp
│ │ └── data
│ │ ├── ApiManager.java
│ │ ├── BaseResponseCallBack.java
│ │ ├── BaseResponseObserver.java
│ │ ├── HttpManager.java
│ │ ├── api
│ │ └── IServiceApi.java
│ │ ├── interceptor
│ │ ├── CommonHeaderInterceptor.java
│ │ ├── CommonParamInterceptor.java
│ │ └── HttpLogerInterceptor.java
│ │ ├── model
│ │ └── BaseInfo.java
│ │ ├── request
│ │ └── BaseReqVO.java
│ │ ├── response
│ │ ├── BaseResponseVO.java
│ │ └── HomeArticleRespVO.java
│ │ └── utils
│ │ └── SSLUtil.java
│ └── res
│ └── values
│ └── strings.xml
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── image
└── image.gif
├── settings.gradle
└── widget
├── build.gradle
├── build
├── .transforms
│ ├── 654ffa0984f75717e6093a66e6b655a0.bin
│ ├── 654ffa0984f75717e6093a66e6b655a0
│ │ └── classes
│ │ │ └── classes.dex
│ ├── 94d3b1e7a3a0f1ac8e19990810e9b66b.bin
│ ├── 94d3b1e7a3a0f1ac8e19990810e9b66b
│ │ └── classes
│ │ │ └── classes.dex
│ ├── 95ba2796affda2cd11c77e1ebdc28714.bin
│ └── 95ba2796affda2cd11c77e1ebdc28714
│ │ └── classes
│ │ └── classes.dex
├── generated
│ └── source
│ │ └── buildConfig
│ │ └── debug
│ │ └── com
│ │ └── xiaochen
│ │ └── emvp
│ │ └── widget
│ │ └── BuildConfig.java
├── intermediates
│ ├── aapt_friendly_merged_manifests
│ │ └── debug
│ │ │ └── aapt
│ │ │ ├── AndroidManifest.xml
│ │ │ └── output.json
│ ├── annotation_processor_list
│ │ └── debug
│ │ │ └── annotationProcessors.json
│ ├── compile_library_classes
│ │ └── debug
│ │ │ └── classes.jar
│ ├── compile_only_not_namespaced_r_class_jar
│ │ └── debug
│ │ │ └── R.jar
│ ├── incremental
│ │ ├── debug-mergeNativeLibs
│ │ │ └── merge-state
│ │ ├── mergeDebugJniLibFolders
│ │ │ └── merger.xml
│ │ ├── mergeDebugShaders
│ │ │ └── merger.xml
│ │ ├── packageDebugAssets
│ │ │ └── merger.xml
│ │ └── packageDebugResources
│ │ │ ├── compile-file-map.properties
│ │ │ ├── merged.dir
│ │ │ └── values
│ │ │ │ └── values.xml
│ │ │ └── merger.xml
│ ├── javac
│ │ └── debug
│ │ │ └── classes
│ │ │ └── com
│ │ │ └── xiaochen
│ │ │ └── emvp
│ │ │ └── widget
│ │ │ ├── BuildConfig.class
│ │ │ ├── ui
│ │ │ ├── WidgetActivity.class
│ │ │ ├── adapter
│ │ │ │ ├── MyPagerAdapter.class
│ │ │ │ ├── MyPagerAdapter1.class
│ │ │ │ ├── PointsAdapter$1.class
│ │ │ │ ├── PointsAdapter$ViewHolder.class
│ │ │ │ └── PointsAdapter.class
│ │ │ ├── bean
│ │ │ │ └── PointBean.class
│ │ │ └── fragment
│ │ │ │ ├── BaseFragment.class
│ │ │ │ ├── CircleProgressFragment.class
│ │ │ │ ├── ClockFragment.class
│ │ │ │ ├── CobwebFragment.class
│ │ │ │ ├── DragStickFragment.class
│ │ │ │ ├── FlowLayoutFragment.class
│ │ │ │ ├── MyLayoutFragment.class
│ │ │ │ ├── OlymicRingsFragment.class
│ │ │ │ ├── PieChartFragment.class
│ │ │ │ ├── RangeSeekBarFragment.class
│ │ │ │ ├── SmileFaceFragment.class
│ │ │ │ ├── ToggleFragment.class
│ │ │ │ ├── ViewFragment$1.class
│ │ │ │ ├── ViewFragment.class
│ │ │ │ └── ViewGroupFragment.class
│ │ │ ├── view
│ │ │ ├── CircleRingProgress$1.class
│ │ │ ├── CircleRingProgress.class
│ │ │ ├── ClockView.class
│ │ │ ├── CobwebView.class
│ │ │ ├── DragStickyView$1.class
│ │ │ ├── DragStickyView$2.class
│ │ │ ├── DragStickyView$3.class
│ │ │ ├── DragStickyView$4.class
│ │ │ ├── DragStickyView.class
│ │ │ ├── MyViewPager.class
│ │ │ ├── PieChartView$1.class
│ │ │ ├── PieChartView.class
│ │ │ ├── QQBezierView$onDragStatusListener.class
│ │ │ ├── QQBezierView.class
│ │ │ ├── SmileFaceView$1.class
│ │ │ ├── SmileFaceView.class
│ │ │ ├── SwitchToggleView$1.class
│ │ │ └── SwitchToggleView.class
│ │ │ └── viewgroup
│ │ │ ├── CustomLayoutParam.class
│ │ │ ├── FlowLayout.class
│ │ │ ├── MyFrameLayout.class
│ │ │ ├── MyLinearLayout.class
│ │ │ ├── MyRelativeLayout.class
│ │ │ ├── OlympicRingsView.class
│ │ │ ├── RangeSeekBar.class
│ │ │ ├── RingProgressBar.class
│ │ │ ├── ThumbImageView$OnScrollListener.class
│ │ │ └── ThumbImageView.class
│ ├── library_java_res
│ │ └── debug
│ │ │ └── res.jar
│ ├── library_manifest
│ │ └── debug
│ │ │ └── AndroidManifest.xml
│ ├── local_only_symbol_list
│ │ └── debug
│ │ │ └── parseDebugLibraryResources
│ │ │ └── R-def.txt
│ ├── manifest_merge_blame_file
│ │ └── debug
│ │ │ └── manifest-merger-blame-debug-report.txt
│ ├── merged_manifests
│ │ └── debug
│ │ │ └── output.json
│ ├── packaged_res
│ │ └── debug
│ │ │ ├── drawable-xhdpi-v4
│ │ │ ├── icon1.png
│ │ │ ├── icon1_selected.png
│ │ │ ├── icon2.png
│ │ │ ├── icon2_selected.png
│ │ │ ├── pop1.png
│ │ │ ├── pop2.png
│ │ │ ├── pop3.png
│ │ │ ├── pop4.png
│ │ │ ├── pop5.png
│ │ │ ├── red_bg.9.png
│ │ │ ├── ring_dot.png
│ │ │ ├── rod_handshank_butten.png
│ │ │ └── rod_place_icon.png
│ │ │ ├── drawable
│ │ │ ├── btn1_selector.xml
│ │ │ ├── btn2_selector.xml
│ │ │ ├── flag_01.xml
│ │ │ ├── out_anim.xml
│ │ │ ├── switch_close_bg.xml
│ │ │ ├── switch_open_bg.xml
│ │ │ └── switch_toggle.xml
│ │ │ ├── layout
│ │ │ ├── activity_widget.xml
│ │ │ ├── drag_img.xml
│ │ │ ├── fragment_circle_progress.xml
│ │ │ ├── fragment_clock.xml
│ │ │ ├── fragment_cobweb.xml
│ │ │ ├── fragment_drag_stick.xml
│ │ │ ├── fragment_flow.xml
│ │ │ ├── fragment_my_layout.xml
│ │ │ ├── fragment_olympic.xml
│ │ │ ├── fragment_piechart.xml
│ │ │ ├── fragment_range_seekbar.xml
│ │ │ ├── fragment_smile_face.xml
│ │ │ ├── fragment_toggle.xml
│ │ │ ├── fragment_view.xml
│ │ │ ├── fragment_viewgroup.xml
│ │ │ └── list_points_item.xml
│ │ │ └── values
│ │ │ └── values.xml
│ ├── res
│ │ └── symbol-table-with-package
│ │ │ └── debug
│ │ │ └── package-aware-r.txt
│ ├── runtime_library_classes
│ │ └── debug
│ │ │ └── classes.jar
│ └── symbols
│ │ └── debug
│ │ └── R.txt
└── outputs
│ └── logs
│ └── manifest-merger-debug-report.txt
├── proguard-rules.pro
└── src
└── main
├── AndroidManifest.xml
├── java
└── com
│ └── xiaochen
│ └── emvp
│ └── widget
│ ├── ui
│ ├── WidgetActivity.java
│ ├── adapter
│ │ ├── MyPagerAdapter.java
│ │ ├── MyPagerAdapter1.java
│ │ └── PointsAdapter.java
│ ├── bean
│ │ └── PointBean.java
│ └── fragment
│ │ ├── BaseFragment.java
│ │ ├── CircleProgressFragment.java
│ │ ├── ClockFragment.java
│ │ ├── CobwebFragment.java
│ │ ├── DragStickFragment.java
│ │ ├── FlowLayoutFragment.java
│ │ ├── MyLayoutFragment.java
│ │ ├── OlymicRingsFragment.java
│ │ ├── PieChartFragment.java
│ │ ├── RangeSeekBarFragment.java
│ │ ├── SmileFaceFragment.java
│ │ ├── ToggleFragment.java
│ │ ├── ViewFragment.java
│ │ └── ViewGroupFragment.java
│ ├── view
│ ├── CircleRingProgress.java
│ ├── ClockView.java
│ ├── CobwebView.java
│ ├── DragStickyView.java
│ ├── MyViewPager.java
│ ├── PieChartView.java
│ ├── QQBezierView.java
│ ├── SmileFaceView.java
│ └── SwitchToggleView.java
│ └── viewgroup
│ ├── CustomLayoutParam.java
│ ├── FlowLayout.java
│ ├── MyFrameLayout.java
│ ├── MyLinearLayout.java
│ ├── MyRelativeLayout.java
│ ├── OlympicRingsView.java
│ ├── RangeSeekBar.java
│ ├── RingProgressBar.java
│ └── ThumbImageView.java
└── res
├── color
└── btn_text_selector.xml
├── drawable-xhdpi
├── icon1.png
├── icon1_selected.png
├── icon2.png
├── icon2_selected.png
├── pop1.png
├── pop2.png
├── pop3.png
├── pop4.png
├── pop5.png
├── red_bg.9.png
├── ring_dot.png
├── rod_handshank_butten.png
└── rod_place_icon.png
├── drawable
├── btn1_selector.xml
├── btn2_selector.xml
├── flag_01.xml
├── out_anim.xml
├── switch_close_bg.xml
├── switch_open_bg.xml
└── switch_toggle.xml
├── layout
├── activity_widget.xml
├── drag_img.xml
├── fragment_circle_progress.xml
├── fragment_clock.xml
├── fragment_cobweb.xml
├── fragment_drag_stick.xml
├── fragment_flow.xml
├── fragment_my_layout.xml
├── fragment_olympic.xml
├── fragment_piechart.xml
├── fragment_range_seekbar.xml
├── fragment_smile_face.xml
├── fragment_toggle.xml
├── fragment_view.xml
├── fragment_viewgroup.xml
└── list_points_item.xml
└── values
├── attrs.xml
├── colors.xml
├── dimens.xml
├── strings.xml
└── styles.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 | .externalNativeBuild
10 |
--------------------------------------------------------------------------------
/.idea/caches/build_file_checksums.ser:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zlc921022/easy_mvp/dc6aa67934f05ac7df032ad54f6b2cc4875256db/.idea/caches/build_file_checksums.ser
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
主页
17 | * 18 | * @author zhenglecheng 19 | * @date 2019/12/26 20 | */ 21 | public class MainActivity extends AbsBaseActivity测试
16 | * 17 | * @author zhenglecheng 18 | * @date 2019/12/26 19 | */ 20 | public class TestPresenter extends AbsBasePresenter测试
8 | * 9 | * @author zhenglecheng 10 | * @date 2019/12/26 11 | */ 12 | public interface ITestView extends IBaseView自定义AppGlideModule
8 | * 9 | * @author zhenglecheng 10 | * @date 2019/12/6 11 | */ 12 | @GlideModule 13 | public class MyAppGlideModule extends AppGlideModule { 14 | } 15 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/event/BaseEvent.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.event; 2 | 3 | /** 4 | * @author zlc 5 | * email : zlc921022@163.com 6 | * desc : eventbus类的基类 7 | */ 8 | public class BaseEvent { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/presenter/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.presenter; 2 | 3 | import com.xiaochen.emvp.base.utils.LogUtil; 4 | 5 | import androidx.lifecycle.Lifecycle; 6 | import androidx.lifecycle.LifecycleObserver; 7 | import androidx.lifecycle.LifecycleOwner; 8 | import androidx.lifecycle.OnLifecycleEvent; 9 | 10 | /** 11 | *presenter基类
12 | * 13 | * @author zhenglecheng 14 | * @date 2019/11/20 15 | */ 16 | public class BasePresenter implements LifecycleObserver { 17 | 18 | private final String TAG = this.getClass().getSimpleName(); 19 | 20 | @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) 21 | public void onCreateView(LifecycleOwner lifecycleOwner) { 22 | LogUtil.e(TAG, "onResume"); 23 | } 24 | 25 | @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) 26 | public void onDetachView(LifecycleOwner lifecycleOwner) { 27 | LogUtil.e(TAG, "onDestroy"); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/ui/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.ui; 2 | 3 | import android.app.ActivityManager; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | 7 | import androidx.annotation.Nullable; 8 | import androidx.appcompat.app.AppCompatActivity; 9 | 10 | import com.xiaochen.emvp.base.utils.LogUtil; 11 | 12 | 13 | /** 14 | * 父类activity 子类应该直接继承抽象父类activity 15 | * 16 | * @author admin 17 | */ 18 | public class BaseActivity extends AppCompatActivity implements View.OnClickListener { 19 | 20 | protected final String TAG = getClass().getSimpleName(); 21 | 22 | @Override 23 | protected void onCreate(@Nullable Bundle savedInstanceState) { 24 | super.onCreate(savedInstanceState); 25 | } 26 | 27 | /** 28 | * 初始化控件 29 | */ 30 | protected void initView() { 31 | // todo 32 | } 33 | 34 | /** 35 | * 加载数据 36 | */ 37 | protected void initData() { 38 | // todo 39 | } 40 | 41 | /** 42 | * 点击事件处理 43 | */ 44 | protected void initListener() { 45 | // todo 46 | } 47 | 48 | @Override 49 | public void onClick(View v) { 50 | // todo 51 | } 52 | 53 | @Override 54 | protected void onResume() { 55 | super.onResume(); 56 | LogUtil.e(TAG, "onResume"); 57 | } 58 | 59 | @Override 60 | protected void onDestroy() { 61 | super.onDestroy(); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/ui/BaseFragment.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.ui; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import androidx.fragment.app.Fragment; 7 | 8 | import com.xiaochen.emvp.base.utils.LogUtil; 9 | 10 | //子类应该直接继承抽象父类fragment 11 | public class BaseFragment extends Fragment implements View.OnClickListener { 12 | 13 | protected Context mContext; 14 | protected final String TAG = this.getClass().getSimpleName(); 15 | 16 | @Override 17 | public void onAttach(Context context) { 18 | super.onAttach(context); 19 | this.mContext = context; 20 | } 21 | 22 | /** 23 | * 初始化控件 24 | */ 25 | protected void initView() { 26 | } 27 | 28 | /** 29 | * 加载数据 30 | */ 31 | protected void initData() { 32 | } 33 | 34 | /** 35 | * 点击事件处理 36 | */ 37 | protected void initListener() { 38 | } 39 | 40 | @Override 41 | public void onClick(View v) { 42 | } 43 | 44 | @Override 45 | public void onResume() { 46 | super.onResume(); 47 | LogUtil.e(TAG, "onResume"); 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/utils/ContextUtil.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.utils; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | 6 | import com.xiaochen.emvp.base.BaseApplication; 7 | 8 | /** 9 | * @author zlc 10 | * email : zlc921022@163.com 11 | * desc : 获取上下文 12 | */ 13 | public class ContextUtil { 14 | 15 | private ContextUtil(){} 16 | /** 17 | * 获取全局唯一Context对象 18 | * @return 19 | */ 20 | public static Context getContext(){ 21 | return BaseApplication.getApplication(); 22 | } 23 | 24 | /** 25 | * 获取Application对象 26 | * @return 27 | */ 28 | public static Application getApplication(){ 29 | return BaseApplication.getApplication(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/utils/DensityUtil.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.utils; 2 | 3 | import android.content.Context; 4 | import android.util.DisplayMetrics; 5 | import android.util.TypedValue; 6 | 7 | /** 8 | * @author zlc 9 | * email : zlc921022@163.com 10 | * desc : 屏幕适配类 11 | */ 12 | public class DensityUtil { 13 | 14 | private DensityUtil(){} 15 | /** 16 | * dp 转 px 17 | * @param context 18 | * @return 19 | */ 20 | public static int dp2px(Context context,float dp){ 21 | if(context == null) 22 | throw new RuntimeException("context not is null"); 23 | final float scale = context.getResources().getDisplayMetrics().density; 24 | return (int) (dp * scale + 0.5f); 25 | } 26 | 27 | /** 28 | * px 转 dp 29 | * @param context 30 | * @return 31 | */ 32 | public static int px2dp(Context context,float px){ 33 | if(context == null) 34 | throw new RuntimeException("context not is null"); 35 | final float scale = context.getResources().getDisplayMetrics().density; 36 | return (int) (px / scale + 0.5f); 37 | } 38 | 39 | /** 40 | * sp 转 px 41 | * @param context 42 | * @return 43 | */ 44 | public static int sp2px(Context context,float sp){ 45 | if(context == null) 46 | throw new RuntimeException("context not is null"); 47 | DisplayMetrics dm = context.getResources().getDisplayMetrics(); 48 | return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,sp,dm); 49 | } 50 | 51 | /** 52 | * px 转 sp 53 | * @param context 54 | * @return 55 | */ 56 | public static int px2sp(Context context,float px){ 57 | if(context == null) 58 | throw new RuntimeException("context not is null"); 59 | final float scale = context.getResources().getDisplayMetrics().scaledDensity; 60 | return (int) (px / scale); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/utils/LogUtil.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.utils; 2 | 3 | import timber.log.Timber; 4 | 5 | /** 6 | * Log统一管理类 7 | * 8 | * @author zlc 9 | */ 10 | public class LogUtil { 11 | 12 | private LogUtil() { 13 | } 14 | 15 | //开发完毕将isDebug置为false 16 | private static boolean isDebug = true; 17 | 18 | public static void init() { 19 | if (isDebug) { 20 | Timber.plant(new Timber.DebugTree()); 21 | } 22 | } 23 | 24 | /** 25 | * 打印i级别的log 26 | * 27 | * @param tag 28 | * @param msg 29 | */ 30 | public static void i(String tag, String msg) { 31 | if (isDebug) { 32 | Timber.tag(tag).i(msg); 33 | } 34 | } 35 | 36 | /** 37 | * 打印e级别的log 38 | * 39 | * @param tag 40 | * @param msg 41 | */ 42 | public static void e(String tag, String msg) { 43 | if (isDebug) { 44 | Timber.tag(tag).e(msg); 45 | } 46 | } 47 | 48 | /** 49 | * 方便打log 50 | * 51 | * @param object 52 | * @param msg 53 | */ 54 | public static void i(Object object, String msg) { 55 | if (isDebug) { 56 | Timber.tag(object.getClass().getSimpleName()).i(msg); 57 | } 58 | } 59 | 60 | /** 61 | * 方便打log 62 | * 63 | * @param object 64 | * @param msg 65 | */ 66 | public static void e(Object object, String msg) { 67 | if (isDebug) { 68 | Timber.tag(object.getClass().getSimpleName()).e(msg); 69 | } 70 | } 71 | 72 | /*** 73 | * 错误日志 74 | * @param msg 75 | */ 76 | public static void e(String msg) { 77 | Timber.tag("AndroidRuntime").e(msg); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/utils/NumberUtil.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.utils; 2 | 3 | import java.util.UUID; 4 | 5 | /** 6 | * @author zlc 7 | * email : zlc921022@163.com 8 | * desc : 9 | */ 10 | public class NumberUtil { 11 | 12 | private NumberUtil(){ 13 | 14 | } 15 | 16 | public static int byteToInt(byte b) { 17 | //Java 总是把 byte 当做有符处理;我们可以通过将其和 0xFF 进行二进制与得到它的无符值 18 | return b & 0xFF; 19 | } 20 | 21 | public static String bytesToHexString(byte[] bytes) { 22 | if (bytes == null || bytes.length <= 0) { 23 | return ""; 24 | } 25 | StringBuilder stringBuilder = new StringBuilder(""); 26 | for (int i = 0; i < bytes.length; i++) { 27 | int v = bytes[i] & 0xFF; 28 | String hv = Integer.toHexString(v); 29 | if (hv.length() < 2) { 30 | stringBuilder.append(0); 31 | } 32 | stringBuilder.append(hv); 33 | } 34 | return stringBuilder.toString(); 35 | } 36 | 37 | /** 38 | * 创建随机的uuid 39 | * @return 返回字符串类型的uuid 40 | */ 41 | public static String createStringUUID(){ 42 | UUID uuid = UUID.randomUUID(); 43 | return uuid.toString().replaceAll("-",""); 44 | } 45 | 46 | public static int hexStringToInt(String str){ 47 | return Integer.parseInt(str,16); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/utils/ToastUtil.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.utils; 2 | 3 | import android.content.Context; 4 | import android.text.TextUtils; 5 | import android.view.Gravity; 6 | import android.widget.Toast; 7 | 8 | /** 9 | * Toast提示框 10 | * @author zlc 11 | */ 12 | public class ToastUtil { 13 | 14 | private ToastUtil(){} 15 | 16 | private static Toast toast; 17 | /** 18 | * 显示长时间Toast 19 | * @param context 20 | * @param text 21 | */ 22 | public static void showLongToast(Context context, String text) { 23 | if(TextUtils.isEmpty(text)) return; 24 | if (toast == null) { 25 | toast = Toast.makeText(context, text, Toast.LENGTH_LONG); 26 | } 27 | toast.setText(text); 28 | toast.show(); 29 | } 30 | 31 | /*** 32 | * 显示短时间Toast 33 | * @param context 34 | * @param text 35 | */ 36 | public static void showShortToast(Context context, String text) { 37 | 38 | if(TextUtils.isEmpty(text)) return; 39 | if (toast == null) { 40 | toast = Toast.makeText(context, text, Toast.LENGTH_SHORT); 41 | } 42 | toast.setText(text); 43 | toast.show(); 44 | } 45 | 46 | /** 47 | * 吐司显示到屏幕中心 48 | * @param context 49 | * @param text 50 | */ 51 | public static void showCenterToast(Context context, String text) { 52 | 53 | if(TextUtils.isEmpty(text)) return; 54 | if (toast == null) { 55 | toast = Toast.makeText(context, text, Toast.LENGTH_SHORT); 56 | } 57 | toast.setGravity(Gravity.CENTER,0,0); 58 | toast.setText(text); 59 | toast.show(); 60 | } 61 | 62 | /** 63 | * 取消吐司显示 64 | */ 65 | public static void cancel(){ 66 | if (toast != null) { 67 | LogUtil.e("msg","退出了toast"); 68 | toast.cancel(); 69 | } 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /base/src/main/java/com/xiaochen/emvp/base/view/IBaseView.java: -------------------------------------------------------------------------------- 1 | package com.xiaochen.emvp.base.view; 2 | 3 | 4 | /** 5 | * 父类View接口 原则上子类View接口都应该实现该接口 6 | * 7 | * @author zhenglecheng 8 | */ 9 | public interface IBaseView,
18 | BaseResponseCallBack 服务器接口{d} 通用请求头拦截器