Commiting stuff the IDE did not

This commit is contained in:
Ziver Koc 2014-07-31 15:01:44 +02:00
parent 73a3de5eb8
commit ff7138bf9d
52 changed files with 3887 additions and 3887 deletions

46
.idea/compiler.xml generated
View file

@ -1,23 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac" />
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac" />
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>

View file

@ -1,3 +1,3 @@
<component name="CopyrightManager">
<settings default="" />
<component name="CopyrightManager">
<settings default="" />
</component>

10
.idea/encodings.xml generated
View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
</project>

38
.idea/gradle.xml generated
View file

@ -1,19 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
<option name="gradleVmOptions" value="-XX:MaxHeapSize=256m -Xmx256m" />
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
<option name="gradleVmOptions" value="-XX:MaxHeapSize=256m -Xmx256m" />
</component>
</project>

20
.idea/misc.xml generated
View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
</project>

20
.idea/modules.xml generated
View file

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/UeControl.iml" filepath="$PROJECT_DIR$/UeControl.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
</modules>
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/UeControl.iml" filepath="$PROJECT_DIR$/UeControl.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
</modules>
</component>
</project>

View file

@ -1,5 +1,5 @@
<component name="DependencyValidationManager">
<state>
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</state>
<component name="DependencyValidationManager">
<state>
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</state>
</component>

14
.idea/vcs.xml generated
View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View file

@ -1,19 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
</content>
<orderEntry type="jdk" jdkName="JDK" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
</content>
<orderEntry type="jdk" jdkName="JDK" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View file

@ -1,202 +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
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.

View file

@ -1,4 +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.
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.

Binary file not shown.

View file

@ -1,68 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="UeControl" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":app" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" />
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
<option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/test/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
</content>
<orderEntry type="jdk" jdkName="Android API 15 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="GraphView-3.1.2" level="project" />
<orderEntry type="library" exported="" name="support-v4-19.1.0" level="project" />
</component>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="UeControl" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":app" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" />
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
<option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/test/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
</content>
<orderEntry type="jdk" jdkName="Android API 15 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="GraphView-3.1.2" level="project" />
<orderEntry type="library" exported="" name="support-v4-19.1.0" level="project" />
</component>
</module>

View file

@ -1,28 +1,28 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 15
buildToolsVersion '19.1.0'
defaultConfig {
applicationId "com.ericsson.uecontrol"
minSdkVersion 15
targetSdkVersion 19
versionCode 3
versionName "1.0.2"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
zipAlign true
}
}
}
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')
apply plugin: 'com.android.application'
android {
compileSdkVersion 15
buildToolsVersion '19.1.0'
defaultConfig {
applicationId "com.ericsson.uecontrol"
minSdkVersion 15
targetSdkVersion 19
versionCode 5
versionName "1.0.5"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
zipAlign true
}
}
}
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')
}

File diff suppressed because it is too large Load diff

View file

@ -1,165 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
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
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
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.

View file

@ -1,17 +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 *;
#}
# 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 *;
#}

View file

@ -1,39 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ericsson.uecontrol" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".gui.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".gui.SettingsActivity"
android:label="@string/app_name" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".gui.MainActivity" />
</activity>
<activity
android:name=".gui.EditActivity"
android:label="@string/title_activity_edit" >
</activity>
<activity
android:name=".gui.AboutActivity"
android:label="@string/title_activity_about" >
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ericsson.uecontrol" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".gui.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".gui.SettingsActivity"
android:label="@string/app_name" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".gui.MainActivity" />
</activity>
<activity
android:name=".gui.EditActivity"
android:label="@string/title_activity_edit" >
</activity>
<activity
android:name=".gui.AboutActivity"
android:label="@string/title_activity_about" >
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>

View file

