├── .gitignore
├── .idea
├── compiler.xml
├── copyright
│ └── profiles_settings.xml
├── encodings.xml
├── markdown-exported-files.xml
├── markdown-navigator.xml
├── markdown-navigator
│ └── profiles_settings.xml
├── misc.xml
├── modules.xml
└── runConfigurations.xml
├── CHANGESLOG.md
├── LICENSE
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── gear
│ │ └── yc
│ │ └── com
│ │ └── gearapplication
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── gear
│ │ │ └── yc
│ │ │ └── com
│ │ │ └── gearapplication
│ │ │ ├── base
│ │ │ ├── BaseActivity.java
│ │ │ ├── BaseApplication.java
│ │ │ ├── BasePresenter.java
│ │ │ └── BaseView.java
│ │ │ ├── component
│ │ │ ├── ComponentManager.java
│ │ │ ├── ComponentPresenter.java
│ │ │ ├── medules
│ │ │ │ ├── AdapterModel.java
│ │ │ │ ├── ModulePojo.java
│ │ │ │ └── ModulePresenter.java
│ │ │ └── scope
│ │ │ │ └── ActivityScope.java
│ │ │ ├── config
│ │ │ └── APIConfig.java
│ │ │ ├── demo
│ │ │ ├── activity
│ │ │ │ ├── DataBindingActivity.java
│ │ │ │ ├── FunctionListActivity.java
│ │ │ │ ├── MainActivity.java
│ │ │ │ ├── RecyclerViewActivity.java
│ │ │ │ ├── RxJavaActivity.java
│ │ │ │ └── WebViewActivity.java
│ │ │ └── network
│ │ │ │ ├── Request.java
│ │ │ │ └── RouterDemo.java
│ │ │ ├── manager
│ │ │ ├── APIDataSourceManager.java
│ │ │ └── CommonManager.java
│ │ │ ├── network
│ │ │ ├── HttpServiceManager.java
│ │ │ ├── helper
│ │ │ │ └── SchedulersHelper.java
│ │ │ └── service
│ │ │ │ ├── APIService.java
│ │ │ │ ├── ApiService.java
│ │ │ │ ├── BreadtripAPI.java
│ │ │ │ ├── QyerGuideAPI.java
│ │ │ │ └── TravelNotesAPI.java
│ │ │ ├── pojo
│ │ │ ├── APIDataSource.java
│ │ │ ├── Clock.java
│ │ │ ├── ResponseJson.java
│ │ │ ├── TravelNoteBook.java
│ │ │ ├── TravelNotesList.java
│ │ │ └── User.java
│ │ │ ├── ui
│ │ │ ├── activity
│ │ │ │ ├── SearchBooksActivity.java
│ │ │ │ ├── TravelNotesBookDetailsActivity.java
│ │ │ │ └── WelcomeActivity.java
│ │ │ ├── adapter
│ │ │ │ └── RecyclerListDemoAdapter.java
│ │ │ ├── custom
│ │ │ │ ├── animation
│ │ │ │ │ └── ManagerAnimation.java
│ │ │ │ └── view
│ │ │ │ │ └── CustomVideoView.java
│ │ │ └── mvp
│ │ │ │ └── travelnotes
│ │ │ │ ├── TravelNotesActivity.java
│ │ │ │ ├── TravelNotesAdapter.java
│ │ │ │ ├── TravelNotesContract.java
│ │ │ │ └── TravelNotesPresenter.java
│ │ │ └── utils
│ │ │ ├── DataRouting
│ │ │ ├── APIDataRouting.java
│ │ │ └── annotation
│ │ │ │ ├── LoadData.java
│ │ │ │ └── Query.java
│ │ │ └── EncryptUtil.java
│ └── res
│ │ ├── drawable-hdpi
│ │ ├── bg_img.png
│ │ ├── img_back.png
│ │ ├── img_gridview.png
│ │ ├── img_lv.png
│ │ └── img_search.png
│ │ ├── drawable
│ │ └── bg_books_item_text_bg.xml
│ │ ├── layout
│ │ ├── activity_databinding.xml
│ │ ├── activity_gear.xml
│ │ ├── activity_main.xml
│ │ ├── activity_recycler_view.xml
│ │ ├── activity_search_books.xml
│ │ ├── activity_travel_notes.xml
│ │ ├── activity_travel_notes_book_details.xml
│ │ ├── activity_web_view.xml
│ │ ├── activity_welcome.xml
│ │ ├── demo_indicator_progress_bar.xml
│ │ ├── function_list_activity.xml
│ │ ├── include_header_back.xml
│ │ ├── include_header_search.xml
│ │ ├── item_foot.xml
│ │ ├── item_recycler_view.xml
│ │ ├── item_travel_notes.xml
│ │ └── layout_databinding_user_pwd.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ │ ├── raw
│ │ ├── guide_1.mp4
│ │ └── guide_2.mp4
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── gear
│ └── yc
│ └── com
│ └── gearapplication
│ ├── ui
│ └── mvp
│ │ └── travelnotes
│ │ └── TravelNotesPresenterTest.java
│ └── utils
│ └── EncryptUtilTest.java
├── build.gradle
├── gearapifinder-annotation
├── .gitignore
├── bintray.gradle
├── build.gradle
├── gradle.properties
└── src
│ └── main
│ └── java
│ └── com
│ └── gear
│ └── apifinder
│ └── annotation
│ ├── APICustomHandleResult.java
│ ├── APIHandleResult.java
│ ├── APIManager.java
│ ├── APIRouter.java
│ └── APIService.java
├── gearapifinder-compiler
├── bintray.gradle
├── build.gradle
├── gradle.properties
├── readme.md
└── src
│ └── main
│ └── java
│ └── gear
│ └── yc
│ └── finder
│ ├── FinderProcesser.java
│ ├── anno
│ └── handler
│ │ ├── APIManagerHandler.java
│ │ ├── APIRouterHandler.java
│ │ ├── APIServiceHandler.java
│ │ └── AbstractAnnotationHandler.java
│ ├── model
│ ├── APIManagerElementModel.java
│ ├── APIRouterModel.java
│ ├── BaseModel.java
│ └── ServiceElementModel.java
│ ├── utils
│ ├── MtdHead.java
│ ├── MtdMark.java
│ └── StrHandling.java
│ └── write
│ ├── APIManagerWrite.java
│ ├── APIRouterWrite.java
│ └── AbstractWrite.java
├── gearapifinder
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── gamedemo
│ │ └── ycz
│ │ └── cn
│ │ └── gearapifinder
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ └── res
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── gamedemo
│ └── ycz
│ └── cn
│ └── gearapifinder
│ └── ExampleUnitTest.java
├── gearlibrary
├── .gitignore
├── bintray.gradle
├── build.gradle
├── proguard-rules.pro
├── readme.md
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── gear
│ │ └── yc
│ │ └── com
│ │ └── gearlibrary
│ │ ├── GearActivity.java
│ │ ├── GearApplication.java
│ │ ├── GearFragment.java
│ │ ├── RxLifecycle2DemoActivity.java
│ │ ├── RxLifecycle2DemoFragment.java
│ │ ├── intarface
│ │ └── view
│ │ │ └── GearRecyclerMore.java
│ │ ├── manager
│ │ └── ActivityManager.java
│ │ ├── network
│ │ ├── api
│ │ │ └── GearHttpServiceManager.java
│ │ ├── http
│ │ │ ├── HttpInfo.java
│ │ │ └── OkHttpManager.java
│ │ └── socker
│ │ │ ├── SocketTCPService.java
│ │ │ └── SocketTcpContextListener.java
│ │ ├── rxjava
│ │ ├── helper
│ │ │ └── RxSchedulersHelper.java
│ │ └── rxbus
│ │ │ ├── RxBus.java
│ │ │ ├── annotation
│ │ │ ├── Subscribe.java
│ │ │ └── UseRxBus.java
│ │ │ ├── event
│ │ │ ├── EventTag.java
│ │ │ └── EventThread.java
│ │ │ └── pojo
│ │ │ └── Msg.java
│ │ ├── ui
│ │ ├── adapter
│ │ │ └── GearRecyclerViewAdapter.java
│ │ └── custom
│ │ │ ├── GearRecyclerItemDecoration.java
│ │ │ └── GearRecyclerView.java
│ │ └── utils
│ │ ├── ConvertPadPlus.java
│ │ ├── IndicatorProgressBar.java
│ │ ├── Preconditions.java
│ │ ├── ProgressDialogUtil.java
│ │ ├── ToastUtil.java
│ │ ├── encryption
│ │ ├── BASE64.java
│ │ └── DES.java
│ │ └── web
│ │ └── BaseWeb.java
│ └── res
│ ├── anim
│ ├── backin.xml
│ ├── backout.xml
│ ├── zoomin.xml
│ └── zoomout.xml
│ ├── drawable
│ └── progress_horizontal.xml
│ ├── layout
│ └── item_foot.xml
│ └── values
│ ├── attrs.xml
│ ├── colors.xml
│ └── strings.xml
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── readme.md
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io/api/android,intellij,gradle
2 |
3 | ### Android ###
4 | # Built application files
5 | *.apk
6 | *.ap_
7 |
8 | # Files for the ART/Dalvik VM
9 | *.dex
10 |
11 | # Java class files
12 | *.class
13 |
14 | # Generated files
15 | bin/
16 | gen/
17 | out/
18 |
19 | # Gradle files
20 | .gradle/
21 | build/
22 |
23 | # Local configuration file (sdk path, etc)
24 | local.properties
25 |
26 | # Proguard folder generated by Eclipse
27 | proguard/
28 |
29 | # Log Files
30 | *.log
31 |
32 | # Android Studio Navigation editor temp files
33 | .navigation/
34 |
35 | # Android Studio captures folder
36 | captures/
37 |
38 | # Intellij
39 | *.iml
40 | .idea/workspace.xml
41 | .idea/libraries
42 |
43 | # Keystore files
44 | *.jks
45 |
46 | ### Android Patch ###
47 | gen-external-apklibs
48 |
49 |
50 | ### Intellij ###
51 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
52 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
53 |
54 | # User-specific stuff:
55 | .idea/workspace.xml
56 | .idea/tasks.xml
57 | .idea/dictionaries
58 | .idea/vcs.xml
59 | .idea/jsLibraryMappings.xml
60 |
61 | # Sensitive or high-churn files:
62 | .idea/dataSources.ids
63 | .idea/dataSources.xml
64 | .idea/dataSources.local.xml
65 | .idea/sqlDataSources.xml
66 | .idea/dynamic.xml
67 | .idea/uiDesigner.xml
68 |
69 | # Gradle:
70 | .idea/gradle.xml
71 | .idea/libraries
72 |
73 | # Mongo Explorer plugin:
74 | .idea/mongoSettings.xml
75 |
76 | ## File-based project format:
77 | *.iws
78 |
79 | ## Plugin-specific files:
80 |
81 | # IntelliJ
82 | /out/
83 |
84 | # mpeltonen/sbt-idea plugin
85 | .idea_modules/
86 |
87 | # JIRA plugin
88 | atlassian-ide-plugin.xml
89 |
90 | # Crashlytics plugin (for Android Studio and IntelliJ)
91 | com_crashlytics_export_strings.xml
92 | crashlytics.properties
93 | crashlytics-build.properties
94 | fabric.properties
95 |
96 | ### Intellij Patch ###
97 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
98 |
99 | # *.iml
100 | # modules.xml
101 | # .idea/misc.xml
102 | # *.ipr
103 |
104 |
105 | ### Gradle ###
106 | .gradle
107 | /build/
108 |
109 | # Ignore Gradle GUI config
110 | gradle-app.setting
111 |
112 | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
113 | !gradle-wrapper.jar
114 |
115 | # Cache of project
116 | .gradletasknamecache
117 |
118 | # # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
119 | # gradle/wrapper/gradle-wrapper.properties
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/markdown-exported-files.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/markdown-navigator.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 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/.idea/markdown-navigator/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
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 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/CHANGESLOG.md:
--------------------------------------------------------------------------------
1 | ##### 1.5.2
2 | ```
3 | 更新了部分第三方jar包的版本
4 | ```
5 | ##### 1.5.1
6 | ```
7 | 自动生成HTTPServiceManager文件的修改
8 | 修复apt文件创建时如果没有annotation时出现错误的情况,现在文件不会生成也不会造成其他apt相关文件错误
9 | ```
10 | ##### 1.5.0
11 | ```
12 | rxjava2.0更新
13 | bus重新改为线程安全对象
14 | 欢迎页面增加了短视频显示,并且文字渐变显示
15 | 增加Animation管理类
16 | ```
17 | ##### 1.4.2
18 | ```
19 | 更新了引用library
20 | ```
21 | ##### 1.4.1
22 | ```
23 | RxBus优化
24 | ```
25 | ##### 1.4.0
26 | ```
27 | 以 Rxlifecycle 来管理Rx生命周期
28 | 增加RxBus来发射数据
29 | ```
30 | ##### 1.3.6
31 | ```
32 | 去掉了Fresco的引用,增加了RxBus
33 | ```
34 | ##### 1.2.1
35 | ```
36 | 改变OKHttp创建方式,改为简单创建者方式构建
37 |
38 | ```
39 | ##### 1.1.1
40 | ```
41 | 修改Gearlibrary 支持最低sdk 14
42 | ```
43 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2019 hackerlc
2 |
3 | "Anti 996" License Version 1.0 (Draft)
4 |
5 | Permission is hereby granted to any individual or legal entity
6 | obtaining a copy of this licensed work (including the source code,
7 | documentation and/or related items, hereinafter collectively referred
8 | to as the "licensed work"), free of charge, to deal with the licensed
9 | work for any purpose, including without limitation, the rights to use,
10 | reproduce, modify, prepare derivative works of, distribute, publish
11 | and sublicense the licensed work, subject to the following conditions:
12 |
13 | 1. The individual or the legal entity must conspicuously display,
14 | without modification, this License and the notice on each redistributed
15 | or derivative copy of the Licensed Work.
16 |
17 | 2. The individual or the legal entity must strictly comply with all
18 | applicable laws, regulations, rules and standards of the jurisdiction
19 | relating to labor and employment where the individual is physically
20 | located or where the individual was born or naturalized; or where the
21 | legal entity is registered or is operating (whichever is stricter). In
22 | case that the jurisdiction has no such laws, regulations, rules and
23 | standards or its laws, regulations, rules and standards are
24 | unenforceable, the individual or the legal entity are required to
25 | comply with Core International Labor Standards.
26 |
27 | 3. The individual or the legal entity shall not induce, suggest or force
28 | its employee(s), whether full-time or part-time, or its independent
29 | contractor(s), in any methods, to agree in oral or written form, to
30 | directly or indirectly restrict, weaken or relinquish his or her
31 | rights or remedies under such laws, regulations, rules and standards
32 | relating to labor and employment as mentioned above, no matter whether
33 | such written or oral agreements are enforceable under the laws of the
34 | said jurisdiction, nor shall such individual or the legal entity
35 | limit, in any methods, the rights of its employee(s) or independent
36 | contractor(s) from reporting or complaining to the copyright holder or
37 | relevant authorities monitoring the compliance of the license about
38 | its violation(s) of the said license.
39 |
40 | THE LICENSED WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
41 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
42 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
43 | IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM,
44 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
45 | OTHERWISE, ARISING FROM, OUT OF OR IN ANY WAY CONNECTION WITH THE
46 | LICENSED WORK OR THE USE OR OTHER DEALINGS IN THE LICENSED WORK.
47 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 | apply plugin: 'me.tatarka.retrolambda'
3 |
4 | repositories{
5 |
6 | }
7 |
8 | android {
9 | compileSdkVersion 23
10 | buildToolsVersion '25'
11 |
12 | defaultConfig {
13 | applicationId "gear.yc.com.explore"
14 | minSdkVersion 18
15 | targetSdkVersion 23
16 | versionCode 3
17 | versionName "1.2.0"
18 | }
19 |
20 | signingConfigs {
21 | myConfig {
22 | storeFile file("./MyGearKey.jks")
23 | storePassword 'GearApplication123'
24 | keyAlias("joker")
25 | keyPassword 'joker123'
26 | }
27 | }
28 |
29 | dataBinding{
30 | enabled true
31 | }
32 |
33 | buildTypes {
34 | release {
35 | minifyEnabled false
36 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
37 | signingConfig signingConfigs.myConfig
38 | }
39 | debug {
40 | signingConfig signingConfigs.myConfig
41 | }
42 | }
43 | compileOptions {
44 | sourceCompatibility JavaVersion.VERSION_1_8
45 | targetCompatibility JavaVersion.VERSION_1_8
46 | }
47 |
48 | applicationVariants.all { variant ->
49 |
50 | // if (variant.buildType.name.equals('release')) {
51 | // variant.outputs.each { output ->
52 | // def appName = 'Explore'
53 | // def oldFile = output.outputFile
54 | // def releaseApkName
55 | // releaseApkName = appName + getVersionNameFromManifest() + '.apk'
56 | // output.outputFile = new File(oldFile.parent, releaseApkName)
57 | // }
58 | // }
59 | }
60 |
61 | lintOptions {
62 | abortOnError false
63 | }
64 | }
65 |
66 | def getVersionNameFromManifest() {
67 |
68 | return android.defaultConfig.versionName+"-"+android.defaultConfig.versionCode
69 | }
70 |
71 |
72 | dependencies {
73 | compile fileTree(include: ['*.jar'], dir: 'libs')
74 | compile project(':gearlibrary')
75 | compile 'com.android.support:support-v4:23.4.0'
76 | compile 'com.android.support:design:23.1.1'
77 | compile 'com.android.support:cardview-v7:23.4.0'
78 |
79 | compile 'com.github.bumptech.glide:glide:3.7.0'
80 | compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
81 |
82 | compile 'com.trello.rxlifecycle2:rxlifecycle:2.0.1'
83 | compile 'com.trello.rxlifecycle2:rxlifecycle-android:2.0.1'
84 | compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1'
85 |
86 | compile 'com.google.android.gms:play-services-appindexing:8.4.0'
87 | annotationProcessor 'com.google.guava:guava:19.0'
88 | compile 'com.google.dagger:dagger:2.9'
89 | annotationProcessor 'com.google.dagger:dagger-compiler:2.9'
90 | provided 'javax.annotation:jsr250-api:1.0'
91 |
92 | compile project(':gearapifinder-annotation')
93 | annotationProcessor project(':gearapifinder-compiler')
94 |
95 | testCompile 'junit:junit:4.12'
96 | }
97 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/proguard-rules.pro
--------------------------------------------------------------------------------
/app/src/androidTest/java/gear/yc/com/gearapplication/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | }
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
17 |
18 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
36 |
37 |
40 |
41 |
44 |
45 |
48 |
49 |
52 |
53 |
54 |
57 |
58 |
61 |
62 |
65 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/base/BaseActivity.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.base;
2 |
3 | import android.os.Build;
4 | import android.os.Bundle;
5 | import android.support.annotation.CallSuper;
6 | import android.support.annotation.CheckResult;
7 | import android.support.annotation.NonNull;
8 | import android.view.KeyEvent;
9 |
10 | import com.trello.rxlifecycle2.LifecycleTransformer;
11 | import com.trello.rxlifecycle2.RxLifecycle;
12 | import com.trello.rxlifecycle2.android.ActivityEvent;
13 | import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
14 |
15 | import gear.yc.com.gearlibrary.GearActivity;
16 | import gear.yc.com.gearlibrary.rxjava.rxbus.RxBus;
17 | import io.reactivex.Observable;
18 | import io.reactivex.subjects.BehaviorSubject;
19 |
20 | /**
21 | * GearApplication
22 | * Created by YichenZ on 2016/3/23 11:26.
23 | */
24 | public class BaseActivity extends GearActivity{
25 | protected final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
26 |
27 | @NonNull
28 | @CheckResult
29 | public final Observable lifecycle() {
30 | return lifecycleSubject.hide();
31 | }
32 |
33 | @NonNull
34 | @CheckResult
35 | public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) {
36 | return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
37 | }
38 |
39 | @NonNull
40 | @CheckResult
41 | public final LifecycleTransformer bindToLifecycle() {
42 | return RxLifecycleAndroid.bindActivity(lifecycleSubject);
43 | }
44 |
45 | @Override
46 | @CallSuper
47 | protected void onCreate(Bundle savedInstanceState) {
48 | super.onCreate(savedInstanceState);
49 | RxBus.getInstance().init(this);
50 | lifecycleSubject.onNext(ActivityEvent.CREATE);
51 | }
52 |
53 | @Override
54 | @CallSuper
55 | protected void onStart() {
56 | super.onStart();
57 | lifecycleSubject.onNext(ActivityEvent.START);
58 | }
59 |
60 | @Override
61 | @CallSuper
62 | protected void onResume() {
63 | super.onResume();
64 | lifecycleSubject.onNext(ActivityEvent.RESUME);
65 | }
66 |
67 | @Override
68 | @CallSuper
69 | protected void onPause() {
70 | lifecycleSubject.onNext(ActivityEvent.PAUSE);
71 | super.onPause();
72 | }
73 |
74 | @Override
75 | @CallSuper
76 | protected void onStop() {
77 | lifecycleSubject.onNext(ActivityEvent.STOP);
78 | super.onStop();
79 | }
80 |
81 | @Override
82 | @CallSuper
83 | protected void onDestroy() {
84 | lifecycleSubject.onNext(ActivityEvent.DESTROY);
85 | RxBus.getInstance().unRegister(this);
86 | super.onDestroy();
87 | }
88 |
89 |
90 | /**
91 | * 返回按钮finish activity
92 | *
93 | * @param keyCode
94 | * @param event
95 | * @return true or false
96 | */
97 | @Override
98 | public boolean onKeyDown(int keyCode, KeyEvent event) {
99 | if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
100 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
101 | finishAfterTransition();
102 | }else{
103 | finish(true);
104 | }
105 | return true;
106 | }
107 | return super.onKeyDown(keyCode, event);
108 | }
109 |
110 | public BehaviorSubject getLifecycleSubject() {
111 | return lifecycleSubject;
112 | }
113 | }
114 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/base/BaseApplication.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.base;
2 |
3 | import gear.yc.com.gearapplication.config.APIConfig;
4 | import gear.yc.com.gearapplication.manager.CommonManager;
5 | import gear.yc.com.gearapplication.network.HttpServiceManager;
6 | import gear.yc.com.gearlibrary.GearApplication;
7 | import gear.yc.com.gearlibrary.network.http.OkHttpManager;
8 |
9 | /**
10 | * GearApplication
11 | * Created by YichenZ on 2016/3/23 11:25.
12 | */
13 | public class BaseApplication extends GearApplication{
14 | @Override
15 | public void onCreate() {
16 | super.onCreate();
17 | init();
18 | }
19 |
20 | public void init(){
21 | HttpServiceManager.getInstance()
22 | .setBaseUrl(APIConfig.BASE_URL)
23 | .build(
24 | OkHttpManager.getInstance()
25 | .setHeader("apikey","beae89ef686795322d5a3c48579875d5")
26 | .build()
27 | .getClient()
28 | );
29 | CommonManager.getInstance(this);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/base/BasePresenter.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.base;
2 |
3 | /**
4 | * GearApplication
5 | * Created by YichenZ on 2016/7/1 09:30.
6 | */
7 |
8 | public interface BasePresenter{
9 |
10 | void start();
11 |
12 | void close();
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/base/BaseView.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.base;
2 |
3 | /**
4 | * GearApplication
5 | * Created by YichenZ on 2016/7/1 09:29.
6 | */
7 |
8 | public interface BaseView {
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/component/ComponentManager.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.component;
2 |
3 | import dagger.Component;
4 | import gear.yc.com.gearapplication.component.medules.ModulePojo;
5 | import gear.yc.com.gearapplication.ui.activity.WelcomeActivity;
6 |
7 | /**
8 | * GearApplication
9 | * 需要初始化的activity 并分配Module
10 | * Created by YichenZ on 2016/7/22 14:02.
11 | */
12 | @Component(modules = {ModulePojo.class})
13 | public interface ComponentManager {
14 | void inject(WelcomeActivity activity);
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/component/ComponentPresenter.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.component;
2 |
3 | import dagger.Component;
4 | import gear.yc.com.gearapplication.component.medules.AdapterModel;
5 | import gear.yc.com.gearapplication.component.medules.ModulePresenter;
6 | import gear.yc.com.gearapplication.component.scope.ActivityScope;
7 | import gear.yc.com.gearapplication.ui.mvp.travelnotes.TravelNotesActivity;
8 |
9 | /**
10 | * GearApplication
11 | * 需要初始化的activity并分配此activity需要的modules,modules类中标示为@Provides的方法可以共用
12 | * 例如 AdapterModel中需要TravelNotesActivity这个参数,而它就可以使用ModulePresenter中provideActivity
13 | * 方法获取相关依赖。
14 | * 都是由Dagger2通过反射自动判断。
15 | * Created by YichenZ on 2016/7/22 14:02.
16 | */
17 | @ActivityScope
18 | @Component(modules = { ModulePresenter.class, AdapterModel.class})
19 | public interface ComponentPresenter {
20 | void inject(TravelNotesActivity activity);
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/component/medules/AdapterModel.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.component.medules;
2 |
3 | import java.util.ArrayList;
4 |
5 | import dagger.Module;
6 | import dagger.Provides;
7 | import gear.yc.com.gearapplication.component.scope.ActivityScope;
8 | import gear.yc.com.gearapplication.ui.mvp.travelnotes.TravelNotesActivity;
9 | import gear.yc.com.gearapplication.ui.mvp.travelnotes.TravelNotesAdapter;
10 |
11 | /**
12 | * GearApplication
13 | * Dagger中相关Adapter所需要使用的model,初始化相关的adapter,可复用
14 | * @Module 意思为表明此类为Module类
15 | * @ActivityScope 标示此类的生命周期与activity相同
16 | * Created by YichenZ on 2016/7/29 17:35.
17 | */
18 | @Module
19 | @ActivityScope
20 | public class AdapterModel {
21 |
22 | @Provides
23 | public TravelNotesAdapter provideAdapterData(TravelNotesActivity activity){
24 | return new TravelNotesAdapter(activity,new ArrayList<>());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/component/medules/ModulePojo.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.component.medules;
2 |
3 | import dagger.Module;
4 | import dagger.Provides;
5 | import gear.yc.com.gearapplication.pojo.Clock;
6 |
7 | /**
8 | * GearApplication
9 | * Created by YichenZ on 2016/7/22 14:31.
10 | */
11 | @Module
12 | public class ModulePojo {
13 |
14 | @Provides
15 | public Clock provideClock(){
16 | return new Clock();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/component/medules/ModulePresenter.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.component.medules;
2 |
3 | import dagger.Module;
4 | import dagger.Provides;
5 | import gear.yc.com.gearapplication.component.scope.ActivityScope;
6 | import gear.yc.com.gearapplication.ui.mvp.travelnotes.TravelNotesActivity;
7 | import gear.yc.com.gearapplication.ui.mvp.travelnotes.TravelNotesContract;
8 | import gear.yc.com.gearapplication.ui.mvp.travelnotes.TravelNotesPresenter;
9 |
10 | /**
11 | * GearApplication
12 | * Presenter的Module类
13 | * 两个变量表示Presenter所需要的初始化的数据
14 | * @Provides 标识我们所提供的依赖
15 | * Created by YichenZ on 2016/7/22 14:58.
16 | */
17 | @Module
18 | @ActivityScope
19 | public class ModulePresenter {
20 | TravelNotesContract.View view;
21 | TravelNotesActivity obj;
22 |
23 | public ModulePresenter(TravelNotesContract.View view,TravelNotesActivity obj){
24 | this.view=view;
25 | this.obj=obj;
26 | }
27 |
28 | @Provides
29 | public TravelNotesPresenter provideTravelNotes(){
30 | return new TravelNotesPresenter(view,obj);
31 | }
32 |
33 | @Provides
34 | public TravelNotesActivity provideActivity(){
35 | return obj;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/component/scope/ActivityScope.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.component.scope;
2 |
3 | import java.lang.annotation.Retention;
4 |
5 | import javax.inject.Scope;
6 |
7 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
8 |
9 | /**
10 | * 标示Activity的生命周期
11 | */
12 | @Scope
13 | @Retention(RUNTIME)
14 | public @interface ActivityScope {
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/config/APIConfig.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.config;
2 |
3 | /**
4 | * GearApplication
5 | * Created by YichenZ on 2016/4/13 17:03.
6 | */
7 | public class APIConfig {
8 | public final static String BASE_URL="http://120.27.118.74/";
9 | public final static String BASE_URL_TRAVEL_NOTES="http://apis.baidu.com/qunartravel/travellist/";
10 |
11 | public final static String BASE_URL_BREADTRIP="http://api.breadtrip.com/v2/search/";
12 | public final static String BASE_URL_BREADTRIP_DETIAL="http://web.breadtrip.com/trips/";
13 |
14 | public final static String BASE_URL_QYER_GUIDE_TOKEN="http://guide.open.qyer.com/device/register";
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/demo/activity/DataBindingActivity.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.demo.activity;
2 |
3 | import android.databinding.DataBindingUtil;
4 | import android.os.Bundle;
5 | import android.os.Handler;
6 | import android.os.Message;
7 | import android.support.annotation.Nullable;
8 |
9 | import gear.yc.com.gearapplication.R;
10 | import gear.yc.com.gearapplication.base.BaseActivity;
11 | import gear.yc.com.gearapplication.databinding.ActivityDatabindingBinding;
12 | import gear.yc.com.gearapplication.network.APIServiceManager;
13 | import gear.yc.com.gearapplication.pojo.ResponseJson;
14 | import gear.yc.com.gearapplication.pojo.User;
15 | import gear.yc.com.gearlibrary.rxjava.helper.RxSchedulersHelper;
16 |
17 | /**
18 | * GearApplication
19 | * Created by YichenZ on 2016/3/23 15:25.
20 | */
21 | public class DataBindingActivity extends BaseActivity {
22 | User user;
23 | ActivityDatabindingBinding binding;
24 |
25 | @Override
26 | protected void onCreate(@Nullable Bundle savedInstanceState) {
27 | super.onCreate(savedInstanceState);
28 | initUI();
29 | initData();
30 | new Thread(runnable).start();
31 |
32 | }
33 |
34 | @Override
35 | public void initUI() {
36 | super.initUI();
37 | binding = DataBindingUtil.setContentView(this, R.layout.activity_databinding);
38 | }
39 |
40 | @Override
41 | public void initData() {
42 | super.initData();
43 | user = new User();
44 | user.setUid("2213");
45 | user.setUsername("Joker");
46 | user.setPassword("120.00");
47 | binding.setUser(user);
48 | APIServiceManager
49 | .getApiService()
50 | .getUser()
51 | .compose(RxSchedulersHelper.io_main())
52 | .subscribe(userResponseJson -> {
53 | Message msg = new Message();
54 | msg.obj = userResponseJson;
55 | msg.what = 1;
56 | handler.sendMessage(msg);
57 | });
58 |
59 | APIServiceManager
60 | .getTravelNotesAPI()
61 | .getTravelNotesList("", "1")
62 | .compose(RxSchedulersHelper.io_main())
63 | .subscribe(tnbs -> {
64 | Message msg = new Message();
65 | msg.obj = tnbs;
66 | msg.what = 2;
67 | handler.sendMessage(msg);
68 | });
69 | }
70 |
71 | Runnable runnable = new Runnable() {
72 | @Override
73 | public void run() {
74 | try {
75 | Thread.sleep(3000);
76 | user.setPassword("321.10");
77 | handler.sendEmptyMessage(0);
78 | } catch (InterruptedException e) {
79 | e.printStackTrace();
80 | }
81 | }
82 | };
83 |
84 | Handler handler = new Handler() {
85 | @Override
86 | public void handleMessage(Message msg) {
87 | super.handleMessage(msg);
88 | if (msg.obj != null) {
89 | if (msg.what == 1) {
90 | user = ((ResponseJson) msg.obj).getData();
91 | if (user != null) {
92 | binding.setUser(user);
93 | } else {
94 |
95 | }
96 | }
97 | } else {
98 |
99 | }
100 | }
101 | };
102 | }
103 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/demo/activity/FunctionListActivity.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.demo.activity;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.view.View;
6 | import android.widget.Button;
7 |
8 | import gear.yc.com.gearapplication.base.BaseActivity;
9 | import gear.yc.com.gearapplication.R;
10 |
11 | /**
12 | * GearApplication
13 | * Created by YichenZ on 2016/3/23 11:14.
14 | */
15 | public class FunctionListActivity extends BaseActivity {
16 | Button mainActivity;
17 | Button mainDataBinding;
18 | Button btn_RxJava;
19 | Button btn_WebView;
20 | Button btn_recycler;
21 |
22 | @Override
23 | protected void onCreate(@Nullable Bundle savedInstanceState) {
24 | super.onCreate(savedInstanceState);
25 | initUI();
26 | initData();
27 | }
28 |
29 | @Override
30 | public void initUI() {
31 | super.initUI();
32 | setContentView(R.layout.function_list_activity);
33 |
34 | mainActivity=(Button)findViewById(R.id.btn_main_activity);
35 | mainDataBinding=(Button)findViewById(R.id.btn_data_binding);
36 | btn_RxJava=(Button)findViewById(R.id.btn_RxJava);
37 | btn_WebView=(Button)findViewById(R.id.btn_WebView);
38 | btn_recycler=(Button)findViewById(R.id.btn_recycler);
39 |
40 | mainActivity.setOnClickListener(this);
41 | mainDataBinding.setOnClickListener(this);
42 | btn_RxJava.setOnClickListener(this);
43 | btn_WebView.setOnClickListener(this);
44 | btn_recycler.setOnClickListener(this);
45 | }
46 |
47 | @Override
48 | public void onClick(View v) {
49 | super.onClick(v);
50 | switch (v.getId()) {
51 | case R.id.btn_data_binding:
52 | strActivity(this,DataBindingActivity.class);
53 | break;
54 | case R.id.btn_main_activity:
55 | strActivity(this,MainActivity.class);
56 | break;
57 | case R.id.btn_RxJava:
58 | strActivity(this,RxJavaActivity.class);
59 | break;
60 | case R.id.btn_WebView:
61 | strActivity(this,WebViewActivity.class);
62 | break;
63 | case R.id.btn_recycler:
64 | strActivity(this,RecyclerViewActivity.class);
65 | break;
66 | }
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/demo/activity/MainActivity.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.demo.activity;
2 |
3 | import android.os.Bundle;
4 | import android.os.Handler;
5 | import android.os.Message;
6 | import android.support.design.widget.Snackbar;
7 | import android.widget.TextView;
8 |
9 | import gear.yc.com.gearapplication.base.BaseActivity;
10 | import gear.yc.com.gearapplication.R;
11 | import gear.yc.com.gearlibrary.network.http.HttpInfo;
12 |
13 | public class MainActivity extends BaseActivity {
14 | TextView hello_tv;
15 |
16 | @Override
17 | protected void onCreate(Bundle savedInstanceState) {
18 | super.onCreate(savedInstanceState);
19 | setContentView(R.layout.activity_main);
20 | hello_tv = (TextView) findViewById(R.id.hello_tv);
21 | hello_tv.setOnClickListener(v -> Snackbar.make(v, "Replace with your own action", Snackbar.LENGTH_LONG)
22 | .setAction("Action", v1 -> hello_tv.setText("On Click Hello")).show());
23 | testOkHttp();
24 |
25 | }
26 |
27 | /**
28 | * git
29 | */
30 | public void testOkHttp(){
31 | try {
32 | HttpInfo.getInstance().getHttpOfGet("http://www.baidu.com",mHandler);
33 | } catch (Exception e) {
34 | e.printStackTrace();
35 | }
36 | // ExecutorService mExecutorS=Executors.newFixedThreadPool(3);
37 | // mExecutorS.execute(new Runnable() {
38 | // @Override
39 | // public void run() {
40 | // try {
41 | // String str = OkHttpManager.getInstance().getHttpOfGet("http://www.baidu.com").body().string();
42 | // Message message =new Message();
43 | // message.obj=str;
44 | // mHandler.sendMessage(message);
45 | // } catch (Exception e) {
46 | // e.printStackTrace();
47 | // }
48 | //
49 | // }
50 | // });
51 | // OkHttpClient okHttpClient =new OkHttpClient();
52 | //
53 | // FormBody formBodys=new FormBody.Builder()
54 | // .add("city","248").build();
55 | //
56 | // final Request request =new Request.Builder()
57 | // .post(RequestBody.create(MediaType.parse("application/json"),"{\"module_id\":\"101\"}"))
58 | // .url("http://test.awu.cn/api/index.php?act=main").build();
59 | //
60 | // final Call call=okHttpClient.newCall(request);
61 | //
62 |
63 |
64 |
65 | // call.enqueue(new Callback() {
66 | // @Override
67 | // public void onFailure(Call call, IOException e) {
68 | // e.printStackTrace();
69 | // }
70 | //
71 | // @Override
72 | // public void onResponse(Call call, Response response) throws IOException {
73 | // final Message message = new Message();
74 | // message.what = 1;
75 | // message.obj = response.body().string();
76 | // runOnUiThread(new Runnable() {
77 | // @Override
78 | // public void run() {
79 | // mHandler.sendMessage(message);
80 | // }
81 | // });
82 | //
83 | // }
84 | // });
85 |
86 | }
87 |
88 | Handler mHandler =new Handler(new Handler.Callback() {
89 | @Override
90 | public boolean handleMessage(Message msg) {
91 | hello_tv.setText((String)msg.obj);
92 | return true;
93 | }
94 | });
95 | }
96 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/demo/activity/RecyclerViewActivity.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.demo.activity;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.support.v7.widget.LinearLayoutManager;
6 | import android.support.v7.widget.RecyclerView;
7 |
8 | import java.util.ArrayList;
9 |
10 | import gear.yc.com.gearapplication.base.BaseActivity;
11 | import gear.yc.com.gearapplication.R;
12 | import gear.yc.com.gearapplication.ui.adapter.RecyclerListDemoAdapter;
13 | import gear.yc.com.gearapplication.pojo.User;
14 | import gear.yc.com.gearlibrary.ui.custom.GearRecyclerItemDecoration;
15 |
16 | /**
17 | * GearApplication
18 | * Created by YichenZ on 2016/3/30 14:10.
19 | */
20 | public class RecyclerViewActivity extends BaseActivity{
21 | private RecyclerView recyclerView;
22 | private ArrayList users;
23 | private RecyclerListDemoAdapter rListDemoAdapter;
24 |
25 | @Override
26 | protected void onCreate(@Nullable Bundle savedInstanceState) {
27 | super.onCreate(savedInstanceState);
28 | initUI();
29 | initData();
30 | }
31 |
32 | @Override
33 | public void initUI() {
34 | super.initUI();
35 | setContentView(R.layout.activity_recycler_view);
36 | recyclerView=(RecyclerView)findViewById(R.id.rv_data_list);
37 | }
38 |
39 | @Override
40 | public void initData() {
41 | super.initData();
42 | users=new ArrayList();
43 | for (int i='A';i<'z';i++){
44 | User user=new User();
45 | user.setUsername("joker:"+(char)i);
46 | user.setHeadPortrait("http://img1.3lian.com/2015/w7/98/d/22.jpg");
47 | user.setUid("89723");
48 | users.add(user);
49 | }
50 | recyclerView.setLayoutManager(new LinearLayoutManager(this));
51 | recyclerView.addItemDecoration(new GearRecyclerItemDecoration(this,LinearLayoutManager.VERTICAL));
52 | rListDemoAdapter=new RecyclerListDemoAdapter(this,users);
53 | recyclerView.setAdapter(rListDemoAdapter);
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/demo/activity/RxJavaActivity.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.demo.activity;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 |
6 | import org.reactivestreams.Subscriber;
7 | import org.reactivestreams.Subscription;
8 |
9 | import gear.yc.com.gearapplication.base.BaseActivity;
10 | import io.reactivex.Observable;
11 |
12 | /**
13 | * GearApplication
14 | * Created by YichenZ on 2016/3/25 16:40.
15 | */
16 | public class RxJavaActivity extends BaseActivity{
17 | @Override
18 | protected void onCreate(@Nullable Bundle savedInstanceState) {
19 | super.onCreate(savedInstanceState);
20 | // 1.
21 | // mObservable.subscribe(mSubscriber);
22 | // 2.
23 | // Observable.just("Hello world").subscribe(new Action1() {
24 | // @Override
25 | // public void call(String s) {
26 | // System.out.println(s);
27 | // }
28 | // });
29 | //3.
30 | // Observable.just("Hello world").subscribe(s -> System.out.println(s));
31 |
32 | //3. map
33 | // Observable.just("Hello world")
34 | // .map(s -> s+"Joker")
35 | // .map(s -> s.hashCode())
36 | // .map(i -> Integer.toString(i))
37 | // .subscribe(s -> System.out.println(s));
38 |
39 | //4
40 | // List urls =new ArrayList();
41 | // urls.add("a");
42 | // urls.add("b");
43 | // Observable.just(urls)
44 | // .flatMap( u -> Observable.from(u))
45 | // .subscribe(url -> System.out.println(url));
46 | //5 Demo
47 | Observable.just("#Basic Markdown to HTML with lambda")
48 | .filter(s -> s!=null && s.startsWith("#"))
49 | .map(s -> ""+s.substring(1,s.length())+"
")
50 | .subscribe(System.out::println);
51 |
52 |
53 | }
54 | //4
55 | // Observable> query(String text){
56 | // return Observable.create(Observable>);
57 | // }
58 |
59 | // //1.
60 | // Flowable mObservable = Flowable.create(new FlowableOnSubscribe() {
61 | // @Override
62 | // public void subscribe(FlowableEmitter e) throws Exception {
63 | // e.onNext("Hello world");
64 | // e.onComplete();
65 | // }
66 | // });
67 |
68 | //1.
69 | Subscriber mSubscriber =new Subscriber() {
70 | @Override
71 | public void onError(Throwable e) {
72 |
73 | }
74 |
75 | @Override
76 | public void onComplete() {
77 |
78 | }
79 |
80 | @Override
81 | public void onSubscribe(Subscription s) {
82 |
83 | }
84 |
85 | @Override
86 | public void onNext(String s) {
87 | System.out.println(s);
88 | }
89 | };
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/demo/network/Request.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.demo.network;
2 |
3 | /**
4 | * GearApplication
5 | * Created by YichenZ on 2016/8/12 14:47.
6 | */
7 |
8 | public final class Request {
9 | private final String url;
10 | private final String method;
11 |
12 | public Request(Builder builder){
13 | this.url=builder.url;
14 | this.method=builder.method;
15 | }
16 |
17 | public String getUrl() {
18 | return url;
19 | }
20 |
21 | public String getMethod() {
22 | return method;
23 | }
24 |
25 | public static class Builder{
26 | private String url;
27 | private String method;
28 |
29 | public Builder(){
30 | this.method="GET";
31 | }
32 |
33 | public Builder url(String url){
34 | this.url=url;
35 | return this;
36 | }
37 |
38 | public Builder method(String method){
39 | this.method=method;
40 | return this;
41 | }
42 |
43 | public Request build(){
44 | return new Request(this);
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/demo/network/RouterDemo.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.demo.network;
2 |
3 | import com.trello.rxlifecycle2.LifecycleTransformer;
4 | import com.trello.rxlifecycle2.RxLifecycle;
5 | import com.trello.rxlifecycle2.android.ActivityEvent;
6 |
7 | import gear.yc.com.gearapplication.network.APIServiceManager;
8 | import gear.yc.com.gearapplication.network.helper.SchedulersHelper;
9 | import gear.yc.com.gearapplication.pojo.TravelNoteBook;
10 | import io.reactivex.Flowable;
11 | import io.reactivex.android.schedulers.AndroidSchedulers;
12 | import io.reactivex.schedulers.Schedulers;
13 | import io.reactivex.subjects.BehaviorSubject;
14 |
15 | /**
16 | * GearApplication
17 | * Created by YichenZ on 2017/3/30 13:45.
18 | */
19 |
20 | public class RouterDemo {
21 |
22 | public static final Flowable getRouter(BehaviorSubjectlifecycleSubject, String query, String page){
23 | return APIServiceManager
24 | .getTravelNotesAPI()
25 | .getTravelNotesList(query, page)
26 | .compose(bindUntilEvent(lifecycleSubject))
27 | .subscribeOn(Schedulers.io())
28 | .observeOn(AndroidSchedulers.mainThread())
29 | .compose(SchedulersHelper.handleResult());
30 | }
31 |
32 | public static final LifecycleTransformer bindUntilEvent(BehaviorSubject lifecycleSubject) {
33 | return RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY);
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/manager/APIDataSourceManager.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.manager;
2 |
3 | import gear.yc.com.gearapplication.pojo.APIDataSource;
4 |
5 | /**
6 | * GearApplication
7 | * Created by YichenZ on 2016/7/13 10:53.
8 | */
9 |
10 | public class APIDataSourceManager {
11 | public static APIDataSource mDataSource = APIDataSource.DEFAULT;
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/manager/CommonManager.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.manager;
2 |
3 | import android.app.Application;
4 | import android.content.Context;
5 | import android.content.pm.PackageInfo;
6 | import android.content.pm.PackageManager;
7 | import android.support.annotation.NonNull;
8 | import android.util.DisplayMetrics;
9 | import android.view.WindowManager;
10 |
11 | /**
12 | * GearApplication
13 | * Created by YichenZ on 2016/6/27 14:42.
14 | */
15 |
16 | public class CommonManager {
17 | private static CommonManager instance;
18 |
19 | public static CommonManager getInstance(@NonNull Application application) {
20 | if (instance == null) {
21 | synchronized (CommonManager.class) {
22 | if (instance == null) {
23 | instance = new CommonManager(application);
24 | }
25 | }
26 | }
27 | return instance;
28 | }
29 |
30 | public static CommonManager getInstance() {
31 | return instance;
32 | }
33 |
34 | private Application mApplication;
35 | //程序信息
36 | private PackageInfo packageInfo;
37 |
38 | //系统版本号以及版本名称
39 | private short currVerCode = 0;
40 | private String currVerName;
41 |
42 | private int mobileWidth = 0;
43 | private int mobileHeight = 0;
44 |
45 | public CommonManager(Application application) {
46 | mApplication = application;
47 | init();
48 | }
49 |
50 | private void init() {
51 | if (currVerCode == 0 && currVerName == null) {
52 | try {
53 | packageInfo = mApplication.getPackageManager().getPackageInfo(mApplication.getPackageName(), 0);
54 | } catch (PackageManager.NameNotFoundException e) {
55 | e.printStackTrace();
56 | }
57 | currVerCode = (short) packageInfo.versionCode;
58 | currVerName = packageInfo.packageName;
59 | }
60 | }
61 |
62 | public short getCurrVerCode() {
63 | return currVerCode;
64 | }
65 |
66 | public String getCurrVerName() {
67 | return currVerName;
68 | }
69 |
70 | public int getMobileWidth(Context context) {
71 | if (mobileWidth == 0) {
72 | getMobileWindow(context);
73 | }
74 | return mobileWidth;
75 | }
76 |
77 | public int getMobileHeight(Context context) {
78 | if (mobileHeight == 0) {
79 | getMobileWindow(context);
80 | }
81 | return mobileHeight;
82 | }
83 |
84 | private void getMobileWindow(Context context) {
85 | DisplayMetrics dm = new DisplayMetrics();
86 | ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm);
87 | mobileWidth = new Integer(dm.widthPixels);
88 | mobileHeight = new Integer(dm.heightPixels);
89 | dm=null;
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/network/HttpServiceManager.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.network;
2 |
3 | import com.gear.apifinder.annotation.APIManager;
4 | import com.gear.apifinder.annotation.APIRouter;
5 |
6 | import gear.yc.com.gearlibrary.network.api.GearHttpServiceManager;
7 |
8 | /**
9 | * GearApplication
10 | * Created by YichenZ on 2017/1/18 17:01.
11 | */
12 | @APIManager
13 | @APIRouter(value = "DEMO")
14 | public class HttpServiceManager extends GearHttpServiceManager {
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/network/helper/SchedulersHelper.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.network.helper;
2 |
3 | import org.reactivestreams.Publisher;
4 |
5 | import gear.yc.com.gearapplication.pojo.ResponseJson;
6 | import io.reactivex.BackpressureStrategy;
7 | import io.reactivex.Flowable;
8 | import io.reactivex.FlowableTransformer;
9 | import io.reactivex.functions.Function;
10 |
11 | /**
12 | * Created by Android on 2016/6/16.
13 | */
14 | public class SchedulersHelper {
15 | static String str="暂无数据";
16 |
17 | public static FlowableTransformer, T> handleResult() {
18 | return responseJsonObservable -> responseJsonObservable.flatMap(
19 | tResponseJson -> {
20 | if (tResponseJson == null) {
21 | } else if(tResponseJson.getErrcode() != 0){
22 | str=tResponseJson.getErrmsg();
23 | }else {
24 | return createData(tResponseJson.getData());
25 | }
26 | return Flowable.error(new Throwable(str));
27 | });
28 | }
29 |
30 | /**
31 | * 检测面包旅行
32 | * @param
33 | * @return
34 | */
35 | public static FlowableTransformer, T> handleResultBread() {
36 | return resJsonObs -> resJsonObs.flatMap(new Function, Publisher>() {
37 | @Override
38 | public Publisher apply(ResponseJson tResponseJson) throws Exception {
39 | if (tResponseJson == null) {
40 | } else if(tResponseJson.getStatus() != 0){
41 | str=tResponseJson.getMessage();
42 | }else {
43 | return createData(tResponseJson.getData());
44 | }
45 | return Flowable.error(new Throwable(str));
46 | }
47 | });
48 | }
49 |
50 | private static Flowable createData(T data) {
51 | return Flowable.create(subscriber -> {
52 | subscriber.onNext(data);
53 | subscriber.onComplete();
54 | }, BackpressureStrategy.BUFFER);
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/network/service/APIService.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.network.service;
2 |
3 | import gear.yc.com.gearapplication.pojo.ResponseJson;
4 | import gear.yc.com.gearapplication.pojo.User;
5 | import io.reactivex.Flowable;
6 | import retrofit2.http.GET;
7 | import retrofit2.http.POST;
8 | import retrofit2.http.Path;
9 |
10 | /**
11 | * GearApplication
12 | * Created by YichenZ on 2016/4/13 14:37.
13 | */
14 | @com.gear.apifinder.annotation.APIService
15 | public interface ApiService {
16 | @GET("src/app/{path}")
17 | Flowable> getUser(@Path("path") String path);
18 |
19 | // @POST("src/app/demo.php")
20 | // Call> getUser();
21 |
22 | @POST("src/app/demo.php")
23 | Flowable> getUser();
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/network/service/ApiService.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.network.service;
2 |
3 | import gear.yc.com.gearapplication.pojo.ResponseJson;
4 | import gear.yc.com.gearapplication.pojo.User;
5 | import io.reactivex.Flowable;
6 | import retrofit2.http.GET;
7 | import retrofit2.http.POST;
8 | import retrofit2.http.Path;
9 |
10 | /**
11 | * GearApplication
12 | * Created by YichenZ on 2016/4/13 14:37.
13 | */
14 | @com.gear.apifinder.annotation.APIService
15 | public interface ApiService {
16 | @GET("src/app/{path}")
17 | Flowable> getUser(@Path("path") String path);
18 |
19 | // @POST("src/app/demo.php")
20 | // Call> getUser();
21 |
22 | @POST("src/app/demo.php")
23 | Flowable> getUser();
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/network/service/BreadtripAPI.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.network.service;
2 |
3 | import com.gear.apifinder.annotation.APIService;
4 |
5 | import gear.yc.com.gearapplication.config.APIConfig;
6 | import gear.yc.com.gearapplication.pojo.ResponseJson;
7 | import gear.yc.com.gearapplication.pojo.TravelNoteBook;
8 | import io.reactivex.Flowable;
9 | import retrofit2.http.GET;
10 | import retrofit2.http.Query;
11 |
12 | /**
13 | * GearApplication
14 | * Created by YichenZ on 2016/4/20 17:24.
15 | */
16 | @APIService
17 | public interface BreadtripAPI {
18 | @GET(APIConfig.BASE_URL_BREADTRIP+"?")
19 | Flowable> getTravelNotesList(@Query("key") String key, @Query("start") String start,
20 | @Query("count") String count, @Query("data_type") String data_type);
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/network/service/QyerGuideAPI.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.network.service;
2 |
3 | import com.gear.apifinder.annotation.APIService;
4 |
5 | import gear.yc.com.gearapplication.config.APIConfig;
6 | import gear.yc.com.gearapplication.pojo.ResponseJson;
7 | import gear.yc.com.gearapplication.pojo.TravelNoteBook;
8 | import io.reactivex.Flowable;
9 | import retrofit2.http.GET;
10 | import retrofit2.http.Query;
11 |
12 | /**
13 | * GearApplication
14 | * Created by YichenZ on 2016/4/20 17:24.
15 | */
16 | @APIService
17 | public interface QyerGuideAPI {
18 | @GET(APIConfig.BASE_URL_TRAVEL_NOTES+"travellist?")
19 | Flowable> getTravelNotesList(@Query("query") String query, @Query("page") String page);
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/network/service/TravelNotesAPI.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.network.service;
2 |
3 | import gear.yc.com.gearapplication.config.APIConfig;
4 | import gear.yc.com.gearapplication.pojo.ResponseJson;
5 | import gear.yc.com.gearapplication.pojo.TravelNoteBook;
6 | import io.reactivex.Flowable;
7 | import retrofit2.http.GET;
8 | import retrofit2.http.Query;
9 |
10 | /**
11 | * GearApplication
12 | * Created by YichenZ on 2016/4/20 17:24.
13 | */
14 | @com.gear.apifinder.annotation.APIService
15 | public interface TravelNotesAPI {
16 | @GET(APIConfig.BASE_URL_TRAVEL_NOTES+"travellist?")
17 | Flowable> getTravelNotesList(@Query("query") String query, @Query("page") String page);
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/pojo/APIDataSource.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.pojo;
2 |
3 | /**
4 | * GearApplication
5 | * Created by YichenZ on 2016/7/13 10:45.
6 | */
7 |
8 | public enum APIDataSource {
9 | DEFAULT("默认"),
10 | BREAD("面包");
11 |
12 | String value;
13 |
14 | APIDataSource(String value){
15 | this.value=value;
16 | }
17 |
18 | public String value(){
19 | return value;
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/pojo/Clock.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.pojo;
2 |
3 | import java.text.SimpleDateFormat;
4 | import java.util.Date;
5 |
6 | /**
7 | * GearApplication
8 | * Created by YichenZ on 2016/4/19 16:20.
9 | */
10 | public class Clock {
11 | private String year;
12 | private String time;
13 |
14 | public String getYear() {
15 | return year;
16 | }
17 |
18 | public void setYear(String year) {
19 | this.year = year;
20 | }
21 |
22 | public String getTime() {
23 | return time;
24 | }
25 |
26 | public void setTime(String time) {
27 | this.time = time;
28 | }
29 |
30 | /**
31 | * 设置时间
32 | * @return clock
33 | */
34 | public Clock setTime(){
35 | SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd");
36 | year=simpleDateFormat.format(new Date());
37 | simpleDateFormat=new SimpleDateFormat("HH:mm:ss");
38 | time=simpleDateFormat.format(new Date());
39 | simpleDateFormat=null;
40 | return this;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/pojo/ResponseJson.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.pojo;
2 |
3 | import com.google.gson.annotations.SerializedName;
4 |
5 | import java.io.Serializable;
6 |
7 | /**
8 | * GearApplication
9 | * Created by YichenZ on 2016/4/13 15:04.
10 | */
11 | public class ResponseJson implements Serializable {
12 |
13 | private static final long serialVersionUID = -2230862622774206736L;
14 | @SerializedName("data")
15 | private T data;
16 |
17 | public T getData() {
18 | return data;
19 | }
20 |
21 | public void setData(T data) {
22 | this.data = data;
23 | }
24 |
25 | private String ret;
26 | private int errcode;
27 | private String errmsg;
28 | private String errMsg;
29 | private String ver;
30 | private int errNum;
31 | //bread
32 | private int status;
33 | private String message;
34 |
35 | public void setMessage(String message) {
36 | this.message = message;
37 | }
38 |
39 | public void setStatus(int status) {
40 | this.status = status;
41 | }
42 |
43 | public int getStatus() {
44 | return status;
45 | }
46 |
47 | public String getMessage() {
48 | return message;
49 | }
50 |
51 | public void setErrMsg(String errMsg) {
52 | this.errMsg = errMsg;
53 | }
54 |
55 | public void setErrNum(int errNum) {
56 | this.errNum = errNum;
57 | }
58 |
59 | public String getRet() {
60 | return ret;
61 | }
62 |
63 | public void setRet(String ret) {
64 | this.ret = ret;
65 | }
66 |
67 | public int getErrcode() {
68 | return errNum==0 ? errcode:errNum;
69 | }
70 |
71 | public void setErrcode(int errcode) {
72 | this.errcode = errcode;
73 | }
74 |
75 | public String getErrmsg() {
76 | return errmsg==null ? errMsg:errmsg;
77 | }
78 |
79 | public void setErrmsg(String errmsg) {
80 | this.errmsg = errmsg;
81 | }
82 |
83 | public String getVer() {
84 | return ver;
85 | }
86 |
87 | public void setVer(String ver) {
88 | this.ver = ver;
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/pojo/TravelNoteBook.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.pojo;
2 |
3 | import com.google.gson.annotations.SerializedName;
4 |
5 | import java.util.ArrayList;
6 |
7 | import gear.yc.com.gearapplication.config.APIConfig;
8 |
9 | /**
10 | * GearApplication
11 | * Created by YichenZ on 2016/4/20 17:21.
12 | */
13 | public class TravelNoteBook {
14 |
15 | @SerializedName("books")
16 | ArrayList mBookses;
17 |
18 | public ArrayList getBookses() {
19 | if(mBookses==null){
20 | return mTrips;
21 | }
22 | return mBookses;
23 | }
24 |
25 | public void setBookses(ArrayList bookses) {
26 | mBookses = bookses;
27 | }
28 |
29 | @SerializedName("trips")
30 | ArrayList mTrips;
31 |
32 | public void setmTrips(ArrayList mTrips) {
33 | this.mTrips = mTrips;
34 | }
35 |
36 | public class Books {
37 |
38 | @SerializedName("title")
39 | String title;
40 | @SerializedName("bookUrl")
41 | String html;
42 | @SerializedName("headImage")
43 | String imgUrl;
44 |
45 | //面包接口
46 | @SerializedName("id")
47 | String id;
48 | @SerializedName("cover_image_default")
49 | String coverImageDefault;
50 | @SerializedName("name")
51 | String name;
52 |
53 | public String getId() {
54 | return id;
55 | }
56 |
57 | public void setId(String id) {
58 | this.id = id;
59 | }
60 |
61 | public void setCoverImageDefault(String coverImageDefault) {
62 | this.coverImageDefault = coverImageDefault;
63 | }
64 |
65 | public void setName(String name) {
66 | this.name = name;
67 | }
68 |
69 | public String getTitle() {
70 | if(title==null || "".equals(title)){
71 | return name;
72 | }
73 | return title;
74 | }
75 |
76 | public void setTitle(String title) {
77 | this.title = title;
78 | }
79 |
80 | public String getHtml() {
81 | if(html==null || "".equals(html)){
82 | return APIConfig.BASE_URL_BREADTRIP_DETIAL+id;
83 | }
84 | return html;
85 | }
86 |
87 | public void setHtml(String html) {
88 | this.html = html;
89 | }
90 |
91 | public String getImgUrl() {
92 | if(imgUrl==null || "".equals(imgUrl)){
93 | return coverImageDefault;
94 | }
95 | return imgUrl;
96 | }
97 |
98 | public void setImgUrl(String imgUrl) {
99 | this.imgUrl = imgUrl;
100 | }
101 | }
102 |
103 | }
104 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/pojo/TravelNotesList.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.pojo;
2 |
3 | import com.google.gson.annotations.SerializedName;
4 |
5 | import gear.yc.com.gearapplication.config.APIConfig;
6 |
7 | /**
8 | * GearApplication
9 | * Created by YichenZ on 2016/7/12 16:40.
10 | */
11 |
12 | public class TravelNotesList {
13 |
14 | @SerializedName("title")
15 | String title;
16 | @SerializedName("bookUrl")
17 | String html;
18 | @SerializedName("headImage")
19 | String imgUrl;
20 |
21 | //面包接口
22 | @SerializedName("id")
23 | String id;
24 | @SerializedName("cover_image_default")
25 | String coverImageDefault;
26 | @SerializedName("name")
27 | String name;
28 |
29 | public String getId() {
30 | return id;
31 | }
32 |
33 | public void setId(String id) {
34 | this.id = id;
35 | }
36 |
37 | public void setCoverImageDefault(String coverImageDefault) {
38 | this.coverImageDefault = coverImageDefault;
39 | }
40 |
41 | public void setName(String name) {
42 | this.name = name;
43 | }
44 |
45 | public String getTitle() {
46 | if(title==null || "".equals(title)){
47 | return name;
48 | }
49 | return title;
50 | }
51 |
52 | public void setTitle(String title) {
53 | this.title = title;
54 | }
55 |
56 | public String getHtml() {
57 | if(html==null || "".equals(html)){
58 | return APIConfig.BASE_URL_BREADTRIP_DETIAL+id;
59 | }
60 | return html;
61 | }
62 |
63 | public void setHtml(String html) {
64 | this.html = html;
65 | }
66 |
67 | public String getImgUrl() {
68 | if(imgUrl==null || "".equals(imgUrl)){
69 | return coverImageDefault;
70 | }
71 | return imgUrl;
72 | }
73 |
74 | public void setImgUrl(String imgUrl) {
75 | this.imgUrl = imgUrl;
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/pojo/User.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.pojo;
2 |
3 | import android.text.SpannableString;
4 | import android.text.Spanned;
5 | import android.text.style.AbsoluteSizeSpan;
6 |
7 | /**
8 | * GearApplication
9 | * Created by YichenZ on 2016/3/23 15:16.
10 | */
11 | public class User{
12 | private String uid;
13 | private String username;
14 | private String password;
15 | private String headPortrait;
16 |
17 | public String getUid() {
18 | return uid;
19 | }
20 |
21 | public void setUid(String uid) {
22 | this.uid = uid;
23 | }
24 |
25 | public String getUsername() {
26 | return username;
27 | }
28 |
29 | public void setUsername(String username) {
30 | this.username = username;
31 | }
32 |
33 | public String getPassword() {
34 | return password;
35 | }
36 |
37 | public void setPassword(String password) {
38 | this.password = password;
39 | }
40 |
41 | public String getHeadPortrait() {
42 | return headPortrait;
43 | }
44 |
45 | public void setHeadPortrait(String headPortrait) {
46 | this.headPortrait = headPortrait;
47 | }
48 |
49 | // 设置字的大小
50 | public SpannableString setTextSize(String pic) {
51 | int i = pic.indexOf(".");
52 | SpannableString msp = new SpannableString(pic);
53 | if (i > 0) {
54 | msp.setSpan(new AbsoluteSizeSpan(15, true), i, pic.length(),
55 | Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
56 | }
57 | return msp;
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/ui/activity/SearchBooksActivity.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.ui.activity;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.view.View;
6 | import android.view.inputmethod.EditorInfo;
7 | import android.widget.EditText;
8 | import android.widget.ImageView;
9 | import android.widget.TextView;
10 |
11 | import gear.yc.com.gearapplication.R;
12 | import gear.yc.com.gearapplication.base.BaseActivity;
13 | import gear.yc.com.gearapplication.ui.mvp.travelnotes.TravelNotesActivity;
14 | import gear.yc.com.gearlibrary.rxjava.rxbus.RxBus;
15 | import gear.yc.com.gearlibrary.utils.ToastUtil;
16 |
17 | /**
18 | * GearApplication
19 | * Created by YichenZ on 2016/4/21 16:51.
20 | */
21 | public class SearchBooksActivity extends BaseActivity {
22 | ImageView mBack;
23 | TextView mTitle;
24 | EditText mSearchBooks;
25 |
26 | String query = "";
27 |
28 | boolean isNote =true;
29 |
30 | @Override
31 | protected void onCreate(@Nullable Bundle savedInstanceState) {
32 | super.onCreate(savedInstanceState);
33 | query = getStrIntent();
34 | initUI();
35 | }
36 |
37 | @Override
38 | protected void onStop() {
39 | super.onStop();
40 | }
41 |
42 | @Override
43 | public void initUI() {
44 | super.initUI();
45 | setContentView(R.layout.activity_search_books);
46 | mBack = (ImageView) findViewById(R.id.iv_back);
47 | mBack.setOnClickListener(this);
48 | mTitle = (TextView) findViewById(R.id.tv_title);
49 | mTitle.setVisibility(View.VISIBLE);
50 | mTitle.setText("换源");
51 | mTitle.setOnClickListener(this);
52 | mSearchBooks = (EditText) findViewById(R.id.et_search_books);
53 | mSearchBooks.setOnEditorActionListener((v, i, e) -> {
54 | if (i == EditorInfo.IME_ACTION_SEARCH) {
55 | strActivity(this, TravelNotesActivity.class, true, true, mSearchBooks.getText().toString());
56 | return true;
57 | }
58 | return false;
59 | });
60 | mSearchBooks.setText(query);
61 | }
62 |
63 | @Override
64 | public void onClick(View v) {
65 | super.onClick(v);
66 | switch (v.getId()) {
67 | case R.id.iv_back:
68 | finish(true);
69 | break;
70 | case R.id.tv_title:
71 | //这里要切换api地址
72 | isNote=!isNote;
73 | if(isNote){
74 | ToastUtil.getInstance().makeShortToast(this,"默认");
75 | }else{
76 | ToastUtil.getInstance().makeShortToast(this,"面包");
77 | }
78 | RxBus.getInstance().post(100,isNote);
79 | break;
80 | }
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/ui/adapter/RecyclerListDemoAdapter.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.ui.adapter;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.RecyclerView;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.ImageView;
9 | import android.widget.TextView;
10 |
11 | import com.bumptech.glide.Glide;
12 |
13 | import java.util.ArrayList;
14 |
15 | import gear.yc.com.gearapplication.R;
16 | import gear.yc.com.gearapplication.pojo.User;
17 | import gear.yc.com.gearlibrary.ui.adapter.GearRecyclerViewAdapter;
18 |
19 | /**
20 | * GearApplication
21 | * Created by YichenZ on 2016/3/30 16:24.
22 | */
23 | public class RecyclerListDemoAdapter extends GearRecyclerViewAdapter {
24 |
25 | public RecyclerListDemoAdapter(Context context, ArrayList dates){
26 | super(context,dates);
27 | }
28 |
29 | @Override
30 | public DemoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
31 | DemoHolder demoHolder=new DemoHolder(LayoutInflater.from(mContext)
32 | .inflate(R.layout.item_recycler_view,parent,false));
33 | return demoHolder;
34 | }
35 |
36 | @Override
37 | public void onBindViewHolder(DemoHolder holder, int position) {
38 | User data =mData.get(position);
39 | holder.name.setText(data.getUsername());
40 | holder.content.setText(data.getUid());
41 | Glide.with(mContext).load(data.getHeadPortrait()).into(holder.bgImage);
42 | }
43 |
44 | class DemoHolder extends RecyclerView.ViewHolder{
45 |
46 | ImageView headPortrait;
47 | ImageView bgImage;
48 | TextView name;
49 | TextView content;
50 |
51 | public DemoHolder(View itemView) {
52 | super(itemView);
53 | headPortrait=(ImageView)itemView.findViewById(R.id.iv_head_portrait);
54 | bgImage=(ImageView)itemView.findViewById(R.id.sdv_bg_image);
55 | name=(TextView)itemView.findViewById(R.id.tv_name);
56 | content=(TextView)itemView.findViewById(R.id.tv_content);
57 | }
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/ui/custom/animation/ManagerAnimation.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.ui.custom.animation;
2 |
3 | import android.content.Context;
4 | import android.view.View;
5 | import android.view.animation.AlphaAnimation;
6 | import android.view.animation.AnimationSet;
7 | import android.view.animation.TranslateAnimation;
8 |
9 | /**
10 | * GearApplication
11 | * Created by YichenZ on 2016/8/12 14:47.
12 | */
13 |
14 | public final class ManagerAnimation {
15 | private Context mContext;
16 | private AnimationSet mAnimationSet;
17 |
18 | public static Builder builder() {
19 | return new Builder();
20 | }
21 |
22 | public ManagerAnimation(Builder builder) {
23 | mContext=builder.mContext;
24 | mAnimationSet=builder.mAnimationSet;
25 | }
26 |
27 | public void inject(View view){
28 | view.setAnimation(mAnimationSet);
29 | }
30 |
31 | public AnimationSet getAnimationSet() {
32 | return mAnimationSet;
33 | }
34 |
35 | public static class Builder {
36 | private Context mContext;
37 | private AnimationSet mAnimationSet;
38 | private TranslateAnimation mTranslateAnimation;
39 | private AlphaAnimation mAlphaAnimation;
40 |
41 | private int translateDuration=1000;
42 | private int alphaDuration=1000;
43 |
44 | public Builder(){
45 | mAnimationSet=new AnimationSet(true);
46 | }
47 |
48 | public Builder setContext(Context context) {
49 | mContext = context;
50 | return this;
51 | }
52 |
53 | public Builder setTranslateAnimation(TranslateAnimation translateAnimation) {
54 | mTranslateAnimation = translateAnimation;
55 |
56 | return this;
57 | }
58 |
59 | public Builder setAlphaAnimation(AlphaAnimation alphaAnimation) {
60 | mAlphaAnimation = alphaAnimation;
61 |
62 | return this;
63 | }
64 |
65 | public Builder setTranslateDuration(int translateDuration) {
66 | this.translateDuration = translateDuration;
67 | return this;
68 | }
69 |
70 | public Builder setAlphaDuration(int alphaDuration) {
71 | this.alphaDuration = alphaDuration;
72 | return this;
73 | }
74 |
75 | public ManagerAnimation build() {
76 | if(mTranslateAnimation!=null){
77 | mTranslateAnimation.setDuration(translateDuration);
78 | mAnimationSet.addAnimation(mTranslateAnimation);
79 | }
80 | if(mAlphaAnimation!=null){
81 | mAlphaAnimation.setDuration(alphaDuration);
82 | mAnimationSet.addAnimation(mAlphaAnimation);
83 | }
84 | return new ManagerAnimation(this);
85 | }
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/ui/custom/view/CustomVideoView.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.ui.custom.view;
2 |
3 | import android.content.Context;
4 | import android.net.Uri;
5 | import android.support.annotation.NonNull;
6 | import android.util.AttributeSet;
7 | import android.view.View;
8 | import android.widget.VideoView;
9 |
10 | /**
11 | * GearApplication
12 | * Created by YichenZ on 2016/11/15 14:44.
13 | */
14 |
15 | public class CustomVideoView extends VideoView {
16 |
17 | public CustomVideoView(Context context) {
18 | super(context);
19 | }
20 |
21 | public CustomVideoView(Context context, AttributeSet attrs) {
22 | super(context, attrs);
23 | }
24 |
25 | public CustomVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
26 | super(context, attrs, defStyleAttr);
27 | }
28 |
29 | @Override
30 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
31 | super.onMeasure(widthMeasureSpec, heightMeasureSpec);
32 | setMeasuredDimension(View.MeasureSpec.getSize(widthMeasureSpec),View.MeasureSpec.getSize(heightMeasureSpec));
33 | }
34 |
35 | public void palyVideo(@NonNull Uri uri){
36 | setVideoURI(uri);
37 | start();
38 |
39 | setOnPreparedListener(mp -> mp.setLooping(true));
40 |
41 | // setOnCompletionListener(mp -> mp.start());
42 |
43 | setOnErrorListener((mp, what, extra) -> true);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/ui/mvp/travelnotes/TravelNotesAdapter.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.ui.mvp.travelnotes;
2 |
3 | import android.content.Context;
4 | import android.databinding.DataBindingUtil;
5 | import android.support.v7.widget.RecyclerView;
6 | import android.view.LayoutInflater;
7 | import android.view.ViewGroup;
8 |
9 | import com.bumptech.glide.Glide;
10 |
11 | import java.util.ArrayList;
12 |
13 | import gear.yc.com.gearapplication.R;
14 | import gear.yc.com.gearapplication.databinding.ItemTravelNotesBinding;
15 | import gear.yc.com.gearapplication.pojo.TravelNoteBook;
16 | import gear.yc.com.gearlibrary.ui.adapter.GearRecyclerViewAdapter;
17 |
18 | /**
19 | * GearApplication
20 | * Created by YichenZ on 2016/4/21 14:09.
21 | */
22 | public class TravelNotesAdapter extends GearRecyclerViewAdapter{
23 | private static int oldPos=0;
24 |
25 | public TravelNotesAdapter(Context context,ArrayList dates){
26 | super(context,dates);
27 | }
28 |
29 | @Override
30 | public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
31 |
32 | ItemTravelNotesBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext),
33 | R.layout.item_travel_notes,parent,false);
34 | binding.getRoot().setOnClickListener(this);
35 | Holder holder =new Holder(binding);
36 | return holder;
37 | }
38 |
39 | @Override
40 | public void onBindViewHolder(Holder holder, int position) {
41 | super.onBindViewHolder(holder,position);
42 | // if(oldPos-position<=0) {
43 | // holder.itemView.setTranslationY(CommonManager.getInstance().getMobileHeight(mContext));
44 | // holder.itemView.animate().translationY(0)
45 | // .setStartDelay(100 * position)
46 | // .setInterpolator(new DecelerateInterpolator(3.f))
47 | // .setDuration(700)
48 | // .start();
49 | // }
50 | TravelNoteBook.Books data=mData.get(position);
51 | holder.binding.setBook(data);
52 | Glide.with(mContext)
53 | .load(data.getImgUrl())
54 | .thumbnail(0.1f)
55 | .placeholder(android.R.color.transparent)
56 | .crossFade()
57 | .into(holder.binding.sdvBooksImg);
58 | holder.binding.getRoot().setTag(data);
59 | oldPos=position;
60 | data=null;
61 | }
62 |
63 | public class Holder extends RecyclerView.ViewHolder{
64 | private final ItemTravelNotesBinding binding;
65 | public Holder(ItemTravelNotesBinding binding) {
66 | super(binding.getRoot());
67 | this.binding=binding;
68 | }
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/ui/mvp/travelnotes/TravelNotesContract.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.ui.mvp.travelnotes;
2 |
3 | import gear.yc.com.gearapplication.base.BasePresenter;
4 | import gear.yc.com.gearapplication.base.BaseView;
5 |
6 | /**
7 | * GearApplication
8 | * MVP接口类
9 | * Created by YichenZ on 2016/6/30 14:59.
10 | */
11 |
12 | public interface TravelNotesContract {
13 |
14 | /**
15 | * 界面显示接口
16 | */
17 | interface View extends BaseView{
18 | void changeListView();
19 |
20 | void showDialog();
21 |
22 | void disDialog();
23 | }
24 |
25 | /**
26 | * 界面数据接口
27 | */
28 | interface Presenter extends BasePresenter{
29 | int refreshData(String key,int page,boolean isNote);
30 |
31 | void loadData(String key,int page);
32 |
33 | void loadData(String key,int page,int count);
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/ui/mvp/travelnotes/TravelNotesPresenter.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.ui.mvp.travelnotes;
2 |
3 | import gear.yc.com.gearapplication.network.APIServiceManager;
4 | import gear.yc.com.gearapplication.network.helper.SchedulersHelper;
5 | import gear.yc.com.gearlibrary.rxjava.helper.RxSchedulersHelper;
6 |
7 | /**
8 | * GearApplication
9 | * MVP数据逻辑类,承接数据与界面的交互,通过Dagger的方式初始化
10 | * Created by YichenZ on 2016/7/4 15:56.
11 | */
12 | public class TravelNotesPresenter implements TravelNotesContract.Presenter {
13 | private final String INIT_KEY="全国";//面包key不能为空,默认搜索全国后期可以改成定位
14 | private TravelNotesContract.View view;
15 | public TravelNotesActivity obj;
16 |
17 | public TravelNotesPresenter(TravelNotesContract.View view, TravelNotesActivity obj) {
18 | this.view = view;
19 | this.obj = obj;
20 | }
21 |
22 | @Override
23 | public int refreshData(String key,int page,boolean isNote) {
24 | page = 1;
25 | if(isNote) {
26 | loadData(key, page);
27 | }else{
28 | loadData(key, page,10);
29 | }
30 | return page;
31 | }
32 |
33 | @Override
34 | public void loadData(String key,int page) {
35 | view.showDialog();
36 | // RouterDemo.getRouter(obj.getLifecycleSubject(),key, page+"")
37 | // .doOnTerminate(() -> view.disDialog())
38 | // .subscribe(d -> obj.dataBinding(d),
39 | // e -> obj.dataError(e));
40 | APIServiceManager
41 | .getTravelNotesAPI()
42 | .getTravelNotesList(key, page + "")
43 | .compose(obj.bindToLifecycle())
44 | .compose(RxSchedulersHelper.io_main())
45 | .compose(SchedulersHelper.handleResult())
46 | .doOnTerminate(() -> view.disDialog())
47 | .subscribe(d -> obj.dataBinding(d),
48 | e -> obj.dataError(e));
49 | // .subscribe(s -> RxBus.getInstance().post(RxBus.getInstance()
50 | // .getTag(obj.getClass(),RxBus.TAG_UPDATE), s),
51 | // e -> RxBus.getInstance().post(RxBus.getInstance()
52 | // .getTag(obj.getClass(),RxBus.TAG_ERROR), e.getMessage()));
53 | }
54 |
55 | @Override
56 | public void loadData(String key,int page,int count){
57 | if("".equals(key) || key==null){
58 | key=INIT_KEY;
59 | }
60 | page=(page-1)*count;
61 | view.showDialog();
62 | APIServiceManager
63 | .getBreadtripAPI()
64 | .getTravelNotesList(key,String.valueOf(page) ,count+"","trip")
65 | .compose(obj.bindToLifecycle())
66 | .compose(RxSchedulersHelper.io_main())
67 | .compose(SchedulersHelper.handleResultBread())
68 | .doOnTerminate(() -> view.disDialog())
69 | .subscribe(d -> obj.dataBinding(d),
70 | e -> obj.dataError(e));
71 | // .subscribe(s -> RxBus.getInstance().post(RxBus.getInstance()
72 | // .getTag(obj.getClass(),RxBus.TAG_UPDATE), s.getBookses()),
73 | // e -> RxBus.getInstance().post(RxBus.getInstance()
74 | // .getTag(obj.getClass(),RxBus.TAG_ERROR), e.getMessage()));
75 | }
76 |
77 | @Override
78 | public void start() {
79 | }
80 |
81 | @Override
82 | public void close() {
83 | obj=null;
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/utils/DataRouting/APIDataRouting.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.utils.DataRouting;
2 |
3 | /**
4 | * Created by joker on 2017/1/13.
5 | */
6 |
7 | public class APIDataRouting {
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/utils/DataRouting/annotation/LoadData.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.utils.DataRouting.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * Created by joker on 2017/1/13.
10 | */
11 | @Retention(RetentionPolicy.RUNTIME)
12 | @Target(ElementType.TYPE)
13 | public @interface LoadData {
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/utils/DataRouting/annotation/Query.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.utils.DataRouting.annotation;
2 |
3 | /**
4 | * Created by joker on 2017/1/13.
5 | */
6 |
7 | public class Query {
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/gear/yc/com/gearapplication/utils/EncryptUtil.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.utils;
2 |
3 | /**
4 | * GearApplication
5 | * Created by YichenZ on 2016/7/20 16:32.
6 | */
7 |
8 | public class EncryptUtil {
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/bg_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/drawable-hdpi/bg_img.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/img_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/drawable-hdpi/img_back.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/img_gridview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/drawable-hdpi/img_gridview.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/img_lv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/drawable-hdpi/img_lv.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/img_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/drawable-hdpi/img_search.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_books_item_text_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_databinding.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
10 |
11 |
12 |
17 |
18 |
24 |
25 |
31 |
32 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_gear.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_recycler_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_search_books.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_travel_notes.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
14 |
15 |
19 |
20 |
25 |
26 |
32 |
33 |
34 |
46 |
47 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_travel_notes_book_details.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
12 |
17 |
18 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_web_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_welcome.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
9 |
10 |
14 |
18 |
19 |
30 |
42 |
54 |
55 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/demo_indicator_progress_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/function_list_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
17 |
18 |
24 |
25 |
28 |
29 |
35 |
41 |
42 |
43 |
46 |
47 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_header_back.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
11 |
12 |
15 |
20 |
24 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_header_search.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
11 |
12 |
13 |
16 |
23 |
27 |
37 |
38 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_foot.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_recycler_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
19 |
20 |
27 |
28 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_travel_notes.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
11 |
12 |
13 |
25 |
26 |
29 |
30 |
35 |
36 |
42 |
43 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/layout_databinding_user_pwd.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/raw/guide_1.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/raw/guide_1.mp4
--------------------------------------------------------------------------------
/app/src/main/res/raw/guide_2.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/app/src/main/res/raw/guide_2.mp4
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #4caf50
4 | #388e3c
5 | #fbc02d
6 |
7 | #ffffff
8 | #50000000
9 | #00000000
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 | 180dp
6 | 16dp
7 |
8 |
9 |
10 | 12sp
11 | 12sp
12 | 40sp
13 |
14 |
15 | 46dp
16 |
17 |
18 |
19 | 22sp
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | 探索
3 | Settings
4 |
5 |
6 | Main Activity Demo
7 | DataBinding Demo
8 | RxJava
9 | WebView
10 | RecyclerDemo
11 |
12 |
13 | tra name list img
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
16 |
17 |
18 |
19 |
20 |
21 |
26 |
33 |
39 |
47 |
48 |
52 |
53 |
--------------------------------------------------------------------------------
/app/src/test/java/gear/yc/com/gearapplication/ui/mvp/travelnotes/TravelNotesPresenterTest.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.ui.mvp.travelnotes;
2 |
3 | import org.junit.Before;
4 | import org.junit.Test;
5 |
6 | /**
7 | * GearApplication
8 | * Created by YichenZ on 2016/7/13 15:34.
9 | */
10 | public class TravelNotesPresenterTest implements TravelNotesContract.View{
11 | TravelNotesPresenter travelNotesPresenter;
12 |
13 | @Before
14 | public void setUp() throws Exception {
15 | travelNotesPresenter=new TravelNotesPresenter(this,new TravelNotesActivity());
16 | }
17 |
18 | @Test
19 | public void refreshData() throws Exception {
20 | travelNotesPresenter.refreshData("",0,false);
21 | }
22 |
23 | @Test
24 | public void loadData() throws Exception {
25 | travelNotesPresenter.loadData("",0);
26 | }
27 |
28 | @Test
29 | public void loadData1() throws Exception {
30 | travelNotesPresenter.loadData("",0,0);
31 | }
32 |
33 | @Override
34 | public void changeListView() {
35 |
36 | }
37 |
38 | @Override
39 | public void showDialog() {
40 |
41 | }
42 |
43 | @Override
44 | public void disDialog() {
45 |
46 | }
47 | }
--------------------------------------------------------------------------------
/app/src/test/java/gear/yc/com/gearapplication/utils/EncryptUtilTest.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearapplication.utils;
2 |
3 | import org.junit.Before;
4 | import org.junit.Test;
5 |
6 | import static org.junit.Assert.*;
7 |
8 | /**
9 | * GearApplication
10 | * Created by YichenZ on 2016/7/20 16:35.
11 | */
12 | public class EncryptUtilTest {
13 | @Before
14 | public void setUp() throws Exception {
15 |
16 | }
17 |
18 | @Test
19 | public void encode() throws Exception {
20 |
21 | }
22 |
23 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | mavenCentral()
7 | // maven { url 'https://maven.google.com' }
8 | }
9 | dependencies {
10 | // classpath 'com.android.tools.build.gradle:3.0.0-alpha6'
11 | classpath 'com.android.tools.build.gradle:2.2.3'
12 | classpath 'me.tatarka:gradle-retrolambda:3.2.5'
13 | classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
14 |
15 | // NOTE: Do not place your application dependencies here; they belong
16 | // in the individual module build.gradle files
17 | }
18 |
19 | // Exclude the version that the android plugin depends on.
20 | configurations.classpath.exclude group: 'com.android.tools.external.lombok'
21 | }
22 |
23 | allprojects {
24 | repositories {
25 | jcenter()
26 | mavenCentral()
27 | }
28 | }
29 |
30 | task clean(type: Delete) {
31 | delete rootProject.buildDir
32 | }
33 |
--------------------------------------------------------------------------------
/gearapifinder-annotation/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/gearapifinder-annotation/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'java'
2 | buildscript {
3 | repositories {
4 | jcenter()
5 | }
6 | dependencies {
7 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
8 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
9 | }
10 | }
11 | dependencies {
12 | compile fileTree(dir: 'libs', include: ['*.jar'])
13 |
14 | }
15 | tasks.withType(JavaCompile) {
16 | options.encoding = "UTF-8"
17 | }
18 | sourceCompatibility = "1.7"
19 | targetCompatibility = "1.7"
20 | //apply from: 'bintray.gradle'
21 |
22 |
23 |
--------------------------------------------------------------------------------
/gearapifinder-annotation/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 |
20 | #GearApiFinder-annotation
21 | PROJ_GROUP=com.joker.gear
22 | PROJ_VERSION=1.0.1
23 | PROJ_NAME=GearApiFinder-annotation
24 | PROJ_WEBSITEURL=https://github.com/hackerlc/GearApplication/tree/master/gearapifinder-annotation
25 | PROJ_ISSUETRACKERURL=
26 | PROJ_VCSURL=git@github.com:hackerlc/GearApplication.git
27 | PROJ_DESCRIPTION=android GearAppliaction
28 | PROJ_ARTIFACTID=apifinder-annotation
29 | PROJ_POM_NAME=com.gear.apifinder.annotation
30 | PROJ_LICENCE_NAME=The Apache Software License, Version 2.0
31 | PROJ_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
32 | PROJ_LICENCE_DEST=repo
33 |
34 | # Public
35 | DEVELOPER_ID=lc
36 | DEVELOPER_NAME=joker
37 | DEVELOPER_EMAIL=hackerlcg@gmail.com
--------------------------------------------------------------------------------
/gearapifinder-annotation/src/main/java/com/gear/apifinder/annotation/APICustomHandleResult.java:
--------------------------------------------------------------------------------
1 | package com.gear.apifinder.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * SJQ_ECSHOP_MJ_NEW
10 | * Created by YichenZ on 2017/3/1 15:17.
11 | */
12 | @Retention(RetentionPolicy.SOURCE)
13 | @Target(ElementType.METHOD)
14 | public @interface APICustomHandleResult {
15 | //如果为空就不生成
16 | String handleResult() default "";
17 | }
18 |
--------------------------------------------------------------------------------
/gearapifinder-annotation/src/main/java/com/gear/apifinder/annotation/APIHandleResult.java:
--------------------------------------------------------------------------------
1 | package com.gear.apifinder.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * SJQ_ECSHOP_MJ_NEW
10 | * Created by YichenZ on 2017/3/1 15:17.
11 | */
12 | @Retention(RetentionPolicy.SOURCE)
13 | @Target({ElementType.TYPE,ElementType.METHOD})
14 | public @interface APIHandleResult {
15 | }
16 |
--------------------------------------------------------------------------------
/gearapifinder-annotation/src/main/java/com/gear/apifinder/annotation/APIManager.java:
--------------------------------------------------------------------------------
1 | package com.gear.apifinder.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * GearApplication
10 | * 需要标识在你应用中返回唯一的Retrofit引用类上,只能标识在主app模块中
11 | * 不能在Library上标识,annotation会无法识别
12 | * 如果不对任何类做标识那么程序将不会生成Retrofit API管理类
13 | * Created by YichenZ on 2017/1/17 10:31.
14 | */
15 | @Retention(RetentionPolicy.SOURCE)
16 | @Target(ElementType.TYPE)
17 | public @interface APIManager {
18 | //class name is value
19 | String value() default "APIServiceManager";
20 | //is singleton model
21 | boolean isSingleton() default true;
22 | //return retrofit type for method name
23 | String retrofit() default "getRetrofit";
24 | }
25 |
--------------------------------------------------------------------------------
/gearapifinder-annotation/src/main/java/com/gear/apifinder/annotation/APIRouter.java:
--------------------------------------------------------------------------------
1 | package com.gear.apifinder.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * SJQ_ECSHOP_MJ_NEW
10 | * Created by YichenZ on 2017/3/1 14:39.
11 | */
12 | @Retention(RetentionPolicy.SOURCE)
13 | @Target(ElementType.TYPE)
14 | public @interface APIRouter {
15 | //class name
16 | String value() default "APIRouter";
17 | //如果设置为空那么就不生成rx生命管理,否则按照输入的生成
18 | String rxLifecycle() default "";
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/gearapifinder-annotation/src/main/java/com/gear/apifinder/annotation/APIService.java:
--------------------------------------------------------------------------------
1 | package com.gear.apifinder.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * GearApplication
10 | * 需要把当前annotation标识在Retrofit的API接口上,有几个就标识几个
11 | * 程序会根据当前的annotation自动生成Retrofit API管理类
12 | * 如果不做任何标识那么此类就不会被生成
13 | * Created by YichenZ on 2017/1/17 10:29.
14 | */
15 | @Retention(RetentionPolicy.SOURCE)
16 | @Target(ElementType.TYPE)
17 | public @interface APIService {
18 | }
19 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/bintray.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'maven-publish'
2 | apply plugin: 'com.jfrog.bintray'
3 |
4 | // This is the library version used when deploying the artifact
5 | group = PROJ_GROUP
6 | version = PROJ_VERSION
7 |
8 | publishing {
9 | publications {
10 | BugtagsPub(MavenPublication) {
11 | from components.java
12 | groupId = PROJ_GROUP
13 | artifactId = PROJ_ARTIFACTID
14 | version = PROJ_VERSION
15 |
16 | artifact sourcesJar
17 | artifact javadocJar
18 |
19 | pom.withXml {
20 | asNode().appendNode('name', PROJ_POM_NAME)
21 | asNode().appendNode('description', PROJ_DESCRIPTION)
22 | asNode().appendNode('url', PROJ_WEBSITEURL)
23 |
24 | def licenseNode = asNode().appendNode('licenses').appendNode('license')
25 | licenseNode.appendNode('name', PROJ_LICENCE_NAME)
26 | licenseNode.appendNode('url', PROJ_LICENCE_URL)
27 | licenseNode.appendNode('distribution', PROJ_LICENCE_DEST)
28 |
29 | def developerNode = asNode().appendNode('developers').appendNode('developer')
30 | developerNode.appendNode('id', DEVELOPER_ID)
31 | developerNode.appendNode('name', DEVELOPER_NAME)
32 | developerNode.appendNode('email', DEVELOPER_EMAIL)
33 |
34 |
35 | def scmNode = asNode().appendNode('scm')
36 | scmNode.appendNode('connection', PROJ_VCSURL)
37 | scmNode.appendNode('developerConnection', PROJ_VCSURL)
38 | scmNode.appendNode('url', PROJ_WEBSITEURL)
39 | }
40 | }
41 | }
42 | }
43 |
44 | Properties properties = new Properties()
45 | properties.load(project.rootProject.file('local.properties').newDataInputStream())
46 |
47 | task sourcesJar(type: Jar) {
48 | classifier = 'sources'
49 | from sourceSets.main.java.srcDirs
50 | exclude '**'
51 | }
52 |
53 | task BugtagsJavadoc(type: Javadoc) {
54 | source = sourceSets.main.java.srcDirs
55 | exclude '**'
56 | failOnError false
57 | }
58 |
59 | task javadocJar(type: Jar, dependsOn: BugtagsJavadoc) {
60 | classifier = 'javadoc'
61 | from javadoc.destinationDir
62 | }
63 |
64 | artifacts {
65 | archives javadocJar
66 | archives sourcesJar
67 | }
68 |
69 | bintray {
70 | user = properties.getProperty('bintray.user')
71 | key = properties.getProperty('bintray.key')
72 |
73 | publications = ['BugtagsPub']
74 |
75 | pkg {
76 | repo = 'maven'
77 | name = PROJ_NAME
78 | userOrg = user
79 | licenses = ['Apache-2.0']
80 | vcsUrl = PROJ_VCSURL
81 | version {
82 | name = PROJ_VERSION
83 | desc = PROJ_DESCRIPTION
84 |
85 | gpg {
86 | sign = true
87 | }
88 |
89 | mavenCentralSync {
90 | sync = project.hasProperty('SONATYPE_USER') && project.hasProperty('SONATYPE_KEY')
91 | user = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : ""
92 | password = project.hasProperty('SONATYPE_PASS') ? project.property('SONATYPE_PASS') : ""
93 | close = '1'
94 | }
95 | }
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'java'
2 | buildscript {
3 | repositories {
4 | jcenter()
5 | }
6 | dependencies {
7 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
8 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
9 | }
10 | }
11 | dependencies {
12 | compile fileTree(include: ['*.jar'], dir: 'libs')
13 | compile 'com.squareup:javapoet:1.7.0'
14 | compile 'com.google.auto.service:auto-service:1.0-rc2'
15 | compile project(':gearapifinder-annotation')
16 |
17 | }
18 | tasks.withType(JavaCompile) {
19 | options.encoding = "UTF-8"
20 | }
21 | sourceCompatibility = "1.7"
22 | targetCompatibility = "1.7"
23 | //apply from: 'bintray.gradle'
--------------------------------------------------------------------------------
/gearapifinder-compiler/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 |
20 | #GearApiFinder-compiler
21 | PROJ_GROUP=com.joker.gear
22 | PROJ_VERSION=1.0.1
23 | PROJ_NAME=GearApiFinder-compiler
24 | PROJ_WEBSITEURL=https://github.com/hackerlc/GearApplication/tree/master/gearapifinder-compiler
25 | PROJ_ISSUETRACKERURL=
26 | PROJ_VCSURL=git@github.com:hackerlc/GearApplication.git
27 | PROJ_DESCRIPTION=android GearAppliaction
28 | PROJ_ARTIFACTID=apifinder-compiler
29 | PROJ_POM_NAME=com.gear.apifinder
30 | PROJ_LICENCE_NAME=The Apache Software License, Version 2.0
31 | PROJ_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
32 | PROJ_LICENCE_DEST=repo
33 |
34 | # Public
35 | DEVELOPER_ID=lc
36 | DEVELOPER_NAME=joker
37 | DEVELOPER_EMAIL=hackerlcg@gmail.com
--------------------------------------------------------------------------------
/gearapifinder-compiler/readme.md:
--------------------------------------------------------------------------------
1 | 可以根据配置生成如下类
2 | ```
3 | public class APIServiceManager {
4 | private static ApiService apiService;
5 |
6 | private static BreadtripAPI breadtripAPI;
7 |
8 | private static QyerGuideAPI qyerGuideAPI;
9 |
10 | private static TravelNotesAPI travelNotesAPI;
11 |
12 | public static ApiService getApiService() {
13 | return apiService==null ?
14 | HttpServiceManager.getInstance().getRetrofit().create(ApiService.class)
15 | :apiService;
16 | }
17 |
18 | public static BreadtripAPI getBreadtripAPI() {
19 | return breadtripAPI==null ?
20 | HttpServiceManager.getInstance().getRetrofit().create(BreadtripAPI.class)
21 | :breadtripAPI;
22 | }
23 |
24 | public static QyerGuideAPI getQyerGuideAPI() {
25 | return qyerGuideAPI==null ?
26 | HttpServiceManager.getInstance().getRetrofit().create(QyerGuideAPI.class)
27 | :qyerGuideAPI;
28 | }
29 |
30 | public static TravelNotesAPI getTravelNotesAPI() {
31 | return travelNotesAPI==null ?
32 | HttpServiceManager.getInstance().getRetrofit().create(TravelNotesAPI.class)
33 | :travelNotesAPI;
34 | }
35 | }
36 | ```
37 | ### 配置方式
38 | #### @APIService
39 | 需要注解在Retrofit API 相关接口上,会自动根据接口生成相应的调用方法,格式为**get+类名**
40 | #### @APIManager
41 | ```
42 | public @interface APIManager {
43 | //class name is value
44 | String value() default "APIServiceManager";
45 | //is singleton model
46 | boolean isSingleton() default true;
47 | //return retrofit type for method name
48 | String retrofit() default "getRetrofit";
49 | }
50 | ```
51 | 需要注解程序中返回唯一的Retrofit引用类上,只能标识在主app模块中,不能在Library上标识,annotation会无法识别,程序会根据注解以及配置自动生成如下代码
52 | ```
53 | HttpServiceManager.getInstance().getRetrofit().create()
54 | ```
55 | HttpServiceManager **被注解的类**
56 |
57 | getInstance() **如果是单例模式,则会直接调用此方法,如果非单例模式会直接调用getRetrofit()方法**
58 |
59 | getRetrofit() **方法名可以在注解配置时使用retrofit进行自定义名称,默认名称为getRetrofit**
60 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/FinderProcesser.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder;
2 |
3 | import com.gear.apifinder.annotation.APIManager;
4 | import com.gear.apifinder.annotation.APIRouter;
5 | import com.gear.apifinder.annotation.APIService;
6 | import com.google.auto.service.AutoService;
7 |
8 | import java.io.IOException;
9 | import java.util.Collections;
10 | import java.util.LinkedHashSet;
11 | import java.util.Set;
12 |
13 | import javax.annotation.processing.AbstractProcessor;
14 | import javax.annotation.processing.Filer;
15 | import javax.annotation.processing.Messager;
16 | import javax.annotation.processing.ProcessingEnvironment;
17 | import javax.annotation.processing.Processor;
18 | import javax.annotation.processing.RoundEnvironment;
19 | import javax.lang.model.SourceVersion;
20 | import javax.lang.model.element.TypeElement;
21 | import javax.lang.model.util.Elements;
22 |
23 | import gear.yc.finder.write.APIManagerWrite;
24 | import gear.yc.finder.write.APIRouterWrite;
25 |
26 |
27 | @AutoService(Processor.class)
28 | public class FinderProcesser extends AbstractProcessor {
29 | private Filer mFiler;//文件相关
30 | private Elements mElementUtils;//元素相关
31 | private Messager mMessager;//日志相关
32 |
33 | APIManagerWrite mAPIManagerWrite;
34 | APIRouterWrite mAPIRouterWrite;
35 |
36 | @Override
37 | public synchronized void init(ProcessingEnvironment processingEnv) {
38 | super.init(processingEnv);
39 | mFiler=processingEnv.getFiler();
40 | mElementUtils=processingEnv.getElementUtils();
41 | mMessager=processingEnv.getMessager();
42 | }
43 |
44 | /**
45 | * 指定哪些注解应该被注解处理器注册
46 | * @return
47 | */
48 | @Override
49 | public Set getSupportedAnnotationTypes() {
50 | Set types=new LinkedHashSet<>();
51 | types.add(APIManager.class.getCanonicalName());
52 | types.add(APIService.class.getCanonicalName());
53 | types.add(APIRouter.class.getCanonicalName());
54 | return Collections.unmodifiableSet(types);
55 | }
56 |
57 | /**
58 | * 指定使用java版本
59 | * @return
60 | */
61 | @Override
62 | public SourceVersion getSupportedSourceVersion() {
63 | return SourceVersion.latestSupported();
64 | }
65 |
66 | @Override
67 | public boolean process(Set extends TypeElement> annotations, RoundEnvironment roundEnv) {
68 | boolean isGenerate=mAPIManagerWrite.getInstance().init(mElementUtils,roundEnv);
69 |
70 | if(!isGenerate){
71 | return false;
72 | }
73 |
74 | try {
75 | mAPIManagerWrite.getInstance().writeTo(mFiler);
76 | } catch (IOException e) {
77 | e.printStackTrace();
78 | }
79 |
80 | isGenerate = mAPIRouterWrite.getInstance().init(mElementUtils,roundEnv);
81 | if(!isGenerate){
82 | return false;
83 | }
84 |
85 | try {
86 | mAPIRouterWrite.getInstance().writeTo(mFiler);
87 | } catch (IOException e) {
88 | e.printStackTrace();
89 | }
90 | return false;
91 | }
92 |
93 | }
94 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/anno/handler/APIManagerHandler.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.anno.handler;
2 |
3 | import com.gear.apifinder.annotation.APIManager;
4 |
5 | import javax.annotation.processing.RoundEnvironment;
6 | import javax.lang.model.element.Element;
7 |
8 | import gear.yc.finder.model.APIManagerElementModel;
9 |
10 | /**
11 | * GearApplication
12 | * Created by YichenZ on 2017/1/20 15:44.
13 | */
14 |
15 | public class APIManagerHandler extends AbstractAnnotationHandler{
16 |
17 | @Override
18 | public boolean processorOnAnnotation(RoundEnvironment environment) {
19 | for (Element element:environment.getElementsAnnotatedWith(APIManager.class)){
20 | if(element==null){
21 | return false;
22 | }
23 | mEleModel=new APIManagerElementModel(element);
24 | }
25 | if(mEleModel==null){
26 | return false;
27 | }
28 | return true;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/anno/handler/APIRouterHandler.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.anno.handler;
2 |
3 | import com.gear.apifinder.annotation.APIRouter;
4 |
5 | import javax.annotation.processing.RoundEnvironment;
6 | import javax.lang.model.element.Element;
7 |
8 | import gear.yc.finder.model.APIRouterModel;
9 |
10 | /**
11 | * SJQ_ECSHOP_MJ_NEW
12 | * Created by YichenZ on 2017/3/1 15:28.
13 | */
14 |
15 | public class APIRouterHandler extends AbstractAnnotationHandler {
16 |
17 | @Override
18 | public boolean processorOnAnnotation(RoundEnvironment environment) {
19 | for(Element element : environment.getElementsAnnotatedWith(APIRouter.class)){
20 | if(element==null) {
21 | return false;
22 | }
23 | mEleModel = new APIRouterModel(element);
24 | }
25 | if(mEleModel == null){
26 | return false;
27 | }
28 | return true;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/anno/handler/APIServiceHandler.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.anno.handler;
2 |
3 | import com.gear.apifinder.annotation.APIService;
4 |
5 | import java.util.ArrayList;
6 | import java.util.List;
7 |
8 | import javax.annotation.processing.RoundEnvironment;
9 | import javax.lang.model.element.Element;
10 |
11 | import gear.yc.finder.model.ServiceElementModel;
12 |
13 | /**
14 | * GearApplication
15 | * Created by YichenZ on 2017/1/20 17:18.
16 | */
17 |
18 | public class APIServiceHandler extends AbstractAnnotationHandler> {
19 | @Override
20 | public boolean processorOnAnnotation(RoundEnvironment environment) {
21 | mEleModel=new ArrayList<>();
22 | for (Element element : environment.getElementsAnnotatedWith(APIService.class)) {
23 | mEleModel.add(new ServiceElementModel(element));
24 | }
25 | if(mEleModel.size()==0){
26 | return false;
27 | }
28 | return true;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/anno/handler/AbstractAnnotationHandler.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.anno.handler;
2 |
3 | import javax.annotation.processing.RoundEnvironment;
4 |
5 | /**
6 | * GearApplication
7 | * Created by YichenZ on 2017/1/20 17:02.
8 | */
9 |
10 | public abstract class AbstractAnnotationHandler {
11 | T mEleModel;
12 | public abstract boolean processorOnAnnotation(RoundEnvironment environment);
13 |
14 | public T getEleModel() {
15 | return mEleModel;
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/model/APIManagerElementModel.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.model;
2 |
3 | import com.gear.apifinder.annotation.APIManager;
4 | import com.squareup.javapoet.TypeName;
5 |
6 | import javax.lang.model.element.Element;
7 | import javax.lang.model.util.Elements;
8 |
9 | /**
10 | * GearApplication
11 | * Created by YichenZ on 2017/1/20 11:52.
12 | */
13 |
14 | public class APIManagerElementModel extends BaseModel {
15 | protected APIManager annotation;
16 |
17 | public APIManagerElementModel(Element element){
18 | mElement=element;
19 | mTypeName=TypeName.get(element.asType());
20 | annotation=mElement.getAnnotation(APIManager.class);
21 | }
22 |
23 | @Override
24 | public Element getElement() {
25 | return mElement;
26 | }
27 |
28 | @Override
29 | public TypeName getTypeName() {
30 | return mTypeName;
31 | }
32 |
33 | public APIManager getAnnotation() {
34 | return annotation;
35 | }
36 |
37 | public String getClassName() {
38 | return annotation.value();
39 | }
40 |
41 | public String getPackageName(Elements elements) {
42 | return elements.getPackageOf(mElement).getQualifiedName().toString();
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/model/APIRouterModel.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.model;
2 |
3 | import com.gear.apifinder.annotation.APIRouter;
4 | import com.squareup.javapoet.TypeName;
5 |
6 | import javax.lang.model.element.Element;
7 | import javax.lang.model.util.Elements;
8 |
9 | /**
10 | * SJQ_ECSHOP_MJ_NEW
11 | * Created by YichenZ on 2017/3/1 15:31.
12 | */
13 |
14 | public class APIRouterModel extends BaseModel{
15 | APIRouter mAPIRouter;
16 |
17 | public APIRouterModel(Element element) {
18 | mElement=element;
19 | mTypeName=TypeName.get(element.asType());
20 | mAPIRouter=mElement.getAnnotation(APIRouter.class);
21 | }
22 |
23 | @Override
24 | public Element getElement() {
25 | return mElement;
26 | }
27 |
28 | @Override
29 | public TypeName getTypeName() {
30 | return mTypeName;
31 | }
32 |
33 | public String getClassName(){
34 | return mAPIRouter.value();
35 | }
36 |
37 | public String getrxLifecycleName(){
38 | return mAPIRouter.rxLifecycle();
39 | }
40 |
41 | public String getPackageName(Elements elements) {
42 | return elements.getPackageOf(mElement).getQualifiedName().toString();
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/model/BaseModel.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.model;
2 |
3 | import com.squareup.javapoet.TypeName;
4 |
5 | import javax.lang.model.element.Element;
6 |
7 | /**
8 | * SJQ_ECSHOP_MJ_NEW
9 | * Created by YichenZ on 2017/3/1 15:32.
10 | */
11 |
12 | public abstract class BaseModel {
13 | protected Element mElement;
14 | protected TypeName mTypeName;
15 |
16 | public abstract Element getElement();
17 |
18 | public abstract TypeName getTypeName();
19 | }
20 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/model/ServiceElementModel.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.model;
2 |
3 | import com.squareup.javapoet.TypeName;
4 |
5 | import javax.lang.model.element.Element;
6 |
7 | import gear.yc.finder.utils.StrHandling;
8 |
9 | /**
10 | * GearApplication
11 | * Created by YichenZ on 2017/1/20 11:37.
12 | */
13 |
14 | public class ServiceElementModel extends BaseModel {
15 | protected String fieldName;
16 |
17 | public ServiceElementModel(Element element){
18 | mElement=element;
19 | mTypeName=TypeName.get(mElement.asType());
20 | fieldName= element.getSimpleName().toString();
21 | }
22 | @Override
23 | public Element getElement() {
24 | return mElement;
25 | }
26 |
27 | @Override
28 | public TypeName getTypeName() {
29 | return mTypeName;
30 | }
31 |
32 | public String getFieldName() {
33 | return fieldName;
34 | }
35 |
36 | public String getFieldName4Letter() {
37 | return StrHandling.firstUpperToLetter(fieldName);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/utils/MtdHead.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.utils;
2 |
3 | /**
4 | * GearApplication
5 | * Created by YichenZ on 2017/1/20 15:58.
6 | */
7 |
8 | public final class MtdHead {
9 | public static final String GET="get";
10 | public static final String ON="on";
11 | }
12 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/utils/MtdMark.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.utils;
2 |
3 | /**
4 | * GearApplication
5 | * Created by YichenZ on 2017/1/20 16:04.
6 | */
7 |
8 | public enum MtdMark {
9 | GET ("get"),
10 | ON ("on");
11 | private String value;
12 |
13 | MtdMark(String value){
14 | this.value=value;
15 | }
16 |
17 | public String getValue() {
18 | return value;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/utils/StrHandling.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.utils;
2 |
3 | import com.gear.apifinder.annotation.APIManager;
4 |
5 | /**
6 | * GearApplication
7 | * Created by YichenZ on 2017/1/20 10:43.
8 | */
9 |
10 | public class StrHandling {
11 | public static String firstUpperToLetter(String str){
12 | char[] array = str.toCharArray();
13 | array[0] += 32;
14 | return String.valueOf(array);
15 | }
16 |
17 | public static String getMtdStr(MtdMark mark, String name){
18 | return new StringBuffer(mark.getValue()).append(name).toString();
19 | }
20 |
21 | public static String getReturnStr(String fieldName, APIManager apiManager){
22 | StringBuffer strBuf=new StringBuffer();
23 | strBuf.append("\treturn ")
24 | .append(fieldName)
25 | .append("==null ?\n")
26 | .append("\t\t$T.");
27 | if(apiManager.isSingleton()){
28 | strBuf.append("getInstance().");
29 | }
30 | strBuf.append(apiManager.retrofit())
31 | .append("().create($T.class)\n")
32 | .append("\t\t:")
33 | .append(fieldName);
34 | return strBuf.toString();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/write/APIManagerWrite.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.write;
2 |
3 | import com.squareup.javapoet.FieldSpec;
4 | import com.squareup.javapoet.JavaFile;
5 | import com.squareup.javapoet.MethodSpec;
6 | import com.squareup.javapoet.TypeSpec;
7 |
8 | import java.io.IOException;
9 | import java.util.ArrayList;
10 | import java.util.List;
11 |
12 | import javax.annotation.processing.Filer;
13 | import javax.annotation.processing.RoundEnvironment;
14 | import javax.lang.model.element.Modifier;
15 | import javax.lang.model.util.Elements;
16 |
17 | import gear.yc.finder.anno.handler.APIManagerHandler;
18 | import gear.yc.finder.anno.handler.APIServiceHandler;
19 | import gear.yc.finder.model.APIManagerElementModel;
20 | import gear.yc.finder.model.ServiceElementModel;
21 | import gear.yc.finder.utils.MtdMark;
22 | import gear.yc.finder.utils.StrHandling;
23 |
24 | /**
25 | * GearApplication
26 | * Created by YichenZ on 2017/1/22 09:16.
27 | */
28 |
29 | public class APIManagerWrite extends AbstractWrite{
30 | private static APIManagerWrite instance;
31 |
32 | public static APIManagerWrite getInstance() {
33 | if(instance==null){
34 | synchronized (APIManagerWrite.class){
35 | if(instance==null){
36 | instance=new APIManagerWrite();
37 | }
38 | }
39 | }
40 | return instance;
41 | }
42 | APIManagerHandler apiHandler;
43 | APIServiceHandler apiSrvHandler;
44 |
45 | List mServiceElements=new ArrayList<>();
46 |
47 | //Field list
48 | List fieldSpecs =new ArrayList<>();
49 | //Method list
50 | List mtdSpecs =new ArrayList<>();
51 |
52 | public APIManagerWrite(){
53 | apiHandler = new APIManagerHandler();
54 | apiSrvHandler = new APIServiceHandler();
55 | }
56 |
57 | @Override
58 | public boolean init(Elements elementUtils,RoundEnvironment roundEnv){
59 | mElementUtils=elementUtils;
60 | isGenerate=apiHandler.processorOnAnnotation(roundEnv);
61 | if(!isGenerate){
62 | return isGenerate;
63 | }
64 | isGenerate=apiSrvHandler.processorOnAnnotation(roundEnv);
65 | if(!isGenerate){
66 | return isGenerate;
67 | }
68 |
69 | mServiceElements=apiSrvHandler.getEleModel();
70 | mApiModel =apiHandler.getEleModel();
71 |
72 | for (ServiceElementModel sModel : mServiceElements) {
73 | FieldSpec fieldSpec = FieldSpec.builder(sModel.getTypeName(),sModel.getFieldName4Letter())
74 | .addModifiers(Modifier.PRIVATE,Modifier.STATIC)
75 | .build();
76 | fieldSpecs.add(fieldSpec);
77 |
78 | //Construct Method
79 | MethodSpec mtdSpec = MethodSpec.methodBuilder(StrHandling.getMtdStr(MtdMark.GET,sModel.getFieldName()))
80 | .addModifiers(Modifier.PUBLIC,Modifier.STATIC)
81 | .returns(sModel.getTypeName())
82 | .addStatement(StrHandling
83 | .getReturnStr(sModel.getFieldName4Letter(), mApiModel.getAnnotation())
84 | , mApiModel.getTypeName(),sModel.getTypeName())
85 | .build();
86 | mtdSpecs.add(mtdSpec);
87 | }
88 | //Construct Class
89 | typeClass = TypeSpec.classBuilder(mApiModel.getClassName())
90 | .addModifiers(Modifier.PUBLIC)
91 | .addFields(fieldSpecs)
92 | .addMethods(mtdSpecs)
93 | .build();
94 |
95 | return isGenerate;
96 | }
97 |
98 | @Override
99 | public void writeTo(Filer filer) throws IOException {
100 | JavaFile.builder(mApiModel.getPackageName(mElementUtils),typeClass)
101 | .build()
102 | .writeTo(filer);
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/gearapifinder-compiler/src/main/java/gear/yc/finder/write/AbstractWrite.java:
--------------------------------------------------------------------------------
1 | package gear.yc.finder.write;
2 |
3 | import com.squareup.javapoet.TypeSpec;
4 |
5 | import java.io.IOException;
6 |
7 | import javax.annotation.processing.Filer;
8 | import javax.annotation.processing.RoundEnvironment;
9 | import javax.lang.model.util.Elements;
10 |
11 | /**
12 | * SJQ_ECSHOP_MJ_NEW
13 | * Created by YichenZ on 2017/3/1 15:46.
14 | */
15 |
16 | public abstract class AbstractWrite {
17 |
18 | protected Elements mElementUtils;//元素相关
19 | protected boolean isGenerate=false;
20 | protected TypeSpec typeClass;
21 |
22 | protected T mApiModel;
23 |
24 | public abstract boolean init(Elements elementUtils,RoundEnvironment roundEnv);
25 |
26 | public abstract void writeTo(Filer filer) throws IOException;
27 | }
28 |
--------------------------------------------------------------------------------
/gearapifinder/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in F:\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/gearapifinder/src/androidTest/java/gamedemo/ycz/cn/gearapifinder/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package gamedemo.ycz.cn.gearapifinder;
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 | * Instrumentation 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() throws Exception {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("gamedemo.ycz.cn.gearapifinder.test", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/gearapifinder/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/gearapifinder/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | GearAPIFinder
3 |
4 |
--------------------------------------------------------------------------------
/gearapifinder/src/test/java/gamedemo/ycz/cn/gearapifinder/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package gamedemo.ycz.cn.gearapifinder;
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() throws Exception {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/gearlibrary/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/gearlibrary/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'me.tatarka.retrolambda'
3 |
4 | buildscript {
5 | repositories {
6 | jcenter()
7 | }
8 | dependencies {
9 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
10 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
11 | classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
12 | }
13 |
14 | // Exclude the version that the android plugin depends on.
15 | configurations.classpath.exclude group: 'com.android.tools.external.lombok'
16 | }
17 |
18 | android {
19 | compileSdkVersion 23
20 | buildToolsVersion '25'
21 |
22 | defaultConfig {
23 | minSdkVersion 14
24 | targetSdkVersion 23
25 | versionCode 22
26 | versionName "1.5.4"
27 | }
28 |
29 | buildTypes {
30 | release {
31 | minifyEnabled false
32 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
33 | }
34 | }
35 |
36 | compileOptions {
37 | sourceCompatibility JavaVersion.VERSION_1_8
38 | targetCompatibility JavaVersion.VERSION_1_8
39 | }
40 |
41 | lintOptions {
42 | abortOnError false
43 | }
44 | }
45 |
46 | dependencies {
47 | compile fileTree(include: ['*.jar'], dir: 'libs')
48 | compile 'com.android.support:appcompat-v7:23.3.0'
49 | compile 'com.android.support:recyclerview-v7:23.1.1'
50 |
51 | compile 'com.squareup.okhttp3:okhttp:3.6.0'
52 | compile 'com.squareup.okio:okio:1.11.0'
53 |
54 | compile 'com.google.code.gson:gson:2.7'
55 |
56 | compile 'io.reactivex.rxjava2:rxjava:2.0.5'
57 | compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
58 |
59 | compile 'com.squareup.retrofit2:retrofit:2.1.0'
60 | compile 'com.squareup.retrofit2:converter-gson:2.1.0'
61 | compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0-RC3'
62 | compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
63 | }
64 | apply from: 'bintray.gradle'
65 |
--------------------------------------------------------------------------------
/gearlibrary/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in D:\mobile\android\sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/gearlibrary/readme.md:
--------------------------------------------------------------------------------
1 | ## GearLibrary
2 | ###主要功能
3 | [**RxBus**](https://github.com/hackerlc/GearApplication/blob/master/gearlibrary/readme.md#rxbus)
4 |
5 | 事件消息
6 |
7 | [**RxJava Help**](https://github.com/hackerlc/GearApplication/blob/master/gearlibrary/readme.md#rxjava-help)
8 |
9 | RxJava帮助
10 |
11 | [**GearHttpServiceManager**](https://github.com/hackerlc/GearApplication/blob/master/gearlibrary/readme.md#gearhttpservicemanager)
12 |
13 | retrofit 管理类
14 |
15 | [**OkHttpManager**](https://github.com/hackerlc/GearApplication/blob/master/gearlibrary/readme.md#gearhttpservicemanager)
16 |
17 | OKHttp帮助管理类
18 |
19 | [**ProgressDialogUtil**](https://github.com/hackerlc/GearApplication/blob/master/gearlibrary/readme.md#okhttpmanager)
20 |
21 | 进度条
22 |
23 | [**BaseWeb**](https://github.com/hackerlc/GearApplication/blob/master/gearlibrary/readme.md#baseweb)
24 |
25 | Web帮助类
26 |
27 | ###使用说明
28 |
29 | ####RxBus
30 | **1.初始化Rxbus**
31 |
32 | ```
33 | BaseActivity
34 |
35 | protected void onCreate(Bundle savedInstanceState) {
36 | super.onCreate(savedInstanceState);
37 | RxBus.getInstance().init(this);
38 | }
39 |
40 | ```
41 | **2.@UseRxbus**
42 |
43 | 需要Rxbus接收事件处理的地方添加注解@UseRxbus
44 | ```
45 | Activity
46 |
47 | @UseRxBus
48 | public class TravelNotesActivity extends BaseActivity
49 |
50 | ```
51 | **3.@Subscribe**
52 |
53 | 接收事件的方法上添加@Subscribe注解并设置tag
54 | RxBus中提供了默认的Tag值,当然也可以使用自定义的Tag,tag主要用于Rxbus识别对应的处理事件
55 | ```
56 | @Subscribe(tag = RxBus.TAG_UPDATE)
57 | private void dataBinding(ArrayList bookies) {
58 | ...
59 | }
60 | ```
61 | **4.发布事件**
62 |
63 | 使用RxBus.getInstance().post(tag,obj) 发布事件
64 | obj为需要被处理的事件
65 |
66 | tag值使用RxBus.getInstance().getTag(class,value)获取
67 |
68 | class为Rxbus事件处理的类,value是事件处理的tag。使用getTag主要用于后期维护方便,可以及时找到发布事件的对应处理。
69 | ```
70 | RxBus.getInstance().post(RxBus.getInstance().getTag(Class.class,RxBus.TAG_UPDATE),ArrayList);
71 | ```
72 |
73 | ####RxJava Help
74 | ```
75 | .compose(RxSchedulersHelper.io_main())
76 |
77 | 等同于
78 |
79 | ob.subscribeOn(Schedulers.io())
80 | .observeOn(AndroidSchedulers.mainThread())
81 | ```
82 |
83 | ####GearHttpServiceManager
84 | **1.创建**
85 | 创建一个retrofit管理类
86 | ```
87 | GearHttpServiceManager.getInstance()
88 | .setBaseUrl(BASE_URL)
89 | .build(OkHttpClient);
90 | ```
91 | **2.使用**
92 | ```
93 | GearHttpServiceManager.getInstance().getRetrofit()
94 | ```
95 |
96 | ####OkHttpManager
97 | **1.创建**
98 | 创建OkHttp 管理类
99 |
100 | set都为可选
101 | ```
102 | OkHttpManager.getInstance()
103 | .setHeader("key","value")
104 | .setTimeOut(int timeOut)
105 | .setLog(boolean isLog)
106 | .build()
107 | .getClient();
108 | ```
109 |
110 | **2.使用**
111 | ```
112 | OkHttpManager.getInstance().getClient();
113 | ```
114 |
115 | ####ProgressDialogUtil
116 | **1.显示**
117 | ```
118 | ProgressDialogUtil.getInstance()
119 | .setTitle(String title)
120 | .build(this)
121 | .show();
122 | ```
123 | **2.隐藏**
124 | ```
125 | ProgressDialogUtil.getInstance().dismiss();
126 | ```
127 | 其他设置可以直接看ProgressDialogUtil源码
128 |
129 | ####BaseWeb
130 | BaseWeb中加载了默认设置
131 |
132 | 1.开启JavaScript
133 |
134 | 2.缓存模式LOAD_CACHE_ELSE_NETWORK
135 |
136 | 3.默认加载格式utf-8
137 |
138 | 4.开启DOM storage API
139 |
140 | 5.启用数据库
141 |
142 | 6.启用页面缩放
143 |
144 | 7.开启页面缓存
145 |
146 | 8.开启网页图片加载
147 |
148 | **1.创建**
149 | ```
150 | BaseWeb baseWeb=new BaseWeb();
151 | ```
152 | **2.设置**
153 | ```
154 | BaseWeb.setSettings(WebView.getSettings());
155 | ```
156 | **3.清除缓存**
157 | ```
158 | BaseWeb.clearWebViewCache(Context context)
159 | ```
160 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/GearApplication.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary;
2 |
3 | import android.app.Application;
4 |
5 | /**
6 | * GearApplication
7 | * Created by YichenZ on 2016/3/23 11:24.
8 | */
9 | public class GearApplication extends Application{
10 |
11 | @Override
12 | public void onCreate() {
13 | super.onCreate();
14 | //设置版本名以及版本号
15 |
16 |
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/GearFragment.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary;
2 |
3 | import android.app.Fragment;
4 | import android.os.Bundle;
5 |
6 | /**
7 | * GearApplication
8 | * Created by YichenZ on 2016/4/15 16:56.
9 | */
10 | public class GearFragment extends Fragment{
11 |
12 | @Override
13 | public void onActivityCreated(Bundle savedInstanceState) {
14 | super.onActivityCreated(savedInstanceState);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/RxLifecycle2DemoActivity.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary;
2 |
3 | import android.app.Activity;
4 | import android.os.Bundle;
5 | import android.support.annotation.CallSuper;
6 |
7 | /**
8 | * 演示类,如果你使用了rxlifecycle2那么就可以复制类的信息到你的BaseActivity中
9 | * Created by YichenZ on 2016/3/23 11:26.
10 | */
11 | public class RxLifecycle2DemoActivity extends Activity{
12 | //
13 | // private final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
14 | //
15 | // @NonNull
16 | // @CheckResult
17 | // public final Observable lifecycle() {
18 | // return lifecycleSubject.hide();
19 | // }
20 | //
21 | // @NonNull
22 | // @CheckResult
23 | // public final LifecycleTransformer bindUntilEvent(@NonNull ActivityEvent event) {
24 | // return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
25 | // }
26 | //
27 | // @NonNull
28 | // @CheckResult
29 | // public final LifecycleTransformer bindToLifecycle() {
30 | // return RxLifecycleAndroid.bindActivity(lifecycleSubject);
31 | // }
32 |
33 | @Override
34 | @CallSuper
35 | protected void onCreate(Bundle savedInstanceState) {
36 | super.onCreate(savedInstanceState);
37 | // lifecycleSubject.onNext(ActivityEvent.CREATE);
38 | }
39 |
40 | @Override
41 | @CallSuper
42 | protected void onStart() {
43 | super.onStart();
44 | // lifecycleSubject.onNext(ActivityEvent.START);
45 | }
46 |
47 | @Override
48 | @CallSuper
49 | protected void onResume() {
50 | super.onResume();
51 | // lifecycleSubject.onNext(ActivityEvent.RESUME);
52 | }
53 |
54 | @Override
55 | @CallSuper
56 | protected void onPause() {
57 | // lifecycleSubject.onNext(ActivityEvent.PAUSE);
58 | super.onPause();
59 | }
60 |
61 | @Override
62 | @CallSuper
63 | protected void onStop() {
64 | // lifecycleSubject.onNext(ActivityEvent.STOP);
65 | super.onStop();
66 | }
67 |
68 | @Override
69 | @CallSuper
70 | protected void onDestroy() {
71 | // lifecycleSubject.onNext(ActivityEvent.DESTROY);
72 | super.onDestroy();
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/RxLifecycle2DemoFragment.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary;
2 |
3 | import android.app.Fragment;
4 | import android.content.Context;
5 | import android.os.Bundle;
6 | import android.support.annotation.Nullable;
7 | import android.view.LayoutInflater;
8 | import android.view.View;
9 | import android.view.ViewGroup;
10 |
11 | /**
12 | * 演示类,如果你使用了rxlifecycle2那么就可以复制类的信息到你的BaseFragment中
13 | * Created by YichenZ on 2016/4/15 16:56.
14 | */
15 | public class RxLifecycle2DemoFragment extends Fragment{
16 |
17 | // private final BehaviorSubject lifecycleSubject = BehaviorSubject.create();
18 | //
19 | // @NonNull
20 | // @CheckResult
21 | // public final Observable lifecycle() {
22 | // return lifecycleSubject.hide();
23 | // }
24 | //
25 | // @NonNull
26 | // @CheckResult
27 | // public final LifecycleTransformer bindUntilEvent(@NonNull FragmentEvent event) {
28 | // return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
29 | // }
30 | //
31 | // @NonNull
32 | // @CheckResult
33 | // public final LifecycleTransformer bindToLifecycle() {
34 | // return RxLifecycleAndroid.bindFragment(lifecycleSubject);
35 | // }
36 |
37 | @Override
38 | public void onAttach(Context context) {
39 | super.onAttach(context);
40 | // lifecycleSubject.onNext(FragmentEvent.ATTACH);
41 | }
42 |
43 | @Override
44 | public void onActivityCreated(Bundle savedInstanceState) {
45 | super.onActivityCreated(savedInstanceState);
46 | // lifecycleSubject.onNext(FragmentEvent.CREATE);
47 | }
48 |
49 | @Nullable
50 | @Override
51 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
52 | // lifecycleSubject.onNext(FragmentEvent.CREATE_VIEW);
53 | return super.onCreateView(inflater, container, savedInstanceState);
54 | }
55 |
56 | @Override
57 | public void onStart() {
58 | super.onStart();
59 | // lifecycleSubject.onNext(FragmentEvent.START);
60 | }
61 |
62 | @Override
63 | public void onResume() {
64 | super.onResume();
65 | // lifecycleSubject.onNext(FragmentEvent.RESUME);
66 | }
67 |
68 | @Override
69 | public void onPause() {
70 | super.onPause();
71 | // lifecycleSubject.onNext(FragmentEvent.PAUSE);
72 | }
73 |
74 | @Override
75 | public void onStop() {
76 | // lifecycleSubject.onNext(FragmentEvent.STOP);
77 | super.onStop();
78 | }
79 |
80 | @Override
81 | public void onDestroyView() {
82 | // lifecycleSubject.onNext(FragmentEvent.DESTROY_VIEW);
83 | super.onDestroyView();
84 | }
85 |
86 | @Override
87 | public void onDestroy() {
88 | // lifecycleSubject.onNext(FragmentEvent.DESTROY);
89 | super.onDestroy();
90 | }
91 |
92 | @Override
93 | public void onDetach() {
94 | // lifecycleSubject.onNext(FragmentEvent.DETACH);
95 | super.onDetach();
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/intarface/view/GearRecyclerMore.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.intarface.view;
2 |
3 | /**
4 | * Created by Android on 2016/6/3.
5 | */
6 | public interface GearRecyclerMore {
7 | void setMoreView(boolean more);
8 | }
9 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/manager/ActivityManager.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.manager;
2 |
3 | import android.app.Activity;
4 |
5 | import java.util.ArrayList;
6 | import java.util.List;
7 |
8 | /**
9 | * GearApplication
10 | * Created by YichenZ on 2016/3/23 11:51.
11 | */
12 | public class ActivityManager {
13 | private static ActivityManager instance;
14 |
15 | public static ActivityManager getInstance(){
16 | if(instance==null){
17 | synchronized (ActivityManager.class){
18 | if(instance==null){
19 | instance=new ActivityManager();
20 | }
21 | }
22 | }
23 | return instance;
24 | }
25 | public static final String J_FLAG = "FLAG";
26 | public static final String J_FLAG2 = "FLAG2";
27 |
28 |
29 | private static List activities;
30 |
31 | public ActivityManager(){
32 | if(activities==null){
33 | activities=new ArrayList();
34 | }
35 | }
36 |
37 | public static List getActivities() {
38 | return activities;
39 | }
40 |
41 | public void clearAllActivity(){
42 | for (Activity activity : activities){
43 | if(activity!=null){
44 | activity.finish();
45 | }
46 | }
47 | }
48 |
49 | /**
50 | * exit app
51 | */
52 | public void exitApp() {
53 | clearAllActivity();
54 | System.exit(0);
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/network/api/GearHttpServiceManager.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.network.api;
2 |
3 | import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
4 |
5 | import okhttp3.OkHttpClient;
6 | import retrofit2.Retrofit;
7 | import retrofit2.converter.gson.GsonConverterFactory;
8 |
9 | /**
10 | * GearApplication
11 | * Created by YichenZ on 2016/4/13 14:41.
12 | */
13 | public class GearHttpServiceManager {
14 | protected static GearHttpServiceManager instance;
15 |
16 | public static GearHttpServiceManager getInstance(){
17 | if(instance==null){
18 | synchronized (GearHttpServiceManager.class){
19 | if(instance==null){
20 | instance=new GearHttpServiceManager();
21 | }
22 | }
23 | }
24 | return instance;
25 | }
26 |
27 | protected static String sBaseUrl;
28 |
29 | protected Retrofit retrofit;
30 |
31 | public GearHttpServiceManager(){
32 | }
33 |
34 | public GearHttpServiceManager setBaseUrl(String url){
35 | sBaseUrl=url;
36 | return instance;
37 | }
38 |
39 | public void build(OkHttpClient okHttpClient){
40 | if(sBaseUrl==null)
41 | new IllegalAccessException("need setBaseUrl");
42 | retrofit=new Retrofit.Builder()
43 | .client(okHttpClient)
44 | .baseUrl(sBaseUrl)
45 | .addConverterFactory(GsonConverterFactory.create())
46 | .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
47 | .build();
48 | }
49 |
50 | public Retrofit getRetrofit() {
51 | if(retrofit==null)
52 | new IllegalAccessException("Please build");
53 | return retrofit;
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/network/http/OkHttpManager.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.network.http;
2 |
3 | import java.util.concurrent.TimeUnit;
4 |
5 | import okhttp3.OkHttpClient;
6 | import okhttp3.Request;
7 | import okhttp3.logging.HttpLoggingInterceptor;
8 |
9 |
10 | /**
11 | * GearApplication
12 | * okHttp3 管理类,封装了okHttp的网络连接方法
13 | * OkHttp3 开启Stetho听诊器
14 | * Created by YichenZ on 2016/3/8 13:41.
15 | * @version 1.1
16 | * 增加了isLog参数判断是否显示log
17 | * @version 1.0
18 | * 创建
19 | */
20 | public class OkHttpManager {
21 | protected static OkHttpManager instance;
22 |
23 | public static OkHttpManager getInstance() {
24 | if (instance == null) {
25 | synchronized (OkHttpManager.class) {
26 | if (instance == null) {
27 | instance = new OkHttpManager();
28 | }
29 | }
30 | }
31 | return instance;
32 | }
33 |
34 | protected static OkHttpClient okHttpClient;
35 |
36 | protected int mTimeOut=15;
37 | protected String headerKey,headerValue;
38 | protected boolean isLog=true;
39 |
40 | public OkHttpManager() {
41 | }
42 |
43 | /**
44 | * 设置header
45 | * 暂时不支持多个header
46 | * @param headerKey
47 | * @param headerValue
48 | * @return
49 | */
50 | public OkHttpManager setHeader(String headerKey,String headerValue) {
51 | this.headerKey = headerKey;
52 | this.headerValue = headerValue;
53 | return instance;
54 | }
55 |
56 | /**
57 | * 设置超时时间
58 | * @param timeOut 数值
59 | * @return
60 | */
61 | public OkHttpManager setTimeOut(int timeOut) {
62 | mTimeOut = timeOut;
63 | return instance;
64 | }
65 |
66 | /**
67 | * 是否显示Log 默认为true
68 | * @param isLog true 显示
69 | * @return
70 | */
71 | public OkHttpManager setLog(boolean isLog){
72 | this.isLog=isLog;
73 | return instance;
74 | }
75 |
76 | public OkHttpManager build(){
77 | if (okHttpClient == null) {
78 | okHttpClient = new OkHttpClient.Builder()
79 | .addInterceptor(new HttpLoggingInterceptor()
80 | .setLevel(isLog?HttpLoggingInterceptor.Level.BODY: HttpLoggingInterceptor.Level.NONE))
81 | .retryOnConnectionFailure(true)
82 | .connectTimeout(mTimeOut, TimeUnit.SECONDS)
83 | .addInterceptor(chain -> {
84 | Request response = chain.request();
85 | if (headerKey!=null) {
86 | response = chain.request()
87 | .newBuilder()
88 | .addHeader(headerKey, headerValue)
89 | .build();
90 | }
91 | return chain.proceed(response);
92 | })
93 | .build();
94 | }
95 | return instance;
96 | }
97 |
98 | /**
99 | * @return OkHttp3 Client
100 | */
101 | public OkHttpClient getClient() {
102 | return okHttpClient;
103 | }
104 |
105 | }
106 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/network/socker/SocketTCPService.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.network.socker;
2 |
3 | import android.os.Handler;
4 | import android.os.Message;
5 |
6 | import java.io.BufferedReader;
7 | import java.io.BufferedWriter;
8 | import java.io.DataOutputStream;
9 | import java.io.IOException;
10 | import java.io.InputStreamReader;
11 | import java.io.OutputStreamWriter;
12 | import java.io.PrintWriter;
13 | import java.net.InetAddress;
14 | import java.net.Socket;
15 |
16 | /**
17 | * youmai
18 | * Created by YichenZ on 2015/4/24 17:22.
19 | */
20 | public class SocketTCPService implements Runnable{
21 | //tcp server info
22 | protected Socket socket = null;
23 | protected String ip="";
24 | protected int port=0;
25 |
26 | protected BufferedReader in = null;
27 | protected PrintWriter out = null;
28 | protected DataOutputStream outputStream;
29 | protected String content = "";
30 | protected String text="";
31 | protected SocketTcpContextListener mSocketLis;
32 | protected char[] cbuf=new char[1024];
33 |
34 | public SocketTCPService(String ip, int port){
35 | this.ip=ip;
36 | this.port=port;
37 | }
38 |
39 | public SocketTCPService(String ip, int port, SocketTcpContextListener mSocketLis){
40 | this.ip=ip;
41 | this.port=port;
42 | this.mSocketLis=mSocketLis;
43 | }
44 |
45 | /**
46 | * 运行线程连接服务器
47 | * in.read 与 in.readLine 用法不同
48 | */
49 | @Override
50 | public void run() {
51 | try {
52 | InetAddress serverAddress = InetAddress.getByName(ip);
53 | socket = new Socket(serverAddress,port);
54 | in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
55 | out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
56 | socket.getOutputStream())), true);
57 | //outputStream=new DataOutputStream(socket.getOutputStream());
58 | while (true) {
59 | if (socket.isConnected()) {
60 | if (!socket.isInputShutdown()) {
61 | if(in.read(cbuf, 0, cbuf.length)!=-1) {
62 | text = setContent(cbuf);
63 | content="";
64 | mHandler.sendEmptyMessage(100);
65 | }
66 | }
67 | } else {
68 |
69 | }
70 | }
71 | } catch (Exception e) {
72 | e.printStackTrace();
73 | mHandler.sendEmptyMessage(104);
74 | }
75 | }
76 |
77 | Handler mHandler =new Handler(){
78 | @Override
79 | public void handleMessage(Message msg) {
80 | super.handleMessage(msg);
81 | switch (msg.what){
82 | case 100:
83 | if(mSocketLis!=null) {
84 | mSocketLis.getServerContent(text);
85 | }
86 | break;
87 | case 104:break;
88 | }
89 | }
90 | };
91 |
92 | /**
93 | * 向服务器发送数据
94 | * @param str
95 | */
96 | public void writerContentToServer(String str){
97 | if(socket.isConnected()){
98 | out.print(str);
99 | out.flush();
100 | }
101 | }
102 |
103 | /**
104 | * 关闭连接
105 | */
106 | public void closeService(){
107 | try {
108 | if(socket.isConnected()) {
109 | socket.close();
110 | }
111 | } catch (IOException e) {
112 | e.printStackTrace();
113 | }
114 | }
115 |
116 | /**
117 | * 读取缓存区数据
118 | * @param chars
119 | * @return
120 | */
121 | private String setContent(char[] chars){
122 | for(int i=0;i FlowableTransformer io_main(){
15 | return ob -> ob.subscribeOn(Schedulers.io())
16 | .observeOn(AndroidSchedulers.mainThread());
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/rxjava/rxbus/annotation/Subscribe.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.rxjava.rxbus.annotation;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import java.lang.annotation.ElementType;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.RetentionPolicy;
8 | import java.lang.annotation.Target;
9 |
10 | import gear.yc.com.gearlibrary.rxjava.rxbus.event.EventThread;
11 |
12 | /**
13 | * Created by Android on 2016/6/8.
14 | */
15 | @Retention(RetentionPolicy.RUNTIME)
16 | @Target(ElementType.METHOD)
17 | public @interface Subscribe {
18 | @NonNull int tag();
19 |
20 | EventThread thread() default EventThread.MAIN_THREAD;
21 | }
22 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/rxjava/rxbus/annotation/UseRxBus.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.rxjava.rxbus.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * Created by Android on 2016/6/8.
10 | */
11 | @Retention(RetentionPolicy.RUNTIME)
12 | @Target({ElementType.METHOD,ElementType.TYPE})
13 | public @interface UseRxBus {
14 | }
15 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/rxjava/rxbus/event/EventTag.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.rxjava.rxbus.event;
2 |
3 | /**
4 | * Created by Android on 2016/6/17.
5 | */
6 | public enum EventTag{
7 | DEFAULT(0),
8 | SUCCESS(-100),
9 | FAILED(-300),
10 | UPDATE(-200),
11 | ERROR(-404);
12 |
13 | private int value=0;
14 |
15 | EventTag(int value){
16 | this.value=value;
17 | }
18 |
19 | public int value(){
20 | return value;
21 | }
22 |
23 | public static int getTag(EventTag eventTag){
24 | int i =0;
25 | switch (eventTag){
26 | case DEFAULT:i=0;break;
27 | case SUCCESS:i=-100;break;
28 | case FAILED:i=-1;break;
29 | case UPDATE:i=-200;break;
30 | case ERROR:i=-404;break;
31 | }
32 | return i;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/rxjava/rxbus/event/EventThread.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.rxjava.rxbus.event;
2 |
3 | import io.reactivex.Scheduler;
4 | import io.reactivex.android.schedulers.AndroidSchedulers;
5 | import io.reactivex.schedulers.Schedulers;
6 |
7 | /**
8 | * Created by Android on 2016/6/8.
9 | */
10 | public enum EventThread {
11 | /**
12 | * 主线程
13 | */
14 | MAIN_THREAD,
15 | /**
16 | * 新的线程
17 | */
18 | NEW_THREAD,
19 | /**
20 | * 读写线程
21 | */
22 | IO,
23 | /**
24 | * 计算工作默认线程
25 | */
26 | COMPUTATION,
27 | /**
28 | * 在当前线程中按照队列方式执行
29 | */
30 | TRAMPOLINE;
31 |
32 | public static Scheduler getScheduler(EventThread threadMode){
33 | Scheduler scheduler;
34 | switch (threadMode){
35 | case MAIN_THREAD:scheduler= AndroidSchedulers.mainThread();break;
36 | case NEW_THREAD:scheduler= Schedulers.newThread();break;
37 | case IO:scheduler=Schedulers.io();break;
38 | case COMPUTATION:scheduler=Schedulers.computation();break;
39 | case TRAMPOLINE:scheduler=Schedulers.trampoline();break;
40 | default:scheduler= AndroidSchedulers.mainThread();
41 | }
42 | return scheduler;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/rxjava/rxbus/pojo/Msg.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.rxjava.rxbus.pojo;
2 |
3 | /**
4 | * Created by Android on 2016/6/15.
5 | */
6 | public class Msg {
7 | public int code;
8 | public Object object;
9 |
10 | public Msg(int code, Object object){
11 | this.code = code;
12 | this.object = object;
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/ui/adapter/GearRecyclerViewAdapter.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.ui.adapter;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.RecyclerView;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import java.util.ArrayList;
9 |
10 | /**
11 | * GearApplication
12 | * 在最后调用super会自动加载Click事件
13 | * 如果使用view或者不最后调用super,click事件不会被加载
14 | * 也可以使用view.setOnClickLister(this)
15 | * Created by YichenZ on 2016/4/22 11:10.
16 | */
17 | public class GearRecyclerViewAdapter extends RecyclerView.Adapter
18 | implements View.OnClickListener{
19 | protected ArrayList mData;
20 | protected Context mContext;
21 | protected OnRecyclerViewItemClickListener mListener;
22 | protected View view;
23 |
24 | public GearRecyclerViewAdapter(Context mContext, ArrayList mData){
25 | this.mContext=mContext;
26 | this.mData=mData;
27 | }
28 |
29 | @Override
30 | public R onCreateViewHolder(ViewGroup parent, int viewType) {
31 | return null;
32 | }
33 |
34 | @Override
35 | public void onBindViewHolder(R holder, int position) {
36 |
37 | }
38 |
39 | @Override
40 | public int getItemCount() {
41 | if(mData==null)
42 | return 0;
43 | return mData.size();
44 | }
45 |
46 | public ArrayList getData() {
47 | return mData;
48 | }
49 |
50 | public void setData(ArrayList data) {
51 | mData = data;
52 | }
53 |
54 | @Override
55 | public void onClick(View v) {
56 | if(mListener!=null){
57 | mListener.onItemClick(v,(T)v.getTag());
58 | }
59 | }
60 |
61 | public interface OnRecyclerViewItemClickListener {
62 | void onItemClick(View view, T data);
63 | }
64 |
65 | public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
66 | mListener = listener;
67 | }
68 |
69 | }
70 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/ui/custom/GearRecyclerItemDecoration.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.ui.custom;
2 |
3 | import android.content.Context;
4 | import android.content.res.TypedArray;
5 | import android.graphics.Canvas;
6 | import android.graphics.Rect;
7 | import android.graphics.drawable.Drawable;
8 | import android.support.v7.widget.LinearLayoutManager;
9 | import android.support.v7.widget.RecyclerView;
10 | import android.view.View;
11 |
12 | /**
13 | * GearApplication
14 | * Created by YichenZ on 2016/3/30 17:24.
15 | */
16 | public class GearRecyclerItemDecoration extends RecyclerView.ItemDecoration{
17 |
18 | // use android divider
19 | protected static final int[] ARRTS =new int[]{
20 | android.R.attr.listDivider
21 | };
22 | //h or v line
23 | protected int mOrientation;
24 |
25 | protected Drawable mDivider;
26 |
27 | public GearRecyclerItemDecoration(Context context,int orientation){
28 | final TypedArray a =context.obtainStyledAttributes(ARRTS);
29 | mDivider=a.getDrawable(0);
30 | a.recycle();
31 | setOrientation(orientation);
32 | }
33 |
34 | public void setOrientation(int mOrientation){
35 | if(mOrientation!= LinearLayoutManager.HORIZONTAL && mOrientation!=LinearLayoutManager.VERTICAL)
36 | throw new IllegalArgumentException("invalid orientation");
37 | this.mOrientation = mOrientation;
38 | }
39 |
40 | @Override
41 | public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
42 | super.onDraw(c, parent, state);
43 | if(mOrientation == LinearLayoutManager.VERTICAL){
44 | drawVertical(c,parent);
45 | }else{
46 | drawHorizontal(c,parent);
47 | }
48 | }
49 |
50 |
51 |
52 | public void drawVertical(Canvas c, RecyclerView parent) {
53 | final int left = parent.getPaddingLeft();
54 | final int right = parent.getWidth() - parent.getPaddingRight();
55 |
56 | final int childCount = parent.getChildCount();
57 | for (int i = 0; i < childCount; i++) {
58 | final View child = parent.getChildAt(i);
59 | final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
60 | .getLayoutParams();
61 | final int top = child.getBottom() + params.bottomMargin;
62 | final int bottom = top + mDivider.getIntrinsicHeight();
63 | mDivider.setBounds(left, top, right, bottom);
64 | mDivider.draw(c);
65 | }
66 | }
67 |
68 | public void drawHorizontal(Canvas c, RecyclerView parent) {
69 | final int top = parent.getPaddingTop();
70 | final int bottom = parent.getHeight() - parent.getPaddingBottom();
71 |
72 | final int childCount = parent.getChildCount();
73 | for (int i = 0; i < childCount; i++) {
74 | final View child = parent.getChildAt(i);
75 | final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
76 | .getLayoutParams();
77 | final int left = child.getRight() + params.rightMargin;
78 | final int right = left + mDivider.getIntrinsicHeight();
79 | mDivider.setBounds(left, top, right, bottom);
80 | mDivider.draw(c);
81 | }
82 | }
83 |
84 |
85 | @Override
86 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
87 | super.getItemOffsets(outRect, view, parent, state);
88 | if (mOrientation == LinearLayoutManager.VERTICAL) {
89 | outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
90 | } else {
91 | outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
92 | }
93 | }
94 |
95 |
96 | }
97 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/ui/custom/GearRecyclerView.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.ui.custom;
2 |
3 | import android.content.Context;
4 | import android.support.annotation.Nullable;
5 | import android.support.v7.widget.RecyclerView;
6 | import android.util.AttributeSet;
7 |
8 | /**
9 | * GearApplication
10 | * Created by YichenZ on 2016/3/30 17:57.
11 | */
12 | public class GearRecyclerView extends RecyclerView{
13 |
14 | public GearRecyclerView(Context context) {
15 | super(context);
16 | }
17 |
18 | public GearRecyclerView(Context context, @Nullable AttributeSet attrs) {
19 | super(context, attrs);
20 | }
21 |
22 | public GearRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
23 | super(context, attrs, defStyle);
24 | }
25 |
26 | @Override
27 | protected void onMeasure(int widthSpec, int heightSpec) {
28 | int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
29 | MeasureSpec.AT_MOST);
30 | super.onMeasure(widthSpec, expandSpec);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/utils/ConvertPadPlus.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.utils;
2 |
3 | import android.content.Context;
4 |
5 | /**
6 | * BAndroid
7 | * Created by YichenZ on 2015/8/10 14:18.
8 | * 单位转换 dp-px px-dp
9 | */
10 | public class ConvertPadPlus {
11 | /**
12 | * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
13 | * @param context this
14 | * @param dpValue dp value
15 | * @return px
16 | */
17 | public static int dip2px(Context context, float dpValue) {
18 | final float scale = context.getResources().getDisplayMetrics().density;
19 | return (int) (dpValue * scale + 0.5f);
20 | }
21 |
22 | /**
23 | * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
24 | * @param context this
25 | * @param pxValue px value
26 | * @return dp
27 | */
28 | public static int px2dip(Context context, float pxValue) {
29 | final float scale = context.getResources().getDisplayMetrics().density;
30 | return (int) (pxValue / scale + 0.5f);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/utils/Preconditions.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.utils;
2 |
3 | /**
4 | * GearApplication
5 | * Created by YichenZ on 2017/2/7 09:41.
6 | */
7 |
8 | public final class Preconditions {
9 | public static T checkNotNull(T value, String message) {
10 | if (value == null) {
11 | throw new NullPointerException(message);
12 | }
13 | return value;
14 | }
15 |
16 | private Preconditions() {
17 | throw new AssertionError("No instances.");
18 | }
19 | }
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/utils/ToastUtil.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.utils;
2 |
3 | import android.content.Context;
4 | import android.widget.Toast;
5 |
6 | /**
7 | * @version 1.0
8 | * Created by Android on 2016/5/31.
9 | */
10 | public class ToastUtil {
11 | private static ToastUtil ourInstance;
12 |
13 | public static ToastUtil getInstance() {
14 | if(ourInstance==null){
15 | synchronized (ToastUtil.class){
16 | if(ourInstance==null){
17 | ourInstance=new ToastUtil();
18 | }
19 | }
20 | }
21 | return ourInstance;
22 | }
23 |
24 | private Toast mToast;
25 |
26 | private String netError="未能连接到网络,请检查网络连接.";
27 |
28 | private ToastUtil() {
29 | }
30 |
31 | public void makeLongToast(Context context, String text) {
32 | if (mToast == null) {
33 | mToast = Toast.makeText(context.getApplicationContext(), text, Toast.LENGTH_LONG);
34 | } else {
35 | mToast.setText(text);
36 | mToast.setDuration(Toast.LENGTH_LONG);
37 | }
38 | mToast.show();
39 | }
40 |
41 | public void makeShortToast(Context context, String text) {
42 |
43 | if (mToast == null) {
44 | mToast = Toast.makeText(context.getApplicationContext(), text, Toast.LENGTH_SHORT);
45 | } else {
46 | mToast.setText(text);
47 | mToast.setDuration(Toast.LENGTH_SHORT);
48 | }
49 | mToast.show();
50 | }
51 |
52 | public void makeNetErrorToast(Context context){
53 | this.makeLongToast(context,netError);
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/utils/encryption/BASE64.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.utils.encryption;
2 |
3 | import java.io.ByteArrayOutputStream;
4 | import java.io.IOException;
5 | import java.io.OutputStream;
6 |
7 | public class BASE64 {
8 | private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
9 | .toCharArray();
10 |
11 | /**
12 | * data[]
13 | *
14 | * @param data
15 | * @return
16 | */
17 | public static String encode(byte[] data) {
18 | int start = 0;
19 | int len = data.length;
20 | StringBuffer buf = new StringBuffer(data.length * 3 / 2);
21 |
22 | int end = len - 3;
23 | int i = start;
24 | int n = 0;
25 |
26 | while (i <= end) {
27 | int d = (((data[i]) & 0x0ff) << 16)
28 | | (((data[i + 1]) & 0x0ff) << 8)
29 | | ((data[i + 2]) & 0x0ff);
30 |
31 | buf.append(legalChars[(d >> 18) & 63]);
32 | buf.append(legalChars[(d >> 12) & 63]);
33 | buf.append(legalChars[(d >> 6) & 63]);
34 | buf.append(legalChars[d & 63]);
35 |
36 | i += 3;
37 |
38 | if (n++ >= 14) {
39 | n = 0;
40 | buf.append(" ");
41 | }
42 | }
43 |
44 | if (i == start + len - 2) {
45 | int d = (((data[i]) & 0x0ff) << 16)
46 | | (((data[i + 1]) & 255) << 8);
47 |
48 | buf.append(legalChars[(d >> 18) & 63]);
49 | buf.append(legalChars[(d >> 12) & 63]);
50 | buf.append(legalChars[(d >> 6) & 63]);
51 | buf.append("=");
52 | } else if (i == start + len - 1) {
53 | int d = ((data[i]) & 0x0ff) << 16;
54 |
55 | buf.append(legalChars[(d >> 18) & 63]);
56 | buf.append(legalChars[(d >> 12) & 63]);
57 | buf.append("==");
58 | }
59 |
60 | return buf.toString();
61 | }
62 |
63 | private static int decode(char c) {
64 | if (c >= 'A' && c <= 'Z')
65 | return (c) - 65;
66 | else if (c >= 'a' && c <= 'z')
67 | return (c) - 97 + 26;
68 | else if (c >= '0' && c <= '9')
69 | return (c) - 48 + 26 + 26;
70 | else
71 | switch (c) {
72 | case '+':
73 | return 62;
74 | case '/':
75 | return 63;
76 | case '=':
77 | return 0;
78 | default:
79 | throw new RuntimeException("unexpected code: " + c);
80 | }
81 | }
82 |
83 | /**
84 | * Decodes the given Base64 encoded String to a new byte array. The byte
85 | * array holding the decoded data is returned.
86 | */
87 |
88 | public static byte[] decode(String s) {
89 |
90 | ByteArrayOutputStream bos = new ByteArrayOutputStream();
91 | try {
92 | decode(s, bos);
93 | } catch (IOException e) {
94 | throw new RuntimeException();
95 | }
96 | byte[] decodedBytes = bos.toByteArray();
97 | try {
98 | bos.close();
99 | bos = null;
100 | } catch (IOException ex) {
101 | System.err.println("Error while decoding BASE64: " + ex.toString());
102 | }
103 | return decodedBytes;
104 | }
105 |
106 | private static void decode(String s, OutputStream os) throws IOException {
107 | int i = 0;
108 |
109 | int len = s.length();
110 |
111 | while (true) {
112 | while (i < len && s.charAt(i) <= ' ')
113 | i++;
114 |
115 | if (i == len)
116 | break;
117 |
118 | int tri = (decode(s.charAt(i)) << 18)
119 | + (decode(s.charAt(i + 1)) << 12)
120 | + (decode(s.charAt(i + 2)) << 6)
121 | + (decode(s.charAt(i + 3)));
122 |
123 | os.write((tri >> 16) & 255);
124 | if (s.charAt(i + 2) == '=')
125 | break;
126 | os.write((tri >> 8) & 255);
127 | if (s.charAt(i + 3) == '=')
128 | break;
129 | os.write(tri & 255);
130 |
131 | i += 4;
132 | }
133 | }
134 |
135 | }
136 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/java/gear/yc/com/gearlibrary/utils/web/BaseWeb.java:
--------------------------------------------------------------------------------
1 | package gear.yc.com.gearlibrary.utils.web;
2 |
3 | import android.content.Context;
4 | import android.os.Build;
5 | import android.webkit.WebSettings;
6 |
7 | import java.io.File;
8 |
9 | /**
10 | * BAndroid
11 | * Created by YichenZ on 2015/10/26 15:50.
12 | */
13 | public class BaseWeb {
14 | protected static final String APP_CACAHE_DIRNAME = "/webcache";
15 | protected WebSettings settings;
16 |
17 | public WebSettings getSettings() {
18 | return settings;
19 | }
20 |
21 | public void setSettings(WebSettings settings) {
22 | this.settings = settings;
23 | }
24 |
25 | public WebSettings setWeb(Context context){
26 | if(settings==null)
27 | new RuntimeException("settings is not null");
28 |
29 | settings.setJavaScriptEnabled(true);//开启JavaScript
30 | settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//缓存模式
31 | settings.setDefaultTextEncodingName("utf-8");//默认加载格式utf-8
32 | settings.setDomStorageEnabled(true);//开启DOM storage API
33 | settings.setDatabaseEnabled(true);//启用数据库
34 | settings.setBuiltInZoomControls(true);//启用页面缩放
35 | String cacheDirPath = context.getFilesDir().getAbsolutePath()+"test";
36 | settings.setDatabasePath(cacheDirPath);//设置数据库缓存路径
37 | settings.setAppCachePath(cacheDirPath);//设置应用换成路径
38 | settings.setAppCacheEnabled(true);//开启应用缓存
39 | if(Build.VERSION.SDK_INT >= 19) {
40 | settings.setLoadsImagesAutomatically(true);//开启网页图片加载
41 | } else {
42 | settings.setLoadsImagesAutomatically(false);
43 | }
44 | return settings;
45 | }
46 |
47 | /**
48 | * 清除WebView缓存
49 | */
50 | public void clearWebViewCache(Context context){
51 |
52 | //清理Webview缓存数据库
53 | try {
54 | context.deleteDatabase("webview.db");
55 | context.deleteDatabase("webviewCache.db");
56 | } catch (Exception e) {
57 | e.printStackTrace();
58 | }
59 |
60 | //WebView 缓存文件
61 | File appCacheDir = new File(context.getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
62 | // Log.e(TAG, "appCacheDir path=" + appCacheDir.getAbsolutePath());
63 |
64 | File webviewCacheDir = new File(context.getCacheDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
65 | // Log.e(TAG, "webviewCacheDir path=" + webviewCacheDir.getAbsolutePath());
66 |
67 | //删除webview 缓存目录
68 | if(webviewCacheDir.exists()){
69 | deleteFile(webviewCacheDir);
70 | }
71 | //删除webview 缓存 缓存目录
72 | if(appCacheDir.exists()){
73 | deleteFile(appCacheDir);
74 | }
75 | }
76 |
77 |
78 | /**
79 | * 递归删除 文件/文件夹
80 | *
81 | * @param file
82 | */
83 | public void deleteFile(File file) {
84 |
85 | // Log.i(TAG, "delete file path=" + file.getAbsolutePath());
86 |
87 | if (file.exists()) {
88 | if (file.isFile()) {
89 | file.delete();
90 | } else if (file.isDirectory()) {
91 | File files[] = file.listFiles();
92 | for (int i = 0; i < files.length; i++) {
93 | deleteFile(files[i]);
94 | }
95 | }
96 | file.delete();
97 | } else {
98 | // Log.e(TAG, "delete file no exists " + file.getAbsolutePath());
99 | }
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/res/anim/backin.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/res/anim/backout.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/res/anim/zoomin.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/res/anim/zoomout.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/res/drawable/progress_horizontal.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
19 | -
20 |
21 |
22 |
29 |
30 |
31 |
32 | -
33 |
34 |
35 |
36 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/res/layout/item_foot.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
16 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #4caf50
4 | #388e3c
5 | #fbc02d
6 |
7 | #ffffff
8 | #50000000
9 | #00000000
10 |
11 |
--------------------------------------------------------------------------------
/gearlibrary/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | 探索
3 |
4 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 |
20 | PROJ_GROUP=com.joker.gear
21 | PROJ_VERSION=1.5.4
22 | PROJ_NAME=gear
23 | PROJ_WEBSITEURL=https://github.com/hackerlc/GearApplication
24 | PROJ_ISSUETRACKERURL=
25 | PROJ_VCSURL=git@github.com:hackerlc/GearApplication.git
26 | PROJ_DESCRIPTION=android GearAppliaction
27 | PROJ_ARTIFACTID=com-joker-gear
28 |
29 | DEVELOPER_ID=lc
30 | DEVELOPER_NAME=joker
31 | DEVELOPER_EMAIL=hackerlcg@gmail.com
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackerlc/GearApplication/21d72a36d8fdf896db4457fcf5f0a1d6ca64293c/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sat May 20 09:45:52 CST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip
7 |
--------------------------------------------------------------------------------
/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 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
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 Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/996icu/996.ICU/blob/master/LICENSE)
2 | ### GearApplication
3 | 使用OkHttp3(OkHttp) + Retrofit2 + Rxjava(RxAndroid) +Rxlifecycle2 +Rxbus构建的DEMO项目
4 |
5 | 主要模块使用MVP+MVVM的方式构建,按照功能分包
6 |
7 | 可直接导入项目并运行
8 | ### [Gearlibrary 主项目基础架构框架](https://github.com/hackerlc/GearApplication/tree/master/gearlibrary)
9 | 集成OkHttp3(OkHttp) + Retrofit2 + Rxjava2(RxAndroid2) +Rxbus
10 | 事件总线由rxbus负责
11 | Retrofit2,Fresco 网络访问由OkHttp3负责
12 |
13 | 简书:http://www.jianshu.com/users/02266b406caa/latest_articles
14 |
15 | ### [GearApifinder-compiler 自动生成相关类框架](https://github.com/hackerlc/GearApplication/tree/master/gearapifinder-compiler)
16 | ### [GearApifinder-annotation 自动生成类框架annotation](https://github.com/hackerlc/GearApplication/tree/master/gearapifinder-annotation)
17 | #### GearApplication 引用
18 | ````
19 | compile fileTree(include: ['*.jar'], dir: 'libs')
20 | compile project(':gearlibrary')
21 | compile 'com.android.support:support-v4:23.4.0'
22 | compile 'com.android.support:design:23.1.1'
23 | compile 'com.android.support:cardview-v7:23.4.0'
24 |
25 | compile 'com.jcodecraeer:xrecyclerview:1.2.7'
26 |
27 | compile 'com.github.bumptech.glide:glide:3.7.0'
28 |
29 | compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
30 |
31 | compile 'com.trello.rxlifecycle2:rxlifecycle:2.0.1'
32 | compile 'com.trello.rxlifecycle2:rxlifecycle-android:2.0.1'
33 | compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1'
34 |
35 | compile 'com.google.android.gms:play-services-appindexing:8.4.0'
36 | annotationProcessor 'com.google.guava:guava:19.0'
37 | compile 'com.google.dagger:dagger:2.4'
38 | annotationProcessor 'com.google.dagger:dagger-compiler:2.4'
39 | provided 'javax.annotation:jsr250-api:1.0'
40 |
41 | annotationProcessor project(':gearapifinder-compiler')
42 |
43 | testCompile 'junit:junit:4.12'
44 | ````
45 | #### gearlibrary 引用
46 | ```
47 | compile fileTree(include: ['*.jar'], dir: 'libs')
48 | compile 'com.android.support:appcompat-v7:23.3.0'
49 | compile 'com.android.support:recyclerview-v7:23.1.1'
50 |
51 | compile 'com.squareup.okhttp3:okhttp:3.4.1'
52 | compile 'com.squareup.okio:okio:1.9.0'
53 |
54 | compile 'com.google.code.gson:gson:2.7'
55 |
56 | compile 'io.reactivex.rxjava2:rxjava:2.0.2'
57 | compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
58 |
59 | compile 'com.squareup.retrofit2:retrofit:2.1.0'
60 | compile 'com.squareup.retrofit2:converter-gson:2.1.0'
61 | compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0-RC3'
62 | compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
63 |
64 | compile project(':gearapifinder-annotation')
65 | ```
66 | ###使用library框架
67 | ```
68 | compile 'com.joker.gear:com-joker-gear:1.5.1'
69 | ```
70 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':gearlibrary', ':gearapifinder-compiler', ':gearapifinder-annotation'
2 |
--------------------------------------------------------------------------------