The final version for lede-gui (the phone app for device registration)
authorrtrimana <rtrimana@uci.edu>
Mon, 30 Jul 2018 22:23:57 +0000 (15:23 -0700)
committerrtrimana <rtrimana@uci.edu>
Mon, 30 Jul 2018 22:23:57 +0000 (15:23 -0700)
141 files changed:
others/lede-gui/.gitignore
others/lede-gui/.gradle/3.3/taskArtifacts/fileHashes.bin [deleted file]
others/lede-gui/.gradle/3.3/taskArtifacts/fileSnapshots.bin [deleted file]
others/lede-gui/.gradle/3.3/taskArtifacts/taskArtifacts.bin [deleted file]
others/lede-gui/.gradle/3.3/taskArtifacts/taskArtifacts.lock [deleted file]
others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin [deleted file]
others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock [deleted file]
others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin [deleted file]
others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock [deleted file]
others/lede-gui/.idea/compiler.xml [deleted file]
others/lede-gui/.idea/copyright/profiles_settings.xml [deleted file]
others/lede-gui/.idea/gradle.xml [deleted file]
others/lede-gui/.idea/libraries/animated_vector_drawable_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/appcompat_v7_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/constraint_layout_1_0_2.xml [deleted file]
others/lede-gui/.idea/libraries/constraint_layout_solver_1_0_2.xml [deleted file]
others/lede-gui/.idea/libraries/design_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/espresso_core_2_2_2.xml [deleted file]
others/lede-gui/.idea/libraries/espresso_idling_resource_2_2_2.xml [deleted file]
others/lede-gui/.idea/libraries/exposed_instrumentation_api_publish_0_5.xml [deleted file]
others/lede-gui/.idea/libraries/hamcrest_core_1_3.xml [deleted file]
others/lede-gui/.idea/libraries/hamcrest_integration_1_3.xml [deleted file]
others/lede-gui/.idea/libraries/hamcrest_library_1_3.xml [deleted file]
others/lede-gui/.idea/libraries/javawriter_2_1_1.xml [deleted file]
others/lede-gui/.idea/libraries/javax_annotation_api_1_2.xml [deleted file]
others/lede-gui/.idea/libraries/javax_inject_1.xml [deleted file]
others/lede-gui/.idea/libraries/jsch_0_1_54.xml [deleted file]
others/lede-gui/.idea/libraries/jsr305_2_0_1.xml [deleted file]
others/lede-gui/.idea/libraries/junit_4_12.xml [deleted file]
others/lede-gui/.idea/libraries/recyclerview_v7_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/rules_0_5.xml [deleted file]
others/lede-gui/.idea/libraries/runner_0_5.xml [deleted file]
others/lede-gui/.idea/libraries/support_annotations_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/support_compat_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/support_core_ui_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/support_core_utils_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/support_fragment_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/support_media_compat_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/support_v4_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/support_vector_drawable_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/libraries/transition_26_0_0_alpha1.xml [deleted file]
others/lede-gui/.idea/misc.xml [deleted file]
others/lede-gui/.idea/modules.xml [deleted file]
others/lede-gui/.idea/runConfigurations.xml [deleted file]
others/lede-gui/.idea/workspace.xml [deleted file]
others/lede-gui/User Manual-Documentation/Edit of Vigilia User Manual.pdf [new file with mode: 0644]
others/lede-gui/git.iml [new file with mode: 0644]
others/lede-gui/gradle/wrapper/gradle-wrapper.properties
others/lede-gui/gradlew
others/lede-gui/lede-gui.iml
others/lede-gui/local.properties [deleted file]
others/lede-gui/src/main/AndroidManifest.xml
others/lede-gui/src/main/assets/1)_install_one_device.config [new file with mode: 0644]
others/lede-gui/src/main/assets/10)_delete_address.config [new file with mode: 0644]
others/lede-gui/src/main/assets/11)_delete_device_address.config [new file with mode: 0644]
others/lede-gui/src/main/assets/12)_delete_zigbee_device_address.config [new file with mode: 0644]
others/lede-gui/src/main/assets/13)_delete_host.config [new file with mode: 0644]
others/lede-gui/src/main/assets/2)_install_comm_pattern.config [new file with mode: 0644]
others/lede-gui/src/main/assets/3)_install_two_devices_and_comm_pattern.config [new file with mode: 0644]
others/lede-gui/src/main/assets/4)_install_address.config [new file with mode: 0644]
others/lede-gui/src/main/assets/5)_install_device_address.config [new file with mode: 0644]
others/lede-gui/src/main/assets/6)_install_zigbee_device_address.config [new file with mode: 0644]
others/lede-gui/src/main/assets/7)_install_host.config [new file with mode: 0644]
others/lede-gui/src/main/assets/8)_delete_entity.config [new file with mode: 0644]
others/lede-gui/src/main/assets/9)_delete_comm_pattern.config [new file with mode: 0644]
others/lede-gui/src/main/assets/add_comm.config [deleted file]
others/lede-gui/src/main/assets/add_device.config [deleted file]
others/lede-gui/src/main/assets/add_device_address.config [deleted file]
others/lede-gui/src/main/assets/delete_address.config [new file with mode: 0644]
others/lede-gui/src/main/assets/delete_device_address.config [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/AddDeviceActivity.java
others/lede-gui/src/main/java/com/example/lede2/AllInstallOptions.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/ApplicationWithRelations.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/ApplicationsList.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/ConfigFileIO.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/DatabaseActivity.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/DatabaseObject.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/DatabaseSubtypeObject.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/DatabaseTypeObject.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/DeleteDeviceActivity.java
others/lede-gui/src/main/java/com/example/lede2/DriverTypeSelectActivity.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/DriversAddActivity.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/DriversSelectActivity.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/EnrollDeviceActivity.java [deleted file]
others/lede-gui/src/main/java/com/example/lede2/HomeSecurity.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/InstallAddress.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/InstallCommPattern.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/InstallHost.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/InstallTwoDevicesAndCommPattern.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/InstallZigbeeDeviceAddress.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/Irrigation.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/Lifxtest.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/ListActivity.java
others/lede-gui/src/main/java/com/example/lede2/MainActivity.java
others/lede-gui/src/main/java/com/example/lede2/RegisterDeviceAdding.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/RegisterDeviceLoading.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/RegistrationRouterCheck.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/RelationActivity.java
others/lede-gui/src/main/java/com/example/lede2/SSH.java
others/lede-gui/src/main/java/com/example/lede2/SSH_MySQL.java
others/lede-gui/src/main/java/com/example/lede2/SmartLights.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/Speaker.java [new file with mode: 0644]
others/lede-gui/src/main/java/com/example/lede2/UpdateLocalConfigFiles.java [new file with mode: 0644]
others/lede-gui/src/main/res/layout/activity_add_device.xml
others/lede-gui/src/main/res/layout/activity_config.xml
others/lede-gui/src/main/res/layout/activity_delete_device.xml
others/lede-gui/src/main/res/layout/activity_enroll_device.xml
others/lede-gui/src/main/res/layout/activity_list.xml
others/lede-gui/src/main/res/layout/activity_main.xml
others/lede-gui/src/main/res/layout/activity_relation.xml
others/lede-gui/src/main/res/layout/applications.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/database.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/drivers.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/drivers_add.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/home_security.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/install_address.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/install_comm_pattern.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/install_device_address.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/install_host.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/install_options.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/install_two_devices_and_comm_pattern.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/install_zigbee_device_address.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/irrigation.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/lifxtest.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/register_device_adding.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/registration_layout.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/smartlights.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/speaker.xml [new file with mode: 0644]
others/lede-gui/src/main/res/layout/update.xml [new file with mode: 0644]
others/lede-gui/src/main/res/mipmap-hdpi/sentinel_icon.png [deleted file]
others/lede-gui/src/main/res/mipmap-mdpi/sentinel_icon.png [deleted file]
others/lede-gui/src/main/res/mipmap-xhdpi/sentinel_icon.png [deleted file]
others/lede-gui/src/main/res/mipmap-xxhdpi/sentinel_icon.png [deleted file]
others/lede-gui/src/main/res/mipmap-xxxhdpi/sentinel_icon.png [deleted file]
others/lede-gui/src/main/res/mipmap-xxxhdpi/vigilia_icon.png [new file with mode: 0644]
others/lede-gui/src/main/res/values/attrs.xml
others/lede-gui/src/main/res/values/colors.xml
others/lede-gui/src/main/res/values/constants.xml
others/lede-gui/src/main/res/values/dimens.xml
others/lede-gui/src/main/res/values/strings.xml
others/lede-gui/src/main/res/values/styles.xml

index 3543521e9fef8e7322940a87c2b45dd0061b0f45..1f57ea9886ec1c389ff4b90dfb5516d6d8d674eb 100644 (file)
@@ -1 +1,21 @@
 /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
diff --git a/others/lede-gui/.gradle/3.3/taskArtifacts/fileHashes.bin b/others/lede-gui/.gradle/3.3/taskArtifacts/fileHashes.bin
deleted file mode 100644 (file)
index 14472c9..0000000
Binary files a/others/lede-gui/.gradle/3.3/taskArtifacts/fileHashes.bin and /dev/null differ
diff --git a/others/lede-gui/.gradle/3.3/taskArtifacts/fileSnapshots.bin b/others/lede-gui/.gradle/3.3/taskArtifacts/fileSnapshots.bin
deleted file mode 100644 (file)
index c27ddb0..0000000
Binary files a/others/lede-gui/.gradle/3.3/taskArtifacts/fileSnapshots.bin and /dev/null differ
diff --git a/others/lede-gui/.gradle/3.3/taskArtifacts/taskArtifacts.bin b/others/lede-gui/.gradle/3.3/taskArtifacts/taskArtifacts.bin
deleted file mode 100644 (file)
index f1a6c2c..0000000
Binary files a/others/lede-gui/.gradle/3.3/taskArtifacts/taskArtifacts.bin and /dev/null differ
diff --git a/others/lede-gui/.gradle/3.3/taskArtifacts/taskArtifacts.lock b/others/lede-gui/.gradle/3.3/taskArtifacts/taskArtifacts.lock
deleted file mode 100644 (file)
index 9c87ff1..0000000
Binary files a/others/lede-gui/.gradle/3.3/taskArtifacts/taskArtifacts.lock and /dev/null differ
diff --git a/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin b/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin
deleted file mode 100644 (file)
index 7034f06..0000000
Binary files a/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.bin and /dev/null differ
diff --git a/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock b/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock
deleted file mode 100644 (file)
index 737c618..0000000
Binary files a/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localClassSetAnalysis/localClassSetAnalysis.lock and /dev/null differ
diff --git a/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin b/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin
deleted file mode 100644 (file)
index fb93f2d..0000000
Binary files a/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.bin and /dev/null differ
diff --git a/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock b/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock
deleted file mode 100644 (file)
index 560430c..0000000
Binary files a/others/lede-gui/.gradle/3.3/tasks/_compileDebugJavaWithJavac/localJarClasspathSnapshot/localJarClasspathSnapshot.lock and /dev/null differ
diff --git a/others/lede-gui/.idea/compiler.xml b/others/lede-gui/.idea/compiler.xml
deleted file mode 100644 (file)
index 96cc43e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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
diff --git a/others/lede-gui/.idea/copyright/profiles_settings.xml b/others/lede-gui/.idea/copyright/profiles_settings.xml
deleted file mode 100644 (file)
index c7d1c5a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<component name="CopyrightManager">\r
-  <settings default="" />\r
-</component>
\ No newline at end of file
diff --git a/others/lede-gui/.idea/gradle.xml b/others/lede-gui/.idea/gradle.xml
deleted file mode 100644 (file)
index 47bd81f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?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
diff --git a/others/lede-gui/.idea/libraries/animated_vector_drawable_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/animated_vector_drawable_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index 37594df..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/appcompat_v7_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/appcompat_v7_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index ff5b26d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/constraint_layout_1_0_2.xml b/others/lede-gui/.idea/libraries/constraint_layout_1_0_2.xml
deleted file mode 100644 (file)
index 83b382d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/constraint_layout_solver_1_0_2.xml b/others/lede-gui/.idea/libraries/constraint_layout_solver_1_0_2.xml
deleted file mode 100644 (file)
index f71d1a6..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/design_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/design_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index ac70c61..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/espresso_core_2_2_2.xml b/others/lede-gui/.idea/libraries/espresso_core_2_2_2.xml
deleted file mode 100644 (file)
index 9113cc7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/espresso_idling_resource_2_2_2.xml b/others/lede-gui/.idea/libraries/espresso_idling_resource_2_2_2.xml
deleted file mode 100644 (file)
index 69cf85a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/exposed_instrumentation_api_publish_0_5.xml b/others/lede-gui/.idea/libraries/exposed_instrumentation_api_publish_0_5.xml
deleted file mode 100644 (file)
index de3e1d7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/hamcrest_core_1_3.xml b/others/lede-gui/.idea/libraries/hamcrest_core_1_3.xml
deleted file mode 100644 (file)
index 157e3f3..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/hamcrest_integration_1_3.xml b/others/lede-gui/.idea/libraries/hamcrest_integration_1_3.xml
deleted file mode 100644 (file)
index 58b2c4b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/hamcrest_library_1_3.xml b/others/lede-gui/.idea/libraries/hamcrest_library_1_3.xml
deleted file mode 100644 (file)
index 676cc63..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/javawriter_2_1_1.xml b/others/lede-gui/.idea/libraries/javawriter_2_1_1.xml
deleted file mode 100644 (file)
index a66fefb..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/javax_annotation_api_1_2.xml b/others/lede-gui/.idea/libraries/javax_annotation_api_1_2.xml
deleted file mode 100644 (file)
index 811e73f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/javax_inject_1.xml b/others/lede-gui/.idea/libraries/javax_inject_1.xml
deleted file mode 100644 (file)
index 0d1d5fc..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/jsch_0_1_54.xml b/others/lede-gui/.idea/libraries/jsch_0_1_54.xml
deleted file mode 100644 (file)
index 803717f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/jsr305_2_0_1.xml b/others/lede-gui/.idea/libraries/jsr305_2_0_1.xml
deleted file mode 100644 (file)
index cdf9878..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/junit_4_12.xml b/others/lede-gui/.idea/libraries/junit_4_12.xml
deleted file mode 100644 (file)
index 305df30..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/recyclerview_v7_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/recyclerview_v7_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index fb50ff2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/rules_0_5.xml b/others/lede-gui/.idea/libraries/rules_0_5.xml
deleted file mode 100644 (file)
index 91e07ed..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/runner_0_5.xml b/others/lede-gui/.idea/libraries/runner_0_5.xml
deleted file mode 100644 (file)
index 4c2562f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/support_annotations_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/support_annotations_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index 44566c5..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/support_compat_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/support_compat_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index 5507d57..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/support_core_ui_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/support_core_ui_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index 5ad1369..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/support_core_utils_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/support_core_utils_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index 07958bb..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/support_fragment_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/support_fragment_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index 520ccd2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/support_media_compat_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/support_media_compat_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index cc2ac96..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/support_v4_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/support_v4_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index 669a0bd..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/support_vector_drawable_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/support_vector_drawable_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index dfe14f4..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/libraries/transition_26_0_0_alpha1.xml b/others/lede-gui/.idea/libraries/transition_26_0_0_alpha1.xml
deleted file mode 100644 (file)
index 49ecf0a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<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
diff --git a/others/lede-gui/.idea/misc.xml b/others/lede-gui/.idea/misc.xml
deleted file mode 100644 (file)
index b0a270f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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
diff --git a/others/lede-gui/.idea/modules.xml b/others/lede-gui/.idea/modules.xml
deleted file mode 100644 (file)
index e45091c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?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
diff --git a/others/lede-gui/.idea/runConfigurations.xml b/others/lede-gui/.idea/runConfigurations.xml
deleted file mode 100644 (file)
index 7f68460..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?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
diff --git a/others/lede-gui/.idea/workspace.xml b/others/lede-gui/.idea/workspace.xml
deleted file mode 100644 (file)
index e8ea71d..0000000
+++ /dev/null
@@ -1,2412 +0,0 @@
-<?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="&#9;FILE&#9;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="&lt;template&gt;" 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="&lt;template&gt;" 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="&lt;template&gt;" 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
diff --git a/others/lede-gui/User Manual-Documentation/Edit of Vigilia User Manual.pdf b/others/lede-gui/User Manual-Documentation/Edit of Vigilia User Manual.pdf
new file mode 100644 (file)
index 0000000..7df2f7f
Binary files /dev/null and b/others/lede-gui/User Manual-Documentation/Edit of Vigilia User Manual.pdf differ
diff --git a/others/lede-gui/git.iml b/others/lede-gui/git.iml
new file mode 100644 (file)
index 0000000..cfb181f
--- /dev/null
@@ -0,0 +1,139 @@
+<?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
index b483d860e8a0013ea5b98f9a7fc8f80568ccbd76..9ff7dc9354b86fc0a936789ba2aff329a6df9911 100644 (file)
@@ -1,6 +1,6 @@
-#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
index 9d82f78915133e1c35a6ea51252590fb38efac2f..e8349733f49cfefca8fc323e81ba3fc68a263248 100644 (file)
-#!/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
index 6e6cf73b076244ae0b80eafc7fb6667434dcc8f5..3c0226715b527f887e1c62d64324a31c167474cd 100644 (file)
-<?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
diff --git a/others/lede-gui/local.properties b/others/lede-gui/local.properties
deleted file mode 100644 (file)
index 35ebc26..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-## 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
index c51ae23dc430e6820e91c996457b2350e67e4350..0dd771e41714372e230a09936ca19c67db6e855b 100644 (file)
@@ -9,7 +9,7 @@
 \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
@@ -32,7 +57,7 @@
         <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
diff --git a/others/lede-gui/src/main/assets/1)_install_one_device.config b/others/lede-gui/src/main/assets/1)_install_one_device.config
new file mode 100644 (file)
index 0000000..1113e2a
--- /dev/null
@@ -0,0 +1,15 @@
+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
diff --git a/others/lede-gui/src/main/assets/10)_delete_address.config b/others/lede-gui/src/main/assets/10)_delete_address.config
new file mode 100644 (file)
index 0000000..99ab2cf
--- /dev/null
@@ -0,0 +1 @@
+10) delete address
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/11)_delete_device_address.config b/others/lede-gui/src/main/assets/11)_delete_device_address.config
new file mode 100644 (file)
index 0000000..2f669bf
--- /dev/null
@@ -0,0 +1 @@
+11) delete device address
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/12)_delete_zigbee_device_address.config b/others/lede-gui/src/main/assets/12)_delete_zigbee_device_address.config
new file mode 100644 (file)
index 0000000..82a0089
--- /dev/null
@@ -0,0 +1 @@
+12) delete zigbee device addressS
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/13)_delete_host.config b/others/lede-gui/src/main/assets/13)_delete_host.config
new file mode 100644 (file)
index 0000000..d469c51
--- /dev/null
@@ -0,0 +1 @@
+13) delete host
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/2)_install_comm_pattern.config b/others/lede-gui/src/main/assets/2)_install_comm_pattern.config
new file mode 100644 (file)
index 0000000..af934cf
--- /dev/null
@@ -0,0 +1,3 @@
+CM4 AmcrestCameraCM4\r
+LB4 LifxLightBulbLB4\r
+WRITE
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/3)_install_two_devices_and_comm_pattern.config b/others/lede-gui/src/main/assets/3)_install_two_devices_and_comm_pattern.config
new file mode 100644 (file)
index 0000000..c418910
--- /dev/null
@@ -0,0 +1 @@
+3)install_two_devices_and_comm_pattern
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/4)_install_address.config b/others/lede-gui/src/main/assets/4)_install_address.config
new file mode 100644 (file)
index 0000000..4c13b6e
--- /dev/null
@@ -0,0 +1 @@
+4)install_address.config\r
diff --git a/others/lede-gui/src/main/assets/5)_install_device_address.config b/others/lede-gui/src/main/assets/5)_install_device_address.config
new file mode 100644 (file)
index 0000000..ed02bb9
--- /dev/null
@@ -0,0 +1,8 @@
+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
diff --git a/others/lede-gui/src/main/assets/6)_install_zigbee_device_address.config b/others/lede-gui/src/main/assets/6)_install_zigbee_device_address.config
new file mode 100644 (file)
index 0000000..5404a38
--- /dev/null
@@ -0,0 +1 @@
+6)_install zigbee device address
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/7)_install_host.config b/others/lede-gui/src/main/assets/7)_install_host.config
new file mode 100644 (file)
index 0000000..7862996
--- /dev/null
@@ -0,0 +1 @@
+7)install  host config
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/8)_delete_entity.config b/others/lede-gui/src/main/assets/8)_delete_entity.config
new file mode 100644 (file)
index 0000000..5b881c8
--- /dev/null
@@ -0,0 +1 @@
+8) delete entity
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/9)_delete_comm_pattern.config b/others/lede-gui/src/main/assets/9)_delete_comm_pattern.config
new file mode 100644 (file)
index 0000000..57c56e1
--- /dev/null
@@ -0,0 +1 @@
+9) delete comm pattern
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/add_comm.config b/others/lede-gui/src/main/assets/add_comm.config
deleted file mode 100644 (file)
index 0a8a2ac..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-CM4 AmcrestCameraCM4
-LB4 LifxLightBulbLB4
-WRITE
\ No newline at end of file
diff --git a/others/lede-gui/src/main/assets/add_device.config b/others/lede-gui/src/main/assets/add_device.config
deleted file mode 100644 (file)
index 4ecf673..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-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
diff --git a/others/lede-gui/src/main/assets/add_device_address.config b/others/lede-gui/src/main/assets/add_device_address.config
deleted file mode 100644 (file)
index 9867d01..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-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
diff --git a/others/lede-gui/src/main/assets/delete_address.config b/others/lede-gui/src/main/assets/delete_address.config
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/others/lede-gui/src/main/assets/delete_device_address.config b/others/lede-gui/src/main/assets/delete_device_address.config
new file mode 100644 (file)
index 0000000..4ab20a5
--- /dev/null
@@ -0,0 +1 @@
+//insert sample address input
\ No newline at end of file
index fc4a0751bdb85383cac711aeecf166b4a228f6c9..8a83c4eb11fd712fbf60a97d660a6498939e881d 100644 (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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/AllInstallOptions.java b/others/lede-gui/src/main/java/com/example/lede2/AllInstallOptions.java
new file mode 100644 (file)
index 0000000..2248620
--- /dev/null
@@ -0,0 +1,59 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/ApplicationWithRelations.java b/others/lede-gui/src/main/java/com/example/lede2/ApplicationWithRelations.java
new file mode 100644 (file)
index 0000000..30c533c
--- /dev/null
@@ -0,0 +1,443 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/ApplicationsList.java b/others/lede-gui/src/main/java/com/example/lede2/ApplicationsList.java
new file mode 100644 (file)
index 0000000..26036b6
--- /dev/null
@@ -0,0 +1,80 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/ConfigFileIO.java b/others/lede-gui/src/main/java/com/example/lede2/ConfigFileIO.java
new file mode 100644 (file)
index 0000000..716eefe
--- /dev/null
@@ -0,0 +1,245 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/DatabaseActivity.java b/others/lede-gui/src/main/java/com/example/lede2/DatabaseActivity.java
new file mode 100644 (file)
index 0000000..d5a3161
--- /dev/null
@@ -0,0 +1,55 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/DatabaseObject.java b/others/lede-gui/src/main/java/com/example/lede2/DatabaseObject.java
new file mode 100644 (file)
index 0000000..b49de7b
--- /dev/null
@@ -0,0 +1,44 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/DatabaseSubtypeObject.java b/others/lede-gui/src/main/java/com/example/lede2/DatabaseSubtypeObject.java
new file mode 100644 (file)
index 0000000..c53b344
--- /dev/null
@@ -0,0 +1,154 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/DatabaseTypeObject.java b/others/lede-gui/src/main/java/com/example/lede2/DatabaseTypeObject.java
new file mode 100644 (file)
index 0000000..3c1fcd3
--- /dev/null
@@ -0,0 +1,54 @@
+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
index 30368058ed602f11d3832190983b41c54e63f2b5..3f4a7961cb14d3223756e219a6e180351dbdcf92 100644 (file)
-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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/DriverTypeSelectActivity.java b/others/lede-gui/src/main/java/com/example/lede2/DriverTypeSelectActivity.java
new file mode 100644 (file)
index 0000000..da74bf9
--- /dev/null
@@ -0,0 +1,8 @@
+package com.example.lede2;\r
+\r
+/**\r
+ * Created by Brian on 5/17/2018.\r
+ */\r
+\r
+public class DriverTypeSelectActivity {\r
+}\r
diff --git a/others/lede-gui/src/main/java/com/example/lede2/DriversAddActivity.java b/others/lede-gui/src/main/java/com/example/lede2/DriversAddActivity.java
new file mode 100644 (file)
index 0000000..e45aff4
--- /dev/null
@@ -0,0 +1,246 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/DriversSelectActivity.java b/others/lede-gui/src/main/java/com/example/lede2/DriversSelectActivity.java
new file mode 100644 (file)
index 0000000..90c091f
--- /dev/null
@@ -0,0 +1,149 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/EnrollDeviceActivity.java b/others/lede-gui/src/main/java/com/example/lede2/EnrollDeviceActivity.java
deleted file mode 100644 (file)
index be1d04a..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/HomeSecurity.java b/others/lede-gui/src/main/java/com/example/lede2/HomeSecurity.java
new file mode 100644 (file)
index 0000000..513d70b
--- /dev/null
@@ -0,0 +1,232 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/InstallAddress.java b/others/lede-gui/src/main/java/com/example/lede2/InstallAddress.java
new file mode 100644 (file)
index 0000000..9943447
--- /dev/null
@@ -0,0 +1,27 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/InstallCommPattern.java b/others/lede-gui/src/main/java/com/example/lede2/InstallCommPattern.java
new file mode 100644 (file)
index 0000000..75a910c
--- /dev/null
@@ -0,0 +1,27 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/InstallHost.java b/others/lede-gui/src/main/java/com/example/lede2/InstallHost.java
new file mode 100644 (file)
index 0000000..6e90d31
--- /dev/null
@@ -0,0 +1,27 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/InstallTwoDevicesAndCommPattern.java b/others/lede-gui/src/main/java/com/example/lede2/InstallTwoDevicesAndCommPattern.java
new file mode 100644 (file)
index 0000000..ed6ce63
--- /dev/null
@@ -0,0 +1,27 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/InstallZigbeeDeviceAddress.java b/others/lede-gui/src/main/java/com/example/lede2/InstallZigbeeDeviceAddress.java
new file mode 100644 (file)
index 0000000..60e1ccf
--- /dev/null
@@ -0,0 +1,27 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/Irrigation.java b/others/lede-gui/src/main/java/com/example/lede2/Irrigation.java
new file mode 100644 (file)
index 0000000..01336dd
--- /dev/null
@@ -0,0 +1,232 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/Lifxtest.java b/others/lede-gui/src/main/java/com/example/lede2/Lifxtest.java
new file mode 100644 (file)
index 0000000..379ed80
--- /dev/null
@@ -0,0 +1,240 @@
+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
index 5de1fd272b580f346e28e8dcac9a58148ab90317..b6faf9f96322b711a97d29b4ec8b3ec9e53dd9df 100644 (file)
@@ -1,6 +1,9 @@
 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
@@ -11,57 +14,111 @@ import android.widget.ArrayAdapter;
 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
@@ -69,10 +126,13 @@ public class ListActivity extends AppCompatActivity implements View.OnClickListe
             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
@@ -89,19 +149,19 @@ public class ListActivity extends AppCompatActivity implements View.OnClickListe
             //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
index d5dc4a5024b663e744b3331aa0de32a30183cc62..e1fe9512226bf6c8399771e5fdc07ce5ff6e2149 100644 (file)
@@ -1,5 +1,6 @@
 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
@@ -15,13 +16,15 @@ import android.widget.Toast;
 \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
@@ -33,61 +36,117 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
     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
@@ -95,35 +154,60 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         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
@@ -140,4 +224,4 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
             ssid.setText(ConfigActivity.RSSID);\r
         }\r
     }\r