@ -1,110 +1,110 @@
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();
try {
setProgress(0);
execute();
} catch(Exception e){
if(execListener != null) execListener.exception(e);
e.printStackTrace();
}
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() throws Exception;
/**
* @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 void exception(Exception e);
}
public static interface DataHandledListener {
public void handledIncomingData(long size);
public void handledOutgoingData(long size);
}
}
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();
try {
setProgress(0);
execute();
} catch(Exception e){
if(execListener != null) execListener.exception(e);
e.printStackTrace();
}
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() throws Exception;
/**
* @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 void exception(Exception e);
}
public static interface DataHandledListener {
public void handledIncomingData(long size);
public void handledOutgoingData(long size);
}
}

View file

@ -1,109 +1,109 @@
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<UeBehaviour> behaviours;
private UeBehaviour currentlyActive;
private boolean terminate;
private Thread thread;
private ThroughputCalculator downloadSpeed;
private ThroughputCalculator uploadSpeed;
private ThroughputListener throughputListener;
public UeControlExecutor(){
behaviours = new ArrayList<UeBehaviour>();
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.getBitThroughput(), uploadSpeed.getBitThroughput());
}
@Override
public void handledOutgoingData(long size) {
uploadSpeed.setHandledData(size);
if(throughputListener != null && uploadSpeed.isUpdated())
throughputListener.throughputUpdate(downloadSpeed.getBitThroughput(), uploadSpeed.getBitThroughput());
}
public void setThroughputListener(ThroughputListener listener){
throughputListener = listener;
}
public List<UeBehaviour> getBehaviourList() {
return behaviours;
}
public UeBehaviour getRunningBehaviour(){
return currentlyActive;
}
public static interface ThroughputListener{
public void throughputUpdate(double downThroughput, double upThroughput);
}
}
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<UeBehaviour> behaviours;
private UeBehaviour currentlyActive;
private boolean terminate;
private Thread thread;
private ThroughputCalculator downloadSpeed;
private ThroughputCalculator uploadSpeed;
private ThroughputListener throughputListener;
public UeControlExecutor(){
behaviours = new ArrayList<UeBehaviour>();
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.getBitThroughput(), uploadSpeed.getBitThroughput());
}
@Override
public void handledOutgoingData(long size) {
uploadSpeed.setHandledData(size);
if(throughputListener != null && uploadSpeed.isUpdated())
throughputListener.throughputUpdate(downloadSpeed.getBitThroughput(), uploadSpeed.getBitThroughput());
}
public void setThroughputListener(ThroughputListener listener){
throughputListener = listener;
}
public List<UeBehaviour> getBehaviourList() {
return behaviours;
}
public UeBehaviour getRunningBehaviour(){
return currentlyActive;
}
public static interface ThroughputListener{
public void throughputUpdate(double downThroughput, double upThroughput);
}
}

View file

@ -1,44 +1,44 @@
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() throws InterruptedException {
int elapsedTime = 0;
while(elapsedTime < time){
super.setProgress((float)elapsedTime/time);
if(super.stopExecution()) break;
Thread.sleep(SLEEP_PERIOD);
elapsedTime += SLEEP_PERIOD;
}
}
@Override
public String getName() {
return "Sleep";
}
@Override
public String toString() {
return "Will sleep for "+(time/1000)+" seconds";
}
}
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() throws InterruptedException {
int elapsedTime = 0;
while(elapsedTime < time){
super.setProgress((float)elapsedTime/time);
if(super.stopExecution()) break;
Thread.sleep(SLEEP_PERIOD);
elapsedTime += SLEEP_PERIOD;
}
}
@Override
public String getName() {
return "Sleep";
}
@Override
public String toString() {
return "Will sleep for "+(time/1000)+" seconds";
}
}

View file

@ -1,123 +1,123 @@
package com.ericsson.uecontrol.core.behaviour;
import android.util.Log;
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.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* This behaviour simulates visiting a website
*
* Created by ezivkoc on 2014-07-15.
*/
public class UeBehaviourSurfing extends UeBehaviour {
@Configurable("Web Address")
private String rootUrl;
private long estimatedDataLength = -1;
public UeBehaviourSurfing(){
this("http://google.com");
}
public UeBehaviourSurfing(String url){
rootUrl = url;
}
@Override
protected void execute() throws IOException {
if(!rootUrl.startsWith("http://"))
rootUrl = "http://"+ rootUrl;
List<URL> urlList = new ArrayList<URL>();
urlList.add(new URL(rootUrl));
byte[] data = new byte[100];
IOException retException = null;
long totalRead = 0;
for(int i=0; i<urlList.size(); i++) {
try {
URL url = urlList.get(i);
Log.v(getClass().getSimpleName(), "Downloading: " + url);
URLConnection connection = url.openConnection();
connection.setUseCaches(false);
connection.connect();
InputStream in = connection.getInputStream();
if (estimatedDataLength < 0)
estimatedDataLength = in.available();
int read = 0;
StringBuilder content = new StringBuilder();
while ((read = in.read(data)) != -1) {
if(stopExecution())
return;
totalRead += read;
super.setProgress((float) totalRead / estimatedDataLength);
super.setHandledIncomingData(read);
content.append(new String(data, 0, read));
}
getAdditionalContent(url, content.toString(), urlList);
}catch(IOException e){
e.printStackTrace();
if(retException == null) retException = e;
}
}
estimatedDataLength = totalRead;
if(retException != null)
throw retException;
}
private static final Pattern[] CONTENT_INCLUSION_PATTERNS = new Pattern[]{
// [\w\/\.-]
// HTML
Pattern.compile("<img.* src=\"(.*?)\"", Pattern.CASE_INSENSITIVE),
Pattern.compile("<iframe.* src=\"(.*?)\"", Pattern.CASE_INSENSITIVE),
// CSS
Pattern.compile("<link.*rel=\"stylesheet\".*href=\"(.*?)\".*>", Pattern.CASE_INSENSITIVE),
Pattern.compile("@import [\"']?(.*?)[\"']?", Pattern.CASE_INSENSITIVE),
Pattern.compile("(?:import|background)[\\W:]*url\\([\"']?(?![\"']?data:)(.*?)[\"']??\\)", Pattern.CASE_INSENSITIVE),
// Javascript
Pattern.compile("<script.* src=\"(.*?)\"", Pattern.CASE_INSENSITIVE)
};
private void getAdditionalContent(URL baseUrl, String data, List<URL> urlList){
for(Pattern pattern : CONTENT_INCLUSION_PATTERNS){
Matcher m = pattern.matcher(data);
while(m.find()){
try {
String strUrl = m.group(1);
URL url = new URL(baseUrl, strUrl);
if(!urlList.contains(url))
urlList.add(url);
}catch(MalformedURLException e){
e.printStackTrace();
}
}
}
}
@Override
public String getName() {
return "Surfing";
}
@Override
public String toString() {
return "Will visit "+ rootUrl;
}
}
package com.ericsson.uecontrol.core.behaviour;
import android.util.Log;
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.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* This behaviour simulates visiting a website
*
* Created by ezivkoc on 2014-07-15.
*/
public class UeBehaviourSurfing extends UeBehaviour {
@Configurable("Web Address")
private String rootUrl;
private long estimatedDataLength = -1;
public UeBehaviourSurfing(){
this("http://google.com");
}
public UeBehaviourSurfing(String url){
rootUrl = url;
}
@Override
protected void execute() throws IOException {
if(!rootUrl.startsWith("http://"))
rootUrl = "http://"+ rootUrl;
List<URL> urlList = new ArrayList<URL>();
urlList.add(new URL(rootUrl));
byte[] data = new byte[100];
IOException retException = null;
long totalRead = 0;
for(int i=0; i<urlList.size(); i++) {
try {
URL url = urlList.get(i);
Log.v(getClass().getSimpleName(), "Downloading: " + url);
URLConnection connection = url.openConnection();
connection.setUseCaches(false);
connection.connect();
InputStream in = connection.getInputStream();
if (estimatedDataLength < 0)
estimatedDataLength = in.available();
int read = 0;
StringBuilder content = new StringBuilder();
while ((read = in.read(data)) != -1) {
if(stopExecution())
return;
totalRead += read;
super.setProgress((float) totalRead / estimatedDataLength);
super.setHandledIncomingData(read);
content.append(new String(data, 0, read));
}
getAdditionalContent(url, content.toString(), urlList);
}catch(IOException e){
e.printStackTrace();
if(retException == null) retException = e;
}
}
estimatedDataLength = totalRead;
if(retException != null)
throw retException;
}
private static final Pattern[] CONTENT_INCLUSION_PATTERNS = new Pattern[]{
// [\w\/\.-]
// HTML
Pattern.compile("<img.* src=\"(.*?)\"", Pattern.CASE_INSENSITIVE),
Pattern.compile("<iframe.* src=\"(.*?)\"", Pattern.CASE_INSENSITIVE),
// CSS
Pattern.compile("<link.*rel=\"stylesheet\".*href=\"(.*?)\".*>", Pattern.CASE_INSENSITIVE),
Pattern.compile("@import [\"']?(.*?)[\"']?", Pattern.CASE_INSENSITIVE),
Pattern.compile("(?:import|background)[\\W:]*url\\([\"']?(?![\"']?data:)(.*?)[\"']??\\)", Pattern.CASE_INSENSITIVE),
// Javascript
Pattern.compile("<script.* src=\"(.*?)\"", Pattern.CASE_INSENSITIVE)
};
private void getAdditionalContent(URL baseUrl, String data, List<URL> urlList){
for(Pattern pattern : CONTENT_INCLUSION_PATTERNS){
Matcher m = pattern.matcher(data);
while(m.find()){
try {
String strUrl = m.group(1);
URL url = new URL(baseUrl, strUrl);
if(!urlList.contains(url))
urlList.add(url);
}catch(MalformedURLException e){
e.printStackTrace();
}
}
}
}
@Override
public String getName() {
return "Surfing";
}
@Override
public String toString() {
return "Will visit "+ rootUrl;
}
}

