/build\r
+# built application files\r
+*.apk\r
+*.ap_\r
+\r
+# files for the dex VM\r
+*.dex\r
+\r
+# Java class files\r
+*.class\r
+\r
+# generated files\r
+bin/\r
+gen/\r
+\r
+# Local configuration file (sdk path, etc)\r
+local.properties\r
+\r
+.gradle\r
+.iml\r
+.idea
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="CompilerConfiguration">
- <resourceExtensions />
- <wildcardResourcePatterns>
- <entry name="!?*.java" />
- <entry name="!?*.form" />
- <entry name="!?*.class" />
- <entry name="!?*.groovy" />
- <entry name="!?*.scala" />
- <entry name="!?*.flex" />
- <entry name="!?*.kt" />
- <entry name="!?*.clj" />
- <entry name="!?*.aj" />
- </wildcardResourcePatterns>
- <annotationProcessing>
- <profile default="true" name="Default" enabled="false">
- <processorPath useClasspath="true" />
- </profile>
- </annotationProcessing>
- </component>
-</project>
\ No newline at end of file
+++ /dev/null
-<component name="CopyrightManager">\r
- <settings default="" />\r
-</component>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="GradleSettings">
- <option name="linkedExternalProjectsSettings">
- <GradleProjectSettings>
- <option name="distributionType" value="DEFAULT_WRAPPED" />
- <option name="externalProjectPath" value="$PROJECT_DIR$" />
- <option name="modules">
- <set>
- <option value="$PROJECT_DIR$" />
- </set>
- </option>
- <option name="resolveModulePerSourceSet" value="false" />
- </GradleProjectSettings>
- </option>
- </component>
-</project>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="animated-vector-drawable-26.0.0-alpha1">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/fea81f4fb2d781440131b6eabc4f6cca5ca61683/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/fea81f4fb2d781440131b6eabc4f6cca5ca61683/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/animated-vector-drawable/26.0.0-alpha1/animated-vector-drawable-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="appcompat-v7-26.0.0-alpha1">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/edcc0d7dd5758dc3a3212a9c0a2bc93a0e9cefce/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/edcc0d7dd5758dc3a3212a9c0a2bc93a0e9cefce/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/appcompat-v7/26.0.0-alpha1/appcompat-v7-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="constraint-layout-1.0.2">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/3044b6b1926fa0c832f455b3b86c62a8e6d6bf37/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/3044b6b1926fa0c832f455b3b86c62a8e6d6bf37/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="constraint-layout-solver-1.0.2">
- <CLASSES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.2/constraint-layout-solver-1.0.2.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="design-26.0.0-alpha1">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/67944214bf3615418561512aa5969e2338232ea1/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/67944214bf3615418561512aa5969e2338232ea1/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/design/26.0.0-alpha1/design-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="espresso-core-2.2.2">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/2ab3699a4a858e42659134545ef13e5e7b92c7a1/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/2ab3699a4a858e42659134545ef13e5e7b92c7a1/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/test/espresso/espresso-core/2.2.2/espresso-core-2.2.2-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="espresso-idling-resource-2.2.2">
- <CLASSES>
- <root url="file://$USER_HOME$/.android/build-cache/9bd6611b1b2d0352a49e6046ddd23da9e668ee7d/output/res" />
- <root url="jar://$USER_HOME$/.android/build-cache/9bd6611b1b2d0352a49e6046ddd23da9e668ee7d/output/jars/classes.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/test/espresso/espresso-idling-resource/2.2.2/espresso-idling-resource-2.2.2-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="exposed-instrumentation-api-publish-0.5">
- <CLASSES>
- <root url="file://$USER_HOME$/.android/build-cache/70e1170e0468fd1778148b8e8d11345676acc8f0/output/res" />
- <root url="jar://$USER_HOME$/.android/build-cache/70e1170e0468fd1778148b8e8d11345676acc8f0/output/jars/classes.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/test/exposed-instrumentation-api-publish/0.5/exposed-instrumentation-api-publish-0.5-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="hamcrest-core-1.3">
- <CLASSES>
- <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <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!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="hamcrest-integration-1.3">
- <CLASSES>
- <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-integration/1.3/5de0c73fef18917cd85d0ab70bb23818685e4dfd/hamcrest-integration-1.3.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="hamcrest-library-1.3">
- <CLASSES>
- <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-library/1.3/4785a3c21320980282f9f33d0d1264a69040538f/hamcrest-library-1.3.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="javawriter-2.1.1">
- <CLASSES>
- <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup/javawriter/2.1.1/67ff45d9ae02e583d0f9b3432a5ebbe05c30c966/javawriter-2.1.1.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="javax.annotation-api-1.2">
- <CLASSES>
- <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!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="javax.inject-1">
- <CLASSES>
- <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="jsch-0.1.54">
- <CLASSES>
- <root url="jar://$PROJECT_DIR$/libs/jsch-0.1.54.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="jsr305-2.0.1">
- <CLASSES>
- <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!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="junit-4.12">
- <CLASSES>
- <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/a6c32b40bf3d76eca54e3c601e5d1470c86fcdfa/junit-4.12-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="recyclerview-v7-26.0.0-alpha1">
- <CLASSES>
- <root url="file://$USER_HOME$/.android/build-cache/9086e48f2c024cb32ae1448854cd04f1a9580d1a/output/res" />
- <root url="jar://$USER_HOME$/.android/build-cache/9086e48f2c024cb32ae1448854cd04f1a9580d1a/output/jars/classes.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/recyclerview-v7/26.0.0-alpha1/recyclerview-v7-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="rules-0.5">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/3160d8826a0368126e8579933414b4a97d16e2cc/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/3160d8826a0368126e8579933414b4a97d16e2cc/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/test/rules/0.5/rules-0.5-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="runner-0.5">
- <CLASSES>
- <root url="file://$USER_HOME$/.android/build-cache/85f5aed809c5631145b9976f00f70d949f74db27/output/res" />
- <root url="jar://$USER_HOME$/.android/build-cache/85f5aed809c5631145b9976f00f70d949f74db27/output/jars/classes.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/test/runner/0.5/runner-0.5-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="support-annotations-26.0.0-alpha1">
- <CLASSES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/support-annotations/26.0.0-alpha1/support-annotations-26.0.0-alpha1.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/support-annotations/26.0.0-alpha1/support-annotations-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="support-compat-26.0.0-alpha1">
- <CLASSES>
- <root url="file://$USER_HOME$/.android/build-cache/4adbe8f30931f291813273929925c06441441884/output/res" />
- <root url="jar://$USER_HOME$/.android/build-cache/4adbe8f30931f291813273929925c06441441884/output/jars/classes.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/support-compat/26.0.0-alpha1/support-compat-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="support-core-ui-26.0.0-alpha1">
- <CLASSES>
- <root url="file://$USER_HOME$/.android/build-cache/c1a5accc0d897a16582f51dea141f350b6b9b17c/output/res" />
- <root url="jar://$USER_HOME$/.android/build-cache/c1a5accc0d897a16582f51dea141f350b6b9b17c/output/jars/classes.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/support-core-ui/26.0.0-alpha1/support-core-ui-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="support-core-utils-26.0.0-alpha1">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/220a5ee72977e4a725793d3ce11359d57a5784a6/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/220a5ee72977e4a725793d3ce11359d57a5784a6/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/support-core-utils/26.0.0-alpha1/support-core-utils-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="support-fragment-26.0.0-alpha1">
- <CLASSES>
- <root url="file://$USER_HOME$/.android/build-cache/9bff5a74f961deb78903cfeec509ab585fc42df9/output/res" />
- <root url="jar://$USER_HOME$/.android/build-cache/9bff5a74f961deb78903cfeec509ab585fc42df9/output/jars/classes.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/support-fragment/26.0.0-alpha1/support-fragment-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="support-media-compat-26.0.0-alpha1">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/220ee29522075b993426a38e5ecfef8ab31358c6/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/220ee29522075b993426a38e5ecfef8ab31358c6/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/support-media-compat/26.0.0-alpha1/support-media-compat-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="support-v4-26.0.0-alpha1">
- <CLASSES>
- <root url="file://$USER_HOME$/.android/build-cache/e8a7beab2ec367c79a7da27066fdaa1836a71605/output/res" />
- <root url="jar://$USER_HOME$/.android/build-cache/e8a7beab2ec367c79a7da27066fdaa1836a71605/output/jars/classes.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/support-v4/26.0.0-alpha1/support-v4-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="support-vector-drawable-26.0.0-alpha1">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/79c260ad77402863b97f0c9058b18dc89d8c7226/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/79c260ad77402863b97f0c9058b18dc89d8c7226/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/support-vector-drawable/26.0.0-alpha1/support-vector-drawable-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<component name="libraryTable">
- <library name="transition-26.0.0-alpha1">
- <CLASSES>
- <root url="jar://$USER_HOME$/.android/build-cache/cdf1af736a7160b5c747e5013a8360ab4415c35c/output/jars/classes.jar!/" />
- <root url="file://$USER_HOME$/.android/build-cache/cdf1af736a7160b5c747e5013a8360ab4415c35c/output/res" />
- </CLASSES>
- <JAVADOC />
- <SOURCES>
- <root url="jar://$USER_HOME$/Android/Sdk/extras/android/m2repository/com/android/support/transition/26.0.0-alpha1/transition-26.0.0-alpha1-sources.jar!/" />
- </SOURCES>
- </library>
-</component>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="EntryPointsManager">
- <entry_points version="2.0" />
- </component>
- <component name="NullableNotNullManager">
- <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
- <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
- <option name="myNullables">
- <value>
- <list size="4">
- <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
- <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
- <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
- <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
- </list>
- </value>
- </option>
- <option name="myNotNulls">
- <value>
- <list size="4">
- <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
- <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
- <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
- <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
- </list>
- </value>
- </option>
- </component>
- <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
- <output url="file://$PROJECT_DIR$/build/classes" />
- </component>
- <component name="ProjectType">
- <option name="id" value="Android" />
- </component>
-</project>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="ProjectModuleManager">
- <modules>
- <module fileurl="file://$PROJECT_DIR$/lede-gui.iml" filepath="$PROJECT_DIR$/lede-gui.iml" />
- </modules>
- </component>
-</project>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="RunConfigurationProducerService">
- <option name="ignoredProducers">
- <set>
- <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
- <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
- <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
- </set>
- </option>
- </component>
-</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="AndroidLogFilters">
- <option name="TOOL_WINDOW_CUSTOM_FILTER" value="LOAD" />
- <option name="TOOL_WINDOW_CONFIGURED_FILTER" value="Show only selected application" />
- <option name="TOOL_WINDOW_REGEXP_FILTER" value="false" />
- </component>
- <component name="ChangeListManager">
- <list default="true" id="0a25c2b7-da4c-4615-9899-055deea5ccc9" name="Default" comment="" />
- <ignored path="lede2.iws" />
- <ignored path=".idea/workspace.xml" />
- <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
- <option name="TRACKING_ENABLED" 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="CreatePatchCommitExecutor">
- <option name="PATCH_PATH" value="" />
- </component>
- <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
- <component name="ExternalProjectsData">
- <projectState path="$PROJECT_DIR$">
- <ProjectState />
- </projectState>
- </component>
- <component name="ExternalProjectsManager">
- <system id="GRADLE">
- <state>
- <task path="$PROJECT_DIR$">
- <activation />
- </task>
- <projects_view>
- <tree_state />
- </projects_view>
- </state>
- </system>
- </component>
- <component name="FavoritesManager">
- <favorites_list name="lede2" />
- </component>
- <component name="FileEditorManager">
- <leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
- <file leaf-file-name="activity_main.xml" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_main.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="1980">
- <caret line="132" column="8" selection-start-line="132" selection-start-column="8" selection-end-line="132" selection-end-column="8" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- </file>
- <file leaf-file-name="activity_enroll_device.xml" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_enroll_device.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="120">
- <caret line="8" column="0" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- </file>
- <file leaf-file-name="EnrollDeviceActivity.java" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/EnrollDeviceActivity.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="-1251">
- <caret line="51" column="12" selection-start-line="51" selection-start-column="8" selection-end-line="51" selection-end-column="12" />
- <folding />
- </state>
- </provider>
- </entry>
- </file>
- <file leaf-file-name="activity_add_device.xml" pinned="false" current-in-tab="true">
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_add_device.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="90">
- <caret line="6" column="54" selection-start-line="6" selection-start-column="54" selection-end-line="6" selection-end-column="54" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- </file>
- <file leaf-file-name="SSH.java" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/SSH.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="261">
- <caret line="146" column="56" selection-start-line="146" selection-start-column="31" selection-end-line="146" selection-end-column="56" />
- <folding />
- </state>
- </provider>
- </entry>
- </file>
- <file leaf-file-name="build.gradle" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/build.gradle">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="600">
- <caret line="40" column="53" selection-start-line="40" selection-start-column="53" selection-end-line="40" selection-end-column="53" />
- <folding />
- </state>
- </provider>
- </entry>
- </file>
- <file leaf-file-name="SSH_MySQL.java" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/SSH_MySQL.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="563">
- <caret line="147" column="58" selection-start-line="147" selection-start-column="35" selection-end-line="147" selection-end-column="58" />
- <folding />
- </state>
- </provider>
- </entry>
- </file>
- <file leaf-file-name="constants.xml" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/main/res/values/constants.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="345">
- <caret line="23" column="12" selection-start-line="23" selection-start-column="12" selection-end-line="23" selection-end-column="12" />
- <folding />
- </state>
- </provider>
- </entry>
- </file>
- <file leaf-file-name="activity_relation.xml" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_relation.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="2460">
- <caret line="164" column="23" selection-start-line="164" selection-start-column="23" selection-end-line="164" selection-end-column="23" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- </file>
- <file leaf-file-name="activity_list.xml" pinned="false" current-in-tab="false">
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_list.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="126">
- <caret line="21" column="36" selection-start-line="21" selection-start-column="36" selection-end-line="21" selection-end-column="36" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- </file>
- </leaf>
- </component>
- <component name="FileTemplateManagerImpl">
- <option name="RECENT_TEMPLATES">
- <list>
- <option value="valueResourceFile" />
- <option value="resourceFile" />
- <option value="Class" />
- <option value="layoutResourceFile_vertical" />
- </list>
- </option>
- </component>
- <component name="GradleLocalSettings">
- <option name="myGradleHomes">
- <map>
- <entry key="$PROJECT_DIR$" value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3" />
- </map>
- </option>
- <option name="myGradleVersions">
- <map>
- <entry key="$PROJECT_DIR$" value="3.3" />
- </map>
- </option>
- <option name="availableProjects">
- <map>
- <entry>
- <key>
- <ExternalProjectPojo>
- <option name="name" value="lede-gui" />
- <option name="path" value="$PROJECT_DIR$" />
- </ExternalProjectPojo>
- </key>
- <value>
- <list>
- <ExternalProjectPojo>
- <option name="name" value="lede-gui" />
- <option name="path" value="$PROJECT_DIR$" />
- </ExternalProjectPojo>
- </list>
- </value>
- </entry>
- </map>
- </option>
- <option name="availableTasks">
- <map>
- <entry key="$PROJECT_DIR$">
- <value>
- <list>
- <ExternalTaskPojo>
- <option name="description" value="Displays the sub-projects of root project 'lede-gui'." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="projects" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="validateSigningDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support.constraint:constraint-layout:1.0.2" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportConstraintConstraintLayout102Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="assembleReleaseUnitTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareDebugDependencies" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processReleaseJavaRes" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateReleaseAssets" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Runs lint on the Debug build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="lintDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="assembleDebugUnitTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Creates a version of android.jar that's suitable for unit tests." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mockableAndroidJar" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays the configuration model of root project 'lede-gui'. [incubating]" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="model" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays the tasks runnable from root project 'lede-gui'." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="tasks" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugSources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Initializes a new Gradle build. [incubating]" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="init" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:support-fragment:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportSupportFragment2600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="incrementalDebugJavaCompilationSafeguard" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Runs all device checks using Device Providers and Test Servers." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="deviceCheck" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays all dependencies declared in root project 'lede-gui'." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="dependencies" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processDebugResources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Runs lint on all variants." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="lint" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="packageDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileReleaseNdk" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugResources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugJavaWithJavac" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Assembles and tests this project and all projects it depends on." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="buildNeeded" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugAndroidTestBuildConfig" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processDebugUnitTestJavaRes" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Run unit tests for the release build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="testReleaseUnitTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Deletes the build cache directory." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="cleanBuildCache" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugAndroidTestShaders" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeDebugShaders" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugAndroidTestJavaWithJavac" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays the components produced by root project 'lede-gui'. [incubating]" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="components" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support.test.espresso:espresso-idling-resource:2.2.2" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportTestEspressoEspressoIdlingResource222Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileReleaseRenderscript" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Assembles all Debug builds." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="assembleDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processDebugAndroidTestManifest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support.test:rules:0.5" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportTestRules05Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugUnitTestJavaWithJavac" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformResourcesWithMergeJavaResForReleaseUnitTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:recyclerview-v7:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportRecyclerviewV72600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformClassesWithDexForDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="preDebugAndroidTestBuild" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processDebugAndroidTestJavaRes" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processReleaseUnitTestJavaRes" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="javaPreCompileDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Uninstalls the Release build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="uninstallRelease" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileReleaseShaders" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeReleaseResources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugAndroidTestSources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareDebugAndroidTestDependencies" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="incrementalDebugAndroidTestJavaCompilationSafeguard" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="checkReleaseManifest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="javaPreCompileDebugUnitTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugAndroidTestSources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeReleaseJniLibFolders" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareReleaseDependencies" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processReleaseResources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Installs and runs instrumentation tests using all Device Providers." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="deviceAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeDebugAndroidTestAssets" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processReleaseManifest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Uninstalls the android (on device) tests for the Debug build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="uninstallDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays the insight into a specific dependency in root project 'lede-gui'." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="dependencyInsight" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateReleaseSources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="incrementalReleaseUnitTestJavaCompilationSafeguard" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="preReleaseBuild" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Assembles all variants of all applications and secondary packages." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="assemble" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="incrementalDebugUnitTestJavaCompilationSafeguard" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:animated-vector-drawable:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportAnimatedVectorDrawable2600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="incrementalReleaseJavaCompilationSafeguard" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays a help message." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="help" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileReleaseUnitTestSources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Installs the android (on device) tests for the Debug build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="installDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeDebugAssets" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="javaPreCompileReleaseUnitTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="javaPreCompileRelease" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:support-core-utils:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportSupportCoreUtils2600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Runs all device checks on currently connected devices." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="connectedCheck" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Installs and runs the tests for debug on connected devices." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="connectedDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Uninstall all applications." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="uninstallAll" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformNativeLibsWithMergeJniLibsForDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Assembles all the Test applications." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="assembleAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processDebugAndroidTestResources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="packageRelease" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="validateSigningDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugAidl" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeDebugResources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:design:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportDesign2600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="preDebugUnitTestBuild" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:support-compat:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportSupportCompat2600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Generates Gradle wrapper files. [incubating]" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="wrapper" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileLint" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugAndroidTestResValues" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformNativeLibsWithMergeJniLibsForDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeReleaseShaders" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays the Android dependencies of the project." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="androidDependencies" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugAndroidTestNdk" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugUnitTestSources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformNativeLibsWithMergeJniLibsForRelease" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugSources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeDebugAndroidTestJniLibFolders" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="extractProguardFiles" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformClassesWithDexForDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="assembleDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processDebugJavaRes" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugAndroidTestAssets" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileReleaseJavaWithJavac" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="jarReleaseClasses" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformResourcesWithMergeJavaResForDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareReleaseUnitTestDependencies" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Run unit tests for all variants." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="test" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugNdk" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeDebugAndroidTestResources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="preReleaseUnitTestBuild" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugResValues" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Runs all checks." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="check" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:support-v4:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportSupportV42600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="javaPreCompileDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Run unit tests for the debug build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="testDebugUnitTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Installs and runs instrumentation tests for all flavors on connected devices." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="connectedAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="jarDebugClasses" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformClassesWithDexForRelease" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Installs the Debug build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="installDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="preBuild" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformResourcesWithMergeJavaResForRelease" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileReleaseSources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileReleaseUnitTestJavaWithJavac" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugShaders" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformResourcesWithMergeJavaResForDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileReleaseAidl" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support.test:runner:0.5" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportTestRunner05Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Runs lint on the Release build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="lintRelease" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Assembles and tests this project and all projects that depend on it." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="buildDependents" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugAssets" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays the dependent components of components in root project 'lede-gui'. [incubating]" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="dependentComponents" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays all buildscript dependencies declared in root project 'lede-gui'." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="buildEnvironment" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="checkDebugManifest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeDebugJniLibFolders" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prints out all the source sets defined in this project." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="sourceSets" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="transformResourcesWithMergeJavaResForDebugUnitTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:appcompat-v7:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportAppcompatV72600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeReleaseAssets" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:support-media-compat:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportSupportMediaCompat2600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:support-core-ui:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportSupportCoreUi2600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugRenderscript" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateReleaseBuildConfig" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:support-vector-drawable:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportSupportVectorDrawable2600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareDebugUnitTestDependencies" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support.test:exposed-instrumentation-api-publish:0.5" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportTestExposedInstrumentationApiPublish05Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateReleaseResources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Runs lint on just the fatal issues in the release build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="lintVitalRelease" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Uninstalls the Debug build." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="uninstallDebug" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays the signing info for each variant." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="signingReport" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugAndroidTestAidl" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="mergeDebugAndroidTestShaders" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support:transition:26.0.0-alpha1" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportTransition2600Alpha1Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Deletes the build directory." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="clean" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="preDebugBuild" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugBuildConfig" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Assembles and tests this project." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="build" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Assembles all Release builds." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="assembleRelease" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Prepare com.android.support.test.espresso:espresso-core:2.2.2" />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="prepareComAndroidSupportTestEspressoEspressoCore222Library" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="compileDebugAndroidTestRenderscript" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateDebugAndroidTestResources" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="processDebugManifest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="packageDebugAndroidTest" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="generateReleaseResValues" />
- </ExternalTaskPojo>
- <ExternalTaskPojo>
- <option name="description" value="Displays the properties of root project 'lede-gui'." />
- <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
- <option name="name" value="properties" />
- </ExternalTaskPojo>
- </list>
- </value>
- </entry>
- </map>
- </option>
- <option name="modificationStamps">
- <map>
- <entry key="$PROJECT_DIR$" value="1506033335642" />
- <entry key="C:\Users\BOWON KO\AndroidStudioProjects\Androidinit\lede2" value="10503612567953" />
- </map>
- </option>
- <option name="projectBuildClasspath">
- <map>
- <entry key="$PROJECT_DIR$">
- <value>
- <ExternalProjectBuildClasspathPojo>
- <option name="modulesBuildClasspath">
- <map>
- <entry key="$PROJECT_DIR$">
- <value>
- <ExternalModuleBuildClasspathPojo>
- <option name="entries">
- <list>
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle/2.3.3/gradle-2.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle/2.3.3/gradle-2.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-core/2.3.3/gradle-core-2.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-core/2.3.3/gradle-core-2.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder/2.3.3/builder-2.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder/2.3.3/builder-2.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint/25.3.3/lint-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint/25.3.3/lint-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/transform-api/2.0.0-deprecated-use-gradle-api/transform-api-2.0.0-deprecated-use-gradle-api.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-api/2.3.3/gradle-api-2.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-api/2.3.3/gradle-api-2.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/compilerCommon/2.3.3/compilerCommon-2.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/compilerCommon/2.3.3/compilerCommon-2.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.4/asm-5.0.4-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.4/asm-5.0.4.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-commons/5.0.4/asm-commons-5.0.4.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-gradle/5.3.2/proguard-gradle-5.3.2.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/jacoco/org.jacoco.core/0.7.5.201505241946/org.jacoco.core-0.7.5.201505241946.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/jacoco/org.jacoco.report/0.7.5.201505241946/org.jacoco.report-0.7.5.201505241946.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/jopt-simple/jopt-simple/4.9/jopt-simple-4.9.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/protobuf/protobuf-java/3.0.0/protobuf-java-3.0.0.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-model/2.3.3/builder-model-2.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-model/2.3.3/builder-model-2.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-test-api/2.3.3/builder-test-api-2.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-test-api/2.3.3/builder-test-api-2.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdklib/25.3.3/sdklib-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdklib/25.3.3/sdklib-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdk-common/25.3.3/sdk-common-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdk-common/25.3.3/sdk-common-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/common/25.3.3/common-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/common/25.3.3/common-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/manifest-merger/25.3.3/manifest-merger-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/manifest-merger/25.3.3/manifest-merger-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/ddms/ddmlib/25.3.3/ddmlib-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/ddms/ddmlib/25.3.3/ddmlib-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jack/jack-api/0.13.0/jack-api-0.13.0.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jill/jill-api/0.10.0/jill-api-0.10.0.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/analytics-library/protos/25.3.3/protos-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/analytics-library/protos/25.3.3/protos-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/analytics-library/shared/25.3.3/shared-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/analytics-library/shared/25.3.3/shared-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/analytics-library/tracker/25.3.3/tracker-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/analytics-library/tracker/25.3.3/tracker-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/squareup/javawriter/2.5.0/javawriter-2.5.0.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-tree/5.0.4/asm-tree-5.0.4.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-checks/25.3.3/lint-checks-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-checks/25.3.3/lint-checks-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-4.6.1.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/guava/guava/18.0/guava-18.0.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/baseLibrary/2.3.3/baseLibrary-2.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/baseLibrary/2.3.3/baseLibrary-2.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-io/commons-io/2.4/commons-io-2.4.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/annotations/25.3.3/annotations-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/annotations/25.3.3/annotations-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-base/5.3.2/proguard-base-5.3.2.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-debug-all/5.0.1/asm-debug-all-5.0.1.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/layoutlib/layoutlib-api/25.3.3/layoutlib-api-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/layoutlib/layoutlib-api/25.3.3/layoutlib-api-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/dvlib/25.3.3/dvlib-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/dvlib/25.3.3/dvlib-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/repository/25.3.3/repository-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/repository/25.3.3/repository-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpmime/4.1/httpmime-4.1.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-api/25.3.3/lint-api-25.3.3-sources.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-api/25.3.3/lint-api-25.3.3.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-analysis/5.0.4/asm-analysis-5.0.4.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/intellij/annotations/12.0/annotations-12.0.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/jimfs/jimfs/1.1/jimfs-1.1.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpcore/4.1/httpcore-4.1.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-codec/commons-codec/1.4/commons-codec-1.4.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/external/com-intellij/uast/162.2228.14/uast-162.2228.14.jar" />
- <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/external/lombok/lombok-ast/0.2.3/lombok-ast-0.2.3.jar" />
- </list>
- </option>
- <option name="path" value="$PROJECT_DIR$" />
- </ExternalModuleBuildClasspathPojo>
- </value>
- </entry>
- </map>
- </option>
- <option name="name" value="lede-gui" />
- <option name="projectBuildClasspath">
- <list>
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/platform-play" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/signing" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/testing-jvm" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/language-jvm" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/scala" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/native" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/wrapper" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/testing-native" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/platform-jvm" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/plugin-development" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/open-api" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/ear" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/tooling-api-builders" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/ui" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/jetty" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/internal-performance-testing" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/resources-sftp" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/platform-base" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/antlr" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/model-groovy" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/maven" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/language-java" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/testing-base" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/build-cache-http" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/code-quality" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/language-native" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/ide" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/resources-http" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/publish" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/ide-play" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/javascript" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/language-scala" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/workers" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/jvm-services" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/test-kit" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/messaging" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/plugins" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/internal-integ-testing" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/resources" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/composite-builds" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/platform-native" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/reporting" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/installation-beacon" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/launcher" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/ide-native" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/diagnostics" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/resources-s3" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/base-services-groovy" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/logging" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/cli" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/build-comparison" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/model-core" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/jacoco" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/ivy" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/plugin-use" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/osgi" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/process-services" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/base-services" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/internal-testing" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/announce" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/build-init" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/core" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/tooling-api" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/language-groovy" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/internal-android-performance-testing" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/src/dependency-management" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-process-services-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-launcher-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-core-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-messaging-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-model-groovy-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/groovy-all-2.4.7.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-ui-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-tooling-api-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/ant-1.9.6.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-cli-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-base-services-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-open-api-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-installation-beacon-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-script-kotlin-0.5.1.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-native-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-version-info-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-model-core-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-wrapper-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/ant-launcher-1.9.6.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-resources-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-docs-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-logging-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-jvm-services-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/gradle-base-services-groovy-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-resources-sftp-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-build-cache-http-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-platform-native-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-language-scala-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-ide-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-ide-play-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-test-kit-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-javascript-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-build-comparison-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-jacoco-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-ide-native-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-platform-play-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-plugin-development-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-platform-jvm-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-reporting-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-publish-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-composite-builds-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-signing-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-plugin-use-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-maven-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-ivy-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/ivy-2.2.0.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-build-init-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-testing-jvm-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-testing-native-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-scala-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-testing-base-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-workers-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-jetty-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-language-groovy-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-platform-base-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-language-native-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-resources-s3-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-tooling-api-builders-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-antlr-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-dependency-management-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-ear-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-code-quality-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-diagnostics-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-language-java-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-announce-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-language-jvm-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-plugins-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-osgi-3.3.jar" />
- <option value="$USER_HOME$/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3/lib/plugins/gradle-resources-http-3.3.jar" />
- <option value="$PROJECT_DIR$/buildSrc/src/main/java" />
- <option value="$PROJECT_DIR$/buildSrc/src/main/groovy" />
- </list>
- </option>
- </ExternalProjectBuildClasspathPojo>
- </value>
- </entry>
- </map>
- </option>
- <option name="externalProjectsViewState">
- <projects_view />
- </option>
- </component>
- <component name="IdeDocumentHistory">
- <option name="CHANGED_PATHS">
- <list>
- <option value="$PROJECT_DIR$/../sentinel/src/main/java/com/example/sentinel/MainActivity.java" />
- <option value="$PROJECT_DIR$/../sentinel/src/main/java/com/example/sentinel/SSH.java" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/ExplainActivity.java" />
- <option value="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" />
- <option value="$PROJECT_DIR$/build.gradle" />
- <option value="$USER_HOME$/Android/Sdk/platforms/android-26/android.jar!/android/app/Activity.class" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_config.xml" />
- <option value="$PROJECT_DIR$/src/main/res/values/Constants.xml" />
- <option value="$PROJECT_DIR$/src/main/res/xml/constants.xml" />
- <option value="$PROJECT_DIR$/src/main/AndroidManifest.xml" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_enroll_device.xml" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/add_device.config" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/MySQLInterface.config" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/AddDeviceInfoActivity.java" />
- <option value="$PROJECT_DIR$/src/main/res/layout/content_add_device_info.xml" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_add_device_info.xml" />
- <option value="$PROJECT_DIR$/src/main/assets/add_device.config" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/ConfigActivity.java" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/SSH_MySQL.java" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/SSH.java" />
- <option value="$PROJECT_DIR$/src/main/assets/add_device_address.config" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/AddDeviceActivity.java" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/DeleteDeviceActivity.java" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_add_comm.xml" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_delete_device.xml" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_add_device.xml" />
- <option value="$PROJECT_DIR$/src/main/assets/add_comm.config" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/AddCommActivity.java" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_add_relation.xml" />
- <option value="$PROJECT_DIR$/src/main/res/values/strings.xml" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/EnrollDeviceActivity.java" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/ListActivity.java" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_list.xml" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_main.xml" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/AddRelationActivity.java" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/MainActivity.java" />
- <option value="$PROJECT_DIR$/src/main/res/layout/activity_relation.xml" />
- <option value="$PROJECT_DIR$/src/main/res/values/constants.xml" />
- <option value="$PROJECT_DIR$/src/main/java/com/example/lede2/RelationActivity.java" />
- </list>
- </option>
- </component>
- <component name="ProjectFrameBounds">
- <option name="x" value="65" />
- <option name="y" value="24" />
- <option name="width" value="1615" />
- <option name="height" value="1054" />
- </component>
- <component name="ProjectLevelVcsManager" settingsEditedManually="false">
- <OptionsSetting value="true" id="Add" />
- <OptionsSetting value="true" id="Remove" />
- <OptionsSetting value="true" id="Checkout" />
- <OptionsSetting value="true" id="Update" />
- <OptionsSetting value="true" id="Status" />
- <OptionsSetting value="true" id="Edit" />
- <ConfirmationsSetting value="0" id="Add" />
- <ConfirmationsSetting value="0" id="Remove" />
- </component>
- <component name="ProjectView">
- <navigator currentView="ProjectPane" proportions="" version="1">
- <flattenPackages />
- <showMembers />
- <showModules />
- <showLibraryContents />
- <hideEmptyPackages />
- <abbreviatePackageNames />
- <autoscrollToSource />
- <autoscrollFromSource />
- <sortByType />
- <manualOrder />
- <foldersAlwaysOnTop value="true" />
- </navigator>
- <panes>
- <pane id="PackagesPane" />
- <pane id="Scratches" />
- <pane id="AndroidView">
- <subPane />
- </pane>
- <pane id="ProjectPane">
- <subPane>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="main" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="main" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="res" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="main" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="res" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="values" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="main" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="res" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="layout" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="src" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="main" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="java" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede2" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="lede-gui" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="libs" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- </subPane>
- </pane>
- <pane id="Scope" />
- </panes>
- </component>
- <component name="PropertiesComponent">
- <property name="last_opened_file_path" value="$PROJECT_DIR$/../../benchmarks/other/PhoneInterface/Irrigation" />
- <property name="device.picker.selection" value="00b974e47e6f35d5" />
- <property name="android.project.structure.last.selected" value="jsch-0.1.44" />
- <property name="android.project.structure.proportion" value="0.15" />
- <property name="SearchEverywhereHistoryKey" value="	FILE	file://C:/Users/BOWON KO/AndroidStudioProjects/Androidinit/lede2/src/main/res/layout/activity_main.xml" />
- </component>
- <component name="RecentsManager">
- <key name="MoveFile.RECENT_KEYS">
- <recent name="$PROJECT_DIR$/src/main/assets" />
- <recent name="$PROJECT_DIR$/src/main/res/values" />
- <recent name="$PROJECT_DIR$/src/main/res/xml" />
- <recent name="C:\Users\BOWON KO\AndroidStudioProjects\Androidinit\lede2\src\main\res\drawable" />
- </key>
- <key name="android.template.packageName">
- <recent name="com.example.lede2" />
- </key>
- <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
- <recent name="com.example.lede2" />
- </key>
- <key name="CopyFile.RECENT_KEYS">
- <recent name="$PROJECT_DIR$/src/main/res/layout" />
- <recent name="C:\Users\BOWON KO\AndroidStudioProjects\Androidinit\lede2\src\main\res\drawable" />
- </key>
- <key name="CopyClassDialog.RECENTS_KEY">
- <recent name="com.example.lede2" />
- <recent name="com.example.sentinel" />
- </key>
- <key name="android.template.parentActivityClass">
- <recent name="" />
- </key>
- </component>
- <component name="RunManager" selected="Android App.lede-gui">
- <configuration default="true" type="AndroidJUnit" factoryName="Android JUnit">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <module name="" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <option name="PACKAGE_NAME" />
- <option name="MAIN_CLASS_NAME" />
- <option name="METHOD_NAME" />
- <option name="TEST_OBJECT" value="class" />
- <option name="VM_PARAMETERS" />
- <option name="PARAMETERS" />
- <option name="WORKING_DIRECTORY" />
- <option name="ENV_VARIABLES" />
- <option name="PASS_PARENT_ENVS" value="true" />
- <option name="TEST_SEARCH_SCOPE">
- <value defaultName="singleModule" />
- </option>
- <envs />
- <patterns />
- <method>
- <option name="Make" enabled="false" />
- <option name="Android.Gradle.BeforeRunTask" enabled="true" />
- </method>
- </configuration>
- <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android App">
- <module name="" />
- <option name="DEPLOY" value="true" />
- <option name="ARTIFACT_NAME" value="" />
- <option name="PM_INSTALL_OPTIONS" value="" />
- <option name="ACTIVITY_EXTRA_FLAGS" value="" />
- <option name="MODE" value="default_activity" />
- <option name="PREFERRED_AVD" value="" />
- <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="SHOW_DIALOG" />
- <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="ENABLE_ADVANCED_PROFILING" value="true" />
- <option name="SUPPORT_LIB_ENABLED" value="true" />
- <option name="INSTRUMENTATION_ENABLED" value="true" />
- </Profilers>
- <option name="DEEP_LINK" value="" />
- <option name="ACTIVITY_CLASS" value="" />
- <method />
- </configuration>
- <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Instrumented Tests">
- <module name="" />
- <option name="TESTING_TYPE" value="0" />
- <option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
- <option name="METHOD_NAME" value="" />
- <option name="CLASS_NAME" value="" />
- <option name="PACKAGE_NAME" value="" />
- <option name="EXTRA_OPTIONS" value="" />
- <option name="PREFERRED_AVD" value="" />
- <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="SHOW_DIALOG" />
- <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="ENABLE_ADVANCED_PROFILING" value="true" />
- <option name="SUPPORT_LIB_ENABLED" value="true" />
- <option name="INSTRUMENTATION_ENABLED" value="true" />
- </Profilers>
- <method />
- </configuration>
- <configuration default="true" type="Application" factoryName="Application">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <option name="MAIN_CLASS_NAME" />
- <option name="VM_PARAMETERS" />
- <option name="PROGRAM_PARAMETERS" />
- <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <option name="ENABLE_SWING_INSPECTOR" value="false" />
- <option name="ENV_VARIABLES" />
- <option name="PASS_PARENT_ENVS" value="true" />
- <module name="" />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="GradleRunConfiguration" factoryName="Gradle">
- <ExternalSystemSettings>
- <option name="executionName" />
- <option name="externalProjectPath" />
- <option name="externalSystemIdString" value="GRADLE" />
- <option name="scriptParameters" />
- <option name="taskDescriptions">
- <list />
- </option>
- <option name="taskNames">
- <list />
- </option>
- <option name="vmOptions" />
- </ExternalSystemSettings>
- <method />
- </configuration>
- <configuration default="true" type="JarApplication" factoryName="JAR Application">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="Java Scratch" factoryName="Java Scratch">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <option name="SCRATCH_FILE_ID" value="0" />
- <option name="MAIN_CLASS_NAME" />
- <option name="VM_PARAMETERS" />
- <option name="PROGRAM_PARAMETERS" />
- <option name="WORKING_DIRECTORY" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <option name="ENABLE_SWING_INSPECTOR" value="false" />
- <option name="ENV_VARIABLES" />
- <option name="PASS_PARENT_ENVS" value="true" />
- <module name="" />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="Remote" factoryName="Remote">
- <option name="USE_SOCKET_TRANSPORT" value="true" />
- <option name="SERVER_MODE" value="false" />
- <option name="SHMEM_ADDRESS" value="javadebug" />
- <option name="HOST" value="localhost" />
- <option name="PORT" value="5005" />
- <method />
- </configuration>
- <configuration default="true" type="TestNG" factoryName="TestNG">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <module name="" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <option name="SUITE_NAME" />
- <option name="PACKAGE_NAME" />
- <option name="MAIN_CLASS_NAME" />
- <option name="METHOD_NAME" />
- <option name="GROUP_NAME" />
- <option name="TEST_OBJECT" value="CLASS" />
- <option name="VM_PARAMETERS" value="-ea" />
- <option name="PARAMETERS" />
- <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
- <option name="OUTPUT_DIRECTORY" />
- <option name="ANNOTATION_TYPE" />
- <option name="ENV_VARIABLES" />
- <option name="PASS_PARENT_ENVS" value="true" />
- <option name="TEST_SEARCH_SCOPE">
- <value defaultName="singleModule" />
- </option>
- <option name="USE_DEFAULT_REPORTERS" value="false" />
- <option name="PROPERTIES_FILE" />
- <envs />
- <properties />
- <listeners />
- <method />
- </configuration>
- <configuration default="true" type="TestNGTestDiscovery" factoryName="TestNG Test Discovery" changeList="All">
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
- <module name="" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
- <option name="ALTERNATIVE_JRE_PATH" />
- <option name="SUITE_NAME" />
- <option name="PACKAGE_NAME" />
- <option name="MAIN_CLASS_NAME" />
- <option name="METHOD_NAME" />
- <option name="GROUP_NAME" />
- <option name="TEST_OBJECT" value="CLASS" />
- <option name="VM_PARAMETERS" />
- <option name="PARAMETERS" />
- <option name="WORKING_DIRECTORY" />
- <option name="OUTPUT_DIRECTORY" />
- <option name="ANNOTATION_TYPE" />
- <option name="ENV_VARIABLES" />
- <option name="PASS_PARENT_ENVS" value="true" />
- <option name="TEST_SEARCH_SCOPE">
- <value defaultName="singleModule" />
- </option>
- <option name="USE_DEFAULT_REPORTERS" value="false" />
- <option name="PROPERTIES_FILE" />
- <envs />
- <properties />
- <listeners />
- <method />
- </configuration>
- <configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App">
- <module name="app" />
- <option name="DEPLOY" value="true" />
- <option name="ARTIFACT_NAME" value="" />
- <option name="PM_INSTALL_OPTIONS" value="" />
- <option name="ACTIVITY_EXTRA_FLAGS" value="" />
- <option name="MODE" value="default_activity" />
- <option name="PREFERRED_AVD" value="" />
- <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="SHOW_DIALOG" />
- <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="ENABLE_ADVANCED_PROFILING" value="true" />
- <option name="SUPPORT_LIB_ENABLED" value="true" />
- <option name="INSTRUMENTATION_ENABLED" value="true" />
- </Profilers>
- <option name="DEEP_LINK" value="" />
- <option name="ACTIVITY_CLASS" value="" />
- <method />
- </configuration>
- <configuration default="false" name="lede2" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
- <module name="lede2" />
- <option name="DEPLOY" value="true" />
- <option name="ARTIFACT_NAME" value="" />
- <option name="PM_INSTALL_OPTIONS" value="" />
- <option name="ACTIVITY_EXTRA_FLAGS" value="" />
- <option name="MODE" value="default_activity" />
- <option name="PREFERRED_AVD" value="" />
- <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="SHOW_DIALOG" />
- <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="ENABLE_ADVANCED_PROFILING" value="true" />
- <option name="SUPPORT_LIB_ENABLED" value="true" />
- <option name="INSTRUMENTATION_ENABLED" value="true" />
- </Profilers>
- <option name="DEEP_LINK" value="" />
- <option name="ACTIVITY_CLASS" value="" />
- <method />
- </configuration>
- <configuration default="false" name="sentinel" type="AndroidRunConfigurationType" factoryName="Android App">
- <module name="sentinel" />
- <option name="DEPLOY" value="true" />
- <option name="ARTIFACT_NAME" value="" />
- <option name="PM_INSTALL_OPTIONS" value="" />
- <option name="ACTIVITY_EXTRA_FLAGS" value="" />
- <option name="MODE" value="default_activity" />
- <option name="PREFERRED_AVD" value="" />
- <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="SHOW_DIALOG" />
- <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="ENABLE_ADVANCED_PROFILING" value="true" />
- <option name="SUPPORT_LIB_ENABLED" value="true" />
- <option name="INSTRUMENTATION_ENABLED" value="true" />
- </Profilers>
- <option name="DEEP_LINK" value="" />
- <option name="ACTIVITY_CLASS" value="" />
- <method />
- </configuration>
- <configuration default="false" name="studentapp" type="AndroidRunConfigurationType" factoryName="Android App">
- <module name="studentapp" />
- <option name="DEPLOY" value="true" />
- <option name="ARTIFACT_NAME" value="" />
- <option name="PM_INSTALL_OPTIONS" value="" />
- <option name="ACTIVITY_EXTRA_FLAGS" value="" />
- <option name="MODE" value="default_activity" />
- <option name="PREFERRED_AVD" value="" />
- <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="SHOW_DIALOG" />
- <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="ENABLE_ADVANCED_PROFILING" value="true" />
- <option name="SUPPORT_LIB_ENABLED" value="true" />
- <option name="INSTRUMENTATION_ENABLED" value="true" />
- </Profilers>
- <option name="DEEP_LINK" value="" />
- <option name="ACTIVITY_CLASS" value="" />
- <method />
- </configuration>
- <configuration default="false" name="lede" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
- <module name="lede" />
- <option name="DEPLOY" value="true" />
- <option name="ARTIFACT_NAME" value="" />
- <option name="PM_INSTALL_OPTIONS" value="" />
- <option name="ACTIVITY_EXTRA_FLAGS" value="" />
- <option name="MODE" value="default_activity" />
- <option name="PREFERRED_AVD" value="" />
- <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="SHOW_DIALOG" />
- <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="ENABLE_ADVANCED_PROFILING" value="true" />
- <option name="SUPPORT_LIB_ENABLED" value="true" />
- <option name="INSTRUMENTATION_ENABLED" value="true" />
- </Profilers>
- <option name="DEEP_LINK" value="" />
- <option name="ACTIVITY_CLASS" value="" />
- <method />
- </configuration>
- <configuration default="false" name="lede-gui" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
- <module name="lede-gui" />
- <option name="DEPLOY" value="true" />
- <option name="ARTIFACT_NAME" value="" />
- <option name="PM_INSTALL_OPTIONS" value="" />
- <option name="ACTIVITY_EXTRA_FLAGS" value="" />
- <option name="MODE" value="default_activity" />
- <option name="PREFERRED_AVD" value="" />
- <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="SHOW_DIALOG" />
- <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="ENABLE_ADVANCED_PROFILING" value="true" />
- <option name="SUPPORT_LIB_ENABLED" value="true" />
- <option name="INSTRUMENTATION_ENABLED" value="true" />
- </Profilers>
- <option name="DEEP_LINK" value="" />
- <option name="ACTIVITY_CLASS" value="" />
- <method />
- </configuration>
- <list size="6">
- <item index="0" class="java.lang.String" itemvalue="Android App.app" />
- <item index="1" class="java.lang.String" itemvalue="Android App.lede2" />
- <item index="2" class="java.lang.String" itemvalue="Android App.sentinel" />
- <item index="3" class="java.lang.String" itemvalue="Android App.studentapp" />
- <item index="4" class="java.lang.String" itemvalue="Android App.lede" />
- <item index="5" class="java.lang.String" itemvalue="Android App.lede-gui" />
- </list>
- <configuration name="<template>" type="Applet" default="true" selected="false">
- <option name="MAIN_CLASS_NAME" />
- <option name="HTML_FILE_NAME" />
- <option name="HTML_USED" value="false" />
- <option name="WIDTH" value="400" />
- <option name="HEIGHT" value="300" />
- <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
- <option name="VM_PARAMETERS" />
- </configuration>
- <configuration name="<template>" type="JUnit" default="true" selected="false">
- <option name="MAIN_CLASS_NAME" />
- <option name="VM_PARAMETERS" value="-ea" />
- <option name="PARAMETERS" />
- <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
- </configuration>
- <configuration name="<template>" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" default="true" selected="false">
- <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
- </configuration>
- </component>
- <component name="ShelveChangesManager" show_recycled="false">
- <option name="remove_strategy" value="false" />
- </component>
- <component name="SvnConfiguration">
- <configuration />
- </component>
- <component name="TaskManager">
- <task active="true" id="Default" summary="Default task">
- <changelist id="0a25c2b7-da4c-4615-9899-055deea5ccc9" name="Default" comment="" />
- <created>1501629053988</created>
- <option name="number" value="Default" />
- <option name="presentableId" value="Default" />
- <updated>1501629053988</updated>
- </task>
- <servers />
- </component>
- <component name="TodoView">
- <todo-panel id="selected-file">
- <is-autoscroll-to-source value="true" />
- </todo-panel>
- <todo-panel id="all">
- <are-packages-shown value="true" />
- <is-autoscroll-to-source value="true" />
- </todo-panel>
- </component>
- <component name="ToolWindowManager">
- <frame x="65" y="24" width="1615" height="1054" extended-state="0" />
- <editor active="true" />
- <layout>
- <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32719547" sideWeight="0.49475157" order="6" side_tool="false" content_ui="tabs" />
- <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.28713968" sideWeight="0.44869342" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Build Variants" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
- <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32786885" sideWeight="0.5022307" order="7" side_tool="true" content_ui="tabs" />
- <window_info id="Android Monitor" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2827051" sideWeight="0.54557043" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.2974108" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
- <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25055432" sideWeight="0.5589548" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3292683" sideWeight="0.4901211" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Captures" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Gradle Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2827051" sideWeight="0.45442957" order="7" side_tool="true" content_ui="tabs" />
- <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.22370937" sideWeight="0.4915254" order="0" side_tool="false" content_ui="combo" />
- <window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32981715" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Android Model" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
- <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3286119" sideWeight="0.49416667" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.38333333" sideWeight="0.5084746" order="3" side_tool="true" content_ui="tabs" />
- <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
- <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
- <window_info id="Assistant" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32950923" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
- <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
- <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.20066519" sideWeight="0.48757172" order="1" side_tool="false" content_ui="tabs" />
- </layout>
- </component>
- <component name="UnknownFeatures">
- <option featureType="com.intellij.fileTypeFactory" implementationName="*.config" />
- </component>
- <component name="Vcs.Log.UiProperties">
- <option name="RECENTLY_FILTERED_USER_GROUPS">
- <collection />
- </option>
- <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
- <collection />
- </option>
- </component>
- <component name="VcsContentAnnotationSettings">
- <option name="myLimit" value="2678400000" />
- </component>
- <component name="XDebuggerManager">
- <breakpoint-manager>
- <option name="time" value="23" />
- </breakpoint-manager>
- <watches-manager />
- </component>
- <component name="editorHistoryManager">
- <entry file="file://$PROJECT_DIR$/src/main/res/drawable/BLUE.png" />
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/ExplainActivity.java" />
- <entry file="file://$PROJECT_DIR$/src/main/res/drawable/background.png">
- <provider selected="true" editor-type-id="images">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/drawable/blueberry.jpg">
- <provider selected="true" editor-type-id="images">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/drawable/home.jpg" />
- <entry file="file://$PROJECT_DIR$/src/main/res/drawable/bluename.png">
- <provider selected="true" editor-type-id="images">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_explain.xml" />
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_test.xml" />
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_wifi.xml" />
- <entry file="file://$PROJECT_DIR$/../app/src/main/AndroidManifest.xml" />
- <entry file="file://$PROJECT_DIR$/../app/src/main/java/com/example/bowonko/androidinit/MainActivity.java" />
- <entry file="file://$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="90">
- <caret line="6" column="0" selection-start-line="6" selection-start-column="0" selection-end-line="6" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="jar://$USER_HOME$/Android/Sdk/platforms/android-26/android.jar!/android/app/Activity.class">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="6245">
- <caret line="839" column="16" selection-start-line="839" selection-start-column="16" selection-end-line="839" selection-end-column="16" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/values/Constants.xml" />
- <entry file="file://$PROJECT_DIR$/src/main/res/values/constants.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/AddDeviceInfoActivity.java" />
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_add_device_info.xml" />
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/content_add_device_info.xml" />
- <entry file="jar://$USER_HOME$/Android/Sdk/platforms/android-26/android.jar!/java/lang/ClassLoader.class">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="377">
- <caret line="145" column="0" selection-start-line="145" selection-start-column="0" selection-end-line="145" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/MySQLInterface.config" />
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/content_delete_device.xml" />
- <entry file="file://$PROJECT_DIR$/src/main/AndroidManifest.xml">
- <provider editor-type-id="android-manifest">
- <state />
- </provider>
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="420">
- <caret line="28" column="26" selection-start-line="28" selection-start-column="26" selection-end-line="28" selection-end-column="26" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/assets/add_device.config">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="15">
- <caret line="1" column="3" selection-start-line="1" selection-start-column="3" selection-end-line="1" selection-end-column="3" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/assets/add_device_address.config">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="15">
- <caret line="1" column="27" selection-start-line="1" selection-start-column="27" selection-end-line="1" selection-end-column="27" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/assets/add_comm.config">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="30">
- <caret line="2" column="5" selection-start-line="2" selection-start-column="5" selection-end-line="2" selection-end-column="5" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/content_add_relation.xml" />
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_add_comm.xml" />
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/AddCommActivity.java" />
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/AddDeviceActivity.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="398">
- <caret line="88" column="12" selection-start-line="88" selection-start-column="12" selection-end-line="88" selection-end-column="12" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/build/intermediates/res/merged/debug/layout/activity_list.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="207">
- <caret line="25" column="0" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/ConfigActivity.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="214">
- <caret line="51" column="47" selection-start-line="51" selection-start-column="47" selection-end-line="51" selection-end-column="47" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/values/strings.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="105">
- <caret line="7" column="80" selection-start-line="7" selection-start-column="80" selection-end-line="7" selection-end-column="80" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/ListActivity.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="495">
- <caret line="47" column="8" selection-start-line="47" selection-start-column="8" selection-end-line="47" selection-end-column="8" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/content_relation.xml" />
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_add_relation.xml" />
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/AddRelationActivity.java" />
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_delete_device.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="212">
- <caret line="68" column="12" selection-start-line="68" selection-start-column="12" selection-end-line="68" selection-end-column="12" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/DeleteDeviceActivity.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="450">
- <caret line="37" column="0" selection-start-line="37" selection-start-column="0" selection-end-line="38" selection-end-column="51" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/RelationActivity.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="443">
- <caret line="68" column="21" selection-start-line="68" selection-start-column="21" selection-end-line="68" selection-end-column="21" />
- <folding>
- <element signature="imports" expanded="false" />
- </folding>
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/MainActivity.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="1050">
- <caret line="81" column="31" selection-start-line="81" selection-start-column="8" selection-end-line="81" selection-end-column="31" />
- <folding>
- <element signature="e#3914#3976#0" expanded="false" />
- </folding>
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/build.gradle">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="600">
- <caret line="40" column="53" selection-start-line="40" selection-start-column="53" selection-end-line="40" selection-end-column="53" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_config.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="90">
- <caret line="6" column="51" selection-start-line="6" selection-start-column="37" selection-end-line="6" selection-end-column="51" />
- <folding />
- </state>
- </provider>
- <provider editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/SSH.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="261">
- <caret line="146" column="56" selection-start-line="146" selection-start-column="31" selection-end-line="146" selection-end-column="56" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/values/constants.xml">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="345">
- <caret line="23" column="12" selection-start-line="23" selection-start-column="12" selection-end-line="23" selection-end-column="12" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/EnrollDeviceActivity.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="-1251">
- <caret line="51" column="12" selection-start-line="51" selection-start-column="8" selection-end-line="51" selection-end-column="12" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/java/com/example/lede2/SSH_MySQL.java">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="563">
- <caret line="147" column="58" selection-start-line="147" selection-start-column="35" selection-end-line="147" selection-end-column="58" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_relation.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="2460">
- <caret line="164" column="23" selection-start-line="164" selection-start-column="23" selection-end-line="164" selection-end-column="23" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_enroll_device.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="120">
- <caret line="8" column="0" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_list.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="126">
- <caret line="21" column="36" selection-start-line="21" selection-start-column="36" selection-end-line="21" selection-end-column="36" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_main.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="1980">
- <caret line="132" column="8" selection-start-line="132" selection-start-column="8" selection-end-line="132" selection-end-column="8" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/src/main/res/layout/activity_add_device.xml">
- <provider editor-type-id="text-editor">
- <state relative-caret-position="90">
- <caret line="6" column="54" selection-start-line="6" selection-start-column="54" selection-end-line="6" selection-end-column="54" />
- <folding />
- </state>
- </provider>
- <provider selected="true" editor-type-id="android-designer2">
- <state />
- </provider>
- </entry>
- </component>
-</project>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<module external.linked.project.id="git" 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=":" />\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" />\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_7">\r
+ <output url="file://$MODULE_DIR$/build/intermediates/classes/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/r/debug" isTestSource="false" generated="true" />\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" />\r
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />\r
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" 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" />\r
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />\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/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
+ <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
+ <excludeFolder url="file://$MODULE_DIR$/build/android-profile" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/outputs" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/tmp" />\r
+ </content>\r
+ <orderEntry type="jdk" jdkName="Android API 26 Platform" jdkType="Android SDK" />\r
+ <orderEntry type="sourceFolder" forTests="false" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test:exposed-instrumentation-api-publish-0.5" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="junit:junit:4.12@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:appcompat-v7-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-media-compat-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:recyclerview-v7-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="javax.inject:javax.inject:1@jar" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.squareup:javawriter:2.1.1@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-v4-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:design-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-compat-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-core-utils-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support.constraint:constraint-layout-solver:1.0.2@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support.constraint:constraint-layout-1.0.2" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="__local_jars__:C.\Users\kevin\Desktop\git\libs\jsch-0.1.54.jar:unspecified@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-vector-drawable-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:animated-vector-drawable-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="org.hamcrest:hamcrest-core:1.3@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-annotations:26.0.0-alpha1@jar" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test.espresso:espresso-core-2.2.2" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test:rules-0.5" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="org.hamcrest:hamcrest-library:1.3@jar" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="org.hamcrest:hamcrest-integration:1.3@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-core-ui-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test:runner-0.5" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:transition-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test.espresso:espresso-idling-resource-2.2.2" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="javax.annotation:javax.annotation-api:1.2@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-fragment-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="android-android-26" level="project" />\r
+ </component>\r
+</module>
\ No newline at end of file
-#Wed Sep 20 13:44:40 PDT 2017
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
+#Wed Sep 20 13:44:40 PDT 2017\r
+distributionBase=GRADLE_USER_HOME\r
+distributionPath=wrapper/dists\r
+zipStoreBase=GRADLE_USER_HOME\r
+zipStorePath=wrapper/dists\r
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip\r
-#!/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 "$@"
+#!/usr/bin/env bash\r
+\r
+##############################################################################\r
+##\r
+## Gradle start up script for UN*X\r
+##\r
+##############################################################################\r
+\r
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r
+DEFAULT_JVM_OPTS=""\r
+\r
+APP_NAME="Gradle"\r
+APP_BASE_NAME=`basename "$0"`\r
+\r
+# Use the maximum available, or set MAX_FD != -1 to use that value.\r
+MAX_FD="maximum"\r
+\r
+warn ( ) {\r
+ echo "$*"\r
+}\r
+\r
+die ( ) {\r
+ echo\r
+ echo "$*"\r
+ echo\r
+ exit 1\r
+}\r
+\r
+# OS specific support (must be 'true' or 'false').\r
+cygwin=false\r
+msys=false\r
+darwin=false\r
+case "`uname`" in\r
+ CYGWIN* )\r
+ cygwin=true\r
+ ;;\r
+ Darwin* )\r
+ darwin=true\r
+ ;;\r
+ MINGW* )\r
+ msys=true\r
+ ;;\r
+esac\r
+\r
+# Attempt to set APP_HOME\r
+# Resolve links: $0 may be a link\r
+PRG="$0"\r
+# Need this for relative symlinks.\r
+while [ -h "$PRG" ] ; do\r
+ ls=`ls -ld "$PRG"`\r
+ link=`expr "$ls" : '.*-> \(.*\)$'`\r
+ if expr "$link" : '/.*' > /dev/null; then\r
+ PRG="$link"\r
+ else\r
+ PRG=`dirname "$PRG"`"/$link"\r
+ fi\r
+done\r
+SAVED="`pwd`"\r
+cd "`dirname \"$PRG\"`/" >/dev/null\r
+APP_HOME="`pwd -P`"\r
+cd "$SAVED" >/dev/null\r
+\r
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\r
+\r
+# Determine the Java command to use to start the JVM.\r
+if [ -n "$JAVA_HOME" ] ; then\r
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then\r
+ # IBM's JDK on AIX uses strange locations for the executables\r
+ JAVACMD="$JAVA_HOME/jre/sh/java"\r
+ else\r
+ JAVACMD="$JAVA_HOME/bin/java"\r
+ fi\r
+ if [ ! -x "$JAVACMD" ] ; then\r
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\r
+\r
+Please set the JAVA_HOME variable in your environment to match the\r
+location of your Java installation."\r
+ fi\r
+else\r
+ JAVACMD="java"\r
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r
+\r
+Please set the JAVA_HOME variable in your environment to match the\r
+location of your Java installation."\r
+fi\r
+\r
+# Increase the maximum file descriptors if we can.\r
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then\r
+ MAX_FD_LIMIT=`ulimit -H -n`\r
+ if [ $? -eq 0 ] ; then\r
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then\r
+ MAX_FD="$MAX_FD_LIMIT"\r
+ fi\r
+ ulimit -n $MAX_FD\r
+ if [ $? -ne 0 ] ; then\r
+ warn "Could not set maximum file descriptor limit: $MAX_FD"\r
+ fi\r
+ else\r
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"\r
+ fi\r
+fi\r
+\r
+# For Darwin, add options to specify how the application appears in the dock\r
+if $darwin; then\r
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""\r
+fi\r
+\r
+# For Cygwin, switch paths to Windows format before running java\r
+if $cygwin ; then\r
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`\r
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`\r
+ JAVACMD=`cygpath --unix "$JAVACMD"`\r
+\r
+ # We build the pattern for arguments to be converted via cygpath\r
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\r
+ SEP=""\r
+ for dir in $ROOTDIRSRAW ; do\r
+ ROOTDIRS="$ROOTDIRS$SEP$dir"\r
+ SEP="|"\r
+ done\r
+ OURCYGPATTERN="(^($ROOTDIRS))"\r
+ # Add a user-defined pattern to the cygpath arguments\r
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then\r
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"\r
+ fi\r
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh\r
+ i=0\r
+ for arg in "$@" ; do\r
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`\r
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option\r
+\r
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition\r
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`\r
+ else\r
+ eval `echo args$i`="\"$arg\""\r
+ fi\r
+ i=$((i+1))\r
+ done\r
+ case $i in\r
+ (0) set -- ;;\r
+ (1) set -- "$args0" ;;\r
+ (2) set -- "$args0" "$args1" ;;\r
+ (3) set -- "$args0" "$args1" "$args2" ;;\r
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;\r
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;\r
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;\r
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;\r
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;\r
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;\r
+ esac\r
+fi\r
+\r
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\r
+function splitJvmOpts() {\r
+ JVM_OPTS=("$@")\r
+}\r
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\r
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"\r
+\r
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"\r
-<?xml version="1.0" encoding="UTF-8"?>
-<module external.linked.project.id="lede-gui" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
- <component name="FacetManager">
- <facet type="android-gradle" name="Android-Gradle">
- <configuration>
- <option name="GRADLE_PROJECT_PATH" value=":" />
- </configuration>
- </facet>
- <facet type="android" name="Android">
- <configuration>
- <option name="SELECTED_BUILD_VARIANT" value="debug" />
- <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
- <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
- <afterSyncTasks>
- <task>generateDebugSources</task>
- </afterSyncTasks>
- <option name="ALLOW_USER_CONFIGURATION" value="false" />
- <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
- <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
- <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
- <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
- </configuration>
- </facet>
- </component>
- <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
- <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
- <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
- <exclude-output />
- <content url="file://$MODULE_DIR$">
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
- <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
- <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
- <excludeFolder url="file://$MODULE_DIR$/build/android-profile" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
- <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
- <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
- <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
- </content>
- <orderEntry type="jdk" jdkName="Android API 26 Platform" jdkType="Android SDK" />
- <orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="library" exported="" name="support-core-ui-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="runner-0.5" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="espresso-idling-resource-2.2.2" level="project" />
- <orderEntry type="library" exported="" name="support-fragment-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" name="constraint-layout-1.0.2" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="hamcrest-library-1.3" level="project" />
- <orderEntry type="library" exported="" name="support-v4-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" name="support-media-compat-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="hamcrest-integration-1.3" level="project" />
- <orderEntry type="library" exported="" name="jsch-0.1.54" level="project" />
- <orderEntry type="library" exported="" name="design-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="jsr305-2.0.1" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="espresso-core-2.2.2" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="exposed-instrumentation-api-publish-0.5" level="project" />
- <orderEntry type="library" exported="" name="support-core-utils-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="rules-0.5" level="project" />
- <orderEntry type="library" exported="" name="constraint-layout-solver-1.0.2" level="project" />
- <orderEntry type="library" exported="" name="transition-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" name="support-vector-drawable-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="javax.annotation-api-1.2" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="javax.inject-1" level="project" />
- <orderEntry type="library" exported="" name="appcompat-v7-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="javawriter-2.1.1" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="hamcrest-core-1.3" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="junit-4.12" level="project" />
- <orderEntry type="library" exported="" name="recyclerview-v7-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" name="support-compat-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" name="support-annotations-26.0.0-alpha1" level="project" />
- <orderEntry type="library" exported="" name="animated-vector-drawable-26.0.0-alpha1" level="project" />
- </component>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<module external.linked.project.id="lede-gui" 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=":" />\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" />\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_7">\r
+ <output url="file://$MODULE_DIR$/build/intermediates/classes/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/r/debug" isTestSource="false" generated="true" />\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" />\r
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />\r
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" 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" />\r
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />\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/android-profile" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/outputs" />\r
+ <excludeFolder url="file://$MODULE_DIR$/build/tmp" />\r
+ </content>\r
+ <orderEntry type="jdk" jdkName="Android API 26 Platform" jdkType="Android SDK" />\r
+ <orderEntry type="sourceFolder" forTests="false" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test:exposed-instrumentation-api-publish-0.5" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-media-compat-26.1.0" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="junit:junit:4.12@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:appcompat-v7-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="android.arch.lifecycle:common:1.0.0@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:recyclerview-v7-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-fragment-26.1.0" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="javax.inject:javax.inject:1@jar" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.squareup:javawriter:2.1.1@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="android.arch.lifecycle:runtime-1.0.0" level="project" />\r
+ <orderEntry type="library" exported="" name="__local_jars__:C.\Users\Brian\Desktop\lede gui\lede-gui\libs\jsch-0.1.54.jar:unspecified@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:design-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-annotations:26.1.0@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support.constraint:constraint-layout-solver:1.0.2@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-core-utils-26.1.0" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support.constraint:constraint-layout-1.0.2" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-core-ui-26.1.0" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-vector-drawable-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:animated-vector-drawable-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="org.hamcrest:hamcrest-core:1.3@jar" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-compat-26.1.0" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test.espresso:espresso-core-2.2.2" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test:rules-0.5" level="project" />\r
+ <orderEntry type="library" exported="" name="android.arch.core:common:1.0.0@jar" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="org.hamcrest:hamcrest-library:1.3@jar" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="org.hamcrest:hamcrest-integration:1.3@jar" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test:runner-0.5" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:support-v4-26.1.0" level="project" />\r
+ <orderEntry type="library" exported="" name="com.android.support:transition-26.0.0-alpha1" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="com.android.support.test.espresso:espresso-idling-resource-2.2.2" level="project" />\r
+ <orderEntry type="library" exported="" scope="TEST" name="javax.annotation:javax.annotation-api:1.2@jar" level="project" />\r
+ </component>\r
</module>
\ No newline at end of file
+++ /dev/null
-## This file is automatically generated by Android Studio.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must *NOT* be checked into Version Control Systems,
-# as it contains information specific to your local configuration.
-#
-# Location of the SDK. This is only used by Gradle.
-# For customization when using a Version Control System, please read the
-# header note.
-#Wed Sep 20 12:05:53 PDT 2017
-sdk.dir=/home/rtrimana/Android/Sdk
\r
<application\r
android:allowBackup="true"\r
- android:icon="@mipmap/sentinel_icon"\r
+ android:icon="@mipmap/vigilia_icon"\r
android:label="@string/app_name"\r
android:roundIcon="@mipmap/ic_launcher_round"\r
android:supportsRtl="true"\r
<activity android:name=".MainActivity">\r
<intent-filter>\r
<action android:name="android.intent.action.MAIN" />\r
-\r
<category android:name="android.intent.category.LAUNCHER" />\r
</intent-filter>\r
</activity>\r
- <activity android:name=".EnrollDeviceActivity" />\r
+ <activity android:name=".RegisterDeviceLoading" />\r
<activity android:name=".ListActivity" />\r
<activity android:name=".ConfigActivity" />\r
- <activity android:name=".AddDeviceActivity" />\r
+ <activity android:name=".AllInstallOptions" />\r
+ <activity android:name=".InstallCommPattern" />\r
+ <activity android:name=".InstallTwoDevicesAndCommPattern" />\r
+ <activity android:name=".InstallAddress" />\r
+ <activity android:name=".InstallZigbeeDeviceAddress" />\r
+ <activity android:name=".InstallHost" />\r
+ <activity android:name=".UpdateLocalConfigFiles" />\r
+ <activity android:name=".RegistrationRouterCheck" />\r
+ <activity android:name=".ApplicationsList" />\r
+ <activity android:name=".HomeSecurity" />\r
+ <activity android:name=".Irrigation" />\r
+ <activity android:name=".Lifxtest" />\r
+ <activity android:name=".SmartLights" />\r
+ <activity android:name=".Speaker" />\r
+ <activity android:name=".DatabaseActivity" />\r
+ <activity android:name=".DriversSelectActivity" />\r
+ <activity android:name=".DriversAddActivity" />\r
+\r
+\r
+\r
+\r
+ <activity\r
+ android:name=".RegisterDeviceAdding"\r
+ android:windowSoftInputMode="adjustPan"/>\r
+ <activity\r
+ android:name=".AddDeviceActivity"\r
+ android:windowSoftInputMode="adjustPan"/>\r
<activity\r
android:name=".DeleteDeviceActivity"\r
android:label="@string/title_activity_delete_device"\r
<activity\r
android:name=".RelationActivity"\r
android:label="@string/title_activity_relation"\r
- android:theme="@style/AppTheme.NoActionBar"></activity>\r
+ android:theme="@style/AppTheme.NoActionBar"/>\r
</application>\r
\r
</manifest>
\ No newline at end of file
--- /dev/null
+IoTMain\r
+ID CM4\r
+TYPE Camera\r
+TYPESPECIFIC AmcrestCamera\r
+END\r
+\r
+Table 2\r
+USERNAME VARCHAR 20\r
+PASSWORD VARCHAR 20\r
+END\r
+\r
+Data\r
+admin\r
+55779CatSoundz35\r
+END
\ No newline at end of file
--- /dev/null
+10) delete address
\ No newline at end of file
--- /dev/null
+11) delete device address
\ No newline at end of file
--- /dev/null
+12) delete zigbee device addressS
\ No newline at end of file
--- /dev/null
+13) delete host
\ No newline at end of file
--- /dev/null
+CM4 AmcrestCameraCM4\r
+LB4 LifxLightBulbLB4\r
+WRITE
\ No newline at end of file
--- /dev/null
+3)install_two_devices_and_comm_pattern
\ No newline at end of file
--- /dev/null
+4)install_address.config\r
--- /dev/null
+ID=CM4\r
+ADDRESSFOR=AmcrestCameraAdd\r
+DEVICEADDRESS=ab:cd:ef:12:34:56\r
+PORTNUMBER=888\r
+PROTOCOL=udp\r
+SOURCEWILDCARD=false\r
+DESTWILDCARD=false\r
+END
\ No newline at end of file
--- /dev/null
+6)_install zigbee device address
\ No newline at end of file
--- /dev/null
+7)install host config
\ No newline at end of file
--- /dev/null
+8) delete entity
\ No newline at end of file
--- /dev/null
+9) delete comm pattern
\ No newline at end of file
+++ /dev/null
-CM4 AmcrestCameraCM4
-LB4 LifxLightBulbLB4
-WRITE
\ No newline at end of file
+++ /dev/null
-IoTMain
-ID CM4
-TYPE Camera
-TYPESPECIFIC AmcrestCamera
-END
-
-Table 2
-USERNAME VARCHAR 20
-PASSWORD VARCHAR 20
-END
-
-Data
-admin
-55779CatSoundz35
-END
\ No newline at end of file
+++ /dev/null
-ID=CM4
-ADDRESSFOR=AmcrestCameraAdd
-DEVICEADDRESS=ab:cd:ef:12:34:56
-PORTNUMBER=888
-PROTOCOL=udp
-SOURCEWILDCARD=false
-DESTWILDCARD=false
-END
\ No newline at end of file
--- /dev/null
+//insert sample address input
\ No newline at end of file
-package com.example.lede2;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.sql.*;
-
-
-public class AddDeviceActivity extends AppCompatActivity implements View.OnClickListener,View.OnFocusChangeListener {
-
- Button doneButton;
- TextView databaseInfo;
- TextView databaseAddressInfo;
- private SSH_MySQL ssh;//Connection object between Android & Host
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_add_device);
-
- doneButton = (Button) findViewById(R.id.doneButton);
- databaseInfo = (EditText)findViewById(R.id.textInfo);
- databaseAddressInfo = (EditText)findViewById(R.id.textInfoAddress);
-
- doneButton.setOnClickListener(this);
- databaseInfo.setOnFocusChangeListener(this);
- databaseAddressInfo.setOnFocusChangeListener(this);
- ssh = new SSH_MySQL();
- // Set config text from file for device
- try {
- InputStream is = getAssets().open(MainActivity.DEF_ADD_DEVICE_FILE);
- int size = is.available();
- byte[] buffer = new byte[size];
- is.read(buffer);
- is.close();
- String text = new String(buffer);
- databaseInfo.setGravity(Gravity.LEFT);
- databaseInfo.setText(text);
- Log.d("LOADINGFILE", "Add device info file is already loaded!");
- } catch (IOException ex) {
- Log.d("LOADINGFILE", "Add device info file is NOT loaded!");
- ex.printStackTrace();
- }
- // Set config text from file for device address
- try {
- InputStream is = getAssets().open(MainActivity.DEF_ADD_DEVICE_ADDRESS_FILE);
- int size = is.available();
- byte[] buffer = new byte[size];
- is.read(buffer);
- is.close();
- String text = new String(buffer);
- databaseAddressInfo.setGravity(Gravity.LEFT);
- databaseAddressInfo.setText(text);
- Log.d("LOADINGFILE", "Add device address info file is already loaded!");
- } catch (IOException ex) {
- Log.d("LOADINGFILE", "Add device address info file is NOT loaded!");
- ex.printStackTrace();
- }
-
- }
-
- @Override
- public void onClick(View v) {
- if(v == doneButton){
- // 1) Create a new file and insert the configuration
- // 2) Run iotinstaller code for device installation
- // 3) Remove the existing config file
- // 4) Repeat 1, 2, and 3 for device address
- ssh.execute("echo \"" + databaseInfo.getText().toString() + "\" >> " +
- MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +
- MainActivity.DEF_INSTALL_CMD + " " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +
- "rm -rf " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +
- // repeat process for device address
- "echo \"" + databaseAddressInfo.getText().toString() + "\" >> " +
- MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +
- MainActivity.DEF_INSTALL_ADDRESS_CMD + " " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +
- "rm -rf " + MainActivity.DEF_MYSQL_CONFIG_FILE);
- finish();
- }
- }
-
- @Override
- public void onFocusChange(View view, boolean hasFocus) {
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- if (hasFocus) {
- imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
- } else {
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
- }
- }
-}
+package com.example.lede2;\r
+\r
+import android.app.ActivityManager;\r
+import android.app.ProgressDialog;\r
+import android.content.Context;\r
+import android.os.AsyncTask;\r
+import android.os.Bundle;\r
+import android.os.Handler;\r
+import android.support.design.widget.Snackbar;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+import android.view.View;\r
+import android.view.WindowManager;\r
+import android.view.inputmethod.InputMethodManager;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.EditText;\r
+import android.widget.ProgressBar;\r
+import android.widget.Spinner;\r
+import android.widget.TextView;\r
+import android.widget.Toast;\r
+\r
+import java.io.File;\r
+import java.nio.file.FileAlreadyExistsException;\r
+import java.text.CollationElementIterator;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+\r
+public class AddDeviceActivity extends AppCompatActivity implements View.OnClickListener,View.OnFocusChangeListener {\r
+\r
+ DatabaseObject databaseObject;\r
+ //DatabaseSubtypeObject databaseSubtypeObject;\r
+ Button doneButton;\r
+ EditText databaseInfo;\r
+ Spinner spinner1;\r
+ Spinner spinner2;\r
+ Spinner spinner3;\r
+ Spinner spinner4;\r
+ ProgressBar progressBar;\r
+ private ArrayAdapter subtypeAdapter;\r
+ private ArrayAdapter paramAdapter;\r
+ private ArrayAdapter fieldAdapter;\r
+ String lastParamChosen;\r
+ TextView databaseAddressInfo;\r
+ protected String database_information_filename;\r
+ protected String id_information_filename;\r
+ Context context;\r
+ HashMap<String, String> userInputs;\r
+ ProgressDialog dialog;\r
+\r
+\r
+ private SSH_MySQL ssh;//Connection object between Android & Host\r
+\r
+ @Override\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.activity_add_device);\r
+\r
+\r
+ doneButton = (Button) findViewById(R.id.doneButton);\r
+ spinner1 = (Spinner) findViewById(R.id.spinner1);\r
+ spinner2 = (Spinner) findViewById(R.id.spinner2);\r
+ spinner3 = (Spinner) findViewById(R.id.spinner3);\r
+ spinner4 = (Spinner) findViewById(R.id.spinner4);\r
+ databaseInfo = (EditText)findViewById(R.id.textInfo);\r
+ progressBar = (ProgressBar)findViewById(R.id.progressBar);\r
+ progressBar.setVisibility(View.INVISIBLE);\r
+ progressBar.setMax(10);\r
+ //databaseAddressInfo = (EditText)findViewById(R.id.textInfoAddress);\r
+ database_information_filename = this.getString(R.string.device_param_config_filename);\r
+ id_information_filename = this.getString(R.string.device_id_config_filename);\r
+ userInputs = new HashMap<String, String>();\r
+ context = this;\r
+ lastParamChosen = "";\r
+\r
+ //looks through database to see possible subtypes for dropdown box 2\r
+ spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ //set spinner2 values = subtypes of type chosen for spinner 1\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+\r
+ String selectedType = spinner1.getSelectedItem().toString();\r
+ Set<String> keysForSubType = (databaseObject.getTypeObject(selectedType)).getKeySet();\r
+ ArrayList<String> subtypes = new ArrayList<String>();\r
+ for(String key: keysForSubType){\r
+ subtypes.add(key);\r
+ }\r
+ Collections.sort(subtypes);\r
+ subtypeAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, subtypes);\r
+ subtypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ spinner2.setAdapter(subtypeAdapter);\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+ spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ //set spinner 3 values based on if the selected subtype has params and/or addressparams\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+\r
+ ArrayList<String> paramType = new ArrayList<String>();\r
+ if(subtypeObject.getParams().size() > 0){\r
+ paramType.add("Device");\r
+ }\r
+ if(subtypeObject.getAddressParams().size() > 0){\r
+ paramType.add("Address");\r
+ }\r
+ if(subtypeObject.getZigbeeAddressParams().size()>0){\r
+ paramType.add("Zigbee");\r
+ }\r
+ //if both empty(example room)\r
+ if(subtypeObject.getAddressParams().size() == 0 && subtypeObject.getParams().size() == 0){\r
+ paramType.add("No Device or Address Parameters");\r
+ }\r
+ Collections.sort(paramType);\r
+ paramAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, paramType);\r
+ spinner3.setAdapter(paramAdapter);\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+ spinner3.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ //set spinner 4 value based on spinner1-3 values (actual params)\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ List<String> keysForSubType = new ArrayList<>();\r
+ //for devices that have no fields ex Rooms\r
+ if(spinner3.getSelectedItem().toString().equals("No Device or Address Parameters")) {\r
+ keysForSubType.add("No Fields");\r
+\r
+ databaseInfo.setVisibility(View.GONE);\r
+ }\r
+ if(spinner3.getSelectedItem().toString().equals("Device")) {\r
+ databaseInfo.setVisibility(View.VISIBLE);\r
+ if(subtypeObject.getNumParams() > 0){\r
+ //add only params that have USER value\r
+ ArrayList<Pair<String, String>> tempList = subtypeObject.getParams();\r
+ for(int j = 0; j < tempList.size(); j++){\r
+ if(tempList.get(j).second.equals("USER")){\r
+ keysForSubType.add(tempList.get(j).first);\r
+ }\r
+ }\r
+\r
+ }\r
+ }\r
+ else if(spinner3.getSelectedItem().toString().equals("Zigbee")){\r
+ //setting field name for zigbee\r
+ databaseInfo.setVisibility(View.VISIBLE);\r
+ keysForSubType.add("DEVICEADDRESS");\r
+ }\r
+ else{\r
+ //if selected value is address\r
+ if(subtypeObject.getNumAddressParams() > 0){\r
+ databaseInfo.setVisibility(View.VISIBLE);\r
+ //add only params that have USER value\r
+ ArrayList<ArrayList<Pair<String, String>>> tempList = subtypeObject.getAddressParams();\r
+ for(int j = 0; j < tempList.size(); j++){\r
+ for(int k = 0; k < tempList.get(j).size(); k++){\r
+ if(tempList.get(j).get(k).second.equals("USER")){\r
+ if(!keysForSubType.contains(tempList.get(j).get(k).first)) {\r
+ keysForSubType.add(tempList.get(j).get(k).first);\r
+ }\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+ }\r
+ }\r
+ //List<String> keysForSubType = (databaseObject.getTypeObject(selectedType)).getSubtypeObject(selectedSubtype).getParams();\r
+\r
+ ArrayList<String> params = new ArrayList<String>();\r
+ for(String key: keysForSubType){\r
+ params.add(key);\r
+ }\r
+ Collections.sort(params);\r
+ fieldAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, params);\r
+ fieldAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ spinner4.setAdapter(fieldAdapter);\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+ spinner4.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ //saves user input into a hashmap that is used later to create ssh command\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+\r
+ if(!spinner3.getSelectedItem().toString().equals("No Device or Address Parameters")) {\r
+ if (lastParamChosen.equals("")) {\r
+ lastParamChosen = spinner2.getSelectedItem().toString() + spinner3.getSelectedItem().toString() + spinner4.getSelectedItem().toString();\r
+\r
+ } else {\r
+ String enteredText = databaseInfo.getText().toString();\r
+ userInputs.put(lastParamChosen, enteredText);\r
+ String currentSelections = spinner2.getSelectedItem().toString() + spinner3.getSelectedItem().toString() + spinner4.getSelectedItem().toString();\r
+ if (!userInputs.containsKey(currentSelections)) {\r
+ userInputs.put(currentSelections, "");\r
+ }\r
+ databaseInfo.setText(userInputs.get(currentSelections));\r
+ lastParamChosen = currentSelections;\r
+ }\r
+ }\r
+ else{\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+ doneButton.setOnClickListener(this);\r
+ // Set config text from file for device\r
+ //pull information from config file and uses it to generate main database object\r
+\r
+ String idInformation = ConfigFileIO.readFromFile(id_information_filename, this);\r
+ databaseObject = ConfigFileIO.createDatabaseObject(this, idInformation );\r
+\r
+\r
+\r
+ //ConfigFileIO.printDatabaseObject(databaseObject);\r
+ Set<String> keysForType = databaseObject.getKeySet();\r
+ ArrayList<String> types = new ArrayList<String>();\r
+ for(String key: keysForType){\r
+ types.add(key);\r
+ }\r
+ //sets value for spinner 1\r
+ Collections.sort(types);\r
+ ArrayAdapter typeAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, types);\r
+ typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ spinner1.setAdapter(typeAdapter);\r
+\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ if(v == doneButton){\r
+ String enteredText = databaseInfo.getText().toString();\r
+ //combines user input into a command for the pi\r
+ String keyForUserInput = spinner2.getSelectedItem().toString() + spinner3.getSelectedItem().toString() + spinner4.getSelectedItem().toString();\r
+ userInputs.put(keyForUserInput, enteredText);\r
+ if(!sufficientEntries()) {\r
+ Snackbar done = Snackbar.make(findViewById(R.id.done),\r
+ "Please Enter all required fields for selected device type", 2000);\r
+ done.show();\r
+ }\r
+ else {\r
+ Snackbar done = Snackbar.make(findViewById(R.id.done), "Updating IoTDeviceAddress.config", 2000);\r
+ done.show();\r
+ progressBar.setVisibility(View.VISIBLE);\r
+ doneButton.setAlpha(.5f);\r
+ doneButton.setClickable(false);\r
+\r
+\r
+\r
+\r
+\r
+ String sqlCommand = generateSQLCommand();\r
+ System.out.println(sqlCommand);\r
+ Log.d("sqlcommand", sqlCommand);\r
+ System.out.println("");\r
+\r
+ ssh = new SSH_MySQL();\r
+ ssh.execute(sqlCommand);\r
+ try {\r
+ Thread.sleep(1000);\r
+ List<String> result = ssh.getResultLines();\r
+ for (int i = 0; i < result.size(); i++) {\r
+ System.out.println("result" + result.get(i));\r
+ }\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ updateDatabase();\r
+\r
+ updateIoTDeviceAddress();\r
+// done = Snackbar.make(findViewById(R.id.done),\r
+// "Updating SetList.config", 2000);\r
+// done.show();\r
+ updateSetList();\r
+ finish();\r
+ }\r
+ }\r
+ }\r
+ //determines if all fields have been entered\r
+ public boolean sufficientEntries(){\r
+ boolean sufficient = true;\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ ArrayList<Pair<String, String>> params = subtypeObject.getParams();\r
+ ArrayList<ArrayList<Pair<String, String>>> addressParams = subtypeObject.getAddressParams();\r
+ ArrayList<ArrayList<Pair<String, String>>> zigbeeAddressParams = subtypeObject.getZigbeeAddressParams();\r
+ if(spinner3.getSelectedItem().toString().equals("No Device or Address Parameters")) {\r
+ return true;\r
+ }\r
+ if(params.size()>0){\r
+ for(int i = 0; i < params.size(); i++){\r
+ if(!params.get(i).second.equals("USER")){\r
+ continue;\r
+ }\r
+ if(!userInputs.containsKey(spinner2.getSelectedItem().toString() + "Device" + params.get(i).first) ||\r
+ userInputs.get(spinner2.getSelectedItem().toString() + "Device" + params.get(i).first).equals("")){\r
+ sufficient = false;\r
+ }\r
+ }\r
+ }\r
+ if(addressParams.size()>0){\r
+ for(int i = 0; i < addressParams.size(); i++){\r
+ for(int j = 0;j < addressParams.get(i).size(); j++) {\r
+ if(!addressParams.get(i).get(j).second.equals("USER")){\r
+ continue;\r
+ }\r
+ if (!userInputs.containsKey(spinner2.getSelectedItem().toString() + "Address" + addressParams.get(i).get(j).first) ||\r
+ userInputs.get(spinner2.getSelectedItem().toString() + "Address" + addressParams.get(i).get(j).first).equals("")) {\r
+ sufficient = false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if(zigbeeAddressParams.size()>0){\r
+ for(int i = 0; i < zigbeeAddressParams.size(); i++){\r
+ for(int j = 0;j < zigbeeAddressParams.get(i).size(); j++) {\r
+ if(!zigbeeAddressParams.get(i).get(j).second.equals("USER")){\r
+ continue;\r
+ }\r
+ if (!userInputs.containsKey(spinner2.getSelectedItem().toString() + "Zigbee" + zigbeeAddressParams.get(i).get(j).first) ||\r
+ userInputs.get(spinner2.getSelectedItem().toString() + "Zigbee" + zigbeeAddressParams.get(i).get(j).first).equals("")) {\r
+ sufficient = false;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return sufficient;\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean hasFocus) {\r
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\r
+ if (hasFocus) {\r
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\r
+ } else {\r
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\r
+ }\r
+ }\r
+ //generates command for adding both device and address device. May need to expand for zigbee\r
+ public String generateSQLCommand(){\r
+ String command = "";\r
+ String paramInfo = "";\r
+ String addressParamInfo = "";\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ int numAddresses = subtypeObject.getNumAddresses();\r
+ int numZigbeeAddresses = subtypeObject.getNumZigbeeAddresses();\r
+ // 1) Create a new file and insert the configuration\r
+ // 2) Run iotinstaller code for device installation\r
+ // 3) Remove the existing config file\r
+ // 4) Repeat 1, 2, and 3 for device address\r
+ command += "echo \"" + generateDevFields() + "\" >> " +\r
+ MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +\r
+ MainActivity.DEF_INSTALL_CMD + " " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +\r
+ "rm -rf " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";";\r
+ // repeat process for device address\r
+ for(int i = 0; i <numAddresses; i++ ) {\r
+ boolean multiple = true;\r
+ if(numAddresses == 1){\r
+ multiple = false;\r
+ }\r
+ command += "echo \"" + generateAddressFields(i, multiple) + "\" >> " +\r
+ MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +\r
+ MainActivity.DEF_INSTALL_ADDRESS_CMD + " " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";"\r
+ + "rm -rf " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";";\r
+ }\r
+ for(int i = 0; i < numZigbeeAddresses; i++){\r
+ boolean multiple = true;\r
+ if(numZigbeeAddresses == 1){\r
+ multiple = false;\r
+ }\r
+ command += "echo \"" + generateZigBeeAddressFields(i, multiple) + "\" >> " +\r
+ MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +\r
+ MainActivity.DEF_INSTALL_ZBADDRESS_CMD + " " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";"\r
+ + "rm -rf " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";";\r
+ }\r
+\r
+ return command;\r
+\r
+ }\r
+ //specific device information to be inserted into the sql command. follows format seen in config file on pi\r
+ public String generateDevFields(){\r
+ String fields = "";\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ //IotMain Table\r
+ fields += context.getResources().getString(R.string.database_name) + "\n"\r
+ + "ID " + subtypeObject.getNextID() + "\n"\r
+ + "TYPE " + spinner1.getSelectedItem().toString()+ "\n"\r
+ + "TYPESPECIFIC " + spinner2.getSelectedItem().toString()+ "\n"\r
+ + "END" + "\n\n";\r
+ //This sets up the param types and size. special case for devices with no params\r
+ if(subtypeObject.getNumParams() == 0){\r
+ fields += "Table 1" + "\n"\r
+ + "EMPTY VARCHAR 0 " + "\n";\r
+ }\r
+\r
+ //Case for when there are params\r
+ else {\r
+ fields += "Table " + subtypeObject.getNumParams() + "\n";\r
+ }\r
+ ArrayList<Pair<String,String>> params = subtypeObject.getParams();\r
+ for(int i = params.size()-1; i >= 0; i--){\r
+ fields += params.get(i).first + " VARCHAR 20 \n";\r
+ }\r
+ fields += "END\n\n";\r
+ //data for params\r
+ fields += "Data \n";\r
+ for(int i = params.size()-1; i >= 0; i--){\r
+ fields += userInputs.get(spinner2.getSelectedItem().toString() +\r
+ "Device" +\r
+ params.get(i).first) + "\n";\r
+ }\r
+ fields += "END\n\n";\r
+ return fields;\r
+ }\r
+\r
+\r
+ //refactor with string builder but works for now\r
+ public String generateAddressFields(int i, boolean multiple){\r
+ String fields = "";\r
+ String addressNumber = "";\r
+ if(multiple){\r
+ addressNumber = Integer.toString(i+1);\r
+ }\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ fields += "ID=" + subtypeObject.getNextID() + "\n" ;\r
+ fields += "ADDRESSFOR=" + subtypeObject.getName()+ "Add"+ addressNumber + "\n" ;\r
+ ArrayList<ArrayList<Pair<String,String>>> addressParams = subtypeObject.getAddressParams();\r
+ String currentAddressParam = "";\r
+ for(int j = 0; j <addressParams.get(i).size(); j++) {\r
+ //if the value for current address parameter is user, use the input values\r
+ if(addressParams.get(i).get(j).second.equals("USER")){\r
+ currentAddressParam = addressParams.get(i).get(j).first;\r
+ fields += currentAddressParam + "=" + userInputs.get(spinner2.getSelectedItem().toString() + "Address" + currentAddressParam) + "\n";\r
+ }\r
+ //if the value for the current address is not user, use the predefined values\r
+ else{\r
+ currentAddressParam = addressParams.get(i).get(j).first;\r
+ fields += currentAddressParam + "=" + addressParams.get(i).get(j).second + "\n";\r
+ }\r
+ }\r
+ fields += "END\n\n";\r
+ return fields;\r
+ }\r
+ public String generateZigBeeAddressFields(int i , boolean multiple){\r
+ String fields = "";\r
+ String addressNumber = "";\r
+ if(multiple){\r
+ addressNumber = Integer.toString(i+1);\r
+ }\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ fields += "ID=" + subtypeObject.getNextID() + "\n" ;\r
+ fields += "ADDRESSFOR=" + subtypeObject.getName()+ "ZBAdd"+ addressNumber + "\n" ;\r
+ ArrayList<ArrayList<Pair<String,String>>> zigbeeAddressParams = subtypeObject.getZigbeeAddressParams();\r
+ String currentAddressParam = "";\r
+ for(int j = 0; j < zigbeeAddressParams.get(i).size(); j++) {\r
+ //if the value for current address parameter is user, use the input values\r
+ if(zigbeeAddressParams.get(i).get(j).second.equals("USER")){\r
+ currentAddressParam = zigbeeAddressParams.get(i).get(j).first;\r
+ fields += currentAddressParam + "=" + userInputs.get(spinner2.getSelectedItem().toString() + "Zigbee" + currentAddressParam) + "\n";\r
+ }\r
+ //if the value for the current address is not user, use the predefined values\r
+ else{\r
+ currentAddressParam = zigbeeAddressParams.get(i).get(j).first;\r
+ fields += currentAddressParam + "=" + zigbeeAddressParams.get(i).get(j).second + "\n";\r
+ }\r
+ }\r
+ fields += "END\n\n";\r
+ return fields;\r
+ }\r
+\r
+ //update local database object and local database config file\r
+ public void updateDatabase(){\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ String deviceID = subtypeObject.getName() + " " + subtypeObject.getNextID() + "\n";\r
+ ConfigFileIO.writeToFile(id_information_filename, deviceID, this);\r
+ subtypeObject.insertID();\r
+ }\r
+ private void updateSetList(){\r
+ SSH_MySQL ssh = new SSH_MySQL();\r
+ String command = this.getString(R.string.updateSetList);\r
+ List<String> results = new ArrayList<>();\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ try {\r
+ ssh.execute(command);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = ssh.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+ }\r
+ private void updateIoTDeviceAddress(){\r
+ SSH_MySQL ssh = new SSH_MySQL();\r
+ String command = this.getString(R.string.updateIoTDeviceAddress);\r
+ List<String> results = new ArrayList<>();\r
+ String iotDeviceAddressFilename = this.getString(R.string.updateIoTDeviceAddress);\r
+ try {\r
+ ssh.execute(command);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = ssh.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+\r
+ }\r
+\r
+ protected void addSSHResultsToConfig(List<String> results, String filename) {\r
+ ConfigFileIO.writeToNewFile(filename,"", this );\r
+ File dir = getFilesDir();\r
+ File file = new File(dir, filename);\r
+ file.delete();\r
+ for (int i = 0; i < results.size(); i++) {\r
+ ConfigFileIO.writeToFile(filename, results.get(i), this);\r
+ }\r
+ }\r
+\r
+\r
+ public DatabaseSubtypeObject getCurrentSubtypeObject(){\r
+ return databaseObject.getTypeObject(spinner1.\r
+ getSelectedItem().toString()).getSubtypeObject(spinner2.getSelectedItem().toString());\r
+ }\r
+\r
+\r
+ public class Progress extends AsyncTask<Void, Integer, Void> {\r
+ boolean finished;\r
+\r
+\r
+ @Override\r
+ protected void onPreExecute() {\r
+ super.onPreExecute();\r
+\r
+ Log.d("progress", "after dialog.show");\r
+ }\r
+\r
+ @Override\r
+ protected Void doInBackground(Void... voids) {\r
+ for(int i = 0; i < 10; i++){\r
+ try {\r
+ Thread.sleep(100);\r
+ publishProgress(i);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ protected void onPostExecute(Void aVoid) {\r
+ super.onPostExecute(aVoid);\r
+\r
+ }\r
+\r
+ @Override\r
+ protected void onProgressUpdate(Integer... values) {\r
+ super.onProgressUpdate(values);\r
+ progressBar.setProgress(values[0]);\r
+ }\r
+\r
+\r
+\r
+\r
+ public void finished(){\r
+\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.util.Log;\r
+import android.view.View;\r
+import android.view.inputmethod.InputMethodManager;\r
+import android.widget.Button;\r
+\r
+/**\r
+ * Created by Brian on 2/16/2018.\r
+ */\r
+\r
+public class AllInstallOptions extends AppCompatActivity implements View.OnClickListener,\r
+ View.OnFocusChangeListener {\r
+ Button installOneDeviceButton;\r
+ Button installCommPatternButton;\r
+ Button installTwoDevicesAndCommPattern;\r
+ Button installAddress;\r
+ Button installDeviceAddress;\r
+ Button installZigbeeDeviceAddress;\r
+ Button installHost;\r
+\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.install_options);\r
+\r
+ installOneDeviceButton = (Button) findViewById(R.id.doneDrivers);\r
+ installZigbeeDeviceAddress = (Button) findViewById(R.id.install_zigbee_device_address);\r
+ installOneDeviceButton.setOnClickListener(this);\r
+ installZigbeeDeviceAddress.setOnClickListener(this);\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+ if (view == installOneDeviceButton) {\r
+ Log.d("CLICKING", "Clicking on add device!");\r
+ startActivity(new Intent(this, AddDeviceActivity.class));\r
+ }\r
+ if (view == installZigbeeDeviceAddress) {\r
+ Log.d("CLICKING", "Clicking on install zigbee!");\r
+ startActivity(new Intent(this, InstallZigbeeDeviceAddress.class));\r
+ }\r
+\r
+ }\r
+\r
+ public void onFocusChange(View view, boolean hasFocus) {\r
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\r
+ if (hasFocus) {\r
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\r
+ } else {\r
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.app.ProgressDialog;\r
+import android.content.Context;\r
+import android.support.design.widget.Snackbar;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+import android.util.SparseBooleanArray;\r
+import android.view.View;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.ListView;\r
+import android.widget.Spinner;\r
+import android.widget.Toast;\r
+\r
+import com.jcraft.jsch.HASH;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Scanner;\r
+import java.util.Set;\r
+\r
+\r
+/**\r
+ * Created by Brian on 4/27/2018.\r
+ */\r
+\r
+public class ApplicationWithRelations extends AppCompatActivity implements View.OnClickListener {\r
+ protected HashMap<String, ArrayList<String>> addedSetList; //list of sets that is currently being added and their values\r
+ protected int numFields;\r
+ protected Properties prop;\r
+ protected HashMap<String, HashSet<Pair<String, String>>> addedRelations;\r
+ protected HashMap<String, HashSet<String>> addedIndependentSets;\r
+ protected Context context;\r
+ protected HashMap<String, Pair<String, String>> relations;\r
+ protected HashMap<String, String> setHashMap;\r
+ protected Spinner relationNameSpinner;\r
+ protected Spinner relationLeftSpinner;\r
+ protected Spinner relationRightSpinner;\r
+ protected Spinner setOrRelationSpinner;\r
+ protected Button addRelationButton;\r
+ protected Button doneRelationButton;\r
+ protected Button deleteRelationButton;\r
+ protected HashMap<String, String> independentSetList;\r
+ protected ArrayList<String> independentSetNames;\r
+ protected boolean hasIndependentSets;\r
+ protected boolean hasRelations;\r
+ ArrayList addedRelationsArrayList;\r
+ ProgressDialog dialog;\r
+ protected Scanner scanner;\r
+ ArrayAdapter adapter;\r
+ ListView addRelationsListView;\r
+ protected HashSet<String> applicationSetList; //list of all sets that should be used\r
+\r
+\r
+\r
+\r
+ protected void deleteFromSet(String device){\r
+ Set<String> keyset = addedSetList.keySet();\r
+ for(String s: keyset){\r
+ ArrayList<String> tempSet = addedSetList.get(s);\r
+ tempSet.remove(device);\r
+ }\r
+ }\r
+\r
+ protected void addSSHResultsToConfig(List<String> results, String filename) {\r
+ ConfigFileIO.writeToNewFile(filename,"", this );\r
+ File dir = getFilesDir();\r
+ File file = new File(dir, filename);\r
+ file.delete();\r
+ for (int i = 0; i < results.size(); i++) {\r
+ ConfigFileIO.writeToFile(filename, results.get(i), this);\r
+ }\r
+ }\r
+\r
+ protected void callSSHCommandAddComm(){\r
+ //default already in bin/installer (RELATION)\r
+ String installCommPatternCommand = "";\r
+ for(int i = 0; i < numFields; i++){\r
+ if(prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")){\r
+ String writeToRelConfigFileCommand = "";\r
+ writeToRelConfigFileCommand += this.getString(R.string.changeToSQLConfigFileLocation);\r
+\r
+ String filename = prop.getProperty("FIELD_CONFIG_FILENAME_"+i);\r
+ HashSet<Pair<String,String>> tempSet = addedRelations.get(prop.getProperty("FIELD_" + i));\r
+\r
+ //insert roomCameraReal.config writing\r
+ writeToRelConfigFileCommand += "echo \"" + "SELECT RELATION FROM\n"+\r
+ "FIRST\n" +\r
+ prop.getProperty("FIELD_CLASS_0_" + i) + "\n" +\r
+ "OTHER\n" +\r
+ prop.getProperty("FIELD_CLASS_1_" + i) + "\n" +\r
+ "WHERE\n"; //need to add where clauses for each case\r
+ int counter = 0;\r
+ //iterates through all of the added relations under the current relationName\r
+ //ex all relations under roomCameraRel\r
+ for(Pair<String, String> pair: tempSet){\r
+ int size = tempSet.size();\r
+ Scanner scanner = new Scanner(pair.first);\r
+ String typeFirst = scanner.next();\r
+ String idFirst = scanner.next();\r
+ typeFirst += idFirst;\r
+ scanner = new Scanner(pair.second);\r
+ String typeSecond = scanner.next();\r
+ String idSecond = scanner.next();\r
+ typeSecond += idSecond;\r
+\r
+ writeToRelConfigFileCommand += "(TYPE_SOURCE='" + typeFirst + "' AND TYPE_DESTINATION='" + typeSecond + "')";\r
+\r
+\r
+ installCommPatternCommand += this.getString(R.string.changeToCommConfigFileLocation) + "echo \"" + idFirst + " " + typeFirst + "\n" +\r
+ idSecond + " " + typeSecond + "\n" +\r
+ "WRITE\" > " + filename + ";" +\r
+ "java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -install_comm " + filename + ";" +\r
+ "rm " + filename + ";";\r
+\r
+ //if this is the last item, finish it by writing it into file\r
+ if(counter == size-1){\r
+ writeToRelConfigFileCommand += "\n;\" > " + prop.getProperty("FIELD_" + i) + ".config; \n";\r
+ installCommPatternCommand = writeToRelConfigFileCommand + installCommPatternCommand;\r
+ System.out.println("COMM" + installCommPatternCommand);\r
+ }\r
+\r
+ //if it is not the last item, concatenate or and continue\r
+ else{\r
+ writeToRelConfigFileCommand += "\nOR\n";\r
+ System.out.println(installCommPatternCommand);\r
+ }\r
+\r
+ SSH_MySQL ssh_mySQL = new SSH_MySQL();\r
+ List<String> results = new ArrayList<>();\r
+ try {\r
+ ssh_mySQL.execute(installCommPatternCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = ssh_mySQL.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh_mySQL.getResultLines();\r
+ System.out.println(results);\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+ installCommPatternCommand = "";\r
+ counter++;\r
+ }\r
+\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ protected HashMap<String, ArrayList<String>> createSetList(String filename){\r
+ HashMap<String, ArrayList<String>> setListHashMap = new HashMap<>();\r
+ String setData = ConfigFileIO.readFromFile(filename, context);\r
+ Scanner scanner = new Scanner(setData);\r
+ while (scanner.hasNextLine()){\r
+ String temp = scanner.nextLine();\r
+ if(temp.equals("START")){\r
+ String setName = scanner.nextLine();\r
+ temp = scanner.nextLine();\r
+ ArrayList<String> availableDevices = new ArrayList<>();\r
+ while (!temp.equals("END")){\r
+ availableDevices.add(temp);\r
+ temp = scanner.nextLine();\r
+ }\r
+ setListHashMap.put(setName, availableDevices);\r
+ }\r
+ }\r
+ return setListHashMap;\r
+ }\r
+\r
+\r
+ //relationofTwoItems comes in form of ex: RoomSmart,LightBulbSmart. Splits them by commma and adds them to hashmap\r
+ protected void addPair(String name, String relationOfTwoItems){\r
+ String firstItem = relationOfTwoItems.substring(0, relationOfTwoItems.indexOf(","));\r
+ String secondItem = relationOfTwoItems.substring(relationOfTwoItems.indexOf(",")+1, relationOfTwoItems.length());\r
+ Pair<String, String> pair = new Pair<>(firstItem, secondItem);\r
+ relations.put(name,pair);\r
+ }\r
+\r
+ protected ArrayList<String> removeDuplicates(ArrayList<String> list){\r
+ HashSet<String> set = new HashSet<>();\r
+ set.addAll(list);\r
+ ArrayList<String> noDups = new ArrayList<>();\r
+ noDups.addAll(set);\r
+ return noDups;\r
+ }\r
+ protected String generateSQLQuery(String setName, ArrayList<String> listOfDevices){\r
+ String query = "";\r
+ query = "SELECT * FROM\n" +\r
+ setName + "\n" +\r
+ "WHERE\n";\r
+ for(int i = 0; i < listOfDevices.size(); i++){\r
+ Scanner scanner = new Scanner(listOfDevices.get(i));\r
+ String type = scanner.next();\r
+ String id = scanner.next();\r
+ query += "(TYPE='" + type + "' AND ID='" + id + "')";\r
+ if(i == listOfDevices.size() -1){\r
+ query +="\n;";\r
+ }\r
+ else{\r
+ query += "\nOR\n";\r
+ }\r
+ }\r
+ return query;\r
+ }\r
+\r
+ protected String generateSSHCommandRelation(){\r
+ String command = "";\r
+ //move to directory where the sql file should be located (SET)\r
+ command += this.getString(R.string.changeToSQLConfigFileLocation);\r
+ //go through all sets, and find their set type.\r
+ Set<String> keySet = setHashMap.keySet();\r
+ for(String s: keySet){\r
+ String setType = setHashMap.get(s);\r
+ ArrayList<String> list = addedSetList.get(setType);\r
+ list = removeDuplicates(list);\r
+ command += "echo \"" + generateSQLQuery(setType, list) + "\" > " + s + ".config" + ";";\r
+ }\r
+\r
+ keySet = addedIndependentSets.keySet();\r
+ for(String s:keySet){\r
+ String setType = independentSetList.get(s);\r
+ ArrayList<String> list = new ArrayList<>();\r
+ HashSet<String> set = addedIndependentSets.get(s);\r
+ list.addAll(set);\r
+ command += "echo \"" + generateSQLQuery(setType, list) + "\" > " + s + ".config" + ";";\r
+ }\r
+\r
+ return command;\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+ if(view == addRelationButton){\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ //adding the user selected relation into a relationset\r
+ String leftValue = relationLeftSpinner.getSelectedItem().toString();\r
+ String rightValue = relationRightSpinner.getSelectedItem().toString();\r
+ Pair<String, String> pair = new Pair<>(leftValue, rightValue);\r
+ if ((addedRelations.get(relationNameSpinner.getSelectedItem().toString())) == null) {\r
+ HashSet<Pair<String, String>> tempSet = new HashSet<>();\r
+ tempSet.add(pair);\r
+ addedRelations.put(relationNameSpinner.getSelectedItem().toString(), tempSet);\r
+ adapter.notifyDataSetChanged();\r
+ } else {\r
+ (addedRelations.get(relationNameSpinner.getSelectedItem().toString())).add(pair);\r
+ adapter.notifyDataSetChanged();\r
+ }\r
+\r
+ //adding selected Objects into their respective sets\r
+ String relationName = relationNameSpinner.getSelectedItem().toString();\r
+ //get the left hand side of the generic selected relation\r
+ // ex: IoTRelation<RoomSmart, CameraSmart> roomCameraRel, get "RoomSmart"\r
+ Pair<String, String> tempPair = relations.get(relationName);\r
+ ArrayList<String> tempArrayList = addedSetList.get(tempPair.first);\r
+ //add the selected Left Value to RoomSmart set\r
+ if (tempArrayList == null) {\r
+ tempArrayList = new ArrayList<>();\r
+ tempArrayList.add(leftValue);\r
+ addedSetList.put(tempPair.first, tempArrayList);\r
+ } else {\r
+ tempArrayList.add(leftValue);\r
+ addedSetList.put(tempPair.first, tempArrayList);\r
+ }\r
+\r
+ //repeat for the right side\r
+ tempArrayList = addedSetList.get(tempPair.second);\r
+ //ex: add to the selected Right Value CameraSmart set\r
+ if (tempArrayList == null) {\r
+ tempArrayList = new ArrayList<>();\r
+ tempArrayList.add(rightValue);\r
+ addedSetList.put(tempPair.second, tempArrayList);\r
+ } else {\r
+ tempArrayList.add(rightValue);\r
+ addedSetList.put(tempPair.second, tempArrayList);\r
+ }\r
+ addedRelationsArrayList = new ArrayList<>();\r
+ Set<String> relationTypes = addedRelations.keySet();\r
+ for (String s : relationTypes) {\r
+ for (Pair<String, String> temp : addedRelations.get(s)) {\r
+ addedRelationsArrayList.add(temp.first + " " + temp.second);\r
+ }\r
+ }\r
+ if(hasIndependentSets){\r
+ Set<String> keys= addedIndependentSets.keySet();\r
+ for (String s : keys) {\r
+ for (String temp : addedIndependentSets.get(s)) {\r
+ addedRelationsArrayList.add(temp);\r
+ }\r
+ }\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+ }\r
+ else {\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+ }\r
+\r
+ }\r
+ else {\r
+ //user is adding to independent sets (sets that are not part of a relation)\r
+ String leftValue = relationLeftSpinner.getSelectedItem().toString();\r
+ if ((addedIndependentSets.get(relationNameSpinner.getSelectedItem().toString())) == null) {\r
+ HashSet<String> tempSet = new HashSet<>();\r
+ tempSet.add(leftValue);\r
+ addedIndependentSets.put(relationNameSpinner.getSelectedItem().toString(), tempSet);\r
+ adapter.notifyDataSetChanged();\r
+ } else {\r
+ (addedIndependentSets.get(relationNameSpinner.getSelectedItem().toString())).add(leftValue);\r
+ adapter.notifyDataSetChanged();\r
+ }\r
+ addedRelationsArrayList = new ArrayList<>();\r
+ Set<String> relationTypes = addedRelations.keySet();\r
+ for (String s : relationTypes) {\r
+ for (Pair<String, String> temp : addedRelations.get(s)) {\r
+ addedRelationsArrayList.add(temp.first + " " + temp.second);\r
+ }\r
+ }\r
+ Set<String> keys= addedIndependentSets.keySet();\r
+ for (String s : keys) {\r
+ for (String temp : addedIndependentSets.get(s)) {\r
+ addedRelationsArrayList.add(temp);\r
+ }\r
+ }\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+\r
+ }\r
+ }\r
+\r
+ if(view == doneRelationButton){\r
+\r
+ boolean allSetsHaveEntry = true;\r
+ for(String s: applicationSetList){\r
+ ArrayList<String> list = addedSetList.get(s);\r
+ if(list== null || list.size() == 0){\r
+ allSetsHaveEntry = false;\r
+ System.out.println("NOT ALL RELATIONS HAVE ENTRIES");\r
+ Toast t = Toast.makeText(ApplicationWithRelations.this, "Insufficient Entries",Toast.LENGTH_SHORT);\r
+ t.show();\r
+ continue;\r
+ }\r
+ }\r
+ if(hasIndependentSets) {\r
+ for (int i = 0; i < independentSetNames.size(); i++) {\r
+ if (addedIndependentSets.get(independentSetNames.get(i)) == null ||\r
+ (addedIndependentSets.get(independentSetNames.get(i))).size() == 0) {\r
+ allSetsHaveEntry = false;\r
+ System.out.println("NOT ALL SETS HAVE ENTRIES");\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ System.out.println("all sets have entry" + allSetsHaveEntry);\r
+ if(allSetsHaveEntry){\r
+\r
+ //the ssh execution is within the following command. Add comm patterns to database\r
+ callSSHCommandAddComm();\r
+\r
+ //adding relations and their derived sets, add to localconfig/mysql files\r
+ String command = generateSSHCommandRelation();\r
+ //System.out.println(command)\r
+ SSH_MySQL addConfigFiles = new SSH_MySQL();\r
+ addConfigFiles.execute(command);\r
+ try {\r
+ Thread.sleep(1500);\r
+ List<String> result = addConfigFiles.getResultLines();\r
+ for (int i = 0; i < result.size(); i++) {\r
+ System.out.println("result" + result.get(i));\r
+ }\r
+ }\r
+ catch (Exception e){\r
+ e.printStackTrace();\r
+ }\r
+\r
+\r
+\r
+\r
+ //add independent sets to their respective localconfig/mysql files\r
+ finish();\r
+ }\r
+\r
+ }\r
+ if (view == deleteRelationButton) {\r
+ //SparseBooleanArray's data is True or False\r
+ SparseBooleanArray checkedItems = addRelationsListView.getCheckedItemPositions();//to check which devices are checked in listview(check -> true, no check -> false)\r
+ int count = adapter.getCount();//number of items in listview\r
+ for (int i = count - 1; i >= 0; i--) {//scan from back\r
+ //i : index of IoT device which will be removed in tmp array\r
+ if (checkedItems.get(i)) {//if check\r
+ System.out.println("delete relation: " + i);\r
+ String selectedValue = (String)addRelationsListView.getItemAtPosition(i);\r
+ scanner = new Scanner(selectedValue);\r
+ String left = scanner.next() + " " + scanner.next();\r
+\r
+ if(scanner.hasNext()) {\r
+ String right = scanner.next() + " " + scanner.next();\r
+ Pair<String, String> pair = new Pair<>(left, right);\r
+ //remove from user-selected relations\r
+ Set<String> relationTypes = addedRelations.keySet();\r
+ for (String s : relationTypes) {\r
+ if (addedRelations.get(s).contains(pair)) {\r
+ addedRelations.get(s).remove(pair);\r
+ }\r
+ }\r
+ //remove from displaying on the check list\r
+ String temp = pair.first + " " + pair.second;\r
+ addedRelationsArrayList.remove(temp);\r
+ adapter.notifyDataSetChanged();\r
+ //remove from addedsetlist\r
+ deleteFromSet(left);\r
+ deleteFromSet(right);\r
+ }\r
+ else{\r
+ System.out.println("only has one word");\r
+ Set<String> keySet = addedIndependentSets.keySet();\r
+ for(String s: keySet){\r
+ HashSet<String> tempSet = addedIndependentSets.get(s);\r
+ tempSet.remove(left);\r
+ }\r
+ addedRelationsArrayList.remove(left);\r
+ adapter.notifyDataSetChanged();\r
+ }\r
+ }\r
+ }\r
+\r
+ //update\r
+ adapter.notifyDataSetChanged();\r
+ //delete checked mark in listview\r
+ addRelationsListView.clearChoices();\r
+\r
+ }\r
+\r
+ }\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.app.ProgressDialog;\r
+import android.content.Intent;\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.view.View;\r
+import android.widget.Button;\r
+\r
+/**\r
+ * Created by Brian on 4/16/2018.\r
+ */\r
+\r
+public class ApplicationsList extends AppCompatActivity implements View.OnClickListener {\r
+ private Button homeSecurityButton;\r
+ private Button irrigationButton;\r
+ private Button lifxTestButton;\r
+ private Button smartLightsButton;\r
+ private Button speakerButton;\r
+ private ProgressDialog dialog;\r
+\r
+ @Override\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.applications);\r
+ homeSecurityButton = (Button) findViewById(R.id.homeSecurityButton);\r
+ irrigationButton = (Button) findViewById(R.id.irrigationButton);\r
+ lifxTestButton = (Button) findViewById(R.id.lifxTestButton);\r
+ smartLightsButton = (Button) findViewById(R.id.smartLightsButton);\r
+ speakerButton = (Button) findViewById(R.id.speakerButton);\r
+\r
+ homeSecurityButton.setOnClickListener(this);\r
+ irrigationButton.setOnClickListener(this);\r
+ lifxTestButton.setOnClickListener(this);\r
+ smartLightsButton.setOnClickListener(this);\r
+ speakerButton.setOnClickListener(this);\r
+\r
+\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+ dialog = new ProgressDialog(this);\r
+ dialog.setMessage("Please Wait");\r
+ dialog.setCancelable(false);\r
+ dialog.setInverseBackgroundForced(false);\r
+ dialog.show();\r
+\r
+ if(view == homeSecurityButton){\r
+ startActivity(new Intent(this, HomeSecurity.class));\r
+ }\r
+ if(view == irrigationButton){\r
+ startActivity(new Intent(this, Irrigation.class));\r
+\r
+ }\r
+ if(view == lifxTestButton){\r
+ startActivity(new Intent(this, Lifxtest.class));\r
+\r
+ }\r
+ if(view == smartLightsButton){\r
+ startActivity(new Intent(this, SmartLights.class));\r
+\r
+ }\r
+ if(view == speakerButton){\r
+ startActivity(new Intent(this, Speaker.class));\r
+\r
+ }\r
+ }\r
+ @Override\r
+ protected void onResume() {\r
+ super.onResume();\r
+ if(dialog != null && dialog.isShowing()){\r
+ dialog.dismiss();\r
+ }\r
+ }\r
+}\r
+\r
+\r
+\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.provider.ContactsContract;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+\r
+import java.io.BufferedWriter;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileNotFoundException;\r
+import java.io.IOException;\r
+import java.io.OutputStreamWriter;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Scanner;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 2/28/2018.\r
+ */\r
+\r
+public class ConfigFileIO {\r
+\r
+ //appends information to the bottom of file\r
+ public static void writeToFile(String filename, String data, Context context) {\r
+ try {\r
+ OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.\r
+ openFileOutput(filename,\r
+ Context.MODE_APPEND | Context.MODE_PRIVATE));\r
+ BufferedWriter writer = new BufferedWriter(outputStreamWriter);\r
+ writer.write(data);\r
+ writer.newLine();\r
+ writer.close();\r
+ } catch (IOException e) {\r
+ Log.e("Exception", "File write failed: " + e.toString());\r
+ }\r
+ }\r
+\r
+ //returns contents of file\r
+ public static String readFromFile(String filename, Context context) {\r
+\r
+ String strscan = "";\r
+\r
+ try {\r
+ File scanfile = context.getFileStreamPath(filename);\r
+ Scanner scanner = new Scanner(scanfile);\r
+ while (scanner.hasNextLine()) {\r
+ strscan += scanner.nextLine() + "\n";\r
+ }\r
+\r
+ } catch (FileNotFoundException e) {\r
+ Log.e("login activity", "File not found: " + e.toString());\r
+ }\r
+\r
+ return strscan;\r
+ }\r
+\r
+\r
+\r
+ //creates the local copy of the sql database object\r
+ public static DatabaseObject createDatabaseObject(Context context, String idInformation){\r
+ Properties prop = new Properties();\r
+ String filename = context.getString(R.string.device_param_config_filename);\r
+ File file = new File(context.getFilesDir() , filename);\r
+ FileInputStream fis = null;\r
+ try{\r
+ fis = new FileInputStream(file);\r
+ prop.load(fis);\r
+ fis.close();\r
+ }\r
+ catch (IOException ex){\r
+ System.out.println("Error when reading SpeakerController Config file ");\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ int numTypes = Integer.parseInt(prop.getProperty("NUM_OF_TYPES"));\r
+ System.out.println("numtypes: " + numTypes);\r
+ DatabaseObject databaseObject = new DatabaseObject();\r
+ //add all types into databaseObject\r
+ for(int i = 0; i < numTypes; i++){\r
+ String type = prop.getProperty("TYPE_" + i);\r
+ String tag = prop.getProperty("TAG_" + i);\r
+ //generates a type object, fill it with subtype objects\r
+ DatabaseTypeObject databaseTypeObject = new DatabaseTypeObject(type, tag);\r
+ int numSubtypes = Integer.parseInt(prop.getProperty("SUBTYPE_" + i));\r
+\r
+ //for each subtype, create the appropriate fields\r
+ for(int j = 0; j < numSubtypes; j++){\r
+ String currentSubtype = "TYPE_" + i + "_" + j;\r
+ String subtypeName = prop.getProperty(currentSubtype);\r
+ int numAddresses = Integer.parseInt(prop.getProperty(currentSubtype + "_NUM_OF_ADDRESSES"));\r
+ int numZigbeeAddresses = Integer.parseInt(prop.getProperty(currentSubtype + "_NUM_OF_ZBADDRESSES"));\r
+\r
+ DatabaseSubtypeObject databaseSubtypeObject = new DatabaseSubtypeObject(subtypeName, tag, numAddresses, numZigbeeAddresses);\r
+\r
+ if(numAddresses > 0) {\r
+ String temp = prop.getProperty("TYPE_" + i + "_" + j + "_ADDRESS_FIELDS");\r
+ Scanner scanner = new Scanner(temp);\r
+ ArrayList<String> addressFieldNames = new ArrayList<>();\r
+ while (scanner.hasNext()) {\r
+ addressFieldNames.add(scanner.next());\r
+ }\r
+ //fill in the address fields for each subtype. May have to do multiple times for some subtypes\r
+ System.out.println("num addresses" + numAddresses);\r
+ for (int k = 0; k < numAddresses; k++) {\r
+ ArrayList<Pair<String, String>> addressParamList = new ArrayList<>();\r
+ for (int l = 0; l < addressFieldNames.size(); l++) {\r
+ System.out.println(prop.getProperty(addressFieldNames.get(l) + "_" + i + "_" + j + "_ADD_" + k));\r
+ String fieldValue = prop.getProperty(addressFieldNames.get(l) + "_" + i + "_" + j + "_ADD_" + k);\r
+ Pair<String, String> fieldPair = new Pair<>(addressFieldNames.get(l), fieldValue);\r
+ addressParamList.add(fieldPair);\r
+ }\r
+ databaseSubtypeObject.getAddressParams().add(addressParamList);\r
+ databaseSubtypeObject.setNumAddressParams(addressFieldNames.size());\r
+ }\r
+ }\r
+\r
+ if(numZigbeeAddresses > 0) {\r
+ String temp = prop.getProperty("TYPE_" + i + "_" + j + "_ZBADDRESS_FIELDS");\r
+ Scanner scanner = new Scanner(temp);\r
+ ArrayList<String> zigbeeAddressFieldNames = new ArrayList<>();\r
+ while (scanner.hasNext()) {\r
+ zigbeeAddressFieldNames.add(scanner.next());\r
+ }\r
+ //fill in the address fields for each subtype. May have to do multiple times for some subtypes\r
+ System.out.println("num addresses" + numZigbeeAddresses);\r
+ for (int k = 0; k < numZigbeeAddresses; k++) {\r
+ ArrayList<Pair<String, String>> zigbeeAddressParamList = new ArrayList<>();\r
+ for (int l = 0; l < zigbeeAddressFieldNames.size(); l++) {\r
+ // System.out.println(prop.getProperty(zigbeeAddressFieldNames.get(l) + "_" + i + "_" + j + "_ADD_" + k));\r
+ String fieldValue = prop.getProperty(zigbeeAddressFieldNames.get(l) + "_" + i + "_" + j + "_ADD_" + k);\r
+ //System.out.println("prop command: " + " FIELD VALUE " + fieldValue);\r
+ Pair<String, String> fieldPair = new Pair<>(zigbeeAddressFieldNames.get(l), fieldValue);\r
+ zigbeeAddressParamList.add(fieldPair);\r
+ }\r
+ databaseSubtypeObject.getZigbeeAddressParams().add(zigbeeAddressParamList);\r
+ databaseSubtypeObject.setNumZigbeeParams(zigbeeAddressFieldNames.size());\r
+ }\r
+ }\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+ //fill in the device fields for each subtype. There should only be up to 1 set of device fields\r
+ int numDevFields = Integer.parseInt(prop.getProperty("TYPE_" + i + "_" + j + "_NUM_OF_DEVICE_INFO"));\r
+ if(numDevFields > 0) {\r
+ String temp = prop.getProperty("TYPE_" + i + "_" + j + "_" + "DEVICE_FIELDS");\r
+ Scanner scanner = new Scanner(temp);\r
+ ArrayList<String> addressFieldNames = new ArrayList<>();\r
+ while (scanner.hasNext()) {\r
+ addressFieldNames.add(scanner.next());\r
+ }\r
+ for (int l = 0; l < addressFieldNames.size(); l++) {\r
+ String fieldValue = prop.getProperty(addressFieldNames.get(l) + "_" + i + "_" + j);\r
+ Pair<String, String> fieldPair = new Pair<>(addressFieldNames.get(l), fieldValue);\r
+ databaseSubtypeObject.addParam(fieldPair);\r
+ }\r
+ databaseSubtypeObject.setNumParams(addressFieldNames.size());\r
+ }\r
+ databaseTypeObject.addSubtype(subtypeName, databaseSubtypeObject);\r
+ }\r
+ System.out.println();\r
+ databaseObject.addTypeObject( type, databaseTypeObject);\r
+ }\r
+ //Now add individual instances of each device\r
+\r
+\r
+ Scanner scanner = new Scanner(idInformation);\r
+ String temp = "";\r
+ while (scanner.hasNext()) {\r
+ temp = scanner.next();\r
+ Set<String> typeset = databaseObject.getKeySet();\r
+ for (String key : typeset) {\r
+ DatabaseTypeObject typeObject = databaseObject.getTypeObject(key);\r
+ Set<String> subtypeset = typeObject.getKeySet();\r
+ if (subtypeset.contains(temp)) {\r
+ DatabaseSubtypeObject subtypeObject = typeObject.getSubtypeObject(temp);\r
+ subtypeObject.addDevice(scanner.next());\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+\r
+\r
+ return databaseObject;\r
+ }\r
+\r
+\r
+\r
+ //starts a new file instead of appending it\r
+ public static void writeToNewFile(String filename, String data, Context context) {\r
+ try {\r
+ OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.\r
+ openFileOutput(filename, Context.MODE_PRIVATE));\r
+ BufferedWriter writer = new BufferedWriter(outputStreamWriter);\r
+ writer.write(data);\r
+ writer.newLine();\r
+ writer.close();\r
+ } catch (IOException e) {\r
+ Log.e("Exception", "File write failed: " + e.toString());\r
+ }\r
+ }\r
+\r
+ public static ArrayList<String> getMACAddressesDevDat(String filename, Context context) {\r
+ ArrayList<String> macAddresses = new ArrayList<>();\r
+ String devicedat = ConfigFileIO.readFromFile(filename, context);\r
+ System.out.println(devicedat);\r
+ Scanner scanner = new Scanner(devicedat);\r
+ if(scanner.hasNext()) {\r
+ do {\r
+ scanner.next();\r
+ macAddresses.add(scanner.next());\r
+ scanner.next();\r
+ } while (scanner.hasNext());\r
+ System.out.println(devicedat);\r
+ }\r
+ return macAddresses;\r
+ }\r
+\r
+ public static ArrayList<String> getMACAddressesDHCP(String filename, Context context) {\r
+ ArrayList<String> macAddresses = new ArrayList<>();\r
+ String dhcp = ConfigFileIO.readFromFile(filename, context);\r
+ Scanner scanner = new Scanner(dhcp);\r
+ do{\r
+ scanner.next();\r
+ macAddresses.add(scanner.next());\r
+ scanner.next();\r
+ scanner.next();\r
+ scanner.next();\r
+ }while(scanner.hasNext());\r
+ System.out.println(dhcp);\r
+ return macAddresses;\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.util.Log;\r
+import android.view.View;\r
+import android.view.inputmethod.InputMethodManager;\r
+import android.widget.Button;\r
+\r
+/**\r
+ * Created by Brian on 2/16/2018.\r
+ */\r
+\r
+public class DatabaseActivity extends AppCompatActivity implements View.OnClickListener,\r
+ View.OnFocusChangeListener {\r
+ Button insertToDatabase;\r
+ Button deleteFromDatabase;\r
+\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.database);\r
+\r
+ insertToDatabase = (Button) findViewById(R.id.doneDrivers);\r
+\r
+ deleteFromDatabase = (Button) findViewById(R.id.deleteFromDatabase);\r
+ insertToDatabase.setOnClickListener(this);\r
+ deleteFromDatabase.setOnClickListener(this);\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+ if (view == insertToDatabase) {\r
+ Log.d("CLICKING", "Clicking on add device!");\r
+ startActivity(new Intent(this, AddDeviceActivity.class));\r
+ }\r
+ if (view == deleteFromDatabase) {\r
+ Log.d("CLICKING", "Clicking on install zigbee!");\r
+ startActivity(new Intent(this, DeleteDeviceActivity.class));\r
+ }\r
+\r
+ }\r
+\r
+ public void onFocusChange(View view, boolean hasFocus) {\r
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\r
+ if (hasFocus) {\r
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\r
+ } else {\r
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.provider.ContactsContract;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Hashtable;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 2/28/2018.\r
+ */\r
+ /*hierarchy of this object is dbobject -> dbtypeobject -> dbsubtypeobject\r
+ dbobject holds a hashtable of typeobject and typeobject holds a hashtable of subtypeobject\r
+ structure is similar across all levels, subtype obejct also holds the individual instances */\r
+public class DatabaseObject {\r
+ private int numTypes;\r
+ Hashtable<String, DatabaseTypeObject> types;\r
+\r
+ public DatabaseObject(){\r
+ numTypes = 0;\r
+ types = new Hashtable<String, DatabaseTypeObject>();\r
+\r
+ }\r
+\r
+ public void addTypeObject(String name, DatabaseTypeObject typeObject){\r
+ if(!types.contains(name)){\r
+ types.put(name, typeObject);\r
+ numTypes++;\r
+ }\r
+ }\r
+ public void deleteTypeObject(String name){\r
+ if(types.contains(name)){\r
+ types.remove(name);\r
+ numTypes--;\r
+ }\r
+ }\r
+ public DatabaseTypeObject getTypeObject(String name){\r
+ return types.get(name);\r
+ }\r
+ public Set<String> getKeySet(){\r
+ return types.keySet();\r
+ }\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.util.Pair;\r
+\r
+import java.lang.reflect.Array;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.sql.StatementEvent;\r
+\r
+/**\r
+ * Created by Brian on 3/5/2018.\r
+ */\r
+\r
+public class DatabaseSubtypeObject {\r
+\r
+ //param and address params are the database column names\r
+ //devices are the specific instances found on the database\r
+ private int numParams;\r
+ private int numAddresses;\r
+ private int numAddressParams;\r
+ private int numZigbeeParams;\r
+ private int numZigbeeAddresses;\r
+ private ArrayList<Pair <String, String>> params;\r
+ //outer list = numOf addresses, inner list = num of params, inner pair = field name and value\r
+ private ArrayList<ArrayList<Pair<String,String>>> addressParams;\r
+ private ArrayList<ArrayList<Pair<String, String>>> zigbeeAddressParams;\r
+ private List<String> devices;\r
+ private String nextID;\r
+ String name;\r
+ private String tag;\r
+\r
+\r
+\r
+ public DatabaseSubtypeObject(String name, String tag, int numAddresses, int numZigbeeAddresses){\r
+ numParams = 0;\r
+ numAddressParams = 0;\r
+ this.numAddresses = numAddresses;\r
+ this.numZigbeeAddresses = numZigbeeAddresses;\r
+ params = new ArrayList<Pair<String, String>>();\r
+ addressParams = new ArrayList<>();\r
+ zigbeeAddressParams = new ArrayList<>();\r
+ devices = new ArrayList<String>();\r
+ this.name = name;\r
+ this.tag = tag;\r
+ if(devices.isEmpty()){\r
+ nextID = tag+"1";\r
+ }\r
+ }\r
+ public void addDevice(String device){\r
+ devices.add(device);\r
+ setNextID();\r
+ }\r
+ public void addParam(Pair<String, String> param){\r
+ if(!params.contains(param)){\r
+ params.add(param);\r
+ numParams++;\r
+ }\r
+ }\r
+\r
+ public void addAddressParam(int i, Pair<String, String> param){\r
+ if(!addressParams.get(i).contains(param)){\r
+ addressParams.get(i).add(param);\r
+ numAddressParams++;\r
+ }\r
+ }\r
+\r
+\r
+ public void deleteParam(String param){\r
+ if(params.contains(param)){\r
+ params.remove(param);\r
+ numParams--;\r
+ }\r
+ }\r
+ public ArrayList<Pair<String,String>> getParams(){\r
+ return this.params;\r
+ }\r
+ public ArrayList<ArrayList<Pair<String, String>>> getAddressParams(){\r
+ return this.addressParams;\r
+ }\r
+ public String getName(){\r
+ return this.name;\r
+ }\r
+ public int getNumParams() {\r
+ return numParams;\r
+ }\r
+\r
+ public int getNumAddressParams() {\r
+ return numAddressParams;\r
+ }\r
+\r
+ public List<String> getDevices() {\r
+ return devices;\r
+ }\r
+ public String getNextID(){\r
+ return nextID;\r
+ }\r
+\r
+ //sets the field which is used to generate the next available id\r
+ //needs to fix so it it doesn't rely on the first instance in the list\r
+ public void setNextID(){\r
+ String id = "";\r
+ ArrayList<String> ids = new ArrayList<>();\r
+ if(devices.isEmpty()){\r
+ nextID = tag+"1";\r
+ return;\r
+ }\r
+ if(devices.size() > 0 && devices.get(0) != null) {\r
+ for (int i = 0; i < devices.size(); i++) {\r
+ ids.add(devices.get(i).substring(2));\r
+ }\r
+ }\r
+ int count = 1;\r
+ boolean doesNotContain = true;\r
+\r
+ //should you set boolean to false or break;\r
+ while(doesNotContain) {\r
+ Integer idValue = new Integer(count);\r
+ if(ids.contains(idValue.toString())){\r
+ count += 1;\r
+ }\r
+ else\r
+ {\r
+ doesNotContain = false;\r
+ }\r
+ }\r
+\r
+ id = tag + String.valueOf(count);\r
+ nextID = id;\r
+ }\r
+\r
+ public void insertID(){\r
+ devices.add(this.nextID);\r
+ setNextID();\r
+ }\r
+\r
+ public void deleteDevice(String DeviceID){\r
+ devices.remove(DeviceID);\r
+ setNextID();\r
+ }\r
+ public void setNumAddressParams(int numParams){\r
+ numAddressParams = numParams;\r
+ }\r
+ public void setNumParams(int numParams){\r
+ numParams = numParams;\r
+ }\r
+ public void setNumZigbeeParams(int numParams){ this.numZigbeeParams = numParams; }\r
+ public int getNumAddresses(){\r
+ return this.numAddresses;\r
+ }\r
+ public int getNumZigbeeAddresses(){ return this.numZigbeeAddresses; }\r
+ public ArrayList<ArrayList<Pair<String, String>>> getZigbeeAddressParams(){return this.zigbeeAddressParams; }\r
+\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.provider.ContactsContract;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Hashtable;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 3/5/2018.\r
+ */\r
+\r
+public class DatabaseTypeObject {\r
+ private int numSubtypes;\r
+ private Hashtable<String, DatabaseSubtypeObject> subtypes;\r
+ protected String tag;\r
+ private String name;\r
+\r
+ public DatabaseTypeObject(String name, String tag){\r
+ numSubtypes = 0;\r
+ subtypes = new Hashtable<String, DatabaseSubtypeObject>();\r
+ this.name = name;\r
+ this.tag = tag;\r
+ }\r
+\r
+ public void addSubtype(String name, DatabaseSubtypeObject subtypeObject){\r
+ if(!subtypes.contains(name)){\r
+ subtypes.put(name, subtypeObject);\r
+ numSubtypes++;\r
+ }\r
+ }\r
+ public void deleteSubtype(String name){\r
+ if(subtypes.contains(name)){\r
+ subtypes.remove(name);\r
+ numSubtypes--;\r
+ }\r
+ }\r
+ public DatabaseSubtypeObject getSubtypeObject(String name){\r
+ return subtypes.get(name);\r
+ }\r
+ public Set<String> getKeySet(){\r
+ return subtypes.keySet();\r
+ }\r
+ public String getName(){\r
+ return this.name;\r
+ }\r
+ public void setTag(String tag){\r
+ this.tag = tag;\r
+ }\r
+ public String getTag(){\r
+ return tag;\r
+ }\r
+}\r
-package com.example.lede2;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.TextView;
-
-public class DeleteDeviceActivity extends AppCompatActivity implements View.OnClickListener, View.OnFocusChangeListener {
-
- Button deleteButton;
- Button doneButton;
- EditText device_id;
- EditText device_type;
- EditText device_subtype;
- EditText device_address_subtype;
- TextView status;
- private SSH_MySQL ssh;//Connection object between Android & Host
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_delete_device);
-
- deleteButton = (Button) findViewById(R.id.delete);
- doneButton = (Button) findViewById(R.id.done);
- device_id = (EditText)findViewById(R.id.device_id);
- device_type = (EditText)findViewById(R.id.device_type);
- device_subtype = (EditText)findViewById(R.id.device_subtype);
- device_address_subtype = (EditText)findViewById(R.id.device_address_subtype);
- status = (TextView)findViewById(R.id.textStatus);
-
- deleteButton.setOnClickListener(this);
- doneButton.setOnClickListener(this);
- device_id.setOnFocusChangeListener(this);
- device_type.setOnFocusChangeListener(this);
- device_subtype.setOnFocusChangeListener(this);
- device_address_subtype.setOnFocusChangeListener(this);
- ssh = new SSH_MySQL();
- }
-
- @Override
- public void onClick(View v) {
- if(v == deleteButton){
- // Remove the entry based on ID, type, and subtype
- ssh.execute(MainActivity.DEF_DELETE_CMD + " " +
- device_id.getText().toString() + " " +
- device_type.getText().toString() + " " +
- device_subtype.getText().toString() + ";" +
- // Also remove the device address
- MainActivity.DEF_DELETE_ADDRESS_CMD + " " +
- device_id.getText().toString() + " " +
- device_address_subtype.getText().toString()
- );
- device_id.setText("");
- device_type.setText("");
- device_subtype.setText("");
- device_address_subtype.setText("");
- status.setText("Successfully deleted " + device_id.getText());
- /*try {
- Thread.sleep(2000);
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- status.setText("");*/
- }
- if(v == doneButton){
- finish();
- }
-
- }
-
- @Override
- public void onFocusChange(View view, boolean hasFocus) {
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- if (hasFocus) {
- imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
- } else {
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
- }
- }
-}
+package com.example.lede2;\r
+\r
+import android.app.ProgressDialog;\r
+import android.content.Context;\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.util.Log;\r
+import android.view.View;\r
+import android.view.inputmethod.InputMethodManager;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.EditText;\r
+import android.widget.Spinner;\r
+\r
+import java.io.File;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.List;\r
+import java.util.Scanner;\r
+import java.util.Set;\r
+\r
+public class DeleteDeviceActivity extends AppCompatActivity implements View.OnClickListener, View.OnFocusChangeListener {\r
+\r
+ DatabaseObject databaseObject;\r
+ protected String database_information_filename;\r
+ protected String id_information_filename;\r
+ protected String local_id_information_filename;\r
+ Button deleteButton;\r
+ Button doneButton;\r
+ Spinner spinner1;\r
+ Spinner spinner2;\r
+ Spinner spinner3;\r
+ Context context;\r
+ private SSH_MySQL ssh;//Connection object between Android & Host\r
+\r
+ @Override\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.activity_delete_device);\r
+\r
+ database_information_filename = this.getString(R.string.device_param_config_filename);\r
+ id_information_filename = this.getString(R.string.device_id_config_filename);\r
+ local_id_information_filename = this.getString(R.string.device_id_config_filename);\r
+ deleteButton = (Button) findViewById(R.id.delDoneButton);\r
+ spinner1 = (Spinner) findViewById(R.id.delspinner1);\r
+ spinner2 = (Spinner) findViewById(R.id.delspinner2);\r
+ spinner3 = (Spinner) findViewById(R.id.delspinner3);\r
+ context = this;\r
+\r
+ //similar to install format. Sets the subtypes to appear based on type chosen\r
+ spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ String selectedType = spinner1.getSelectedItem().toString();\r
+ Set<String> keysForSubType = (databaseObject.getTypeObject(selectedType)).getKeySet();\r
+ ArrayList<String> subtypes = new ArrayList<String>();\r
+ for(String key: keysForSubType){\r
+ subtypes.add(key);\r
+ }\r
+ Collections.sort(subtypes);\r
+ ArrayAdapter subtypeAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, subtypes);\r
+ subtypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ spinner2.setAdapter(subtypeAdapter);\r
+ }\r
+\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+ //sets the instances of devices to appear based on selected subtype\r
+ spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ List<String> deviceList = subtypeObject.getDevices();\r
+ Collections.sort(deviceList);\r
+ ArrayList<String> devices = new ArrayList<>();\r
+ for(String device: deviceList){\r
+ devices.add(device);\r
+ }\r
+ Collections.sort(devices);\r
+ ArrayAdapter deviceAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, devices);\r
+ deviceAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ spinner3.setAdapter(deviceAdapter);\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+\r
+\r
+\r
+\r
+ deleteButton.setOnClickListener(this);\r
+ ssh = new SSH_MySQL();\r
+ String databaseInformation = ConfigFileIO.readFromFile(\r
+ database_information_filename, this);\r
+ String idInformation = ConfigFileIO.readFromFile(local_id_information_filename, this);\r
+ databaseObject = ConfigFileIO.createDatabaseObject(context, idInformation );\r
+ Set<String> keysForType = databaseObject.getKeySet();\r
+ ArrayList<String> types = new ArrayList<String>();\r
+ for(String key: keysForType){\r
+ types.add(key);\r
+ }\r
+ Collections.sort(types);\r
+ ArrayAdapter typeAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, types);\r
+ typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ spinner1.setAdapter(typeAdapter);\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ if(v == deleteButton){\r
+ DatabaseSubtypeObject subtypeObject = getSubtypeObject();\r
+ // Remove the entry based on ID, type, and subtype\r
+ String deleteCommand = MainActivity.DEF_DELETE_CMD + " " +\r
+ spinner3.getSelectedItem().toString() + " " +\r
+ spinner1.getSelectedItem().toString() + " " +\r
+ spinner2.getSelectedItem().toString() + ";";\r
+\r
+\r
+ // Also remove the device address. Some need multiple address deletions such as ihome\r
+ if(subtypeObject.getNumAddresses() > 1) {\r
+ for(int i = 1; i <= subtypeObject.getNumAddresses(); i++){\r
+ deleteCommand += MainActivity.DEF_DELETE_ADDRESS_CMD + " " +\r
+ spinner3.getSelectedItem().toString() + " " +\r
+ spinner2.getSelectedItem().toString() + "Add" + i + ";";\r
+ }\r
+ }\r
+ else{\r
+ deleteCommand += MainActivity.DEF_DELETE_ADDRESS_CMD + " " +\r
+ spinner3.getSelectedItem().toString() + " " +\r
+ spinner2.getSelectedItem().toString() + "Add;";\r
+\r
+ }\r
+\r
+ deleteCommand += context.getResources().getString(R.string.delete_zb_cmd) + " " +\r
+ spinner3.getSelectedItem().toString() + " " +\r
+ spinner2.getSelectedItem().toString() + "ZBAdd;";\r
+ //need to add delete from zigbee\r
+\r
+\r
+\r
+ ProgressDialog dialog = new ProgressDialog(this);\r
+ dialog.setMessage("Please Wait");\r
+ dialog.setCancelable(false);\r
+ dialog.setInverseBackgroundForced(false);\r
+ dialog.show();\r
+\r
+\r
+ System.out.println(deleteCommand);\r
+ ssh = new SSH_MySQL();\r
+ ssh.execute(deleteCommand);\r
+\r
+ deleteDeviceFromDatabase();\r
+ updateIoTDeviceAddress();\r
+ updateSetList();\r
+\r
+ dialog.dismiss();\r
+ finish();\r
+\r
+ }\r
+\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean hasFocus) {\r
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\r
+ if (hasFocus) {\r
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\r
+ } else {\r
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\r
+ }\r
+ }\r
+ public DatabaseSubtypeObject getCurrentSubtypeObject(){\r
+ return databaseObject.getTypeObject(spinner1.\r
+ getSelectedItem().toString()).getSubtypeObject(spinner2.getSelectedItem().toString());\r
+ }\r
+\r
+ //rewrites the local config file to not contain the deleted instance\r
+ public void deleteDeviceFromDatabase(){\r
+ DatabaseSubtypeObject subtypeObject = getCurrentSubtypeObject();\r
+ String subtype = spinner2.getSelectedItem().toString();\r
+ String id = spinner3.getSelectedItem().toString();\r
+ subtypeObject.deleteDevice(id);\r
+ String deviceToDelete = subtype + " " + id;\r
+ //do it for the database file. also need\r
+ String databaseInformation = ConfigFileIO.readFromFile(local_id_information_filename, this );\r
+ Scanner scanner = new Scanner(databaseInformation);\r
+ ConfigFileIO.writeToNewFile(local_id_information_filename, "", this);\r
+ while (scanner.hasNextLine()){\r
+ String temp = scanner.nextLine();\r
+ if (!temp.equals(deviceToDelete)){\r
+ ConfigFileIO.writeToFile(local_id_information_filename, temp, this);\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ private DatabaseSubtypeObject getSubtypeObject(){\r
+ DatabaseSubtypeObject subtypeObject = databaseObject.getTypeObject(\r
+ spinner1.getSelectedItem().toString()).getSubtypeObject(\r
+ spinner2.getSelectedItem().toString());\r
+ return subtypeObject;\r
+ }\r
+\r
+ private void addSSHResultsToConfig(List<String> results, String filename) {\r
+ File dir = getFilesDir();\r
+ File file = new File(dir, filename);\r
+ file.delete();\r
+ for (int i = 0; i < results.size(); i++) {\r
+ ConfigFileIO.writeToFile(filename, results.get(i), this);\r
+ }\r
+ finish();\r
+ }\r
+\r
+ private void updateSetList(){\r
+ SSH_MySQL ssh = new SSH_MySQL();\r
+ String command = this.getString(R.string.updateSetList);\r
+ List<String> results = new ArrayList<>();\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ try {\r
+ ssh.execute(command);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = ssh.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+// ssh = new SSH_MySQL();\r
+// command = this.getString(R.string.getSetList);\r
+// try {\r
+// ssh.execute(command);\r
+// Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+// results = ssh.getResultLines();\r
+// while(results.size() == 0){\r
+// Thread.sleep(500);\r
+// results = ssh.getResultLines();\r
+// }\r
+// System.out.println(results);\r
+// } catch (Exception e) {\r
+// Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+// }\r
+// addSSHResultsToConfig(results, setListFilename);\r
+\r
+ }\r
+ private void updateIoTDeviceAddress(){\r
+ SSH_MySQL ssh = new SSH_MySQL();\r
+ String command = this.getString(R.string.updateIoTDeviceAddress);\r
+ List<String> results = new ArrayList<>();\r
+ String iotDeviceAddressFilename = this.getString(R.string.updateIoTDeviceAddress);\r
+ try {\r
+ ssh.execute(command);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = ssh.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+// ssh = new SSH_MySQL();\r
+// command = this.getString(R.string.getIoTDeviceAddress);\r
+// try {\r
+// ssh.execute(command);\r
+// Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+// results = ssh.getResultLines();\r
+// while(results.size() == 0){\r
+// Thread.sleep(500);\r
+// results = ssh.getResultLines();\r
+// }\r
+// System.out.println(results);\r
+// } catch (Exception e) {\r
+// Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+// }\r
+// addSSHResultsToConfig(results, iotDeviceAddressFilename);\r
+ }\r
+\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+/**\r
+ * Created by Brian on 5/17/2018.\r
+ */\r
+\r
+public class DriverTypeSelectActivity {\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.os.Bundle;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+import android.view.View;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.ListView;\r
+import android.widget.Spinner;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 4/16/2018.\r
+ */\r
+\r
+public class DriversAddActivity extends ApplicationWithRelations{\r
+\r
+ private SSH_MySQL getSetsAndRelations;\r
+ private SSH_MySQL getSetList;\r
+ private ArrayList<String> relationNames; //relations in this application\r
+\r
+ Context context;\r
+ private HashMap<String, ArrayList<String>> availableSets; //all possible sets pulled from pi\r
+\r
+\r
+ @Override\r
+ protected void onCreate( Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.drivers_add);\r
+ super.context = this;\r
+ context = super.context;\r
+ getSetsAndRelations = new SSH_MySQL();\r
+ getSetList = new SSH_MySQL();\r
+ Intent intent = getIntent();\r
+ String getSetsCommand = intent.getExtras().getString("getConfigCommand");\r
+\r
+\r
+ String getIoTDeviceAddressListCommand = this.getString(R.string.getIoTDeviceAddress); //edit this to new file\r
+ List<String> results = new ArrayList<>();\r
+ final String driverConfigFilename = this.getString(R.string.driverConfigFilename);\r
+ relations = new HashMap<>();\r
+ relationNames = new ArrayList<>();\r
+ relationNameSpinner = (Spinner) findViewById(R.id.selectedRelation);\r
+ relationLeftSpinner = (Spinner) findViewById(R.id.relationLeftSpinner);\r
+ relationRightSpinner = (Spinner) findViewById(R.id.relationRightSpinner);\r
+ addRelationButton = (Button) findViewById(R.id.addRelationButton);\r
+ doneRelationButton = (Button) findViewById(R.id.addRelationDoneButton);\r
+ deleteRelationButton = (Button) findViewById(R.id.addRelationDeleteButton);\r
+ setOrRelationSpinner = (Spinner) findViewById(R.id.setsOrRelations);\r
+ super.hasIndependentSets = true;\r
+ super.independentSetNames = new ArrayList<>();\r
+ super.independentSetList = new HashMap<>();\r
+ super.addedSetList = new HashMap<>();\r
+ super.addedIndependentSets = new HashMap<>();\r
+\r
+ super.hasRelations = false;\r
+\r
+ addRelationButton.setOnClickListener(this);\r
+ doneRelationButton.setOnClickListener(this);\r
+ deleteRelationButton.setOnClickListener(this);\r
+ addRelationsListView = (ListView) findViewById(R.id.selectedRelationsList);\r
+ addRelationsListView.setFocusable(false);\r
+ super.addedRelations = new HashMap<>();\r
+ HashSet<Pair<String, String>> addedrelationsSet = new HashSet<>();\r
+ //addedRelations.put("", addedrelationsSet);\r
+ super.applicationSetList = new HashSet<>();\r
+ setHashMap = new HashMap<>();\r
+ System.out.println("THIS COMMAND " + getSetsCommand);\r
+\r
+ //pull data from config file on iotuser\r
+ try {\r
+ getSetsAndRelations.execute(getSetsCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetsAndRelations.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetsAndRelations.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+\r
+ addSSHResultsToConfig(results, driverConfigFilename);\r
+ System.out.println("read from file: " + ConfigFileIO.readFromFile(driverConfigFilename, this));\r
+ super.prop = new Properties();\r
+ File file = new File(getApplicationContext().getFilesDir(), driverConfigFilename);\r
+ FileInputStream fis = null;\r
+ try{\r
+ fis = new FileInputStream(file);\r
+ super.prop.load(fis);\r
+ fis.close();\r
+ }\r
+ catch (IOException ex){\r
+ System.out.println("Error when reading SpeakerController Config file ");\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ //add sets relations to the relation hashmap\r
+ super.numFields = Integer.parseInt(super.prop.getProperty("FIELD_NUMBER"));\r
+ for(int i = 0; i < super.numFields; i++){\r
+ String name = (super.prop.getProperty("FIELD_" + i));\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")) {\r
+ String relationPair = super.prop.getProperty("FIELD_CLASS_0_" + i) + "," + super.prop.getProperty("FIELD_CLASS_1_" + i);\r
+ addPair(name, relationPair);\r
+ super.hasRelations = true;\r
+ relationNames.add(name);\r
+ }\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTSet")) {\r
+ if(super.prop.getProperty("FIELD_INDEPENDENT_" + i).equals("TRUE")){\r
+ independentSetList.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+ independentSetNames.add(name);\r
+ }\r
+ else{\r
+ setHashMap.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+\r
+ }\r
+ }\r
+ }\r
+ //pull availableSets file from iotuser\r
+ try {\r
+ getSetList.execute(getIoTDeviceAddressListCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetList.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetList.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ addSSHResultsToConfig(results, setListFilename);\r
+ availableSets = createSetList(setListFilename);\r
+ System.out.println();\r
+\r
+ ArrayList<String> setsOrRelationArrayList = new ArrayList<>();\r
+ if(super.hasIndependentSets){\r
+ setsOrRelationArrayList.add("SETS");\r
+\r
+ }\r
+ if(super.hasRelations) {\r
+ setsOrRelationArrayList.add("RELATIONS");\r
+ }\r
+ ArrayAdapter setsOrRelationsArrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, setsOrRelationArrayList);\r
+ setOrRelationSpinner.setAdapter(setsOrRelationsArrayAdapter);\r
+\r
+\r
+\r
+ setOrRelationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ //set array adapter values = listed relations\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, relationNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ else{\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, independentSetNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+\r
+\r
+\r
+\r
+ //sets left and right possible values to registered devices in the sets\r
+ relationNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+\r
+\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ relationRightSpinner.setVisibility(View.VISIBLE);\r
+ String selectedRelation = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(relations.get(selectedRelation).first);\r
+ ArrayList availableDevicesRight = availableSets.get(relations.get(selectedRelation).second);\r
+\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ ArrayAdapter rightAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesRight);\r
+\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ rightAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ relationRightSpinner.setAdapter(rightAdapter);\r
+ }\r
+ else{\r
+ relationRightSpinner.setVisibility(View.GONE);\r
+\r
+ String selectedSet = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(independentSetList.get(selectedSet));\r
+ Collections.sort(availableDevicesLeft);\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ }\r
+ }\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+ }\r
+ });\r
+\r
+ ArrayList<String> addedRelationsArrayList = new ArrayList<>();\r
+ Set<String> relationTypes = super.addedRelations.keySet();\r
+ for(String s: relationTypes) {\r
+ for (Pair<String, String> temp : super.addedRelations.get(s)) {\r
+ addedRelationsArrayList.add(temp.first + " " + temp.second);\r
+ }\r
+ }\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+ addRelationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
+ }});\r
+ for(int i= 0; i < relationNames.size(); i++){\r
+ Pair<String, String> tempPair = relations.get(relationNames.get(i));\r
+ applicationSetList.add(tempPair.first);\r
+ applicationSetList.add(tempPair.second);\r
+ }\r
+ }\r
+\r
+\r
+}\r
+\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.app.ProgressDialog;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.os.Bundle;\r
+import android.support.design.widget.Snackbar;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.util.Log;\r
+import android.view.View;\r
+import android.view.inputmethod.InputMethodManager;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.Spinner;\r
+\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+/**\r
+ * Created by Brian on 2/16/2018.\r
+ */\r
+\r
+public class DriversSelectActivity extends AppCompatActivity implements View.OnClickListener, View.OnFocusChangeListener {\r
+ Spinner typeSpinner;\r
+ Button doneButton;\r
+ Properties prop;\r
+ ProgressDialog dialog;\r
+\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.drivers);\r
+ SSH_MySQL getListOfDrivers = new SSH_MySQL();\r
+ typeSpinner = (Spinner) findViewById(R.id.spinnerDrivers);\r
+ doneButton = (Button) findViewById(R.id.doneDrivers);\r
+ String getListOfDriversCommand = this.getString(R.string.getListOfDriversCommand);\r
+ List<String> results = new ArrayList<>();\r
+ String driversListFilename = this.getString(R.string.driversListFilename);\r
+\r
+ //get list of all driver types\r
+ try {\r
+ getListOfDrivers.execute(getListOfDriversCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getListOfDrivers.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getListOfDrivers.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+\r
+ addSSHResultsToConfig(results, driversListFilename);\r
+ System.out.println("read from file: " + ConfigFileIO.readFromFile(driversListFilename, this));\r
+ prop = new Properties();\r
+ File file = new File(getApplicationContext().getFilesDir(), driversListFilename);\r
+ FileInputStream fis = null;\r
+ try{\r
+ fis = new FileInputStream(file);\r
+ prop.load(fis);\r
+ fis.close();\r
+ }\r
+ catch (IOException ex){\r
+ System.out.println("Error when reading drivers list file ");\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ ArrayList driverTypeList = new ArrayList();\r
+ //add sets relations to the relation hashmap\r
+ int numFields = Integer.parseInt(prop.getProperty("FIELD_NUMBER"));\r
+ for(int i = 0; i < numFields; i++){\r
+ driverTypeList.add(prop.getProperty("FIELD_" + i));\r
+ }\r
+ ArrayAdapter typeAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, driverTypeList);\r
+ typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ typeSpinner.setAdapter(typeAdapter);\r
+\r
+\r
+ typeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+ doneButton.setOnClickListener(this);\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+ if (view == doneButton) {\r
+ dialog = new ProgressDialog(this);\r
+ dialog.setMessage("Please Wait");\r
+ dialog.setCancelable(false);\r
+ dialog.setInverseBackgroundForced(false);\r
+ dialog.show();\r
+\r
+ Log.d("CLICKING", "Clicking on done button!");\r
+ //determine the where to cat based on user selection and go to next screen\r
+ //looks at config file for the command based on the user selection\r
+ String userSelection = typeSpinner.getSelectedItem().toString();\r
+ String fromProperty = prop.getProperty(userSelection);\r
+ String command2 = prop.getProperty("COMMAND_PREFIX") + fromProperty;\r
+ Intent i = new Intent(this, DriversAddActivity.class);\r
+ i.putExtra("getConfigCommand", command2);\r
+ startActivity(i);\r
+ finish();\r
+ }\r
+\r
+ }\r
+ @Override\r
+ protected void onStop() {\r
+ super.onStop();\r
+ if(dialog != null && dialog.isShowing()){\r
+ dialog.dismiss();\r
+ }\r
+ }\r
+\r
+\r
+\r
+ public void onFocusChange(View view, boolean hasFocus) {\r
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\r
+ if (hasFocus) {\r
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\r
+ } else {\r
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\r
+ }\r
+ }\r
+\r
+ protected void addSSHResultsToConfig(List<String> results, String filename) {\r
+ ConfigFileIO.writeToNewFile(filename,"", this );\r
+ File dir = getFilesDir();\r
+ File file = new File(dir, filename);\r
+ file.delete();\r
+ for (int i = 0; i < results.size(); i++) {\r
+ ConfigFileIO.writeToFile(filename, results.get(i), this);\r
+ }\r
+ }\r
+}
\ No newline at end of file
+++ /dev/null
-package com.example.lede2;\r
-\r
-import android.content.Context;\r
-import android.content.Intent;\r
-import android.net.ConnectivityManager;\r
-import android.net.NetworkInfo;\r
-import android.net.wifi.WifiInfo;\r
-import android.net.wifi.WifiManager;\r
-import android.support.v7.app.AppCompatActivity;\r
-import android.os.Bundle;\r
-import android.view.View;\r
-import android.view.inputmethod.InputMethodManager;\r
-import android.widget.Button;\r
-import android.widget.EditText;\r
-import android.widget.TextView;\r
-import android.widget.Toast;\r
-import android.util.Log;\r
-\r
-import java.util.Random;\r
-\r
-public class EnrollDeviceActivity extends AppCompatActivity implements View.OnClickListener, View.OnFocusChangeListener {\r
-\r
- private static final int REQUEST_RESULT = 1001;\r
- Button done;//Done button in UI\r
- Button wifi;//wifi button in UI\r
- SSH ssh;//Connection object between Android & Router\r
- Context context;\r
-\r
- TextView psk;//red letter in UI\r
- String newpsk;//same as psk (different data type)\r
-\r
- EditText name;//device name newly registered in UI\r
- String deviceName;//same as name(different data type)\r
-\r
- @Override\r
- protected void onCreate(Bundle savedInstanceState) {\r
- super.onCreate(savedInstanceState);\r
- setContentView(R.layout.activity_enroll_device);\r
-\r
- ssh = new SSH();\r
- psk = (TextView) findViewById(R.id.add_psk);\r
- done = (Button) findViewById(R.id.done);\r
- wifi = (Button) findViewById(R.id.wifi);\r
- name = (EditText) findViewById(R.id.name);\r
-\r
- done.setOnClickListener(this);\r
- wifi.setOnClickListener(this);\r
- name.setOnFocusChangeListener(this);\r
-\r
- //Make random password and show the password through EditText\r
- newpsk = generateRandomPassword();\r
- psk.setText(newpsk);\r
- // execute shell script (script's function -> change router password to newpsk)\r
- ssh.execute("-ch " + newpsk);\r
- try {//To execute asyntask in ssh object, we have to sleep main thread\r
- Thread.sleep(1000);\r
- } catch (Exception e) {\r
- Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onCreate method of EnrollDeviceActivity");\r
- }\r
- }\r
-\r
- @Override\r
- public void onFocusChange(View view, boolean hasFocus) {//function not to modify randomly generated password for newly registered device\r
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\r
- if (hasFocus) {\r
- imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\r
- } else {\r
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\r
- }\r
- }\r
-\r
- boolean isNetworkAvailable() {//check whether wifi connection is or not\r
- Context context = getApplicationContext();\r
- ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\r
- NetworkInfo activeNetwork = cm.getActiveNetworkInfo();\r
- boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();\r
- return isConnected;\r
- }\r
-\r
- @Override\r
- public void onClick(View v) {\r
- if (v == done) {\r
- //Users try to execute shell scripts by pushing button,\r
- //but problem could occur(application stop) if user push the button without wifi connection\r
- //As a result, below function have to be implemented.\r
- if (isNetworkAvailable() == false) {//without wifi connection\r
- Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
- t.show();\r
- startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
- } else {//with wifi connection\r
- deviceName = name.getText().toString();\r
- if(deviceName.equals("")){\r
- Toast t = Toast.makeText(this, R.string.empty_name,Toast.LENGTH_SHORT);\r
- t.show();\r
- return;\r
- }\r
- context = getApplicationContext();\r
- if (getWifiName(context).equals("\""+ ConfigActivity.RSSID +"\"")) {//if wifi name is LEDE2\r
- String networkPass = psk.getText().toString();//random password\r
- ssh = new SSH();\r
-\r
- // execute shell script (script's function -> Save contents(Mac,Ip,Key,Name) on hostapd-psk)\r
- ssh.execute("-co " + networkPass + " " + deviceName + " " + ConfigActivity.RPWD);//review!!!!!!\r
- try {//To execute asyntask in ssh object, we have to sleep main thread\r
- Thread.sleep(1000);\r
- } catch (Exception e) {\r
- Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onClick method of EnrollDeviceActivity");\r
- }\r
- finish();//Go back to the Main Activity\r
- } else { //if name of wifi is not LEDE -> go to wifi configuration screen to change wifi type\r
- Toast t = Toast.makeText(this, R.string.try_again, Toast.LENGTH_SHORT);\r
- t.show();\r
- startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
- }\r
- }\r
- // Call activity that adds device - not doing this flow because we haven't found\r
- // a way to change password without restarting WiFi\r
- //startActivity(new Intent(this, AddDeviceActivity.class));\r
- //finish();\r
- } else if (v == wifi) {\r
- startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
- }\r
- }\r
-\r
- /******************************************************************************************************************************************************************/\r
- //Detect you are connected to a specific network.\r
- /******************************************************************************************************************************************************************/\r
- public String getWifiName(Context context) {\r
- WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);\r
- if (manager.isWifiEnabled()) {\r
- WifiInfo wifiInfo = manager.getConnectionInfo();\r
- if (wifiInfo != null) {\r
- NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());\r
- if (state == NetworkInfo.DetailedState.CONNECTED || state == NetworkInfo.DetailedState.OBTAINING_IPADDR) {\r
- return wifiInfo.getSSID();\r
- }\r
- }\r
- }\r
- return null;\r
- }\r
-\r
- /******************************************************************************************************************************************************************/\r
- // Generate a random password and return it\r
- /******************************************************************************************************************************************************************/\r
- public String generateRandomPassword() {\r
- String password = new String();\r
-\r
- StringBuffer rndpassword = new StringBuffer();\r
- Random rnd = new Random();\r
- int digitnum = 20;\r
- // Generate random 20digit password with upper / lower case alphabet + numbers\r
- // There are 10 int nums, 26 lower alphabets, 26 upper alphabets. Total 62\r
- // So 2/12 possiblity of int, 5/12 lower, 5/12 upper alphabets.\r
- for (int i = 0; i < digitnum; i++) {\r
- int rIndex = rnd.nextInt(12);\r
- if (rIndex >= 0 && rIndex < 2) { // 0 - 9\r
- rndpassword.append((rnd.nextInt(10)));\r
- } else if (rIndex >= 2 && rIndex < 7) { // a-z\r
- rndpassword.append((char) ((int) (rnd.nextInt(26)) + 97));\r
- } else { // A-Z\r
- rndpassword.append((char) ((int) (rnd.nextInt(26)) + 65));\r
- }\r
- }\r
- password = rndpassword.toString();\r
- return password;\r
- }\r
-}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.os.Bundle;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+import android.view.View;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.ListView;\r
+import android.widget.Spinner;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 4/16/2018.\r
+ */\r
+\r
+public class HomeSecurity extends ApplicationWithRelations{\r
+\r
+ private SSH_MySQL getSetsAndRelations;\r
+ private SSH_MySQL getSetList;\r
+ private String filename;\r
+ private ArrayList<String> relationNames; //relations in this application\r
+\r
+ Context context;\r
+ private HashMap<String, ArrayList<String>> availableSets; //all possible sets pulled from pi\r
+\r
+\r
+ @Override\r
+ protected void onCreate( Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.home_security);\r
+ super.context = this;\r
+ context = super.context;\r
+ getSetsAndRelations = new SSH_MySQL();\r
+ getSetList = new SSH_MySQL();\r
+ String getSetsAndRelationsCommand = this.getString(R.string.getHomeSecuritySetsAndRelationsCommand);\r
+ String getSetListCommand = this.getString(R.string.getSetList);\r
+ List<String> results = new ArrayList<>();\r
+ final String controllerConfigFilename = this.getString(R.string.homeSecurityControllerConfigFile);\r
+ filename = this.getString(R.string.setsAndRelationsFilename);\r
+ relations = new HashMap<>();\r
+ relationNames = new ArrayList<>();\r
+ relationNameSpinner = (Spinner) findViewById(R.id.selectedRelation);\r
+ relationLeftSpinner = (Spinner) findViewById(R.id.relationLeftSpinner);\r
+ relationRightSpinner = (Spinner) findViewById(R.id.relationRightSpinner);\r
+ addRelationButton = (Button) findViewById(R.id.addRelationButton);\r
+ doneRelationButton = (Button) findViewById(R.id.addRelationDoneButton);\r
+ deleteRelationButton = (Button) findViewById(R.id.addRelationDeleteButton);\r
+ setOrRelationSpinner = (Spinner) findViewById(R.id.setsOrRelations);\r
+ super.hasIndependentSets = true;\r
+ super.independentSetNames = new ArrayList<>();\r
+ super.independentSetList = new HashMap<>();\r
+ super.addedSetList = new HashMap<>();\r
+ super.addedIndependentSets = new HashMap<>();\r
+\r
+ addRelationButton.setOnClickListener(this);\r
+ doneRelationButton.setOnClickListener(this);\r
+ deleteRelationButton.setOnClickListener(this);\r
+ addRelationsListView = (ListView) findViewById(R.id.selectedRelationsList);\r
+ addRelationsListView.setFocusable(false);\r
+ super.addedRelations = new HashMap<> ();\r
+ HashSet<Pair<String, String>> addedrelationsSet = new HashSet<>();\r
+ //addedRelations.put("", addedrelationsSet);\r
+ super.applicationSetList = new HashSet<>();\r
+ setHashMap = new HashMap<>();\r
+ //pull data from config file on iotuser\r
+ try {\r
+ getSetsAndRelations.execute(getSetsAndRelationsCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetsAndRelations.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetsAndRelations.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+\r
+ addSSHResultsToConfig(results, controllerConfigFilename);\r
+ System.out.println("read from file: " + ConfigFileIO.readFromFile(controllerConfigFilename, this));\r
+ super.prop = new Properties();\r
+ File file = new File(getApplicationContext().getFilesDir(), controllerConfigFilename);\r
+ FileInputStream fis = null;\r
+ try{\r
+ fis = new FileInputStream(file);\r
+ super.prop.load(fis);\r
+ fis.close();\r
+ }\r
+ catch (IOException ex){\r
+ System.out.println("Error when reading SpeakerController Config file ");\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ //add sets relations to the relation hashmap\r
+ super.numFields = Integer.parseInt(super.prop.getProperty("FIELD_NUMBER"));\r
+ for(int i = 0; i < super.numFields; i++){\r
+ String name = (super.prop.getProperty("FIELD_" + i));\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")) {\r
+ String relationPair = super.prop.getProperty("FIELD_CLASS_0_" + i) + "," + super.prop.getProperty("FIELD_CLASS_1_" + i);\r
+ addPair(name, relationPair);\r
+ relationNames.add(name);\r
+ }\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTSet")) {\r
+ if(super.prop.getProperty("FIELD_INDEPENDENT_" + i).equals("TRUE")){\r
+ independentSetList.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+ independentSetNames.add(name);\r
+ }\r
+ else{\r
+ setHashMap.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+\r
+ }\r
+ }\r
+ }\r
+ //pull availableSets file from iotuser\r
+ try {\r
+ getSetList.execute(getSetListCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetList.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetList.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ addSSHResultsToConfig(results, setListFilename);\r
+ availableSets = createSetList(setListFilename);\r
+ System.out.println();\r
+\r
+ ArrayList<String> setsOrRelationArrayList = new ArrayList<>();\r
+ setsOrRelationArrayList.add("SETS");\r
+ setsOrRelationArrayList.add("RELATIONS");\r
+ ArrayAdapter setsOrRelationsArrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, setsOrRelationArrayList);\r
+ setOrRelationSpinner.setAdapter(setsOrRelationsArrayAdapter);\r
+\r
+\r
+\r
+ setOrRelationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ //set array adapter values = listed relations\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, relationNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ else{\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, independentSetNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+\r
+\r
+\r
+\r
+ //sets left and right possible values to registered devices in the sets\r
+ relationNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+\r
+\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ relationRightSpinner.setVisibility(View.VISIBLE);\r
+ String selectedRelation = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(relations.get(selectedRelation).first);\r
+ ArrayList availableDevicesRight = availableSets.get(relations.get(selectedRelation).second);\r
+\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ ArrayAdapter rightAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesRight);\r
+\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ rightAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ relationRightSpinner.setAdapter(rightAdapter);\r
+ }\r
+ else{\r
+ relationRightSpinner.setVisibility(View.GONE);\r
+\r
+ String selectedSet = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(independentSetList.get(selectedSet));\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ }\r
+ }\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+ }\r
+ });\r
+\r
+ ArrayList<String> addedRelationsArrayList = new ArrayList<>();\r
+ Set<String> relationTypes = super.addedRelations.keySet();\r
+ for(String s: relationTypes) {\r
+ for (Pair<String, String> temp : super.addedRelations.get(s)) {\r
+ addedRelationsArrayList.add(temp.first + " " + temp.second);\r
+ }\r
+ }\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+ addRelationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
+ }});\r
+ for(int i= 0; i < relationNames.size(); i++){\r
+ Pair<String, String> tempPair = relations.get(relationNames.get(i));\r
+ applicationSetList.add(tempPair.first);\r
+ applicationSetList.add(tempPair.second);\r
+ }\r
+ }\r
+\r
+\r
+\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.view.View;\r
+\r
+/**\r
+ * Created by Brian on 2/21/2018.\r
+ */\r
+\r
+public class InstallAddress extends AppCompatActivity implements View.OnClickListener,View.OnFocusChangeListener {\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.install_address);\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean b) {\r
+\r
+ }\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.view.View;\r
+\r
+/**\r
+ * Created by Brian on 2/21/2018.\r
+ */\r
+\r
+public class InstallCommPattern extends AppCompatActivity implements View.OnClickListener,View.OnFocusChangeListener {\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.install_comm_pattern);\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean b) {\r
+\r
+ }\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.view.View;\r
+\r
+/**\r
+ * Created by Brian on 2/21/2018.\r
+ */\r
+\r
+public class InstallHost extends AppCompatActivity implements View.OnClickListener,View.OnFocusChangeListener {\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.install_host);\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean b) {\r
+\r
+ }\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.view.View;\r
+\r
+/**\r
+ * Created by Brian on 2/21/2018.\r
+ */\r
+\r
+public class InstallTwoDevicesAndCommPattern extends AppCompatActivity implements View.OnClickListener,View.OnFocusChangeListener {\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.install_two_devices_and_comm_pattern);\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean b) {\r
+\r
+ }\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.view.View;\r
+\r
+/**\r
+ * Created by Brian on 2/21/2018.\r
+ */\r
+\r
+public class InstallZigbeeDeviceAddress extends AppCompatActivity implements View.OnClickListener,View.OnFocusChangeListener {\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.install_zigbee_device_address);\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View view) {\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean b) {\r
+\r
+ }\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.os.Bundle;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+import android.view.View;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.ListView;\r
+import android.widget.Spinner;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 4/16/2018.\r
+ */\r
+\r
+public class Irrigation extends ApplicationWithRelations{\r
+\r
+ private SSH_MySQL getSetsAndRelations;\r
+ private SSH_MySQL getSetList;\r
+ private String filename;\r
+ private ArrayList<String> relationNames; //relations in this application\r
+\r
+ Context context;\r
+ private HashMap<String, ArrayList<String>> availableSets; //all possible sets pulled from pi\r
+\r
+\r
+ @Override\r
+ protected void onCreate( Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.home_security);\r
+ super.context = this;\r
+ context = super.context;\r
+ getSetsAndRelations = new SSH_MySQL();\r
+ getSetList = new SSH_MySQL();\r
+ String getSetsAndRelationsCommand = this.getString(R.string.getIrrigationSetsAndRelationsCommand);\r
+ String getSetListCommand = this.getString(R.string.getSetList);\r
+ List<String> results = new ArrayList<>();\r
+ final String controllerConfigFilename = this.getString(R.string.irrigationControllerConfigFile);\r
+ filename = this.getString(R.string.setsAndRelationsFilename);\r
+ relations = new HashMap<>();\r
+ relationNames = new ArrayList<>();\r
+ relationNameSpinner = (Spinner) findViewById(R.id.selectedRelation);\r
+ relationLeftSpinner = (Spinner) findViewById(R.id.relationLeftSpinner);\r
+ relationRightSpinner = (Spinner) findViewById(R.id.relationRightSpinner);\r
+ addRelationButton = (Button) findViewById(R.id.addRelationButton);\r
+ doneRelationButton = (Button) findViewById(R.id.addRelationDoneButton);\r
+ deleteRelationButton = (Button) findViewById(R.id.addRelationDeleteButton);\r
+ setOrRelationSpinner = (Spinner) findViewById(R.id.setsOrRelations);\r
+ super.hasIndependentSets = true;\r
+ super.independentSetNames = new ArrayList<>();\r
+ super.independentSetList = new HashMap<>();\r
+ super.addedSetList = new HashMap<>();\r
+ super.addedIndependentSets = new HashMap<>();\r
+\r
+ addRelationButton.setOnClickListener(this);\r
+ doneRelationButton.setOnClickListener(this);\r
+ deleteRelationButton.setOnClickListener(this);\r
+ addRelationsListView = (ListView) findViewById(R.id.selectedRelationsList);\r
+ addRelationsListView.setFocusable(false);\r
+ super.addedRelations = new HashMap<> ();\r
+ HashSet<Pair<String, String>> addedrelationsSet = new HashSet<>();\r
+ //addedRelations.put("", addedrelationsSet);\r
+ super.applicationSetList = new HashSet<>();\r
+ setHashMap = new HashMap<>();\r
+ //pull data from config file on iotuser\r
+ try {\r
+ getSetsAndRelations.execute(getSetsAndRelationsCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetsAndRelations.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetsAndRelations.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+\r
+ addSSHResultsToConfig(results, controllerConfigFilename);\r
+ System.out.println("read from file: " + ConfigFileIO.readFromFile(controllerConfigFilename, this));\r
+ super.prop = new Properties();\r
+ File file = new File(getApplicationContext().getFilesDir(), controllerConfigFilename);\r
+ FileInputStream fis = null;\r
+ try{\r
+ fis = new FileInputStream(file);\r
+ super.prop.load(fis);\r
+ fis.close();\r
+ }\r
+ catch (IOException ex){\r
+ System.out.println("Error when reading SpeakerController Config file ");\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ //add sets relations to the relation hashmap\r
+ super.numFields = Integer.parseInt(super.prop.getProperty("FIELD_NUMBER"));\r
+ for(int i = 0; i < super.numFields; i++){\r
+ String name = (super.prop.getProperty("FIELD_" + i));\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")) {\r
+ String relationPair = super.prop.getProperty("FIELD_CLASS_0_" + i) + "," + super.prop.getProperty("FIELD_CLASS_1_" + i);\r
+ addPair(name, relationPair);\r
+ relationNames.add(name);\r
+ }\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTSet")) {\r
+ if(super.prop.getProperty("FIELD_INDEPENDENT_" + i).equals("TRUE")){\r
+ independentSetList.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+ independentSetNames.add(name);\r
+ }\r
+ else{\r
+ setHashMap.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+\r
+ }\r
+ }\r
+ }\r
+ //pull availableSets file from iotuser\r
+ try {\r
+ getSetList.execute(getSetListCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetList.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetList.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ addSSHResultsToConfig(results, setListFilename);\r
+ availableSets = createSetList(setListFilename);\r
+ System.out.println();\r
+\r
+ ArrayList<String> setsOrRelationArrayList = new ArrayList<>();\r
+ setsOrRelationArrayList.add("SETS");\r
+ setsOrRelationArrayList.add("RELATIONS");\r
+ ArrayAdapter setsOrRelationsArrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, setsOrRelationArrayList);\r
+ setOrRelationSpinner.setAdapter(setsOrRelationsArrayAdapter);\r
+\r
+\r
+\r
+ setOrRelationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ //set array adapter values = listed relations\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, relationNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ else{\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, independentSetNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+\r
+\r
+\r
+\r
+ //sets left and right possible values to registered devices in the sets\r
+ relationNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+\r
+\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ relationRightSpinner.setVisibility(View.VISIBLE);\r
+ String selectedRelation = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(relations.get(selectedRelation).first);\r
+ ArrayList availableDevicesRight = availableSets.get(relations.get(selectedRelation).second);\r
+\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ ArrayAdapter rightAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesRight);\r
+\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ rightAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ relationRightSpinner.setAdapter(rightAdapter);\r
+ }\r
+ else{\r
+ relationRightSpinner.setVisibility(View.GONE);\r
+\r
+ String selectedSet = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(independentSetList.get(selectedSet));\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ }\r
+ }\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+ }\r
+ });\r
+\r
+ ArrayList<String> addedRelationsArrayList = new ArrayList<>();\r
+ Set<String> relationTypes = super.addedRelations.keySet();\r
+ for(String s: relationTypes) {\r
+ for (Pair<String, String> temp : super.addedRelations.get(s)) {\r
+ addedRelationsArrayList.add(temp.first + " " + temp.second);\r
+ }\r
+ }\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+ addRelationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
+ }});\r
+ for(int i= 0; i < relationNames.size(); i++){\r
+ Pair<String, String> tempPair = relations.get(relationNames.get(i));\r
+ applicationSetList.add(tempPair.first);\r
+ applicationSetList.add(tempPair.second);\r
+ }\r
+ }\r
+\r
+\r
+\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.os.Bundle;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+import android.view.View;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.ListView;\r
+import android.widget.Spinner;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 4/16/2018.\r
+ */\r
+\r
+public class Lifxtest extends ApplicationWithRelations{\r
+\r
+ private SSH_MySQL getSetsAndRelations;\r
+ private SSH_MySQL getSetList;\r
+ private String filename;\r
+ private ArrayList<String> relationNames; //relations in this application\r
+\r
+ Context context;\r
+ private HashMap<String, ArrayList<String>> availableSets; //all possible sets pulled from pi\r
+\r
+\r
+ @Override\r
+ protected void onCreate( Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.lifxtest);\r
+ super.context = this;\r
+ context = super.context;\r
+ getSetsAndRelations = new SSH_MySQL();\r
+ getSetList = new SSH_MySQL();\r
+ String getSetsAndRelationsCommand = this.getString(R.string.getlifxtestSetsAndRelationsCommand);\r
+ String getSetListCommand = this.getString(R.string.getSetList);\r
+ List<String> results = new ArrayList<>();\r
+ final String controllerConfigFilename = this.getString(R.string.lifxtestControllerConfigFile);\r
+ filename = this.getString(R.string.setsAndRelationsFilename);\r
+ relations = new HashMap<>();\r
+ relationNames = new ArrayList<>();\r
+ relationNameSpinner = (Spinner) findViewById(R.id.selectedRelation);\r
+ relationLeftSpinner = (Spinner) findViewById(R.id.relationLeftSpinner);\r
+ relationRightSpinner = (Spinner) findViewById(R.id.relationRightSpinnerLifx);\r
+ addRelationButton = (Button) findViewById(R.id.addRelationButton);\r
+ doneRelationButton = (Button) findViewById(R.id.addRelationDoneButton);\r
+ deleteRelationButton = (Button) findViewById(R.id.addRelationDeleteButton);\r
+ setOrRelationSpinner = (Spinner) findViewById(R.id.setsOrRelations);\r
+ super.hasIndependentSets = true;\r
+ super.independentSetNames = new ArrayList<>();\r
+ super.independentSetList = new HashMap<>();\r
+ super.addedSetList = new HashMap<>();\r
+ super.addedIndependentSets = new HashMap<>();\r
+\r
+ super.hasRelations = false;\r
+\r
+ addRelationButton.setOnClickListener(this);\r
+ doneRelationButton.setOnClickListener(this);\r
+ deleteRelationButton.setOnClickListener(this);\r
+ addRelationsListView = (ListView) findViewById(R.id.selectedRelationsList);\r
+ addRelationsListView.setFocusable(false);\r
+ super.addedRelations = new HashMap<> ();\r
+ HashSet<Pair<String, String>> addedrelationsSet = new HashSet<>();\r
+ //addedRelations.put("", addedrelationsSet);\r
+ super.applicationSetList = new HashSet<>();\r
+ setHashMap = new HashMap<>();\r
+ //pull data from config file on iotuser\r
+ try {\r
+ getSetsAndRelations.execute(getSetsAndRelationsCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetsAndRelations.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetsAndRelations.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+\r
+ addSSHResultsToConfig(results, controllerConfigFilename);\r
+ System.out.println("read from file: " + ConfigFileIO.readFromFile(controllerConfigFilename, this));\r
+ super.prop = new Properties();\r
+ File file = new File(getApplicationContext().getFilesDir(), controllerConfigFilename);\r
+ FileInputStream fis = null;\r
+ try{\r
+ fis = new FileInputStream(file);\r
+ super.prop.load(fis);\r
+ fis.close();\r
+ }\r
+ catch (IOException ex){\r
+ System.out.println("Error when reading SpeakerController Config file ");\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ //add sets relations to the relation hashmap\r
+ super.numFields = Integer.parseInt(super.prop.getProperty("FIELD_NUMBER"));\r
+ for(int i = 0; i < super.numFields; i++){\r
+ String name = (super.prop.getProperty("FIELD_" + i));\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")) {\r
+ String relationPair = super.prop.getProperty("FIELD_CLASS_0_" + i) + "," + super.prop.getProperty("FIELD_CLASS_1_" + i);\r
+ addPair(name, relationPair);\r
+ super.hasRelations = true;\r
+ relationNames.add(name);\r
+ }\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTSet")) {\r
+ if(super.prop.getProperty("FIELD_INDEPENDENT_" + i).equals("TRUE")){\r
+ independentSetList.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+ independentSetNames.add(name);\r
+ }\r
+ else{\r
+ setHashMap.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+\r
+ }\r
+ }\r
+ }\r
+ //pull availableSets file from iotuser\r
+ try {\r
+ getSetList.execute(getSetListCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetList.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetList.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ addSSHResultsToConfig(results, setListFilename);\r
+ availableSets = createSetList(setListFilename);\r
+ System.out.println();\r
+\r
+ ArrayList<String> setsOrRelationArrayList = new ArrayList<>();\r
+ if(super.hasIndependentSets){\r
+ setsOrRelationArrayList.add("SETS");\r
+\r
+ }\r
+ if(super.hasRelations) {\r
+ setsOrRelationArrayList.add("RELATIONS");\r
+ }\r
+ ArrayAdapter setsOrRelationsArrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, setsOrRelationArrayList);\r
+ setOrRelationSpinner.setAdapter(setsOrRelationsArrayAdapter);\r
+\r
+\r
+\r
+ setOrRelationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ //set array adapter values = listed relations\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, relationNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ else{\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, independentSetNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+\r
+\r
+\r
+\r
+ //sets left and right possible values to registered devices in the sets\r
+ relationNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+\r
+\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ relationRightSpinner.setVisibility(View.VISIBLE);\r
+ String selectedRelation = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(relations.get(selectedRelation).first);\r
+ ArrayList availableDevicesRight = availableSets.get(relations.get(selectedRelation).second);\r
+\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ ArrayAdapter rightAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesRight);\r
+\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ rightAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ relationRightSpinner.setAdapter(rightAdapter);\r
+ }\r
+ else{\r
+ relationRightSpinner.setVisibility(View.GONE);\r
+\r
+ String selectedSet = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(independentSetList.get(selectedSet));\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ }\r
+ }\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+ }\r
+ });\r
+\r
+ ArrayList<String> addedRelationsArrayList = new ArrayList<>();\r
+ Set<String> relationTypes = super.addedRelations.keySet();\r
+ for(String s: relationTypes) {\r
+ for (Pair<String, String> temp : super.addedRelations.get(s)) {\r
+ addedRelationsArrayList.add(temp.first + " " + temp.second);\r
+ }\r
+ }\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+ addRelationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
+ }});\r
+ for(int i= 0; i < relationNames.size(); i++){\r
+ Pair<String, String> tempPair = relations.get(relationNames.get(i));\r
+ applicationSetList.add(tempPair.first);\r
+ applicationSetList.add(tempPair.second);\r
+ }\r
+ }\r
+\r
+\r
+\r
+}\r
package com.example.lede2;\r
\r
+import android.content.Context;\r
import android.content.Intent;\r
+import android.net.ConnectivityManager;\r
+import android.net.NetworkInfo;\r
import android.support.v7.app.AppCompatActivity;\r
import android.os.Bundle;\r
import android.util.Log;\r
import android.widget.Button;\r
import android.widget.EditText;\r
import android.widget.ListView;\r
+import android.widget.Spinner;\r
import android.widget.TextView;\r
import android.widget.Toast;\r
\r
+import java.util.ArrayList;\r
+import java.util.Hashtable;\r
import java.util.List;\r
+import java.util.Scanner;\r
+import java.util.Set;\r
\r
public class ListActivity extends AppCompatActivity implements View.OnClickListener {\r
\r
Button delete;//delete button in UI\r
- Button deviceInfo;//select button in UI\r
+ Button back;//select button in UI\r
ListView listview;//listview in UI\r
SSH ssh;//Connection object between Android & Router\r
List<String> tmp;//data structure which has IoT device information already registered on LEDE2\r
ArrayAdapter adapter;//adapter between tmp and listview\r
String device_info;\r
protected String deviceIp;\r
+ ArrayList<String> deviceList;\r
TextView ip;\r
TextView mac;\r
+ Hashtable<String, String> nameAndValues;\r
+ Scanner scanner;\r
+ Spinner selectedDevice;\r
\r
+\r
+\r
+ //have to check wifi before delete\r
@Override\r
protected void onCreate(Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
setContentView(R.layout.activity_list);\r
-\r
- ssh = new SSH();\r
- try {\r
- tmp = ssh.execute("-ln").get();\r
- Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
- } catch (Exception e) {\r
+ nameAndValues = new Hashtable<>();\r
+ selectedDevice = (Spinner) findViewById(R.id.selectedName);\r
+ try{\r
+ ssh = new SSH();\r
+ ssh.execute("-ln");\r
+ Thread.sleep(1000);\r
+ tmp = ssh.getResultLines();\r
+ while(tmp.size() == 0){\r
+ Thread.sleep(500);\r
+ tmp = ssh.getResultLines();\r
+ }\r
+ }\r
+ catch (Exception e){\r
+ e.printStackTrace();\r
+ Log.d("cat device dat", "exception at cat device.dat");\r
}\r
+ tmp.remove(0);\r
+ for(int i = 0; i < tmp.size(); i++){\r
+ Scanner scanner = new Scanner(tmp.get(i));\r
+ if(scanner.hasNext()){\r
+ nameAndValues.put(scanner.next(), tmp.get(i));\r
+ }\r
+ }\r
+ Set<String> nameAndValuesKeySet = nameAndValues.keySet();\r
+ deviceList = new ArrayList<String>();\r
+ for(String key: nameAndValuesKeySet){\r
+ deviceList.add(key);\r
+ }\r
+\r
\r
delete = (Button) findViewById(R.id.delete);\r
- deviceInfo = (Button) findViewById(R.id.deviceInfo);\r
+ back = (Button) findViewById(R.id.list_back);\r
listview = (ListView) findViewById(R.id.listView1);\r
ip = (TextView) findViewById(R.id.txt_ip);\r
mac = (TextView) findViewById(R.id.txt_mac);\r
-\r
- adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, tmp);//register tmp array to adapter\r
+ adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, deviceList);//register tmp array to adapter\r
\r
delete.setOnClickListener(this);\r
- deviceInfo.setOnClickListener(this);\r
+ back.setOnClickListener(this);\r
listview.setAdapter(adapter);\r
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
device_info = listview.getItemAtPosition(position).toString();\r
}});\r
+\r
+ ArrayAdapter typeAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, deviceList);\r
+ typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ selectedDevice.setAdapter(typeAdapter);\r
+\r
+ selectedDevice.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ String nameIPMac = nameAndValues.get(selectedDevice.getSelectedItem().toString() );\r
+ scanner = new Scanner(nameIPMac);\r
+ scanner.next();\r
+ mac.setText(scanner.next());\r
+ ip.setText(scanner.next());\r
+ }\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+ }\r
+ });\r
+\r
+\r
}\r
\r
@Override\r
public void onClick(View v) {\r
- if (v == delete) {\r
- //SparseBooleanArray's data is Ture or False\r
+ System.out.println("device info: " + device_info);\r
+ if (v == delete && isNetworkAvailable()) {\r
+ //SparseBooleanArray's data is True or False\r
SparseBooleanArray checkedItems = listview.getCheckedItemPositions();//to check which devices are checked in listview(check -> true, no check -> false)\r
int count = adapter.getCount();//number of items in listview\r
String command = "-dn "; //after, +'name '\r
for (int i = count - 1; i >= 0; i--) {//scan from back\r
//i : index of IoT device which will be removed in tmp array\r
if (checkedItems.get(i)) {//if check\r
- String rmName = tmp.get(i).toString();//save the name of checked IoT device\r
- command += rmName + " ";//complete command\r
+ String selectedValue = (String)listview.getItemAtPosition(i);\r
+ scanner = new Scanner(selectedValue);\r
+ String name = scanner.next();\r
+ command += name + " ";//complete command\r
//remove this information on the listview\r
- tmp.remove(i);\r
+ nameAndValues.remove(name);\r
+ deviceList.remove(name);\r
//deviceIp = checkedItems.\r
}\r
}\r
//delete checked mark in listview\r
listview.clearChoices();\r
\r
- } else if (v == deviceInfo) {\r
- String[] devInfo = device_info.split("\\s+");\r
- ip.setText(devInfo[1]);\r
- mac.setText(devInfo[2]);\r
- Toast t = Toast.makeText(this, device_info, Toast.LENGTH_SHORT);\r
- t.show();\r
- /*} else if (v == selectAll) {\r
- int count;\r
- count = adapter.getCount();\r
-\r
- for (int i = 0; i < count; i++) {\r
- listview.setItemChecked(i, true);\r
- }*/\r
}\r
+ else if (v == back && isNetworkAvailable()){\r
+ finish();\r
+ }\r
+\r
}\r
+\r
+ boolean isNetworkAvailable() {//check whether wifi connection is or not\r
+ Context context = getApplicationContext();\r
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\r
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();\r
+ boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();\r
+ return isConnected;\r
+ }\r
+\r
}\r
package com.example.lede2;\r
\r
+import android.app.ProgressDialog;\r
import android.content.Context;\r
import android.content.Intent;\r
import android.net.ConnectivityManager;\r
\r
public class MainActivity extends AppCompatActivity implements View.OnClickListener {\r
\r
+ Button databaseButton;\r
Button registerButton;\r
Button listButton;\r
- Button insertDBButton;\r
- Button deleteDBButton;\r
+ Button applicationsButton;\r
Button configButton;\r
- Button relationButton;\r
+ Button driversButton;\r
TextView ssid;\r
+ DatabaseObject databaseObject;\r
+ ProgressDialog dialog;\r
protected static Context context;\r
protected static String DEF_RSSID;\r
protected static String DEF_RPWD;\r
protected static String DEF_CHANGE_DEFAULT_SCRIPT;\r
protected static String DEF_CONNECT_DEVICE_SCRIPT;\r
protected static String DEF_REGISTER_DEVICE_SCRIPT;\r
- protected static String DEF_ADD_DEVICE_FILE;\r
- protected static String DEF_ADD_DEVICE_ADDRESS_FILE;\r
- protected static String DEF_ADD_DEVICE_COMM_FILE;\r
+\r
+ protected static String DEF_INSTALL_DEVICE_FILE;\r
+ protected static String DEF_INSTALL_DEVICE_ADDRESS_FILE;\r
+ protected static String DEF_INSTALL_DEVICE_COMM_FILE;\r
+ protected static String DEF_INSTALL_ADDRESS_FILE;\r
+ protected static String DEF_INSTALL_TWO_DEVICES_AND_COMM_FILE;\r
+ protected static String DEF_INSTALL_ZIGBEE_DEVICE_ADDRESS_FILE;\r
+ protected static String DEF_INSTALL_HOST_FILE;\r
+ protected static String DEF_DELETE_ENTITY_FILE;\r
+ protected static String DEF_DELETE_COMM_PATTERN_FILE;\r
+ protected static String DEF_DELETE_ADDRESS_FILE;\r
+ protected static String DEF_DELETE_DEVICE_ADDRESS_FILE;\r
+ protected static String DEF_DELETE_ZIGBEE_DEVICE_ADDRESS_FILE;\r
+ protected static String DEF_DELETE_HOST_FILE;\r
+\r
+\r
protected static String DEF_ADD_DEVICE_TO_MYSQL;\r
protected static String DEF_MYSQL_CONFIG_FILE;\r
protected static String DEF_INSTALL_CMD;\r
protected static String DEF_DELETE_CMD;\r
protected static String DEF_INSTALL_ADDRESS_CMD;\r
+ protected static String DEF_INSTALL_ZBADDRESS_CMD;\r
protected static String DEF_DELETE_ADDRESS_CMD;\r
protected static String DEF_INSTALL_RELATION_CMD;\r
protected static String DEF_DELETE_RELATION_CMD;\r
+ protected static String DEF_DATABASE_NAME;\r
+\r
\r
@Override\r
protected void onCreate(Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
setContentView(R.layout.activity_main);\r
-\r
registerButton = (Button) findViewById(R.id.register);\r
listButton = (Button) findViewById(R.id.list);\r
- insertDBButton = (Button) findViewById(R.id.insert_db);\r
- deleteDBButton = (Button) findViewById(R.id.delete_db);\r
+ databaseButton = (Button) findViewById(R.id.database);\r
+ applicationsButton = (Button) findViewById(R.id.applications);\r
configButton = (Button) findViewById(R.id.config);\r
- relationButton = (Button) findViewById(R.id.add_del_comm);\r
+ driversButton = (Button) findViewById(R.id.drivers);\r
ssid = (TextView)findViewById(R.id.device_subtype);\r
\r
+\r
registerButton.setOnClickListener(this);\r
listButton.setOnClickListener(this);\r
- insertDBButton.setOnClickListener(this);\r
- deleteDBButton.setOnClickListener(this);\r
+ databaseButton.setOnClickListener(this);\r
+ applicationsButton.setOnClickListener(this);\r
configButton.setOnClickListener(this);\r
- relationButton.setOnClickListener(this);\r
+ driversButton.setOnClickListener(this);\r
\r
context = getApplicationContext();\r
DEF_RSSID = context.getResources().getString(R.string.default_rssid);\r
DEF_RPWD = context.getResources().getString(R.string.default_rpwd);\r
DEF_ROUTERIP = context.getResources().getString(R.string.default_routerip);\r
DEF_ROUTERUSER = context.getResources().getString(R.string.default_routeruser);\r
- DEF_CHANGE_DEFAULT_SCRIPT = context.getResources().getString(R.string.change_default_script);\r
- DEF_CONNECT_DEVICE_SCRIPT = context.getResources().getString(R.string.connect_device_script);\r
- DEF_REGISTER_DEVICE_SCRIPT = context.getResources().getString(R.string.register_device_script);\r
- DEF_ADD_DEVICE_FILE = context.getResources().getString(R.string.add_device_file);\r
- DEF_ADD_DEVICE_ADDRESS_FILE = context.getResources().getString(R.string.add_device_address_file);\r
- DEF_ADD_DEVICE_COMM_FILE = context.getResources().getString(R.string.add_device_comm_file);\r
+ DEF_CHANGE_DEFAULT_SCRIPT = context.getResources()\r
+ .getString(R.string.change_default_script);\r
+ DEF_CONNECT_DEVICE_SCRIPT = context.getResources()\r
+ .getString(R.string.connect_device_script);\r
+ DEF_REGISTER_DEVICE_SCRIPT = context.getResources()\r
+ .getString(R.string.register_device_script);\r
+ DEF_INSTALL_DEVICE_FILE = context.getResources().getString(R.string.install_device_file);\r
+ DEF_INSTALL_DEVICE_ADDRESS_FILE = context.getResources().getString\r
+ (R.string.install_device_address_file);\r
+ DEF_INSTALL_TWO_DEVICES_AND_COMM_FILE = context.getResources()\r
+ .getString(R.string.install_two_devices_and_comm_file);\r
+ DEF_INSTALL_ADDRESS_FILE = context.getResources().getString(R.string.install_address_file);\r
+ DEF_INSTALL_DEVICE_COMM_FILE = context.getResources().getString(R.string.install_device_comm_file);\r
+ DEF_INSTALL_ZIGBEE_DEVICE_ADDRESS_FILE = context.getResources()\r
+ .getString(R.string.install_zigbee_device_address_file);\r
+ DEF_INSTALL_HOST_FILE = context.getResources().getString(R.string.install_host_file);\r
+ DEF_DELETE_ENTITY_FILE = context.getResources().getString(R.string.delete_entity_file);\r
+ DEF_DELETE_COMM_PATTERN_FILE = context.getResources()\r
+ .getString(R.string.delete_comm_pattern_file);\r
+ DEF_DELETE_ADDRESS_FILE = context.getResources().getString(R.string.delete_address_file);\r
+ DEF_DELETE_DEVICE_ADDRESS_FILE = context.getResources()\r
+ .getString(R.string.delete_device_address_file);\r
+ DEF_DELETE_ZIGBEE_DEVICE_ADDRESS_FILE = context.getResources()\r
+ .getString(R.string.delete_zigbee_device_address_file);\r
+ DEF_DELETE_HOST_FILE = context.getResources().getString(R.string.delete_host);\r
+\r
DEF_MYSQLHOSTUSER = context.getResources().getString(R.string.mysql_hostuser);\r
DEF_MYSQLHOSTIP = context.getResources().getString(R.string.mysql_hostip);\r
DEF_MYSQLHOSTPASSWORD = context.getResources().getString(R.string.mysql_hostpassword);\r
DEF_ADD_DEVICE_TO_MYSQL = context.getResources().getString(R.string.add_device_to_mysql);\r
+\r
+\r
DEF_MYSQL_CONFIG_FILE = context.getResources().getString(R.string.mysql_config_file);\r
DEF_INSTALL_CMD = context.getResources().getString(R.string.install_cmd);\r
DEF_DELETE_CMD = context.getResources().getString(R.string.delete_cmd);\r
DEF_INSTALL_ADDRESS_CMD = context.getResources().getString(R.string.install_address_cmd);\r
+ DEF_INSTALL_ZBADDRESS_CMD = context.getResources().getString(R.string.install_zb_address_cmd);\r
DEF_DELETE_ADDRESS_CMD = context.getResources().getString(R.string.delete_address_cmd);\r
DEF_INSTALL_RELATION_CMD = context.getResources().getString(R.string.add_comm_cmd);\r
DEF_DELETE_RELATION_CMD = context.getResources().getString(R.string.delete_comm_cmd);\r
+\r
+ DEF_DATABASE_NAME = context.getResources().getString(R.string.database_name);\r
+\r
ssid.setText(DEF_RSSID);\r
+ databaseObject = new DatabaseObject();\r
+ //Check if the user has wifi connection\r
+ if (isNetworkAvailable() == false) {//without wifi connection\r
+ Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
+ t.show();\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ }\r
+ //sends to another page to update/retrieve information about the database from the pi\r
+ startActivity(new Intent(this, UpdateLocalConfigFiles.class));\r
+\r
}\r
\r
public void onClick(View v) {\r
if(v == configButton){\r
startActivityForResult(new Intent(this,ConfigActivity.class),1000);\r
}\r
-\r
//Users try to execute shell scripts by pushing button,\r
//but problem could occur(application stop) if user push the button without wifi connection\r
//As a result, below function have to be implemented.\r
if (isNetworkAvailable() == false) {//without wifi connection\r
Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
t.show();\r
- startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ System.out.println("STOPPPPP");\r
+ //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK)); // Not as good as the lines above\r
} else {//with wifi connection\r
+\r
+ dialog = new ProgressDialog(this);\r
+ dialog.setMessage("Please Wait");\r
+ dialog.setCancelable(false);\r
+ dialog.setInverseBackgroundForced(false);\r
+ dialog.show();\r
+\r
if (v == registerButton) {\r
Log.d("CLICKING", "Clicking on register!");\r
- startActivity(new Intent(this, EnrollDeviceActivity.class));\r
+ startActivity(new Intent(this, RegistrationRouterCheck.class));\r
+// dialog.hide();\r
//startActivity(new Intent(this, AddDeviceActivity.class));\r
} else if (v == listButton) {\r
Log.d("CLICKING", "Clicking on list activity!");\r
startActivity(new Intent(this, ListActivity.class));\r
- } else if (v == insertDBButton) {\r
+// dialog.hide();\r
+ } else if (v == databaseButton) {\r
+ //Need to change. Not every install option needs its own page.\r
Log.d("CLICKING", "Clicking on add device!");\r
- startActivity(new Intent(this, AddDeviceActivity.class));\r
- } else if (v == deleteDBButton) {\r
+ startActivity(new Intent(this, DatabaseActivity.class));\r
+// dialog.hide();\r
+ } else if (v == applicationsButton) {\r
Log.d("CLICKING", "Clicking on delete device!");\r
- startActivity(new Intent(this, DeleteDeviceActivity.class));\r
- } else if (v == relationButton) {\r
+ startActivity(new Intent(this, ApplicationsList.class));\r
+// dialog.hide();\r
+ } else if (v == driversButton) {\r
Log.d("CLICKING", "Clicking on add communication!");\r
- startActivity(new Intent(this, RelationActivity.class));\r
+ startActivity(new Intent(this, DriversSelectActivity.class));\r
}\r
}\r
}\r
\r
+ @Override\r
+ protected void onResume() {\r
+ super.onResume();\r
+ if(dialog != null && dialog.isShowing()){\r
+ dialog.dismiss();\r
+ }\r
+ }\r
+\r
boolean isNetworkAvailable() {//check whether wifi connection is or not\r
Context context = getApplicationContext();\r
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\r
ssid.setText(ConfigActivity.RSSID);\r
}\r
}\r
-}\r
+}
\ No newline at end of file
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.ClipData;\r
+import android.content.ClipboardManager;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.net.ConnectivityManager;\r
+import android.net.NetworkInfo;\r
+import android.net.wifi.WifiConfiguration;\r
+import android.net.wifi.WifiInfo;\r
+import android.net.wifi.WifiManager;\r
+import android.os.Bundle;\r
+import android.support.design.widget.Snackbar;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.util.Log;\r
+import android.view.View;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.EditText;\r
+import android.widget.Spinner;\r
+import android.widget.Toast;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Scanner;\r
+\r
+/**\r
+ * Created by Brian on 4/3/2018.\r
+ */\r
+\r
+public class RegisterDeviceAdding extends AppCompatActivity implements View.OnClickListener {\r
+ private String devdat_macaddress_filename;\r
+ private String dhcp_macaddress_filename;\r
+ private Spinner macAddressSpinner;\r
+ private EditText name;\r
+ private String deviceName;\r
+ private Button wifi;//wifi button in UI\r
+ private SSH ssh;//Connection object between Android & Router\r
+ private Context context;\r
+ private String newpsk;\r
+ private WifiManager manager;\r
+\r
+ private Button done;\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.register_device_adding);\r
+ context = getApplicationContext();\r
+ manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);\r
+ Bundle extras = getIntent().getExtras();\r
+ if(extras!= null){\r
+ newpsk = extras.getString("newpsk");\r
+ }\r
+ macAddressSpinner = (Spinner) findViewById(R.id.registerMACs);\r
+ wifi = (Button) findViewById(R.id.regAddWifi);\r
+ wifi.setOnClickListener(this);\r
+ devdat_macaddress_filename = this.getString(R.string.devices_dat_filename);\r
+ dhcp_macaddress_filename = "temp_DHCP.txt";\r
+ name = (EditText)findViewById(R.id.registerName);\r
+ done = (Button)findViewById(R.id.registerDone);\r
+ done.setOnClickListener(this);\r
+\r
+ ArrayList<String> macAddressesdhcp = ConfigFileIO.getMACAddressesDHCP(dhcp_macaddress_filename, this);\r
+ ArrayList<String> macAddressesdevdat = ConfigFileIO.getMACAddressesDevDat(devdat_macaddress_filename, this);\r
+ ArrayList<String> macAddresses = new ArrayList<>();\r
+ for(int i = 0; i < macAddressesdhcp.size();i++){\r
+ if(!macAddressesdevdat.contains(macAddressesdhcp.get(i))){\r
+ macAddresses.add(macAddressesdhcp.get(i));\r
+ }\r
+ }\r
+\r
+ //sets value for macAddressesSpinner\r
+ ArrayAdapter typeAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, macAddresses);\r
+ typeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ macAddressSpinner.setAdapter(typeAdapter);\r
+\r
+\r
+\r
+\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ if (v == done) {\r
+ //Users try to execute shell scripts by pushing button,\r
+ //but problem could occur(application stop) if user push the button without wifi connection\r
+ //As a result, below function have to be implemented.\r
+ if (isNetworkAvailable() == false) {//without wifi connection\r
+ Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
+ t.show();\r
+ //choosing wifi connection\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+ } else {//with wifi connection\r
+ deviceName = name.getText().toString();\r
+ if(deviceName.equals("")){\r
+ Toast t = Toast.makeText(this, R.string.empty_name,Toast.LENGTH_SHORT);\r
+ t.show();\r
+ return;\r
+ }\r
+ Scanner scanner = new Scanner(deviceName);\r
+ scanner.next();\r
+ if(scanner.hasNext()){\r
+ Snackbar oneWordName = Snackbar.make(findViewById(R.id.oneWordName),\r
+ "Please only use one word names", 2000);\r
+ oneWordName.show();\r
+ return;\r
+ }\r
+ String selectedMacAddress = macAddressSpinner.getSelectedItem().toString();\r
+ context = getApplicationContext();\r
+ if (getWifiName(context).equals("\""+ ConfigActivity.RSSID +"\"")) {//if wifi name is LEDE2\r
+ ssh = new SSH();\r
+ // execute shell script (script's function -> Save contents(Mac,Ip,Key,Name) on hostapd-psk)\r
+ List<String> results = new ArrayList<>();\r
+ try {//To execute asyntask in ssh object, we have to sleep main thread\r
+ ssh.execute("-co " + newpsk + " " + selectedMacAddress + " " +\r
+ deviceName + " " + ConfigActivity.RPWD );\r
+ Thread.sleep(2000);\r
+\r
+ List<WifiConfiguration> list = manager.getConfiguredNetworks();\r
+ for( WifiConfiguration i : list ) {\r
+ if(i.SSID.equals("\"LEDE2\"")){\r
+ manager.removeNetwork(i.networkId);\r
+ manager.saveConfiguration();\r
+ System.out.println("deleted");\r
+ }\r
+ }\r
+ WifiConfiguration wifiConfig = new WifiConfiguration();\r
+ wifiConfig.SSID = String.format("\"%s\"", "LEDE2");\r
+ wifiConfig.preSharedKey = String.format("\"%s\"", context.getResources().getString(R.string.default_rpwd));\r
+\r
+ int netId = manager.addNetwork(wifiConfig);\r
+ manager.disconnect();\r
+ manager.enableNetwork(netId, true);\r
+ manager.reconnect();\r
+\r
+\r
+ //To execute asyntask in ssh object, we have to sleep main thread\r
+// results = ssh.getResultLines();\r
+// while(results.size() == 0){\r
+// Thread.sleep(500);\r
+// results = ssh.getResultLines();\r
+// System.out.println(results);\r
+// }\r
+ } catch (Exception e) {\r
+ Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onClick method of EnrollDeviceActivity");\r
+ }\r
+ } else { //if name of wifi is not LEDE -> go to wifi configuration screen to change wifi type\r
+ Toast t = Toast.makeText(this, R.string.try_again, Toast.LENGTH_SHORT);\r
+ t.show();\r
+ //Choosing wifi connection\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+ }\r
+ }\r
+ // Call activity that adds device - not doing this flow because we haven't found\r
+ // a way to change password without restarting WiFi\r
+ //startActivity(new Intent(this, AddDeviceActivity.class));\r
+ //finish();\r
+ } else if (v == wifi) {\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+ }\r
+\r
+ ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);\r
+ ClipData clip = ClipData.newPlainText("old password", context.getResources().getString(R.string.default_rpwd));\r
+ clipboard.setPrimaryClip(clip);\r
+ finish();\r
+ }\r
+\r
+\r
+ /******************************************************************************************************************************************************************/\r
+ //Detect you are connected to a specific network.\r
+ /******************************************************************************************************************************************************************/\r
+ public String getWifiName(Context context) {\r
+ WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);\r
+ if (manager.isWifiEnabled()) {\r
+ WifiInfo wifiInfo = manager.getConnectionInfo();\r
+ if (wifiInfo != null) {\r
+ NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());\r
+ if (state == NetworkInfo.DetailedState.CONNECTED || state == NetworkInfo.DetailedState.OBTAINING_IPADDR) {\r
+ return wifiInfo.getSSID();\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ boolean isNetworkAvailable() {//check whether wifi connection is or not\r
+ Context context = getApplicationContext();\r
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\r
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();\r
+ boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();\r
+ return isConnected;\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.ClipData;\r
+import android.content.ClipboardManager;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.net.ConnectivityManager;\r
+import android.net.NetworkInfo;\r
+import android.net.wifi.WifiInfo;\r
+import android.net.wifi.WifiManager;\r
+import android.support.design.widget.Snackbar;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.os.Bundle;\r
+import android.view.View;\r
+import android.view.inputmethod.InputMethodManager;\r
+import android.widget.Button;\r
+import android.widget.EditText;\r
+import android.widget.TextView;\r
+import android.widget.Toast;\r
+import android.util.Log;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Random;\r
+\r
+public class RegisterDeviceLoading extends AppCompatActivity implements View.OnClickListener, View.OnFocusChangeListener {\r
+\r
+ private static final int REQUEST_RESULT = 1001;\r
+ Button done;//Done button in UI\r
+ Button wifi;//wifi button in UI\r
+ SSH ssh;//Connection object between Android & Router\r
+ Context context;\r
+ TextView psk;//red letter in UI\r
+ String newpsk;//same as psk (different data type)\r
+ EditText name;//device name newly registered in UI\r
+ String deviceName;//same as name(different data type)\r
+\r
+ @Override\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.activity_enroll_device);\r
+\r
+ ssh = new SSH();\r
+ psk = (TextView) findViewById(R.id.add_psk);\r
+ done = (Button) findViewById(R.id.done);\r
+ wifi = (Button) findViewById(R.id.wifi);\r
+ name = (EditText) findViewById(R.id.name);\r
+\r
+ done.setOnClickListener(this);\r
+ wifi.setOnClickListener(this);\r
+ name.setOnFocusChangeListener(this);\r
+\r
+ //Make random password and show the password through EditText\r
+ newpsk = generateRandomPassword();\r
+ psk.setText(newpsk);\r
+\r
+ try {//To execute asyntask in ssh object, we have to sleep main thread\r
+ ssh.execute("-ch " + newpsk);\r
+ Thread.sleep(1000);\r
+ } catch (Exception e) {\r
+ Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onCreate method of EnrollDeviceActivity");\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean hasFocus) {//function not to modify randomly generated password for newly registered device\r
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\r
+ if (hasFocus) {\r
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\r
+ } else {\r
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\r
+ }\r
+ }\r
+\r
+ boolean isNetworkAvailable() {//check whether wifi connection is or not\r
+ Context context = getApplicationContext();\r
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\r
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();\r
+ boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();\r
+ return isConnected;\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ if (v == done) {\r
+ //Users try to execute shell scripts by pushing button,\r
+ //but problem could occur(application stop) if user push the button without wifi connection\r
+ //As a result, below function have to be implemented.\r
+ if (isNetworkAvailable() == false) {//without wifi connection\r
+ Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
+ t.show();\r
+ //choosing wifi connection\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+ } else {//with wifi connection\r
+ deviceName = name.getText().toString();\r
+ if(deviceName.equals("")){\r
+ Toast t = Toast.makeText(this, R.string.empty_name,Toast.LENGTH_SHORT);\r
+ t.show();\r
+ return;\r
+ }\r
+ context = getApplicationContext();\r
+ if (getWifiName(context).equals("\""+ ConfigActivity.RSSID +"\"")) {//if wifi name is LEDE2\r
+ String networkPass = psk.getText().toString();//random password\r
+ ssh = new SSH();\r
+\r
+ // execute shell script (script's function -> Save contents(Mac,Ip,Key,Name) on hostapd-psk)\r
+ ssh.execute("-co " + networkPass + " " + deviceName + " " + ConfigActivity.RPWD);//review!!!!!!\r
+ try {//To execute asyntask in ssh object, we have to sleep main thread\r
+ Thread.sleep(1000);\r
+ } catch (Exception e) {\r
+ Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onClick method of EnrollDeviceActivity");\r
+ }\r
+ finish();//Go back to the Main Activity\r
+ } else { //if name of wifi is not LEDE -> go to wifi configuration screen to change wifi type\r
+ Toast t = Toast.makeText(this, R.string.try_again, Toast.LENGTH_SHORT);\r
+ t.show();\r
+ //Choosing wifi connection\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+ }\r
+ }\r
+ // Call activity that adds device - not doing this flow because we haven't found\r
+ // a way to change password without restarting WiFi\r
+ //startActivity(new Intent(this, AddDeviceActivity.class));\r
+ //finish();\r
+ } else if (v == wifi) {\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ }\r
+ }\r
+\r
+ /******************************************************************************************************************************************************************/\r
+ //Detect you are connected to a specific network.\r
+ /******************************************************************************************************************************************************************/\r
+ public String getWifiName(Context context) {\r
+ WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);\r
+ if (manager.isWifiEnabled()) {\r
+ WifiInfo wifiInfo = manager.getConnectionInfo();\r
+ if (wifiInfo != null) {\r
+ NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());\r
+ if (state == NetworkInfo.DetailedState.CONNECTED || state == NetworkInfo.DetailedState.OBTAINING_IPADDR) {\r
+ return wifiInfo.getSSID();\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ /******************************************************************************************************************************************************************/\r
+ // Generate a random password and return it\r
+ /******************************************************************************************************************************************************************/\r
+ public String generateRandomPassword() {\r
+ String password = new String();\r
+\r
+ StringBuffer rndpassword = new StringBuffer();\r
+ Random rnd = new Random();\r
+ int digitnum = 20;\r
+ // Generate random 20digit password with upper / lower case alphabet + numbers\r
+ // There are 10 int nums, 26 lower alphabets, 26 upper alphabets. Total 62\r
+ // So 2/12 possiblity of int, 5/12 lower, 5/12 upper alphabets.\r
+ for (int i = 0; i < digitnum; i++) {\r
+ int rIndex = rnd.nextInt(12);\r
+ if (rIndex >= 0 && rIndex < 2) { // 0 - 9\r
+ rndpassword.append((rnd.nextInt(10)));\r
+ } else if (rIndex >= 2 && rIndex < 7) { // a-z\r
+ rndpassword.append((char) ((int) (rnd.nextInt(26)) + 97));\r
+ } else { // A-Z\r
+ rndpassword.append((char) ((int) (rnd.nextInt(26)) + 65));\r
+ }\r
+ }\r
+ password = rndpassword.toString();\r
+ return password;\r
+ }\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.app.ProgressDialog;\r
+import android.content.Intent;\r
+import android.content.ClipData;\r
+import android.content.ClipboardManager;\r
+import android.content.Context;\r
+import android.net.ConnectivityManager;\r
+import android.net.NetworkInfo;\r
+import android.net.wifi.WifiConfiguration;\r
+import android.net.wifi.WifiInfo;\r
+import android.net.wifi.WifiManager;\r
+import android.os.SystemClock;\r
+import android.support.design.widget.Snackbar;\r
+import android.support.design.widget.CoordinatorLayout;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.os.Bundle;\r
+import android.view.View;\r
+import android.view.WindowManager;\r
+import android.view.inputmethod.InputMethodManager;\r
+import android.widget.Button;\r
+import android.widget.EditText;\r
+import android.widget.TextView;\r
+import android.widget.Toast;\r
+import android.util.Log;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.io.File;\r
+import java.util.Random;\r
+import java.lang.Thread;\r
+\r
+\r
+/**\r
+ * Created by kevin on 4/3/2018.\r
+ */\r
+\r
+public class RegistrationRouterCheck extends AppCompatActivity implements View.OnClickListener{\r
+ private SSH routerConnection;\r
+ private SSH routerConnection2;\r
+ private String command;\r
+ public String temp_dhcp_filename;\r
+ public String initial_dhcp_filename;\r
+ public String initialDHCP;\r
+ private String tempDHCP;\r
+ private String newpsk;\r
+ private TextView password;\r
+ private boolean initialDHCPCall;\r
+ public String commandRouter = "cat /tmp/dhcp.leases";\r
+ private WifiManager manager;\r
+ ProgressDialog dialog;\r
+ Button back;\r
+ Button check;\r
+ Button load;\r
+\r
+\r
+\r
+ @Override\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.registration_layout);\r
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);\r
+ Context context = getApplicationContext();\r
+ WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);\r
+\r
+\r
+\r
+ password = (TextView) findViewById(R.id.newPassword);\r
+ back = (Button) findViewById(R.id.back);\r
+ load = (Button) findViewById(R.id.load);\r
+ check = (Button) findViewById(R.id.check);\r
+\r
+ back.setOnClickListener(this);\r
+ load.setOnClickListener(this);\r
+ check.setOnClickListener(this);\r
+\r
+ command = "cat /tmp/dhcp.leases";\r
+ temp_dhcp_filename = "temp_DHCP.txt";\r
+ initial_dhcp_filename = this.getString(R.string.initial_DHCP);\r
+ initialDHCPCall = false;\r
+ newpsk = generateRandomPassword();\r
+ password.setText(newpsk);\r
+\r
+ Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Please Wait Until Wifi is Connected!", 2000);\r
+ mySnackBar.show();\r
+\r
+ try{\r
+ routerConnection = new SSH();\r
+ routerConnection.execute("-ch " + newpsk);\r
+ Thread.sleep(1000);\r
+ } catch (Exception e) {\r
+ Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onCreate method of EnrollDeviceActivity");\r
+ }\r
+\r
+ List<WifiConfiguration> list = manager.getConfiguredNetworks();\r
+ for( WifiConfiguration i : list ) {\r
+ if(i.SSID.equals("\"LEDE2\"")){\r
+ manager.removeNetwork(i.networkId);\r
+ manager.saveConfiguration();\r
+ System.out.println("deleted");\r
+ }\r
+ }\r
+ WifiConfiguration wifiConfig = new WifiConfiguration();\r
+ wifiConfig.SSID = String.format("\"%s\"", "LEDE2");\r
+ wifiConfig.preSharedKey = String.format("\"%s\"", newpsk);\r
+\r
+ int netId = manager.addNetwork(wifiConfig);\r
+ manager.disconnect();\r
+ manager.enableNetwork(netId, true);\r
+ manager.reconnect();\r
+\r
+ ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);\r
+ ClipData clip = ClipData.newPlainText("new password", newpsk);\r
+ clipboard.setPrimaryClip(clip);\r
+ }\r
+\r
+ boolean isNetworkAvailable() {//check whether wifi connection is or not\r
+ Context context = getApplicationContext();\r
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);\r
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();\r
+ boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();\r
+ return isConnected;\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View v){\r
+ if(v == back){\r
+ if (isNetworkAvailable() == false) {//without wifi connection\r
+ Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
+ t.show();\r
+ //choosing wifi connection\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+ }\r
+ else{\r
+ List<String> routerOutput = new ArrayList<>();\r
+ try{\r
+ routerConnection = new SSH();\r
+ routerConnection.execute("-ch 1qaz2wsx3edc");\r
+ Thread.sleep(1000);\r
+ } catch(Exception ex){\r
+ ex.printStackTrace();\r
+ Log.d("Sleep exception", "exception at Router SSH");\r
+ }\r
+ ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);\r
+ ClipData clip = ClipData.newPlainText("old password", "1qaz2wsx3edc");\r
+ clipboard.setPrimaryClip(clip);\r
+\r
+ Context context = getApplicationContext();\r
+ WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);\r
+ List<WifiConfiguration> list = manager.getConfiguredNetworks();\r
+ for( WifiConfiguration i : list ) {\r
+ if(i.SSID.equals("\"LEDE2\"")){\r
+ manager.removeNetwork(i.networkId);\r
+ manager.saveConfiguration();\r
+ System.out.println("deleted");\r
+ }\r
+ }\r
+ WifiConfiguration wifiConfig = new WifiConfiguration();\r
+ wifiConfig.SSID = String.format("\"%s\"", "LEDE2");\r
+ wifiConfig.preSharedKey = String.format("\"%s\"", context.getResources().getString(R.string.default_rpwd));\r
+\r
+ int netId = manager.addNetwork(wifiConfig);\r
+ manager.disconnect();\r
+ manager.enableNetwork(netId, true);\r
+ manager.reconnect();\r
+ finish();\r
+ }\r
+ }\r
+\r
+ if(v == load){\r
+ if (isNetworkAvailable() == false) {//without wifi connection\r
+ Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
+ t.show();\r
+ //choosing wifi connection\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+ }\r
+ else{\r
+ List<String> routerOutput = new ArrayList<>();\r
+ if(initialDHCP == null) {\r
+ try {\r
+ routerConnection = new SSH();\r
+ routerConnection.execute(commandRouter);\r
+ Thread.sleep(1000);\r
+ routerOutput = routerConnection.getResultLines();\r
+ while (routerOutput.size() == 0) {\r
+ Thread.sleep(500);\r
+ routerOutput = routerConnection.getResultLines();\r
+ }\r
+ addSSHResultsToConfig(routerOutput, initial_dhcp_filename);\r
+ initialDHCP = ConfigFileIO.readFromFile(initial_dhcp_filename, this);\r
+ } catch (Exception ex) {\r
+ ex.printStackTrace();\r
+ }\r
+ }\r
+ else{\r
+ Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Already Loaded.", Snackbar.LENGTH_LONG);\r
+ mySnackBar.show();\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ if(v == check){\r
+ if (isNetworkAvailable() == false) {//without wifi connection\r
+ Toast t = Toast.makeText(this, R.string.connect, Toast.LENGTH_SHORT);\r
+ t.show();\r
+ //choosing wifi connection\r
+ Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);\r
+ intent.putExtra("only_access_points", true);\r
+ intent.putExtra("extra_prefs_show_button_bar", true);\r
+ intent.putExtra("wifi_enable_next_on_connect", true);\r
+ startActivityForResult(intent,1);\r
+ //startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK));\r
+ }\r
+ else{\r
+ if(initialDHCP != null) {\r
+ List<String> routerOutput = new ArrayList<>();\r
+ try {\r
+ routerConnection = new SSH();\r
+ routerConnection.execute(command);\r
+ Thread.sleep(1000);\r
+ routerOutput = routerConnection.getResultLines();\r
+ while (routerOutput.size() == 0) {\r
+ Thread.sleep(500);\r
+ routerOutput = routerConnection.getResultLines();\r
+ }\r
+ addSSHResulToConfig(routerOutput, temp_dhcp_filename);\r
+ tempDHCP = ConfigFileIO.readFromFile(temp_dhcp_filename, this);\r
+ } catch (Exception ex) {\r
+ Log.d("SLEEP EXCEPTION", "SLEEP EXCEPTION occurs in onClick method of EnrollDeviceActivity");\r
+ }\r
+\r
+ if (!comparison(initialDHCP, tempDHCP)) {\r
+ Intent i = new Intent(this, RegisterDeviceAdding.class);\r
+ i.putExtra("newpsk", newpsk);\r
+ startActivity(i);\r
+ finish();\r
+ }\r
+ else{\r
+ Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Please Connect a New Device Before Clicking Check.", Snackbar.LENGTH_LONG);\r
+ mySnackBar.show();\r
+ }\r
+ }\r
+ else{\r
+ Snackbar mySnackBar = Snackbar.make(findViewById(R.id.main_layout_id), "Please Click Load!", Snackbar.LENGTH_LONG);\r
+ mySnackBar.show();\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ }\r
+\r
+\r
+ private boolean comparison(String initialDeviceDat, String tempDeviceDat){\r
+ return initialDeviceDat.equals(tempDeviceDat);\r
+ }\r
+\r
+ private void addSSHResulToConfig(List<String> results, String filename){\r
+ File dir = getFilesDir();\r
+ File file = new File(dir, filename);\r
+ file.delete();\r
+ for (int i = 0; i < results.size(); i++) {\r
+ ConfigFileIO.writeToFile(filename, results.get(i), this);\r
+ }\r
+ }\r
+\r
+ /******************************************************************************************************************************************************************/\r
+ // Generate a random password and return it\r
+ /******************************************************************************************************************************************************************/\r
+ public String generateRandomPassword() {\r
+ String password = new String();\r
+\r
+ StringBuffer rndpassword = new StringBuffer();\r
+ Random rnd = new Random();\r
+ int digitnum = 20;\r
+ // Generate random 20digit password with upper / lower case alphabet + numbers\r
+ // There are 10 int nums, 26 lower alphabets, 26 upper alphabets. Total 62\r
+ // So 2/12 possiblity of int, 5/12 lower, 5/12 upper alphabets.\r
+ for (int i = 0; i < digitnum; i++) {\r
+ int rIndex = rnd.nextInt(12);\r
+ if (rIndex >= 0 && rIndex < 2) { // 0 - 9\r
+ rndpassword.append((rnd.nextInt(10)));\r
+ } else if (rIndex >= 2 && rIndex < 7) { // a-z\r
+ rndpassword.append((char) ((int) (rnd.nextInt(26)) + 97));\r
+ } else { // A-Z\r
+ rndpassword.append((char) ((int) (rnd.nextInt(26)) + 65));\r
+ }\r
+ }\r
+ password = rndpassword.toString();\r
+ return password;\r
+ }\r
+\r
+ /******************************************************************************************************************************************************************/\r
+ //Detect you are connected to a specific network.\r
+ /******************************************************************************************************************************************************************/\r
+ public String getWifiName(Context context) {\r
+ if (manager.isWifiEnabled()) {\r
+ WifiInfo wifiInfo = manager.getConnectionInfo();\r
+ if (wifiInfo != null) {\r
+ NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());\r
+ if (state == NetworkInfo.DetailedState.CONNECTED || state == NetworkInfo.DetailedState.OBTAINING_IPADDR) {\r
+ return wifiInfo.getSSID();\r
+ }\r
+ }\r
+ }\r
+ return null;\r
+ }\r
+\r
+ public void addSSHResultsToConfig(List<String> results, String filename) {\r
+ File dir = getFilesDir();\r
+ File file = new File(dir, filename);\r
+ file.delete();\r
+ for (int i = 0; i < results.size(); i++) {\r
+ ConfigFileIO.writeToFile(filename, results.get(i), this);\r
+ }\r
+ }\r
+\r
+\r
+}\r
-package com.example.lede2;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-public class RelationActivity extends AppCompatActivity implements View.OnClickListener,View.OnFocusChangeListener {
-
- Button addButton;
- Button deleteButton;
- EditText databaseInfo;
- EditText idSource;
- EditText idDestination;
- private SSH_MySQL ssh;//Connection object between Android & Host
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_relation);
-
- addButton = (Button) findViewById(R.id.addButton);
- deleteButton = (Button) findViewById(R.id.delButton);
- databaseInfo = (EditText)findViewById(R.id.textInfoComm);
- idSource = (EditText)findViewById(R.id.id_source);
- idDestination = (EditText)findViewById(R.id.id_destination);
-
- addButton.setOnClickListener(this);
- deleteButton.setOnClickListener(this);
- databaseInfo.setOnFocusChangeListener(this);
- idSource.setOnFocusChangeListener(this);
- idDestination.setOnFocusChangeListener(this);
- ssh = new SSH_MySQL();
- // Set config text from file for device
- try {
- InputStream is = getAssets().open(MainActivity.DEF_ADD_DEVICE_COMM_FILE);
- int size = is.available();
- byte[] buffer = new byte[size];
- is.read(buffer);
- is.close();
- String text = new String(buffer);
- databaseInfo.setGravity(Gravity.LEFT);
- databaseInfo.setText(text);
- Log.d("LOADINGFILE", "Add comm info file is already loaded!");
- } catch (IOException ex) {
- Log.d("LOADINGFILE", "Add comm info file is NOT loaded!");
- ex.printStackTrace();
- }
- }
-
- @Override
- public void onClick(View v) {
- if(v == addButton){
- // 1) Create a new file and insert the configuration
- // 2) Run iotinstaller code for communication/relation installation
- // 3) Remove the existing config file
- ssh.execute("echo \"" + databaseInfo.getText().toString() + "\" >> " +
- MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +
- MainActivity.DEF_INSTALL_RELATION_CMD + " " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +
- "rm -rf " + MainActivity.DEF_MYSQL_CONFIG_FILE);
- finish();
- }
- if(v == deleteButton){
- // Delete a communication/relation entry
- ssh.execute(MainActivity.DEF_DELETE_RELATION_CMD + " " + idSource.getText().toString()
- + " " + idDestination.getText().toString());
- finish();
- }
- }
-
- @Override
- public void onFocusChange(View view, boolean hasFocus) {
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- if (hasFocus) {
- imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
- } else {
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
- }
- }
-
-}
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.os.Bundle;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.util.Log;\r
+import android.view.Gravity;\r
+import android.view.View;\r
+import android.view.inputmethod.InputMethodManager;\r
+import android.widget.Button;\r
+import android.widget.EditText;\r
+\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+\r
+public class RelationActivity extends AppCompatActivity implements View.OnClickListener,View.OnFocusChangeListener {\r
+\r
+ Button addButton;\r
+ Button deleteButton;\r
+ EditText databaseInfo;\r
+ EditText idSource;\r
+ EditText idDestination;\r
+ private SSH_MySQL ssh;//Connection object between Android & Host\r
+\r
+ @Override\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.activity_relation);\r
+\r
+ addButton = (Button) findViewById(R.id.addButton);\r
+ deleteButton = (Button) findViewById(R.id.delButton);\r
+ databaseInfo = (EditText)findViewById(R.id.textInfoComm);\r
+ idSource = (EditText)findViewById(R.id.id_source);\r
+ idDestination = (EditText)findViewById(R.id.id_destination);\r
+\r
+ addButton.setOnClickListener(this);\r
+ deleteButton.setOnClickListener(this);\r
+ databaseInfo.setOnFocusChangeListener(this);\r
+ idSource.setOnFocusChangeListener(this);\r
+ idDestination.setOnFocusChangeListener(this);\r
+ ssh = new SSH_MySQL();\r
+ // Set config text from file for device\r
+ try {\r
+ InputStream is = getAssets().open(MainActivity.DEF_INSTALL_ADDRESS_FILE);\r
+ int size = is.available();\r
+ byte[] buffer = new byte[size];\r
+ is.read(buffer);\r
+ is.close();\r
+ String text = new String(buffer);\r
+ databaseInfo.setGravity(Gravity.LEFT);\r
+ databaseInfo.setText(text);\r
+ Log.d("LOADINGFILE", "Add comm info file is already loaded!");\r
+ } catch (IOException ex) {\r
+ Log.d("LOADINGFILE", "Add comm info file is NOT loaded!");\r
+ ex.printStackTrace();\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onClick(View v) {\r
+ if(v == addButton){\r
+ // 1) Create a new file and insert the configuration\r
+ // 2) Run iotinstaller code for communication/relation installation\r
+ // 3) Remove the existing config file\r
+ ssh.execute("echo \"" + databaseInfo.getText().toString() + "\" >> " +\r
+ MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +\r
+ MainActivity.DEF_INSTALL_RELATION_CMD + " " + MainActivity.DEF_MYSQL_CONFIG_FILE + ";" +\r
+ "rm -rf " + MainActivity.DEF_MYSQL_CONFIG_FILE);\r
+ finish();\r
+ }\r
+ if(v == deleteButton){\r
+ // Delete a communication/relation entry\r
+ ssh.execute(MainActivity.DEF_DELETE_RELATION_CMD + " " + idSource.getText().toString()\r
+ + " " + idDestination.getText().toString());\r
+ finish();\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onFocusChange(View view, boolean hasFocus) {\r
+ InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);\r
+ if (hasFocus) {\r
+ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);\r
+ } else {\r
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);\r
+ }\r
+ }\r
+\r
+}\r
import android.content.Context;\r
import android.util.Log;\r
import android.os.AsyncTask;\r
+import android.widget.TextView;\r
\r
import com.jcraft.jsch.JSch;\r
import com.jcraft.jsch.JSchException;\r
// in this project, we supposed we use fixed host, username, password\r
private String host;\r
private String username;\r
- private String password;\r
+ public String password;\r
+ private List<String> result_lines = new ArrayList<String>();\r
\r
// host, username, password initialize\r
@Override\r
protected void onPreExecute() {\r
super.onPreExecute();\r
-\r
host = ConfigActivity.ROUTERIP;\r
username = ConfigActivity.ROUTERUSER;\r
password = ConfigActivity.RPWD;\r
+\r
+\r
+\r
+\r
+ }\r
+\r
+ public void updatePassword(String newPass){\r
+ password = newPass;\r
}\r
\r
/* \r
}\r
}\r
\r
- // send a command\r
+ // send a command 1523610518\r
public void runCommand(String command) throws JSchException, IOException {\r
\r
if (!session.isConnected())\r
// get output from a command\r
private List<String> getChannelOutput(Channel channel) throws IOException {\r
\r
- byte[] buffer = new byte[1024];\r
+ byte[] buffer = new byte[2048];\r
List<String> output_lines = new ArrayList<String>();\r
try {\r
InputStream in = channel.getInputStream();\r
String line = new String();\r
while (true) {\r
while (in.available() > 0) {\r
- int i = in.read(buffer, 0, 1024);\r
+ int i = in.read(buffer, 0, 2048);\r
if (i < 0) {\r
break;\r
}\r
@Override\r
protected List<String> doInBackground(String... params) {\r
\r
- List<String> result_lines = new ArrayList<String>();\r
+ List<String> output = new ArrayList<String>();\r
String cmd;\r
\r
if(params[0].substring(0,3).equals("-ch")) { // ./change_default_pw.sh -ch <password>\r
return null;\r
}\r
cmd = MainActivity.DEF_REGISTER_DEVICE_SCRIPT + " " + params[0];\r
+ System.out.println(cmd);\r
runCommand(cmd);\r
ce.setCommand(cmd);\r
ce.connect();\r
result_lines = getChannelOutput(ce);\r
+ //output = getChannelOutput(ce);\r
} catch (Exception e) {\r
}\r
channel.disconnect();\r
\r
// only this block return meaningful value, which should be the names of devices.\r
- return result_lines;\r
- } else {\r
+ return output;\r
+ } else if(params[0].substring(0,3).equals("cat")) {\r
+ cmd = params[0];\r
+ }\r
+ else if(params[0].substring(0,4).equals("echo")) {\r
+ cmd = params[0];\r
+ }\r
+ else {\r
Log.d("SSH PARAM ERROR", "Wrong parameter used.");\r
return null;\r
}\r
Log.d("SSH CONNECTION CLOSE", "open failed.");\r
return null;\r
}\r
+ System.out.println(cmd);\r
runCommand(cmd);\r
ce.setCommand(cmd);\r
ce.connect();\r
+ result_lines = getChannelOutput(ce);\r
} catch (Exception e) {\r
} // done\r
\r
return null;\r
}\r
\r
+ public List<String> getResultLines() {\r
+ return result_lines;\r
+ }\r
+\r
/*\r
@Override\r
protected onPostExecute(Void param) {\r
-package com.example.lede2;
-
-/**
- * Created by rtrimana on 9/25/17.
- */
-
-import android.os.AsyncTask;
-import android.util.Log;
-
-import com.jcraft.jsch.Channel;
-import com.jcraft.jsch.ChannelExec;
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Session;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import android.content.Context;
-import android.util.Log;
-import android.os.AsyncTask;
-
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Session;
-import com.jcraft.jsch.ChannelExec;
-import com.jcraft.jsch.Channel;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.String;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-// AsyncTask input : command line
-// AysncTask output : output from a command
-public class SSH_MySQL extends AsyncTask<String, Void, List<String>> {
-
- // variables used for connection
- private Session session;
- private Channel channel;
- private ChannelExec ce;
- // in this project, we supposed we use fixed host, username, password
- private String host;
- private String username;
- private String password;
-
- // host, username, password initialize
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
-
- host = ConfigActivity.MYSQLHOSTIP;
- username = ConfigActivity.MYSQLHOSTUSER;
- password = ConfigActivity.MYSQLHOSTPASSWORD;
- }
-
- /*
- The functions below are mainly from :
- https://stackoverflow.com/questions/25789245/how-to-get-jsch-shell-command-output-in-string
- */
-
- // open the connection using username, password, and hostname
- public boolean open() throws JSchException {
-
- JSch jSch = new JSch();
-
- session = jSch.getSession(username, host, 22);
- java.util.Properties config = new java.util.Properties();
- config.put("StrictHostKeyChecking", "no"); // not recommended
- session.setPassword(password);
- session.setConfig(config);
-
-
- Log.d("SSH CONNECT OPEN", "Connecting SSH to " + host + " - Please wait for few seconds... ");
- session.connect();
- if (session.isConnected()) {
- Log.d("SSH CONNECT", "router connected!");
- return true;
- } else {
- Log.d("SSH NOT CONNECT", "router NOT connected!");
- return false;
- }
- }
-
- // send a command
- public void runCommand(String command) throws JSchException, IOException {
-
- if (!session.isConnected())
- throw new RuntimeException("Not connected to an open session. Call open() first!");
-
- channel = session.openChannel("exec");
- ce = (ChannelExec) channel;
- ce.setCommand(command);
- ce.connect();
- Log.d("SSH RUN COMMAND", command);
- }
-
- // get output from a command
- private List<String> getChannelOutput(Channel channel) throws IOException {
-
- byte[] buffer = new byte[1024];
- List<String> output_lines = new ArrayList<String>();
- try {
- InputStream in = channel.getInputStream();
- String line = new String();
- while (true) {
- while (in.available() > 0) {
- int i = in.read(buffer, 0, 1024);
- if (i < 0) {
- break;
- }
- line = new String(buffer, 0, i);
- // add the read line to the return value list.
- output_lines = new ArrayList(Arrays.asList(line.split("\\n")));
- }
-
- if(line.contains("logout")) {
- break;
- }
- if (channel.isClosed()) {
- break;
- }
- try {
- Thread.sleep(1000);
- } catch (Exception ee){}
- }
- } catch(Exception e) {
- Log.d("SSH READOUTPUT ERROR", "Error while reading channel output: "+ e);
- }
-
- return output_lines;
- }
-
-
- /*
- usage : execute commands through SSH for database MySQL
- */
- @Override
- protected List<String> doInBackground(String... params) {
-
- String cmd;
- // Get into the path and create the config file
- cmd = "cd " + MainActivity.DEF_ADD_DEVICE_TO_MYSQL + ";";
- cmd = cmd + params[0];
-
- // now the command is set, so send it.
- try {
- // try open the connection
- if (!open()) {
- Log.d("SSH CONNECTION CLOSE", "open failed.");
- return null;
- }
- runCommand(cmd);
- ce.setCommand(cmd);
- ce.connect();
- } catch (Exception e) {
- } // done
-
- channel.disconnect();
- return null;
- }
-
- /*
- @Override
- protected onPostExecute(Void param) {
- Log.d("POST", "in post execute");
- }
- */
-}
+package com.example.lede2;\r
+\r
+/**\r
+ * Created by rtrimana on 9/25/17.\r
+ */\r
+\r
+import android.app.ProgressDialog;\r
+import android.os.AsyncTask;\r
+import android.os.SystemClock;\r
+import android.util.Log;\r
+\r
+import com.jcraft.jsch.Channel;\r
+import com.jcraft.jsch.ChannelExec;\r
+import com.jcraft.jsch.JSch;\r
+import com.jcraft.jsch.JSchException;\r
+import com.jcraft.jsch.Session;\r
+\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+\r
+\r
+\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.lang.String;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+\r
+// AsyncTask input : command line\r
+// AysncTask output : output from a command\r
+public class SSH_MySQL extends AsyncTask<String, Void, List<String>> {\r
+\r
+ // variables used for connection\r
+ private Session session;\r
+ private Channel channel;\r
+ private ChannelExec ce;\r
+ // in this project, we supposed we use fixed host, username, password\r
+ private String host;\r
+ private String username;\r
+ private String password;\r
+ ProgressDialog dialog;\r
+\r
+ //use this to see the output of the command used\r
+ private List<String> resultLines = new ArrayList<String>();\r
+\r
+ // host, username, password initialize\r
+ @Override\r
+ protected void onPreExecute() {\r
+ super.onPreExecute();\r
+ host = ConfigActivity.MYSQLHOSTIP;\r
+ username = ConfigActivity.MYSQLHOSTUSER;\r
+ password = ConfigActivity.MYSQLHOSTPASSWORD;\r
+\r
+ }\r
+\r
+ /*\r
+ The functions below are mainly from :\r
+ https://stackoverflow.com/questions/25789245/how-to-get-jsch-shell-command-output-in-string\r
+ */\r
+\r
+ // open the connection using username, password, and hostname\r
+ public boolean open() throws JSchException {\r
+\r
+ JSch jSch = new JSch();\r
+\r
+ session = jSch.getSession(username, host, 22);\r
+ java.util.Properties config = new java.util.Properties();\r
+ config.put("StrictHostKeyChecking", "no"); // not recommended\r
+ session.setPassword(password);\r
+ session.setConfig(config);\r
+\r
+\r
+ Log.d("SSH CONNECT OPEN", "Connecting SSH to " + host + " - Please wait for few seconds... ");\r
+ session.connect();\r
+ if (session.isConnected()) {\r
+ Log.d("SSH CONNECT", "router connected!");\r
+ return true;\r
+ } else {\r
+ Log.d("SSH NOT CONNECT", "router NOT connected!");\r
+ return false;\r
+ }\r
+ }\r
+\r
+ // send a command\r
+ public void runCommand(String command) throws JSchException, IOException {\r
+\r
+ if (!session.isConnected())\r
+ throw new RuntimeException("Not connected to an open session. Call open() first!");\r
+\r
+ System.out.println("command: " + command);\r
+ channel = session.openChannel("exec");\r
+ ce = (ChannelExec) channel;\r
+ ce.setCommand(command);\r
+ ce.connect();\r
+ Log.d("SSH RUN COMMAND", command);\r
+ }\r
+\r
+ // get output from a command\r
+ private List<String> getChannelOutput(Channel channel) throws IOException {\r
+\r
+ byte[] buffer = new byte[8192];\r
+ List<String> output_lines = new ArrayList<String>();\r
+ try {\r
+ InputStream in = channel.getInputStream();\r
+ String line = new String();\r
+ while (true) {\r
+ while (in.available() > 0) {\r
+ int i = in.read(buffer, 0, 8192);\r
+ if (i < 0) {\r
+ break;\r
+ }\r
+ line = new String(buffer, 0, i);\r
+ // add the read line to the return value list.\r
+ output_lines = new ArrayList(Arrays.asList(line.split("\\n")));\r
+ }\r
+\r
+ if(line.contains("logout")) {\r
+ break;\r
+ }\r
+ if (channel.isClosed()) {\r
+ break;\r
+ }\r
+ try {\r
+ Thread.sleep(1000);\r
+ } catch (Exception e){}\r
+ }\r
+ } catch(Exception e) {\r
+ Log.d("SSH READOUTPUT ERROR", "Error while reading channel output: "+ e);\r
+ }\r
+\r
+ return output_lines;\r
+ }\r
+\r
+\r
+ /*\r
+ usage : execute commands through SSH for database MySQL\r
+ */\r
+ @Override\r
+ protected List<String> doInBackground(String... params) {\r
+\r
+ String cmd;\r
+ // Get into the path and create the config file\r
+ //starts at iot2/bin/iotinstaller\r
+ cmd = "cd " + MainActivity.DEF_ADD_DEVICE_TO_MYSQL + ";";\r
+ cmd = cmd + params[0];\r
+ //Log.d("yoyo", cmd);\r
+\r
+ // now the command is set, so send it.\r
+ try {\r
+ // try open the connection\r
+ if (!open()) {\r
+ Log.d("SSH CONNECTION CLOSE", "open failed.");\r
+ return null;\r
+ }\r
+ runCommand(cmd);\r
+ ce.setCommand(cmd);\r
+ ce.connect();\r
+ resultLines = getChannelOutput(ce);\r
+ } catch (Exception e) {\r
+ } // done\r
+\r
+ channel.disconnect();\r
+ return null;\r
+ }\r
+\r
+ public List<String> getResultLines() {\r
+ return resultLines;\r
+ }\r
+ /*\r
+ @Override\r
+ protected onPostExecute(Void param) {\r
+ Log.d("POST", "in post execute");\r
+ }\r
+ */\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.os.Bundle;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+import android.view.View;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.ListView;\r
+import android.widget.Spinner;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 4/16/2018.\r
+ */\r
+\r
+public class SmartLights extends ApplicationWithRelations{\r
+\r
+ private SSH_MySQL getSetsAndRelations;\r
+ private SSH_MySQL getSetList;\r
+ private String filename;\r
+ private ArrayList<String> relationNames; //relations in this application\r
+\r
+ Context context;\r
+ private HashMap<String, ArrayList<String>> availableSets; //all possible sets pulled from pi\r
+\r
+\r
+ @Override\r
+ protected void onCreate( Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.smartlights);\r
+ super.context = this;\r
+ context = super.context;\r
+ getSetsAndRelations = new SSH_MySQL();\r
+ getSetList = new SSH_MySQL();\r
+ String getSetsAndRelationsCommand = this.getString(R.string.getSmartLightsSetsAndRelationsCommand);\r
+ String getSetListCommand = this.getString(R.string.getSetList);\r
+ List<String> results = new ArrayList<>();\r
+ final String controllerConfigFilename = this.getString(R.string.smartLightsControllerConfigFile);\r
+ filename = this.getString(R.string.setsAndRelationsFilename);\r
+ relations = new HashMap<>();\r
+ relationNames = new ArrayList<>();\r
+ relationNameSpinner = (Spinner) findViewById(R.id.selectedRelation);\r
+ relationLeftSpinner = (Spinner) findViewById(R.id.relationLeftSpinner);\r
+ relationRightSpinner = (Spinner) findViewById(R.id.relationRightSpinner);\r
+ addRelationButton = (Button) findViewById(R.id.addRelationButton);\r
+ doneRelationButton = (Button) findViewById(R.id.addRelationDoneButton);\r
+ deleteRelationButton = (Button) findViewById(R.id.addRelationDeleteButton);\r
+ setOrRelationSpinner = (Spinner) findViewById(R.id.setsOrRelations);\r
+ super.hasIndependentSets = false;\r
+ super.independentSetNames = new ArrayList<>();\r
+ super.independentSetList = new HashMap<>();\r
+ super.addedSetList = new HashMap<>();\r
+ super.addedIndependentSets = new HashMap<>();\r
+\r
+ addRelationButton.setOnClickListener(this);\r
+ doneRelationButton.setOnClickListener(this);\r
+ deleteRelationButton.setOnClickListener(this);\r
+ addRelationsListView = (ListView) findViewById(R.id.selectedRelationsList);\r
+ addRelationsListView.setFocusable(false);\r
+ super.addedRelations = new HashMap<> ();\r
+ HashSet<Pair<String, String>> addedrelationsSet = new HashSet<>();\r
+ //addedRelations.put("", addedrelationsSet);\r
+ super.applicationSetList = new HashSet<>();\r
+ setHashMap = new HashMap<>();\r
+ //pull data from config file on iotuser\r
+ try {\r
+ getSetsAndRelations.execute(getSetsAndRelationsCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetsAndRelations.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetsAndRelations.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+\r
+ addSSHResultsToConfig(results, controllerConfigFilename);\r
+ System.out.println("read from file: " + ConfigFileIO.readFromFile(controllerConfigFilename, this));\r
+ super.prop = new Properties();\r
+ File file = new File(getApplicationContext().getFilesDir(), controllerConfigFilename);\r
+ FileInputStream fis = null;\r
+ try{\r
+ fis = new FileInputStream(file);\r
+ super.prop.load(fis);\r
+ fis.close();\r
+ }\r
+ catch (IOException ex){\r
+ System.out.println("Error when reading SpeakerController Config file ");\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ //add sets relations to the relation hashmap\r
+ super.numFields = Integer.parseInt(super.prop.getProperty("FIELD_NUMBER"));\r
+ for(int i = 0; i < super.numFields; i++){\r
+ String name = (super.prop.getProperty("FIELD_" + i));\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")) {\r
+ String relationPair = super.prop.getProperty("FIELD_CLASS_0_" + i) + "," + super.prop.getProperty("FIELD_CLASS_1_" + i);\r
+ addPair(name, relationPair);\r
+ relationNames.add(name);\r
+ }\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTSet")) {\r
+ if(super.prop.getProperty("FIELD_INDEPENDENT_" + i).equals("TRUE")){\r
+ independentSetList.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+ independentSetNames.add(name);\r
+ }\r
+ else{\r
+ setHashMap.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+\r
+ }\r
+ }\r
+ }\r
+ //pull availableSets file from iotuser\r
+ try {\r
+ getSetList.execute(getSetListCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetList.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetList.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ addSSHResultsToConfig(results, setListFilename);\r
+ availableSets = createSetList(setListFilename);\r
+ System.out.println();\r
+\r
+ ArrayList<String> setsOrRelationArrayList = new ArrayList<>();\r
+ if(super.hasIndependentSets) {\r
+ setsOrRelationArrayList.add("SETS");\r
+ }\r
+ setsOrRelationArrayList.add("RELATIONS");\r
+ ArrayAdapter setsOrRelationsArrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, setsOrRelationArrayList);\r
+ setOrRelationSpinner.setAdapter(setsOrRelationsArrayAdapter);\r
+\r
+\r
+\r
+ setOrRelationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ //set array adapter values = listed relations\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, relationNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ else{\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, independentSetNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+\r
+\r
+\r
+\r
+ //sets left and right possible values to registered devices in the sets\r
+ relationNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+\r
+\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ relationRightSpinner.setVisibility(View.VISIBLE);\r
+ String selectedRelation = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(relations.get(selectedRelation).first);\r
+ ArrayList availableDevicesRight = availableSets.get(relations.get(selectedRelation).second);\r
+\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ ArrayAdapter rightAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesRight);\r
+\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ rightAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ relationRightSpinner.setAdapter(rightAdapter);\r
+ }\r
+ else{\r
+ relationRightSpinner.setVisibility(View.GONE);\r
+\r
+ String selectedSet = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(independentSetList.get(selectedSet));\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ }\r
+ }\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+ }\r
+ });\r
+\r
+ ArrayList<String> addedRelationsArrayList = new ArrayList<>();\r
+ Set<String> relationTypes = super.addedRelations.keySet();\r
+ for(String s: relationTypes) {\r
+ for (Pair<String, String> temp : super.addedRelations.get(s)) {\r
+ addedRelationsArrayList.add(temp.first + " " + temp.second);\r
+ }\r
+ }\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+ addRelationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
+ }});\r
+ for(int i= 0; i < relationNames.size(); i++){\r
+ Pair<String, String> tempPair = relations.get(relationNames.get(i));\r
+ applicationSetList.add(tempPair.first);\r
+ applicationSetList.add(tempPair.second);\r
+ }\r
+ }\r
+\r
+\r
+\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+import android.content.Context;\r
+import android.os.Bundle;\r
+import android.util.Log;\r
+import android.util.Pair;\r
+import android.view.View;\r
+import android.widget.AdapterView;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.Button;\r
+import android.widget.ListView;\r
+import android.widget.Spinner;\r
+import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+import java.util.Set;\r
+\r
+/**\r
+ * Created by Brian on 4/16/2018.\r
+ */\r
+\r
+public class Speaker extends ApplicationWithRelations{\r
+\r
+ private SSH_MySQL getSetsAndRelations;\r
+ private SSH_MySQL getSetList;\r
+ private String filename;\r
+ private ArrayList<String> relationNames; //relations in this application\r
+\r
+ Context context;\r
+ private HashMap<String, ArrayList<String>> availableSets; //all possible sets pulled from pi\r
+\r
+\r
+ @Override\r
+ protected void onCreate( Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.speaker);\r
+ super.context = this;\r
+ context = super.context;\r
+ getSetsAndRelations = new SSH_MySQL();\r
+ getSetList = new SSH_MySQL();\r
+ final String controllerConfigFilename = this.getString(R.string.speakerControllerConfigFile);\r
+ String getSetsAndRelationsCommand = this.getString(R.string.getSpeakerSetsAndRelationsCommand);\r
+ String getSetListCommand = this.getString(R.string.getSetList);\r
+ List<String> results = new ArrayList<>();\r
+ filename = this.getString(R.string.setsAndRelationsFilename);\r
+ relations = new HashMap<>();\r
+ relationNames = new ArrayList<>();\r
+ relationNameSpinner = (Spinner) findViewById(R.id.selectedRelation);\r
+ relationLeftSpinner = (Spinner) findViewById(R.id.relationLeftSpinner);\r
+ relationRightSpinner = (Spinner) findViewById(R.id.relationRightSpinner);\r
+ addRelationButton = (Button) findViewById(R.id.addRelationButton);\r
+ doneRelationButton = (Button) findViewById(R.id.addRelationDoneButton);\r
+ deleteRelationButton = (Button) findViewById(R.id.addRelationDeleteButton);\r
+ setOrRelationSpinner = (Spinner) findViewById(R.id.setsOrRelations);\r
+ super.hasIndependentSets = true;\r
+ super.independentSetNames = new ArrayList<>();\r
+ super.independentSetList = new HashMap<>();\r
+ super.addedSetList = new HashMap<>();\r
+ super.addedIndependentSets = new HashMap<>();\r
+\r
+ addRelationButton.setOnClickListener(this);\r
+ doneRelationButton.setOnClickListener(this);\r
+ deleteRelationButton.setOnClickListener(this);\r
+ addRelationsListView = (ListView) findViewById(R.id.selectedRelationsList);\r
+ addRelationsListView.setFocusable(false);\r
+ super.addedRelations = new HashMap<> ();\r
+ HashSet<Pair<String, String>> addedrelationsSet = new HashSet<>();\r
+ //addedRelations.put("", addedrelationsSet);\r
+ super.applicationSetList = new HashSet<>();\r
+ setHashMap = new HashMap<>();\r
+ //pull data from config file on iotuser\r
+ try {\r
+ getSetsAndRelations.execute(getSetsAndRelationsCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetsAndRelations.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetsAndRelations.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+\r
+ addSSHResultsToConfig(results, controllerConfigFilename);\r
+ System.out.println("read from file: " + ConfigFileIO.readFromFile(controllerConfigFilename, this));\r
+ super.prop = new Properties();\r
+ File file = new File(getApplicationContext().getFilesDir(), controllerConfigFilename);\r
+ FileInputStream fis = null;\r
+ try{\r
+ fis = new FileInputStream(file);\r
+ super.prop.load(fis);\r
+ fis.close();\r
+ }\r
+ catch (IOException ex){\r
+ System.out.println("Error when reading SpeakerController Config file ");\r
+ ex.printStackTrace();\r
+ }\r
+\r
+ //add sets relations to the relation hashmap\r
+ super.numFields = Integer.parseInt(super.prop.getProperty("FIELD_NUMBER"));\r
+ for(int i = 0; i < super.numFields; i++){\r
+ String name = (super.prop.getProperty("FIELD_" + i));\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTRelation")) {\r
+ String relationPair = super.prop.getProperty("FIELD_CLASS_0_" + i) + "," + super.prop.getProperty("FIELD_CLASS_1_" + i);\r
+ addPair(name, relationPair);\r
+ relationNames.add(name);\r
+ }\r
+ if(super.prop.getProperty("FIELD_TYPE_" + i).equals("IoTSet")) {\r
+ if(super.prop.getProperty("FIELD_INDEPENDENT_" + i).equals("TRUE")){\r
+ independentSetList.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+ independentSetNames.add(name);\r
+ }\r
+ else{\r
+ setHashMap.put(name, super.prop.getProperty("FIELD_CLASS_" + i));\r
+\r
+ }\r
+ }\r
+ }\r
+ //pull availableSets file from iotuser\r
+ try {\r
+ getSetList.execute(getSetListCommand);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = getSetList.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = getSetList.getResultLines();\r
+ }\r
+ System.out.println(results);\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at getSetsAndRelations");\r
+ }\r
+ String setListFilename = this.getString(R.string.setListFilename);\r
+ addSSHResultsToConfig(results, setListFilename);\r
+ availableSets = createSetList(setListFilename);\r
+ System.out.println();\r
+\r
+ ArrayList<String> setsOrRelationArrayList = new ArrayList<>();\r
+ setsOrRelationArrayList.add("SETS");\r
+ setsOrRelationArrayList.add("RELATIONS");\r
+ ArrayAdapter setsOrRelationsArrayAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, setsOrRelationArrayList);\r
+ setOrRelationSpinner.setAdapter(setsOrRelationsArrayAdapter);\r
+\r
+\r
+\r
+ setOrRelationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+ //set array adapter values = listed relations\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, relationNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ else{\r
+ ArrayAdapter nameAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, independentSetNames);\r
+ nameAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationNameSpinner.setAdapter(nameAdapter);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+\r
+ }\r
+ });\r
+\r
+\r
+\r
+\r
+ //sets left and right possible values to registered devices in the sets\r
+ relationNameSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {\r
+ @Override\r
+ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {\r
+\r
+\r
+ if(setOrRelationSpinner.getSelectedItem().toString().equals("RELATIONS")) {\r
+ relationRightSpinner.setVisibility(View.VISIBLE);\r
+ String selectedRelation = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(relations.get(selectedRelation).first);\r
+ ArrayList availableDevicesRight = availableSets.get(relations.get(selectedRelation).second);\r
+\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ ArrayAdapter rightAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesRight);\r
+\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ rightAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ relationRightSpinner.setAdapter(rightAdapter);\r
+ }\r
+ else{\r
+ relationRightSpinner.setVisibility(View.GONE);\r
+\r
+ String selectedSet = relationNameSpinner.getSelectedItem().toString();\r
+ ArrayList availableDevicesLeft = availableSets.get(independentSetList.get(selectedSet));\r
+ ArrayAdapter leftAdapter = new ArrayAdapter(context, android.R.layout.simple_spinner_dropdown_item, availableDevicesLeft);\r
+ leftAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\r
+ relationLeftSpinner.setAdapter(leftAdapter);\r
+ }\r
+ }\r
+ @Override\r
+ public void onNothingSelected(AdapterView<?> adapterView) {\r
+ }\r
+ });\r
+\r
+ ArrayList<String> addedRelationsArrayList = new ArrayList<>();\r
+ Set<String> relationTypes = super.addedRelations.keySet();\r
+ for(String s: relationTypes) {\r
+ for (Pair<String, String> temp : super.addedRelations.get(s)) {\r
+ addedRelationsArrayList.add(temp.first + " " + temp.second);\r
+ }\r
+ }\r
+ adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_multiple_choice, addedRelationsArrayList);\r
+ addRelationsListView.setAdapter(adapter);\r
+ addRelationsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {\r
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
+ }});\r
+ for(int i= 0; i < relationNames.size(); i++){\r
+ Pair<String, String> tempPair = relations.get(relationNames.get(i));\r
+ applicationSetList.add(tempPair.first);\r
+ applicationSetList.add(tempPair.second);\r
+ }\r
+ }\r
+\r
+\r
+\r
+}\r
--- /dev/null
+package com.example.lede2;\r
+\r
+ import android.app.ProgressDialog;\r
+ import android.content.Context;\r
+ import android.os.Bundle;\r
+ import android.support.v7.app.AppCompatActivity;\r
+ import android.util.Log;\r
+ import android.view.WindowManager;\r
+ import android.widget.Spinner;\r
+\r
+ import java.io.File;\r
+ import java.util.ArrayList;\r
+ import java.util.List;\r
+\r
+/**\r
+ * Created by Brian on 2/23/2018.\r
+ */\r
+\r
+public class UpdateLocalConfigFiles extends AppCompatActivity {\r
+ private SSH_MySQL ssh_mySQL1;//Connection object between Android & Host\r
+ private SSH_MySQL ssh_mySQL2;\r
+ private SSH_MySQL ssh_mySQL3;\r
+ private SSH sshDevDat;\r
+ private SSH routerSSH;\r
+ String filename;\r
+ List<String> temp;//data structure which has IoT device information already registered on LEDE2\r
+ String filename_device;\r
+\r
+\r
+ protected void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+ setContentView(R.layout.update);\r
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);\r
+ // 1)updates config files on the pi\r
+ // 2)cats the structure of the database\r
+ // 3)cats instances of devices on the database\r
+ String command1 = this.getString(R.string.update_DBInformation_File);\r
+ String command2 = this.getString(R.string.cat_device_types);\r
+ String command3 = this.getString(R.string.cat_subtypes);\r
+ String commandRouter = "cat /tmp/dhcp.leases";\r
+ filename = this.getString(R.string.device_param_config_filename);\r
+ filename_device = "initial_DHCP.txt";\r
+ ssh_mySQL1 = new SSH_MySQL();\r
+ ssh_mySQL2 = new SSH_MySQL();\r
+ ssh_mySQL3 = new SSH_MySQL();\r
+ routerSSH = new SSH();\r
+ sshDevDat = new SSH();\r
+\r
+ List<String> results = new ArrayList<>();\r
+\r
+\r
+ try{\r
+ //executes command and wait till result lines are no longer empty.\r
+ //result lines are the lines that the pi outputs after running the command\r
+ ssh_mySQL1.execute(command1);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = ssh_mySQL1.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh_mySQL1.getResultLines();\r
+ System.out.println(results);\r
+ }\r
+ }catch (Exception e){\r
+ e.printStackTrace();\r
+ Log.d("Sleep exception", "exception at SSH3");\r
+ }\r
+ try {\r
+\r
+ ssh_mySQL2.execute(command2);\r
+ Thread.sleep(1000);//To execute asyntask in ssh object, we have to sleep main thread\r
+ results = ssh_mySQL2.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh_mySQL2.getResultLines();\r
+\r
+ }\r
+ addSSHResultsToConfig(results, filename);\r
+ System.out.println(results);\r
+\r
+\r
+ } catch (Exception e) {\r
+ Log.d("Sleep exception", "exception at oncreate of update SSH2");\r
+ }\r
+\r
+\r
+ try {\r
+ ssh_mySQL3.execute(command3);\r
+ Thread.sleep(1000);\r
+ results = ssh_mySQL3.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = ssh_mySQL3.getResultLines();\r
+ }\r
+\r
+ filename = this.getString(R.string.device_id_config_filename);\r
+ addSSHResultsToConfig(results, filename);\r
+ }\r
+ catch (Exception e){\r
+ e.printStackTrace();\r
+ Log.d("Sleep exception", "exception at SSH3");\r
+\r
+ }\r
+\r
+ try{\r
+ sshDevDat.execute("-ln");\r
+ Thread.sleep(1000);\r
+ results = sshDevDat.getResultLines();\r
+ while(results.size() == 0){\r
+ Thread.sleep(500);\r
+ results = sshDevDat.getResultLines();\r
+ System.out.println(results);\r
+ }\r
+ addSSHResultsToConfig(results,this.getString(R.string.devices_dat_filename));\r
+ }\r
+ catch (Exception e){\r
+ e.printStackTrace();\r
+ Log.d("cat device dat", "exception at cat device.dat");\r
+ }\r
+ finish();\r
+\r
+ }\r
+ //writes ssh result into a local config\r
+ private void addSSHResultsToConfig(List<String> results, String filename) {\r
+ File dir = getFilesDir();\r
+ File file = new File(dir, filename);\r
+ file.delete();\r
+ for (int i = 0; i < results.size(); i++) {\r
+ ConfigFileIO.writeToFile(filename, results.get(i), this);\r
+ }\r
+ finish();\r
+ }\r
+\r
+\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.example.lede2.AddDeviceActivity"
- android:background="@drawable/blueberry"
- >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:layout_alignParentTop="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_alignParentBottom="true"
- android:weightSum="1">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_margin="5dp"
- android:orientation="vertical"
- android:weightSum="1"
- android:layout_weight="0.55">
-
- <TextView
- android:id="@+id/textView"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:layout_weight="0.05"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:text="Please adjust/modify the MySQL info below"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="16dp"
- android:layout_gravity="center"
- android:orientation="horizontal">
-
- </LinearLayout>
-
- <EditText
-
- android:id="@+id/textInfo"
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:layout_weight="0.80"
- android:background="@drawable/empty"
- android:gravity="center"
- android:inputType="text|textMultiLine"
- android:textColor="@color/colorPrimaryDark"
- android:textColorLink="@color/blue"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="18dp"
- android:layout_gravity="center"
- android:orientation="horizontal">
-
- </LinearLayout>
-
- <EditText
-
- android:id="@+id/textInfoAddress"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/empty"
- android:gravity="center"
- android:inputType="text|textMultiLine"
- android:textColor="@color/colorPrimaryDark"
- android:textColorLink="@color/blue"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold"
- android:layout_weight="0.09" />
-
- <Button
- android:id="@+id/doneButton"
- android:layout_width="150dp"
- android:layout_height="50dp"
- android:layout_gravity="center"
- android:layout_marginTop="50dp"
- android:layout_weight="0.06"
- android:background="@drawable/pinkback"
- android:text="done"
- android:textColor="#FFA7A7"
- android:textSize="25dp"
- android:textStyle="bold" />
-
-
- </LinearLayout>
- </LinearLayout>
-
-
-</RelativeLayout>
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:id="@+id/relativeLayout"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry"\r
+ tools:context="com.example.lede2.AddDeviceActivity">\r
+\r
+\r
+ <Spinner\r
+ android:id="@+id/spinner1"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="1.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/textView9" />\r
+\r
+ <Spinner\r
+ android:id="@+id/spinner2"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="52dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintTop_toBottomOf="@+id/spinner1"\r
+ tools:layout_editor_absoluteX="64dp" />\r
+\r
+ <Spinner\r
+ android:id="@+id/spinner3"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/spinner2" />\r
+\r
+ <EditText\r
+ android:id="@+id/textInfo"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:ems="10"\r
+ android:inputType="textPersonName"\r
+ android:padding="10dp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/spinner4"\r
+ tools:text="Hello" />\r
+\r
+ <Spinner\r
+ android:id="@+id/spinner4"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/spinner3" />\r
+\r
+ <Button\r
+ android:id="@+id/doneButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:text="Done"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/textInfo" />\r
+\r
+ <android.support.design.widget.CoordinatorLayout\r
+ android:id="@+id/done"\r
+ android:layout_width="0dp"\r
+ android:layout_height="wrap_content"\r
+ android:visibility="visible"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent">\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical" />\r
+ </android.support.design.widget.CoordinatorLayout>\r
+\r
+ <TextView\r
+ android:id="@+id/textView9"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:background="@drawable/background"\r
+ android:gravity="center"\r
+ android:text="Insert"\r
+ android:textSize="18sp"\r
+ app:layout_constraintBottom_toTopOf="@+id/spinner1"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="1.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent"\r
+ app:layout_constraintVertical_bias="0.062" />\r
+\r
+ <ProgressBar\r
+ android:id="@+id/progressBar"\r
+ style="?android:attr/progressBarStyle"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ app:layout_constraintBottom_toTopOf="@+id/doneButton"\r
+ app:layout_constraintEnd_toStartOf="@+id/textInfo"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toEndOf="@+id/textInfo"\r
+ app:layout_constraintTop_toBottomOf="@+id/textInfo" />\r
+\r
+</android.support.constraint.ConstraintLayout>\r
android:layout_height="50dp"\r
android:layout_gravity="center"\r
android:layout_marginTop="50dp"\r
- android:layout_weight="0.06"\r
+ android:layout_weight=".06"\r
android:background="@drawable/pinkback"\r
android:text="save"\r
android:textColor="#FFA7A7"\r
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.example.lede2.DeleteDeviceActivity"
- android:background="@drawable/blueberry"
- >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:layout_alignParentTop="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:weightSum="1">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_margin="5dp"
- android:orientation="vertical"
- android:weightSum="1"
- android:layout_weight="1.86">
-
- <TextView
- android:id="@+id/delete_ip"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:text="Device ID (e.g. CM1)"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <EditText
-
- android:id="@+id/device_id"
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:background="@drawable/empty"
- android:gravity="center"
- android:inputType="text"
- android:textColor="@color/colorPrimaryDark"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/delete_user"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:text="Device type (e.g. Camera)"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <EditText
-
- android:id="@+id/device_type"
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:background="@drawable/empty"
- android:gravity="center"
- android:inputType="text"
- android:textColor="@color/colorPrimaryDark"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/delete_subtype"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:text="Device subtype (e.g. AmcrestCamera)"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <EditText
-
- android:id="@+id/device_subtype"
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:background="@drawable/empty"
- android:gravity="center"
- android:inputType="text"
- android:textColor="@color/colorPrimaryDark"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/delete_address_subtype"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:text="Device subtype (e.g. AmcrestCameraAdd)"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <EditText
-
- android:id="@+id/device_address_subtype"
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:background="@drawable/empty"
- android:gravity="center"
- android:inputType="text"
- android:textColor="@color/colorPrimaryDark"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/textStatus"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <Button
- android:id="@+id/delete"
- android:layout_width="145dp"
- android:layout_height="50dp"
- android:layout_gravity="center"
- android:layout_marginTop="50dp"
- android:background="@drawable/pinkback"
- android:text="delete"
- android:textColor="#FFA7A7"
- android:textSize="25dp"
- android:textStyle="bold" />
-
- <Button
- android:id="@+id/done"
- android:layout_width="150dp"
- android:layout_height="50dp"
- android:layout_gravity="center"
- android:layout_marginTop="50dp"
- android:layout_weight="0.06"
- android:background="@drawable/pinkback"
- android:text="done"
- android:textColor="#FFA7A7"
- android:textSize="25dp"
- android:textStyle="bold" />
-
-
- </LinearLayout>
- </LinearLayout>
-
-
-</RelativeLayout>
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:id="@+id/relativeLayout"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry"\r
+ tools:context="com.example.lede2.AddDeviceActivity">\r
+\r
+\r
+ <Spinner\r
+ android:id="@+id/delspinner1"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="24dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/textView6" />\r
+\r
+ <Spinner\r
+ android:id="@+id/delspinner2"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="24dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/delspinner1" />\r
+\r
+ <Spinner\r
+ android:id="@+id/delspinner3"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="24dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/delspinner2" />\r
+\r
+ <TextView\r
+ android:id="@+id/textView6"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/background"\r
+ android:gravity="center"\r
+ android:text="Delete"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent"\r
+ tools:textSize="24sp" />\r
+\r
+ <Button\r
+ android:id="@+id/delDoneButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="107dp"\r
+ android:text="Delete"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/delspinner3" />\r
+\r
+</android.support.constraint.ConstraintLayout>\r
xmlns:tools="http://schemas.android.com/tools"\r
android:layout_width="match_parent"\r
android:layout_height="match_parent"\r
- tools:context="com.example.lede2.EnrollDeviceActivity">\r
+ tools:context="com.example.lede2.RegisterDeviceLoading">\r
\r
\r
<LinearLayout\r
android:layout_marginRight="30dp"\r
android:background="@drawable/bluename"\r
android:gravity="center"\r
- android:text="Network Name : LEDE"\r
+ android:text="@string/default_rssid"\r
android:textColor="#000000"\r
android:textSize="20sp" />\r
\r
android:layout_width="match_parent"\r
android:layout_height="360dp"\r
android:layout_weight="0.18"\r
- android:background="@drawable/background"\r
- android:choiceMode="multipleChoice" />\r
+ android:background="@drawable/bluename"\r
+ android:choiceMode="multipleChoice"\r
+ />\r
+\r
+ <Spinner\r
+ android:id="@+id/selectedName"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:layout_weight="0.18" />\r
\r
<TextView\r
\r
android:id="@+id/txt_ip"\r
android:layout_width="match_parent"\r
android:layout_height="33dp"\r
+ android:layout_weight="0.00"\r
android:background="@drawable/empty"\r
+ android:focusable="false"\r
android:gravity="center"\r
android:inputType="text"\r
android:text="ip"\r
android:textColor="@color/colorPrimaryDark"\r
android:textIsSelectable="true"\r
android:textSize="17sp"\r
- android:textStyle="bold"\r
- android:layout_weight="0.00" />\r
+ android:textStyle="bold" />\r
\r
<TextView\r
\r
android:textColor="@color/colorPrimaryDark"\r
android:textIsSelectable="true"\r
android:textSize="17sp"\r
- android:textStyle="bold" />\r
+ android:textStyle="bold"\r
+ android:focusable="false"/>\r
\r
<LinearLayout\r
android:layout_width="match_parent"\r
android:orientation="horizontal">\r
\r
\r
- <Button\r
- android:id="@+id/delete"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_weight="1"\r
- android:text="Delete" />\r
+ <Button\r
+ android:id="@+id/list_back"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_weight="1"\r
+ android:text="Back" />\r
\r
<Button\r
- android:id="@+id/deviceInfo"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_weight="1"\r
- android:text="Device Info" />\r
+ android:id="@+id/delete"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_weight="1"\r
+ android:text="Delete" />\r
</LinearLayout>\r
</LinearLayout>\r
<LinearLayout\r
android:layout_width="match_parent"\r
android:layout_height="wrap_content"\r
+ android:background="@drawable/blueberry"\r
android:orientation="vertical"\r
android:padding="20dp"\r
- android:background="@drawable/blueberry"\r
android:weightSum="1">\r
\r
<TextView\r
android:layout_width="match_parent"\r
android:layout_height="wrap_content"\r
- android:text="Sentinel\n"\r
android:gravity="center"\r
+ android:text="Vigilia\n"\r
android:textColor="#000000"\r
android:textSize="32sp"\r
- android:textStyle="bold"/>\r
+ android:textStyle="bold" />\r
\r
<LinearLayout\r
android:layout_width="wrap_content"\r
android:layout_height="wrap_content"\r
- android:orientation="horizontal"\r
android:layout_gravity="center"\r
- android:layout_weight="0.25">\r
-<LinearLayout\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:orientation="horizontal">\r
-\r
- <TextView\r
- android:id="@id/name_text"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:text="SSID : \n"\r
- android:textColor="@color/blue"\r
- android:textSize="20sp"\r
- android:textStyle="bold"\r
+ android:layout_weight="0.25"\r
+ android:orientation="horizontal">\r
\r
- />\r
+ <LinearLayout\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="horizontal">\r
\r
- <TextView\r
- android:id="@id/device_subtype"\r
- android:layout_width="wrap_content"\r
- android:layout_height="wrap_content"\r
- android:layout_marginRight="150dp"\r
- android:text="LEDE\n"\r
- android:textColor="@color/blue"\r
- android:textSize="20sp"\r
- android:textStyle="bold" />\r
+ <TextView\r
+ android:id="@id/name_text"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="SSID : \n"\r
+ android:textColor="@color/blue"\r
+ android:textSize="20sp"\r
+ android:textStyle="bold"\r
+\r
+ />\r
+\r
+ <TextView\r
+ android:id="@id/device_subtype"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginRight="150dp"\r
+ android:text="LEDE\n"\r
+ android:textColor="@color/blue"\r
+ android:textSize="20sp"\r
+ android:textStyle="bold" />\r
\r
\r
-</LinearLayout>\r
+ </LinearLayout>\r
\r
<Button\r
android:id="@+id/config"\r
android:layout_width="50dp"\r
android:layout_height="40dp"\r
android:layout_gravity="right"\r
+ android:layout_marginBottom="30dp"\r
android:layout_marginTop="20dp"\r
android:background="@drawable/wifibackground"\r
- android:drawableTop="@drawable/configuration"\r
- android:layout_marginBottom="30dp"\r
- />\r
+ android:drawableTop="@drawable/configuration" />\r
</LinearLayout>\r
\r
<Button\r
</LinearLayout>\r
\r
<Button\r
- android:id="@+id/insert_db"\r
+ android:id="@+id/database"\r
android:layout_width="match_parent"\r
android:layout_height="50dp"\r
android:layout_gravity="center"\r
\r
android:background="@drawable/bluename"\r
- android:text="Insert DB"\r
+ android:text="Database"\r
android:textSize="25sp"\r
android:textStyle="bold" />\r
\r
</LinearLayout>\r
\r
<Button\r
- android:id="@+id/delete_db"\r
+ android:id="@+id/applications"\r
android:layout_width="match_parent"\r
android:layout_height="50dp"\r
android:layout_gravity="center"\r
\r
android:background="@drawable/bluename"\r
- android:text="Delete DB"\r
+ android:text="Applications"\r
android:textSize="25sp"\r
android:textStyle="bold" />\r
\r
</LinearLayout>\r
\r
<Button\r
- android:id="@+id/add_del_comm"\r
+ android:id="@+id/drivers"\r
android:layout_width="match_parent"\r
android:layout_height="50dp"\r
android:layout_gravity="center"\r
\r
android:background="@drawable/bluename"\r
- android:text="Add/Delete Relation"\r
+ android:text="Drivers"\r
android:textSize="25sp"\r
android:textStyle="bold" />\r
\r
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.example.lede2.RelationActivity"
- android:background="@drawable/blueberry"
- >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:layout_alignParentTop="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_alignParentBottom="true"
- android:weightSum="1">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_margin="5dp"
- android:layout_weight="0.55"
- android:orientation="vertical"
- android:weightSum="1">
-
- <TextView
- android:id="@+id/textView2"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:layout_weight="0.05"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:text="Please adjust the info below to add a relation"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="16dp"
- android:layout_gravity="center"
- android:orientation="horizontal">
-
- </LinearLayout>
-
- <EditText
-
- android:id="@+id/textInfoComm"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/empty"
- android:gravity="center"
- android:inputType="text|textMultiLine"
- android:textColor="@color/colorPrimaryDark"
- android:textColorLink="@color/blue"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <Button
- android:id="@+id/addButton"
- android:layout_width="150dp"
- android:layout_height="50dp"
- android:layout_gravity="center"
- android:layout_marginTop="50dp"
- android:layout_weight="0.06"
- android:background="@drawable/pinkback"
- android:text="add"
- android:textColor="#FFA7A7"
- android:textSize="25dp"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/textView"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:layout_weight="0.05"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:text="Please provide entry IDs to delete a relation"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/textView3"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:layout_weight="0.05"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:text="ID source"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <EditText
-
- android:id="@+id/id_source"
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:layout_weight="0.05"
- android:background="@drawable/empty"
- android:gravity="center"
- android:inputType="text"
- android:textColor="@color/colorPrimaryDark"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/textView4"
- android:layout_width="match_parent"
- android:layout_height="30dp"
- android:layout_marginTop="10dp"
- android:layout_weight="0.05"
- android:background="@drawable/orange"
- android:gravity="center"
- android:inputType="text"
- android:text="ID destination"
- android:textColor="#000000"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <EditText
-
- android:id="@+id/id_destination"
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:layout_weight="0.05"
- android:background="@drawable/empty"
- android:gravity="center"
- android:inputType="text"
- android:textColor="@color/colorPrimaryDark"
- android:textIsSelectable="true"
- android:textSize="17sp"
- android:textStyle="bold" />
-
- <Button
- android:id="@+id/delButton"
- android:layout_width="154dp"
- android:layout_height="50dp"
- android:layout_gravity="center"
- android:layout_marginTop="50dp"
- android:background="@drawable/pinkback"
- android:text="delete"
- android:textColor="#FFA7A7"
- android:textSize="25dp"
- android:textStyle="bold" />
-
-
- </LinearLayout>
- </LinearLayout>
-
-
-</RelativeLayout>
+<?xml version="1.0" encoding="utf-8"?>\r
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ tools:context="com.example.lede2.RelationActivity"\r
+ android:background="@drawable/blueberry"\r
+ >\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical"\r
+ android:layout_alignParentTop="true"\r
+ android:layout_alignParentLeft="true"\r
+ android:layout_alignParentStart="true"\r
+ android:layout_alignParentBottom="true"\r
+ android:weightSum="1">\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:layout_margin="5dp"\r
+ android:layout_weight="0.55"\r
+ android:orientation="vertical"\r
+ android:weightSum="1">\r
+\r
+ <TextView\r
+ android:id="@+id/textView2"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="30dp"\r
+ android:layout_marginTop="10dp"\r
+ android:layout_weight="0.05"\r
+ android:background="@drawable/orange"\r
+ android:gravity="center"\r
+ android:inputType="text"\r
+ android:text="Please adjust the info below to add a relation"\r
+ android:textColor="#000000"\r
+ android:textIsSelectable="true"\r
+ android:textSize="17sp"\r
+ android:textStyle="bold" />\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="16dp"\r
+ android:layout_gravity="center"\r
+ android:orientation="horizontal">\r
+\r
+ </LinearLayout>\r
+\r
+ <EditText\r
+\r
+ android:id="@+id/textInfoComm"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:background="@drawable/empty"\r
+ android:gravity="center"\r
+ android:inputType="text|textMultiLine"\r
+ android:textColor="@color/colorPrimaryDark"\r
+ android:textColorLink="@color/blue"\r
+ android:textIsSelectable="true"\r
+ android:textSize="17sp"\r
+ android:textStyle="bold" />\r
+\r
+ <Button\r
+ android:id="@+id/addButton"\r
+ android:layout_width="150dp"\r
+ android:layout_height="50dp"\r
+ android:layout_gravity="center"\r
+ android:layout_marginTop="50dp"\r
+ android:layout_weight="0.06"\r
+ android:background="@drawable/pinkback"\r
+ android:text="add"\r
+ android:textColor="#FFA7A7"\r
+ android:textSize="25dp"\r
+ android:textStyle="bold" />\r
+\r
+ <TextView\r
+ android:id="@+id/textView"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="30dp"\r
+ android:layout_marginTop="10dp"\r
+ android:layout_weight="0.05"\r
+ android:background="@drawable/orange"\r
+ android:gravity="center"\r
+ android:inputType="text"\r
+ android:text="Please provide entry IDs to delete a relation"\r
+ android:textColor="#000000"\r
+ android:textIsSelectable="true"\r
+ android:textSize="17sp"\r
+ android:textStyle="bold" />\r
+\r
+ <TextView\r
+ android:id="@+id/textView3"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="30dp"\r
+ android:layout_marginTop="10dp"\r
+ android:layout_weight="0.05"\r
+ android:background="@drawable/orange"\r
+ android:gravity="center"\r
+ android:inputType="text"\r
+ android:text="ID source"\r
+ android:textColor="#000000"\r
+ android:textIsSelectable="true"\r
+ android:textSize="17sp"\r
+ android:textStyle="bold" />\r
+\r
+ <EditText\r
+\r
+ android:id="@+id/id_source"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="40dp"\r
+ android:layout_weight="0.05"\r
+ android:background="@drawable/empty"\r
+ android:gravity="center"\r
+ android:inputType="text"\r
+ android:textColor="@color/colorPrimaryDark"\r
+ android:textIsSelectable="true"\r
+ android:textSize="17sp"\r
+ android:textStyle="bold" />\r
+\r
+ <TextView\r
+ android:id="@+id/textView4"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="30dp"\r
+ android:layout_marginTop="10dp"\r
+ android:layout_weight="0.05"\r
+ android:background="@drawable/orange"\r
+ android:gravity="center"\r
+ android:inputType="text"\r
+ android:text="ID destination"\r
+ android:textColor="#000000"\r
+ android:textIsSelectable="true"\r
+ android:textSize="17sp"\r
+ android:textStyle="bold" />\r
+\r
+ <EditText\r
+\r
+ android:id="@+id/id_destination"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="40dp"\r
+ android:layout_weight="0.05"\r
+ android:background="@drawable/empty"\r
+ android:gravity="center"\r
+ android:inputType="text"\r
+ android:textColor="@color/colorPrimaryDark"\r
+ android:textIsSelectable="true"\r
+ android:textSize="17sp"\r
+ android:textStyle="bold" />\r
+\r
+ <Button\r
+ android:id="@+id/delButton"\r
+ android:layout_width="154dp"\r
+ android:layout_height="50dp"\r
+ android:layout_gravity="center"\r
+ android:layout_marginTop="50dp"\r
+ android:background="@drawable/pinkback"\r
+ android:text="delete"\r
+ android:textColor="#FFA7A7"\r
+ android:textSize="25dp"\r
+ android:textStyle="bold" />\r
+\r
+\r
+ </LinearLayout>\r
+ </LinearLayout>\r
+\r
+\r
+</RelativeLayout>\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry">\r
+\r
+ <Button\r
+ android:id="@+id/homeSecurityButton"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:layout_marginTop="228dp"\r
+ android:background="@drawable/bluename"\r
+ android:text="Home Security"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Button\r
+ android:id="@+id/irrigationButton"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:text="Irrigation"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/homeSecurityButton" />\r
+\r
+ <Button\r
+ android:id="@+id/smartLightsButton"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:text="SmartLights"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/lifxTestButton" />\r
+\r
+ <Button\r
+ android:id="@+id/lifxTestButton"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:text="LifxTest"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/irrigationButton" />\r
+\r
+ <Button\r
+ android:id="@+id/speakerButton"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:text="Speaker"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/smartLightsButton" />\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry">\r
+\r
+ <Button\r
+ android:id="@+id/doneDrivers"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginBottom="16dp"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:text="Insert To Database"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent"\r
+ app:layout_constraintVertical_bias="0.127" />\r
+\r
+ <Button\r
+ android:id="@+id/deleteFromDatabase"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:layout_marginTop="24dp"\r
+ android:background="@drawable/bluename"\r
+ android:text="Delete From Database"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/doneDrivers" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry">\r
+\r
+ <android.support.design.widget.CoordinatorLayout\r
+ android:id="@+id/driversDone"\r
+ android:layout_width="0dp"\r
+ android:layout_height="wrap_content"\r
+ android:visibility="visible"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent">\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical" />\r
+ </android.support.design.widget.CoordinatorLayout>\r
+\r
+ <Button\r
+ android:id="@+id/doneDrivers"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="32dp"\r
+ android:text="Next"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/spinnerDrivers" />\r
+\r
+ <Spinner\r
+ android:id="@+id/spinnerDrivers"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="80dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <TextView\r
+ android:id="@+id/textView10"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="31dp"\r
+ android:background="@color/white"\r
+ android:text="Select Device Type"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry"\r
+ android:descendantFocusability="blocksDescendants">\r
+\r
+ <android.support.design.widget.CoordinatorLayout\r
+ android:id="@+id/doneDriver"\r
+ android:layout_width="0dp"\r
+ android:layout_height="wrap_content"\r
+ android:visibility="visible"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent">\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical" />\r
+ </android.support.design.widget.CoordinatorLayout>\r
+\r
+ <Spinner\r
+ android:id="@+id/selectedRelation"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/setsOrRelations" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationLeftSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toStartOf="@+id/guideline2"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationRightSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toEndOf="@+id/guideline2"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Add Device Address"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/relationLeftSpinner" />\r
+\r
+ <android.support.constraint.Guideline\r
+ android:id="@+id/guideline2"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical"\r
+ app:layout_constraintGuide_begin="192dp"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDoneButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginBottom="8dp"\r
+ android:focusable="false"\r
+ android:text="done"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent" />\r
+\r
+ <ListView\r
+ android:id="@+id/selectedRelationsList"\r
+ android:layout_width="0dp"\r
+ android:layout_height="245dp"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:choiceMode="multipleChoice"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/addRelationButton" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDeleteButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Delete Selected"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelationsList" />\r
+\r
+ <TextView\r
+ android:id="@+id/DriversTitle"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@color/white"\r
+ android:text="Drivers"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Spinner\r
+ android:id="@+id/setsOrRelations"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/DriversTitle" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry"\r
+ android:descendantFocusability="blocksDescendants">\r
+\r
+ <Spinner\r
+ android:id="@+id/selectedRelation"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/setsOrRelations" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationLeftSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toStartOf="@+id/guideline2"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationRightSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toEndOf="@+id/guideline2"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Add"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/relationLeftSpinner" />\r
+\r
+ <android.support.constraint.Guideline\r
+ android:id="@+id/guideline2"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical"\r
+ app:layout_constraintGuide_begin="192dp"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDoneButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginBottom="8dp"\r
+ android:focusable="false"\r
+ android:text="done"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent" />\r
+\r
+ <ListView\r
+ android:id="@+id/selectedRelationsList"\r
+ android:layout_width="0dp"\r
+ android:layout_height="245dp"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:choiceMode="multipleChoice"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/addRelationButton" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDeleteButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Delete Selected"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelationsList" />\r
+\r
+ <TextView\r
+ android:id="@+id/DriversTitle"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@color/white"\r
+ android:text="HomeSecurity"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Spinner\r
+ android:id="@+id/setsOrRelations"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/DriversTitle" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent">\r
+\r
+ <EditText\r
+ android:id="@+id/editText3"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:ems="10"\r
+ android:inputType="textPersonName"\r
+ android:text="@string/install_address"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent">\r
+\r
+ <EditText\r
+ android:id="@+id/editText"\r
+ android:layout_width="306dp"\r
+ android:layout_height="wrap_content"\r
+ android:ems="10"\r
+ android:inputType="textPersonName"\r
+ android:text="@string/install_comm_pattern"\r
+ tools:layout_editor_absoluteX="75dp"\r
+ tools:layout_editor_absoluteY="98dp" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout\r
+ xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent">\r
+\r
+ <EditText\r
+ android:id="@+id/editText4"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:ems="10"\r
+ android:inputType="textPersonName"\r
+ android:text="@string/install_device_address"\r
+ tools:layout_editor_absoluteX="32dp"\r
+ tools:layout_editor_absoluteY="91dp" />\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout\r
+ xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent">\r
+\r
+ <EditText\r
+ android:id="@+id/editText6"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:ems="10"\r
+ android:inputType="textPersonName"\r
+ android:text="@string/install_host"\r
+ tools:layout_editor_absoluteX="77dp"\r
+ tools:layout_editor_absoluteY="149dp" />\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry">\r
+\r
+ <Button\r
+ android:id="@+id/doneDrivers"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginBottom="16dp"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:text="Install Device"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent"\r
+ app:layout_constraintVertical_bias="0.127" />\r
+\r
+ <Button\r
+ android:id="@+id/install_zigbee_device_address"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:layout_marginTop="24dp"\r
+ android:background="@drawable/bluename"\r
+ android:text="Install Zigbee Device"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/doneDrivers" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout\r
+ xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent">\r
+\r
+ <EditText\r
+ android:id="@+id/editText2"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:ems="10"\r
+ android:inputType="textPersonName"\r
+ android:text="@string/install_two_devices_and_comm_pattern"\r
+ tools:layout_editor_absoluteX="33dp"\r
+ tools:layout_editor_absoluteY="66dp" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout\r
+ xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent">\r
+\r
+ <EditText\r
+ android:id="@+id/editText5"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:ems="10"\r
+ android:inputType="textPersonName"\r
+ android:text="@string/install_zigbee_device_address"\r
+ tools:layout_editor_absoluteX="41dp"\r
+ tools:layout_editor_absoluteY="63dp" />\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry"\r
+ android:descendantFocusability="blocksDescendants">\r
+\r
+ <Spinner\r
+ android:id="@+id/selectedRelation"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/setsOrRelations" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationLeftSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toStartOf="@+id/guideline2"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationRightSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toEndOf="@+id/guideline2"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Add"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/relationLeftSpinner" />\r
+\r
+ <android.support.constraint.Guideline\r
+ android:id="@+id/guideline2"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical"\r
+ app:layout_constraintGuide_begin="192dp"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDoneButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginBottom="8dp"\r
+ android:focusable="false"\r
+ android:text="done"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent" />\r
+\r
+ <ListView\r
+ android:id="@+id/selectedRelationsList"\r
+ android:layout_width="0dp"\r
+ android:layout_height="245dp"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:choiceMode="multipleChoice"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/addRelationButton" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDeleteButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Delete Selected"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelationsList" />\r
+\r
+ <TextView\r
+ android:id="@+id/DriversTitle"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@color/white"\r
+ android:text="Irrigation"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Spinner\r
+ android:id="@+id/setsOrRelations"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/DriversTitle" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry"\r
+ android:descendantFocusability="blocksDescendants">\r
+\r
+ <Spinner\r
+ android:id="@+id/selectedRelation"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/setsOrRelations" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationLeftSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toStartOf="@+id/guideline2"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationRightSpinnerLifx"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toEndOf="@+id/guideline2"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Add"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/relationLeftSpinner" />\r
+\r
+ <android.support.constraint.Guideline\r
+ android:id="@+id/guideline2"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical"\r
+ app:layout_constraintGuide_begin="192dp"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDoneButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginBottom="8dp"\r
+ android:focusable="false"\r
+ android:text="done"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent" />\r
+\r
+ <ListView\r
+ android:id="@+id/selectedRelationsList"\r
+ android:layout_width="0dp"\r
+ android:layout_height="245dp"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:choiceMode="multipleChoice"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/addRelationButton" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDeleteButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Delete Selected"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelationsList" />\r
+\r
+ <TextView\r
+ android:id="@+id/DriversTitle"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@color/white"\r
+ android:text="LifxTest"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Spinner\r
+ android:id="@+id/setsOrRelations"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/DriversTitle" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry">\r
+\r
+ <Spinner\r
+ android:id="@+id/registerMACs"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/textView7" />\r
+\r
+ <TextView\r
+ android:id="@+id/textView7"\r
+ android:layout_width="0dp"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="80dp"\r
+ android:background="@drawable/empty"\r
+ android:gravity="center"\r
+ android:text="@string/ChooseMac"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <TextView\r
+ android:id="@+id/textView8"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/empty"\r
+ android:gravity="center"\r
+ android:text="@string/EnterDeviceName"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/registerMACs" />\r
+\r
+ <EditText\r
+ android:id="@+id/registerName"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:ems="10"\r
+ android:inputType="textPersonName"\r
+ android:padding="10dp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/textView8" />\r
+\r
+ <Button\r
+ android:id="@+id/registerDone"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="39dp"\r
+ android:text="Done"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/registerName" />\r
+\r
+ <android.support.design.widget.CoordinatorLayout\r
+ android:id="@+id/oneWordName"\r
+ android:layout_width="0dp"\r
+ android:layout_height="wrap_content"\r
+ android:visibility="visible"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent">\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical" />\r
+ </android.support.design.widget.CoordinatorLayout>\r
+\r
+ <Button\r
+ android:id="@+id/regAddWifi"\r
+ android:layout_width="@dimen/Button_height"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginEnd="8dp"\r
+ android:background="@drawable/wifi"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ tools:layout_editor_absoluteY="16dp" />\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:id="@+id/main_layout_id"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry">\r
+\r
+ <android.support.design.widget.CoordinatorLayout\r
+ android:id="@+id/addToClipboard"\r
+ android:layout_width="0dp"\r
+ android:layout_height="wrap_content"\r
+ android:visibility="visible"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent">\r
+\r
+ <LinearLayout\r
+ android:layout_width="match_parent"\r
+ android:layout_height="wrap_content"\r
+ android:keepScreenOn="true"\r
+ android:orientation="vertical" />\r
+ </android.support.design.widget.CoordinatorLayout>\r
+\r
+ <Button\r
+ android:id="@+id/back"\r
+ style="@style/Widget.AppCompat.Button.Small"\r
+ android:layout_width="150dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginBottom="8dp"\r
+ android:background="@drawable/pinkback"\r
+ android:text="BACK"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ tools:text="Back" />\r
+\r
+ <TextView\r
+ android:id="@+id/passwordNotice"\r
+ android:layout_width="0dp"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="40dp"\r
+ android:background="@drawable/empty"\r
+ android:clickable="false"\r
+ android:gravity="center"\r
+ android:text="Password for Registering Device:"\r
+ android:textColor="@android:color/black"\r
+ android:textSize="24sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent"\r
+ tools:text="Password for Registering Device:" />\r
+\r
+ <TextView\r
+ android:id="@+id/newPassword"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:gravity="center_vertical|center_horizontal|center"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/passwordNotice" />\r
+\r
+ <Button\r
+ android:id="@+id/load"\r
+ android:layout_width="150dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginBottom="8dp"\r
+ android:background="@drawable/pinkback"\r
+ android:text="LOAD"\r
+ app:layout_constraintBottom_toTopOf="@+id/check"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ tools:text="LOAD" />\r
+\r
+ <TextView\r
+ android:id="@+id/information"\r
+ android:layout_width="0dp"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/empty"\r
+ android:gravity="center_vertical|center_horizontal|center"\r
+ android:text="Please Press Load, then Connect a New Device to the Network Using the New Password, and then Press Check."\r
+ android:textColor="@android:color/background_dark"\r
+ android:textSize="18sp"\r
+ app:layout_constraintTop_toBottomOf="@+id/newPassword"\r
+ tools:layout_editor_absoluteX="0dp" />\r
+\r
+ <Button\r
+ android:id="@+id/check"\r
+ android:layout_width="150dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginBottom="8dp"\r
+ android:layout_marginEnd="8dp"\r
+ android:layout_marginStart="8dp"\r
+ android:background="@drawable/pinkback"\r
+ android:text="CHECK"\r
+ app:layout_constraintBottom_toTopOf="@+id/back"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry"\r
+ android:descendantFocusability="blocksDescendants">\r
+\r
+ <Spinner\r
+ android:id="@+id/selectedRelation"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/setsOrRelations" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationLeftSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toStartOf="@+id/guideline2"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationRightSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toEndOf="@+id/guideline2"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Add"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/relationLeftSpinner" />\r
+\r
+ <android.support.constraint.Guideline\r
+ android:id="@+id/guideline2"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical"\r
+ app:layout_constraintGuide_begin="192dp"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDoneButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginBottom="8dp"\r
+ android:focusable="false"\r
+ android:text="done"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent" />\r
+\r
+ <ListView\r
+ android:id="@+id/selectedRelationsList"\r
+ android:layout_width="0dp"\r
+ android:layout_height="245dp"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:choiceMode="multipleChoice"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/addRelationButton" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDeleteButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Delete Selected"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelationsList" />\r
+\r
+ <TextView\r
+ android:id="@+id/DriversTitle"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@color/white"\r
+ android:text="SmartLights"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Spinner\r
+ android:id="@+id/setsOrRelations"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/DriversTitle" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry"\r
+ android:descendantFocusability="blocksDescendants">\r
+\r
+ <Spinner\r
+ android:id="@+id/selectedRelation"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.0"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/setsOrRelations" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationLeftSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toStartOf="@+id/guideline2"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Spinner\r
+ android:id="@+id/relationRightSpinner"\r
+ android:layout_width="0dp"\r
+ android:layout_height="50dp"\r
+ android:layout_marginTop="16dp"\r
+ android:background="@drawable/wifibackground"\r
+ android:focusable="false"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toEndOf="@+id/guideline2"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelation" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Add"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/relationLeftSpinner" />\r
+\r
+ <android.support.constraint.Guideline\r
+ android:id="@+id/guideline2"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:orientation="vertical"\r
+ app:layout_constraintGuide_begin="192dp"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDoneButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginBottom="8dp"\r
+ android:focusable="false"\r
+ android:text="done"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent" />\r
+\r
+ <ListView\r
+ android:id="@+id/selectedRelationsList"\r
+ android:layout_width="0dp"\r
+ android:layout_height="245dp"\r
+ android:layout_marginEnd="16dp"\r
+ android:layout_marginStart="16dp"\r
+ android:background="@drawable/bluename"\r
+ android:choiceMode="multipleChoice"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/addRelationButton" />\r
+\r
+ <Button\r
+ android:id="@+id/addRelationDeleteButton"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="16dp"\r
+ android:focusable="false"\r
+ android:text="Delete Selected"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/selectedRelationsList" />\r
+\r
+ <TextView\r
+ android:id="@+id/DriversTitle"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@color/white"\r
+ android:text="Speaker"\r
+ android:textSize="18sp"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Spinner\r
+ android:id="@+id/setsOrRelations"\r
+ android:layout_width="0dp"\r
+ android:layout_height="@dimen/Button_height"\r
+ android:layout_marginTop="8dp"\r
+ android:background="@drawable/wifibackground"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/DriversTitle" />\r
+\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+ xmlns:app="http://schemas.android.com/apk/res-auto"\r
+ xmlns:tools="http://schemas.android.com/tools"\r
+ android:id="@+id/update"\r
+ android:layout_width="match_parent"\r
+ android:layout_height="match_parent"\r
+ android:background="@drawable/blueberry">\r
+\r
+ <TextView\r
+ android:id="@+id/textView5"\r
+ android:layout_width="200dp"\r
+ android:layout_height="145dp"\r
+ android:text="Updating"\r
+ app:layout_constraintBottom_toTopOf="@+id/button"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toTopOf="parent" />\r
+\r
+ <Button\r
+ android:id="@+id/button"\r
+ android:layout_width="wrap_content"\r
+ android:layout_height="wrap_content"\r
+ android:text="Button"\r
+ app:layout_constraintBottom_toBottomOf="parent"\r
+ app:layout_constraintEnd_toEndOf="parent"\r
+ app:layout_constraintHorizontal_bias="0.5"\r
+ app:layout_constraintStart_toStartOf="parent"\r
+ app:layout_constraintTop_toBottomOf="@+id/textView5" />\r
+</android.support.constraint.ConstraintLayout>
\ No newline at end of file
-<resources>
-
- <!-- Declare custom theme attributes that allow changing which styles are
- used for button bars depending on the API level.
- ?android:attr/buttonBarStyle is new as of API 11 so this is
- necessary to support previous API levels. -->
- <declare-styleable name="ButtonBarContainerTheme">
- <attr name="metaButtonBarStyle" format="reference" />
- <attr name="metaButtonBarButtonStyle" format="reference" />
- </declare-styleable>
-
-</resources>
+<resources>\r
+\r
+ <!-- Declare custom theme attributes that allow changing which styles are\r
+ used for button bars depending on the API level.\r
+ ?android:attr/buttonBarStyle is new as of API 11 so this is\r
+ necessary to support previous API levels. -->\r
+ <declare-styleable name="ButtonBarContainerTheme">\r
+ <attr name="metaButtonBarStyle" format="reference" />\r
+ <attr name="metaButtonBarButtonStyle" format="reference" />\r
+ </declare-styleable>\r
+\r
+</resources>\r
<color name="white">#ffffff</color>\r
<color name="red">#ff00</color>\r
\r
- <color name="black_overlay">#66000000</color>\r
+ <color name="black_overlay">#66b9b6b6</color>\r
</resources>\r
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <string name="default_rssid">LEDE</string>
- <string name="default_rpwd">1qaz2wsx3edc</string>
- <string name="default_routerip">128.195.204.94</string>
- <string name="default_routeruser">root</string>
- <string name="mysql_hostuser">iotuser</string>
- <string name="mysql_hostip">192.168.1.198</string>
- <string name="mysql_hostpassword">1qaz2wsx</string>
- <string name="change_default_script">/root/sentinel_setup/register/change_default_pw.sh</string>
- <string name="connect_device_script">/root/sentinel_setup/register/connect_device.sh</string>
- <string name="register_device_script">/root/sentinel_setup/register/register_device.sh</string>
- <string name="add_device_file">add_device.config</string>
- <string name="add_device_address_file">add_device_address.config</string>
- <string name="add_device_comm_file">add_comm.config</string>
- <string name="add_device_to_mysql">/home/iotuser/iot2/iotjava/iotinstaller</string>
- <string name="mysql_config_file">device.config</string>
- <string name="install_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -install_ent</string>
- <string name="delete_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -delete_ent</string>
- <string name="install_address_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -install_dev_add</string>
- <string name="delete_address_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -delete_dev_add</string>
- <string name="add_comm_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -install_comm</string>
- <string name="delete_comm_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -delete_comm</string>
+<?xml version="1.0" encoding="utf-8"?>\r
+<resources>\r
+ <string name="default_rssid">LEDE2</string>\r
+ <string name="default_rpwd">1qaz2wsx3edc</string>\r
+ <string name="default_routerip">128.195.177.207</string>\r
+ <string name="default_routeruser">root</string>\r
+ <string name="mysql_hostuser">iotuser</string>\r
+ <string name="mysql_hostip">192.168.1.192</string>\r
+ <string name="mysql_hostpassword">1qaz2wsx</string>\r
+ <string name="change_default_script">/root/vigilia_setup/register/change_default_pw.sh</string>\r
+ <string name="connect_device_script">/root/vigilia_setup/register/connect_device.sh</string>\r
+ <string name="register_device_script">/root/vigilia_setup/register/register_device.sh</string>\r
+ <string name="install_device_file">1)_install_one_device.config</string>\r
+ <string name="install_device_comm_file">2)_install_comm_pattern.config</string>\r
+ <string name="install_two_devices_and_comm_file">3)_install_two_devices_and_comm_pattern.config</string>\r
+ <string name="install_address_file">4)_install_address.config</string>\r
+ <string name="install_device_address_file">5)_install_device_address.config</string>\r
+ <string name="install_zigbee_device_address_file">6)_install_zigbee_device_address.config</string>\r
+ <string name="install_host_file">7)_install_host.config</string>\r
+ <string name="delete_entity_file">8)_delete_entity.config</string>\r
+ <string name="delete_comm_pattern_file">9)_delete_comm_pattern.config</string>\r
+ <string name="delete_address_file">10)_delete_address.config</string>\r
+ <string name="delete_device_address_file">11)_delete_device_address.config</string>\r
+ <string name="delete_zigbee_device_address_file">12)_delete_zigbee_device_address.config</string>\r
+ <string name="delete_host">13)_delete_host.config</string>\r
+\r
+\r
+ <string name="add_device_to_mysql">/home/iotuser/iot2/bin/iotinstaller</string>\r
+ <string name="mysql_config_file">device.config</string>\r
+ <string name="install_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -install_ent</string>\r
+ <string name="delete_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -delete_ent</string>\r
+ <string name="install_address_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -install_dev_add</string>\r
+ <string name="install_zb_address_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -install_zb_add</string>\r
+ <string name="delete_address_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -delete_dev_add</string>\r
+ <string name="delete_zb_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -delete_zb_add</string>\r
+ <string name="add_comm_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -install_comm</string>\r
+ <string name="delete_comm_cmd">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -delete_comm</string>\r
+ <string name ="database_name">IoTMain</string>\r
</resources>
\ No newline at end of file
-<resources>
- <dimen name="fab_margin">16dp</dimen>
-</resources>
+<resources>\r
+ <dimen name="fab_margin">16dp</dimen>\r
+ <dimen name="Button_height">48dp</dimen>\r
+</resources>\r
<string name="title_activity_delete_device">DeleteDeviceActivity</string>\r
<string name="title_activity_add_relation">AddRelationActivity</string>\r
<string name="title_activity_relation">RelationActivity</string>\r
+ <string name="install_one_device">Install One Device</string>\r
+ <string name="install_comm_pattern">Install Communication Pattern</string>\r
+ <string name="install_two_devices_and_comm_pattern">Install Two Devices and Communication Pattern</string>\r
+ <string name="install_address">Install Address</string>\r
+ <string name="install_device_address">Install Device Address</string>\r
+ <string name="install_zigbee_device_address">Install Zigbee Device Address</string>\r
+ <string name="install_host">Install Host</string>\r
+ <string name="device_param_config_filename">device_param.config</string>\r
+ <string name="device_id_config_filename">device_id_config.txt</string>\r
+ <string name="initial_DHCP">initial_DHCP.txt</string>\r
+ <string name="temp_DHCP">temp_DHCP.txt</string>\r
+ <string name="mac_address_filename">mac_address.txt</string>\r
+ <string name="devices_dat_filename">devices.dat</string>\r
+ <string name="setsAndRelationsFilename">setsAndRelationsFilename</string>\r
+ <string name="driversListFilename">driversList</string>\r
+ <string name="smartLightsControllerConfigFile">smartLightsControllerConfig</string>\r
+ <string name="speakerControllerConfigFile">speakerControllerConfig</string>\r
+ <string name="homeSecurityControllerConfigFile">homeSecurityControllerConfig</string>\r
+ <string name="irrigationControllerConfigFile">irrigationControllerConfig</string>\r
+ <string name="lifxtestControllerConfigFile">lifxtestControllerConfig</string>\r
+ <string name="driverConfigFilename">driverConfig</string>\r
+ <string name="setListFilename">setList</string>\r
+ <string name="IoTDeviceAddress">IotDeviceAddress</string>\r
+\r
+\r
+\r
+ <string name="changeToSQLConfigFileLocation"> cd ~/iot2/localconfig/mysql; </string>\\r
+ <string name="changeToCommConfigFileLocation"> cd ~/iot2/bin/iotinstaller; </string>\\r
+\r
+\r
+\r
+ <string name="update_DBInformation_File">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -get AllDevices.config</string>\r
+ <string name="cat_device_types">cat AddressInformation.config</string>\r
+ <string name="cat_subtypes">cat IDSubtypeInformation.config</string>\r
+ <string name="getSmartLightsSetsAndRelationsCommand">cat ~/iot2/benchmarks/Java/SmartLightsController/SmartLightsController.config </string>\r
+ <string name="getSpeakerSetsAndRelationsCommand">cat ~/iot2/benchmarks/Java/SpeakerController/SpeakerController.config </string>\r
+ <string name="getHomeSecuritySetsAndRelationsCommand">cat ~/iot2/benchmarks/Java/HomeSecurityController/HomeSecurityController.config </string>\r
+ <string name="getIrrigationSetsAndRelationsCommand">cat ~/iot2/benchmarks/Java/IrrigationController/IrrigationController.config </string>\r
+ <string name="getlifxtestSetsAndRelationsCommand">cat ~/iot2/benchmarks/Java/Lifxtest/Lifxtest.config </string>\r
+ <string name="getListOfDriversCommand">cat ~/iot2/bin/iotinstaller/driversList.config </string>\r
+ <string name="getAmcrestCameraConfig">cat ~/iot2/benchmarks/drivers/Java/AmcrestCamera/AmcrestCamera.config </string>\r
+ <string name="updateSetList">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -updateSetList AllDevices.config;</string>\r
+ <string name="updateIoTDeviceAddress">java -cp .:..:/usr/share/java/* iotinstaller.IoTInstaller -updateIoTDeviceAddress AllDevices.config</string>\r
+\r
+ <string name="getSetList">cat SetList.config</string>\r
+ <string name="getIoTDeviceAddress">cat IoTDeviceAddress.config</string>\r
+\r
+ <string name="ChooseMac">Choose MAC address of desired device to register</string>\r
+ <string name="EnterDeviceName">Please enter desired name for the new device</string>\r
+\r
+\r
</resources>\r
<resources>\r
\r
<!-- Base application theme. -->\r
- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">\r
+ <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">\r
<!-- Customize your theme here. -->\r
<item name="colorPrimary">@color/colorPrimary</item>\r
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>\r