-}\r
+}
\ No newline at end of file
diff --git a/others/lede-gui/src/main/java/com/example/lede2/RegisterDeviceAdding.java b/others/lede-gui/src/main/java/com/example/lede2/RegisterDeviceAdding.java
new file mode 100644 (file)
index 0000000..5c773db
--- /dev/null
@@ -0,0 +1,210 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/RegisterDeviceLoading.java b/others/lede-gui/src/main/java/com/example/lede2/RegisterDeviceLoading.java
new file mode 100644 (file)
index 0000000..ffbf078
--- /dev/null
@@ -0,0 +1,186 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/RegistrationRouterCheck.java b/others/lede-gui/src/main/java/com/example/lede2/RegistrationRouterCheck.java
new file mode 100644 (file)
index 0000000..3b53685
--- /dev/null
@@ -0,0 +1,330 @@
+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
index a87b490ce2d59a806d7ad98c3fec5d25ecc759da..201e26ead0394338375de2a1140f3346b1a759e0 100644 (file)
@@ -1,89 +1,89 @@
-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
index 94380535f5c7bc3690d1f904618529a808c3e09e..39ed4c40eb06792f267825758ee0181e83150a5d 100644 (file)
@@ -8,6 +8,7 @@ package com.example.lede2;
 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
@@ -40,16 +41,24 @@ public class SSH extends AsyncTask<String, Void, List<String>> {
        // 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
@@ -80,7 +89,7 @@ public class SSH extends AsyncTask<String, Void, List<String>> {
                }\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
@@ -96,14 +105,14 @@ public class SSH extends AsyncTask<String, Void, List<String>> {
        // 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
@@ -140,7 +149,7 @@ public class SSH extends AsyncTask<String, Void, List<String>> {
        @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
@@ -158,17 +167,25 @@ public class SSH extends AsyncTask<String, Void, List<String>> {
                                        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
@@ -180,9 +197,11 @@ public class SSH extends AsyncTask<String, Void, List<String>> {
                                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
@@ -190,6 +209,10 @@ public class SSH extends AsyncTask<String, Void, List<String>> {
                return null;\r
        }\r
 \r
+       public List<String> getResultLines() {\r
+               return result_lines;\r
+       }\r
+\r
        /*\r
        @Override\r
        protected  onPostExecute(Void param) {\r
index 7702fcbb681292f2416d226203f345b500a8b245..de1c9e29ddad521622fac32387f315680b95eaab 100644 (file)
-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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/SmartLights.java b/others/lede-gui/src/main/java/com/example/lede2/SmartLights.java
new file mode 100644 (file)
index 0000000..623879c
--- /dev/null
@@ -0,0 +1,234 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/Speaker.java b/others/lede-gui/src/main/java/com/example/lede2/Speaker.java
new file mode 100644 (file)
index 0000000..b1349db
--- /dev/null
@@ -0,0 +1,232 @@
+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
diff --git a/others/lede-gui/src/main/java/com/example/lede2/UpdateLocalConfigFiles.java b/others/lede-gui/src/main/java/com/example/lede2/UpdateLocalConfigFiles.java
new file mode 100644 (file)
index 0000000..e079e4e
--- /dev/null
@@ -0,0 +1,141 @@
+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
index 836322ad0efbca1d3f97ed170260f3aec6d25705..dc1fba098ffc7b1f5d2a11d7c0d6426415bc8372 100644 (file)
-<?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
index 4098bc0a4d73676783b1a23b4bb585029413fb38..f5bef598dc605ac7bb4f47490a7b0ed77d589edc 100644 (file)
                 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
index 1b0c3651c2a5ede5e79bcee8e97bb31c0c963374..0d03e7330e6c089f90a96038f56aed3b24970173 100644 (file)
-<?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
index 035f7bc0a5394f77afb7844f6d89fa412567471e..5807d69918caea971d7cf88d899b3efe21b9da7d 100644 (file)
@@ -4,7 +4,7 @@
     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
@@ -26,7 +26,7 @@
                 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
index 5aee6bfca36fe2862c3e1534c78abc2098236722..5d2b52523de6f016bab3ed5b499e2c02681d5d28 100644 (file)
         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
@@ -42,7 +50,8 @@
         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
index 8b270f54931204a5cdeaaa8df4df9ae7c4111659..1e06c2130b0f7108fa874aa8ef7b79c1eaadcd42 100644 (file)
@@ -9,65 +9,65 @@
     <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
index 4067cd839ed4ac8a7d4df55db3a6804d16f29833..f37503b8a925777d9bf532fa1ab8521bd4720a7a 100644 (file)
-<?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
diff --git a/others/lede-gui/src/main/res/layout/applications.xml b/others/lede-gui/src/main/res/layout/applications.xml
new file mode 100644 (file)
index 0000000..f6bb2aa
--- /dev/null
@@ -0,0 +1,83 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/database.xml b/others/lede-gui/src/main/res/layout/database.xml
new file mode 100644 (file)
index 0000000..2076374
--- /dev/null
@@ -0,0 +1,38 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/drivers.xml b/others/lede-gui/src/main/res/layout/drivers.xml
new file mode 100644 (file)
index 0000000..c02de78
--- /dev/null
@@ -0,0 +1,60 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/drivers_add.xml b/others/lede-gui/src/main/res/layout/drivers_add.xml
new file mode 100644 (file)
index 0000000..08af0b3
--- /dev/null
@@ -0,0 +1,140 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/home_security.xml b/others/lede-gui/src/main/res/layout/home_security.xml
new file mode 100644 (file)
index 0000000..630cd97
--- /dev/null
@@ -0,0 +1,124 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/install_address.xml b/others/lede-gui/src/main/res/layout/install_address.xml
new file mode 100644 (file)
index 0000000..efc9b54
--- /dev/null
@@ -0,0 +1,20 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/install_comm_pattern.xml b/others/lede-gui/src/main/res/layout/install_comm_pattern.xml
new file mode 100644 (file)
index 0000000..4ec1a12
--- /dev/null
@@ -0,0 +1,18 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/install_device_address.xml b/others/lede-gui/src/main/res/layout/install_device_address.xml
new file mode 100644 (file)
index 0000000..d58703b
--- /dev/null
@@ -0,0 +1,17 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/install_host.xml b/others/lede-gui/src/main/res/layout/install_host.xml
new file mode 100644 (file)
index 0000000..0a76e8e
--- /dev/null
@@ -0,0 +1,17 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/install_options.xml b/others/lede-gui/src/main/res/layout/install_options.xml
new file mode 100644 (file)
index 0000000..03a3850
--- /dev/null
@@ -0,0 +1,38 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/install_two_devices_and_comm_pattern.xml b/others/lede-gui/src/main/res/layout/install_two_devices_and_comm_pattern.xml
new file mode 100644 (file)
index 0000000..ae72bbe
--- /dev/null
@@ -0,0 +1,18 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/install_zigbee_device_address.xml b/others/lede-gui/src/main/res/layout/install_zigbee_device_address.xml
new file mode 100644 (file)
index 0000000..38be66c
--- /dev/null
@@ -0,0 +1,17 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/irrigation.xml b/others/lede-gui/src/main/res/layout/irrigation.xml
new file mode 100644 (file)
index 0000000..d6261e7
--- /dev/null
@@ -0,0 +1,124 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/lifxtest.xml b/others/lede-gui/src/main/res/layout/lifxtest.xml
new file mode 100644 (file)
index 0000000..1cf17f6
--- /dev/null
@@ -0,0 +1,124 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/register_device_adding.xml b/others/lede-gui/src/main/res/layout/register_device_adding.xml
new file mode 100644 (file)
index 0000000..d538fff
--- /dev/null
@@ -0,0 +1,97 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/registration_layout.xml b/others/lede-gui/src/main/res/layout/registration_layout.xml
new file mode 100644 (file)
index 0000000..bf4c09a
--- /dev/null
@@ -0,0 +1,108 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/smartlights.xml b/others/lede-gui/src/main/res/layout/smartlights.xml
new file mode 100644 (file)
index 0000000..94e13d7
--- /dev/null
@@ -0,0 +1,124 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/speaker.xml b/others/lede-gui/src/main/res/layout/speaker.xml
new file mode 100644 (file)
index 0000000..d257568
--- /dev/null
@@ -0,0 +1,124 @@
+<?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
diff --git a/others/lede-gui/src/main/res/layout/update.xml b/others/lede-gui/src/main/res/layout/update.xml
new file mode 100644 (file)
index 0000000..798f17d
--- /dev/null
@@ -0,0 +1,31 @@
+<?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
diff --git a/others/lede-gui/src/main/res/mipmap-hdpi/sentinel_icon.png b/others/lede-gui/src/main/res/mipmap-hdpi/sentinel_icon.png
deleted file mode 100644 (file)
index 6c65697..0000000
Binary files a/others/lede-gui/src/main/res/mipmap-hdpi/sentinel_icon.png and /dev/null differ
diff --git a/others/lede-gui/src/main/res/mipmap-mdpi/sentinel_icon.png b/others/lede-gui/src/main/res/mipmap-mdpi/sentinel_icon.png
deleted file mode 100644 (file)
index a766bb7..0000000
Binary files a/others/lede-gui/src/main/res/mipmap-mdpi/sentinel_icon.png and /dev/null differ
diff --git a/others/lede-gui/src/main/res/mipmap-xhdpi/sentinel_icon.png b/others/lede-gui/src/main/res/mipmap-xhdpi/sentinel_icon.png
deleted file mode 100644 (file)
index 5f441d7..0000000
Binary files a/others/lede-gui/src/main/res/mipmap-xhdpi/sentinel_icon.png and /dev/null differ
diff --git a/others/lede-gui/src/main/res/mipmap-xxhdpi/sentinel_icon.png b/others/lede-gui/src/main/res/mipmap-xxhdpi/sentinel_icon.png
deleted file mode 100644 (file)
index aa018e7..0000000
Binary files a/others/lede-gui/src/main/res/mipmap-xxhdpi/sentinel_icon.png and /dev/null differ
diff --git a/others/lede-gui/src/main/res/mipmap-xxxhdpi/sentinel_icon.png b/others/lede-gui/src/main/res/mipmap-xxxhdpi/sentinel_icon.png
deleted file mode 100644 (file)
index 632591e..0000000
Binary files a/others/lede-gui/src/main/res/mipmap-xxxhdpi/sentinel_icon.png and /dev/null differ
diff --git a/others/lede-gui/src/main/res/mipmap-xxxhdpi/vigilia_icon.png b/others/lede-gui/src/main/res/mipmap-xxxhdpi/vigilia_icon.png
new file mode 100644 (file)
index 0000000..632591e
Binary files /dev/null and b/others/lede-gui/src/main/res/mipmap-xxxhdpi/vigilia_icon.png differ
index 7ce840eb60032b49e97e6a7569f955b7a4ba9437..0917430c881d056fd0fa99c90cf22b3acc7eb6ce 100644 (file)
@@ -1,12 +1,12 @@
-<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
index db610efa5347434cbaa1af64244bf6159688250c..106edb342f76f797ed37b97aa0c6b9a4259c0a3c 100644 (file)
@@ -8,5 +8,5 @@
     <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
index 92be494cb3310a6b243f7fc9dcbd5ac21b657f28..5940486481446e17a748c2544dd7fcfcc176aeec 100644 (file)
@@ -1,24 +1,39 @@
-<?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
index 59a0b0c4f553276e4bbeb064bd1bd81220ae9115..05eb7134fb6657aff4a660172a8ea3d5b099fa90 100644 (file)
@@ -1,3 +1,4 @@
-<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
index ce80db9239c756f652184f551836948142016606..1758eed7de41e8cb0bbfd626fba49598cc10d698 100644 (file)
     <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
index a8421fe301507599034884027a4426cbb8db7fd1..09c4b090b43867c3b7bd9597faf45fbf5800a220 100644 (file)
@@ -1,7 +1,7 @@
 <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