View file

@ -1,53 +1,53 @@
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 getByeThroughput(){
setHandledData(0); // Update throughput
updated = false;
return throughput;
}
public double getBitThroughput(){
return getByeThroughput()*8;
}
public boolean isUpdated(){
return updated;
}
private static final String[] DATA_SIZE = new String[]{"b/s", "kbit/s", "Mbit/s", "Gbit/s"};
public static String getBitThroughputString(double bitsPerSec){
int index = 0;
double value = bitsPerSec;
for(; value > 1000 && index < DATA_SIZE.length ;index++) {
value /= 1000;
}
value = (int)(value*10) / 10.0;
return value+" "+DATA_SIZE[index];
}
}
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 getByeThroughput(){
setHandledData(0); // Update throughput
updated = false;
return throughput;
}
public double getBitThroughput(){
return getByeThroughput()*8;
}
public boolean isUpdated(){
return updated;
}
private static final String[] DATA_SIZE = new String[]{"b/s", "kbit/s", "Mbit/s", "Gbit/s"};
public static String getBitThroughputString(double bitsPerSec){
int index = 0;
double value = bitsPerSec;
for(; value > 1000 && index < DATA_SIZE.length ;index++) {
value /= 1000;
}
value = (int)(value*10) / 10.0;
return value+" "+DATA_SIZE[index];
}
}

View file

