├── WanAndroid
├── app
│ ├── .gitignore
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── drawable
│ │ │ │ │ └── chinalwb.jpeg
│ │ │ │ ├── drawable-xhdpi
│ │ │ │ │ └── logo.png
│ │ │ │ ├── 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
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── values
│ │ │ │ │ └── strings.xml
│ │ │ │ ├── layout
│ │ │ │ │ ├── fragment_articles_list.xml
│ │ │ │ │ ├── nav_header.xml
│ │ │ │ │ ├── activity_main.xml
│ │ │ │ │ └── adapter_item_article.xml
│ │ │ │ ├── menu
│ │ │ │ │ └── menu_nav.xml
│ │ │ │ └── drawable-v24
│ │ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── chinalwb
│ │ │ │ │ └── wanandroid
│ │ │ │ │ ├── main
│ │ │ │ │ ├── api
│ │ │ │ │ │ └── IArticlesApi.java
│ │ │ │ │ ├── presenter
│ │ │ │ │ │ ├── ArticlesContract.java
│ │ │ │ │ │ └── ArticlesPresenter.java
│ │ │ │ │ └── ui
│ │ │ │ │ │ └── ArticlesListFragment.java
│ │ │ │ │ └── MainApplication.java
│ │ │ └── AndroidManifest.xml
│ │ ├── test
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid
│ │ │ │ └── ExampleUnitTest.java
│ │ └── androidTest
│ │ │ └── java
│ │ │ └── com
│ │ │ └── chinalwb
│ │ │ └── wanandroid
│ │ │ └── ExampleInstrumentedTest.java
│ ├── proguard-rules.pro
│ └── build.gradle
├── wanandroid_base
│ ├── .gitignore
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ ├── ids.xml
│ │ │ │ │ └── styles.xml
│ │ │ │ ├── drawable
│ │ │ │ │ ├── favorite_no.png
│ │ │ │ │ ├── favorite_yes.png
│ │ │ │ │ └── contributor_chinalwb.jpeg
│ │ │ │ ├── menu
│ │ │ │ │ └── base_menu_more.xml
│ │ │ │ └── layout
│ │ │ │ │ ├── base_toolbar_main.xml
│ │ │ │ │ ├── base_fragment_article_detail.xml
│ │ │ │ │ └── base_activity_article_detail.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── chinalwb
│ │ │ │ │ └── wanandroid_base
│ │ │ │ │ ├── base
│ │ │ │ │ ├── BasePresenter.java
│ │ │ │ │ ├── BaseView.java
│ │ │ │ │ ├── Constants.java
│ │ │ │ │ ├── RetrofitClient.java
│ │ │ │ │ └── DownloadTask.java
│ │ │ │ │ ├── services
│ │ │ │ │ ├── navigation
│ │ │ │ │ │ ├── INavigationViewService.java
│ │ │ │ │ │ ├── NavigationViewService.java
│ │ │ │ │ │ └── NavigationViewItem.java
│ │ │ │ │ └── contributor
│ │ │ │ │ │ ├── ContributorService.java
│ │ │ │ │ │ └── ContributorItem.java
│ │ │ │ │ ├── Util.java
│ │ │ │ │ ├── features
│ │ │ │ │ ├── article
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── Tag.java
│ │ │ │ │ │ │ ├── ArticlesResponse.java
│ │ │ │ │ │ │ └── Data.java
│ │ │ │ │ └── detail
│ │ │ │ │ │ ├── presenter
│ │ │ │ │ │ ├── ArticleDetailContract.java
│ │ │ │ │ │ └── ArticleDetailPresenter.java
│ │ │ │ │ │ └── ui
│ │ │ │ │ │ ├── ArticleDetailActivity.java
│ │ │ │ │ │ └── ArticleDetailFragment.java
│ │ │ │ │ ├── BaseApplication.java
│ │ │ │ │ ├── AppConfig.java
│ │ │ │ │ └── ServiceProvider.java
│ │ │ └── AndroidManifest.xml
│ │ ├── test
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_base
│ │ │ │ └── ExampleUnitTest.java
│ │ └── androidTest
│ │ │ └── java
│ │ │ └── com
│ │ │ └── chinalwb
│ │ │ └── wanandroid_base
│ │ │ └── ExampleInstrumentedTest.java
│ ├── proguard-rules.pro
│ └── build.gradle
├── wanandroid_gzh
│ ├── .gitignore
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ ├── styles.xml
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ └── colors.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
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── layout
│ │ │ │ │ ├── gzh_fragment_wx_gzh.xml
│ │ │ │ │ ├── gzh_fragment_wx.xml
│ │ │ │ │ └── gzh_adapter_item_gzh_article.xml
│ │ │ │ └── drawable-v24
│ │ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_gzh
│ │ │ │ ├── presenter
│ │ │ │ ├── WxContract.java
│ │ │ │ ├── WxGzhContract.java
│ │ │ │ ├── WxPresenter.java
│ │ │ │ └── WxGzhPresenter.java
│ │ │ │ ├── api
│ │ │ │ └── IGzhApi.java
│ │ │ │ ├── model
│ │ │ │ ├── GzhListResponse.java
│ │ │ │ └── GzhTab.java
│ │ │ │ ├── ui
│ │ │ │ ├── WxGzhPagerAdapter.java
│ │ │ │ ├── WxFragment.java
│ │ │ │ └── WxGzhFragment.java
│ │ │ │ └── GzhApplication.java
│ │ ├── test
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_gzh
│ │ │ │ └── ExampleUnitTest.java
│ │ └── androidTest
│ │ │ └── java
│ │ │ └── com
│ │ │ └── chinalwb
│ │ │ └── wanandroid_gzh
│ │ │ └── ExampleInstrumentedTest.java
│ ├── proguard-rules.pro
│ └── build.gradle
├── wanandroid_test
│ ├── .gitignore
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ └── strings.xml
│ │ │ │ └── layout
│ │ │ │ │ └── test_fragment.xml
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_test
│ │ │ │ ├── TestFragment.java
│ │ │ │ └── TestApplication.java
│ │ ├── test
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_test
│ │ │ │ └── ExampleUnitTest.java
│ │ └── androidTest
│ │ │ └── java
│ │ │ └── com
│ │ │ └── chinalwb
│ │ │ └── wanandroid_test
│ │ │ └── ExampleInstrumentedTest.java
│ ├── proguard-rules.pro
│ └── build.gradle
├── wanandroid_tree
│ ├── .gitignore
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ └── styles.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
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── layout
│ │ │ │ │ └── fragment_tree.xml
│ │ │ │ └── drawable-v24
│ │ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_tree
│ │ │ │ ├── ui
│ │ │ │ └── TreeFragment.java
│ │ │ │ └── TreeApplication.java
│ │ ├── test
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_tree
│ │ │ │ └── ExampleUnitTest.java
│ │ └── androidTest
│ │ │ └── java
│ │ │ └── com
│ │ │ └── chinalwb
│ │ │ └── wanandroid_tree
│ │ │ └── ExampleInstrumentedTest.java
│ ├── proguard-rules.pro
│ └── build.gradle
├── wanandroid_projects
│ ├── .gitignore
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ └── styles.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
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── layout
│ │ │ │ │ ├── projects_fragment_projects.xml
│ │ │ │ │ └── projects_adapter_item.xml
│ │ │ │ └── drawable-v24
│ │ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_projects
│ │ │ │ ├── api
│ │ │ │ └── IProjectsApi.java
│ │ │ │ ├── presenter
│ │ │ │ ├── ProjectsContract.java
│ │ │ │ └── ProjectsPresenter.java
│ │ │ │ ├── ProjectApplication.java
│ │ │ │ └── ui
│ │ │ │ ├── ProjectsListAdapter.java
│ │ │ │ └── ProjectsFragment.java
│ │ ├── test
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_projects
│ │ │ │ └── ExampleUnitTest.java
│ │ └── androidTest
│ │ │ └── java
│ │ │ └── com
│ │ │ └── chinalwb
│ │ │ └── wanandroid_projects
│ │ │ └── ExampleInstrumentedTest.java
│ ├── proguard-rules.pro
│ └── build.gradle
├── wanandroid_contributor
│ ├── .gitignore
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── 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
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── layout
│ │ │ │ │ ├── contributor_fragment_contributor.xml
│ │ │ │ │ └── contributor_adapter_item.xml
│ │ │ │ └── drawable-v24
│ │ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_contributor
│ │ │ │ ├── presenter
│ │ │ │ ├── ContributorContract.java
│ │ │ │ └── ContributorPresenter.java
│ │ │ │ ├── ContributorApplication.java
│ │ │ │ └── ui
│ │ │ │ ├── ContributorFragment.java
│ │ │ │ └── ContributorAdapter.java
│ │ ├── test
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── chinalwb
│ │ │ │ └── wanandroid_contributor
│ │ │ │ └── ExampleUnitTest.java
│ │ └── androidTest
│ │ │ └── java
│ │ │ └── com
│ │ │ └── chinalwb
│ │ │ └── wanandroid_contributor
│ │ │ └── ExampleInstrumentedTest.java
│ ├── proguard-rules.pro
│ └── build.gradle
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── settings.gradle
├── .gitignore
├── .idea
│ ├── runConfigurations.xml
│ ├── gradle.xml
│ ├── codeStyles
│ │ └── Project.xml
│ └── misc.xml
├── gradle.properties
├── build.gradle
└── gradlew.bat
├── .DS_Store
├── images
├── as.png
├── gzh.png
├── main.png
├── nav.png
├── test.png
├── test2.png
├── test3.png
├── newModule.png
├── projects.png
├── contributor.png
├── newModule2.png
└── constructure.png
├── wanandroid.key
├── .idea
├── vcs.xml
├── modules.xml
└── codeStyles
│ └── Project.xml
├── .gitignore
└── notes.md
/WanAndroid/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/.DS_Store
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/images/as.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/as.png
--------------------------------------------------------------------------------
/images/gzh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/gzh.png
--------------------------------------------------------------------------------
/images/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/main.png
--------------------------------------------------------------------------------
/images/nav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/nav.png
--------------------------------------------------------------------------------
/images/test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/test.png
--------------------------------------------------------------------------------
/wanandroid.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/wanandroid.key
--------------------------------------------------------------------------------
/images/test2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/test2.png
--------------------------------------------------------------------------------
/images/test3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/test3.png
--------------------------------------------------------------------------------
/images/newModule.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/newModule.png
--------------------------------------------------------------------------------
/images/projects.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/projects.png
--------------------------------------------------------------------------------
/images/contributor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/contributor.png
--------------------------------------------------------------------------------
/images/newModule2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/newModule2.png
--------------------------------------------------------------------------------
/images/constructure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/images/constructure.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | wanandroid_base
3 |
4 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | wanandroid_gzh
3 |
4 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | wanandroid_test
3 |
4 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | wanandroid_tree
3 |
4 |
--------------------------------------------------------------------------------
/WanAndroid/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | wanandroid_projects
3 |
4 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/drawable/chinalwb.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/drawable/chinalwb.jpeg
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/drawable-xhdpi/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/drawable-xhdpi/logo.png
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':wanandroid_projects', ':wanandroid_base', ':wanandroid_tree', ':wanandroid_gzh', ':wanandroid_contributor', ':wanandroid_test'
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/drawable/favorite_no.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_base/src/main/res/drawable/favorite_no.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/drawable/favorite_yes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_base/src/main/res/drawable/favorite_yes.png
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/base/BasePresenter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.base;
2 |
3 | public interface BasePresenter {
4 | void start();
5 | }
6 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/drawable/contributor_chinalwb.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_base/src/main/res/drawable/contributor_chinalwb.jpeg
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_gzh/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_tree/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_projects/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chinalwb/modularized_wan_android/HEAD/WanAndroid/wanandroid_contributor/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/WanAndroid/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches/build_file_checksums.ser
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | .DS_Store
9 | /build
10 | /captures
11 | .externalNativeBuild
12 |
--------------------------------------------------------------------------------
/WanAndroid/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/base/BaseView.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.base;
2 |
3 | public interface BaseView {
4 |
5 | void setPresenter(T presenter);
6 |
7 | void showError(Throwable error);
8 | }
9 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #008577
4 | #00574B
5 | #D81B60
6 |
7 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #008577
4 | #00574B
5 | #D81B60
6 |
7 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #008577
4 | #00574B
5 | #D81B60
6 |
7 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #008577
4 | #00574B
5 | #D81B60
6 |
7 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #008577
4 | #00574B
5 | #D81B60
6 | #1F5B89
7 |
8 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/services/navigation/INavigationViewService.java:
--------------------------------------------------------------------------------
1 | //package com.chinalwb.wanandroid_base.services;
2 | //
3 | //import java.util.List;
4 | //
5 | //public interface INavigationViewService {
6 | //
7 | // List getNavigationViewItemList();
8 | //
9 | //}
10 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/base/Constants.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.base;
2 |
3 | import android.graphics.Color;
4 |
5 | public class Constants {
6 | public static final int COLOR_WX = Color.parseColor("#439057");
7 | public static final int COLOR_WAN = Color.parseColor("#1F5B89");
8 | }
9 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/java/com/chinalwb/wanandroid/main/api/IArticlesApi.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid.main.api;
2 |
3 | import com.chinalwb.wanandroid_base.features.article.model.ArticlesResponse;
4 |
5 | import retrofit2.Call;
6 | import retrofit2.http.GET;
7 | import retrofit2.http.Path;
8 |
9 | public interface IArticlesApi {
10 |
11 | @GET("article/list/{page}/json")
12 | Call listArticles(@Path("page") int page);
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/layout/contributor_fragment_contributor.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/java/com/chinalwb/wanandroid_projects/api/IProjectsApi.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_projects.api;
2 |
3 | import com.chinalwb.wanandroid_base.features.article.model.ArticlesResponse;
4 |
5 | import retrofit2.Call;
6 | import retrofit2.http.GET;
7 | import retrofit2.http.Path;
8 |
9 | public interface IProjectsApi {
10 |
11 | @GET("article/listproject/{page}/json")
12 | Call listProjects(@Path("page") int page);
13 | }
14 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | I didn\'t stop this project, I am just working on other most important things to myself, I probably could not be able to fix your issues or enchements requests but I will provide my suggest if I could or just check in the fix to master. I will make it more stable and usable and with more features, I have plan but sorry I have no time schedule for now, welcome form and join me.
3 |
4 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/layout/gzh_fragment_wx_gzh.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/test/java/com/chinalwb/wanandroid/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid;
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 | }
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/menu/base_menu_more.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/src/main/res/layout/test_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
13 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/test/java/com/chinalwb/wanandroid_gzh/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh;
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 | }
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/test/java/com/chinalwb/wanandroid_base/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base;
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 | }
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/src/test/java/com/chinalwb/wanandroid_test/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_test;
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 | }
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/test/java/com/chinalwb/wanandroid_tree/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_tree;
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 | }
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/Util.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base;
2 |
3 | import android.content.Context;
4 | import android.content.res.Resources;
5 | import android.widget.Toast;
6 |
7 | public class Util {
8 | public static void toast(Context context, String msg) {
9 | Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
10 | }
11 |
12 | public static float dp2px(int dp) {
13 | return Resources.getSystem().getDisplayMetrics().density * dp;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/test/java/com/chinalwb/wanandroid_projects/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_projects;
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 | }
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | WanAndroid
3 |
4 | Open navigation drawer
5 | Close navigation drawer
6 |
7 | 首页
8 | 项目
9 | 公众号
10 |
11 | 其他
12 | 记事本
13 | 关于
14 |
15 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
12 |
13 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/test/java/com/chinalwb/wanandroid_contributor/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_contributor;
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 | }
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/layout/fragment_tree.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
14 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/features/article/model/Tag.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.features.article.model;
2 |
3 | public class Tag {
4 |
5 | private String name;
6 | private String url;
7 |
8 | public String getName() {
9 | return name;
10 | }
11 |
12 | public void setName(String name) {
13 | this.name = name;
14 | }
15 |
16 | public String getUrl() {
17 | return url;
18 | }
19 |
20 | public void setUrl(String url) {
21 | this.url = url;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/layout/base_toolbar_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/presenter/WxContract.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.presenter;
2 |
3 | import com.chinalwb.wanandroid_base.base.BasePresenter;
4 | import com.chinalwb.wanandroid_base.base.BaseView;
5 | import com.chinalwb.wanandroid_gzh.model.GzhTab;
6 |
7 | import java.util.List;
8 |
9 | public interface WxContract {
10 |
11 | interface Presenter extends BasePresenter {
12 | void loadGzhTabs();
13 | }
14 |
15 | interface View extends BaseView {
16 | void showGzhTabs(List gzhTabList);
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/WanAndroid/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/layout/base_fragment_article_detail.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/api/IGzhApi.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.api;
2 |
3 | import com.chinalwb.wanandroid_base.features.article.model.ArticlesResponse;
4 | import com.chinalwb.wanandroid_gzh.model.GzhListResponse;
5 |
6 | import retrofit2.Call;
7 | import retrofit2.http.GET;
8 | import retrofit2.http.Path;
9 |
10 | public interface IGzhApi {
11 |
12 | @GET("wxarticle/chapters/json")
13 | Call loadGzhTabs();
14 |
15 | @GET("wxarticle/list/{gzhId}/{page}/json")
16 | Call loadGzhArticles(@Path("gzhId") int gzhId, @Path("page") int page);
17 | }
18 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/layout/projects_fragment_projects.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/BaseApplication.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base;
2 |
3 | import android.app.Application;
4 |
5 | // TODO annotation - dynamic inject the service data into main app
6 | //
7 | // Note: (2019-01-05)
8 | // 1. I forget why I wanted to use annotation, I only remember
9 | // I want to get rid of reflection and android.app.Application.
10 | //
11 | // 2. This can be just an interface rather than extends Application
12 | // For example, all modules just needs implement this interface
13 | public abstract class BaseApplication extends Application {
14 |
15 | public abstract void initServiceData();
16 | }
17 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/java/com/chinalwb/wanandroid_contributor/presenter/ContributorContract.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_contributor.presenter;
2 |
3 | import com.chinalwb.wanandroid_base.base.BasePresenter;
4 | import com.chinalwb.wanandroid_base.base.BaseView;
5 | import com.chinalwb.wanandroid_base.services.contributor.ContributorItem;
6 |
7 | import java.util.List;
8 |
9 | public interface ContributorContract {
10 | interface View extends BaseView {
11 | void showContributors(List contributorItemList);
12 | }
13 |
14 | interface Presenter extends BasePresenter {
15 | void loadContributors();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/features/detail/presenter/ArticleDetailContract.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.features.detail.presenter;
2 |
3 | import android.content.Context;
4 |
5 | import com.chinalwb.wanandroid_base.base.BasePresenter;
6 | import com.chinalwb.wanandroid_base.base.BaseView;
7 |
8 | public interface ArticleDetailContract {
9 |
10 | interface Presenter extends BasePresenter {
11 | void save(Context context, String url, String fileName);
12 | void share(Context context, String url, String title);
13 | }
14 |
15 | interface View extends BaseView {
16 | void showSaveResult(boolean result);
17 | void showShareResult(boolean result);
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/services/contributor/ContributorService.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.services.contributor;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public class ContributorService {
7 |
8 | private List contributorItemList = new ArrayList<>();
9 |
10 | private ContributorService() {}
11 |
12 | public static ContributorService getInstance() {
13 | return Inner.contributorService;
14 | }
15 |
16 | private static class Inner {
17 | private static ContributorService contributorService = new ContributorService();
18 | }
19 |
20 | public List getContributorItemList() {
21 | return this.contributorItemList;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/presenter/WxGzhContract.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.presenter;
2 |
3 | import com.chinalwb.wanandroid_base.base.BasePresenter;
4 | import com.chinalwb.wanandroid_base.base.BaseView;
5 | import com.chinalwb.wanandroid_base.features.article.model.Article;
6 |
7 | import java.util.List;
8 |
9 | public interface WxGzhContract {
10 |
11 | interface Presenter extends BasePresenter {
12 | void loadArticles(int gzhId, int page);
13 | void loadNextPageArticles();
14 | }
15 |
16 | interface View extends BaseView {
17 | void showArticles(List articleList);
18 | void appendArticles(List articleList);
19 | void showLoading();
20 | void hideLoading();
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/java/com/chinalwb/wanandroid/main/presenter/ArticlesContract.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid.main.presenter;
2 |
3 | import com.chinalwb.wanandroid_base.base.BasePresenter;
4 | import com.chinalwb.wanandroid_base.base.BaseView;
5 | import com.chinalwb.wanandroid_base.features.article.model.Article;
6 |
7 | import java.util.List;
8 |
9 | public interface ArticlesContract {
10 |
11 | interface Presenter extends BasePresenter {
12 | void loadArticles(int page);
13 | void loadNextPageArticles();
14 | void refreshArticles();
15 | }
16 |
17 | interface View extends BaseView {
18 | void appendArticles(List articleList);
19 | void showArticles(List articleList);
20 | void showLoading();
21 | void hideLoading();
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/features/article/model/ArticlesResponse.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.features.article.model;
2 |
3 | public class ArticlesResponse {
4 |
5 | private Data data;
6 | private int errorCode;
7 | private String errorMsg;
8 |
9 | public Data getData() {
10 | return data;
11 | }
12 |
13 | public void setData(Data data) {
14 | this.data = data;
15 | }
16 |
17 | public int getErrorCode() {
18 | return errorCode;
19 | }
20 |
21 | public void setErrorCode(int errorCode) {
22 | this.errorCode = errorCode;
23 | }
24 |
25 | public String getErrorMsg() {
26 | return errorMsg;
27 | }
28 |
29 | public void setErrorMsg(String errorMsg) {
30 | this.errorMsg = errorMsg;
31 | }
32 | }
--------------------------------------------------------------------------------
/WanAndroid/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 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/model/GzhListResponse.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.model;
2 |
3 | import java.util.List;
4 |
5 | public class GzhListResponse {
6 | private List data;
7 | private int errorCode;
8 | private String errorMsg;
9 |
10 | public List getData() {
11 | return data;
12 | }
13 |
14 | public void setData(List data) {
15 | this.data = data;
16 | }
17 |
18 | public int getErrorCode() {
19 | return errorCode;
20 | }
21 |
22 | public void setErrorCode(int errorCode) {
23 | this.errorCode = errorCode;
24 | }
25 |
26 | public String getErrorMsg() {
27 | return errorMsg;
28 | }
29 |
30 | public void setErrorMsg(String errorMsg) {
31 | this.errorMsg = errorMsg;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/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 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/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 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/java/com/chinalwb/wanandroid_projects/presenter/ProjectsContract.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_projects.presenter;
2 |
3 | import com.chinalwb.wanandroid_base.base.BasePresenter;
4 | import com.chinalwb.wanandroid_base.base.BaseView;
5 | import com.chinalwb.wanandroid_base.features.article.model.Article;
6 |
7 | import java.util.List;
8 |
9 | public interface ProjectsContract {
10 |
11 | interface Presenter extends BasePresenter {
12 | void loadProjects(int page);
13 | void loadNextPageProjects();
14 | void refreshProjects();
15 | }
16 |
17 | interface View extends BaseView {
18 | void appendProjects(List projectList);
19 | void showProjects(List projectList);
20 | void showLoading();
21 | void hideLoading();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/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 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/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 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/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 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/services/navigation/NavigationViewService.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.services.navigation;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public class NavigationViewService {
7 |
8 | private NavigationViewService() {
9 | // Private Inner Constructor
10 | }
11 |
12 | public static NavigationViewService getInstance() {
13 | return Inner.navigationViewService;
14 | }
15 |
16 | private static class Inner {
17 | private static NavigationViewService navigationViewService = new NavigationViewService();
18 | }
19 |
20 | private List navigationViewItemList = new ArrayList<>();
21 |
22 | public List getNavigationViewItemList() {
23 | return navigationViewItemList;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/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 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/AppConfig.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base;
2 |
3 | public class AppConfig {
4 |
5 | private static final String MODULE_PROJECT = "com.chinalwb.wanandroid_projects.ProjectApplication";
6 | private static final String MODULE_TREE = "com.chinalwb.wanandroid_tree.TreeApplication";
7 | private static final String MODULE_GZH = "com.chinalwb.wanandroid_gzh.GzhApplication";
8 | private static final String MODULE_CONTRIBUTOR = "com.chinalwb.wanandroid_contributor.ContributorApplication";
9 | private static final String MODULE_TEST = "com.chinalwb.wanandroid_test.TestApplication";
10 |
11 | public static String[] MODULES = {
12 | MODULE_PROJECT,
13 | MODULE_TREE,
14 | MODULE_GZH,
15 | MODULE_CONTRIBUTOR,
16 | MODULE_TEST
17 | };
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/androidTest/java/com/chinalwb/wanandroid/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid;
2 |
3 | import android.content.Context;
4 | import androidx.test.InstrumentationRegistry;
5 | import androidx.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.chinalwb.wanandroid", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/layout/fragment_articles_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/src/main/java/com/chinalwb/wanandroid_test/TestFragment.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_test;
2 |
3 | import android.os.Bundle;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import androidx.annotation.NonNull;
9 | import androidx.annotation.Nullable;
10 | import androidx.fragment.app.Fragment;
11 |
12 | public class TestFragment extends Fragment {
13 |
14 | public TestFragment() {
15 |
16 | }
17 |
18 | public static TestFragment newInstance() {
19 | return new TestFragment();
20 | }
21 |
22 | @Nullable
23 | @Override
24 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
25 | View view = inflater.inflate(R.layout.test_fragment, container, false);
26 | return view;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/WanAndroid/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 | android.enableJetifier=true
10 | android.useAndroidX=true
11 | org.gradle.jvmargs=-Xmx1536m
12 | # When configured, Gradle will run in incubating parallel mode.
13 | # This option should only be used with decoupled projects. More details, visit
14 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
15 | # org.gradle.parallel=true
16 | # android.useAndroidX=true
17 | # android.enableJetifier=true
18 |
19 |
20 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/androidTest/java/com/chinalwb/wanandroid_gzh/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh;
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.chinalwb.wanandroid_gzh", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/androidTest/java/com/chinalwb/wanandroid_tree/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_tree;
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.chinalwb.wanandroid_tree", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/androidTest/java/com/chinalwb/wanandroid_base/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base;
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.chinalwb.wanandroid_base.test", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/src/androidTest/java/com/chinalwb/wanandroid_test/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_test;
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.chinalwb.wanandroid_test.test", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/androidTest/java/com/chinalwb/wanandroid_projects/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_projects;
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.chinalwb.wanandroid_projects", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/androidTest/java/com/chinalwb/wanandroid_contributor/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_contributor;
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.chinalwb.wanandroid_contributor", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/menu/menu_nav.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/layout/gzh_fragment_wx.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
18 |
19 |
24 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/ServiceProvider.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base;
2 |
3 | import com.chinalwb.wanandroid_base.services.contributor.ContributorService;
4 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewService;
5 |
6 | public class ServiceProvider {
7 |
8 | public static NavigationViewService getNavigationViewService() {
9 | return NavigationViewService.getInstance();
10 | }
11 |
12 | public static ContributorService getContributorService() {
13 | return ContributorService.getInstance();
14 | }
15 |
16 | private ServiceProvider serviceProvider;
17 |
18 | private ServiceProvider() {
19 | // Private inner constructor
20 | }
21 |
22 | public static ServiceProvider getInstance() {
23 | return Inner.serviceProvider;
24 | }
25 |
26 | private static class Inner {
27 | private static ServiceProvider serviceProvider = new ServiceProvider();
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 28
5 |
6 |
7 |
8 | defaultConfig {
9 | minSdkVersion 19
10 | targetSdkVersion 28
11 | versionCode 1
12 | versionName "1.0"
13 |
14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
15 |
16 | }
17 |
18 | buildTypes {
19 | release {
20 | minifyEnabled false
21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
22 | }
23 | }
24 |
25 | }
26 |
27 | dependencies {
28 | implementation fileTree(dir: 'libs', include: ['*.jar'])
29 | implementation 'androidx.appcompat:appcompat:1.0.0-alpha1'
30 | implementation project(':wanandroid_base')
31 | testImplementation 'junit:junit:4.12'
32 | androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
33 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
34 | }
35 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/java/com/chinalwb/wanandroid_tree/ui/TreeFragment.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_tree.ui;
2 |
3 | import android.os.Bundle;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import com.chinalwb.wanandroid_tree.R;
9 |
10 | import androidx.annotation.NonNull;
11 | import androidx.annotation.Nullable;
12 | import androidx.fragment.app.Fragment;
13 |
14 | public class TreeFragment extends Fragment {
15 |
16 | public TreeFragment() {
17 | // Required public empty constructor
18 | }
19 |
20 | public static TreeFragment getInstance() {
21 | return new TreeFragment();
22 | }
23 |
24 | @Nullable
25 | @Override
26 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
27 | @Nullable Bundle savedInstanceState) {
28 | View view = inflater.inflate(R.layout.fragment_tree, container, false);
29 | return view;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/WanAndroid/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/java/com/chinalwb/wanandroid_tree/TreeApplication.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_tree;
2 |
3 | import com.chinalwb.wanandroid_base.BaseApplication;
4 | import com.chinalwb.wanandroid_base.ServiceProvider;
5 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewService;
6 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewItem;
7 | import com.chinalwb.wanandroid_tree.ui.TreeFragment;
8 |
9 | import java.util.List;
10 |
11 | public class TreeApplication extends BaseApplication {
12 | @Override
13 | public void initServiceData() {
14 |
15 | NavigationViewService navigationViewService = ServiceProvider.getNavigationViewService();
16 | List navigationViewItemList = navigationViewService.getNavigationViewItemList();
17 |
18 | NavigationViewItem navigationViewItem = new NavigationViewItem(
19 | 1,
20 | R.id.nav_tree,
21 | 3,
22 | "体系"
23 | );
24 |
25 | navigationViewItem.setFragment(TreeFragment.getInstance());
26 |
27 | navigationViewItemList.add(navigationViewItem);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/java/com/chinalwb/wanandroid_contributor/presenter/ContributorPresenter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_contributor.presenter;
2 |
3 | import com.chinalwb.wanandroid_base.ServiceProvider;
4 | import com.chinalwb.wanandroid_base.services.contributor.ContributorItem;
5 | import com.chinalwb.wanandroid_base.services.contributor.ContributorService;
6 |
7 | import java.util.List;
8 |
9 | public class ContributorPresenter implements ContributorContract.Presenter {
10 |
11 | private ContributorContract.View view;
12 | private ContributorService contributorService;
13 |
14 | public ContributorPresenter(ContributorContract.View view, ContributorService contributorService) {
15 | this.view = view;
16 | this.contributorService = contributorService;
17 | this.view.setPresenter(this);
18 | }
19 |
20 | @Override
21 | public void loadContributors() {
22 | List contributorItemList = contributorService.getContributorItemList();
23 | view.showContributors(contributorItemList);
24 | }
25 |
26 | @Override
27 | public void start() {
28 | this.loadContributors();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the ART/Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # Generated files
12 | bin/
13 | gen/
14 | out/
15 |
16 | # Gradle files
17 | .gradle/
18 | build/
19 |
20 | # Local configuration file (sdk path, etc)
21 | local.properties
22 |
23 | # Proguard folder generated by Eclipse
24 | proguard/
25 |
26 | # Log Files
27 | *.log
28 |
29 | # Android Studio Navigation editor temp files
30 | .navigation/
31 |
32 | # Android Studio captures folder
33 | captures/
34 |
35 | # IntelliJ
36 | *.iml
37 | .idea/workspace.xml
38 | .idea/tasks.xml
39 | .idea/gradle.xml
40 | .idea/assetWizardSettings.xml
41 | .idea/dictionaries
42 | .idea/libraries
43 | .idea/caches
44 |
45 | # Keystore files
46 | # Uncomment the following line if you do not want to check your keystore files in.
47 | #*.jks
48 |
49 | # External native build folder generated in Android Studio 2.2 and later
50 | .externalNativeBuild
51 |
52 | # Google Services (e.g. APIs or Firebase)
53 | google-services.json
54 |
55 | # Freeline
56 | freeline.py
57 | freeline/
58 | freeline_project_description.json
59 |
60 | # fastlane
61 | fastlane/report.xml
62 | fastlane/Preview.html
63 | fastlane/screenshots
64 | fastlane/test_output
65 | fastlane/readme.md
66 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.jakewharton.butterknife'
3 |
4 | android {
5 | compileSdkVersion 28
6 |
7 |
8 |
9 | defaultConfig {
10 | minSdkVersion 19
11 | targetSdkVersion 28
12 | versionCode 1
13 | versionName "1.0"
14 |
15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
16 |
17 | }
18 |
19 | buildTypes {
20 | release {
21 | minifyEnabled false
22 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23 | }
24 | }
25 |
26 | }
27 |
28 | dependencies {
29 | implementation fileTree(include: ['*.jar'], dir: 'libs')
30 | testImplementation 'junit:junit:4.12'
31 | androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
32 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
33 | implementation project(':wanandroid_base')
34 |
35 | commonDependencies.each { key, value ->
36 | if (key.endsWith('Anno')) {
37 | annotationProcessor value
38 | } else if (key.endsWith('Impl')) {
39 | implementation value
40 | } else if (key.endsWith('Api')) {
41 | api value
42 | }
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.jakewharton.butterknife'
3 |
4 | android {
5 | compileSdkVersion 28
6 |
7 |
8 |
9 | defaultConfig {
10 | minSdkVersion 19
11 | targetSdkVersion 28
12 | versionCode 1
13 | versionName "1.0"
14 |
15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
16 |
17 | }
18 |
19 | buildTypes {
20 | release {
21 | minifyEnabled false
22 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23 | }
24 | }
25 |
26 | }
27 |
28 | dependencies {
29 | implementation fileTree(dir: 'libs', include: ['*.jar'])
30 | testImplementation 'junit:junit:4.12'
31 | androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
32 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
33 |
34 | implementation project(':wanandroid_base')
35 |
36 | commonDependencies.each { key, value ->
37 | if (key.endsWith('Anno')) {
38 | annotationProcessor value
39 | } else if (key.endsWith('Impl')) {
40 | implementation value
41 | } else if (key.endsWith('Api')) {
42 | api value
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.jakewharton.butterknife'
3 |
4 | android {
5 | compileSdkVersion 28
6 |
7 |
8 |
9 | defaultConfig {
10 | minSdkVersion 19
11 | targetSdkVersion 28
12 | versionCode 1
13 | versionName "1.0"
14 |
15 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
16 |
17 | }
18 |
19 | buildTypes {
20 | release {
21 | minifyEnabled false
22 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23 | }
24 | }
25 |
26 | }
27 |
28 | dependencies {
29 | implementation fileTree(dir: 'libs', include: ['*.jar'])
30 |
31 | testImplementation 'junit:junit:4.12'
32 | androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
33 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
34 |
35 | implementation project(':wanandroid_base')
36 |
37 | commonDependencies.each { key, value ->
38 | if (key.endsWith('Anno')) {
39 | annotationProcessor value
40 | } else if (key.endsWith('Impl')) {
41 | implementation value
42 | } else if (key.endsWith('Api')) {
43 | api value
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'com.jakewharton.butterknife'
3 |
4 |
5 | android {
6 | compileSdkVersion 28
7 |
8 |
9 |
10 | defaultConfig {
11 | minSdkVersion 19
12 | targetSdkVersion 28
13 | versionCode 1
14 | versionName "1.0"
15 |
16 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
17 |
18 | }
19 |
20 | buildTypes {
21 | release {
22 | minifyEnabled false
23 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
24 | }
25 | }
26 |
27 | }
28 |
29 | dependencies {
30 | implementation fileTree(dir: 'libs', include: ['*.jar'])
31 |
32 | commonDependencies.each { key, value ->
33 | if (key.endsWith('Anno')) {
34 | annotationProcessor value
35 | } else if (key.endsWith('Impl')) {
36 | implementation value
37 | } else if (key.endsWith('Api')) {
38 | api value
39 | }
40 | }
41 |
42 | implementation 'androidx.appcompat:appcompat:1.0.0-alpha1'
43 | testImplementation 'junit:junit:4.12'
44 | androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
45 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
46 | }
47 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 28
5 |
6 |
7 |
8 | defaultConfig {
9 | minSdkVersion 19
10 | targetSdkVersion 28
11 | versionCode 1
12 | versionName "1.0"
13 |
14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
15 |
16 | }
17 |
18 | buildTypes {
19 | release {
20 | minifyEnabled false
21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
22 | }
23 | }
24 |
25 | }
26 |
27 | dependencies {
28 | implementation fileTree(dir: 'libs', include: ['*.jar'])
29 |
30 | implementation 'androidx.appcompat:appcompat:1.0.0-alpha1'
31 | testImplementation 'junit:junit:4.12'
32 | androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
33 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
34 |
35 | implementation project(':wanandroid_base')
36 |
37 | commonDependencies.each { key, value ->
38 | if (key.endsWith('Anno')) {
39 | annotationProcessor value
40 | } else if (key.endsWith('Impl')) {
41 | implementation value
42 | } else if (key.endsWith('Api')) {
43 | api value
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/base/RetrofitClient.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.base;
2 |
3 | import android.util.Log;
4 |
5 | import java.util.logging.Logger;
6 |
7 | import okhttp3.OkHttpClient;
8 | import okhttp3.logging.HttpLoggingInterceptor;
9 | import retrofit2.Retrofit;
10 | import retrofit2.converter.gson.GsonConverterFactory;
11 |
12 | public class RetrofitClient {
13 |
14 | private static final String BASE_URL = "http://www.wanandroid.com";
15 | private static Retrofit sRetrofit;
16 |
17 | public synchronized static Retrofit getRetrofit() {
18 | if (sRetrofit == null) {
19 | initInstance();
20 | }
21 |
22 | return sRetrofit;
23 | }
24 |
25 | private synchronized static void initInstance() {
26 | HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
27 | httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
28 | OkHttpClient client = new OkHttpClient.Builder()
29 | .addInterceptor(httpLoggingInterceptor)
30 | .build();
31 |
32 | sRetrofit = new Retrofit.Builder()
33 | .baseUrl(BASE_URL)
34 | .addConverterFactory(GsonConverterFactory.create())
35 | .client(client)
36 | .build();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/presenter/WxPresenter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.presenter;
2 |
3 | import com.chinalwb.wanandroid_gzh.api.IGzhApi;
4 | import com.chinalwb.wanandroid_gzh.model.GzhListResponse;
5 |
6 | import retrofit2.Call;
7 | import retrofit2.Callback;
8 | import retrofit2.Response;
9 |
10 | public class WxPresenter implements WxContract.Presenter {
11 |
12 | private IGzhApi gzhApi;
13 | private WxContract.View wxView;
14 |
15 | public WxPresenter(IGzhApi gzhApi, WxContract.View view) {
16 | this.gzhApi = gzhApi;
17 | this.wxView = view;
18 | this.wxView.setPresenter(this);
19 | }
20 |
21 | @Override
22 | public void loadGzhTabs() {
23 | Call call = this.gzhApi.loadGzhTabs();
24 | call.enqueue(new Callback() {
25 | @Override
26 | public void onResponse(Call call, Response response) {
27 | wxView.showGzhTabs(response.body().getData());
28 | }
29 |
30 | @Override
31 | public void onFailure(Call call, Throwable t) {
32 | wxView.showError(t);
33 | }
34 | });
35 | }
36 |
37 | @Override
38 | public void start() {
39 | loadGzhTabs();
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/layout/nav_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
17 |
18 |
24 |
30 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/notes.md:
--------------------------------------------------------------------------------
1 | Todo:
2 |
3 | 0. √ CardView 加: 公众号 、 作者、分类、时间。
4 | 1. √ 主页面的CoordinatorLayout -> hide toolbar
5 | 2. √ NavigationDrawer
6 | 3. √ 首页(文章) | 公众号
7 | 4. √ 公众号 (TabHost + ViewPager)
8 | 5. √ 文章详情
9 | 6. √ MPV
10 | 7. √ 组件化
11 | 8. √ 贡献者
12 | 9. 本地缓存
13 | 10. 启动页
14 | 11. Banner
15 | 12. 多渠道打包
16 | 13. 自定义View - 图标(新)等
17 | 14. RecyclerView显示动画
18 | 15. 页面切换过渡动画
19 | 16. Behavior
20 | 17. 引入RxJava
21 |
22 | Issues:
23 | 1. 屏幕切换
24 | 2. RecylerAdapter.ViewHolder setOnClickListener 的最佳实践?
25 | > 由于 onCreateViewHolder 和 onBindViewHolder 都会被多次调用,直接在这两个方法中 new 一个onClickListener 的实例都会造成对象的反复创建和销毁
26 | 所以相对比较好的做法就是在 Adapter 中定义一个接口回调方法,并在 Adapter 中实例化一个这个接口类型的成员变量
27 | 在 onCreateViewHolder 方法中调用 ViewHolder 的构造方法,传递这个 listener 的引用给 ViewHolder
28 | 在 ViewHolder 的构造方法中为 view 设定 setOnClickListener, 在 onClick 中调用这个接口的回调,把 view 和 `getLayoutPosition()` 传递给回调方法
29 | 这样在回调方法中就可以根据传入的view和pos,得到点击的view和位置,做出相关处理。
30 | 示例代码: [ArticlesListAdapter.java](https://github.com/chinalwb/wan_android/blob/a1923244afb3d7a2097f516e2db2704d2bcd1b48/WanAndroid/app/src/main/java/com/chinalwb/wanandroid/main/ui/ArticlesListAdapter.java)
31 |
32 | 3. Glide
33 | 4. Retrofit
34 | 5. OKHttp
35 | 6. ARouter
36 |
37 | Notes:
38 | 1. Fragment#setArguments(Bundle bundle) 跟 直接在Fragment中加上一个setter/getter有什么区别?
39 | A: 区别在于,setArguments设定的参数,在Fragment经历destroy和re-create的过程中会被保存下来,这些参数不需要程序在 onSaveInstanceState 方法中做特殊的处理,就可以在下一次 onCreate 的时候继续获取。对比来说, 如果用setter/getter来存取的话,需要自己考虑 onSaveInstanceState 的实现。
40 |
41 | ### 注意事项
42 | 1. 不要在子组件styles.xml中添加theme, app组件需要用base里面的theme
43 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/features/article/model/Data.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.features.article.model;
2 |
3 | import java.util.List;
4 |
5 | public class Data {
6 |
7 | private int curPage;
8 | private int offset;
9 | private boolean over;
10 | private int pageCount;
11 | private int size;
12 | private int total;
13 | private List datas;
14 |
15 | public int getCurPage() {
16 | return curPage;
17 | }
18 |
19 | public void setCurPage(int curPage) {
20 | this.curPage = curPage;
21 | }
22 |
23 | public int getOffset() {
24 | return offset;
25 | }
26 |
27 | public void setOffset(int offset) {
28 | this.offset = offset;
29 | }
30 |
31 | public boolean isOver() {
32 | return over;
33 | }
34 |
35 | public void setOver(boolean over) {
36 | this.over = over;
37 | }
38 |
39 | public int getPageCount() {
40 | return pageCount;
41 | }
42 |
43 | public void setPageCount(int pageCount) {
44 | this.pageCount = pageCount;
45 | }
46 |
47 | public int getSize() {
48 | return size;
49 | }
50 |
51 | public void setSize(int size) {
52 | this.size = size;
53 | }
54 |
55 | public int getTotal() {
56 | return total;
57 | }
58 |
59 | public void setTotal(int total) {
60 | this.total = total;
61 | }
62 |
63 | public List getDatas() {
64 | return datas;
65 | }
66 |
67 | public void setDatas(List datas) {
68 | this.datas = datas;
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/features/detail/presenter/ArticleDetailPresenter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.features.detail.presenter;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 |
6 | import com.chinalwb.wanandroid_base.base.DownloadTask;
7 |
8 | public class ArticleDetailPresenter implements ArticleDetailContract.Presenter {
9 |
10 | private ArticleDetailContract.View mView;
11 |
12 | public ArticleDetailPresenter(ArticleDetailContract.View view) {
13 | this.mView = view;
14 | this.mView.setPresenter(this);
15 | }
16 |
17 | @Override
18 | public void save(Context context, String url, String fileName) {
19 | DownloadTask downloadTask = new DownloadTask(context, new DownloadTask.DownloadListener() {
20 | @Override
21 | public void onSuccess() {
22 | mView.showSaveResult(true);
23 | }
24 |
25 | @Override
26 | public void onFailure() {
27 | mView.showSaveResult(false);
28 | }
29 | });
30 |
31 | downloadTask.execute(url, fileName);
32 | }
33 |
34 | @Override
35 | public void share(Context context, String url, String title) {
36 | Intent intent = new Intent(Intent.ACTION_SEND);
37 | intent.putExtra(Intent.EXTRA_TEXT, "[WanAndroid]" + title + " : " + url);
38 | Intent shareIntent = intent.createChooser(intent, "Share");
39 | context.startActivity(shareIntent);
40 | }
41 |
42 | @Override
43 | public void start() {
44 | // Do nothing in start.
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/WanAndroid/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 28
5 | defaultConfig {
6 | applicationId "com.chinalwb.wanandroid"
7 | minSdkVersion 19
8 | targetSdkVersion 28
9 | versionCode 1
10 | versionName "1.0"
11 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
12 | }
13 | buildTypes {
14 | release {
15 | minifyEnabled false
16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
17 | }
18 | }
19 |
20 | compileOptions {
21 | sourceCompatibility JavaVersion.VERSION_1_8
22 | targetCompatibility JavaVersion.VERSION_1_8
23 | }
24 | }
25 |
26 | dependencies {
27 | implementation fileTree(include: ['*.jar'], dir: 'libs')
28 |
29 | commonDependencies.each { key, value ->
30 | if (key.endsWith('Anno')) {
31 | annotationProcessor value
32 | } else if (key.endsWith('Impl')) {
33 | implementation value
34 | } else if (key.endsWith('Api')) {
35 | api value
36 | }
37 | }
38 |
39 | testImplementation 'junit:junit:4.12'
40 | androidTestImplementation 'androidx.test:runner:1.1.1'
41 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
42 | implementation project(':wanandroid_base')
43 | implementation project(':wanandroid_projects')
44 | implementation project(':wanandroid_tree')
45 | implementation project(':wanandroid_gzh')
46 | implementation project(':wanandroid_contributor')
47 | implementation project(':wanandroid_test')
48 | }
49 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/services/contributor/ContributorItem.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.services.contributor;
2 |
3 | public class ContributorItem {
4 |
5 | private String avatarUrl;
6 |
7 | private String author;
8 |
9 | private String componentName;
10 |
11 | private String componentDesc;
12 |
13 | private String github;
14 |
15 | public ContributorItem(String avatarUrl, String author, String componentName, String componentDesc, String github) {
16 | this.avatarUrl = avatarUrl;
17 | this.author = author;
18 | this.componentName = componentName;
19 | this.componentDesc = componentDesc;
20 | this.github = github;
21 | }
22 |
23 | public String getAvatarUrl() {
24 | return avatarUrl;
25 | }
26 |
27 | public void setAvatarUrl(String avatarUrl) {
28 | this.avatarUrl = avatarUrl;
29 | }
30 |
31 | public String getGithub() {
32 | return github;
33 | }
34 |
35 | public void setGithub(String github) {
36 | this.github = github;
37 | }
38 |
39 | public String getAuthor() {
40 | return author;
41 | }
42 |
43 | public void setAuthor(String author) {
44 | this.author = author;
45 | }
46 |
47 | public String getComponentName() {
48 | return componentName;
49 | }
50 |
51 | public void setComponentName(String componentName) {
52 | this.componentName = componentName;
53 | }
54 |
55 | public String getComponentDesc() {
56 | return componentDesc;
57 | }
58 |
59 | public void setComponentDesc(String componentDesc) {
60 | this.componentDesc = componentDesc;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/WanAndroid/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/ui/WxGzhPagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.ui;
2 |
3 | import androidx.annotation.Nullable;
4 | import androidx.fragment.app.Fragment;
5 | import androidx.fragment.app.FragmentManager;
6 | import androidx.fragment.app.FragmentPagerAdapter;
7 |
8 | import com.chinalwb.wanandroid_base.base.RetrofitClient;
9 | import com.chinalwb.wanandroid_gzh.api.IGzhApi;
10 | import com.chinalwb.wanandroid_gzh.model.GzhTab;
11 | import com.chinalwb.wanandroid_gzh.presenter.WxGzhPresenter;
12 |
13 | import java.util.List;
14 |
15 | public class WxGzhPagerAdapter extends FragmentPagerAdapter {
16 |
17 | private List gzhTabList;
18 | public WxGzhPagerAdapter(FragmentManager fragmentManager, List gzhTabList) {
19 | super(fragmentManager);
20 | this.gzhTabList = gzhTabList;
21 | }
22 |
23 | public void setGzhTabList(List gzhTabList) {
24 | this.gzhTabList = gzhTabList;
25 | this.notifyDataSetChanged();
26 | }
27 |
28 | @Nullable
29 | @Override
30 | public CharSequence getPageTitle(int position) {
31 | GzhTab gzhTab = this.gzhTabList.get(position);
32 | return gzhTab.getName();
33 | }
34 |
35 | @Override
36 | public Fragment getItem(int i) {
37 | GzhTab gzhTab = this.gzhTabList.get(i);
38 | WxGzhFragment wxGzhFragment = WxGzhFragment.newInstance();
39 | wxGzhFragment.setGzhTab(gzhTab);
40 |
41 | IGzhApi gzhApi = RetrofitClient.getRetrofit().create(IGzhApi.class);
42 | WxGzhPresenter presenter = new WxGzhPresenter(wxGzhFragment, gzhApi, gzhTab);
43 | return wxGzhFragment;
44 | }
45 |
46 | @Override
47 | public int getCount() {
48 | if (this.gzhTabList == null) {
49 | return 0;
50 | }
51 | return this.gzhTabList.size();
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_test/src/main/java/com/chinalwb/wanandroid_test/TestApplication.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_test;
2 |
3 | import com.chinalwb.wanandroid_base.BaseApplication;
4 | import com.chinalwb.wanandroid_base.ServiceProvider;
5 | import com.chinalwb.wanandroid_base.services.contributor.ContributorItem;
6 | import com.chinalwb.wanandroid_base.services.contributor.ContributorService;
7 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewItem;
8 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewService;
9 |
10 | import java.util.List;
11 |
12 | public class TestApplication extends BaseApplication {
13 | @Override
14 | public void initServiceData() {
15 | // 初始化 导航 数据
16 | NavigationViewService navigationViewService = ServiceProvider.getNavigationViewService();
17 | List navigationViewItemList = navigationViewService.getNavigationViewItemList();
18 |
19 | NavigationViewItem navigationViewItem = new NavigationViewItem(
20 | 1,
21 | R.id.nav_test,
22 | 99,
23 | "测试组件"
24 | );
25 | TestFragment testFragment = TestFragment.newInstance();
26 | navigationViewItem.setFragment(testFragment);
27 | navigationViewItemList.add(navigationViewItem);
28 |
29 | // 初始化 贡献者 数据
30 | ContributorService contributorService = ServiceProvider.getContributorService();
31 | List contributorItemList = contributorService.getContributorItemList();
32 | ContributorItem contributorItem = new ContributorItem(
33 | "http://www.wanandroid.com/resources/image/pc/logo.png",
34 | "你的名字",
35 | "测试组件",
36 | "这是一个测试组件!写完提PR哦!",
37 | "你的网址"
38 | );
39 | contributorItemList.add(contributorItem);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
16 |
17 |
21 |
22 |
26 |
27 |
28 |
29 |
35 |
36 |
37 |
38 |
45 |
46 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/model/GzhTab.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.model;
2 |
3 | import java.util.List;
4 |
5 | public class GzhTab {
6 |
7 | private List children;
8 | private int courseId;
9 | private int id;
10 | private String name;
11 | private long order;
12 | private int parentChapterId;
13 | private boolean userControlSetTop;
14 | private int visible;
15 | public void setChildren(List children) {
16 | this.children = children;
17 | }
18 | public List getChildren() {
19 | return children;
20 | }
21 |
22 | public void setCourseId(int courseId) {
23 | this.courseId = courseId;
24 | }
25 | public int getCourseId() {
26 | return courseId;
27 | }
28 |
29 | public void setId(int id) {
30 | this.id = id;
31 | }
32 | public int getId() {
33 | return id;
34 | }
35 |
36 | public void setName(String name) {
37 | this.name = name;
38 | }
39 | public String getName() {
40 | return name;
41 | }
42 |
43 | public void setOrder(long order) {
44 | this.order = order;
45 | }
46 | public long getOrder() {
47 | return order;
48 | }
49 |
50 | public void setParentChapterId(int parentChapterId) {
51 | this.parentChapterId = parentChapterId;
52 | }
53 | public int getParentChapterId() {
54 | return parentChapterId;
55 | }
56 |
57 | public void setUserControlSetTop(boolean userControlSetTop) {
58 | this.userControlSetTop = userControlSetTop;
59 | }
60 | public boolean getUserControlSetTop() {
61 | return userControlSetTop;
62 | }
63 |
64 | public void setVisible(int visible) {
65 | this.visible = visible;
66 | }
67 | public int getVisible() {
68 | return visible;
69 | }
70 |
71 | }
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_tree/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/WanAndroid/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 |
5 | repositories {
6 | maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
7 | google()
8 | jcenter()
9 | }
10 |
11 | dependencies {
12 | classpath 'com.android.tools.build:gradle:3.2.1'
13 | classpath 'com.jakewharton:butterknife-gradle-plugin:10.0.0'
14 |
15 | // NOTE: Do not place your application dependencies here; they belong
16 | // in the individual module build.gradle files
17 | }
18 | }
19 |
20 | allprojects {
21 | repositories {
22 | maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
23 | google()
24 | jcenter()
25 | }
26 | }
27 |
28 | task clean(type: Delete) {
29 | delete rootProject.buildDir
30 | }
31 |
32 | ext {
33 | commonDependencies = [
34 | // Android support
35 | appcompatImpl: "androidx.appcompat:appcompat:1.1.0-alpha01",
36 | materialImpl: "com.google.android.material:material:1.1.0-alpha02",
37 | constraintLayoutImpl: "androidx.constraintlayout:constraintlayout:2.0.0-alpha3",
38 | // retrofit
39 | retrofitImpl: "com.squareup.retrofit2:retrofit:2.5.0",
40 | gsonImpl: "com.google.code.gson:gson:2.8.5",
41 | converterGsonImpl: "com.squareup.retrofit2:converter-gson:2.5.0",
42 | // OKHttp
43 | loggingInterceptorImpl: "com.squareup.okhttp3:logging-interceptor:3.4.1",
44 | okhttpImpl: "com.squareup.okhttp3:okhttp:3.11.0",
45 | // google guava checkNotNull
46 | guavaImpl: "com.google.guava:guava:18.0",
47 | // butterKnife
48 | butterKnifeImpl: "com.jakewharton:butterknife:9.0.0-rc3",
49 | butterKnifeAnno: "com.jakewharton:butterknife-compiler:9.0.0-rc3",
50 | // Glide
51 | glideImpl: 'com.github.bumptech.glide:glide:4.8.0',
52 | glideKnifeAnno: 'com.github.bumptech.glide:compiler:4.8.0'
53 | ]
54 | }
55 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
19 |
20 |
23 |
24 |
30 |
31 |
34 |
35 |
38 |
39 |
44 |
45 |
48 |
49 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/WanAndroid/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/java/com/chinalwb/wanandroid_contributor/ContributorApplication.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_contributor;
2 |
3 | import com.chinalwb.wanandroid_base.BaseApplication;
4 | import com.chinalwb.wanandroid_base.ServiceProvider;
5 | import com.chinalwb.wanandroid_base.services.contributor.ContributorItem;
6 | import com.chinalwb.wanandroid_base.services.contributor.ContributorService;
7 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewItem;
8 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewService;
9 | import com.chinalwb.wanandroid_contributor.presenter.ContributorPresenter;
10 | import com.chinalwb.wanandroid_contributor.ui.ContributorFragment;
11 |
12 | import java.util.List;
13 |
14 | public class ContributorApplication extends BaseApplication {
15 | @Override
16 | public void initServiceData() {
17 | // 初始化 导航 数据
18 | NavigationViewService navigationViewService = ServiceProvider.getNavigationViewService();
19 | List navigationViewItemList = navigationViewService.getNavigationViewItemList();
20 |
21 | NavigationViewItem navigationViewItem = new NavigationViewItem(
22 | 1,
23 | R.id.nav_contributor,
24 | 100,
25 | "贡献者"
26 | );
27 | ContributorFragment contributorFragment = ContributorFragment.newInstance();
28 | new ContributorPresenter(contributorFragment, ServiceProvider.getContributorService());
29 | navigationViewItem.setFragment(contributorFragment);
30 | navigationViewItemList.add(navigationViewItem);
31 |
32 | // 初始化 贡献者 数据
33 | ContributorService contributorService = ServiceProvider.getContributorService();
34 | List contributorItemList = contributorService.getContributorItemList();
35 | ContributorItem contributorItem = new ContributorItem(
36 | "https://avatars0.githubusercontent.com/u/1758864?s=460&v=4",
37 | "chinalwb",
38 | "贡献者列表组件",
39 | "显示所有组件的贡献者。快来写一个自己的组件吧!写完提PR哦!",
40 | "https://github.com/chinalwb"
41 | );
42 | contributorItemList.add(contributorItem);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/java/com/chinalwb/wanandroid_projects/ProjectApplication.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_projects;
2 |
3 | import com.chinalwb.wanandroid_base.BaseApplication;
4 | import com.chinalwb.wanandroid_base.ServiceProvider;
5 | import com.chinalwb.wanandroid_base.base.RetrofitClient;
6 | import com.chinalwb.wanandroid_base.services.contributor.ContributorItem;
7 | import com.chinalwb.wanandroid_base.services.contributor.ContributorService;
8 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewItem;
9 | import com.chinalwb.wanandroid_projects.api.IProjectsApi;
10 | import com.chinalwb.wanandroid_projects.presenter.ProjectsPresenter;
11 | import com.chinalwb.wanandroid_projects.ui.ProjectsFragment;
12 |
13 | import java.util.List;
14 |
15 | public class ProjectApplication extends BaseApplication {
16 |
17 | @Override
18 | public void initServiceData() {
19 | List navigationItemList = ServiceProvider.getNavigationViewService().getNavigationViewItemList();
20 | NavigationViewItem navigationViewItem = new NavigationViewItem(
21 | 1,
22 | R.id.nav_projects,
23 | 2,
24 | "项目"
25 | );
26 |
27 | ProjectsFragment projectsFragment = ProjectsFragment.getInstance();
28 | IProjectsApi projectsApi = RetrofitClient.getRetrofit().create(IProjectsApi.class);
29 | new ProjectsPresenter(projectsApi, projectsFragment);
30 | navigationViewItem.setFragment(projectsFragment);
31 |
32 | navigationItemList.add(navigationViewItem);
33 |
34 |
35 | // 初始化 贡献者 数据
36 | ContributorService contributorService = ServiceProvider.getContributorService();
37 | List contributorItemList = contributorService.getContributorItemList();
38 | ContributorItem contributorItem = new ContributorItem(
39 | "https://avatars0.githubusercontent.com/u/1758864?s=460&v=4",
40 | "chinalwb",
41 | "项目组件",
42 | "项目组件为主组件提供了ProjectsFragment作为导航项目入口,Fragment内部使用MVP结构。" +
43 | "用Glide来显示RecyclerView#Adapter中的图片。",
44 | "https://github.com/chinalwb"
45 | );
46 | contributorItemList.add(contributorItem);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/res/layout/gzh_adapter_item_gzh_article.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
13 |
14 |
15 |
25 |
26 |
38 |
39 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/GzhApplication.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh;
2 |
3 | import com.chinalwb.wanandroid_base.BaseApplication;
4 | import com.chinalwb.wanandroid_base.ServiceProvider;
5 | import com.chinalwb.wanandroid_base.base.RetrofitClient;
6 | import com.chinalwb.wanandroid_base.services.contributor.ContributorItem;
7 | import com.chinalwb.wanandroid_base.services.contributor.ContributorService;
8 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewService;
9 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewItem;
10 | import com.chinalwb.wanandroid_gzh.api.IGzhApi;
11 | import com.chinalwb.wanandroid_gzh.presenter.WxPresenter;
12 | import com.chinalwb.wanandroid_gzh.ui.WxFragment;
13 |
14 | import java.util.List;
15 |
16 | public class GzhApplication extends BaseApplication {
17 | @Override
18 | public void initServiceData() {
19 | NavigationViewItem navigationViewItem = new NavigationViewItem(
20 | 1,
21 | R.id.nav_gzh,
22 | 4,
23 | "公众号"
24 | );
25 |
26 | // Set WxFragment
27 | WxFragment wxFragment = WxFragment.newInstance();
28 | IGzhApi gzhApi = RetrofitClient.getRetrofit().create(IGzhApi.class);
29 | new WxPresenter(gzhApi, wxFragment);
30 | navigationViewItem.setFragment(wxFragment);
31 |
32 | NavigationViewService navigationViewService = ServiceProvider.getNavigationViewService();
33 | List navigationViewItemList = navigationViewService.getNavigationViewItemList();
34 | navigationViewItemList.add(navigationViewItem);
35 |
36 | // 初始化 贡献者 数据
37 | ContributorService contributorService = ServiceProvider.getContributorService();
38 | List contributorItemList = contributorService.getContributorItemList();
39 | ContributorItem contributorItem = new ContributorItem(
40 | "https://avatars0.githubusercontent.com/u/1758864?s=460&v=4",
41 | "chinalwb",
42 | "公众号组件",
43 | "公众号组件为主组件提供了WxFragment作为导航项目入口,内部使用TabLayout + ViewPager实现。" +
44 | "ViewPager中的Fragment使用MVP结构实现。",
45 | "https://github.com/chinalwb"
46 | );
47 | contributorItemList.add(contributorItem);
48 |
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/WanAndroid/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/ui/WxFragment.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.ui;
2 |
3 | import android.os.Bundle;
4 | import androidx.annotation.NonNull;
5 | import androidx.annotation.Nullable;
6 |
7 | import com.chinalwb.wanandroid_gzh.R;
8 | import com.chinalwb.wanandroid_gzh.R2;
9 | import com.google.android.material.tabs.TabLayout;
10 | import androidx.fragment.app.Fragment;
11 | import androidx.viewpager.widget.ViewPager;
12 |
13 | import android.view.LayoutInflater;
14 | import android.view.View;
15 | import android.view.ViewGroup;
16 | import android.widget.Toast;
17 |
18 | import com.chinalwb.wanandroid_gzh.model.GzhTab;
19 | import com.chinalwb.wanandroid_gzh.presenter.WxContract;
20 |
21 | import java.util.List;
22 |
23 | import butterknife.BindView;
24 | import butterknife.ButterKnife;
25 |
26 | public class WxFragment extends Fragment implements WxContract.View {
27 |
28 | WxContract.Presenter mPresenter;
29 |
30 | WxGzhPagerAdapter mPagerAdapter;
31 |
32 | @BindView(R2.id.gzh_tabs)
33 | TabLayout mTabLayout;
34 |
35 | @BindView(R2.id.gzh_pager)
36 | ViewPager mViewPager;
37 |
38 | public WxFragment() {
39 | // Require public empty constructor
40 | }
41 |
42 | public static WxFragment newInstance() {
43 | return new WxFragment();
44 | }
45 |
46 | @Nullable
47 | @Override
48 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
49 | View view = LayoutInflater.from(getContext()).inflate(
50 | R.layout.gzh_fragment_wx,
51 | container,
52 | false
53 | );
54 |
55 | ButterKnife.bind(this, view);
56 | return view;
57 | }
58 |
59 | @Override
60 | public void onActivityCreated(@Nullable Bundle savedInstanceState) {
61 | super.onActivityCreated(savedInstanceState);
62 | if (this.mPresenter != null) {
63 | this.mPresenter.start();
64 | }
65 | }
66 |
67 | @Override
68 | public void showGzhTabs(List gzhTabList) {
69 | mPagerAdapter = new WxGzhPagerAdapter(getChildFragmentManager(), gzhTabList);
70 | mViewPager.setAdapter(mPagerAdapter);
71 | mTabLayout.setupWithViewPager(mViewPager);
72 | }
73 |
74 | @Override
75 | public void showError(Throwable error) {
76 | Toast.makeText(getContext(), "Unknown", Toast.LENGTH_LONG).show();
77 | }
78 |
79 | @Override
80 | public void setPresenter(WxContract.Presenter presenter) {
81 | mPresenter = presenter;
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/java/com/chinalwb/wanandroid_contributor/ui/ContributorFragment.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_contributor.ui;
2 |
3 | import android.os.Bundle;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import com.chinalwb.wanandroid_base.Util;
9 | import com.chinalwb.wanandroid_base.services.contributor.ContributorItem;
10 | import com.chinalwb.wanandroid_contributor.R;
11 | import com.chinalwb.wanandroid_contributor.R2;
12 | import com.chinalwb.wanandroid_contributor.presenter.ContributorContract;
13 |
14 | import java.util.List;
15 |
16 | import androidx.annotation.NonNull;
17 | import androidx.annotation.Nullable;
18 | import androidx.fragment.app.Fragment;
19 | import androidx.recyclerview.widget.LinearLayoutManager;
20 | import androidx.recyclerview.widget.RecyclerView;
21 | import butterknife.BindView;
22 | import butterknife.ButterKnife;
23 |
24 | public class ContributorFragment extends Fragment implements ContributorContract.View {
25 |
26 | @BindView(R2.id.contributor_recycler_view)
27 | RecyclerView recyclerView;
28 |
29 | ContributorContract.Presenter mPresenter;
30 |
31 | ContributorAdapter mAdapter;
32 |
33 | public ContributorFragment() {
34 | // Required empty constructor
35 | }
36 |
37 | public static ContributorFragment newInstance() {
38 | return new ContributorFragment();
39 | }
40 |
41 | @Nullable
42 | @Override
43 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
44 | View view = LayoutInflater.from(getContext()).inflate(R.layout.contributor_fragment_contributor, container, false);
45 | ButterKnife.bind(this, view);
46 | return view;
47 | }
48 |
49 | @Override
50 | public void onActivityCreated(@Nullable Bundle savedInstanceState) {
51 | super.onActivityCreated(savedInstanceState);
52 | if (null != this.mPresenter) {
53 | this.mPresenter.start();
54 | }
55 | }
56 |
57 |
58 | @Override
59 | public void showContributors(List contributorItemList) {
60 | mAdapter = new ContributorAdapter(contributorItemList);
61 | LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
62 | recyclerView.setLayoutManager(linearLayoutManager);
63 | recyclerView.setAdapter(mAdapter);
64 | }
65 |
66 | @Override
67 | public void setPresenter(ContributorContract.Presenter presenter) {
68 | this.mPresenter = presenter;
69 | }
70 |
71 | @Override
72 | public void showError(Throwable error) {
73 | Util.toast(getContext(), "Unknown Error - Contributors.");
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/services/navigation/NavigationViewItem.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.services.navigation;
2 |
3 | import android.util.Log;
4 | import android.view.MenuItem;
5 | import android.widget.Toast;
6 |
7 | import com.chinalwb.wanandroid_base.Util;
8 |
9 | import androidx.fragment.app.Fragment;
10 | import androidx.fragment.app.FragmentManager;
11 | import androidx.fragment.app.FragmentTransaction;
12 |
13 | public class NavigationViewItem {
14 |
15 | private int groupId;
16 | private int itemId;
17 | private int order;
18 | private CharSequence title;
19 | private int iconRes;
20 | private boolean checked;
21 | private Fragment fragment;
22 |
23 | public NavigationViewItem(int groupId, int itemId, int order, CharSequence title) {
24 | this.groupId = groupId;
25 | this.itemId = itemId;
26 | this.order = order;
27 | this.title = title;
28 | }
29 |
30 | /**
31 | * Click the item to show fragment in fragment container
32 | * @param fragmentManager
33 | * @param fragmentContainerId
34 | */
35 | public void showFragment(FragmentManager fragmentManager, int fragmentContainerId) {
36 | if (this.fragment == null) {
37 | Log.e("xx", "Fragment is null!");
38 | return;
39 | }
40 |
41 | FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
42 | fragmentTransaction.replace(fragmentContainerId, fragment);
43 | fragmentTransaction.commit();
44 | }
45 |
46 | public int getGroupId() {
47 | return groupId;
48 | }
49 |
50 | public void setGroupId(int groupId) {
51 | this.groupId = groupId;
52 | }
53 |
54 | public int getItemId() {
55 | return itemId;
56 | }
57 |
58 | public void setItemId(int itemId) {
59 | this.itemId = itemId;
60 | }
61 |
62 | public int getOrder() {
63 | return order;
64 | }
65 |
66 | public void setOrder(int order) {
67 | this.order = order;
68 | }
69 |
70 | public CharSequence getTitle() {
71 | return title;
72 | }
73 |
74 | public void setTitle(CharSequence title) {
75 | this.title = title;
76 | }
77 |
78 | public int getIconRes() {
79 | return iconRes;
80 | }
81 |
82 | public void setIconRes(int iconRes) {
83 | this.iconRes = iconRes;
84 | }
85 |
86 | public boolean isChecked() {
87 | return checked;
88 | }
89 |
90 | public void setChecked(boolean checked) {
91 | this.checked = checked;
92 | }
93 |
94 | public Fragment getFragment() {
95 | return fragment;
96 | }
97 |
98 | public void setFragment(Fragment fragment) {
99 | this.fragment = fragment;
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/res/layout/projects_adapter_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
16 |
17 |
27 |
28 |
39 |
40 |
53 |
54 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/features/detail/ui/ArticleDetailActivity.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.features.detail.ui;
2 |
3 | import android.os.Bundle;
4 | import android.widget.TextView;
5 |
6 | import com.chinalwb.wanandroid_base.R;
7 | import com.chinalwb.wanandroid_base.R2;
8 | import com.chinalwb.wanandroid_base.features.detail.presenter.ArticleDetailPresenter;
9 |
10 | import androidx.appcompat.app.AppCompatActivity;
11 | import androidx.appcompat.widget.Toolbar;
12 | import androidx.fragment.app.FragmentManager;
13 | import androidx.fragment.app.FragmentTransaction;
14 | import butterknife.BindView;
15 | import butterknife.ButterKnife;
16 |
17 | public class ArticleDetailActivity extends AppCompatActivity {
18 |
19 | @BindView(R2.id.base_toolbar)
20 | Toolbar toolbar;
21 |
22 | @BindView(R2.id.base_author)
23 | TextView authorText;
24 |
25 | @BindView(R2.id.base_date)
26 | TextView dateText;
27 |
28 | @Override
29 | protected void onCreate(Bundle savedInstanceState) {
30 | super.onCreate(savedInstanceState);
31 | setContentView(R.layout.base_activity_article_detail);
32 |
33 | ButterKnife.bind(this);
34 |
35 | // Set up toolbar
36 | setSupportActionBar(toolbar);
37 | getSupportActionBar().setDisplayHomeAsUpEnabled(true);
38 | getSupportActionBar().setDisplayShowHomeEnabled(true);
39 |
40 | // Init title
41 | String title = getIntent().getStringExtra(ArticleDetailFragment.EXTRA_ARTICLE_TITLE);
42 | this.setTitle(title);
43 |
44 | // Init fragment
45 | String url = getIntent().getStringExtra(ArticleDetailFragment.EXTRA_ARTICLE_URL);
46 | String author = getIntent().getStringExtra(ArticleDetailFragment.EXTRA_ARTICLE_AUTHOR);
47 | String date = getIntent().getStringExtra(ArticleDetailFragment.EXTRA_ARTICLE_DATE);
48 | Bundle bundle = new Bundle();
49 | bundle.putString(ArticleDetailFragment.EXTRA_ARTICLE_URL, url);
50 | bundle.putString(ArticleDetailFragment.EXTRA_ARTICLE_TITLE, title);
51 | ArticleDetailFragment articleDetailFragment = ArticleDetailFragment.newInstance();
52 | articleDetailFragment.setArguments(bundle);
53 | ArticleDetailPresenter presenter = new ArticleDetailPresenter(articleDetailFragment);
54 |
55 | FragmentManager fragmentManager = getSupportFragmentManager();
56 | FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
57 | fragmentTransaction.replace(R.id.fragment_container, articleDetailFragment);
58 | fragmentTransaction.commit();
59 |
60 | // Init author and date
61 | authorText.setText(author);
62 | dateText.setText(date);
63 | }
64 |
65 |
66 | @Override
67 | public boolean onSupportNavigateUp() {
68 | super.onSupportNavigateUp();
69 | this.finish();
70 | return true;
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/res/layout/base_activity_article_detail.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
13 |
14 |
25 |
26 |
36 |
37 |
43 |
44 |
51 |
52 |
53 |
57 |
58 |
59 |
60 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/presenter/WxGzhPresenter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.presenter;
2 |
3 | import com.chinalwb.wanandroid_base.features.article.model.ArticlesResponse;
4 | import com.chinalwb.wanandroid_gzh.api.IGzhApi;
5 | import com.chinalwb.wanandroid_gzh.model.GzhTab;
6 |
7 | import retrofit2.Call;
8 | import retrofit2.Callback;
9 | import retrofit2.Response;
10 |
11 | public class WxGzhPresenter implements WxGzhContract.Presenter {
12 |
13 | private WxGzhContract.View mView;
14 | private IGzhApi mGzhApi;
15 | private GzhTab mGzhTab;
16 | private int currentPage = 1;
17 | private boolean isLoading;
18 |
19 | public WxGzhPresenter(WxGzhContract.View view, IGzhApi gzhApi, GzhTab gzhTab) {
20 | this.mView = view;
21 | this.mGzhApi = gzhApi;
22 | this.mGzhTab = gzhTab;
23 | this.mView.setPresenter(this);
24 | }
25 |
26 | @Override
27 | public void loadArticles(int gzhId, int page) {
28 | Call call = mGzhApi.loadGzhArticles(gzhId, page);
29 | call.enqueue(new Callback() {
30 | @Override
31 | public void onResponse(Call call, Response response) {
32 | mView.showArticles(response.body().getData().getDatas());
33 | toggleLoading(false);
34 | }
35 |
36 | @Override
37 | public void onFailure(Call call, Throwable t) {
38 | mView.showError(t);
39 | toggleLoading(false);
40 | }
41 | });
42 | }
43 |
44 | @Override
45 | public void loadNextPageArticles() {
46 | if (isLoading) {
47 | return;
48 | }
49 |
50 | this.toggleLoading(true);
51 | int gzhId = this.mGzhTab.getId();
52 | Call call = mGzhApi.loadGzhArticles(gzhId, ++this.currentPage);
53 | call.enqueue(new Callback() {
54 | @Override
55 | public void onResponse(Call call, Response
56 | response) {
57 | mView.appendArticles(response.body().getData().getDatas());
58 | toggleLoading(false);
59 | }
60 |
61 | @Override
62 | public void onFailure(Call call, Throwable t) {
63 | mView.showError(t);
64 | toggleLoading(false);
65 | }
66 | });
67 | }
68 |
69 | @Override
70 | public void start() {
71 | if (this.isLoading) {
72 | return;
73 | }
74 | this.toggleLoading(true);
75 | int gzhId = this.mGzhTab.getId();
76 | this.loadArticles(gzhId, this.currentPage);
77 | }
78 |
79 | private void toggleLoading(boolean isLoading) {
80 | this.isLoading = isLoading;
81 | if (isLoading) {
82 | this.mView.showLoading();
83 | } else {
84 | this.mView.hideLoading();
85 | }
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/java/com/chinalwb/wanandroid_contributor/ui/ContributorAdapter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_contributor.ui;
2 |
3 | import android.view.LayoutInflater;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.ImageView;
7 | import android.widget.TextView;
8 |
9 | import com.bumptech.glide.Glide;
10 | import com.chinalwb.wanandroid_base.services.contributor.ContributorItem;
11 | import com.chinalwb.wanandroid_contributor.R;
12 | import com.chinalwb.wanandroid_contributor.R2;
13 |
14 | import java.util.List;
15 |
16 | import androidx.annotation.NonNull;
17 | import androidx.cardview.widget.CardView;
18 | import androidx.recyclerview.widget.RecyclerView;
19 | import butterknife.BindView;
20 | import butterknife.ButterKnife;
21 |
22 | public class ContributorAdapter extends RecyclerView.Adapter {
23 |
24 | private List contributorItemList;
25 |
26 | public ContributorAdapter(List contributorItems) {
27 | this.contributorItemList = contributorItems;
28 | }
29 |
30 | @NonNull
31 | @Override
32 | public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
33 | LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
34 | CardView view = (CardView) layoutInflater.inflate(R.layout.contributor_adapter_item, parent, false);
35 | return new ViewHolder(view);
36 | }
37 |
38 | @Override
39 | public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
40 | holder.bind(this.contributorItemList.get(position));
41 | }
42 |
43 | @Override
44 | public int getItemCount() {
45 | if (this.contributorItemList == null) {
46 | return 0;
47 | }
48 | return this.contributorItemList.size();
49 | }
50 |
51 | public static class ViewHolder extends RecyclerView.ViewHolder {
52 | private CardView cardView;
53 |
54 | @BindView(R2.id.contributor_adapter_avatar_image)
55 | ImageView avatarImage;
56 |
57 | @BindView(R2.id.contributor_adapter_author_text)
58 | TextView authorText;
59 |
60 | @BindView(R2.id.contributor_adapter_component_name)
61 | TextView componentNameText;
62 |
63 | @BindView(R2.id.contributor_adapter_component_desc)
64 | TextView componentDescText;
65 |
66 | @BindView(R2.id.contributor_adapter_github)
67 | TextView githubText;
68 |
69 | public ViewHolder(CardView view) {
70 | super(view);
71 | this.cardView = view;
72 | ButterKnife.bind(this, view);
73 | }
74 |
75 | void bind(ContributorItem contributorItem) {
76 | Glide.with(cardView).load(contributorItem.getAvatarUrl()).into(avatarImage);
77 | authorText.setText(contributorItem.getAuthor());
78 | componentNameText.setText(contributorItem.getComponentName());
79 | componentDescText.setText(contributorItem.getComponentDesc());
80 | githubText.setText(contributorItem.getGithub());
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/java/com/chinalwb/wanandroid_projects/presenter/ProjectsPresenter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_projects.presenter;
2 |
3 | import com.chinalwb.wanandroid_base.features.article.model.Article;
4 | import com.chinalwb.wanandroid_base.features.article.model.ArticlesResponse;
5 | import com.chinalwb.wanandroid_projects.api.IProjectsApi;
6 |
7 | import java.util.List;
8 |
9 | import retrofit2.Call;
10 | import retrofit2.Callback;
11 | import retrofit2.Response;
12 |
13 | public class ProjectsPresenter implements ProjectsContract.Presenter {
14 |
15 | private IProjectsApi api;
16 | private int currentPage;
17 | private ProjectsContract.View view;
18 | private boolean isLoading;
19 |
20 | public ProjectsPresenter(IProjectsApi api, ProjectsContract.View view) {
21 | this.api = api;
22 | this.view = view;
23 | this.view.setPresenter(this);
24 | }
25 |
26 | @Override
27 | public void loadProjects(int page) {
28 | this.toggleLoading(true);
29 | this.currentPage = page;
30 | Call listProjectsCall = api.listProjects(page);
31 | listProjectsCall.enqueue(new Callback() {
32 | @Override
33 | public void onResponse(Call call, Response
34 | response) {
35 | List projectList = response.body().getData().getDatas();
36 | view.showProjects(projectList);
37 | toggleLoading(false);
38 | }
39 |
40 | @Override
41 | public void onFailure(Call call, Throwable t) {
42 | view.showError(t);
43 | toggleLoading(false);
44 | }
45 | });
46 | }
47 |
48 | @Override
49 | public void loadNextPageProjects() {
50 | this.toggleLoading(true);
51 | this.currentPage += 1;
52 | Call nextProjectsCall = api.listProjects(this.currentPage);
53 | nextProjectsCall.enqueue(new Callback() {
54 | @Override
55 | public void onResponse(Call call, Response
56 | response) {
57 | List projectsList = response.body().getData().getDatas();
58 | view.appendProjects(projectsList);
59 | toggleLoading(false);
60 | }
61 |
62 | @Override
63 | public void onFailure(Call call, Throwable t) {
64 | view.showError(t);
65 | toggleLoading(false);
66 | }
67 | });
68 | }
69 |
70 | @Override
71 | public void refreshProjects() {
72 | this.loadProjects(0);
73 | }
74 |
75 | @Override
76 | public void start() {
77 | this.loadProjects(0);
78 | }
79 |
80 | private void toggleLoading(boolean loading) {
81 | this.isLoading = loading;
82 | if (this.isLoading) {
83 | view.showLoading();
84 | } else {
85 | view.hideLoading();
86 | }
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/java/com/chinalwb/wanandroid/main/presenter/ArticlesPresenter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid.main.presenter;
2 |
3 | import com.chinalwb.wanandroid.main.api.IArticlesApi;
4 | import com.chinalwb.wanandroid_base.features.article.model.Article;
5 | import com.chinalwb.wanandroid_base.features.article.model.ArticlesResponse;
6 |
7 | import java.util.List;
8 |
9 | import retrofit2.Call;
10 | import retrofit2.Callback;
11 | import retrofit2.Response;
12 |
13 | public class ArticlesPresenter implements ArticlesContract.Presenter {
14 |
15 | private IArticlesApi mApi;
16 | private ArticlesContract.View mArticlesView;
17 | private int currentPage;
18 | private boolean isLoading = false;
19 |
20 | public ArticlesPresenter(IArticlesApi api, ArticlesContract.View view) {
21 | this.mApi = api;
22 | this.mArticlesView = view;
23 | this.mArticlesView.setPresenter(this);
24 | }
25 |
26 | @Override
27 | public void loadArticles(int page) {
28 | this.toggleLoading(true);
29 | this.currentPage = page;
30 | Call call = mApi.listArticles(page);
31 | call.enqueue(new Callback() {
32 | @Override
33 | public void onResponse(Call call, Response response) {
34 | List articleList = response.body().getData().getDatas();
35 | mArticlesView.showArticles(articleList);
36 | toggleLoading(false);
37 | }
38 |
39 | @Override
40 | public void onFailure(Call call, Throwable t) {
41 | mArticlesView.showError(t);
42 | toggleLoading(false);
43 | }
44 | });
45 |
46 |
47 | }
48 |
49 | @Override
50 | public void loadNextPageArticles() {
51 | if (isLoading) {
52 | return;
53 | }
54 | this.toggleLoading(true);
55 | this.currentPage++;
56 | Call call = mApi.listArticles(this.currentPage);
57 | call.enqueue(new Callback() {
58 | @Override
59 | public void onResponse(Call call, Response response) {
60 | List articleList = response.body().getData().getDatas();
61 | mArticlesView.appendArticles(articleList);
62 | toggleLoading(false);
63 | }
64 |
65 | @Override
66 | public void onFailure(Call call, Throwable t) {
67 | mArticlesView.showError(t);
68 | toggleLoading(false);
69 | }
70 | });
71 | }
72 |
73 | @Override
74 | public void refreshArticles() {
75 | loadArticles(0);
76 | }
77 |
78 | @Override
79 | public void start() {
80 | loadArticles(0);
81 | }
82 |
83 | private void toggleLoading(boolean isLoading) {
84 | this.isLoading = isLoading;
85 | if (isLoading) {
86 | this.mArticlesView.showLoading();
87 | } else {
88 | this.mArticlesView.hideLoading();
89 | }
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/java/com/chinalwb/wanandroid/MainApplication.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid;
2 |
3 | import com.chinalwb.wanandroid_base.base.RetrofitClient;
4 | import com.chinalwb.wanandroid.main.api.IArticlesApi;
5 | import com.chinalwb.wanandroid.main.presenter.ArticlesPresenter;
6 | import com.chinalwb.wanandroid.main.ui.ArticlesListFragment;
7 | import com.chinalwb.wanandroid_base.AppConfig;
8 | import com.chinalwb.wanandroid_base.BaseApplication;
9 | import com.chinalwb.wanandroid_base.ServiceProvider;
10 | import com.chinalwb.wanandroid_base.services.contributor.ContributorItem;
11 | import com.chinalwb.wanandroid_base.services.contributor.ContributorService;
12 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewService;
13 | import com.chinalwb.wanandroid_base.services.navigation.NavigationViewItem;
14 |
15 | import java.util.List;
16 |
17 | public class MainApplication extends BaseApplication {
18 |
19 | @Override
20 | public void onCreate() {
21 | super.onCreate();
22 | initServiceData();
23 | initModuleServiceData();
24 | }
25 |
26 | @Override
27 | public void initServiceData() {
28 |
29 | // 初始化 导航 数据
30 | NavigationViewService navigationViewService = ServiceProvider.getNavigationViewService();
31 | List navigationViewItemList = navigationViewService.getNavigationViewItemList();
32 |
33 | NavigationViewItem main = new NavigationViewItem(
34 | 1, R.id.nav_main,1,getResources().getString(R.string.nav_main));
35 | main.setChecked(true);
36 |
37 | ArticlesListFragment articlesListFragment = ArticlesListFragment.newInstance();
38 | IArticlesApi articlesApi = RetrofitClient.getRetrofit().create(IArticlesApi.class);
39 | new ArticlesPresenter(articlesApi, articlesListFragment);
40 | main.setFragment(articlesListFragment);
41 | navigationViewItemList.add(main);
42 |
43 |
44 | // 初始化 贡献者 数据
45 | ContributorService contributorService = ServiceProvider.getContributorService();
46 | List contributorItemList = contributorService.getContributorItemList();
47 | ContributorItem contributorItem = new ContributorItem(
48 | "https://avatars0.githubusercontent.com/u/1758864?s=460&v=4",
49 | "chinalwb",
50 | "App 入口",
51 | "App组件化的调度者。" +
52 | "\r\n这是我学习用组件化(本例中用模块化更为恰当)思想开发一个App的实现。其中,我发现组件化好像没有在其他地方看到的那么复杂,希望路过的大神不吝赐教。" +
53 | "\r\n如果你也是刚开始接触组件化,何不写一个组件一起学习呢?" +
54 | "\r\n该组件中目前包含了首页内容的显示代码,即将分离开来。",
55 | "https://github.com/chinalwb"
56 | );
57 | contributorItemList.add(contributorItem);
58 | }
59 |
60 | private void initModuleServiceData() {
61 | for (String module : AppConfig.MODULES) {
62 | try {
63 | Class clazz = Class.forName(module);
64 | BaseApplication baseApplication = (BaseApplication) clazz.newInstance();
65 | baseApplication.initServiceData();
66 | } catch (ClassNotFoundException e) {
67 | e.printStackTrace();
68 | } catch (InstantiationException e) {
69 | e.printStackTrace();
70 | } catch (IllegalAccessException e) {
71 | e.printStackTrace();
72 | }
73 | }
74 | }
75 |
76 | }
77 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/base/DownloadTask.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.base;
2 |
3 | import android.content.Context;
4 | import android.os.AsyncTask;
5 | import android.util.Log;
6 |
7 | import java.io.File;
8 | import java.io.FileWriter;
9 | import java.io.IOException;
10 | import java.lang.ref.WeakReference;
11 |
12 | import okhttp3.Call;
13 | import okhttp3.Callback;
14 | import okhttp3.OkHttpClient;
15 | import okhttp3.Request;
16 | import okhttp3.Response;
17 |
18 | public class DownloadTask {
19 |
20 | private DownloadListener downloadListener;
21 |
22 | public interface DownloadListener {
23 | void onSuccess();
24 |
25 | void onFailure();
26 | }
27 |
28 | private WeakReference contextWeakReference;
29 |
30 | public DownloadTask(Context context, DownloadListener downloadListener) {
31 | this.contextWeakReference = new WeakReference(context);
32 | this.downloadListener = downloadListener;
33 | }
34 |
35 | public void execute(String... downloadArgs) {
36 | if (downloadArgs == null || downloadArgs.length != 2) {
37 | Log.e("xx", "Invalid download args.");
38 | return;
39 | }
40 |
41 | final String url = downloadArgs[0];
42 | final String fileName = downloadArgs[1];
43 | OkHttpClient client = new OkHttpClient.Builder().build();
44 |
45 | Request request = new Request.Builder().url(url).build();
46 | Call call = client.newCall(request);
47 |
48 | Log.e("xx", "Enqueue thread == " + Thread.currentThread());
49 | call.enqueue(new Callback() {
50 | @Override
51 | public void onFailure(Call call, IOException e) {
52 | e.printStackTrace();
53 | Log.e("xx", "error " + e.getMessage());
54 | if (downloadListener != null) {
55 | downloadListener.onFailure();
56 | }
57 | }
58 |
59 | @Override
60 | public void onResponse(Call call, Response response) throws IOException {
61 | String result = response.body().string();
62 | Log.e("xx", "Response download thread == " + Thread.currentThread());
63 | Context context = contextWeakReference.get();
64 | if (context == null) {
65 | if (downloadListener != null) {
66 | downloadListener.onFailure();
67 | }
68 | return;
69 | }
70 |
71 | String filePath = context.getCacheDir() + File.separator + fileName;
72 | Log.e("xx", "file path == " + filePath);
73 | File file = new File(filePath);
74 | if (file.exists()) {
75 | file.delete();
76 | }
77 | boolean newFile = file.createNewFile();
78 | if (!newFile) {
79 | Log.e("xx", "Cannot new file!!");
80 | return;
81 | }
82 | FileWriter fileWriter = new FileWriter(file);
83 | fileWriter.write(result);
84 | fileWriter.close();
85 | Log.e("xx", "File saved at == " + filePath + ", url == " + url);
86 | if (downloadListener != null) {
87 | downloadListener.onSuccess();
88 | }
89 | }
90 | });
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/java/com/chinalwb/wanandroid_projects/ui/ProjectsListAdapter.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_projects.ui;
2 |
3 | import android.graphics.Bitmap;
4 | import android.graphics.BitmapFactory;
5 | import android.os.AsyncTask;
6 | import android.text.Layout;
7 | import android.util.Log;
8 | import android.view.LayoutInflater;
9 | import android.view.View;
10 | import android.view.ViewGroup;
11 | import android.widget.ImageView;
12 | import android.widget.TextView;
13 |
14 | import com.bumptech.glide.Glide;
15 | import com.chinalwb.wanandroid_base.Util;
16 | import com.chinalwb.wanandroid_base.features.article.model.Article;
17 | import com.chinalwb.wanandroid_projects.R;
18 | import com.chinalwb.wanandroid_projects.R2;
19 |
20 | import java.io.IOException;
21 | import java.lang.ref.WeakReference;
22 | import java.net.MalformedURLException;
23 | import java.net.URL;
24 | import java.util.List;
25 |
26 | import androidx.annotation.NonNull;
27 | import androidx.cardview.widget.CardView;
28 | import androidx.recyclerview.widget.RecyclerView;
29 | import butterknife.BindInt;
30 | import butterknife.BindView;
31 | import butterknife.ButterKnife;
32 |
33 | public class ProjectsListAdapter extends RecyclerView.Adapter {
34 |
35 | private List projectList;
36 |
37 | public ProjectsListAdapter(List projectList) {
38 | this.projectList = projectList;
39 | }
40 |
41 | public void appendProjectList(List addedProjectList) {
42 | this.projectList.addAll(addedProjectList);
43 | }
44 |
45 | @NonNull
46 | @Override
47 | public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
48 | LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
49 | CardView cardView = (CardView) layoutInflater.inflate(R.layout.projects_adapter_item,
50 | parent, false);
51 | return new ViewHolder(cardView);
52 | }
53 |
54 | @Override
55 | public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
56 | holder.bind(this.projectList.get(position));
57 | }
58 |
59 | @Override
60 | public int getItemCount() {
61 | if (this.projectList == null) {
62 | return 0;
63 | }
64 | return this.projectList.size();
65 | }
66 |
67 | public static class ViewHolder extends RecyclerView.ViewHolder {
68 | private CardView cardView;
69 |
70 | @BindView(R2.id.projects_adapter_favorite_image)
71 | ImageView favoriteImage;
72 |
73 | @BindView(R2.id.projects_adapter_title)
74 | TextView titleText;
75 |
76 | @BindView(R2.id.projects_adapter_desc)
77 | TextView descText;
78 |
79 | @BindView(R2.id.projects_adapter_preview_image)
80 | ImageView previewImage;
81 |
82 | public ViewHolder(CardView view) {
83 | super(view);
84 | this.cardView = view;
85 | ButterKnife.bind(this, view);
86 | }
87 |
88 | public void bind(Article project) {
89 | titleText.setText(project.getTitle());
90 | descText.setText(project.getDesc());
91 | if (project.getCollect()) {
92 | favoriteImage.setImageResource(R.drawable.favorite_yes);
93 | } else {
94 | favoriteImage.setImageResource(R.drawable.favorite_no);
95 | }
96 |
97 | Glide.with(cardView).load(project.getEnvelopePic()).into(previewImage);
98 | }
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_base/src/main/java/com/chinalwb/wanandroid_base/features/detail/ui/ArticleDetailFragment.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_base.features.detail.ui;
2 |
3 | import android.os.Bundle;
4 | import android.util.Log;
5 | import android.view.LayoutInflater;
6 | import android.view.Menu;
7 | import android.view.MenuInflater;
8 | import android.view.MenuItem;
9 | import android.view.View;
10 | import android.view.ViewGroup;
11 | import android.webkit.WebView;
12 |
13 | import com.chinalwb.wanandroid_base.R;
14 | import com.chinalwb.wanandroid_base.R2;
15 | import com.chinalwb.wanandroid_base.Util;
16 | import com.chinalwb.wanandroid_base.features.detail.presenter.ArticleDetailContract;
17 |
18 | import androidx.annotation.NonNull;
19 | import androidx.annotation.Nullable;
20 | import androidx.appcompat.widget.ShareActionProvider;
21 | import androidx.fragment.app.Fragment;
22 | import butterknife.BindView;
23 | import butterknife.ButterKnife;
24 |
25 | public class ArticleDetailFragment extends Fragment implements ArticleDetailContract.View {
26 |
27 | ArticleDetailContract.Presenter mPresenter;
28 |
29 | public static final String EXTRA_ARTICLE_URL = "EXTRA_ARTICLE_URL";
30 | public static final String EXTRA_ARTICLE_TITLE = "EXTRA_ARTICLE_TITLE";
31 | public static final String EXTRA_ARTICLE_AUTHOR = "EXTRA_ARTICLE_AUTHOR";
32 | public static final String EXTRA_ARTICLE_DATE = "EXTRA_ARTICLE_DATE";
33 | private String url;
34 | private String title;
35 |
36 | @BindView(R2.id.base_webview)
37 | WebView webView;
38 |
39 | public ArticleDetailFragment() {
40 | // Require public empty constructor
41 | }
42 |
43 | public static ArticleDetailFragment newInstance() {
44 | return new ArticleDetailFragment();
45 | }
46 |
47 | @Override
48 | public void onCreate(@Nullable Bundle savedInstanceState) {
49 | super.onCreate(savedInstanceState);
50 | this.url = getArguments().getString(EXTRA_ARTICLE_URL);
51 | this.title = getArguments().getString(EXTRA_ARTICLE_TITLE);
52 | setHasOptionsMenu(true);
53 | }
54 |
55 | @Nullable
56 | @Override
57 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
58 | @Nullable Bundle savedInstanceState) {
59 |
60 | View view = LayoutInflater.from(getContext()).inflate(R.layout.base_fragment_article_detail,
61 | container, false);
62 | ButterKnife.bind(this, view);
63 | return view;
64 | }
65 |
66 | @Override
67 | public void onStart() {
68 | super.onStart();
69 | this.webView.loadUrl(url);
70 | }
71 |
72 | private ShareActionProvider shareActionProvider;
73 |
74 | @Override
75 | public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
76 | menuInflater.inflate(R.menu.base_menu_more, menu);
77 | super.onCreateOptionsMenu(menu, menuInflater);
78 | }
79 |
80 | @Override
81 | public boolean onOptionsItemSelected(MenuItem item) {
82 |
83 | int menuId = item.getItemId();
84 | if (menuId == R.id.base_menu_item_save) {
85 | mPresenter.save(getContext(), url, title + ".html");
86 | } else if (menuId == R.id.base_menu_item_share) {
87 | mPresenter.share(getContext(), url, title);
88 | }
89 |
90 | return super.onOptionsItemSelected(item);
91 | }
92 |
93 | @Override
94 | public void showSaveResult(boolean result) {
95 | Log.e("xx", "save result == " + result);
96 | }
97 |
98 | @Override
99 | public void showShareResult(boolean result) {
100 | Log.e("xx", "share result == " + result);
101 | }
102 |
103 | @Override
104 | public void setPresenter(ArticleDetailContract.Presenter presenter) {
105 | this.mPresenter = presenter;
106 | }
107 |
108 | @Override
109 | public void showError(Throwable error) {
110 | Util.toast(getContext(), "Unknown error");
111 | }
112 | }
113 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_contributor/src/main/res/layout/contributor_adapter_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
13 |
14 |
24 |
25 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
60 |
61 |
71 |
72 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_gzh/src/main/java/com/chinalwb/wanandroid_gzh/ui/WxGzhFragment.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_gzh.ui;
2 |
3 | import android.os.Bundle;
4 | import androidx.annotation.NonNull;
5 | import androidx.annotation.Nullable;
6 | import androidx.fragment.app.Fragment;
7 | import androidx.recyclerview.widget.LinearLayoutManager;
8 | import androidx.recyclerview.widget.RecyclerView;
9 |
10 | import android.util.Log;
11 | import android.view.LayoutInflater;
12 | import android.view.View;
13 | import android.view.ViewGroup;
14 |
15 | import com.chinalwb.wanandroid_base.Util;
16 | import com.chinalwb.wanandroid_base.features.article.model.Article;
17 | import com.chinalwb.wanandroid_gzh.R;
18 | import com.chinalwb.wanandroid_gzh.R2;
19 | import com.chinalwb.wanandroid_gzh.model.GzhTab;
20 | import com.chinalwb.wanandroid_gzh.presenter.WxGzhContract;
21 |
22 | import java.util.List;
23 |
24 | import butterknife.BindView;
25 | import butterknife.ButterKnife;
26 |
27 | public class WxGzhFragment extends Fragment implements WxGzhContract.View {
28 |
29 | private WxGzhContract.Presenter mPresenter;
30 | private GzhTab mGzhTab;
31 | private GzhArticlesListAdapter mAdapter;
32 |
33 | @BindView(R2.id.gzh_articles_recycler_view)
34 | RecyclerView mRecyclerView;
35 |
36 | public WxGzhFragment() {
37 | // Required public empty fragment
38 | }
39 |
40 | public static WxGzhFragment newInstance() {
41 | return new WxGzhFragment();
42 | }
43 |
44 | public void setGzhTab(GzhTab mGzhTab) {
45 | this.mGzhTab = mGzhTab;
46 | }
47 |
48 | @Nullable
49 | @Override
50 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
51 | View view = LayoutInflater.from(getContext()).inflate(
52 | getLayoutId(),
53 | container,
54 | false
55 | );
56 | ButterKnife.bind(this, view);
57 | return view;
58 | }
59 |
60 | private int getLayoutId() {
61 | return R.layout.gzh_fragment_wx_gzh;
62 | }
63 |
64 | @Override
65 | public void onStart() {
66 | super.onStart();
67 | initView();
68 | }
69 |
70 | private void initView() {
71 | if (this.mPresenter != null) {
72 | this.mPresenter.start();
73 | }
74 |
75 | mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
76 | @Override
77 | public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
78 | super.onScrollStateChanged(recyclerView, newState);
79 | }
80 |
81 | @Override
82 | public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
83 | super.onScrolled(recyclerView, dx, dy);
84 | LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView
85 | .getLayoutManager();
86 | int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
87 | if (lastVisibleItemPosition == mAdapter.getItemCount() - 1) {
88 | mPresenter.loadNextPageArticles();
89 | }
90 | }
91 | });
92 | }
93 |
94 | @Override
95 | public void showArticles(List articleList) {
96 | // RecyclerView
97 | mAdapter = new GzhArticlesListAdapter(articleList);
98 | LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
99 | this.mRecyclerView.setLayoutManager(layoutManager);
100 | this.mRecyclerView.setAdapter(mAdapter);
101 | }
102 |
103 | @Override
104 | public void appendArticles(List articleList) {
105 | mAdapter.appendArticleList(articleList);
106 | mAdapter.notifyDataSetChanged();
107 | }
108 |
109 | @Override
110 | public void setPresenter(WxGzhContract.Presenter presenter) {
111 | this.mPresenter = presenter;
112 | }
113 |
114 | @Override
115 | public void showError(Throwable error) {
116 | Util.toast(getContext(), "Unknown");
117 | }
118 |
119 | @Override
120 | public void showLoading() {
121 | Log.e("xx", "Show loading..");
122 | }
123 |
124 | @Override
125 | public void hideLoading() {
126 | Log.e("xx", "Hide loading!");
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/WanAndroid/wanandroid_projects/src/main/java/com/chinalwb/wanandroid_projects/ui/ProjectsFragment.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid_projects.ui;
2 |
3 | import android.content.Context;
4 | import android.os.Bundle;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 |
9 | import com.chinalwb.wanandroid_base.Util;
10 | import com.chinalwb.wanandroid_base.features.article.model.Article;
11 | import com.chinalwb.wanandroid_projects.R;
12 | import com.chinalwb.wanandroid_projects.R2;
13 | import com.chinalwb.wanandroid_projects.presenter.ProjectsContract;
14 |
15 | import java.util.List;
16 |
17 | import androidx.annotation.NonNull;
18 | import androidx.annotation.Nullable;
19 | import androidx.fragment.app.Fragment;
20 | import androidx.recyclerview.widget.LinearLayoutManager;
21 | import androidx.recyclerview.widget.RecyclerView;
22 | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
23 | import butterknife.BindView;
24 | import butterknife.ButterKnife;
25 |
26 | public class ProjectsFragment extends Fragment implements ProjectsContract.View {
27 |
28 | ProjectsContract.Presenter mPresenter;
29 |
30 | ProjectsListAdapter mAdapter;
31 |
32 | @BindView(R2.id.projects_recycler_view)
33 | RecyclerView recyclerView;
34 |
35 | @BindView(R2.id.projects_swipe_refresh_layout)
36 | SwipeRefreshLayout swipeRefreshLayout;
37 |
38 | public ProjectsFragment() {
39 | // Required empty constructor
40 | }
41 |
42 | public static ProjectsFragment getInstance() {
43 | return new ProjectsFragment();
44 | }
45 |
46 | @Nullable
47 | @Override
48 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
49 | @Nullable Bundle savedInstanceState) {
50 | View view = inflater.inflate(R.layout.projects_fragment_projects, container, false);
51 | ButterKnife.bind(this, view);
52 | return view;
53 | }
54 |
55 | @Override
56 | public void onActivityCreated(@Nullable Bundle savedInstanceState) {
57 | super.onActivityCreated(savedInstanceState);
58 | setupListeners();
59 | if (mPresenter != null) {
60 | mPresenter.start();
61 | }
62 | }
63 |
64 | private void setupListeners() {
65 | this.swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
66 | @Override
67 | public void onRefresh() {
68 | mPresenter.start();
69 | }
70 | });
71 |
72 | this.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
73 | @Override
74 | public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
75 | super.onScrollStateChanged(recyclerView, newState);
76 | }
77 |
78 | @Override
79 | public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
80 | super.onScrolled(recyclerView, dx, dy);
81 | LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView
82 | .getLayoutManager();
83 | int total = recyclerView.getAdapter().getItemCount();
84 | if (linearLayoutManager.findLastVisibleItemPosition() == (total - 1)) {
85 | mPresenter.loadNextPageProjects();
86 | }
87 | }
88 | });
89 | }
90 |
91 | @Override
92 | public void appendProjects(List projectList) {
93 | mAdapter.appendProjectList(projectList);
94 | mAdapter.notifyDataSetChanged();
95 | }
96 |
97 | @Override
98 | public void showProjects(List projectList) {
99 | mAdapter = new ProjectsListAdapter(projectList);
100 | recyclerView.setAdapter(mAdapter);
101 | LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
102 | recyclerView.setLayoutManager(linearLayoutManager);
103 | }
104 |
105 | @Override
106 | public void showLoading() {
107 | this.swipeRefreshLayout.setRefreshing(true);
108 | }
109 |
110 | @Override
111 | public void hideLoading() {
112 | this.swipeRefreshLayout.setRefreshing(false);
113 | }
114 |
115 | @Override
116 | public void setPresenter(ProjectsContract.Presenter presenter) {
117 | this.mPresenter = presenter;
118 | }
119 |
120 | @Override
121 | public void showError(Throwable error) {
122 | Util.toast(getContext(), "Unknown error - projects!");
123 | }
124 | }
125 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/res/layout/adapter_item_article.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
13 |
14 |
22 |
23 |
36 |
37 |
52 |
53 |
69 |
70 |
85 |
86 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/WanAndroid/app/src/main/java/com/chinalwb/wanandroid/main/ui/ArticlesListFragment.java:
--------------------------------------------------------------------------------
1 | package com.chinalwb.wanandroid.main.ui;
2 |
3 | import android.content.Context;
4 | import android.os.Bundle;
5 | import androidx.annotation.NonNull;
6 | import androidx.annotation.Nullable;
7 | import androidx.fragment.app.Fragment;
8 | import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
9 | import androidx.recyclerview.widget.GridLayoutManager;
10 | import androidx.recyclerview.widget.RecyclerView;
11 |
12 | import android.view.LayoutInflater;
13 | import android.view.View;
14 | import android.view.ViewGroup;
15 | import android.widget.Toast;
16 |
17 | import com.chinalwb.wanandroid.R;
18 | import com.chinalwb.wanandroid_base.features.article.model.Article;
19 | import com.chinalwb.wanandroid.main.presenter.ArticlesContract;
20 |
21 | import java.util.List;
22 |
23 | import butterknife.BindView;
24 | import butterknife.ButterKnife;
25 |
26 | import static com.google.common.base.Preconditions.checkNotNull;
27 |
28 |
29 | public class ArticlesListFragment extends Fragment implements ArticlesContract.View {
30 |
31 | private ArticlesContract.Presenter mPresenter;
32 | private ArticlesListAdapter mAdapter;
33 |
34 | @BindView(R.id.articles_recycler_view)
35 | RecyclerView recyclerView;
36 |
37 | @BindView(R.id.swipe_refresh_layout)
38 | SwipeRefreshLayout swipeRefreshLayout;
39 |
40 | public ArticlesListFragment() {
41 | // Require empty public constructor
42 | }
43 |
44 | public static ArticlesListFragment newInstance() {
45 | return new ArticlesListFragment();
46 | }
47 |
48 | @Override
49 | public void onAttach(Context context) {
50 | super.onAttach(context);
51 | }
52 |
53 | @Nullable
54 | @Override
55 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
56 | View view = inflater.inflate(getLayoutId(), container, false);
57 | ButterKnife.bind(this, view);
58 | return view;
59 | }
60 |
61 | private int getLayoutId() {
62 | return R.layout.fragment_articles_list;
63 | }
64 |
65 | @Override
66 | public void onActivityCreated(@Nullable Bundle savedInstanceState) {
67 | super.onActivityCreated(savedInstanceState);
68 | initViews();
69 | addListeners();
70 | if (mPresenter != null) {
71 | mPresenter.start();
72 | }
73 | }
74 |
75 | private void initViews() {
76 | // this.recyclerView.addItemDecoration(new DividerItemDecoration(this.getContext(), DividerItemDecoration.VERTICAL));
77 | }
78 |
79 | private void addListeners() {
80 | // SwipeRefreshLayout
81 | this.swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
82 | @Override
83 | public void onRefresh() {
84 | mPresenter.refreshArticles();
85 | }
86 | });
87 |
88 | // RecyclerView
89 | this.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
90 | @Override
91 | public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
92 | super.onScrollStateChanged(recyclerView, newState);
93 | }
94 |
95 | @Override
96 | public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
97 | super.onScrolled(recyclerView, dx, dy);
98 | GridLayoutManager layoutManager = (GridLayoutManager) recyclerView.getLayoutManager();
99 | if (layoutManager.findLastVisibleItemPosition() == recyclerView.getAdapter().getItemCount() - 1) {
100 | mPresenter.loadNextPageArticles();
101 | }
102 | }
103 | });
104 | }
105 |
106 | @Override
107 | public void showArticles(List articleList) {
108 | this.mAdapter = new ArticlesListAdapter(articleList);
109 | GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 1);
110 | this.recyclerView.setLayoutManager(gridLayoutManager);
111 | this.recyclerView.setAdapter(this.mAdapter);
112 | }
113 |
114 | @Override
115 | public void appendArticles(List articleList) {
116 | this.mAdapter.appendArticles(articleList);
117 | this.mAdapter.notifyDataSetChanged();
118 | }
119 |
120 | @Override
121 | public void showError(Throwable error) {
122 | Toast.makeText(getContext(), "Unknown", Toast.LENGTH_LONG).show();
123 | }
124 |
125 | @Override
126 | public void setPresenter(ArticlesContract.Presenter presenter) {
127 | mPresenter = checkNotNull(presenter);
128 | }
129 |
130 | @Override
131 | public void showLoading() {
132 | swipeRefreshLayout.setRefreshing(true);
133 | }
134 |
135 | @Override
136 | public void hideLoading() {
137 | swipeRefreshLayout.setRefreshing(false);
138 | }
139 | }
140 |
--------------------------------------------------------------------------------