From b305095ab3e15e6676e7f4dfdbab5c7619a8cfbe Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Fri, 25 Jul 2014 13:42:36 +0200 Subject: [PATCH] Initial commit --- .gitignore | 5 + .idea/.name | 1 + .idea/compiler.xml | 23 + .idea/copyright/profiles_settings.xml | 3 + .idea/encodings.xml | 5 + .idea/gradle.xml | 19 + .idea/libraries/GraphView_3_1_2.xml | 11 + .idea/libraries/support_v4_19_1_0.xml | 11 + .idea/misc.xml | 10 + .idea/modules.xml | 10 + .idea/scopes/scope_settings.xml | 5 + .idea/vcs.xml | 7 + UeControl.iml | 19 + app/.gitignore | 1 + app/LICENSE.txt | 202 ++++++ app/NOTICE.txt | 4 + app/app.iml | 68 ++ app/build.gradle | 27 + app/gpl.txt | 674 ++++++++++++++++++ app/lgpl.txt | 165 +++++ app/libs/GraphView-3.1.2.jar | Bin 0 -> 32863 bytes app/libs/GraphView-master.zip | Bin 0 -> 179983 bytes app/proguard-rules.pro | 17 + app/src/main/AndroidManifest.xml | 32 + .../ericsson/uecontrol/core/UeBehaviour.java | 103 +++ .../uecontrol/core/UeControlExecutor.java | 106 +++ .../core/behaviour/UeBehaviourDownload.java | 34 + .../core/behaviour/UeBehaviourSleep.java | 46 ++ .../core/behaviour/UeBehaviourSurfing.java | 65 ++ .../core/behaviour/UeBehaviourUpload.java | 34 + .../core/util/ThroughputCalculator.java | 50 ++ .../ericsson/uecontrol/gui/EditActivity.java | 87 +++ .../ericsson/uecontrol/gui/MainActivity.java | 147 ++++ .../uecontrol/gui/SettingsActivity.java | 31 + .../gui/fragments/BehaviourListFragment.java | 104 +++ .../fragments/ConfigureBehaviourDialog.java | 45 ++ .../fragments/NavigationDrawerFragment.java | 284 ++++++++ .../gui/fragments/SelectBehaviourDialog.java | 64 ++ .../gui/fragments/StatusFragment.java | 82 +++ .../gui/util/BehaviourListAdapter.java | 82 +++ .../uecontrol/gui/util/Configurator.java | 68 ++ .../uecontrol/gui/util/DynamicListView.java | 620 ++++++++++++++++ .../gui/util/StableArrayAdapter.java | 73 ++ app/src/main/res/drawable-hdpi/draggable.png | Bin 0 -> 690 bytes .../res/drawable-hdpi/drawer_shadow.9.png | Bin 0 -> 161 bytes app/src/main/res/drawable-hdpi/ic_drawer.png | Bin 0 -> 2829 bytes .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes .../res/drawable-mdpi/drawer_shadow.9.png | Bin 0 -> 142 bytes app/src/main/res/drawable-mdpi/ic_drawer.png | Bin 0 -> 2820 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes .../res/drawable-xhdpi/drawer_shadow.9.png | Bin 0 -> 174 bytes app/src/main/res/drawable-xhdpi/ic_drawer.png | Bin 0 -> 2836 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes .../res/drawable-xxhdpi/drawer_shadow.9.png | Bin 0 -> 208 bytes .../main/res/drawable-xxhdpi/ic_drawer.png | Bin 0 -> 202 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 19388 bytes app/src/main/res/layout/activity_edit.xml | 16 + app/src/main/res/layout/activity_main.xml | 44 ++ .../main/res/layout/behaviour_list_item.xml | 68 ++ .../main/res/layout/fragment_item_list.xml | 19 + .../res/layout/fragment_navigation_drawer.xml | 9 + app/src/main/res/layout/fragment_status.xml | 62 ++ app/src/main/res/menu/edit.xml | 9 + app/src/main/res/menu/global.xml | 6 + app/src/main/res/menu/main.xml | 25 + app/src/main/res/values-w820dp/dimens.xml | 6 + app/src/main/res/values/arrays.xml | 8 + app/src/main/res/values/dimens.xml | 9 + app/src/main/res/values/refs.xml | 12 + app/src/main/res/values/strings.xml | 25 + app/src/main/res/values/styles.xml | 8 + app/src/main/res/xml/preferences.xml | 24 + build.gradle | 19 + gradle.properties | 18 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 49896 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 164 +++++ gradlew.bat | 90 +++ settings.gradle | 1 + 79 files changed, 4092 insertions(+) create mode 100755 .gitignore create mode 100755 .idea/.name create mode 100755 .idea/compiler.xml create mode 100755 .idea/copyright/profiles_settings.xml create mode 100755 .idea/encodings.xml create mode 100755 .idea/gradle.xml create mode 100755 .idea/libraries/GraphView_3_1_2.xml create mode 100755 .idea/libraries/support_v4_19_1_0.xml create mode 100755 .idea/misc.xml create mode 100755 .idea/modules.xml create mode 100755 .idea/scopes/scope_settings.xml create mode 100755 .idea/vcs.xml create mode 100755 UeControl.iml create mode 100755 app/.gitignore create mode 100755 app/LICENSE.txt create mode 100755 app/NOTICE.txt create mode 100755 app/app.iml create mode 100755 app/build.gradle create mode 100755 app/gpl.txt create mode 100755 app/lgpl.txt create mode 100644 app/libs/GraphView-3.1.2.jar create mode 100644 app/libs/GraphView-master.zip create mode 100755 app/proguard-rules.pro create mode 100755 app/src/main/AndroidManifest.xml create mode 100755 app/src/main/java/com/ericsson/uecontrol/core/UeBehaviour.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourDownload.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSleep.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSurfing.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourUpload.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/core/util/ThroughputCalculator.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/EditActivity.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/MainActivity.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/SettingsActivity.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/fragments/BehaviourListFragment.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/fragments/ConfigureBehaviourDialog.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/fragments/NavigationDrawerFragment.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/fragments/SelectBehaviourDialog.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/fragments/StatusFragment.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/util/BehaviourListAdapter.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/util/Configurator.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/util/DynamicListView.java create mode 100755 app/src/main/java/com/ericsson/uecontrol/gui/util/StableArrayAdapter.java create mode 100755 app/src/main/res/drawable-hdpi/draggable.png create mode 100755 app/src/main/res/drawable-hdpi/drawer_shadow.9.png create mode 100755 app/src/main/res/drawable-hdpi/ic_drawer.png create mode 100755 app/src/main/res/drawable-hdpi/ic_launcher.png create mode 100755 app/src/main/res/drawable-mdpi/drawer_shadow.9.png create mode 100755 app/src/main/res/drawable-mdpi/ic_drawer.png create mode 100755 app/src/main/res/drawable-mdpi/ic_launcher.png create mode 100755 app/src/main/res/drawable-xhdpi/drawer_shadow.9.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_drawer.png create mode 100755 app/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100755 app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_drawer.png create mode 100755 app/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100755 app/src/main/res/layout/activity_edit.xml create mode 100755 app/src/main/res/layout/activity_main.xml create mode 100755 app/src/main/res/layout/behaviour_list_item.xml create mode 100755 app/src/main/res/layout/fragment_item_list.xml create mode 100755 app/src/main/res/layout/fragment_navigation_drawer.xml create mode 100755 app/src/main/res/layout/fragment_status.xml create mode 100755 app/src/main/res/menu/edit.xml create mode 100755 app/src/main/res/menu/global.xml create mode 100755 app/src/main/res/menu/main.xml create mode 100755 app/src/main/res/values-w820dp/dimens.xml create mode 100755 app/src/main/res/values/arrays.xml create mode 100755 app/src/main/res/values/dimens.xml create mode 100755 app/src/main/res/values/refs.xml create mode 100755 app/src/main/res/values/strings.xml create mode 100755 app/src/main/res/values/styles.xml create mode 100755 app/src/main/res/xml/preferences.xml create mode 100755 build.gradle create mode 100755 gradle.properties create mode 100755 gradle/wrapper/gradle-wrapper.jar create mode 100755 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100755 gradlew.bat create mode 100755 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..0f885ac --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.gradle +/local.properties +/.idea/workspace.xml +.DS_Store +/build diff --git a/.idea/.name b/.idea/.name new file mode 100755 index 0000000..c8e4ba3 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +UeControl \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100755 index 0000000..217af47 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100755 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100755 index 0000000..e206d70 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100755 index 0000000..61b8d3b --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + diff --git a/.idea/libraries/GraphView_3_1_2.xml b/.idea/libraries/GraphView_3_1_2.xml new file mode 100755 index 0000000..78349eb --- /dev/null +++ b/.idea/libraries/GraphView_3_1_2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/support_v4_19_1_0.xml b/.idea/libraries/support_v4_19_1_0.xml new file mode 100755 index 0000000..3f6ff2d --- /dev/null +++ b/.idea/libraries/support_v4_19_1_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100755 index 0000000..b153e48 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100755 index 0000000..e6767f1 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100755 index 0000000..922003b --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100755 index 0000000..c80f219 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/UeControl.iml b/UeControl.iml new file mode 100755 index 0000000..135c0f9 --- /dev/null +++ b/UeControl.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/.gitignore b/app/.gitignore new file mode 100755 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/LICENSE.txt b/app/LICENSE.txt new file mode 100755 index 0000000..2a71cf4 --- /dev/null +++ b/app/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2013 47 Degrees + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/app/NOTICE.txt b/app/NOTICE.txt new file mode 100755 index 0000000..57eed52 --- /dev/null +++ b/app/NOTICE.txt @@ -0,0 +1,4 @@ +This software contains code derived from Jonas Gehring (http://android-graphview.org/). +This software contains code derived from The Android Open Source Project. + +Including various modifications by Ziver Koc. \ No newline at end of file diff --git a/app/app.iml b/app/app.iml new file mode 100755 index 0000000..0844e47 --- /dev/null +++ b/app/app.iml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/build.gradle b/app/build.gradle new file mode 100755 index 0000000..1cd81a5 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,27 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 19 + buildToolsVersion '19.1.0' + + defaultConfig { + applicationId "com.ericsson.uecontrol" + minSdkVersion 19 + targetSdkVersion 19 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + runProguard false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + // You must install or update the Support Repository through the SDK manager to use this dependency. + compile 'com.android.support:support-v4:19.1.+' + compile files('libs/GraphView-3.1.2.jar') +} \ No newline at end of file diff --git a/app/gpl.txt b/app/gpl.txt new file mode 100755 index 0000000..20d40b6 --- /dev/null +++ b/app/gpl.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/app/lgpl.txt b/app/lgpl.txt new file mode 100755 index 0000000..02bbb60 --- /dev/null +++ b/app/lgpl.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/app/libs/GraphView-3.1.2.jar b/app/libs/GraphView-3.1.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..978e47f9a7faeecc0bbbfcff9b763056f397b737 GIT binary patch literal 32863 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�Rl#Q%+Sa)`T~XdGfA{TjqYY#Q!Yv& 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 literal 0 HcmV?d00001 diff --git a/app/libs/GraphView-master.zip b/app/libs/GraphView-master.zip new file mode 100644 index 0000000000000000000000000000000000000000..286bdcb97419fc27d0130966ae250a4bab2561b1 GIT binary patch literal 179983 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 literal 0 HcmV?d00001 diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100755 index 0000000..f5037b6 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Program Files (x86)\Android Studio\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100755 index 0000000..d8c2dd1 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/ericsson/uecontrol/core/UeBehaviour.java b/app/src/main/java/com/ericsson/uecontrol/core/UeBehaviour.java new file mode 100755 index 0000000..538a602 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/core/UeBehaviour.java @@ -0,0 +1,103 @@ +package com.ericsson.uecontrol.core; + +/** + * Base class for Ue behaviours that can be used by the executor + * + * Created by ezivkoc on 2014-07-15. + */ +public abstract class UeBehaviour { + private boolean running; + private BehaviourExecutionListener execListener; + private DataHandledListener datahandledListener; + + /** + * Starts to run the behaviour, this method will block until the execution is done + */ + public synchronized void run(){ + running = true; + + if(execListener != null) execListener.executionStarted(); + execute(); + if(execListener != null) execListener.executionStopped(); + } + + /** + * Will stop the currently running behaviour + */ + public synchronized void terminate(){ + running = false; + } + + /** + * @return if currently running behaviour should be terminated + */ + protected boolean stopExecution(){ + return !running; + } + + /** + * @return true is this behaviour is currently running + */ + public boolean isRunning(){ + return running; + } + + public void setExecutionListener(BehaviourExecutionListener l){ + execListener = l; + } + + protected void setProgress(float progress){ + if(execListener != null) + execListener.progressChanged(progress); + + // TODO: This is a dirty way of updating the throughput, should be changed + if(datahandledListener != null) + datahandledListener.handledIncomingData(0); + } + + public void setDataHandledListener(DataHandledListener listener) { + datahandledListener = listener; + } + + protected void setHandledIncomingData(long size){ + if(datahandledListener != null) + datahandledListener.handledIncomingData(size); + } + protected void setHandledOutgoingData(long size){ + if(datahandledListener != null) + datahandledListener.handledOutgoingData(size); + } + + /** + * Executes the behaviour, will block until behaviour has run to completion. + */ + protected abstract void execute(); + + /** + * @return the short name of the behaviour + */ + public abstract String getName(); + + /** + * @return a longer description of the behaviour + */ + //public abstract String getDescription(); + + /** + * @return a nice String with the current settings + */ + public abstract String toString(); + + + + public static interface BehaviourExecutionListener { + public void executionStarted(); + public void progressChanged(float progress); + public void executionStopped(); + } + + public static interface DataHandledListener { + public void handledIncomingData(long size); + public void handledOutgoingData(long size); + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java b/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java new file mode 100755 index 0000000..aa9a34d --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java @@ -0,0 +1,106 @@ +package com.ericsson.uecontrol.core; + +import android.util.Log; + +import com.ericsson.uecontrol.core.util.ThroughputCalculator; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by ezivkoc on 2014-07-15. + */ +public class UeControlExecutor implements Runnable, UeBehaviour.DataHandledListener { + private static final String TAG = "UeControlExecutor"; + + private List behaviours; + private UeBehaviour currentlyActive; + private boolean terminate; + private Thread thread; + + private ThroughputCalculator downloadSpeed; + private ThroughputCalculator uploadSpeed; + private ThroughputListener throughputListener; + + + public UeControlExecutor(){ + behaviours = new ArrayList(); + downloadSpeed = new ThroughputCalculator(); + uploadSpeed = new ThroughputCalculator(); + } + + public void addBehaviour(UeBehaviour b){ + behaviours.add(b); + b.setDataHandledListener(this); + } + + + public void execute(){ + if(thread == null || !thread.isAlive()) { + terminate = false; + thread = new Thread(this); + thread.start(); + } + } + + public void terminate(){ + terminate = true; + if(currentlyActive != null); + currentlyActive.terminate(); + } + + public boolean isRunning(){ + if(currentlyActive == null) + return false; + return currentlyActive.isRunning(); + } + + public void run(){ + while(!terminate) { + if(behaviours.isEmpty()) { + terminate(); + break; + } + else if (currentlyActive == null) + currentlyActive = behaviours.get(0); + + Log.v(TAG, "Running behaviour: " + currentlyActive.getName()); + currentlyActive.run(); + + int index = behaviours.indexOf(currentlyActive) +1; + if(index < behaviours.size()) + currentlyActive = behaviours.get(index); + else + currentlyActive = null; + } + Log.v(TAG, "Execution completed"); + } + + + @Override + public void handledIncomingData(long size) { + downloadSpeed.setHandledData(size); + if(throughputListener != null && downloadSpeed.isUpdated()) + throughputListener.throughputUpdate(downloadSpeed.getThroughput(), uploadSpeed.getThroughput()); + } + + @Override + public void handledOutgoingData(long size) { + uploadSpeed.setHandledData(size); + if(throughputListener != null && uploadSpeed.isUpdated()) + throughputListener.throughputUpdate(downloadSpeed.getThroughput(), uploadSpeed.getThroughput()); + } + + public void setThroughputListener(ThroughputListener listener){ + throughputListener = listener; + } + + public List getBehaviourList() { + return behaviours; + } + + + public static interface ThroughputListener{ + public void throughputUpdate(double downThroughput, double upThroughput); + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourDownload.java b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourDownload.java new file mode 100755 index 0000000..f6e4293 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourDownload.java @@ -0,0 +1,34 @@ +package com.ericsson.uecontrol.core.behaviour; + +import com.ericsson.uecontrol.core.UeBehaviour; + +/** + * This behaviour simulates streaming data. + * E.g: video, music etc... + * + * Created by ezivkoc on 2014-07-15. + */ +public class UeBehaviourDownload extends UeBehaviour { + private long data_size; + + public UeBehaviourDownload(long byte_amount){ + data_size = byte_amount; + } + + @Override + protected void execute() { + //TODO + } + + + @Override + public String getName() { + return "Download"; + } + + + @Override + public String toString() { + return "Will download "+ data_size/1000 +"kB"; + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSleep.java b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSleep.java new file mode 100755 index 0000000..028bcc9 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSleep.java @@ -0,0 +1,46 @@ +package com.ericsson.uecontrol.core.behaviour; + +import com.ericsson.uecontrol.core.UeBehaviour; +import com.ericsson.uecontrol.gui.util.Configurator.Configurable; + +/** + * This behaviour simulates an idle period for the device. + * + * Created by ezivkoc on 2014-07-15. + */ +public class UeBehaviourSleep extends UeBehaviour{ + private static final int SLEEP_PERIOD = 100; + + @Configurable("Sleep(millisec)") + private int time; + + public UeBehaviourSleep(){ + this(2000); + } + public UeBehaviourSleep(int milliseconds){ + time = milliseconds; + } + + @Override + protected void execute() { + int elapsedTime = 0; + while(elapsedTime < time){ + super.setProgress((float)elapsedTime/time); + if(super.stopExecution()) break; + try{ + Thread.sleep(SLEEP_PERIOD); + }catch(Exception e){e.printStackTrace();}; + elapsedTime += SLEEP_PERIOD; + } + } + + @Override + public String getName() { + return "Sleep"; + } + + @Override + public String toString() { + return "Will sleep for "+(time/1000)+" seconds"; + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSurfing.java b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSurfing.java new file mode 100755 index 0000000..be7d7c0 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSurfing.java @@ -0,0 +1,65 @@ +package com.ericsson.uecontrol.core.behaviour; + +import com.ericsson.uecontrol.core.UeBehaviour; +import com.ericsson.uecontrol.gui.util.Configurator.Configurable; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; + +/** + * This behaviour simulates visiting a website + * + * Created by ezivkoc on 2014-07-15. + */ +public class UeBehaviourSurfing extends UeBehaviour { + + @Configurable("Web Address") + private String strUrl; + + public UeBehaviourSurfing(){ + this("http://google.com"); + } + public UeBehaviourSurfing(String url){ + strUrl = url; + } + + @Override + protected void execute() { + try { + URL url = new URL(strUrl); + if(url == null) return; + + byte[] data = new byte[100]; + URLConnection connection = url.openConnection(); + connection.setUseCaches(false); + connection.connect(); + InputStream in = connection.getInputStream(); + + long total = in.available(); + long progress = 0; + long read = 0; + + while((read = in.read(data)) != -1 && !stopExecution()){ + progress += read; + super.setProgress((float)progress/total); + super.setHandledIncomingData(read); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + + @Override + public String getName() { + return "Surfing"; + } + + + @Override + public String toString() { + return "Will visit "+ strUrl; + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourUpload.java b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourUpload.java new file mode 100755 index 0000000..318f578 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourUpload.java @@ -0,0 +1,34 @@ +package com.ericsson.uecontrol.core.behaviour; + +import com.ericsson.uecontrol.core.UeBehaviour; + +/** + * This behaviour simulates streaming data. + * E.g: video, music etc... + * + * Created by ezivkoc on 2014-07-15. + */ +public class UeBehaviourUpload extends UeBehaviour { + private long data_size; + + public UeBehaviourUpload(long byte_amount){ + data_size = byte_amount; + } + + @Override + protected void execute() { + //TODO + } + + + @Override + public String getName() { + return "Upload"; + } + + + @Override + public String toString() { + return "Will Upload "+ data_size/1000 +"kB"; + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/core/util/ThroughputCalculator.java b/app/src/main/java/com/ericsson/uecontrol/core/util/ThroughputCalculator.java new file mode 100755 index 0000000..6ee2242 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/core/util/ThroughputCalculator.java @@ -0,0 +1,50 @@ +package com.ericsson.uecontrol.core.util; + +/** + * Created by ezivkoc on 2014-07-22. + */ +public class ThroughputCalculator { + public static final int UPDATES_PER_SEC = 2; + public static final double NANOSEC_PER_SECOND = 1000000000.0; + + private boolean updated; + private double throughput; + private long previousTimeStamp; + private long data_amount; + + + public void setHandledData(long bytes){ + long currentTimeStamp = System.nanoTime(); + data_amount += bytes; + if(currentTimeStamp - (NANOSEC_PER_SECOND/UPDATES_PER_SEC) > previousTimeStamp) { + throughput = data_amount / ((currentTimeStamp - previousTimeStamp) / (NANOSEC_PER_SECOND/UPDATES_PER_SEC)); + previousTimeStamp = currentTimeStamp; + data_amount = 0; + updated = true; + } + } + + public double getThroughput(){ + setHandledData(0); // Update throughput + updated = false; + return throughput; + } + + public boolean isUpdated(){ + return updated; + } + + + private static final String[] DATA_SIZE = new String[]{"b/s", "kbit/s", "Mbit/s", "Gbit/s"}; + public static String getThroughputString(double bits){ + int index = 0; + double value = bits; + + for(; value > 1024 && index < DATA_SIZE.length ;index++) { + value /= 1024; + } + + value = (int)(value*10) / 10.0; + return value+" "+DATA_SIZE[index]; + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/EditActivity.java b/app/src/main/java/com/ericsson/uecontrol/gui/EditActivity.java new file mode 100755 index 0000000..8aee120 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/EditActivity.java @@ -0,0 +1,87 @@ +package com.ericsson.uecontrol.gui; + +import android.app.ListActivity; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ListView; + +import com.ericsson.uecontrol.R; +import com.ericsson.uecontrol.core.UeBehaviour; +import com.ericsson.uecontrol.core.UeControlExecutor; +import com.ericsson.uecontrol.gui.fragments.SelectBehaviourDialog; +import com.ericsson.uecontrol.gui.util.BehaviourListAdapter; +import com.ericsson.uecontrol.gui.util.DynamicListView; + +import java.util.ArrayList; +import java.util.List; + +public class EditActivity extends ListActivity implements View.OnClickListener { + private UeControlExecutor executor; + private BehaviourListAdapter adapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_edit); + + final List list; + if(getIntent().hasExtra("executor")) { + int executorIndex = getIntent().getExtras().getInt("executor_index"); + executor = MainActivity.getExecutor(executorIndex); + + list = executor.getBehaviourList(); + } + else + list = new ArrayList(); + + adapter = new BehaviourListAdapter(this, list); + adapter.setEditable(true); + DynamicListView listView = (DynamicListView) findViewById(android.R.id.list); + listView.setAdapter(adapter); + listView.setActionListener(adapter); + listView.setOnClickListener(this); + listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.edit, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_add) { + SelectBehaviourDialog selector = new SelectBehaviourDialog(); + selector.setSelectionCallback(new SelectBehaviourDialog.BehaviourSelectionCallback() { + public void behaviourSelected(String name, Class objClass) { + try { + UeBehaviour obj = objClass.newInstance(); + executor.addBehaviour(obj); + adapter.generateIds(); + adapter.notifyDataSetChanged(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + selector.show(getFragmentManager(), "behaviour_selector"); + return true; + } + return super.onOptionsItemSelected(item); + } + + + @Override + public void onClick(View view) { + + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/MainActivity.java b/app/src/main/java/com/ericsson/uecontrol/gui/MainActivity.java new file mode 100755 index 0000000..0278ed9 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/MainActivity.java @@ -0,0 +1,147 @@ +package com.ericsson.uecontrol.gui; + +import android.app.ActionBar; +import android.app.FragmentManager; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; +import android.support.v4.widget.DrawerLayout; +import android.view.Menu; +import android.view.MenuItem; + +import com.ericsson.uecontrol.R; +import com.ericsson.uecontrol.core.UeControlExecutor; +import com.ericsson.uecontrol.core.behaviour.UeBehaviourSleep; +import com.ericsson.uecontrol.core.behaviour.UeBehaviourSurfing; +import com.ericsson.uecontrol.gui.fragments.BehaviourListFragment; +import com.ericsson.uecontrol.gui.fragments.NavigationDrawerFragment; +import com.ericsson.uecontrol.gui.fragments.StatusFragment; + +import java.util.ArrayList; + + +public class MainActivity extends FragmentActivity + implements NavigationDrawerFragment.NavigationDrawerCallbacks { + + /** + * Fragment managing the behaviors, interactions and presentation of the navigation drawer. + */ + private NavigationDrawerFragment navigationDrawerFragment; + private StatusFragment statusFragment; + + /** + * Used to store the last screen title. For use in {@link #restoreActionBar()}. + */ + private CharSequence title; + private int currentExecutor; + + private static ArrayList executors; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + navigationDrawerFragment = (NavigationDrawerFragment) + getFragmentManager().findFragmentById(R.id.navigation_drawer); + statusFragment = (StatusFragment) + getFragmentManager().findFragmentById(R.id.status_fragment); + title = getTitle(); + + // Set up the drawer. + navigationDrawerFragment.setUp( + R.id.navigation_drawer, + (DrawerLayout) findViewById(R.id.drawer_layout)); + + executors = new ArrayList(); + currentExecutor = 0; + + UeControlExecutor exec = new UeControlExecutor(); + exec.addBehaviour(new UeBehaviourSleep(1000)); + exec.addBehaviour(new UeBehaviourSurfing("http://google.com")); + exec.addBehaviour(new UeBehaviourSleep(4000)); + exec.setThroughputListener(statusFragment.getThroughputListener()); + executors.add(exec); + } + + @Override + public void onNavigationDrawerItemSelected(int position) { + // update the main content by replacing fragments + FragmentManager fragmentManager = getFragmentManager(); + fragmentManager.beginTransaction() + .replace(R.id.container, BehaviourListFragment.newInstance(position)).commit(); + } + + public void onSectionAttached(int number) { + currentExecutor = number; + switch (number) { + case 1: + title = getString(R.string.title_section1); + break; + case 2: + title = getString(R.string.title_section2); + break; + case 3: + title = getString(R.string.title_section3); + break; + } + } + + public void restoreActionBar() { + ActionBar actionBar = getActionBar(); + actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setTitle(title); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (!navigationDrawerFragment.isDrawerOpen()) { + // Only show items in the action bar relevant to this screen + // if the drawer is not showing. Otherwise, let the drawer + // decide what to show in the action bar. + getMenuInflater().inflate(R.menu.main, menu); + restoreActionBar(); + return true; + } + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + if (id == R.id.action_execute) { + UeControlExecutor exec = executors.get(currentExecutor); + if(exec.isRunning()){ + exec.terminate(); + item.setTitle(R.string.action_run); + } + else { + exec.execute(); + item.setTitle(R.string.action_stop); + } + return true; + } + if (id == R.id.action_edit) { + Intent intent = new Intent(this, EditActivity.class); + intent.putExtra("executor", currentExecutor); + startActivity(intent); + return true; + } + if (id == R.id.action_settings) { + startActivity(new Intent(this, SettingsActivity.class)); + return true; + } + return super.onOptionsItemSelected(item); + } + + public static UeControlExecutor getExecutor(int index) { + if(index >= executors.size()) + return null; + return executors.get(index); + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/SettingsActivity.java b/app/src/main/java/com/ericsson/uecontrol/gui/SettingsActivity.java new file mode 100755 index 0000000..ec73582 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/SettingsActivity.java @@ -0,0 +1,31 @@ +package com.ericsson.uecontrol.gui; + +import android.app.Activity; +import android.os.Bundle; +import android.preference.PreferenceFragment; + +import com.ericsson.uecontrol.R; + +public class SettingsActivity extends Activity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Display the fragment as the main content. + getFragmentManager().beginTransaction() + .replace(android.R.id.content, new SettingsFragment()) + .commit(); + } + + + public static class SettingsFragment extends PreferenceFragment { + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the preferences from an XML resource + addPreferencesFromResource(R.xml.preferences); + } + } +} + diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/fragments/BehaviourListFragment.java b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/BehaviourListFragment.java new file mode 100755 index 0000000..4dc03c9 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/BehaviourListFragment.java @@ -0,0 +1,104 @@ +package com.ericsson.uecontrol.gui.fragments; + +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.TextView; + +import com.ericsson.uecontrol.R; +import com.ericsson.uecontrol.core.UeControlExecutor; +import com.ericsson.uecontrol.gui.MainActivity; +import com.ericsson.uecontrol.gui.util.BehaviourListAdapter; + +import java.util.ArrayList; + +/** + * This fragment will show a read only list of defined UeBehaviours + */ +public class BehaviourListFragment extends Fragment implements AbsListView.OnItemClickListener { + + /** + * The fragment's ListView/GridView. + */ + private AdapterView listView; + + /** + * The Adapter which will be used to populate the ListView/GridView with + * Views. + */ + private BehaviourListAdapter adapter; + private UeControlExecutor executor; + + public static BehaviourListFragment newInstance(int index) { + BehaviourListFragment f = new BehaviourListFragment(); + // Supply index input as an argument. + Bundle args = new Bundle(); + args.putInt("executor", index); + f.setArguments(args); + return f; + } + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Bundle args = getArguments(); + int index = args.getInt("executor", 0); + + if(MainActivity.getExecutor(index) != null) { + UeControlExecutor executor = MainActivity.getExecutor(index); + adapter = new BehaviourListAdapter(getActivity(), executor.getBehaviourList()); + } + else + adapter = new BehaviourListAdapter(getActivity(), new ArrayList()); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_item, container, false); + + // Set the adapter + listView = (AdapterView) view.findViewById(android.R.id.list); + listView.setAdapter(adapter); + + // Set OnItemClickListener so we can be notified on item clicks + //listView.setOnItemClickListener(this); + + setEmptyText("No Behaviours Defined"); + + return view; + } + + @Override + public void onResume() { + adapter.generateIds(); + adapter.notifyDataSetChanged(); + super.onResume(); + } + + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + + } + + /** + * The default content for this Fragment has a TextView that is shown when + * the list is empty. If you would like to change the text, call this method + * to supply the text it should use. + */ + public void setEmptyText(CharSequence emptyText) { + View emptyView = listView.getEmptyView(); + + if (emptyText instanceof TextView) { + ((TextView) emptyView).setText(emptyText); + } + } + +} diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/fragments/ConfigureBehaviourDialog.java b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/ConfigureBehaviourDialog.java new file mode 100755 index 0000000..7373fd9 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/ConfigureBehaviourDialog.java @@ -0,0 +1,45 @@ +package com.ericsson.uecontrol.gui.fragments; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.DialogInterface; +import android.os.Bundle; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.ericsson.uecontrol.R; + +/** + * Created by ezivkoc on 2014-07-24. + */ +public class ConfigureBehaviourDialog extends DialogFragment { + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // Create dialog + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(R.string.configure_behaviour); + + builder.setPositiveButton(R.string.action_save, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + // User clicked OK button + } + }); + builder.setNegativeButton(R.string.action_cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) {} + }); + + + LinearLayout root = new LinearLayout(getActivity()); + + LinearLayout param = new LinearLayout(getActivity()); + param.addView(new TextView(getActivity())); + param.addView(new EditText(getActivity())); + root.addView(param); + + builder.setView(root); + return builder.create(); + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/fragments/NavigationDrawerFragment.java b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/NavigationDrawerFragment.java new file mode 100755 index 0000000..14d271e --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/NavigationDrawerFragment.java @@ -0,0 +1,284 @@ +package com.ericsson.uecontrol.gui.fragments; + + +import android.app.ActionBar; +import android.app.Activity; +import android.app.Fragment; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.v4.app.ActionBarDrawerToggle; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.Toast; + +import com.ericsson.uecontrol.R; + +/** + * Fragment used for managing interactions for and presentation of a navigation drawer. + * See the + * design guidelines for a complete explanation of the behaviors implemented here. + */ +public class NavigationDrawerFragment extends Fragment { + + /** + * Remember the position of the selected item. + */ + private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; + + /** + * Per the design guidelines, you should show the drawer on launch until the user manually + * expands it. This shared preference tracks this. + */ + private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; + + /** + * A pointer to the current callbacks instance (the Activity). + */ + private NavigationDrawerCallbacks mCallbacks; + + /** + * Helper component that ties the action bar to the navigation drawer. + */ + private ActionBarDrawerToggle mDrawerToggle; + + private DrawerLayout mDrawerLayout; + private ListView mDrawerListView; + private View mFragmentContainerView; + + private int mCurrentSelectedPosition = 0; + private boolean mFromSavedInstanceState; + private boolean mUserLearnedDrawer; + + public NavigationDrawerFragment() { + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Read in the flag indicating whether or not the user has demonstrated awareness of the + // drawer. See PREF_USER_LEARNED_DRAWER for details. + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); + mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false); + + if (savedInstanceState != null) { + mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION); + mFromSavedInstanceState = true; + } + + // Select either the default item (0) or the last selected item. + selectItem(mCurrentSelectedPosition); + } + + @Override + public void onActivityCreated (Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + // Indicate that this fragment would like to influence the set of actions in the action bar. + setHasOptionsMenu(true); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mDrawerListView = (ListView) inflater.inflate( + R.layout.fragment_navigation_drawer, container, false); + mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + selectItem(position); + } + }); + mDrawerListView.setAdapter(new ArrayAdapter( + getActionBar().getThemedContext(), + android.R.layout.simple_list_item_activated_1, + android.R.id.text1, + new String[]{ + getString(R.string.title_section1), + getString(R.string.title_section2), + getString(R.string.title_section3), + })); + mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); + return mDrawerListView; + } + + public boolean isDrawerOpen() { + return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView); + } + + /** + * Users of this fragment must call this method to set up the navigation drawer interactions. + * + * @param fragmentId The android:id of this fragment in its activity's layout. + * @param drawerLayout The DrawerLayout containing this fragment's UI. + */ + public void setUp(int fragmentId, DrawerLayout drawerLayout) { + mFragmentContainerView = getActivity().findViewById(fragmentId); + mDrawerLayout = drawerLayout; + + // set a custom shadow that overlays the main content when the drawer opens + mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); + // set up the drawer's list view with items and click listener + + ActionBar actionBar = getActionBar(); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setHomeButtonEnabled(true); + + // ActionBarDrawerToggle ties together the the proper interactions + // between the navigation drawer and the action bar app icon. + mDrawerToggle = new ActionBarDrawerToggle( + getActivity(), /* host Activity */ + mDrawerLayout, /* DrawerLayout object */ + R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ + R.string.navigation_drawer_open, /* "open drawer" description for accessibility */ + R.string.navigation_drawer_close /* "close drawer" description for accessibility */ + ) { + @Override + public void onDrawerClosed(View drawerView) { + super.onDrawerClosed(drawerView); + if (!isAdded()) { + return; + } + + getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() + } + + @Override + public void onDrawerOpened(View drawerView) { + super.onDrawerOpened(drawerView); + if (!isAdded()) { + return; + } + + if (!mUserLearnedDrawer) { + // The user manually opened the drawer; store this flag to prevent auto-showing + // the navigation drawer automatically in the future. + mUserLearnedDrawer = true; + SharedPreferences sp = PreferenceManager + .getDefaultSharedPreferences(getActivity()); + sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); + } + + getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() + } + }; + + // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer, + // per the navigation drawer design guidelines. + if (!mUserLearnedDrawer && !mFromSavedInstanceState) { + mDrawerLayout.openDrawer(mFragmentContainerView); + } + + // Defer code dependent on restoration of previous instance state. + mDrawerLayout.post(new Runnable() { + @Override + public void run() { + mDrawerToggle.syncState(); + } + }); + + mDrawerLayout.setDrawerListener(mDrawerToggle); + } + + private void selectItem(int position) { + mCurrentSelectedPosition = position; + if (mDrawerListView != null) { + mDrawerListView.setItemChecked(position, true); + } + if (mDrawerLayout != null) { + mDrawerLayout.closeDrawer(mFragmentContainerView); + } + if (mCallbacks != null) { + mCallbacks.onNavigationDrawerItemSelected(position); + } + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mCallbacks = (NavigationDrawerCallbacks) activity; + } catch (ClassCastException e) { + throw new ClassCastException("Activity must implement NavigationDrawerCallbacks."); + } + } + + @Override + public void onDetach() { + super.onDetach(); + mCallbacks = null; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + // Forward the new configuration the drawer toggle component. + mDrawerToggle.onConfigurationChanged(newConfig); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + // If the drawer is open, show the global app actions in the action bar. See also + // showGlobalContextActionBar, which controls the top-left area of the action bar. + if (mDrawerLayout != null && isDrawerOpen()) { + inflater.inflate(R.menu.global, menu); + showGlobalContextActionBar(); + } + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (mDrawerToggle.onOptionsItemSelected(item)) { + return true; + } + + if (item.getItemId() == R.id.action_execute) { + Toast.makeText(getActivity(), "Running", Toast.LENGTH_SHORT).show(); + return true; + } + + return super.onOptionsItemSelected(item); + } + + /** + * Per the navigation drawer design guidelines, updates the action bar to show the global app + * 'context', rather than just what's in the current screen. + */ + private void showGlobalContextActionBar() { + ActionBar actionBar = getActionBar(); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); + actionBar.setTitle(R.string.app_name); + } + + private ActionBar getActionBar() { + return getActivity().getActionBar(); + } + + /** + * Callbacks interface that all activities using this fragment must implement. + */ + public static interface NavigationDrawerCallbacks { + /** + * Called when an item in the navigation drawer is selected. + */ + void onNavigationDrawerItemSelected(int position); + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/fragments/SelectBehaviourDialog.java b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/SelectBehaviourDialog.java new file mode 100755 index 0000000..bdf380f --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/SelectBehaviourDialog.java @@ -0,0 +1,64 @@ +package com.ericsson.uecontrol.gui.fragments; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.DialogInterface; +import android.os.Bundle; + +import com.ericsson.uecontrol.R; +import com.ericsson.uecontrol.core.UeBehaviour; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class SelectBehaviourDialog extends DialogFragment { + public static String[] behavioursClasses; + public static String[] behaviourNames; + + private BehaviourSelectionCallback callback; + + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // Generate nice behaviour names + if(behavioursClasses == null) { + behavioursClasses = getResources().getStringArray(R.array.behaviours); + behaviourNames = new String[behavioursClasses.length]; + + Pattern p = Pattern.compile("[\\w\\.]*\\.(?:UeBehaviour|)(\\w*)"); + for (int i = 0; i < behavioursClasses.length; i++) { + Matcher m = p.matcher(behavioursClasses[i]); + if(m.find()) + behaviourNames[i] = m.group(1); + else + behaviourNames[i] = behavioursClasses[i]; + } + } + + // Create dialog + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(R.string.select_behaviour); + builder.setItems(behaviourNames, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + try { + if (callback != null){ + Class objClass = Class.forName(behavioursClasses[which]); + callback.behaviourSelected(behaviourNames[which], objClass); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + return builder.create(); + } + + public void setSelectionCallback(BehaviourSelectionCallback c){ + callback = c; + } + + public static interface BehaviourSelectionCallback{ + public void behaviourSelected(String name, Class objClass); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/fragments/StatusFragment.java b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/StatusFragment.java new file mode 100755 index 0000000..4c80b9d --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/fragments/StatusFragment.java @@ -0,0 +1,82 @@ +package com.ericsson.uecontrol.gui.fragments; + +import android.app.Fragment; +import android.graphics.Color; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.TextView; + +import com.ericsson.uecontrol.R; +import com.ericsson.uecontrol.core.UeControlExecutor; +import com.ericsson.uecontrol.core.util.ThroughputCalculator; +import com.jjoe64.graphview.GraphView.GraphViewData; +import com.jjoe64.graphview.GraphViewSeries; +import com.jjoe64.graphview.GraphViewSeries.GraphViewSeriesStyle; +import com.jjoe64.graphview.GraphViewStyle; +import com.jjoe64.graphview.LineGraphView; + + +/** + * Created by ezivkoc on 2014-07-15. + */ +public class StatusFragment extends Fragment { + private TextView down_speed; + private TextView up_speed; + private GraphViewSeries downGraph; + private GraphViewSeries upGraph; + private int x = 0; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_status, container, false); + + down_speed = (TextView) view.findViewById(R.id.down_speed); + up_speed = (TextView) view.findViewById(R.id.up_speed); + + // Init the graph + GraphViewData[] zeroPoint = new GraphViewData[]{new GraphViewData(0, 0)}; + downGraph = new GraphViewSeries("Download Throughput", new GraphViewSeriesStyle(Color.GREEN, 3), zeroPoint); + upGraph = new GraphViewSeries("Upload Throughput" , new GraphViewSeriesStyle(Color.RED , 3), zeroPoint); + + LineGraphView graphView = new LineGraphView(this.getActivity(), "GraphViewDemo"); + graphView.addSeries(downGraph); + graphView.addSeries(upGraph); + //graphView.setDrawDataPoints(true); + graphView.setScrollable(true); + graphView.setViewPort(0, 120); + graphView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + graphView.getGraphViewStyle().setGridStyle(GraphViewStyle.GridStyle.BOTH); + + LinearLayout layout = (LinearLayout) view.findViewById(R.id.graph); + layout.addView(graphView); + + return view; + } + + + private UeControlExecutor.ThroughputListener throughputListener = + new UeControlExecutor.ThroughputListener() { + public void throughputUpdate(final double downThroughput, final double upThroughput) { + if(down_speed != null && up_speed != null) + down_speed.post(new Runnable() { + @Override + public void run() { + down_speed.setText(ThroughputCalculator.getThroughputString(downThroughput)); + up_speed.setText(ThroughputCalculator.getThroughputString(upThroughput)); + downGraph.appendData(new GraphViewData(x, downThroughput), true, 120); + upGraph.appendData(new GraphViewData(x, upThroughput), true, 120); + x++; + } + }); + } + }; + public UeControlExecutor.ThroughputListener getThroughputListener(){ + return throughputListener; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/util/BehaviourListAdapter.java b/app/src/main/java/com/ericsson/uecontrol/gui/util/BehaviourListAdapter.java new file mode 100755 index 0000000..047e2ae --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/util/BehaviourListAdapter.java @@ -0,0 +1,82 @@ +package com.ericsson.uecontrol.gui.util; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.ericsson.uecontrol.R; +import com.ericsson.uecontrol.core.UeBehaviour; + +import java.util.List; + +/** + * Created by ezivkoc on 2014-07-15. + */ +public class BehaviourListAdapter extends StableArrayAdapter{ + private static final int VIEW_RESOURCE = R.layout.behaviour_list_item; + + private static LayoutInflater inflater = null; + + private boolean editable = false; + + public BehaviourListAdapter(Activity a, List objects) { + super(a, VIEW_RESOURCE, objects); + inflater = (LayoutInflater)a.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + + public View getView(int position, View convertView, ViewGroup parent) { + View vi = convertView; + if(convertView==null) + vi = inflater.inflate(VIEW_RESOURCE, null); + + ImageView draggable = (ImageView)vi.findViewById(R.id.draggable); + TextView title = (TextView)vi.findViewById(R.id.title); + TextView description = (TextView)vi.findViewById(R.id.description); + final ProgressBar active = (ProgressBar)vi.findViewById(R.id.active); + final ProgressBar progress = (ProgressBar) vi.findViewById(R.id.progress); + + UeBehaviour behaviour = super.getItem(position); + + // Setting all values in listview + title.setText(behaviour.getName()); + description.setText(behaviour.toString()); + + if(editable) + draggable.setVisibility(View.VISIBLE); + + behaviour.setExecutionListener(new UeBehaviour.BehaviourExecutionListener() { + public void executionStarted() { + progress.post(new Runnable() { + public void run() { + active.setVisibility(View.VISIBLE); + progress.setVisibility(View.VISIBLE); + } + }); + } + public void progressChanged(final float p) { + progress.setMax(100); + progress.setProgress((int) (p * 100)); + } + public void executionStopped() { + progress.post(new Runnable() { + public void run() { + active.setVisibility(View.INVISIBLE); + progress.setVisibility(View.INVISIBLE); + } + }); + } + }); + + return vi; + } + + public void setEditable(boolean b) { + editable = b; + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/util/Configurator.java b/app/src/main/java/com/ericsson/uecontrol/gui/util/Configurator.java new file mode 100755 index 0000000..db2b817 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/util/Configurator.java @@ -0,0 +1,68 @@ +package com.ericsson.uecontrol.gui.util; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; + +/** + * Created by ezivkoc on 2014-07-24. + */ +public class Configurator { + /** + * Sets a field in a class as externally configurable. + */ + @Retention(RetentionPolicy.RUNTIME) // Make this annotation accessible at runtime via reflection. + @Target({ElementType.FIELD}) // This annotation can only be applied to class fields. + public static @interface Configurable{ + String value(); + } + + public static enum ConfigType{ + STRING, INT + } + + public static class ConfigurationParam{ + protected Field field; + protected ConfigType type; + protected Object value; + + public ConfigType getType(){return type;} + + public int getInt (){return (Integer) value;} + public String setString(){return (String) value;} + + public void setInt (int v) {value = v;} + public void setString(String v){value = v;} + } + + + public static ConfigurationParam[] getConfiguration(Class c){ + ArrayList conf = new ArrayList(); + + Field[] all = c.getFields(); + for(Field f : all){ + if(f.isAnnotationPresent(Configurable.class) && !Modifier.isStatic(f.getModifiers())) { + ConfigurationParam confParam = new ConfigurationParam(); + confParam.field = f; + conf.add(confParam); + } + } + + return (ConfigurationParam[])conf.toArray(); + } + + public static void setConfiguration(ConfigurationParam[] params, Object obj){ + for(ConfigurationParam param : params){ + try { + param.field.setAccessible(true); + param.field.set(obj, param.value); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/util/DynamicListView.java b/app/src/main/java/com/ericsson/uecontrol/gui/util/DynamicListView.java new file mode 100755 index 0000000..c326eb7 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/util/DynamicListView.java @@ -0,0 +1,620 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.ericsson.uecontrol.gui.util; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ObjectAnimator; +import android.animation.TypeEvaluator; +import android.animation.ValueAnimator; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewTreeObserver; +import android.widget.AbsListView; +import android.widget.ListAdapter; +import android.widget.ListView; + +/** + * The dynamic listview is an extension of listview that supports cell dragging + * and swapping. + *

+ * This layout is in charge of positioning the hover cell in the correct location + * on the screen in response to user touch events. It uses the position of the + * hover cell to determine when two cells should be swapped. If two cells should + * be swapped, all the corresponding data set and layout changes are handled here. + *

+ * If no cell is selected, all the touch events are passed down to the listview + * and behave normally. If one of the items in the listview experiences a + * long press event, the contents of its current visible state are captured as + * a bitmap and its visibility is set to INVISIBLE. A hover cell is then created and + * added to this layout as an overlaying BitmapDrawable above the listview. Once the + * hover cell is translated some distance to signify an item swap, a data set change + * accompanied by animation takes place. When the user releases the hover cell, + * it animates into its corresponding position in the listview. + *

+ * When the hover cell is either above or below the bounds of the listview, this + * listview also scrolls on its own so as to reveal additional content. + */ +public class DynamicListView extends ListView { + private static final int INVALID_POINTER_ID = -1; + private static final int INVALID_ID = -1; + private static final int SMOOTH_SCROLL_AMOUNT_AT_EDGE = 15; + private static final int MOVE_DURATION = 150; + private static final int LINE_THICKNESS = 15; + private static final int REMOVE_OFFSET = 150; + private static final int SWAP_OFFSET = 130; + private static enum TouchMode {UNKNOWN, REMOVE, SWAP}; + + + private int mDownY = -1; + private int mDownX = -1; + private int mLastEventX = -1; + private int mLastEventY = -1; + + private int mTotalOffset = 0; + + private boolean mCellIsMobile = false; + private boolean mIsMobileScrolling = false; + private int mSmoothScrollAmountAtEdge = 0; + + private long mAboveItemId = INVALID_ID; + private long mMobileItemId = INVALID_ID; + private long mBelowItemId = INVALID_ID; + + private BitmapDrawable mHoverCell; + private TouchMode mMode; + private Rect mHoverCellCurrentBounds; + private Rect mHoverCellOriginalBounds; + + private int mActivePointerId = INVALID_POINTER_ID; + + private boolean mIsWaitingForScrollFinish = false; + private int mScrollState = OnScrollListener.SCROLL_STATE_IDLE; + + private DynamicListActionListener listener; + + + public DynamicListView(Context context) { + super(context); + init(context); + } + + public DynamicListView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public DynamicListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(context); + } + + public void init(Context context) { + setOnScrollListener(mScrollListener); + DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + mSmoothScrollAmountAtEdge = (int) (SMOOTH_SCROLL_AMOUNT_AT_EDGE / metrics.density); + } + + + public void setActionListener(DynamicListActionListener l){ + listener = l; + } + + + protected void startItemHover(){ + mTotalOffset = 0; + + int position = pointToPosition(mDownX, mDownY); + int itemNum = position - getFirstVisiblePosition(); + + View selectedView = getChildAt(itemNum); + if(selectedView != null) { + mMobileItemId = getAdapter().getItemId(position); + mHoverCell = getAndAddHoverView(selectedView); + selectedView.setVisibility(INVISIBLE); + + mCellIsMobile = true; + + updateNeighborViewsForID(mMobileItemId); + } + } + + /** + * Creates the hover cell with the appropriate bitmap and of appropriate + * size. The hover cell's BitmapDrawable is drawn on top of the bitmap every + * single time an invalidate call is made. + */ + private BitmapDrawable getAndAddHoverView(View v) { + int w = v.getWidth(); + int h = v.getHeight(); + int top = v.getTop(); + int left = v.getLeft(); + + mHoverCellOriginalBounds = new Rect(left, top, left + w, top + h); + mHoverCellCurrentBounds = new Rect(mHoverCellOriginalBounds); + + BitmapDrawable drawable = new BitmapDrawable(getResources(), getBitmapWithBorder(v)); + drawable.setBounds(mHoverCellCurrentBounds); + + return drawable; + } + + /** + * Draws a black border over the screenshot of the view passed in. + */ + private Bitmap getBitmapWithBorder(View v) { + Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + + v.draw(canvas); + addBorder(bitmap, Color.BLACK); + + return bitmap; + } + + private void addBorder(Bitmap b, int color){ + Paint paint = new Paint(); + paint.setStyle(Paint.Style.STROKE); + paint.setStrokeWidth(LINE_THICKNESS); + paint.setColor(color); + + Canvas canvas = new Canvas(b); + canvas.drawRect(new Rect(0, 0, b.getWidth(), b.getHeight()), paint); + } + + /** + * Stores a reference to the views above and below the item currently + * corresponding to the hover cell. It is important to note that if this + * item is either at the top or bottom of the list, mAboveItemId or mBelowItemId + * may be invalid. + */ + private void updateNeighborViewsForID(long itemID) { + int position = getPositionForID(itemID); + ListAdapter adapter = getAdapter(); + mAboveItemId = adapter.getItemId(position - 1); + mBelowItemId = adapter.getItemId(position + 1); + } + + /** + * Retrieves the view in the list corresponding to itemID + */ + public View getViewForID(long itemID) { + int firstVisiblePosition = getFirstVisiblePosition(); + ListAdapter adapter = getAdapter(); + for (int i = 0; i < getChildCount(); i++) { + View v = getChildAt(i); + int position = firstVisiblePosition + i; + long id = adapter.getItemId(position); + if (id == itemID) { + return v; + } + } + return null; + } + + /** + * Retrieves the position in the list corresponding to itemID + */ + public int getPositionForID(long itemID) { + View v = getViewForID(itemID); + if (v == null) { + return -1; + } else { + return getPositionForView(v); + } + } + + /** + * dispatchDraw gets invoked when all the child views are about to be drawn. + * By overriding this method, the hover cell (BitmapDrawable) can be drawn + * over the listview's items whenever the listview is redrawn. + */ + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + if (mHoverCell != null) { + mHoverCell.draw(canvas); + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if(listener != null) { + switch (event.getAction() & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + mDownX = (int) event.getX(); + mDownY = (int) event.getY(); + mActivePointerId = event.getPointerId(0); + mMode = TouchMode.UNKNOWN; + break; + case MotionEvent.ACTION_MOVE: + if (mActivePointerId == INVALID_POINTER_ID) { + break; + } + int pointerIndex = event.findPointerIndex(mActivePointerId); + mLastEventX = (int) event.getX(pointerIndex); + mLastEventY = (int) event.getY(pointerIndex); + int deltaX = mLastEventX - mDownX; + int deltaY = mLastEventY - mDownY; + + if (mMode == TouchMode.UNKNOWN) { + if (Math.abs(deltaX) > 50 || Math.abs(deltaY) > 50) { + if (Math.abs(deltaX) >= Math.abs(deltaY)) + mMode = TouchMode.REMOVE; + if (Math.abs(deltaX) < Math.abs(deltaY) && mDownX < SWAP_OFFSET) + mMode = TouchMode.SWAP; + + if (mMode != TouchMode.UNKNOWN) + startItemHover(); + } + } + + if (mMode == TouchMode.REMOVE) { + mHoverCellCurrentBounds.offsetTo(mHoverCellOriginalBounds.left + deltaX, + mHoverCellOriginalBounds.top); + mHoverCell.setBounds(mHoverCellCurrentBounds); + + if(mLastEventX + REMOVE_OFFSET > this.getRight()) + addBorder(mHoverCell.getBitmap(), Color.RED); + else + addBorder(mHoverCell.getBitmap(), Color.BLACK); + + invalidate(); + } else if (mMode == TouchMode.SWAP) { + if (mCellIsMobile) { + mHoverCellCurrentBounds.offsetTo(mHoverCellOriginalBounds.left, + mHoverCellOriginalBounds.top + deltaY + mTotalOffset); + mHoverCell.setBounds(mHoverCellCurrentBounds); + invalidate(); + + handleCellSwitch(); + + mIsMobileScrolling = false; + handleMobileCellScroll(); + + return false; + } + } + break; + case MotionEvent.ACTION_UP: + touchEventsEnded(); + break; + case MotionEvent.ACTION_CANCEL: + touchEventsCancelled(); + break; + case MotionEvent.ACTION_POINTER_UP: + /* If a multitouch event took place and the original touch dictating + * the movement of the hover cell has ended, then the dragging event + * ends and the hover cell is animated to its corresponding position + * in the listview. */ + pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> + MotionEvent.ACTION_POINTER_INDEX_SHIFT; + final int pointerId = event.getPointerId(pointerIndex); + if (pointerId == mActivePointerId) { + touchEventsEnded(); + } + break; + default: + break; + } + } + return super.onTouchEvent(event); + } + + /** + * This method determines whether the hover cell has been shifted far enough + * to invoke a cell swap. If so, then the respective cell swap candidate is + * determined and the data set is changed. Upon posting a notification of the + * data set change, a layout is invoked to place the cells in the right place. + * Using a ViewTreeObserver and a corresponding OnPreDrawListener, we can + * offset the cell being swapped to where it previously was and then animate it to + * its new position. + */ + private void handleCellSwitch() { + final int deltaY = mLastEventY - mDownY; + int deltaYTotal = mHoverCellOriginalBounds.top + mTotalOffset + deltaY; + + View belowView = getViewForID(mBelowItemId); + View mobileView = getViewForID(mMobileItemId); + View aboveView = getViewForID(mAboveItemId); + + boolean isBelow = (belowView != null) && (deltaYTotal > belowView.getTop()); + boolean isAbove = (aboveView != null) && (deltaYTotal < aboveView.getTop()); + + if (isBelow || isAbove) { + + final long switchItemID = isBelow ? mBelowItemId : mAboveItemId; + View switchView = isBelow ? belowView : aboveView; + final int originalItem = getPositionForView(mobileView); + + if (switchView == null) { + updateNeighborViewsForID(mMobileItemId); + return; + } + + listener.swapItems(originalItem, getPositionForView(switchView)); + ((StableArrayAdapter) getAdapter()).notifyDataSetChanged(); + + mDownY = mLastEventY; + + mobileView.setVisibility(View.VISIBLE); + switchView.setVisibility(View.INVISIBLE); + + updateNeighborViewsForID(mMobileItemId); + + final int switchViewStartTop = switchView.getTop(); + final ViewTreeObserver observer = getViewTreeObserver(); + observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { + public boolean onPreDraw() { + observer.removeOnPreDrawListener(this); + + View switchView = getViewForID(switchItemID); + + mTotalOffset += deltaY; + + int switchViewNewTop = switchView.getTop(); + int delta = switchViewStartTop - switchViewNewTop; + + switchView.setTranslationY(delta); + + ObjectAnimator animator = ObjectAnimator.ofFloat(switchView, + View.TRANSLATION_Y, 0); + animator.setDuration(MOVE_DURATION); + animator.start(); + + return true; + } + }); + } + } + + /** + * Resets all the appropriate fields to a default state while also animating + * the hover cell back to its correct location. + */ + private void touchEventsEnded() { + final View mobileView = getViewForID(mMobileItemId); + if (mCellIsMobile || mIsWaitingForScrollFinish) { + mCellIsMobile = false; + mIsWaitingForScrollFinish = false; + mIsMobileScrolling = false; + mActivePointerId = INVALID_POINTER_ID; + + // If the autoscroller has not completed scrolling, we need to wait for it to + // finish in order to determine the final location of where the hover cell + // should be animated to. + if (mScrollState != OnScrollListener.SCROLL_STATE_IDLE) { + mIsWaitingForScrollFinish = true; + return; + } + + if(mMode == TouchMode.REMOVE) { + if (mLastEventX + REMOVE_OFFSET > mobileView.getRight()) { + listener.removeItem(getPositionForView(mobileView)); + ((StableArrayAdapter) getAdapter()).notifyDataSetChanged(); + + mHoverCellCurrentBounds.offsetTo(this.getRight(), mHoverCellCurrentBounds.top); + } + else // reset + mHoverCellCurrentBounds.offsetTo(mHoverCellOriginalBounds.left, mobileView.getTop()); + } + else if(mMode == TouchMode.SWAP) { + mHoverCellCurrentBounds.offsetTo(mHoverCellOriginalBounds.left, mobileView.getTop()); + } + + // Animate + ObjectAnimator hoverViewAnimator = ObjectAnimator.ofObject(mHoverCell, "bounds", + sBoundEvaluator, mHoverCellCurrentBounds); + hoverViewAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + invalidate(); + } + }); + hoverViewAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + setEnabled(false); + } + + @Override + public void onAnimationEnd(Animator animation) { + mAboveItemId = INVALID_ID; + mMobileItemId = INVALID_ID; + mBelowItemId = INVALID_ID; + mobileView.setVisibility(VISIBLE); + mHoverCell = null; + setEnabled(true); + invalidate(); + } + }); + hoverViewAnimator.start(); + } else { + touchEventsCancelled(); + } + } + + /** + * Resets all the appropriate fields to a default state. + */ + private void touchEventsCancelled() { + View mobileView = getViewForID(mMobileItemId); + if (mCellIsMobile) { + mAboveItemId = INVALID_ID; + mMobileItemId = INVALID_ID; + mBelowItemId = INVALID_ID; + mobileView.setVisibility(VISIBLE); + mHoverCell = null; + invalidate(); + } + mCellIsMobile = false; + mIsMobileScrolling = false; + mActivePointerId = INVALID_POINTER_ID; + } + + /** + * This TypeEvaluator is used to animate the BitmapDrawable back to its + * final location when the user lifts his finger by modifying the + * BitmapDrawable's bounds. + */ + private final static TypeEvaluator sBoundEvaluator = new TypeEvaluator() { + public Rect evaluate(float fraction, Rect startValue, Rect endValue) { + return new Rect(interpolate(startValue.left, endValue.left, fraction), + interpolate(startValue.top, endValue.top, fraction), + interpolate(startValue.right, endValue.right, fraction), + interpolate(startValue.bottom, endValue.bottom, fraction)); + } + + public int interpolate(int start, int end, float fraction) { + return (int) (start + fraction * (end - start)); + } + }; + + /** + * Determines whether this listview is in a scrolling state invoked + * by the fact that the hover cell is out of the bounds of the listview; + */ + private void handleMobileCellScroll() { + mIsMobileScrolling = handleMobileCellScroll(mHoverCellCurrentBounds); + } + + /** + * This method is in charge of determining if the hover cell is above + * or below the bounds of the listview. If so, the listview does an appropriate + * upward or downward smooth scroll so as to reveal new items. + */ + public boolean handleMobileCellScroll(Rect r) { + int offset = computeVerticalScrollOffset(); + int height = getHeight(); + int extent = computeVerticalScrollExtent(); + int range = computeVerticalScrollRange(); + int hoverViewTop = r.top; + int hoverHeight = r.height(); + + if (hoverViewTop <= 0 && offset > 0) { + smoothScrollBy(-mSmoothScrollAmountAtEdge, 0); + return true; + } + + if (hoverViewTop + hoverHeight >= height && (offset + extent) < range) { + smoothScrollBy(mSmoothScrollAmountAtEdge, 0); + return true; + } + + return false; + } + + /** + * This scroll listener is added to the listview in order to handle cell swapping + * when the cell is either at the top or bottom edge of the listview. If the hover + * cell is at either edge of the listview, the listview will begin scrolling. As + * scrolling takes place, the listview continuously checks if new cells became visible + * and determines whether they are potential candidates for a cell swap. + */ + private AbsListView.OnScrollListener mScrollListener = new AbsListView.OnScrollListener() { + + private int mPreviousFirstVisibleItem = -1; + private int mPreviousVisibleItemCount = -1; + private int mCurrentFirstVisibleItem; + private int mCurrentVisibleItemCount; + private int mCurrentScrollState; + + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, + int totalItemCount) { + mCurrentFirstVisibleItem = firstVisibleItem; + mCurrentVisibleItemCount = visibleItemCount; + + mPreviousFirstVisibleItem = (mPreviousFirstVisibleItem == -1) ? mCurrentFirstVisibleItem + : mPreviousFirstVisibleItem; + mPreviousVisibleItemCount = (mPreviousVisibleItemCount == -1) ? mCurrentVisibleItemCount + : mPreviousVisibleItemCount; + + checkAndHandleFirstVisibleCellChange(); + checkAndHandleLastVisibleCellChange(); + + mPreviousFirstVisibleItem = mCurrentFirstVisibleItem; + mPreviousVisibleItemCount = mCurrentVisibleItemCount; + } + + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + mCurrentScrollState = scrollState; + mScrollState = scrollState; + isScrollCompleted(); + } + + /** + * This method is in charge of invoking 1 of 2 actions. Firstly, if the listview + * is in a state of scrolling invoked by the hover cell being outside the bounds + * of the listview, then this scrolling event is continued. Secondly, if the hover + * cell has already been released, this invokes the animation for the hover cell + * to return to its correct position after the listview has entered an idle scroll + * state. + */ + private void isScrollCompleted() { + if (mCurrentVisibleItemCount > 0 && mCurrentScrollState == SCROLL_STATE_IDLE) { + if (mCellIsMobile && mIsMobileScrolling) { + handleMobileCellScroll(); + } else if (mIsWaitingForScrollFinish) { + touchEventsEnded(); + } + } + } + + /** + * Determines if the listview scrolled up enough to reveal a new cell at the + * top of the list. If so, then the appropriate parameters are updated. + */ + public void checkAndHandleFirstVisibleCellChange() { + if (mCurrentFirstVisibleItem != mPreviousFirstVisibleItem) { + if (mCellIsMobile && mMobileItemId != INVALID_ID) { + updateNeighborViewsForID(mMobileItemId); + handleCellSwitch(); + } + } + } + + /** + * Determines if the listview scrolled down enough to reveal a new cell at the + * bottom of the list. If so, then the appropriate parameters are updated. + */ + public void checkAndHandleLastVisibleCellChange() { + int currentLastVisibleItem = mCurrentFirstVisibleItem + mCurrentVisibleItemCount; + int previousLastVisibleItem = mPreviousFirstVisibleItem + mPreviousVisibleItemCount; + if (currentLastVisibleItem != previousLastVisibleItem) { + if (mCellIsMobile && mMobileItemId != INVALID_ID) { + updateNeighborViewsForID(mMobileItemId); + handleCellSwitch(); + } + } + } + }; + + public static interface DynamicListActionListener{ + public void swapItems(int from, int to); + public void removeItem(int which); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/util/StableArrayAdapter.java b/app/src/main/java/com/ericsson/uecontrol/gui/util/StableArrayAdapter.java new file mode 100755 index 0000000..b2d3db0 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/gui/util/StableArrayAdapter.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.ericsson.uecontrol.gui.util; + +import android.content.Context; +import android.widget.ArrayAdapter; + +import java.util.HashMap; +import java.util.List; + +public class StableArrayAdapter extends ArrayAdapter implements DynamicListView.DynamicListActionListener { + + final int INVALID_ID = -1; + + private HashMap mIdMap = new HashMap(); + private List objects; + + public StableArrayAdapter(Context context, int textViewResourceId, List obj) { + super(context, textViewResourceId, obj); + objects = obj; + generateIds(); + } + + public void generateIds(){ + mIdMap.clear(); + for (int i = 0; i < objects.size(); ++i) { + mIdMap.put(objects.get(i), i); + } + } + + + @Override + public long getItemId(int position) { + if (position < 0 || position >= mIdMap.size()) { + return INVALID_ID; + } + T item = getItem(position); + return mIdMap.get(item); + } + + @Override + public void swapItems(int from, int to) { + T temp = objects.get(from); + objects.set(from, objects.get(to)); + objects.set(to, temp); + } + + @Override + public void removeItem(int which) { + objects.remove(which); + generateIds(); + } + + @Override + public boolean hasStableIds() { + return true; + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/draggable.png b/app/src/main/res/drawable-hdpi/draggable.png new file mode 100755 index 0000000000000000000000000000000000000000..22bd646e75e1390365c20a346df882514d41b64e GIT binary patch literal 690 zcmV;j0!{siP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf02y>eSaefwW^{L9 za%BKPWN%_+AW3auXJt}lVPtu6$z?nM00JUOL_t(oN9|ZkYXU(G&idMeh@b~g{sS-S zMgRZFgM#=g6cl{F(AF=K>8_=0GK;K*4M?YUzDy>QYFxYPRF0YhL!-7m$={WRIOI| z*ZqD^g@WFhpz>m|Nab?*$%arMe6IZ&H5zLz4*Os{&V;Z57I1X0c*6%TSm(DiO449I z!+KWus{eXJ{1d#+r(pg|L%ylxLBKQ!<+TI48 z5SS3c1}v9LQ%}dhhY=El^Z8tTxLgi{E$G~(p*DqNA8srnx3}ns4W}01U;hWN>d2gq zC0@MAC~YZ@dBEzv*Jtp-|9XO?)O*+8Gkbzq4EVSZovjGgRvob?Ku$)7%_MiDrH;}u z*3xDtVPPl=pIm?|A%;@WF)Ery8jS|^`+YZ@Lg9Ek<{>pnP(j=6HVp;?9%gbn&YX_F Y0Uu=GzbowXPXGV_07*qoM6N<$f=QDpng9R* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/drawer_shadow.9.png b/app/src/main/res/drawable-hdpi/drawer_shadow.9.png new file mode 100755 index 0000000000000000000000000000000000000000..236bff558af07faa3921ba35e2515edf62d04bb9 GIT binary patch literal 161 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png b/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png new file mode 100755 index 0000000000000000000000000000000000000000..fabe9d96563785c7d6b008bb3d8da25e816c343c GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^{6Or)!3HEd1bTh|DVAa<&kznEsNqQI0P;BtJR*x3 z7`Qt@n9=;?>9s(?08bak5Rc<;uP@|nU=UzFz%6x@#ly{E6Z5RU$2Hhw*i>Gs`(~~C zr~2_>(e4Ka`gpa)&de}Ks*u{@U5E@m-v9X3<$3NT3r3p*`<7|@n1Ecw;OXk;vd$@? F2>^8yH@N@+ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer.png b/app/src/main/res/drawable-xhdpi/ic_drawer.png new file mode 100755 index 0000000000000000000000000000000000000000..a5fa74def4b40d7eb6826da05bd5e12b836cb999 GIT binary patch literal 2836 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png b/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png new file mode 100755 index 0000000000000000000000000000000000000000..b91e9d7f285e8110ba3ba4e72cc6f0416eb3a30a GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^VnCe4!3HEl*p=S^DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MMa)2jv*QM-d<4Ta$*#5x!8O#VbcvCx78OjjCM19-`|n` zlcQ;yJWqK-!X?h+v^9}Es?F+hJ07=b>sdT*QRcgm+^%b8|A7C`|A*gYPjm3$2miRv cpZdzQt0C%<%j~>EK-(ESUHx3vIVCg!0CP)0sQ>@~ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_drawer.png b/app/src/main/res/drawable-xxhdpi/ic_drawer.png new file mode 100755 index 0000000000000000000000000000000000000000..9c4685d6e046ce6c450c19426dce627a88718bfc GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?3oVGw3ym^DWND5#L^ z5#-Cjkf+YTP`sXjk!=$LL!~YQgWnqlM%L3n1JW26goK+9UQq_B4e)ev49U3n_PU`U zg8>io#t-TVJM=pEGT)onF!&ZOd;8}O149hcq!N%?hK6(oZAK7-f#HS|n9?%@Qw{w* cAUc7wfPvd9>y+w~O{pNhr>mdKI;Vst074Kf@&Et; literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_launcher.png b/app/src/main/res/drawable-xxhdpi/ic_launcher.png new file mode 100755 index 0000000000000000000000000000000000000000..4df18946442ed763bd52cf3adca31617848656fa GIT binary patch literal 19388 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml new file mode 100755 index 0000000..bd4f494 --- /dev/null +++ b/app/src/main/res/layout/activity_edit.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100755 index 0000000..3fd1db4 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/behaviour_list_item.xml b/app/src/main/res/layout/behaviour_list_item.xml new file mode 100755 index 0000000..6c1924e --- /dev/null +++ b/app/src/main/res/layout/behaviour_list_item.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_item_list.xml b/app/src/main/res/layout/fragment_item_list.xml new file mode 100755 index 0000000..76c0d0e --- /dev/null +++ b/app/src/main/res/layout/fragment_item_list.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/app/src/main/res/layout/fragment_navigation_drawer.xml b/app/src/main/res/layout/fragment_navigation_drawer.xml new file mode 100755 index 0000000..5250946 --- /dev/null +++ b/app/src/main/res/layout/fragment_navigation_drawer.xml @@ -0,0 +1,9 @@ + diff --git a/app/src/main/res/layout/fragment_status.xml b/app/src/main/res/layout/fragment_status.xml new file mode 100755 index 0000000..fe7fdc1 --- /dev/null +++ b/app/src/main/res/layout/fragment_status.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/edit.xml b/app/src/main/res/menu/edit.xml new file mode 100755 index 0000000..bc04ac5 --- /dev/null +++ b/app/src/main/res/menu/edit.xml @@ -0,0 +1,9 @@ +

+ + + + diff --git a/app/src/main/res/menu/global.xml b/app/src/main/res/menu/global.xml new file mode 100755 index 0000000..f3b10b6 --- /dev/null +++ b/app/src/main/res/menu/global.xml @@ -0,0 +1,6 @@ + + + diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100755 index 0000000..cc45837 --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml new file mode 100755 index 0000000..63fc816 --- /dev/null +++ b/app/src/main/res/values-w820dp/dimens.xml @@ -0,0 +1,6 @@ + + + 64dp + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml new file mode 100755 index 0000000..72e574b --- /dev/null +++ b/app/src/main/res/values/arrays.xml @@ -0,0 +1,8 @@ + + + + com.ericsson.uecontrol.core.behaviour.UeBehaviourSleep + com.ericsson.uecontrol.core.behaviour.UeBehaviourSurfing + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100755 index 0000000..074e7a0 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,9 @@ + + + 16dp + 16dp + + + 240dp + diff --git a/app/src/main/res/values/refs.xml b/app/src/main/res/values/refs.xml new file mode 100755 index 0000000..4b596c9 --- /dev/null +++ b/app/src/main/res/values/refs.xml @@ -0,0 +1,12 @@ + + + + @layout/fragment_item_list + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100755 index 0000000..9e0e231 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,25 @@ + + + UeControl + Section 1 + Section 2 + Section 3 + Open navigation drawer + Close navigation drawer + Run + Stop + Edit + Import + Export + Settings + Execution Settings + Simulate + The execution will be simulated, no actual data will be transferred. + Other Settings + Edit + Add + Select Behaviour + Configure Behaviour + Save + Cancel + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100755 index 0000000..ff6c9d2 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml new file mode 100755 index 0000000..1b27a3a --- /dev/null +++ b/app/src/main/res/xml/preferences.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100755 index 0000000..a75fc81 --- /dev/null +++ b/build.gradle @@ -0,0 +1,19 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:0.12.+' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + jcenter() + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100755 index 0000000..5d08ba7 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,18 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Settings specified in this file will override any Gradle settings +# configured through the IDE. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100755 index 0000000000000000000000000000000000000000..8c0fb64a8698b08ecc4158d828ca593c4928e9dd GIT binary patch literal 49896 zcmagFb986H(k`5d^NVfUwr$(C?M#x1ZQHiZiEVpg+jrjgoQrerx!>1o_ul)D>ebz~ zs=Mmxr&>W81QY-S1PKWQ%N-;H^tS;2*XwVA`dej1RRn1z<;3VgfE4~kaG`A%QSPsR z#ovnZe+tS9%1MfeDyz`RirvdjPRK~p(#^q2(^5@O&NM19EHdvN-A&StN>0g6QA^VN z0Gx%Gq#PD$QMRFzmK+utjS^Y1F0e8&u&^=w5K<;4Rz|i3A=o|IKLY+g`iK6vfr9?+ z-`>gmU&i?FGSL5&F?TXFu`&Js6h;15QFkXp2M1H9|Eq~bpov-GU(uz%mH0n55wUl- zv#~ccAz`F5wlQ>e_KlJS3@{)B?^v*EQM=IxLa&76^y51a((wq|2-`qON>+4dLc{Oo z51}}o^Zen(oAjxDK7b++9_Yg`67p$bPo3~BCpGM7uAWmvIhWc5Gi+gQZ|Pwa-Gll@<1xmcPy z|NZmu6m)g5Ftu~BG&Xdxclw7Cij{xbBMBn-LMII#Slp`AElb&2^Hw+w>(3crLH!;I zN+Vk$D+wP1#^!MDCiad@vM>H#6+`Ct#~6VHL4lzmy;lSdk>`z6)=>Wh15Q2)dQtGqvn0vJU@+(B5{MUc*qs4!T+V=q=wy)<6$~ z!G>e_4dN@lGeF_$q9`Ju6Ncb*x?O7=l{anm7Eahuj_6lA{*#Gv*TaJclevPVbbVYu z(NY?5q+xxbO6%g1xF0r@Ix8fJ~u)VRUp`S%&rN$&e!Od`~s+64J z5*)*WSi*i{k%JjMSIN#X;jC{HG$-^iX+5f5BGOIHWAl*%15Z#!xntpk($-EGKCzKa zT7{siZ9;4TICsWQ$pu&wKZQTCvpI$Xvzwxoi+XkkpeE&&kFb!B?h2hi%^YlXt|-@5 zHJ~%AN!g_^tmn1?HSm^|gCE#!GRtK2(L{9pL#hp0xh zME}|DB>(5)`iE7CM)&_+S}-Bslc#@B5W4_+k4Cp$l>iVyg$KP>CN?SVGZ(&02>iZK zB<^HP$g$Lq*L$BWd?2(F?-MUbNWTJVQdW7$#8a|k_30#vHAD1Z{c#p;bETk0VnU5A zBgLe2HFJ3032$G<`m*OB!KM$*sdM20jm)It5OSru@tXpK5LT>#8)N!*skNu1$TpIw zufjjdp#lyH5bZ%|Iuo|iu9vG1HrIVWLH>278xo>aVBkPN3V$~!=KnlXQ4eDqS7%E% zQ!z^$Q$b^6Q)g#cLpwur(|<0gWHo6A6jc;n`t(V9T;LzTAU{IAu*uEQ%Ort1k+Kn+f_N`9|bxYC+~Z1 zCC1UCWv*Orx$_@ydv9mIe(liLfOr7mhbV@tKw{6)q^1DH1nmvZ0cj215R<~&I<4S| zgnr;9Cdjqpz#o8i0CQjtl`}{c*P)aSdH|abxGdrR)-3z+02-eX(k*B)Uqv6~^nh** z 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +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"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100755 index 0000000..8a0b282 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100755 index 0000000..e7b4def --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +include ':app'