@ -1,88 +1,88 @@
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.AdapterView;
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.ConfigureDialog;
import com.ericsson.uecontrol.gui.fragments.SelectBehaviourDialog;
import com.ericsson.uecontrol.gui.util.BehaviourListAdapter;
import com.ericsson.uecontrol.gui.util.Configurator;
import com.ericsson.uecontrol.gui.util.DynamicListView;
import java.util.ArrayList;
import java.util.List;
public class EditActivity extends ListActivity implements AdapterView.OnItemClickListener {
private UeControlExecutor executor;
private BehaviourListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
final List<UeBehaviour> list;
executor = MainActivity.getExecutor();
list = executor.getBehaviourList();
adapter = new BehaviourListAdapter(this, list);
adapter.setEditable(true);
DynamicListView listView = (DynamicListView) findViewById(android.R.id.list);
listView.setAdapter(adapter);
listView.setActionListener(adapter);
listView.setOnItemClickListener(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<UeBehaviour> 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 onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
UeBehaviour behaviour = executor.getBehaviourList().get(i);
Configurator confer = new Configurator(behaviour);
ConfigureDialog dialog = new ConfigureDialog();
dialog.setConfigurator(confer);
dialog.show(getFragmentManager(), "behaviour_configurator");
}
}
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.AdapterView;
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.ConfigureDialog;
import com.ericsson.uecontrol.gui.fragments.SelectBehaviourDialog;
import com.ericsson.uecontrol.gui.util.BehaviourListAdapter;
import com.ericsson.uecontrol.gui.util.Configurator;
import com.ericsson.uecontrol.gui.util.DynamicListView;
import java.util.ArrayList;
import java.util.List;
public class EditActivity extends ListActivity implements AdapterView.OnItemClickListener {
private UeControlExecutor executor;
private BehaviourListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);
final List<UeBehaviour> list;
executor = MainActivity.getExecutor();
list = executor.getBehaviourList();
adapter = new BehaviourListAdapter(this, list);
adapter.setEditable(true);
DynamicListView listView = (DynamicListView) findViewById(android.R.id.list);
listView.setAdapter(adapter);
listView.setActionListener(adapter);
listView.setOnItemClickListener(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<UeBehaviour> 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 onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
UeBehaviour behaviour = executor.getBehaviourList().get(i);
Configurator confer = new Configurator(behaviour);
ConfigureDialog dialog = new ConfigureDialog();
dialog.setConfigurator(confer);
dialog.show(getFragmentManager(), "behaviour_configurator");
}
}

View file

@ -1,123 +1,123 @@
package com.ericsson.uecontrol.gui;
import android.app.ActionBar;
import android.app.FragmentManager;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentActivity;
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.UeBehaviourFtp;
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 com.ericsson.uecontrol.gui.util.CSVWriter;
public class MainActivity extends FragmentActivity {
/**
* Fragment managing the behaviors, interactions and presentation of the navigation drawer.
*/
private NavigationDrawerFragment navigationDrawerFragment;
private StatusFragment statusFragment;
private static UeControlExecutor currentExecutor;
private static CSVWriter logger;
@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);
getFragmentManager().beginTransaction()
.replace(R.id.container, BehaviourListFragment.newInstance()).commit();
// Set up the drawer.
//navigationDrawerFragment.setUp(
// R.id.navigation_drawer,
// (DrawerLayout) findViewById(R.id.drawer_layout));
currentExecutor = new UeControlExecutor();
currentExecutor.addBehaviour(new UeBehaviourSleep());
currentExecutor.addBehaviour(new UeBehaviourSurfing());
currentExecutor.addBehaviour(new UeBehaviourSleep(4000));
currentExecutor.setThroughputListener(statusFragment.getThroughputListener());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (navigationDrawerFragment == null || !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);
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayShowTitleEnabled(true);
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) {
if(currentExecutor.isRunning()){
currentExecutor.terminate();
item.setTitle(R.string.action_run);
}
else {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(prefs.getBoolean("logging", false))
logger = new CSVWriter(this);
else
logger = null;
currentExecutor.execute();
item.setTitle(R.string.action_stop);
}
return true;
}
if (id == R.id.action_edit) {
Intent intent = new Intent(this, EditActivity.class);
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() {
return currentExecutor;
}
public static void logThroughput(double downThroughput, double upThroughput) {
if(logger == null || currentExecutor == null || currentExecutor.getRunningBehaviour() == null)
return;
logger.write(currentExecutor.getRunningBehaviour().getName(), downThroughput, upThroughput);
}
}
package com.ericsson.uecontrol.gui;
import android.app.ActionBar;
import android.app.FragmentManager;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentActivity;
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.UeBehaviourFtp;
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 com.ericsson.uecontrol.gui.util.CSVWriter;
public class MainActivity extends FragmentActivity {
/**
* Fragment managing the behaviors, interactions and presentation of the navigation drawer.
*/
private NavigationDrawerFragment navigationDrawerFragment;
private StatusFragment statusFragment;
private static UeControlExecutor currentExecutor;
private static CSVWriter logger;
@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);
getFragmentManager().beginTransaction()
.replace(R.id.container, BehaviourListFragment.newInstance()).commit();
// Set up the drawer.
//navigationDrawerFragment.setUp(
// R.id.navigation_drawer,
// (DrawerLayout) findViewById(R.id.drawer_layout));
currentExecutor = new UeControlExecutor();
currentExecutor.addBehaviour(new UeBehaviourSleep());
currentExecutor.addBehaviour(new UeBehaviourSurfing());
currentExecutor.addBehaviour(new UeBehaviourSleep(4000));
currentExecutor.setThroughputListener(statusFragment.getThroughputListener());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (navigationDrawerFragment == null || !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);
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayShowTitleEnabled(true);
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) {
if(currentExecutor.isRunning()){
currentExecutor.terminate();
item.setTitle(R.string.action_run);
}
else {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(prefs.getBoolean("logging", false))
logger = new CSVWriter(this);
else
logger = null;
currentExecutor.execute();
item.setTitle(R.string.action_stop);
}
return true;
}
if (id == R.id.action_edit) {
Intent intent = new Intent(this, EditActivity.class);
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() {
return currentExecutor;
}
public static void logThroughput(double downThroughput, double upThroughput) {
if(logger == null || currentExecutor == null || currentExecutor.getRunningBehaviour() == null)
return;
logger.write(currentExecutor.getRunningBehaviour().getName(), downThroughput, upThroughput);
}
}

View file

