--- /dev/null
+#Sat Dec 28 20:06:16 CST 2019\r
--- /dev/null
+<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
--- /dev/null
+<?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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<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
--- /dev/null
+<?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
--- /dev/null
+<?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
--- /dev/null
+<?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
--- /dev/null
+<?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
--- /dev/null
+<?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	" />
+ </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
--- /dev/null
+<?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
--- /dev/null
+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'
+}
--- /dev/null
+# 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 *;
+#}
--- /dev/null
+<?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
--- /dev/null
+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();
+ }
+}
--- /dev/null
+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);
+ }
+}
--- /dev/null
+<?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>
--- /dev/null
+<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>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="colorPrimary">#3F51B5</color>
+ <color name="colorPrimaryDark">#303F9F</color>
+ <color name="colorAccent">#FF4081</color>
+</resources>
--- /dev/null
+<resources>
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+</resources>
--- /dev/null
+<resources>
+ <string name="app_name">RxSocketDemo</string>
+</resources>
--- /dev/null
+<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>
--- /dev/null
+// 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
+}
--- /dev/null
+<?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
--- /dev/null
+# 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
--- /dev/null
+#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
--- /dev/null
+#!/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 "$@"
--- /dev/null
+@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
--- /dev/null
+<?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
--- /dev/null
+## 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
--- /dev/null
+include ':app'