添加 RxSocket 做服务
authorsnickersun <scy@incartech.cn>
Sat, 28 Dec 2019 12:12:04 +0000 (20:12 +0800)
committersnickersun <scy@incartech.cn>
Sat, 28 Dec 2019 12:12:04 +0000 (20:12 +0800)
70 files changed:
.gradle/2.14.1/taskArtifacts/cache.properties [new file with mode: 0644]
.gradle/2.14.1/taskArtifacts/cache.properties.lock [new file with mode: 0644]
.gradle/2.14.1/taskArtifacts/fileHashes.bin [new file with mode: 0644]
.gradle/2.14.1/taskArtifacts/fileSnapshots.bin [new file with mode: 0644]
.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin [new file with mode: 0644]
.gradle/2.14.1/taskArtifacts/taskArtifacts.bin [new file with mode: 0644]
.idea/caches/build_file_checksums.ser [new file with mode: 0644]
.idea/caches/gradle_models.ser [new file with mode: 0644]
.idea/codeStyles/Project.xml [new file with mode: 0644]
.idea/gradle.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_animated_vector_drawable_25_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_appcompat_v7_25_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_support_annotations_25_1_0_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_support_compat_25_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_support_core_ui_25_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_support_core_utils_25_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_support_fragment_25_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_support_media_compat_25_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_support_v4_25_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_support_vector_drawable_25_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_2_2_2_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_2_2_2_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_test_exposed_instrumentation_api_publish_0_5_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_test_rules_0_5_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_android_support_test_runner_0_5_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_github_ChestnutPlus_TestModules_v1_0_16_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_kymjs_rxvolley_rxvolley_1_1_3_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__com_squareup_javawriter_2_1_1_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle__io_reactivex_rxandroid_1_1_0_aar.xml [new file with mode: 0644]
.idea/libraries/Gradle__io_reactivex_rxjava_1_1_0_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_2_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle__javax_inject_javax_inject_1_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle__junit_junit_4_12_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml [new file with mode: 0644]
.idea/misc.xml [new file with mode: 0644]
.idea/modules.xml [new file with mode: 0644]
.idea/runConfigurations.xml [new file with mode: 0644]
.idea/vcs.xml [new file with mode: 0644]
.idea/workspace.xml [new file with mode: 0644]
app/.gitignore [new file with mode: 0644]
app/app.iml [new file with mode: 0644]
app/build.gradle [new file with mode: 0644]
app/proguard-rules.pro [new file with mode: 0644]
app/src/main/AndroidManifest.xml [new file with mode: 0644]
app/src/main/java/com/ic/protocol/MainActivity.java [new file with mode: 0644]
app/src/main/java/com/ic/protocol/RxSocket.java [new file with mode: 0644]
app/src/main/res/layout/activity_main.xml [new file with mode: 0644]
app/src/main/res/mipmap-hdpi/ic_launcher.png [new file with mode: 0644]
app/src/main/res/mipmap-mdpi/ic_launcher.png [new file with mode: 0644]
app/src/main/res/mipmap-xhdpi/ic_launcher.png [new file with mode: 0644]
app/src/main/res/mipmap-xxhdpi/ic_launcher.png [new file with mode: 0644]
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png [new file with mode: 0644]
app/src/main/res/values-w820dp/dimens.xml [new file with mode: 0644]
app/src/main/res/values/colors.xml [new file with mode: 0644]
app/src/main/res/values/dimens.xml [new file with mode: 0644]
app/src/main/res/values/strings.xml [new file with mode: 0644]
app/src/main/res/values/styles.xml [new file with mode: 0644]
build.gradle [new file with mode: 0644]
build/intermediates/dex-cache/cache.xml [new file with mode: 0644]
gradle.properties [new file with mode: 0644]
gradle/wrapper/gradle-wrapper.jar [new file with mode: 0644]
gradle/wrapper/gradle-wrapper.properties [new file with mode: 0644]
gradlew [new file with mode: 0644]
gradlew.bat [new file with mode: 0644]
icsupport.iml [new file with mode: 0644]
local.properties [new file with mode: 0644]
settings.gradle [new file with mode: 0644]