@ -1,43 +1,43 @@
package com.ericsson.uecontrol.gui;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
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);
// Setup About intent
Preference aboutPreference = findPreference("about");
aboutPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener(){
public boolean onPreferenceClick(Preference preference) {
startActivity(new Intent(getActivity(), AboutActivity.class));
return true;
}
});
}
}
}
package com.ericsson.uecontrol.gui;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
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);
// Setup About intent
Preference aboutPreference = findPreference("about");
aboutPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener(){
public boolean onPreferenceClick(Preference preference) {
startActivity(new Intent(getActivity(), AboutActivity.class));
return true;
}
});
}
}
}

View file

@ -1,92 +1,92 @@
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.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 {
/**
* 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() {
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);
if(MainActivity.getExecutor() != null) {
UeControlExecutor executor = MainActivity.getExecutor();
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);
setEmptyText("No Behaviours Defined");
return view;
}
@Override
public void onResume() {
adapter.generateIds();
adapter.notifyDataSetChanged();
super.onResume();
}
/**
* 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);
}
}
}
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.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 {
/**
* 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() {
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);
if(MainActivity.getExecutor() != null) {
UeControlExecutor executor = MainActivity.getExecutor();
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);
setEmptyText("No Behaviours Defined");
return view;
}
@Override
public void onResume() {
adapter.generateIds();
adapter.notifyDataSetChanged();
super.onResume();
}
/**
* 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);
}
}
}

View file

@ -1,283 +1,283 @@
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 <a href="https://developer.android.com/design/patterns/navigation-drawer.html#Interaction">
* design guidelines</a> 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;
@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<String>(
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);
}
}
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 <a href="https://developer.android.com/design/patterns/navigation-drawer.html#Interaction">
* design guidelines</a> 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;
@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<String>(
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);
}
}

View file

@ -1,65 +1,65 @@
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[] behaviourClasses;
public static String[] behaviourNames;
private BehaviourSelectionCallback callback;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Generate nice behaviour names
if(behaviourClasses == null) {
behaviourClasses = getResources().getStringArray(R.array.behaviours);
behaviourNames = new String[behaviourClasses.length];
for (int i = 0; i < behaviourClasses.length; i++) {
try {
UeBehaviour obj = (UeBehaviour) Class.forName(behaviourClasses[i]).newInstance();
behaviourNames[i] = obj.getName();
}catch(Exception e){
e.printStackTrace();
behaviourNames[i] = behaviourClasses[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(behaviourClasses[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<UeBehaviour> objClass);
}
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[] behaviourClasses;
public static String[] behaviourNames;
private BehaviourSelectionCallback callback;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Generate nice behaviour names
if(behaviourClasses == null) {
behaviourClasses = getResources().getStringArray(R.array.behaviours);
behaviourNames = new String[behaviourClasses.length];
for (int i = 0; i < behaviourClasses.length; i++) {
try {
UeBehaviour obj = (UeBehaviour) Class.forName(behaviourClasses[i]).newInstance();
behaviourNames[i] = obj.getName();
}catch(Exception e){
e.printStackTrace();
behaviourNames[i] = behaviourClasses[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(behaviourClasses[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<UeBehaviour> objClass);
}
}

View file

@ -1,92 +1,92 @@
package com.ericsson.uecontrol.gui.fragments;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.telephony.TelephonyManager;
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.ericsson.uecontrol.gui.MainActivity;
import com.ericsson.uecontrol.gui.util.CSVWriter;
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.getBitThroughputString(downThroughput));
up_speed.setText(ThroughputCalculator.getBitThroughputString(upThroughput));
downGraph.appendData(new GraphViewData(x, downThroughput), true, 120);
upGraph.appendData(new GraphViewData(x, upThroughput), true, 120);
x++;
MainActivity.logThroughput(downThroughput, upThroughput);
}
});
}
};
public UeControlExecutor.ThroughputListener getThroughputListener(){
return throughputListener;
}
package com.ericsson.uecontrol.gui.fragments;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.telephony.TelephonyManager;
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.ericsson.uecontrol.gui.MainActivity;
import com.ericsson.uecontrol.gui.util.CSVWriter;
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.getBitThroughputString(downThroughput));
up_speed.setText(ThroughputCalculator.getBitThroughputString(upThroughput));
downGraph.appendData(new GraphViewData(x, downThroughput), true, 120);
upGraph.appendData(new GraphViewData(x, upThroughput), true, 120);
x++;
MainActivity.logThroughput(downThroughput, upThroughput);
}
});
}
};
public UeControlExecutor.ThroughputListener getThroughputListener(){
return throughputListener;
}
}

View file

@ -1,92 +1,92 @@
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<UeBehaviour>{
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<UeBehaviour> 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 ImageView warning = (ImageView) vi.findViewById(R.id.warning);
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);
warning.setVisibility(View.INVISIBLE);
}
});
}
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);
}
});
}
public void exception(Exception e){
warning.post(new Runnable() {
public void run() {
warning.setVisibility(View.VISIBLE);
}
});
}
});
return vi;
}
public void setEditable(boolean b) {
editable = b;
}
}
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<UeBehaviour>{
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<UeBehaviour> 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 ImageView warning = (ImageView) vi.findViewById(R.id.warning);
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);
warning.setVisibility(View.INVISIBLE);
}
});
}
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);
}
});
}
public void exception(Exception e){
warning.post(new Runnable() {
public void run() {
warning.setVisibility(View.VISIBLE);
}
});
}
});
return vi;
}
public void setEditable(boolean b) {
editable = b;
}
}

View file

@ -1,112 +1,112 @@
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
}
private Object obj;
private ConfigurationParam[] params;
public Configurator(Object obj){
this.obj = obj;
this.params = getConfiguration(obj);
}
public ConfigurationParam[] getConfiguration(){
return params;
}
protected ConfigurationParam[] getConfiguration(Object obj){
Class c = obj.getClass();
ArrayList<ConfigurationParam> conf = new ArrayList<ConfigurationParam>();
Field[] all = c.getDeclaredFields();
for(Field f : all){
if(f.isAnnotationPresent(Configurable.class) && !Modifier.isStatic(f.getModifiers())) {
try {
conf.add(new ConfigurationParam(f));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return conf.toArray(new ConfigurationParam[conf.size()]);
}
public void setConfiguration(){
for(ConfigurationParam param : params){
try {
param.set();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
public class ConfigurationParam{
protected Field field;
protected String name;
protected String niceName;
protected ConfigType type;
protected Object value;
protected ConfigurationParam(Field f) throws IllegalAccessException {
field = f;
field.setAccessible(true);
name = field.getName();
niceName = field.getAnnotation(Configurable.class).value();
value = field.get(obj);
if (f.getType() == String.class) type = ConfigType.STRING;
else if(f.getType() == int.class) type = ConfigType.INT;
}
public String getName(){return name;}
public String getNiceName(){return niceName;}
public ConfigType getType(){return type;}
public String getString(){
if(value == null)
return null;
return value.toString();}
public void setString(String v){
switch(type){
case STRING:
value = v; break;
case INT:
value = Integer.parseInt(v); break;
}
}
protected void set() throws IllegalAccessException {
field.set(obj, value);
}
}
}
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
}
private Object obj;
private ConfigurationParam[] params;
public Configurator(Object obj){
this.obj = obj;
this.params = getConfiguration(obj);
}
public ConfigurationParam[] getConfiguration(){
return params;
}
protected ConfigurationParam[] getConfiguration(Object obj){
Class c = obj.getClass();
ArrayList<ConfigurationParam> conf = new ArrayList<ConfigurationParam>();
Field[] all = c.getDeclaredFields();
for(Field f : all){
if(f.isAnnotationPresent(Configurable.class) && !Modifier.isStatic(f.getModifiers())) {
try {
conf.add(new ConfigurationParam(f));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return conf.toArray(new ConfigurationParam[conf.size()]);
}
public void setConfiguration(){
for(ConfigurationParam param : params){
try {
param.set();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
public class ConfigurationParam{
protected Field field;
protected String name;
protected String niceName;
protected ConfigType type;
protected Object value;
protected ConfigurationParam(Field f) throws IllegalAccessException {
field = f;
field.setAccessible(true);
name = field.getName();
niceName = field.getAnnotation(Configurable.class).value();
value = field.get(obj);
if (f.getType() == String.class) type = ConfigType.STRING;
else if(f.getType() == int.class) type = ConfigType.INT;
}
public String getName(){return name;}
public String getNiceName(){return niceName;}
public ConfigType getType(){return type;}
public String getString(){
if(value == null)
return null;
return value.toString();}
public void setString(String v){
switch(type){
case STRING:
value = v; break;
case INT:
value = Integer.parseInt(v); break;
}
}
protected void set() throws IllegalAccessException {
field.set(obj, value);
}
}
}

View file

@ -1,73 +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<T> extends ArrayAdapter<T> implements DynamicListView.DynamicListActionListener {
final int INVALID_ID = -1;
private HashMap<T, Integer> mIdMap = new HashMap<T, Integer>();
private List<T> objects;
public StableArrayAdapter(Context context, int textViewResourceId, List<T> 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;
}
/*
* 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<T> extends ArrayAdapter<T> implements DynamicListView.DynamicListActionListener {
final int INVALID_ID = -1;
private HashMap<T, Integer> mIdMap = new HashMap<T, Integer>();
private List<T> objects;
public StableArrayAdapter(Context context, int textViewResourceId, List<T> 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;
}
}

View file

@ -1,16 +1,16 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ericsson.uecontrol.gui.EditActivity">
<!--<com.ericsson.uecontrol.gui.util.TouchInterceptor
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" /> -->
<com.ericsson.uecontrol.gui.util.DynamicListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.ericsson.uecontrol.gui.EditActivity">
<!--<com.ericsson.uecontrol.gui.util.TouchInterceptor
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" /> -->
<com.ericsson.uecontrol.gui.util.DynamicListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>

View file

@ -1,45 +1,45 @@
<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. -->
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment android:id="@+id/status_fragment"
android:layout_width="match_parent"
android:layout_height="150dp"
android:name="com.ericsson.uecontrol.gui.fragments.StatusFragment"
tools:layout="@layout/fragment_status" />
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
If you're not building against API 17 or higher, use
android:layout_gravity="left" instead. -->
<!-- The drawer is given a fixed width in dp and extends the full height of
the container. -->
<!--
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.ericsson.uecontrol.gui.fragments.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer" />
-->
</android.support.v4.widget.DrawerLayout>
<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. -->
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment android:id="@+id/status_fragment"
android:layout_width="match_parent"
android:layout_height="150dp"
android:name="com.ericsson.uecontrol.gui.fragments.StatusFragment"
tools:layout="@layout/fragment_status" />
<!-- As the main content view, the view below consumes the entire
space available using match_parent in both dimensions. -->
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
If you're not building against API 17 or higher, use
android:layout_gravity="left" instead. -->
<!-- The drawer is given a fixed width in dp and extends the full height of
the container. -->
<!--
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.ericsson.uecontrol.gui.fragments.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer" />
-->
</android.support.v4.widget.DrawerLayout>

View file

@ -1,77 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:paddingRight="5dp">
<ImageView
android:id="@+id/draggable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:src="@drawable/draggable"
android:layout_marginRight="5dp"
android:layout_centerVertical="true"
android:visibility="gone" />
<!-- Behaviour name-->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:textColor="#040404"
android:typeface="sans"
android:textSize="17dip"
android:textStyle="bold"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/draggable" />
<!-- Behaviour description -->
<TextView
android:id="@+id/description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#343434"
android:textSize="12dip"
android:text="Description"
android:layout_below="@+id/title"
android:layout_toRightOf="@+id/draggable" />
<!-- Rightend -->
<ProgressBar
android:id="@+id/active"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:visibility="invisible" />
<ImageView
android:id="@+id/warning"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:src="@drawable/warning"
android:layout_marginRight="5dp"
android:layout_centerVertical="true"
android:visibility="invisible"
android:layout_toLeftOf="@+id/active" />
<ProgressBar
android:id="@+id/progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/description"
android:visibility="invisible" />
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:paddingRight="5dp">
<ImageView
android:id="@+id/draggable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:src="@drawable/draggable"
android:layout_marginRight="5dp"
android:layout_centerVertical="true"
android:visibility="gone" />
<!-- Behaviour name-->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:textColor="#040404"
android:typeface="sans"
android:textSize="17dip"
android:textStyle="bold"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/draggable" />
<!-- Behaviour description -->
<TextView
android:id="@+id/description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#343434"
android:textSize="12dip"
android:text="Description"
android:layout_below="@+id/title"
android:layout_toRightOf="@+id/draggable" />
<!-- Rightend -->
<ProgressBar
android:id="@+id/active"
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:visibility="invisible" />
<ImageView
android:id="@+id/warning"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:src="@drawable/warning"
android:layout_marginRight="5dp"
android:layout_centerVertical="true"
android:visibility="invisible"
android:layout_toLeftOf="@+id/active" />
<ProgressBar
android:id="@+id/progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/description"
android:visibility="invisible" />
</RelativeLayout>

View file

@ -1,9 +1,9 @@
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#cccc"
tools:context=".NavigationDrawerFragment" />
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#cccc"
tools:context=".NavigationDrawerFragment" />

View file

@ -1,66 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_dark">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:paddingRight="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:src="@android:drawable/stat_sys_download" />
<TextView
android:layout_width="160dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="0 Mbits"
android:id="@+id/down_speed"
android:textColor="#ffffffff"
android:typeface="sans"
android:layout_weight="0" />
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.08" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView3"
android:src="@android:drawable/stat_sys_upload" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="0 Mbits"
android:id="@+id/up_speed"
android:textColor="#ffffffff"
android:typeface="sans"
android:layout_weight="0.45" />
</LinearLayout>
<LinearLayout
android:id="@+id/graph"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_dark">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1"
android:paddingLeft="10dp"
android:paddingTop="10dp"
android:paddingRight="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:src="@android:drawable/stat_sys_download" />
<TextView
android:layout_width="160dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="0 Mbits"
android:id="@+id/down_speed"
android:textColor="#ffffffff"
android:typeface="sans"
android:layout_weight="0" />
<Space
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.08" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView3"
android:src="@android:drawable/stat_sys_upload" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="0 Mbits"
android:id="@+id/up_speed"
android:textColor="#ffffffff"
android:typeface="sans"
android:layout_weight="0.45" />
</LinearLayout>
<LinearLayout
android:id="@+id/graph"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout>

View file

@ -1,9 +1,9 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.ericsson.uecontrol.gui.EditActivity" >
<item android:id="@+id/action_add"
android:title="@string/action_add"
android:showAsAction="withText|ifRoom" />
</menu>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.ericsson.uecontrol.gui.EditActivity" >
<item android:id="@+id/action_add"
android:title="@string/action_add"
android:showAsAction="withText|ifRoom" />
</menu>

View file

@ -1,6 +1,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>

View file

@ -1,25 +1,25 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<item android:id="@+id/action_execute"
android:title="@string/action_run"
android:showAsAction="withText|ifRoom" />
<item android:id="@+id/action_edit"
android:title="@string/action_edit"
android:orderInCategory="50"
android:showAsAction="never" />
<item android:id="@+id/action_import"
android:title="@string/action_import"
android:orderInCategory="100"
android:showAsAction="never" />
<item android:id="@+id/action_export"
android:title="@string/action_export"
android:orderInCategory="100"
android:showAsAction="never" />
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<item android:id="@+id/action_execute"
android:title="@string/action_run"
android:showAsAction="withText|ifRoom" />
<item android:id="@+id/action_edit"
android:title="@string/action_edit"
android:orderInCategory="50"
android:showAsAction="never" />
<item android:id="@+id/action_import"
android:title="@string/action_import"
android:orderInCategory="100"
android:showAsAction="never" />
<item android:id="@+id/action_export"
android:title="@string/action_export"
android:orderInCategory="100"
android:showAsAction="never" />
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="behaviours" >
<item>com.ericsson.uecontrol.core.behaviour.UeBehaviourFtp</item>
<item>com.ericsson.uecontrol.core.behaviour.UeBehaviourSleep</item>
<item>com.ericsson.uecontrol.core.behaviour.UeBehaviourSurfing</item>
</string-array>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="behaviours" >
<item>com.ericsson.uecontrol.core.behaviour.UeBehaviourFtp</item>
<item>com.ericsson.uecontrol.core.behaviour.UeBehaviourSleep</item>
<item>com.ericsson.uecontrol.core.behaviour.UeBehaviourSurfing</item>
</string-array>
</resources>

View file

@ -1,11 +1,11 @@
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<!-- Per the design guidelines, navigation drawers should be between 240dp and 320dp:
https://developer.android.com/design/patterns/navigation-drawer.html -->
<dimen name="navigation_drawer_width">240dp</dimen>
<dimen name="standard_padding">10dp</dimen>
</resources>
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<!-- Per the design guidelines, navigation drawers should be between 240dp and 320dp:
https://developer.android.com/design/patterns/navigation-drawer.html -->
<dimen name="navigation_drawer_width">240dp</dimen>
<dimen name="standard_padding">10dp</dimen>
</resources>

View file

@ -1,12 +1,12 @@
<resources>
<!--
Layout alias to replace the single-pane version of the layout with a
two-pane version on Large screens.
For more on layout aliases, see:
http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-->
<item name="fragment_item" type="layout">@layout/fragment_list</item>
<resources>
<!--
Layout alias to replace the single-pane version of the layout with a
two-pane version on Large screens.
For more on layout aliases, see:
http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-->
<item name="fragment_item" type="layout">@layout/fragment_list</item>
</resources>

View file

@ -1,30 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">UeControl</string>
<string name="title_section1">Section 1</string>
<string name="title_section2">Section 2</string>
<string name="title_section3">Section 3</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>
<string name="action_run">Run</string>
<string name="action_stop">Stop</string>
<string name="action_edit">Edit</string>
<string name="action_import">Import</string>
<string name="action_export">Export</string>
<string name="action_settings">Settings</string>
<string name="pref_exec_title">Execution Settings</string>
<string name="pref_other_title">Other Settings</string>
<string name="title_activity_edit">Edit</string>
<string name="action_add">Add</string>
<string name="select_behaviour">Select Behaviour</string>
<string name="configure_behaviour">Configure Behaviour</string>
<string name="action_save">Save</string>
<string name="action_cancel">Cancel</string>
<string name="pref_about">About</string>
<string name="pref_logging">Logging</string>
<string name="pref_logging_summ">Enable logging of throughput and other attributes to a csv file</string>
<string name="pref_logging_path">Log Path</string>
<string name="pref_logging_path_summ">Folder where log file will be stored</string>
<string name="title_activity_about">About</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">UeControl</string>
<string name="title_section1">Section 1</string>
<string name="title_section2">Section 2</string>
<string name="title_section3">Section 3</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>
<string name="action_run">Run</string>
<string name="action_stop">Stop</string>
<string name="action_edit">Edit</string>
<string name="action_import">Import</string>
<string name="action_export">Export</string>
<string name="action_settings">Settings</string>
<string name="pref_exec_title">Execution Settings</string>
<string name="pref_other_title">Other Settings</string>
<string name="title_activity_edit">Edit</string>
<string name="action_add">Add</string>
<string name="select_behaviour">Select Behaviour</string>
<string name="configure_behaviour">Configure Behaviour</string>
<string name="action_save">Save</string>
<string name="action_cancel">Cancel</string>
<string name="pref_about">About</string>
<string name="pref_logging">Logging</string>
<string name="pref_logging_summ">Enable logging of throughput and other attributes to a csv file</string>
<string name="pref_logging_path">Log Path</string>
<string name="pref_logging_path_summ">Folder where log file will be stored</string>
<string name="title_activity_about">About</string>
</resources>

View file

@ -1,8 +1,8 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>

View file

@ -1,30 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/pref_exec_title"
android:key="pref_key_storage_settings">
<CheckBoxPreference
android:key="logging"
android:title="@string/pref_logging"
android:summary="@string/pref_logging_summ"
android:defaultValue="false" />
<EditTextPreference
android:key="logging_path"
android:title="@string/pref_logging_path"
android:summary="@string/pref_logging_path_summ"
android:defaultValue="/sdcard/uecontrol/" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/pref_other_title"
android:key="pref_key_storage_settings">
<Preference
android:key="about"
android:title="@string/pref_about"
android:defaultValue="false">
</Preference>
</PreferenceCategory>
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="@string/pref_exec_title"
android:key="pref_key_storage_settings">
<CheckBoxPreference
android:key="logging"
android:title="@string/pref_logging"
android:summary="@string/pref_logging_summ"
android:defaultValue="false" />
<EditTextPreference
android:key="logging_path"
android:title="@string/pref_logging_path"
android:summary="@string/pref_logging_path_summ"
android:defaultValue="/sdcard/uecontrol/" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/pref_other_title"
android:key="pref_key_storage_settings">
<Preference
android:key="about"
android:title="@string/pref_about"
android:defaultValue="false">
</Preference>
</PreferenceCategory>
</PreferenceScreen>

View file

@ -1,19 +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()
}
}
// 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()
}
}

View file

@ -1,18 +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
# 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

180
gradlew.bat vendored
View file

@ -1,90 +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
@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

View file

@ -1 +1 @@
include ':app'
include ':app'