diff --git a/.gradle/2.14.1/taskArtifacts/cache.properties b/.gradle/2.14.1/taskArtifacts/cache.properties
new file mode 100644 (file)
index 0000000..807a5c5
--- /dev/null
@@ -0,0 +1 @@
+#Sat Dec 28 20:06:16 CST 2019\r
diff --git a/.gradle/2.14.1/taskArtifacts/cache.properties.lock b/.gradle/2.14.1/taskArtifacts/cache.properties.lock
new file mode 100644 (file)
index 0000000..7e66efc
Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/cache.properties.lock differ
diff --git a/.gradle/2.14.1/taskArtifacts/fileHashes.bin b/.gradle/2.14.1/taskArtifacts/fileHashes.bin
new file mode 100644 (file)
index 0000000..0629446
Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/fileHashes.bin differ
diff --git a/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin b/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin
new file mode 100644 (file)
index 0000000..aeb0dbc
Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/fileSnapshots.bin differ
diff --git a/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin b/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin
new file mode 100644 (file)
index 0000000..0432705
Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin differ
diff --git a/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin b/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin
new file mode 100644 (file)
index 0000000..4d215b8
Binary files /dev/null and b/.gradle/2.14.1/taskArtifacts/taskArtifacts.bin differ
diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
new file mode 100644 (file)
index 0000000..48e85ca
Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser
new file mode 100644 (file)
index 0000000..874991b
Binary files /dev/null and b/.idea/caches/gradle_models.ser differ
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644 (file)
index 0000000..3279b6b
--- /dev/null
@@ -0,0 +1,116 @@
+<component name="ProjectCodeStyleConfiguration">\r
+  <code_scheme name="Project" version="173">\r
+    <codeStyleSettings language="XML">\r
+      <indentOptions>\r
+        <option name="CONTINUATION_INDENT_SIZE" value="4" />\r
+      </indentOptions>\r
+      <arrangement>\r
+        <rules>\r
+          <section>\r
+            <rule>\r
+              <match>\r
+                <AND>\r
+                  <NAME>xmlns:android</NAME>\r
+                  <XML_ATTRIBUTE />\r
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>\r
+                </AND>\r
+              </match>\r
+            </rule>\r
+          </section>\r
+          <section>\r
+            <rule>\r
+              <match>\r
+                <AND>\r
+                  <NAME>xmlns:.*</NAME>\r
+                  <XML_ATTRIBUTE />\r
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>\r
+                </AND>\r
+              </match>\r
+              <order>BY_NAME</order>\r
+            </rule>\r
+          </section>\r
+          <section>\r
+            <rule>\r
+              <match>\r
+                <AND>\r
+                  <NAME>.*:id</NAME>\r
+                  <XML_ATTRIBUTE />\r
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\r
+                </AND>\r
+              </match>\r
+            </rule>\r
+          </section>\r
+          <section>\r
+            <rule>\r
+              <match>\r
+                <AND>\r
+                  <NAME>.*:name</NAME>\r
+                  <XML_ATTRIBUTE />\r
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\r
+                </AND>\r
+              </match>\r
+            </rule>\r
+          </section>\r
+          <section>\r
+            <rule>\r
+              <match>\r
+                <AND>\r
+                  <NAME>name</NAME>\r
+                  <XML_ATTRIBUTE />\r
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>\r
+                </AND>\r
+              </match>\r
+            </rule>\r
+          </section>\r
+          <section>\r
+            <rule>\r
+              <match>\r
+                <AND>\r
+                  <NAME>style</NAME>\r
+                  <XML_ATTRIBUTE />\r
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>\r
+                </AND>\r
+              </match>\r
+            </rule>\r
+          </section>\r
+          <section>\r
+            <rule>\r
+              <match>\r
+                <AND>\r
+                  <NAME>.*</NAME>\r
+                  <XML_ATTRIBUTE />\r
+                  <XML_NAMESPACE>^$</XML_NAMESPACE>\r
+                </AND>\r
+              </match>\r
+              <order>BY_NAME</order>\r
+            </rule>\r
+          </section>\r
+          <section>\r
+            <rule>\r
+              <match>\r
+                <AND>\r
+                  <NAME>.*</NAME>\r
+                  <XML_ATTRIBUTE />\r
+                  <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>\r
+                </AND>\r
+              </match>\r
+              <order>ANDROID_ATTRIBUTE_ORDER</order>\r
+            </rule>\r
+          </section>\r
+          <section>\r
+            <rule>\r
+              <match>\r
+                <AND>\r
+                  <NAME>.*</NAME>\r
+                  <XML_ATTRIBUTE />\r
+                  <XML_NAMESPACE>.*</XML_NAMESPACE>\r
+                </AND>\r
+              </match>\r
+              <order>BY_NAME</order>\r
+            </rule>\r
+          </section>\r
+        </rules>\r
+      </arrangement>\r
+    </codeStyleSettings>\r
+  </code_scheme>\r
+</component>
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644 (file)
index 0000000..2a80f60
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project version="4">\r
+  <component name="GradleSettings">\r
+    <option name="linkedExternalProjectsSettings">\r
+      <GradleProjectSettings>\r
+        <compositeConfiguration>\r
+          <compositeBuild compositeDefinitionSource="SCRIPT" />\r
+        </compositeConfiguration>\r
+        <option name="distributionType" value="DEFAULT_WRAPPED" />\r
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />\r
+        <option name="resolveModulePerSourceSet" value="false" />\r
+        <option name="testRunner" value="PLATFORM" />\r
+      </GradleProjectSettings>\r
+    </option>\r
+  </component>\r
+</project>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_25_1_0_aar.xml b/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_25_1_0_aar.xml
new file mode 100644 (file)
index 0000000..c14248f
--- /dev/null
@@ -0,0 +1,14 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:animated-vector-drawable:25.1.0@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/25.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/25.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/animated-vector-drawable/25.1.0/animated-vector-drawable-25.1.0-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/animated-vector-drawable/25.1.0/animated-vector-drawable-25.1.0-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_appcompat_v7_25_1_0_aar.xml b/.idea/libraries/Gradle__com_android_support_appcompat_v7_25_1_0_aar.xml
new file mode 100644 (file)
index 0000000..51096cc
--- /dev/null
@@ -0,0 +1,17 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:appcompat-v7:25.1.0@aar">\r
+    <ANNOTATIONS>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/25.1.0/annotations.zip!/" />\r
+    </ANNOTATIONS>\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/25.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/25.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/appcompat-v7/25.1.0/appcompat-v7-25.1.0-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/appcompat-v7/25.1.0/appcompat-v7-25.1.0-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_annotations_25_1_0_jar.xml b/.idea/libraries/Gradle__com_android_support_support_annotations_25_1_0_jar.xml
new file mode 100644 (file)
index 0000000..6d92bf1
--- /dev/null
@@ -0,0 +1,16 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:support-annotations:25.1.0@jar">\r
+    <ANNOTATIONS>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-annotations/25.1.0/support-annotations-25.1.0-annotations.zip!/" />\r
+    </ANNOTATIONS>\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-annotations/25.1.0/support-annotations-25.1.0.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-annotations/25.1.0/support-annotations-25.1.0-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-annotations/25.1.0/support-annotations-25.1.0-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_compat_25_1_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_compat_25_1_0_aar.xml
new file mode 100644 (file)
index 0000000..7b18251
--- /dev/null
@@ -0,0 +1,17 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:support-compat:25.1.0@aar">\r
+    <ANNOTATIONS>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-compat/25.1.0/annotations.zip!/" />\r
+    </ANNOTATIONS>\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-compat/25.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-compat/25.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-compat/25.1.0/support-compat-25.1.0-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-compat/25.1.0/support-compat-25.1.0-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_core_ui_25_1_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_core_ui_25_1_0_aar.xml
new file mode 100644 (file)
index 0000000..79c34b0
--- /dev/null
@@ -0,0 +1,17 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:support-core-ui:25.1.0@aar">\r
+    <ANNOTATIONS>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-core-ui/25.1.0/annotations.zip!/" />\r
+    </ANNOTATIONS>\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-core-ui/25.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-core-ui/25.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-core-ui/25.1.0/support-core-ui-25.1.0-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-core-ui/25.1.0/support-core-ui-25.1.0-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_core_utils_25_1_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_core_utils_25_1_0_aar.xml
new file mode 100644 (file)
index 0000000..7af2af9
--- /dev/null
@@ -0,0 +1,17 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:support-core-utils:25.1.0@aar">\r
+    <ANNOTATIONS>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-core-utils/25.1.0/annotations.zip!/" />\r
+    </ANNOTATIONS>\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-core-utils/25.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-core-utils/25.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-core-utils/25.1.0/support-core-utils-25.1.0-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-core-utils/25.1.0/support-core-utils-25.1.0-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_fragment_25_1_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_fragment_25_1_0_aar.xml
new file mode 100644 (file)
index 0000000..d7eb9db
--- /dev/null
@@ -0,0 +1,17 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:support-fragment:25.1.0@aar">\r
+    <ANNOTATIONS>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-fragment/25.1.0/annotations.zip!/" />\r
+    </ANNOTATIONS>\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-fragment/25.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-fragment/25.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-fragment/25.1.0/support-fragment-25.1.0-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-fragment/25.1.0/support-fragment-25.1.0-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_media_compat_25_1_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_media_compat_25_1_0_aar.xml
new file mode 100644 (file)
index 0000000..31c3cdc
--- /dev/null
@@ -0,0 +1,17 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:support-media-compat:25.1.0@aar">\r
+    <ANNOTATIONS>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-media-compat/25.1.0/annotations.zip!/" />\r
+    </ANNOTATIONS>\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-media-compat/25.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-media-compat/25.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-media-compat/25.1.0/support-media-compat-25.1.0-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-media-compat/25.1.0/support-media-compat-25.1.0-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_v4_25_1_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_v4_25_1_0_aar.xml
new file mode 100644 (file)
index 0000000..8dc823e
--- /dev/null
@@ -0,0 +1,10 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:support-v4:25.1.0@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-v4/25.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-v4/25.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC />\r
+    <SOURCES />\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_support_vector_drawable_25_1_0_aar.xml b/.idea/libraries/Gradle__com_android_support_support_vector_drawable_25_1_0_aar.xml
new file mode 100644 (file)
index 0000000..5471c4f
--- /dev/null
@@ -0,0 +1,14 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support:support-vector-drawable:25.1.0@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/25.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/25.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-vector-drawable/25.1.0/support-vector-drawable-25.1.0-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/support-vector-drawable/25.1.0/support-vector-drawable-25.1.0-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_2_2_2_aar.xml b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_2_2_2_aar.xml
new file mode 100644 (file)
index 0000000..dfad6cf
--- /dev/null
@@ -0,0 +1,14 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support.test.espresso:espresso-core:2.2.2@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-core/2.2.2/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-core/2.2.2/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/espresso/espresso-core/2.2.2/espresso-core-2.2.2-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/espresso/espresso-core/2.2.2/espresso-core-2.2.2-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_2_2_2_aar.xml b/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_2_2_2_aar.xml
new file mode 100644 (file)
index 0000000..1ed2abb
--- /dev/null
@@ -0,0 +1,14 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support.test.espresso:espresso-idling-resource:2.2.2@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-idling-resource/2.2.2/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-idling-resource/2.2.2/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/espresso/espresso-idling-resource/2.2.2/espresso-idling-resource-2.2.2-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/espresso/espresso-idling-resource/2.2.2/espresso-idling-resource-2.2.2-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_exposed_instrumentation_api_publish_0_5_aar.xml b/.idea/libraries/Gradle__com_android_support_test_exposed_instrumentation_api_publish_0_5_aar.xml
new file mode 100644 (file)
index 0000000..b36e7fa
--- /dev/null
@@ -0,0 +1,14 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support.test:exposed-instrumentation-api-publish:0.5@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test/exposed-instrumentation-api-publish/0.5/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test/exposed-instrumentation-api-publish/0.5/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/exposed-instrumentation-api-publish/0.5/exposed-instrumentation-api-publish-0.5-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/exposed-instrumentation-api-publish/0.5/exposed-instrumentation-api-publish-0.5-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_rules_0_5_aar.xml b/.idea/libraries/Gradle__com_android_support_test_rules_0_5_aar.xml
new file mode 100644 (file)
index 0000000..45cdf14
--- /dev/null
@@ -0,0 +1,14 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support.test:rules:0.5@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test/rules/0.5/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test/rules/0.5/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/rules/0.5/rules-0.5-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/rules/0.5/rules-0.5-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_android_support_test_runner_0_5_aar.xml b/.idea/libraries/Gradle__com_android_support_test_runner_0_5_aar.xml
new file mode 100644 (file)
index 0000000..9736d90
--- /dev/null
@@ -0,0 +1,14 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.android.support.test:runner:0.5@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test/runner/0.5/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.android.support.test/runner/0.5/res" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/runner/0.5/runner-0.5-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/support/test/runner/0.5/runner-0.5-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_github_ChestnutPlus_TestModules_v1_0_16_aar.xml b/.idea/libraries/Gradle__com_github_ChestnutPlus_TestModules_v1_0_16_aar.xml
new file mode 100644 (file)
index 0000000..b900ffe
--- /dev/null
@@ -0,0 +1,10 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.github.ChestnutPlus:TestModules:v1.0.16@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.github.ChestnutPlus/TestModules/v1.0.16/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.github.ChestnutPlus/TestModules/v1.0.16/res" />\r
+    </CLASSES>\r
+    <JAVADOC />\r
+    <SOURCES />\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1_jar.xml b/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1_jar.xml
new file mode 100644 (file)
index 0000000..8793362
--- /dev/null
@@ -0,0 +1,9 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar">\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.1/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.1.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC />\r
+    <SOURCES />\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_kymjs_rxvolley_rxvolley_1_1_3_aar.xml b/.idea/libraries/Gradle__com_kymjs_rxvolley_rxvolley_1_1_3_aar.xml
new file mode 100644 (file)
index 0000000..993529c
--- /dev/null
@@ -0,0 +1,10 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.kymjs.rxvolley:rxvolley:1.1.3@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.kymjs.rxvolley/rxvolley/1.1.3/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/com.kymjs.rxvolley/rxvolley/1.1.3/res" />\r
+    </CLASSES>\r
+    <JAVADOC />\r
+    <SOURCES />\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1_jar.xml b/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1_jar.xml
new file mode 100644 (file)
index 0000000..f9ba158
--- /dev/null
@@ -0,0 +1,13 @@
+<component name="libraryTable">\r
+  <library name="Gradle: com.squareup:javawriter:2.1.1@jar">\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup/javawriter/2.1.1/67ff45d9ae02e583d0f9b3432a5ebbe05c30c966/javawriter-2.1.1.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup/javawriter/2.1.1/f591a105db78771d0a1e7a277b3747556c528c22/javawriter-2.1.1-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup/javawriter/2.1.1/5b31387d839a5cdaf5b6de3990da01f7f2b963c5/javawriter-2.1.1-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__io_reactivex_rxandroid_1_1_0_aar.xml b/.idea/libraries/Gradle__io_reactivex_rxandroid_1_1_0_aar.xml
new file mode 100644 (file)
index 0000000..9f1b9af
--- /dev/null
@@ -0,0 +1,10 @@
+<component name="libraryTable">\r
+  <library name="Gradle: io.reactivex:rxandroid:1.1.0@aar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/build/intermediates/exploded-aar/io.reactivex/rxandroid/1.1.0/jars/classes.jar!/" />\r
+      <root url="file://$PROJECT_DIR$/app/build/intermediates/exploded-aar/io.reactivex/rxandroid/1.1.0/res" />\r
+    </CLASSES>\r
+    <JAVADOC />\r
+    <SOURCES />\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__io_reactivex_rxjava_1_1_0_jar.xml b/.idea/libraries/Gradle__io_reactivex_rxjava_1_1_0_jar.xml
new file mode 100644 (file)
index 0000000..1346c81
--- /dev/null
@@ -0,0 +1,9 @@
+<component name="libraryTable">\r
+  <library name="Gradle: io.reactivex:rxjava:1.1.0@jar">\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.1.0/748f0546d5c3c27f1aef07270ffea0c45f0c42a4/rxjava-1.1.0.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC />\r
+    <SOURCES />\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_2_jar.xml b/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_2_jar.xml
new file mode 100644 (file)
index 0000000..90eea21
--- /dev/null
@@ -0,0 +1,13 @@
+<component name="libraryTable">\r
+  <library name="Gradle: javax.annotation:javax.annotation-api:1.2@jar">\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.annotation/javax.annotation-api/1.2/479c1e06db31c432330183f5cae684163f186146/javax.annotation-api-1.2.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.annotation/javax.annotation-api/1.2/1064ee6b28b926dfa355f9db146a33d1111a7bf1/javax.annotation-api-1.2-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.annotation/javax.annotation-api/1.2/ad18a02db08eaee697f812e333f692fc51129e4a/javax.annotation-api-1.2-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__javax_inject_javax_inject_1_jar.xml b/.idea/libraries/Gradle__javax_inject_javax_inject_1_jar.xml
new file mode 100644 (file)
index 0000000..746319d
--- /dev/null
@@ -0,0 +1,13 @@
+<component name="libraryTable">\r
+  <library name="Gradle: javax.inject:javax.inject:1@jar">\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/70ec961c25111ed9015d1af77772d96383c2d238/javax.inject-1-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/a00123f261762a7c5e0ec916a2c7c8298d29c400/javax.inject-1-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__junit_junit_4_12_jar.xml b/.idea/libraries/Gradle__junit_junit_4_12_jar.xml
new file mode 100644 (file)
index 0000000..a301fe4
--- /dev/null
@@ -0,0 +1,13 @@
+<component name="libraryTable">\r
+  <library name="Gradle: junit:junit:4.12@jar">\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/941a8be4506c65f0a9001c08812fb7da1e505e21/junit-4.12-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/a6c32b40bf3d76eca54e3c601e5d1470c86fcdfa/junit-4.12-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml b/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml
new file mode 100644 (file)
index 0000000..23922fc
--- /dev/null
@@ -0,0 +1,13 @@
+<component name="libraryTable">\r
+  <library name="Gradle: org.hamcrest:hamcrest-core:1.3@jar">\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/ad09811315f1d4f5756986575b0ea16b99cd686f/hamcrest-core-1.3-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/1dc37250fbc78e23a65a67fbbaf71d2e9cbc3c0b/hamcrest-core-1.3-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml b/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml
new file mode 100644 (file)
index 0000000..a738e54
--- /dev/null
@@ -0,0 +1,13 @@
+<component name="libraryTable">\r
+  <library name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar">\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-integration/1.3/5de0c73fef18917cd85d0ab70bb23818685e4dfd/hamcrest-integration-1.3.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-integration/1.3/cc5884d4138d3376f574f6a3992acceedfc37bea/hamcrest-integration-1.3-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-integration/1.3/ae7787a563e6a1b1f17fd4ac43be3a3c8830cfda/hamcrest-integration-1.3-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml b/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml
new file mode 100644 (file)
index 0000000..40e4b54
--- /dev/null
@@ -0,0 +1,13 @@
+<component name="libraryTable">\r
+  <library name="Gradle: org.hamcrest:hamcrest-library:1.3@jar">\r
+    <CLASSES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-library/1.3/4785a3c21320980282f9f33d0d1264a69040538f/hamcrest-library-1.3.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-library/1.3/4324046c5f99f3dc91b5370899fa3ae65fd137d2/hamcrest-library-1.3-javadoc.jar!/" />\r
+    </JAVADOC>\r
+    <SOURCES>\r
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-library/1.3/47a7ee46628ab7133129cd7cef1e92657bc275e/hamcrest-library-1.3-sources.jar!/" />\r
+    </SOURCES>\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644 (file)
index 0000000..6fd9e2b
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project version="4">\r
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="JDK" project-jdk-type="JavaSDK">\r
+    <output url="file://$PROJECT_DIR$/build/classes" />\r
+  </component>\r
+  <component name="ProjectType">\r
+    <option name="id" value="Android" />\r
+  </component>\r
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644 (file)
index 0000000..b956f76
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project version="4">\r
+  <component name="ProjectModuleManager">\r
+    <modules>\r
+      <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />\r
+      <module fileurl="file://$PROJECT_DIR$/icsupport.iml" filepath="$PROJECT_DIR$/icsupport.iml" />\r
+    </modules>\r
+  </component>\r
+</project>
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644 (file)
index 0000000..9b770a6
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project version="4">\r
+  <component name="RunConfigurationProducerService">\r
+    <option name="ignoredProducers">\r
+      <set>\r
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />\r
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />\r
+        <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />\r
+      </set>\r
+    </option>\r
+  </component>\r
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644 (file)
index 0000000..c8397c9
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project version="4">\r
+  <component name="VcsDirectoryMappings">\r
+    <mapping directory="" vcs="Git" />\r
+  </component>\r
+</project>
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644 (file)
index 0000000..111c116
--- /dev/null
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AndroidLayouts">
+    <shared>
+      <config />
+    </shared>
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="599052e0-1f19-4d79-9d0b-aecda989d96a" name="Default Changelist" comment="" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="DefaultGradleProjectSettings">
+    <option name="testRunner" value="GRADLE" />
+    <option name="delegatedBuild" value="true" />
+  </component>
+  <component name="ExecutionTargetManager" SELECTED_TARGET="860316001000107" />
+  <component name="ExternalProjectsManager">
+    <system id="GRADLE">
+      <state>
+        <projects_view />
+      </state>
+    </system>
+  </component>
+  <component name="FileEditorManager">
+    <leaf>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/src/main/AndroidManifest.xml">
+          <provider editor-type-id="android-manifest" />
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="380">
+              <caret line="71" column="39" lean-forward="true" selection-start-line="71" selection-start-column="39" selection-end-line="71" selection-end-column="39" />
+              <folding>
+                <element signature="e#3053#3071#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/ic/protocol/MainActivity.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state>
+              <caret column="23" selection-start-column="23" selection-end-column="23" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/ic/protocol/RxSocket.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state>
+              <caret column="23" selection-start-column="23" selection-end-column="23" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/app/src/main/AndroidManifest.xml" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/ic/protocol/MainActivity.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/ic/protocol/RxSocket.java" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectConfigurationFiles">
+    <option name="files">
+      <list>
+        <option value="$PROJECT_DIR$/app/app.iml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_animated_vector_drawable_25_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_appcompat_v7_25_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_support_annotations_25_1_0_jar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_support_compat_25_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_support_core_ui_25_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_support_core_utils_25_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_support_fragment_25_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_support_media_compat_25_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_support_v4_25_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_support_vector_drawable_25_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_2_2_2_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_2_2_2_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_test_exposed_instrumentation_api_publish_0_5_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_test_rules_0_5_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_android_support_test_runner_0_5_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_github_ChestnutPlus_TestModules_v1_0_16_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1_jar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_kymjs_rxvolley_rxvolley_1_1_3_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1_jar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__io_reactivex_rxandroid_1_1_0_aar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__io_reactivex_rxjava_1_1_0_jar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__javax_annotation_javax_annotation_api_1_2_jar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__javax_inject_javax_inject_1_jar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__junit_junit_4_12_jar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml" />
+        <option value="$PROJECT_DIR$/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="x" value="-8" />
+    <option name="y" value="-8" />
+    <option name="width" value="964" />
+    <option name="height" value="784" />
+  </component>
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="PackagesPane" />
+      <pane id="AndroidView">
+        <subPane>
+          <expand>
+            <path>
+              <item name="icsupport" type="1abcf292:AndroidViewProjectNode" />
+              <item name="app" type="feadf853:AndroidModuleNode" />
+            </path>
+            <path>
+              <item name="icsupport" type="1abcf292:AndroidViewProjectNode" />
+              <item name="app" type="feadf853:AndroidModuleNode" />
+              <item name="java" type="edd41e36:AndroidSourceTypeNode" />
+            </path>
+            <path>
+              <item name="icsupport" type="1abcf292:AndroidViewProjectNode" />
+              <item name="app" type="feadf853:AndroidModuleNode" />
+              <item name="java" type="edd41e36:AndroidSourceTypeNode" />
+              <item name="protocol" type="cbb59c9e:AndroidPsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+      <pane id="ProjectPane" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="android.sdk.path" value="$USER_HOME$/AppData/Local/Android/Sdk" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="not.eligible.for.single.variant.sync" value="true" />
+    <property name="settings.editor.selected.configurable" value="AndroidSdkUpdater" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager">
+    <configuration default="true" type="AndroidJUnit" factoryName="Android JUnit">
+      <option name="TEST_OBJECT" value="class" />
+      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
+      <method v="2">
+        <option name="Android.Gradle.BeforeRunTask" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="app" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
+      <module name="app" />
+      <option name="DEPLOY" value="true" />
+      <option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
+      <option name="DEPLOY_AS_INSTANT" value="false" />
+      <option name="ARTIFACT_NAME" value="" />
+      <option name="PM_INSTALL_OPTIONS" value="" />
+      <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
+      <option name="ACTIVITY_EXTRA_FLAGS" value="" />
+      <option name="MODE" value="default_activity" />
+      <option name="CLEAR_LOGCAT" value="false" />
+      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
+      <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
+      <option name="FORCE_STOP_RUNNING_APP" value="true" />
+      <option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
+      <option name="USE_LAST_SELECTED_DEVICE" value="false" />
+      <option name="PREFERRED_AVD" value="" />
+      <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
+      <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
+      <option name="DEBUGGER_TYPE" value="Auto" />
+      <Auto>
+        <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
+        <option name="SHOW_STATIC_VARS" value="true" />
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+        <option name="SHOW_OPTIMIZED_WARNING" value="true" />
+      </Auto>
+      <Hybrid>
+        <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
+        <option name="SHOW_STATIC_VARS" value="true" />
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+        <option name="SHOW_OPTIMIZED_WARNING" value="true" />
+      </Hybrid>
+      <Java />
+      <Native>
+        <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
+        <option name="SHOW_STATIC_VARS" value="true" />
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+        <option name="SHOW_OPTIMIZED_WARNING" value="true" />
+      </Native>
+      <Profilers>
+        <option name="ADVANCED_PROFILING_ENABLED" value="false" />
+        <option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
+        <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" />
+      </Profilers>
+      <option name="DEEP_LINK" value="" />
+      <option name="ACTIVITY_CLASS" value="" />
+      <method v="2">
+        <option name="Android.Gradle.BeforeRunTask" enabled="true" />
+      </method>
+    </configuration>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="599052e0-1f19-4d79-9d0b-aecda989d96a" name="Default Changelist" comment="" />
+      <created>1577534766048</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1577534766048</updated>
+    </task>
+    <servers />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-8" y="-8" width="1858" height="1096" extended-state="6" />
+    <editor active="true" />
+    <layout>
+      <window_info active="true" content_ui="combo" id="Project" visible="true" weight="0.3298109" />
+      <window_info id="Structure" side_tool="true" />
+      <window_info id="Build Variants" side_tool="true" />
+      <window_info id="Image Layers" />
+      <window_info id="Designer" />
+      <window_info id="Resources Explorer" />
+      <window_info id="Capture Tool" />
+      <window_info id="Favorites" side_tool="true" />
+      <window_info id="Captures" order="0" side_tool="true" weight="0.25" />
+      <window_info anchor="bottom" id="Logcat" />
+      <window_info anchor="bottom" id="Version Control" />
+      <window_info anchor="bottom" id="TODO" />
+      <window_info anchor="bottom" id="Android Profiler" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Terminal" />
+      <window_info anchor="bottom" id="Event Log" side_tool="true" />
+      <window_info anchor="bottom" id="Build" visible="true" weight="0.32952183" />
+      <window_info anchor="right" id="Device File Explorer" side_tool="true" />
+      <window_info anchor="right" id="Capture Analysis" />
+      <window_info anchor="right" id="Gradle" />
+      <window_info anchor="right" id="Theme Preview" />
+      <window_info anchor="right" id="Palette&#9;" />
+    </layout>
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/app/src/main/AndroidManifest.xml">
+      <provider editor-type-id="android-manifest" />
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="380">
+          <caret line="71" column="39" lean-forward="true" selection-start-line="71" selection-start-column="39" selection-end-line="71" selection-end-column="39" />
+          <folding>
+            <element signature="e#3053#3071#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/ic/protocol/MainActivity.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state>
+          <caret column="23" selection-start-column="23" selection-end-column="23" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/ic/protocol/RxSocket.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state>
+          <caret column="23" selection-start-column="23" selection-end-column="23" />
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ProjectJDKs.UI">
+        <settings>
+          <last-edited>1.8</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644 (file)
index 0000000..796b96d
--- /dev/null
@@ -0,0 +1 @@
+/build
diff --git a/app/app.iml b/app/app.iml
new file mode 100644 (file)
index 0000000..2c8e50d
--- /dev/null
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">\r
+  <component name="FacetManager">\r
+    <facet type="android-gradle" name="Android-Gradle">\r
+      <configuration>\r
+        <option name="GRADLE_PROJECT_PATH" value=":app" />\r
+        <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="2.2.2" />\r
+        <option name="LAST_KNOWN_AGP_VERSION" value="2.2.2" />\r
+      </configuration>\r
+    </facet>\r
+    <facet type="android" name="Android">\r
+      <configuration>\r
+        <option name="SELECTED_BUILD_VARIANT" value="debug" />\r
+        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />\r
+        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />\r
+        <afterSyncTasks>\r
+          <task>generateDebugSources</task>\r
+        </afterSyncTasks>\r
+        <option name="ALLOW_USER_CONFIGURATION" value="false" />\r
+        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />\r
+        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />\r
+        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" />\r
+        <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />\r
+        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />\r
+      </configuration>\r
+    </facet>\r
+  </component>\r
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">\r
+    <output url="file://$MODULE_DIR$/build/retrolambda/debug" />\r
+    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />\r
+    <exclude-output />\r
+    <content url="file://$MODULE_DIR$">\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />\r
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-core/2.2.2/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test.espresso/espresso-idling-resource/2.2.2/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test/exposed-instrumentation-api-publish/0.5/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test/rules/0.5/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support.test/runner/0.5/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/25.1.0/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/25.1.0/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-compat/25.1.0/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-core-ui/25.1.0/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-core-utils/25.1.0/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-fragment/25.1.0/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-media-compat/25.1.0/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/25.1.0/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/25.1.0/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.github.ChestnutPlus/TestModules/v1.0.16/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.kymjs.rxvolley/rxvolley/1.1.3/jars" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/io.reactivex/rxandroid/1.1.0/jars" />\r
+    </content>\r
+    <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />\r
+    <orderEntry type="sourceFolder" forTests="false" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2@jar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core:2.2.2@aar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: com.android.support.test:rules:0.5@aar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: com.android.support.test:runner:0.5@aar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish:0.5@aar" level="project" />\r
+    <orderEntry type="library" exported="" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:2.2.2@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-annotations:25.1.0@jar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: io.reactivex:rxjava:1.1.0@jar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:appcompat-v7:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-v4:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-compat:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-media-compat:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-core-utils:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-core-ui:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-fragment:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:support-vector-drawable:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.android.support:animated-vector-drawable:25.1.0@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.github.ChestnutPlus:TestModules:v1.0.16@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: com.kymjs.rxvolley:rxvolley:1.1.3@aar" level="project" />\r
+    <orderEntry type="library" exported="" name="Gradle: io.reactivex:rxandroid:1.1.0@aar" level="project" />\r
+  </component>\r
+</module>
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644 (file)
index 0000000..ab03feb
--- /dev/null
@@ -0,0 +1,35 @@
+apply plugin: 'com.android.application'
+apply plugin: 'me.tatarka.retrolambda'
+
+android {
+    compileSdkVersion 25
+    buildToolsVersion "25.0.1"
+    defaultConfig {
+        applicationId "com.hy.RxSocketDemo"
+        minSdkVersion 19
+        targetSdkVersion 25
+        versionCode 1
+        versionName "1.0"
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
+        exclude group: 'com.android.support', module: 'support-annotations'
+    })
+    compile 'com.android.support:appcompat-v7:25.1.0'
+    compile 'com.github.ChestnutPlus:TestModules:v1.0.16'
+    testCompile 'junit:junit:4.12'
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644 (file)
index 0000000..ce6491d
--- /dev/null
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in D:\C\IT\android_studio\some\SDK/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644 (file)
index 0000000..e2b0706
--- /dev/null
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.ic.protocol">
+    <!--按用户发送消息-->
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
+
+    <!--允许程序读取或写入系统设置 -->
+    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
+
+    <!-- 联网的权限 -->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.INTERNET"/>
+
+    <!--打电话权限-->
+    <uses-permission android:name="android.permission.CALL_PHONE"/>
+
+    <!--监听电话状态权限-->
+    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
+    <uses-permission android:name="android.permission.READ_CALL_LOG"/>
+
+    <!--联系人-->
+    <uses-permission android:name="android.permission.READ_CONTACTS"/>
+    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
+
+    <!--灭屏-->
+    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+
+    <!--<user-permission android:name="android.permission.DEVICE_POWER"/>-->
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+
+    <!--删除进程-->
+    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
+
+    <!--监听FOTA消息-->
+    <permission android:name="com.adups.fota.permission"/>
+
+    <!--振动-->
+    <uses-permission android:name="android.permission.VIBRATE"/>
+
+    <!--高德定位SDK需要的权限 BEGIN-->
+    <!--用于进行网络定位-->
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+    <!--用于访问GPS定位-->
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+    <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
+    <!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> -->
+    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
+    <!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> -->
+    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
+    <!--用于访问网络,网络定位需要上网-->
+    <!-- <uses-permission android:name="android.permission.INTERNET"></uses-permission> -->
+    <!--用于读取手机当前的状态-->
+    <!-- <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> -->
+    <!--用于写入缓存数据到扩展存储卡-->
+    <!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>-->
+    <!--用于申请调用A-GPS模块-->
+    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
+    <!--用于申请获取蓝牙信息进行室内定位-->
+    <uses-permission android:name="android.permission.BLUETOOTH"/>
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
+    <!--高德定位SDK需要的权限 END-->
+    <application
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+        <activity android:name=".MainActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/ic/protocol/MainActivity.java b/app/src/main/java/com/ic/protocol/MainActivity.java
new file mode 100644 (file)
index 0000000..2c86eff
--- /dev/null
@@ -0,0 +1,144 @@
+package com.ic.protocol;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.Toast;
+
+import java.net.InetAddress;
+import java.nio.ByteBuffer;
+
+import chestnut.ui.Toastc;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+public class MainActivity extends AppCompatActivity {
+
+    private Toastc toast = null;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        Button btnConnect = (Button) findViewById(R.id.btnConnect);
+        Button btnDisConnect = (Button) findViewById(R.id.btnDisConnect);
+        Button btnWrite = (Button) findViewById(R.id.btnWrite);
+
+        toast = new Toastc(this, Toast.LENGTH_SHORT);
+
+        btnConnect.setOnClickListener(clickListener);
+        btnDisConnect.setOnClickListener(clickListener);
+        btnWrite.setOnClickListener(clickListener);
+
+        //监听Socket的收包
+        RxSocket.getInstance().read()
+                .subscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(
+                        bytes -> {
+                            //这里,应该去处理这个消息
+                            LogToast("get Msg :"+new String(bytes)+" (size)" + bytes.length);
+
+                        },
+                        throwable -> {
+
+                        },
+                        ()->{
+
+                        }
+                );
+
+        //监听Socket的连接状态
+        RxSocket.getInstance().socketStatusListener()
+                .subscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(socketStatus -> {
+                    LogToast("socketStatus:" + socketStatus.name());
+                });
+    }
+    /**
+     * 解析域名获取IP数组
+     * @param host
+     * @return
+     */
+    public String parseHostGetIPAddress(String host) {
+        StringBuilder serverip=new StringBuilder("");
+        try {
+            InetAddress[] inetAddressArr = InetAddress.getAllByName(host);
+            if (inetAddressArr != null && inetAddressArr.length > 0) {
+                String[] ipAddressArr = new String[inetAddressArr.length];
+
+                for (int i = 0; i < inetAddressArr.length; i++) {
+                    serverip.append( inetAddressArr[i].getHostAddress());;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        return serverip.toString();
+    }
+    private View.OnClickListener clickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View view) {
+            switch (view.getId()) {
+                case R.id.btnConnect:
+                    //进行连接Socket:这里使用的是,在本地上开启了一个服务器。
+                    String serverip= parseHostGetIPAddress("watch.jiai.pro");
+                    RxSocket.getInstance().connectRx(serverip==null?"118.178.155.223":serverip,8090)
+                            .subscribe(
+                                    aBoolean -> {
+                                        LogToast("RxSocket Connect "+aBoolean);
+                                    },
+                                    throwable -> {
+                                        LogToast("RxSocket Connect Error : "+throwable.getMessage());
+                                    },
+                                    () -> {
+
+                                    }
+                            );
+                    break;
+                case R.id.btnDisConnect:
+                    //断开连接
+                    RxSocket.getInstance().disConnect()
+                            .subscribe(
+                                    aBoolean -> {
+                                        LogToast("RxSocket DisConnect "+aBoolean);
+                                    },
+                                    throwable -> {
+                                        LogToast("RxSocket DisConnect Error : "+throwable.getMessage());
+                                    },
+                                    () -> {
+
+                                    }
+                            );
+                    break;
+                case R.id.btnWrite:
+                    //向RxSocket写数据
+                    //示例数据:IWAP00867155030001063#
+                    byte[] test = new String("IWAP00867155030001063#").getBytes();
+                    ByteBuffer byteBuffer = ByteBuffer.wrap(test);
+                    RxSocket.getInstance().write(byteBuffer)
+                            .subscribe(
+                                    aBoolean -> {
+                                        LogToast("RxSocket write "+aBoolean);
+                                    },
+                                    throwable -> {
+                                        LogToast("RxSocket write Error : "+throwable.getMessage());
+                                    },
+                                    () -> {
+
+                                    }
+                            );
+                    break;
+            }
+        }
+    };
+
+    private void LogToast(String msg) {
+        if (msg!=null && msg.length()>0 && toast!=null)
+            toast.setText(msg).show();
+    }
+}
diff --git a/app/src/main/java/com/ic/protocol/RxSocket.java b/app/src/main/java/com/ic/protocol/RxSocket.java
new file mode 100644 (file)
index 0000000..f1623e9
--- /dev/null
@@ -0,0 +1,373 @@
+package com.ic.protocol;
+
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
+import java.nio.channels.SocketChannel;
+import java.util.Iterator;
+import java.util.concurrent.TimeUnit;
+
+import chestnut.utils.LogUtils;
+import rx.Observable;
+import rx.Subscriber;
+import rx.schedulers.Schedulers;
+import rx.subjects.PublishSubject;
+import rx.subjects.SerializedSubject;
+import rx.subjects.Subject;
+
+/**
+ * <pre>
+ *     author: 栗子酱
+ *     blog  : http://www.jianshu.com/u/a0206b5f4526
+ *     time  : 2017年1月30日17:00:21
+ *     desc  :  RxSocket
+ *     thanks To:
+ *     dependent on:
+ *     update log:
+ *          1.  2016年12月20日16:35:31     修复Socket被远程关闭后,不断接收关闭消息的bug     by 栗子酱
+ *          2.  2017年1月28日22:38:32      修复:Write中,返回值为 0 的时候,是正常的,只是写了 长度 为0的包。     by  栗子酱
+ *          3.  2017年1月29日13:52:35      增加:disConnect()
+ * </pre>
+ */
+
+public class RxSocket {
+
+    /*  常量
+    * */
+    private String TAG = "RxSocket";
+    private boolean OpenLog = false;
+    private long WRITE_TIME_OUT = 3000;
+    private long CONNECT_TIME_OUT = 3000;
+
+    /*  单例
+    * */
+    private Subject<Object,byte[]> readSubject;
+    private Subject<Object,SocketStatus> connectStatus;
+    private static volatile RxSocket defaultInstance;
+    private RxSocket() {
+        readSubject = new SerializedSubject(PublishSubject.create());
+        connectStatus = new SerializedSubject(PublishSubject.create());
+    }
+    public static RxSocket getInstance() {
+        RxSocket rxSocket = defaultInstance;
+        if (defaultInstance == null) {
+            synchronized (chestnut.RxSocket.RxSocket.class) {
+                rxSocket = defaultInstance;
+                if (defaultInstance == null) {
+                    rxSocket = new RxSocket();
+                    defaultInstance = rxSocket;
+                }
+            }
+        }
+        return rxSocket;
+    }
+
+    /*  变量
+    * */
+    private SocketStatus socketStatus = SocketStatus.DIS_CONNECT;
+    private Selector selector = null;
+    private SocketChannel socketChannel = null;
+    private SelectionKey selectionKey = null;
+    private ReadThread readThread = null;
+    private boolean isReadThreadAlive = true;
+    private SocketReconnectCallback socketReconnectCallback = null;
+
+    /*  方法
+    * */
+    /**
+     * 监听Socket的状态
+     * @return Rx SocketStatus 状态
+     */
+    public Observable<SocketStatus> socketStatusListener () {
+        return connectStatus;
+    }
+
+    /**
+     * 建立Socket连接,只是尝试建立一次
+     * @param ip    IP or 域名
+     * @param port  端口
+     * @return  Rx true or false
+     */
+    public Observable<Boolean> connectRx(String ip, int port) {
+        return Observable
+                .create(new Observable.OnSubscribe<Boolean>() {
+                    @Override
+                    public void call(Subscriber<? super Boolean> subscriber) {
+
+                        LogUtils.i(OpenLog,TAG,"connectRx:"+"status:"+socketStatus.name());
+
+                        //正在连接
+                        if (socketStatus == SocketStatus.CONNECTING) {
+                            subscriber.onNext(false);
+                            subscriber.onCompleted();
+                            return;
+                        }
+
+                        //未连接 | 已经连接,关闭Socket
+                        socketStatus = SocketStatus.DIS_CONNECT;
+                        isReadThreadAlive = false;
+                        readThread = null;
+                        if (selector!=null)
+                            try {
+                                selector.close();
+                            } catch (Exception e) {
+                                LogUtils.i(OpenLog,TAG,"selector.close");
+                            }
+                        if (selectionKey!=null)
+                            try {
+                                selectionKey.cancel();
+                            } catch (Exception e) {
+                                LogUtils.i(OpenLog,TAG,"selectionKey.cancel");
+                            }
+                        if (socketChannel!=null)
+                            try {
+                                socketChannel.close();
+                            } catch (Exception e) {
+                                LogUtils.i(OpenLog,TAG,"socketChannel.close");
+                            }
+
+                        //重启Socket
+                        isReadThreadAlive = true;
+                        readThread = new ReadThread(ip,port);
+                        readThread.start();
+                        socketReconnectCallback = new SocketReconnectCallback() {
+                            @Override
+                            public void onSuccess() {
+                                LogUtils.i(OpenLog,TAG,"connectRx:"+"CONNECTED");
+                                socketStatus = SocketStatus.CONNECTED;
+                                subscriber.onNext(true);
+                                subscriber.onCompleted();
+                            }
+
+                            @Override
+                            public void onFail(String msg) {
+                                LogUtils.i(OpenLog,TAG,"connectRx:"+msg);
+                                subscriber.onNext(false);
+                                subscriber.onCompleted();
+                            }
+                        };
+                    }
+                })
+                .subscribeOn(Schedulers.newThread())
+                .map(aBoolean -> {
+                    socketReconnectCallback = null;
+                    return aBoolean;
+                })
+                .timeout(CONNECT_TIME_OUT, TimeUnit.MILLISECONDS, Observable.just(false));
+    }
+
+    /**
+     * 断开当前的Socket
+     *  还能再继续连接
+     * @return Rx true or false
+     */
+    public Observable<Boolean> disConnect() {
+        return Observable.create(new Observable.OnSubscribe<Boolean>() {
+            @Override
+            public void call(Subscriber<? super Boolean> subscriber) {
+                try {
+                    if (socketStatus == SocketStatus.DIS_CONNECT) {
+                        subscriber.onNext(true);
+                        subscriber.onCompleted();
+                    }
+                    else {
+                        socketStatus = SocketStatus.DIS_CONNECT;
+                        isReadThreadAlive = false;
+                        readThread = null;
+                        if (selector!=null)
+                            try {
+                                selector.close();
+                            } catch (Exception e) {
+                                LogUtils.i(OpenLog,TAG,"selector.close");
+                            }
+                        if (selectionKey!=null)
+                            try {
+                                selectionKey.cancel();
+                            } catch (Exception e) {
+                                LogUtils.i(OpenLog,TAG,"selectionKey.cancel");
+                            }
+                        if (socketChannel!=null)
+                            try {
+                                socketChannel.close();
+                            } catch (Exception e) {
+                                LogUtils.i(OpenLog,TAG,"socketChannel.close");
+                            }
+                        subscriber.onNext(true);
+                        subscriber.onCompleted();
+                    }
+                } catch (Exception e) {
+                    subscriber.onNext(false);
+                    subscriber.onCompleted();
+                }
+            }
+        });
+    }
+
+    /**
+     * 读取Socket的消息
+     * @return  Rx error 或者 有数据
+     */
+    public Observable<byte[]> read() {
+        return readSubject;
+    }
+
+    /**
+     * 向Socket写消息
+     * @param buffer    数据包
+     * @return  Rx true or false
+     */
+    public Observable<Boolean> write(ByteBuffer buffer) {
+        return Observable
+                .create(new Observable.OnSubscribe<Boolean>() {
+                    @Override
+                    public void call(Subscriber<? super Boolean> subscriber) {
+                        if (socketStatus != SocketStatus.CONNECTED) {
+                            LogUtils.i(OpenLog, TAG, "write." + "SocketStatus.DISCONNECTED");
+                            subscriber.onNext(false);
+                            subscriber.onCompleted();
+                        }
+                        else {
+                            if (socketChannel!=null && socketChannel.isConnected()) {
+                                try {
+                                    int result = socketChannel.write(buffer);
+                                    if (result<0) {
+                                        LogUtils.i(OpenLog, TAG, "write." + "发送出错");
+                                        subscriber.onNext(false);
+                                        subscriber.onCompleted();
+                                    }
+                                    else {
+                                        LogUtils.i(OpenLog, TAG, "write." + "success!");
+                                        subscriber.onNext(true);
+                                        subscriber.onCompleted();
+                                    }
+                                } catch (Exception e) {
+                                    LogUtils.i(OpenLog,TAG,"write."+e.getMessage());
+                                    subscriber.onNext(false);
+                                    subscriber.onCompleted();
+                                }
+                            }
+                            else {
+                                LogUtils.i(OpenLog,TAG,"write."+"close");
+                                subscriber.onNext(false);
+                                subscriber.onCompleted();
+                            }
+                        }
+                    }
+                })
+                .subscribeOn(Schedulers.newThread())
+                .timeout(WRITE_TIME_OUT, TimeUnit.MILLISECONDS, Observable.just(false));
+    }
+
+    /**
+     * 获取Socket的链接状态
+     * @return  状态
+     */
+    public SocketStatus getSocketStatus() {
+        return socketStatus;
+    }
+
+    /*  类 && 枚举 && 接口
+        * */
+    private class ReadThread extends Thread {
+        private String ip;
+        private int port;
+        ReadThread(String ip, int port) {
+            this.ip = ip;
+            this.port = port;
+        }
+        @Override
+        public void run() {
+            LogUtils.i(OpenLog,TAG,"ReadThread:"+"start");
+            while (isReadThreadAlive) {
+                //连接
+                if (socketStatus == SocketStatus.DIS_CONNECT) {
+                    try {
+                        if (selectionKey != null) selectionKey.cancel();
+                        socketChannel = SocketChannel.open();
+                        socketChannel.configureBlocking(false);
+                        selector = Selector.open();
+                        socketChannel.connect(new InetSocketAddress(ip, port));
+                        selectionKey = socketChannel.register(selector, SelectionKey.OP_CONNECT);
+                        socketStatus = SocketStatus.CONNECTING;
+                        connectStatus.onNext(SocketStatus.CONNECTING);
+                    } catch (Exception e) {
+                        isReadThreadAlive = false;
+                        socketStatus = SocketStatus.DIS_CONNECT;
+                        connectStatus.onNext(SocketStatus.DIS_CONNECT);
+                        LogUtils.e(OpenLog, TAG, "ReadThread:init:" + e.getMessage());
+                        if (socketReconnectCallback!=null)
+                            socketReconnectCallback.onFail("SocketConnectFail1");
+                    }
+                }
+                //读取
+                else if (socketStatus == SocketStatus.CONNECTING || socketStatus  == SocketStatus.CONNECTED) {
+                    try {
+                        selector.select();
+                        Iterator<SelectionKey> it = selector.selectedKeys().iterator();
+                        while (it.hasNext()) {
+                            SelectionKey key = it.next();
+                            if (key.isConnectable()) {
+                                if (socketChannel.isConnectionPending()) {
+                                    try {
+                                        socketChannel.finishConnect();
+                                        socketStatus = SocketStatus.CONNECTED;
+                                        connectStatus.onNext(SocketStatus.CONNECTED);
+                                        socketChannel.configureBlocking(false);
+                                        socketChannel.register(selector, SelectionKey.OP_READ);
+                                        if (socketReconnectCallback!=null)
+                                            socketReconnectCallback.onSuccess();
+                                    } catch (Exception e) {
+                                        isReadThreadAlive = false;
+                                        socketStatus = SocketStatus.DIS_CONNECT;
+                                        connectStatus.onNext(SocketStatus.DIS_CONNECT);
+                                        LogUtils.e(OpenLog, TAG, "ReadThread:finish:" + e.getMessage());
+                                        if (socketReconnectCallback!=null)
+                                            socketReconnectCallback.onFail("SocketConnectFail2");
+                                    }
+                                }
+                            } else if (key.isReadable()) {
+                                ByteBuffer buf = ByteBuffer.allocate(10000);
+                                int length = socketChannel.read(buf);
+                                if (length <= 0) {
+                                    LogUtils.e(OpenLog, TAG, "服务器主动断开链接!");
+                                    isReadThreadAlive = false;
+                                    socketStatus = SocketStatus.DIS_CONNECT;
+                                    connectStatus.onNext(SocketStatus.DIS_CONNECT);
+                                    if (socketReconnectCallback!=null)
+                                        socketReconnectCallback.onFail("SocketConnectFail3");
+                                } else {
+                                    LogUtils.i(OpenLog, TAG, "readSubject:msg!"+ "length:" + length);
+                                    byte[] bytes = new byte[length];
+                                    for (int i = 0; i < length; i++) {
+                                        bytes[i] = buf.get(i);
+                                    }
+                                    readSubject.onNext(bytes);
+                                }
+                            }
+                        }
+                        it.remove();
+                    } catch (Exception e) {
+                        isReadThreadAlive = false;
+                        socketStatus = SocketStatus.DIS_CONNECT;
+                        connectStatus.onNext(SocketStatus.DIS_CONNECT);
+                        LogUtils.e(OpenLog, TAG, "ReadThread:read:" + e.getMessage());
+                        if (socketReconnectCallback!=null)
+                            socketReconnectCallback.onFail("SocketConnectFail4");
+                    }
+                }
+            }
+        }
+    }
+
+    public enum SocketStatus {
+        DIS_CONNECT,
+        CONNECTING,
+        CONNECTED,
+    }
+
+    private interface SocketReconnectCallback {
+        void onSuccess();
+        void onFail(String msg);
+    }
+}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644 (file)
index 0000000..b6352a8
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/activity_main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context="com.hy.RxSocketDemo.MainActivity">
+
+    <Button
+        android:id="@+id/btnConnect"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentTop="true"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="5dp"
+        android:text="connect" />
+
+    <Button
+        android:id="@+id/btnDisConnect"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/btnConnect"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="5dp"
+        android:text="disConnect" />
+
+    <Button
+        android:id="@+id/btnWrite"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/btnDisConnect"
+        android:layout_alignEnd="@+id/btnConnect"
+        android:layout_marginTop="5dp"
+        android:text="write" />
+</RelativeLayout>
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644 (file)
index 0000000..cde69bc
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644 (file)
index 0000000..c133a0c
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644 (file)
index 0000000..bfa42f0
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644 (file)
index 0000000..324e72c
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644 (file)
index 0000000..aee44e1
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml
new file mode 100644 (file)
index 0000000..63fc816
--- /dev/null
@@ -0,0 +1,6 @@
+<resources>
+    <!-- Example customization of dimensions originally defined in res/values/dimens.xml
+         (such as screen margins) for screens with more than 820dp of available width. This
+         would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
+    <dimen name="activity_horizontal_margin">64dp</dimen>
+</resources>
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644 (file)
index 0000000..3ab3e9c
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
+</resources>
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644 (file)
index 0000000..47c8224
--- /dev/null
@@ -0,0 +1,5 @@
+<resources>
+    <!-- Default screen margins, per the Android Design guidelines. -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644 (file)
index 0000000..28b9094
--- /dev/null
@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">RxSocketDemo</string>
+</resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644 (file)
index 0000000..5885930
--- /dev/null
@@ -0,0 +1,11 @@
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+    </style>
+
+</resources>
diff --git a/build.gradle b/build.gradle
new file mode 100644 (file)
index 0000000..4c08c7e
--- /dev/null
@@ -0,0 +1,25 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+    repositories {
+        jcenter()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:2.2.2'
+        classpath 'me.tatarka:gradle-retrolambda:3.2.3'
+
+        // NOTE: Do not place your application dependencies here; they belong
+        // in the individual module build.gradle files
+    }
+}
+
+allprojects {
+    repositories {
+        jcenter()
+        maven { url 'https://jitpack.io' }
+    }
+}
+
+task clean(type: Delete) {
+    delete rootProject.buildDir
+}
diff --git a/build/intermediates/dex-cache/cache.xml b/build/intermediates/dex-cache/cache.xml
new file mode 100644 (file)
index 0000000..32e71e2
--- /dev/null
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="utf-8"?>
+<items version="2" >\r
+\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.android.support\support-v4\25.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="d7c42c80f6509b9ea4db28ca7859ffae08ec5741">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.android.support-support-v4-25.1.0_723383f83fd906cfd9b83236b571b6d95c28000b.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.github.ChestnutPlus\TestModules\v1.0.16\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="a548f486d82c9a3beef99c3744fd930246bacad2">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.github.ChestnutPlus-TestModules-v1.0.16_b080fa082a5dfe9824bf1b17c3df84224fc81879.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.android.support\support-vector-drawable\25.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="e79aa3d9a16f8c9f16377c0608de70a8f31e5d80">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.android.support-support-vector-drawable-25.1.0_b5898bb874d0f07dd57a9bb664d2f42a2f2a2fc7.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="C:\Users\incar\AppData\Local\Android\Sdk\extras\android\m2repository\com\android\support\support-annotations\25.1.0\support-annotations-25.1.0.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="64cb6b229a8bdfd907bc8dd46839a0053e4c018d">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\support-annotations-25.1.0_ecafc89e44c556aa1cd67dd572f247bb925e6c22.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\io.reactivex\rxandroid\1.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="d4c4b83de2f6412072d2a29b1b7a5b03edaad5ff">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\io.reactivex-rxandroid-1.1.0_9e337f3a966a8dd86cbc983c7a7ad55c2464704a.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.android.support\animated-vector-drawable\25.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="6fb6ac3e8d3b9013819920d9ea11f3803c4c0033">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.android.support-animated-vector-drawable-25.1.0_de9b82643f2a32e5a0cef8576afed6b9a1d2714e.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.android.support\support-fragment\25.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="2a53c4f3518116b8c6aee0e477233f0f7da8616f">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.android.support-support-fragment-25.1.0_3c1e42d8273756e7c134e64171745667d75f388b.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.android.support\support-core-utils\25.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="0a0ef86b7fa568a52bf6214a0326ca1f1d618da7">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.android.support-support-core-utils-25.1.0_dc6b86f6e0540cfbfa05de008bf4f8e486c69683.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="C:\Users\incar\.gradle\caches\modules-2\files-2.1\io.reactivex\rxjava\1.1.0\748f0546d5c3c27f1aef07270ffea0c45f0c42a4\rxjava-1.1.0.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="748f0546d5c3c27f1aef07270ffea0c45f0c42a4">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\rxjava-1.1.0_b1aa8ce9aaf0136c6e3b28d939602031edcc709f.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\25.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="1630658fbc2d222b988603c27b4a4249586fbfe7">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.android.support-appcompat-v7-25.1.0_1eb8a672705bfd1c2d2ea9a629c514ac891e9a0b.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.android.support\support-media-compat\25.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="f02263e35e52668dd17b73bf961437e3d562b35f">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.android.support-support-media-compat-25.1.0_92fefcc608fa844e2faae4c6fce10666746717f4.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.kymjs.rxvolley\rxvolley\1.1.3\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="056d8f89eac2bb663b00cbf55b0f71ed7e1343a7">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.kymjs.rxvolley-rxvolley-1.1.3_213a45f9664871495712a1909669c98adb7ceaa0.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.android.support\support-compat\25.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="ca3c7aa31e2726a400a6e552b93cb9f63c9a1e6d">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.android.support-support-compat-25.1.0_c7a7f7c6ef781cd0fcef4a8f000eea1671657ec9.jar" />\r
+    </item>\r
+    <item\r
+        is-multidex="false"\r
+        jar="D:\workspace\icsupport\app\build\intermediates\exploded-aar\com.android.support\support-core-ui\25.1.0\jars\classes.jar"\r
+        jumboMode="false"\r
+        optimize="true"\r
+        revision="25.0.1"\r
+        sha1="aee64634871d88a419d59eb743c1258a60f19700">\r
+        <dex dex="D:\workspace\icsupport\app\build\intermediates\pre-dexed\debug\com.android.support-support-core-ui-25.1.0_c0afe71c2d639e60210566510b431710e9cffb0b.jar" />\r
+    </item>\r
+\r
+</items>\r
diff --git a/gradle.properties b/gradle.properties
new file mode 100644 (file)
index 0000000..aac7c9b
--- /dev/null
@@ -0,0 +1,17 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644 (file)
index 0000000..13372ae
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644 (file)
index 0000000..04e285f
--- /dev/null
@@ -0,0 +1,6 @@
+#Mon Dec 28 10:00:20 PST 2015
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/gradlew b/gradlew
new file mode 100644 (file)
index 0000000..9d82f78
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,160 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+esac
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644 (file)
index 0000000..8a0b282
--- /dev/null
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/icsupport.iml b/icsupport.iml
new file mode 100644 (file)
index 0000000..0492c5c
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<module external.linked.project.id="icsupport" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">\r
+  <component name="FacetManager">\r
+    <facet type="java-gradle" name="Java-Gradle">\r
+      <configuration>\r
+        <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />\r
+        <option name="BUILDABLE" value="false" />\r
+      </configuration>\r
+    </facet>\r
+  </component>\r
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="true">\r
+    <exclude-output />\r
+    <content url="file://$MODULE_DIR$">\r
+      <excludeFolder url="file://$MODULE_DIR$/.gradle" />\r
+      <excludeFolder url="file://$MODULE_DIR$/build" />\r
+    </content>\r
+    <orderEntry type="jdk" jdkName="JDK" jdkType="JavaSDK" />\r
+    <orderEntry type="sourceFolder" forTests="false" />\r
+  </component>\r
+</module>
\ No newline at end of file
diff --git a/local.properties b/local.properties
new file mode 100644 (file)
index 0000000..3cf5e36
--- /dev/null
@@ -0,0 +1,8 @@
+## This file must *NOT* be checked into Version Control Systems,\r
+# as it contains information specific to your local configuration.\r
+#\r
+# Location of the SDK. This is only used by Gradle.\r
+# For customization when using a Version Control System, please read the\r
+# header note.\r
+#Sat Dec 28 19:37:48 CST 2019\r
+sdk.dir=C\:\\Users\\incar\\AppData\\Local\\Android\\Sdk\r
diff --git a/settings.gradle b/settings.gradle
new file mode 100644 (file)
index 0000000..e7b4def
--- /dev/null
@@ -0,0 +1 @@
+include ':app'