Compare commits

...

5 Commits

Author SHA1 Message Date
Chteufleur 4499278583 Add XMPP real time mode. 2018-10-08 08:19:49 +02:00
Chteufleur 372896ac34 Add clear data buttons. 2018-10-07 22:59:43 +02:00
Chteufleur 0585fb3eb1 Change menu to a nice one. 2018-10-07 20:54:42 +02:00
Chteufleur 7a4fe41d02 Remove unused lastLocation. 2018-10-06 22:13:29 +02:00
Chteufleur beea60cef1 Add gitignore. 2018-10-06 22:12:11 +02:00
63 changed files with 601 additions and 673 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea/libraries/

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: android.arch.core:common:1.0.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/android.arch.core/common/1.0.0/a2d487452376193fc8c103dd2b9bd5f2b1b44563/common-1.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/android.arch.core/common/1.0.0/a41fa3b9a66f3bdd41f98013a1688e969072aaf2/common-1.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: android.arch.lifecycle:common:1.0.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/android.arch.lifecycle/common/1.0.0/e414a4cb28434e25c4f6aa71426eb20cf4874ae9/common-1.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/android.arch.lifecycle/common/1.0.0/39ce4055689b4b766478265a8c661f4165f26dc3/common-1.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: android.arch.lifecycle:runtime-1.0.0">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/runtime-1.0.0.aar/cdb9a750027cbb8c85f08353e72fc1c7/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/runtime-1.0.0.aar/cdb9a750027cbb8c85f08353e72fc1c7/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/android.arch.lifecycle/runtime/1.0.0/1dd0298d8c45d8dfa4d038270247327f23df7a3a/runtime-1.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:animated-vector-drawable-26.1.0">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/animated-vector-drawable-26.1.0.aar/d613c82cc11195fbfed7fd901e855eca/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/animated-vector-drawable-26.1.0.aar/d613c82cc11195fbfed7fd901e855eca/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/animated-vector-drawable/26.1.0/91743e9b07667784f471a3c4748e6883cd810084/animated-vector-drawable-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:appcompat-v7-26.1.0">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/appcompat-v7-26.1.0.aar/d95819845d91c7d41ea53df58c461db7/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/appcompat-v7-26.1.0.aar/d95819845d91c7d41ea53df58c461db7/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/appcompat-v7/26.1.0/2b34456c30d6b6e5db5fa3e8fa02f6cebd5531fd/appcompat-v7-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,8 +1,8 @@
<component name="libraryTable">
<library name="Gradle: com.android.support.constraint:constraint-layout-1.1.2">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/constraint-layout-1.1.2.aar/00a809a27fc62250c8e4b8815c4af738/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/constraint-layout-1.1.2.aar/00a809a27fc62250c8e4b8815c4af738/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/constraint-layout-1.1.2.aar/f9c6f27924c13d28afb28e2766bf144d/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/constraint-layout-1.1.2.aar/f9c6f27924c13d28afb28e2766bf144d/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:design-26.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/design-26.1.0.aar/65046785511affcef54941cace853c1b/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/design-26.1.0.aar/65046785511affcef54941cace853c1b/res" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/design/26.1.0/c7ac62df01dd0a97d93500ad3da7faebf03ba49/design-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:recyclerview-v7-26.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/recyclerview-v7-26.1.0.aar/2b6291273076543057bc89301e60db34/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/recyclerview-v7-26.1.0.aar/2b6291273076543057bc89301e60db34/res" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/recyclerview-v7/26.1.0/63d6891b399433c913fe91ce95a8456de02d367f/recyclerview-v7-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:support-annotations:26.1.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/26.1.0/814258103cf26a15fcc26ecce35f5b7d24b73f8/support-annotations-26.1.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/26.1.0/29ca6aaf2d4976c13dd7c836e91bd2a61b697bf3/support-annotations-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:support-annotations:27.1.1@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/27.1.1/39ded76b5e1ce1c5b2688e1d25cdc20ecee32007/support-annotations-27.1.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/27.1.1/46bebf5bd40146178cb33c7678f3782a09dea6e4/support-annotations-27.1.1-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:support-compat-26.1.0">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-compat-26.1.0.aar/e5c035260a6e7c79afd664c73a985caa/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-compat-26.1.0.aar/e5c035260a6e7c79afd664c73a985caa/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-compat/26.1.0/73bfdb5cca1949a51219d3676700996990ea3b52/support-compat-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:support-core-ui-26.1.0">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-core-ui-26.1.0.aar/cb035c7eaff9e1398aa75d9a9bff18a5/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-core-ui-26.1.0.aar/cb035c7eaff9e1398aa75d9a9bff18a5/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-core-ui/26.1.0/4d52cef4a24bf9939de1d256ca9f0974c6e636a4/support-core-ui-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:support-core-utils-26.1.0">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-core-utils-26.1.0.aar/d18410e4757ddba0d93018bde83681ac/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-core-utils-26.1.0.aar/d18410e4757ddba0d93018bde83681ac/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-core-utils/26.1.0/2b0c3da7f80880bbf365452b354490a77f085c96/support-core-utils-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:support-fragment-26.1.0">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-fragment-26.1.0.aar/5e7b68212b19cef8fe14d9db924b845f/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-fragment-26.1.0.aar/5e7b68212b19cef8fe14d9db924b845f/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-fragment/26.1.0/8279b00f5194701ff18363fa2958c5a26670b0ef/support-fragment-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:support-media-compat-26.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-media-compat-26.1.0.aar/1ca92468064dd9539a184ac2b7807a5f/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-media-compat-26.1.0.aar/1ca92468064dd9539a184ac2b7807a5f/res" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-media-compat/26.1.0/774fd1164ec32514eec562953f723a1920a7fef7/support-media-compat-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:support-v4-26.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-v4-26.1.0.aar/21aa3f03c2c9d81daff8cb4b0f89d926/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-v4-26.1.0.aar/21aa3f03c2c9d81daff8cb4b0f89d926/res" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-v4/26.1.0/9c53eab3272b3b26583b17facac2e90d264b2788/support-v4-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:support-vector-drawable-26.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-vector-drawable-26.1.0.aar/01293c8df327d61e6538928cef1f2ed5/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/support-vector-drawable-26.1.0.aar/01293c8df327d61e6538928cef1f2ed5/res" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/support-vector-drawable/26.1.0/7a59c417eb560e5ddc2de20792ad45b38e422a5b/support-vector-drawable-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,8 +1,8 @@
<component name="libraryTable">
<library name="Gradle: com.android.support.test.espresso:espresso-core-3.0.2">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/espresso-core-3.0.2.aar/77876f9eea343818e38e4fe30cfe5e04/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/espresso-core-3.0.2.aar/77876f9eea343818e38e4fe30cfe5e04/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/espresso-core-3.0.2.aar/3d82a8b11d6dc0de54ea3ad98ee03295/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/espresso-core-3.0.2.aar/3d82a8b11d6dc0de54ea3ad98ee03295/res" />
</CLASSES>
<JAVADOC />
<SOURCES>

View File

@ -1,8 +1,8 @@
<component name="libraryTable">
<library name="Gradle: com.android.support.test.espresso:espresso-idling-resource-3.0.2">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/espresso-idling-resource-3.0.2.aar/465ff76cd63421d1a24fd2e27121842a/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/espresso-idling-resource-3.0.2.aar/465ff76cd63421d1a24fd2e27121842a/res" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/espresso-idling-resource-3.0.2.aar/4f0cc2851ea76c9c66536fcc52634b85/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/espresso-idling-resource-3.0.2.aar/4f0cc2851ea76c9c66536fcc52634b85/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>

View File

@ -1,8 +1,8 @@
<component name="libraryTable">
<library name="Gradle: com.android.support.test:monitor-1.0.2">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/monitor-1.0.2.aar/4b7ea80a5653dd8fdee4721539b5cf35/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/monitor-1.0.2.aar/4b7ea80a5653dd8fdee4721539b5cf35/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/monitor-1.0.2.aar/9ce938bd2588a7e84bbbe32b9999ee6c/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/monitor-1.0.2.aar/9ce938bd2588a7e84bbbe32b9999ee6c/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>

View File

@ -1,8 +1,8 @@
<component name="libraryTable">
<library name="Gradle: com.android.support.test:runner-1.0.2">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/runner-1.0.2.aar/2912fa4e7ce136fe31465c54f0b31475/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/runner-1.0.2.aar/2912fa4e7ce136fe31465c54f0b31475/jars/classes.jar!/" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/runner-1.0.2.aar/209693d1f91ba50221fd49c2511d4492/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/runner-1.0.2.aar/209693d1f91ba50221fd49c2511d4492/res" />
</CLASSES>
<JAVADOC />
<SOURCES>

View File

@ -1,12 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.android.support:transition-26.1.0">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/transition-26.1.0.aar/135436157cd72fdac2229c2d9ec1f36d/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/transition-26.1.0.aar/135436157cd72fdac2229c2d9ec1f36d/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/transition/26.1.0/bf675688e3ad5a0b68c627efa77de94822af2610/transition-26.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: com.google.zxing:core:3.2.1@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.zxing/core/3.2.1/2287494d4f5f9f3a9a2bb6980e3f32053721b315/core-3.2.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.zxing/core/3.2.1/e88788f756edecae963417e07b690e88aaaa7c15/core-3.2.1-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: de.measite.minidns:minidns-core:0.2.4@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/de.measite.minidns/minidns-core/0.2.4/e4a6561fade362814e336c9402b2c4341b6a5189/minidns-core-0.2.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/de.measite.minidns/minidns-core/0.2.4/2bfa0923df30a7254ea0110329c9eebce14d507f/minidns-core-0.2.4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: de.measite.minidns:minidns-dnssec:0.2.4@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/de.measite.minidns/minidns-dnssec/0.2.4/a379c5dc82d6e9d5d6c3fa3c56a048bfbb89d3b6/minidns-dnssec-0.2.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/de.measite.minidns/minidns-dnssec/0.2.4/84d0c25d677b10ff5111a669b05ec678c80b3ec8/minidns-dnssec-0.2.4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: de.measite.minidns:minidns-hla:0.2.4@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/de.measite.minidns/minidns-hla/0.2.4/c4b9a2cf4da635c38ebf7982a276a05850eaaf98/minidns-hla-0.2.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/de.measite.minidns/minidns-hla/0.2.4/19b7f2edf7b15f619261e9475520ad9c96dcbaa4/minidns-hla-0.2.4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: de.measite.minidns:minidns-iterative-resolver:0.2.4@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/de.measite.minidns/minidns-iterative-resolver/0.2.4/bd9864adf15337f87d4ed4b46fd50f395f1cc721/minidns-iterative-resolver-0.2.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/de.measite.minidns/minidns-iterative-resolver/0.2.4/9874a559dda1d698f745bee9885c0be8ada3638d/minidns-iterative-resolver-0.2.4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,10 +0,0 @@
<component name="libraryTable">
<library name="Gradle: me.dm7.barcodescanner:core-1.9">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/core-1.9.aar/35f5bbf1c3c89e4cf8f6be1211d87d50/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/core-1.9.aar/35f5bbf1c3c89e4cf8f6be1211d87d50/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -1,10 +0,0 @@
<component name="libraryTable">
<library name="Gradle: me.dm7.barcodescanner:zxing-1.9">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/zxing-1.9.aar/4fe25337b4e8593ab11fc6034f238ff3/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/zxing-1.9.aar/4fe25337b4e8593ab11fc6034f238ff3/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.igniterealtime.smack:smack-android:4.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-android/4.2.0/1fba3d428a9118497469dd723ae60ab9f44e19ab/smack-android-4.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-android/4.2.0/85500dc0a7abbcce1313431953c47d8bf4728559/smack-android-4.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.igniterealtime.smack:smack-android-extensions:4.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-android-extensions/4.2.0/ed0c66a3b414382155b00d08652145ceaed23856/smack-android-extensions-4.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-android-extensions/4.2.0/bafc8db5015e078bd28c7c8531eabc4a1af900d1/smack-android-extensions-4.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.igniterealtime.smack:smack-core:4.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-core/4.2.0/b460b28484d6315dfa158af0bb9a050c92ea106f/smack-core-4.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-core/4.2.0/2b049a427e166f79c8b6063a54b9d34f2c376e48/smack-core-4.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.igniterealtime.smack:smack-extensions:4.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-extensions/4.2.0/3bffdc845de26ab601ac9a92e53c02f8676609fe/smack-extensions-4.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-extensions/4.2.0/285595c8d6ced29196ea5552148836e69e8d07cc/smack-extensions-4.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.igniterealtime.smack:smack-im:4.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-im/4.2.0/c1805ee14fe07ac65683e4b22d796d30a4171fd9/smack-im-4.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-im/4.2.0/781f1a714249b1330d218b242127a8bdba722839/smack-im-4.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.igniterealtime.smack:smack-resolver-minidns:4.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-resolver-minidns/4.2.0/f455576bef17e16ff5627fee48586aefe3855026/smack-resolver-minidns-4.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-resolver-minidns/4.2.0/d00c3103c0f479f85e3ec9b0a4685625097b612b/smack-resolver-minidns-4.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.igniterealtime.smack:smack-sasl-provided:4.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-sasl-provided/4.2.0/dd5420f029cd3251fd8dfaa3de93ef8a8a607fc8/smack-sasl-provided-4.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-sasl-provided/4.2.0/e5938aef4210cab2b68ef9aa1283fc869cea8537/smack-sasl-provided-4.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.igniterealtime.smack:smack-tcp:4.2.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-tcp/4.2.0/1ebbf8b432a4d154171141dcd5aef800e43ab1cd/smack-tcp-4.2.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.igniterealtime.smack/smack-tcp/4.2.0/84567022565b936ed9d65eb0dceccc8c0e9d6eb3/smack-tcp-4.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.jxmpp:jxmpp-core:0.5.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jxmpp/jxmpp-core/0.5.0/f87f6947d74e7d126965b8a58a5472bbbea5f956/jxmpp-core-0.5.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jxmpp/jxmpp-core/0.5.0/afd7bb9e2de02cd1fd267bbe3b360c1769de726f/jxmpp-core-0.5.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.jxmpp:jxmpp-jid:0.5.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jxmpp/jxmpp-jid/0.5.0/eb66b23d633f6a8c01526a78507dac80afef239c/jxmpp-jid-0.5.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jxmpp/jxmpp-jid/0.5.0/cd9e5d82c11aebf948aed1945c98b7196748b294/jxmpp-jid-0.5.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: org.jxmpp:jxmpp-util-cache:0.5.0@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jxmpp/jxmpp-util-cache/0.5.0/32752e1fdf24320a2363d9b92504abf05f9b6548/jxmpp-util-cache-0.5.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jxmpp/jxmpp-util-cache/0.5.0/dc6cdd925ebeaba7593aa80e377738c431a6f02c/jxmpp-util-cache-0.5.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,8 +1,8 @@
<component name="libraryTable">
<library name="Gradle: org.osmdroid:osmdroid-android-6.0.2">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/osmdroid-android-6.0.2.aar/f3da086d5c64ef8f4f9f765b54a9f360/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/osmdroid-android-6.0.2.aar/f3da086d5c64ef8f4f9f765b54a9f360/jars/classes.jar!/" />
<root url="file://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/osmdroid-android-6.0.2.aar/8d2264ffb021df5ad9bb1e3a64814a3d/res" />
<root url="jar://$USER_HOME$/.gradle/caches/transforms-1/files-1.1/osmdroid-android-6.0.2.aar/8d2264ffb021df5ad9bb1e3a64814a3d/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>

View File

@ -1,11 +0,0 @@
<component name="libraryTable">
<library name="Gradle: xpp3:xpp3:1.1.4c@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/9b988ea84b9e4e9f1874e390ce099b8ac12cfff5/xpp3-1.1.4c.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/xpp3/xpp3/1.1.4c/8dd0ddee19fe6ed0182b18e0e621d1c8b4d8d56/xpp3-1.1.4c-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -8,7 +8,7 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity
android:name=".MainActivity"

View File

@ -18,6 +18,10 @@ import android.os.Vibrator;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
@ -64,7 +68,7 @@ import fr.chteufleur.mytrackingdog.services.ServiceGps;
import fr.chteufleur.mytrackingdog.services.ServiceTrackingDog;
import fr.chteufleur.mytrackingdog.services.ServiceXmpp;
public class MainActivity extends AppCompatActivity implements IOrientationConsumer, Observer {
public class MainActivity extends AppCompatActivity implements IOrientationConsumer, Observer, NavigationView.OnNavigationItemSelectedListener {
public static final String TAG = MainActivity.class.getName();
@ -80,6 +84,8 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
private Context ctx = null;
private MapView map = null;
private DrawerLayout mDrawerLayout;
private NavigationView navigationView;
private int deviceOrientation = 0;
private boolean zoomed = false;
@ -93,7 +99,6 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
private Button add_object;
private TextView textViewCurrentLocation;
private MyLocation lastLocation = null;
private float distance = 0;
@RequiresApi(api = Build.VERSION_CODES.M)
@ -125,6 +130,13 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);
mDrawerLayout = findViewById(R.id.drawer_layout);
navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
map = findViewById(R.id.map);
map.setTileSource(TileSourceFactory.OpenTopo);
@ -310,39 +322,94 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
getMenuInflater().inflate(R.menu.drawer_view, menu);
MenuItem vibrationObjectMenuItem = menu.findItem(R.id.action_active_vibration_object);
vibrationObjectMenuItem.setChecked(serviceTrackingDog.isVibrationNearObjectEnabled());
Menu _menu = navigationView.getMenu();
_menu.findItem(R.id.action_qr_code_generator).setEnabled(false);
_menu.findItem(R.id.action_qr_code_reader).setEnabled(false);
_menu.findItem(R.id.action_active_vibration_object).setIcon(getResources().getDrawable(
serviceTrackingDog.isVibrationNearObjectEnabled() ? R.drawable.ic_check_box_checked : R.drawable.ic_check_box_unchecked)
);
_menu.findItem(R.id.action_active_vibration_object).setChecked(serviceTrackingDog.isVibrationNearObjectEnabled());
navigationView.getMenu().findItem(R.id.action_active_xmpp_real_time_mode).setIcon(getResources().getDrawable(R.drawable.ic_check_box_unchecked));
navigationView.getMenu().findItem(R.id.action_active_xmpp_real_time_mode).setEnabled(false);
navigationView.getMenu().findItem(R.id.action_clear_dog).setEnabled(false);
updateSendTraceMenu();
return super.onCreateOptionsMenu(menu);
}
MenuItem xmppObjectMenuItem = menu.findItem(R.id.action_active_xmpp);
xmppObjectMenuItem.setChecked(serviceTrackingDog.isXmppEnabled());
return true;
private void updateSendTraceMenu() {
boolean isTrailFileExist = serviceTrackingDog.getLastExportedTrailFile() != null;
boolean isXmppActive = serviceTrackingDog.isXmppEnabled();
navigationView.getMenu().findItem(R.id.action_send_gpx_trail).setEnabled(isTrailFileExist);
navigationView.getMenu().findItem(R.id.action_send_gpx_trail_by_xmpp).setEnabled(isXmppActive && isTrailFileExist);
navigationView.getMenu().findItem(R.id.action_clear_trail).setEnabled(isTrailFileExist);
navigationView.getMenu().findItem(R.id.action_clear_dog).setEnabled(lastDogPolyline != null);
}
@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.
if (item.getItemId() == android.R.id.home) {
mDrawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_import_gpx) {
startActivityPickFile();
mDrawerLayout.closeDrawers();
return true;
} else if (id == R.id.action_send_gpx_trail) {
startActivitySendGpxFile();
mDrawerLayout.closeDrawers();
return true;
} else if (id == R.id.action_clear_trail) {
clearTrail();
mDrawerLayout.closeDrawers();
return true;
} else if (id == R.id.action_clear_dog) {
clearDog();
mDrawerLayout.closeDrawers();
return true;
} else if (id == R.id.action_active_vibration_object) {
activeVibrationObject(item);
return true;
} else if (id == R.id.action_active_xmpp) {
activeXmpp(item);
return true;
} else if (id == R.id.action_active_xmpp_real_time_mode) {
activeXmppRealTimeMode(item);
return true;
} else if (id == R.id.action_qr_code_generator) {
startActivityQrCodeGenerator();
mDrawerLayout.closeDrawers();
return true;
} else if (id == R.id.action_qr_code_reader) {
startActivityQrCodeReader();
mDrawerLayout.closeDrawers();
return true;
} else if (id == R.id.action_send_gpx_trail_by_xmpp) {
sendGpxFileByXmpp();
mDrawerLayout.closeDrawers();
return true;
}
return super.onOptionsItemSelected(item);
}
private void startActivityPickFile() {
Intent intent = new Intent(this, FilePicker.class);
intent.putExtra(FilePicker.EXTRA_FILE_PATH, Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + appName);
startActivityForResult(intent, ACTIVITY_REQUEST_PICK_FILE);
return true;
}
} else if (id == R.id.action_qr_code_generator) {
Intent intent = new Intent(this, QRCodeGeneratorActivity.class);
startActivityForResult(intent, ACTIVITY_QR_CODE_GENERATOR);
} else if (id == R.id.action_qr_code_reader) {
Intent intent = new Intent(this, QRCodeReaderActivity.class);
startActivityForResult(intent, ACTIVITY_QR_CODE_READER);
} else if (id == R.id.action_send_gpx_trail) {
private void startActivitySendGpxFile() {
File trailFile = serviceTrackingDog.getLastExportedTrailFile();
if (trailFile != null) {
Intent shareIntent = new Intent();
@ -354,9 +421,87 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
} else {
Toast.makeText(ctx, "Aucune trace enregistré.", Toast.LENGTH_LONG).show();
}
return true;
}
} else if (id == R.id.action_send_gpx_trail_by_xmpp) {
private void clearTrail() {
serviceTrackingDog.clearTrail();
updateSendTraceMenu();
if (lastTrailPolyline != null) {
map.getOverlayManager().remove(lastTrailPolyline);
lastTrailPolyline = null;
}
map.getOverlayManager().removeAll(listTrailObject);
listTrailObject.clear();
this.textViewCurrentLocation.setVisibility(View.GONE);
}
private void clearDog() {
serviceTrackingDog.clearDog();
navigationView.getMenu().findItem(R.id.action_clear_dog).setEnabled(false);
if (lastDogPolyline != null) {
map.getOverlayManager().remove(lastDogPolyline);
lastDogPolyline = null;
}
map.getOverlayManager().removeAll(listDogObject);
listDogObject.clear();
this.textViewCurrentLocation.setVisibility(View.GONE);
}
private void activeVibrationObject(MenuItem item) {
boolean checked = item.isChecked();
item.setChecked(!checked);
serviceTrackingDog.setVibrationNearObjectEnabled(!checked);
navigationView.getMenu().findItem(R.id.action_active_vibration_object).setIcon(getResources().getDrawable(
serviceTrackingDog.isVibrationNearObjectEnabled() ? R.drawable.ic_check_box_checked : R.drawable.ic_check_box_unchecked));
}
private void activeXmpp(MenuItem item) {
boolean checked = item.isChecked();
boolean newStat = !checked;
if (newStat) {
try {
serviceTrackingDog.enableXmpp();
Toast.makeText(ctx, "Connexion XMPP réussie", Toast.LENGTH_SHORT).show();
} catch (InterruptedException | IOException | SmackException | XMPPException e) {
e.printStackTrace();
Toast.makeText(ctx, "Echec de connexion XMPP", Toast.LENGTH_LONG).show();
newStat = false;
}
}
if (!newStat) {
serviceTrackingDog.disableXmpp();
}
navigationView.getMenu().findItem(R.id.action_qr_code_generator).setEnabled(newStat);
navigationView.getMenu().findItem(R.id.action_qr_code_reader).setEnabled(newStat);
navigationView.getMenu().findItem(R.id.action_send_gpx_trail_by_xmpp).setEnabled(newStat && serviceTrackingDog.getLastExportedTrailFile() != null);
navigationView.getMenu().findItem(R.id.action_active_xmpp_real_time_mode).setEnabled(newStat);
item.setChecked(newStat);
item.setIcon(getResources().getDrawable(newStat ? R.drawable.ic_check_box_checked : R.drawable.ic_check_box_unchecked));
}
private void activeXmppRealTimeMode(MenuItem item) {
boolean checked = item.isChecked();
boolean newStat = !checked;
item.setChecked(newStat);
navigationView.getMenu().findItem(R.id.action_active_xmpp_real_time_mode).setIcon(
getResources().getDrawable(newStat ? R.drawable.ic_check_box_checked : R.drawable.ic_check_box_unchecked)
);
serviceTrackingDog.setXmppRealTimeMode(newStat);
}
private void startActivityQrCodeGenerator() {
Intent intent = new Intent(this, QRCodeGeneratorActivity.class);
startActivityForResult(intent, ACTIVITY_QR_CODE_GENERATOR);
}
private void startActivityQrCodeReader() {
Intent intent = new Intent(this, QRCodeReaderActivity.class);
startActivityForResult(intent, ACTIVITY_QR_CODE_READER);
}
private void sendGpxFileByXmpp() {
File trailFile = serviceTrackingDog.getLastExportedTrailFile();
if (trailFile != null) {
try {
@ -367,35 +512,6 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
} else {
Toast.makeText(ctx, "Aucune trace enregistré.", Toast.LENGTH_LONG).show();
}
return true;
} else if (id == R.id.action_active_vibration_object) {
boolean checked = item.isChecked();
item.setChecked(!checked);
serviceTrackingDog.setVibrationNearObjectEnabled(!checked);
return true;
} else if (id == R.id.action_active_xmpp) {
boolean checked = item.isChecked();
boolean newStat = !checked;
item.setChecked(newStat);
if (newStat) {
try {
serviceTrackingDog.enableXmpp();
Toast.makeText(ctx, "Connexion XMPP réussie", Toast.LENGTH_SHORT).show();
} catch (InterruptedException | IOException | SmackException | XMPPException e) {
e.printStackTrace();
Toast.makeText(ctx, "Echec de connexion XMPP", Toast.LENGTH_LONG).show();
item.setChecked(false);
serviceTrackingDog.disableXmpp();
}
} else {
serviceTrackingDog.disableXmpp();
}
return true;
}
return super.onOptionsItemSelected(item);
}
//</editor-fold>
@ -408,6 +524,7 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
serviceTrackingDog.importGpxTrace(new File(data.getStringExtra(FilePicker.EXTRA_FILE_PATH)));
updateDogTrace();
updateTrailTrace();
updateSendTraceMenu();
// Update distance
distance = serviceTrackingDog.calculTrailDistance();
@ -504,6 +621,11 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
//<editor-fold defaultstate="collapsed" desc="Map management">
private Polyline lastDogPolyline = null;
private Polyline lastTrailPolyline = null;
private final List<Marker> listTrailObject = new ArrayList<>();
private final List<Marker> listDogObject = new ArrayList<>();
private void changeStatusTrace() {
serviceTrackingDog.toggleTraceurActivation();
if (serviceTrackingDog.isTraceurActivated()) {
@ -517,6 +639,7 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
this.add_object.setVisibility(View.GONE);
this.start_stop_dog_trace.setVisibility(View.VISIBLE);
}
updateSendTraceMenu();
}
private void changeStatusDogTrace() {
@ -532,6 +655,7 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
this.start_stop_dog_trace.setText(R.string.dog_start);
this.add_object.setVisibility(View.GONE);
this.start_stop_trace.setVisibility(View.VISIBLE);
navigationView.getMenu().findItem(R.id.action_clear_dog).setEnabled(true);
}
}
@ -558,6 +682,11 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
}
});
map.getOverlays().add(marker);
if (isFound) {
listDogObject.add(marker);
} else {
listTrailObject.add(marker);
}
}
private void markAsFound() {
@ -596,15 +725,18 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
return ;
}
Polyline line = new Polyline(map);
line.setTitle("Chien");
line.setSubDescription("Départ: "+listLoc.getFirstLocation().getDatePrint());
line.setColor(Color.BLUE);
line.setPoints(convertListLocation(listLoc));
line.setWidth(LINE_WIDTH_BIG);
line.setGeodesic(true);
line.setInfoWindow(new BasicInfoWindow(R.layout.bonuspack_bubble, map));
map.getOverlayManager().add(line);
if (lastDogPolyline != null) {
map.getOverlayManager().remove(lastDogPolyline);
}
lastDogPolyline = new Polyline(map);
lastDogPolyline.setTitle("Chien");
lastDogPolyline.setSubDescription("Départ: "+listLoc.getFirstLocation().getDatePrint());
lastDogPolyline.setColor(Color.BLUE);
lastDogPolyline.setPoints(convertListLocation(listLoc));
lastDogPolyline.setWidth(LINE_WIDTH_BIG);
lastDogPolyline.setGeodesic(true);
lastDogPolyline.setInfoWindow(new BasicInfoWindow(R.layout.bonuspack_bubble, map));
map.getOverlayManager().add(lastDogPolyline);
map.invalidate();
}
@ -614,15 +746,18 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
return ;
}
Polyline line = new Polyline(map);
line.setTitle("Traceur");
line.setSubDescription("Départ: "+listLoc.getFirstLocation().getDatePrint());
line.setColor(Color.RED);
line.setPoints(convertListLocation(listLoc));
line.setWidth(LINE_WIDTH_BIG);
line.setGeodesic(true);
line.setInfoWindow(new BasicInfoWindow(R.layout.bonuspack_bubble, map));
map.getOverlayManager().add(line);
if (lastTrailPolyline != null) {
map.getOverlayManager().remove(lastTrailPolyline);
}
lastTrailPolyline = new Polyline(map);
lastTrailPolyline.setTitle("Traceur");
lastTrailPolyline.setSubDescription("Départ: "+listLoc.getFirstLocation().getDatePrint());
lastTrailPolyline.setColor(Color.RED);
lastTrailPolyline.setPoints(convertListLocation(listLoc));
lastTrailPolyline.setWidth(LINE_WIDTH_BIG);
lastTrailPolyline.setGeodesic(true);
lastTrailPolyline.setInfoWindow(new BasicInfoWindow(R.layout.bonuspack_bubble, map));
map.getOverlayManager().add(lastTrailPolyline);
map.invalidate();
}
@ -703,6 +838,16 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
Toast.makeText(ctx, "Echec dans la reception du fichier", Toast.LENGTH_LONG).show();
}
});
} else if (notification.isAction(ServiceXmpp.NOTIF_NEW_REAL_TIME_MODE)) {
runOnUiThread(new Runnable() {
@Override
public void run() {
navigationView.getMenu().findItem(R.id.action_active_xmpp_real_time_mode).setIcon(
getResources().getDrawable(serviceTrackingDog.isXmppRealTimeMode() ? R.drawable.ic_check_box_checked : R.drawable.ic_check_box_unchecked)
);
navigationView.getMenu().findItem(R.id.action_active_xmpp_real_time_mode).setChecked(serviceTrackingDog.isXmppRealTimeMode());
}
});
}
}
@ -721,11 +866,9 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
updateTrailTrace();
distance = serviceTrackingDog.calculTrailDistance();
updatePlaceholder();
lastLocation = onNewLocation;
} else if (serviceTrackingDog.isDogActivated()) {
updateDogTrace();
updatePlaceholder();
lastLocation = onNewLocation;
}
float orientation = serviceTrackingDog.getOrientation(deviceOrientation);

View File

@ -92,4 +92,17 @@ public class Traces {
public boolean isDogActivated() {
return this.dogActivated;
}
public void clearListPointTraceur() {
listPointTraceur.clear();
}
public void clearListPointDog() {
listPointDog.clear();
}
public void clearListObjectsTrail() {
listPointObjectsTrail.clear();
}
public void clearListObjectDog() {
listPointObjectsDog.clear();
}
}

View File

@ -0,0 +1,86 @@
package fr.chteufleur.mytrackingdog.models.xmpp.commands;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.commands.AdHocCommandNote;
import org.jivesoftware.smackx.commands.LocalCommand;
import org.jivesoftware.smackx.xdata.Form;
import org.jivesoftware.smackx.xdata.FormField;
import org.jivesoftware.smackx.xdata.packet.DataForm;
import org.jxmpp.jid.Jid;
import java.util.List;
import fr.chteufleur.mytrackingdog.services.ServiceXmpp;
public class RealTimeModeCommand extends LocalCommand {
public static final String TAG = ObjectGeolocCommand.class.getName();
public static final String FIELD_PARAM_IS_ACTIVE = "is_active";
private final ServiceXmpp serviceXmpp;
public RealTimeModeCommand(ServiceXmpp serviceXmpp) {
this.serviceXmpp = serviceXmpp;
}
@Override
public boolean isLastStage() {
return getCurrentStage() == 1;
}
@Override
public boolean hasPermission(Jid jid) {
return true;
}
@Override
public void execute() throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {Form result = new Form(DataForm.Type.form);
setExecuteAction(Action.next);
FormField resultFieldIsActive = new FormField(FIELD_PARAM_IS_ACTIVE);
resultFieldIsActive.setLabel(FIELD_PARAM_IS_ACTIVE);
resultFieldIsActive.setType(FormField.Type.bool);
result.addField(resultFieldIsActive);
this.addActionAvailable(Action.next);
setForm(result);
}
@Override
public void next(Form response) throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
FormField formIsValide = response.getField(FIELD_PARAM_IS_ACTIVE);
if (formIsValide != null) {
List<String> isValueStrs = formIsValide.getValues();
boolean isValue = false;
for (String isValueStr : isValueStrs) {
isValue = isValueStr.equalsIgnoreCase("1") || isValueStr.equalsIgnoreCase("true") || isValueStr.equalsIgnoreCase("yes");
}
if (serviceXmpp != null) {
serviceXmpp.addIsRealTimeMode(isValue);
}
this.addNote(new AdHocCommandNote(AdHocCommandNote.Type.info, "SUCCESS"));
} else {
this.addNote((new AdHocCommandNote(AdHocCommandNote.Type.error, "FAIL")));
}
}
@Override
public void complete(Form response) throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
}
@Override
public void prev() throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
}
@Override
public void cancel() throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
}
}

View File

@ -230,6 +230,15 @@ public class ServiceTrackingDog implements Observer {
}
return distance;
}
public void clearTrail() {
traces.clearListObjectsTrail();
traces.clearListPointTraceur();
lastExportedTrailFile = null;
}
public void clearDog() {
traces.clearListObjectDog();
traces.clearListPointDog();
}
//</editor-fold>
//</editor-fold>
@ -368,6 +377,23 @@ public class ServiceTrackingDog implements Observer {
serviceXmpp.sendFile(file);
}
}
public void setXmppRealTimeMode(boolean b) {
if (serviceXmpp != null) {
serviceXmpp.setRealTimeMode(b);
try {
serviceXmpp.sendCommandeRealTimeMode();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public boolean isXmppRealTimeMode() {
boolean ret = false;
if (serviceXmpp != null) {
ret = serviceXmpp.isRealTimeMode();
}
return ret;
}
//<editor-fold defaultstate="collapsed" desc="Commands">
public void sendXmppCommandStartTrail() throws XmppStringprepException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException {
if (serviceXmpp != null) {

View File

@ -43,6 +43,7 @@ import fr.chteufleur.mytrackingdog.QRCodeGeneratorActivity;
import fr.chteufleur.mytrackingdog.models.Notification;
import fr.chteufleur.mytrackingdog.models.beans.MyLocation;
import fr.chteufleur.mytrackingdog.models.xmpp.commands.ObjectGeolocCommand;
import fr.chteufleur.mytrackingdog.models.xmpp.commands.RealTimeModeCommand;
import fr.chteufleur.mytrackingdog.models.xmpp.commands.StartTrailGeolocCommand;
import fr.chteufleur.mytrackingdog.models.xmpp.commands.StopTrailGeolocCommand;
import fr.chteufleur.mytrackingdog.models.xmpp.commands.TrailGeolocCommand;
@ -59,15 +60,18 @@ public class ServiceXmpp extends Observable implements PresenceEventListener, Fi
public static final String NOTIF_RECEIVING_FILE = ServiceXmpp.class.getName()+".receivingfile";
public static final String NOTIF_RECEIVING_FILE_COMPLETTED = NOTIF_RECEIVING_FILE+".completed";
public static final String NOTIF_RECEIVING_FILE_FAIL = NOTIF_RECEIVING_FILE+".receivingfile";
public static final String NOTIF_NEW_REAL_TIME_MODE = ServiceXmpp.class.getName()+"realtimemode";
public static final String NOTIF_NEW_OBJECT_VALUE_LOCATION = NOTIF_NEW_OBJECT+".value.location";
public static final String NOTIF_NEW_LOCATION_VALUE_LOCATION = NOTIF_NEW_LOCATION+".value.location";
public static final String NOTIF_NEW_PRESENCE_RECEIVED_VALUE_JID = NOTIF_NEW_PRESENCE_RECEIVED+".value.jid";
public static final String NOTIF_NEW_REAL_TIME_MODE_VALUE = NOTIF_NEW_REAL_TIME_MODE+".value";
private static final String XMPP_NODE_TRAIL_GEOLOC = "trail_geoloc";
private static final String XMPP_NODE_OBJECT_GEOLOC = "object_geoloc";
private static final String XMPP_NODE_START_TRAIL_GEOLOC = "start_trail_geoloc";
private static final String XMPP_NODE_STOP_TRAIL_GEOLOC = "stop_trail_geoloc";
private static final String XMPP_NODE_REAL_TIME_MODE = "real_time_mode";
private static final String XMPP_IP_SERVER = "51.254.205.203";
private static final String XMPP_DOMAIN_SERVER = "anon.xmpp.kingpenguin.tk";
@ -85,6 +89,7 @@ public class ServiceXmpp extends Observable implements PresenceEventListener, Fi
private final ServiceXmpp thsi;
private boolean isEnable = false;
private boolean isRealTimeMode = false;
public ServiceXmpp(Resources resources) throws UnknownHostException, XmppStringprepException {
this.resources = resources;
@ -170,6 +175,14 @@ public class ServiceXmpp extends Observable implements PresenceEventListener, Fi
return isEnable;
}
public void setRealTimeMode(boolean b) {
this.isRealTimeMode = b;
}
public boolean isRealTimeMode() {
return this.isRealTimeMode;
}
//<editor-fold defaultstate="collapsed" desc="Presence">
public void sendPresenceAvailable() throws SmackException.NotConnectedException, InterruptedException, XmppStringprepException {
if (otherJid != null) {
@ -270,6 +283,12 @@ public class ServiceXmpp extends Observable implements PresenceEventListener, Fi
return new StopTrailGeolocCommand(thsi);
}
});
commandManager.registerCommand(XMPP_NODE_REAL_TIME_MODE, XMPP_NODE_REAL_TIME_MODE, new LocalCommandFactory() {
@Override
public LocalCommand getInstance() {
return new RealTimeModeCommand(thsi);
}
});
}
public void startTrailGeoloc() {
@ -298,8 +317,15 @@ public class ServiceXmpp extends Observable implements PresenceEventListener, Fi
notifyObservers(new Notification(NOTIF_NEW_OBJECT).addExtra(NOTIF_NEW_OBJECT_VALUE_LOCATION, objectLocation));
}
public void addIsRealTimeMode(boolean isRealTimeMode) {
Log.i(TAG, "Add real time mode");
this.isRealTimeMode = isRealTimeMode;
setChanged();
notifyObservers(new Notification(NOTIF_NEW_REAL_TIME_MODE).addExtra(NOTIF_NEW_REAL_TIME_MODE_VALUE, isRealTimeMode));
}
public void sendCommandStartTrail() throws XmppStringprepException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException {
if (isOtherJidSet()) {
if (isOtherJidSet() && isRealTimeMode) {
Log.i(TAG, "Send command start");
RemoteCommand command = commandManager.getRemoteCommand(JidCreate.fullFrom(otherJid), XMPP_NODE_START_TRAIL_GEOLOC);
command.execute();
@ -307,7 +333,7 @@ public class ServiceXmpp extends Observable implements PresenceEventListener, Fi
}
public void sendCommandStopTrail() throws XmppStringprepException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException {
if (isOtherJidSet()) {
if (isOtherJidSet() && isRealTimeMode) {
Log.i(TAG, "Send command stop");
RemoteCommand command = commandManager.getRemoteCommand(JidCreate.fullFrom(otherJid), XMPP_NODE_STOP_TRAIL_GEOLOC);
command.execute();
@ -315,7 +341,7 @@ public class ServiceXmpp extends Observable implements PresenceEventListener, Fi
}
public void sendCommandObjectTrail(double lat, double lon, long time) throws Exception {
if (isOtherJidSet()) {
if (isOtherJidSet() && isRealTimeMode) {
Log.i(TAG, "Send command object");
RemoteCommand command = commandManager.getRemoteCommand(JidCreate.fullFrom(otherJid), XMPP_NODE_OBJECT_GEOLOC);
command.execute();
@ -331,7 +357,7 @@ public class ServiceXmpp extends Observable implements PresenceEventListener, Fi
}
public void sendCommandLocationTrail(double lat, double lon, long time) throws Exception {
if (isOtherJidSet()) {
if (isOtherJidSet() && isRealTimeMode) {
Log.i(TAG, "Send command location");
RemoteCommand command = commandManager.getRemoteCommand(JidCreate.fullFrom(otherJid), XMPP_NODE_TRAIL_GEOLOC);
command.execute();
@ -345,6 +371,20 @@ public class ServiceXmpp extends Observable implements PresenceEventListener, Fi
command.next(form);
}
}
public void sendCommandeRealTimeMode() throws Exception {
if (isOtherJidSet()) {
Log.i(TAG, "Send commande real time mode");
RemoteCommand command = commandManager.getRemoteCommand(JidCreate.fullFrom(otherJid), XMPP_NODE_REAL_TIME_MODE);
command.execute();
if (command.getForm() == null) {
throw new Exception("Didn't get form back");
}
Form form = command.getForm().createAnswerForm();
form.setAnswer(RealTimeModeCommand.FIELD_PARAM_IS_ACTIVE, isRealTimeMode);
command.next(form);
}
}
//</editor-fold>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.11,0 2,-0.9 2,-2L21,5c0,-1.1 -0.89,-2 -2,-2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
</vector>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

View File

@ -1,5 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
@ -16,7 +23,7 @@
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
app:popupTheme="@style/ThemeOverlay.AppCompat.ActionBar" />
<TextView android:id="@+id/textViewCurrentLocation"
android:layout_width="fill_parent"
@ -82,4 +89,13 @@
android:textColor="#ffffff" />
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
</android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="@menu/drawer_view"/>
</android.support.v4.widget.DrawerLayout>

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_import_gpx"
android:title="@string/action_import_gpx"
android:icon="@drawable/ic_import" />
<item
android:id="@+id/action_send_gpx_trail"
android:title="@string/action_send_gpx_trail"
android:icon="@drawable/ic_share" />
<item
android:id="@+id/action_clear_trail"
android:title="@string/action_clear_trail"
android:icon="@drawable/ic_clear_trail" />
<item
android:id="@+id/action_clear_dog"
android:title="@string/action_clear_dog"
android:icon="@drawable/ic_clear_dog" />
<item
android:id="@+id/action_active_vibration_object"
android:title="@string/action_active_vibration_object"
android:icon="@drawable/ic_check_box_unchecked" />
<item
android:title="@string/menu_title_xmpp" >
<menu>
<item
android:id="@+id/action_active_xmpp"
android:title="@string/action_active_xmpp"
android:icon="@drawable/ic_check_box_unchecked" />
<item
android:id="@+id/action_active_xmpp_real_time_mode"
android:title="@string/action_active_xmpp_real_time_mode"
android:icon="@drawable/ic_check_box_unchecked" />
<item
android:id="@+id/action_qr_code_generator"
android:title="@string/action_qr_code_generator" />
<item
android:id="@+id/action_qr_code_reader"
android:title="@string/action_qr_code_reader" />
<item
android:id="@+id/action_send_gpx_trail_by_xmpp"
android:title="@string/action_send_gpx_trail_by_xmpp"
android:icon="@drawable/ic_share" />
</menu>
</item>
</menu>

View File

@ -1,42 +0,0 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="fr.chteufleur.mytrackingdog.MainActivity">
<item
android:id="@+id/action_import_gpx"
android:orderInCategory="100"
android:title="@string/action_import_gpx"
app:showAsAction="never" />
<item
android:id="@+id/action_send_gpx_trail"
android:orderInCategory="100"
android:title="@string/action_send_gpx_trail"
app:showAsAction="never" />
<item
android:id="@+id/action_send_gpx_trail_by_xmpp"
android:orderInCategory="100"
android:title="@string/action_send_gpx_trail_by_xmpp"
app:showAsAction="never" />
<item
android:id="@+id/action_active_vibration_object"
android:checkable="true"
android:orderInCategory="100"
android:title="@string/action_active_vibration_object"
app:showAsAction="never" />
<item
android:id="@+id/action_qr_code_generator"
android:orderInCategory="100"
android:title="@string/action_qr_code_generator"
app:showAsAction="never" />
<item
android:id="@+id/action_qr_code_reader"
android:orderInCategory="100"
android:title="@string/action_qr_code_reader"
app:showAsAction="never" />
<item
android:id="@+id/action_active_xmpp"
android:checkable="true"
android:orderInCategory="100"
android:title="@string/action_active_xmpp"
app:showAsAction="never" />
</menu>

View File

@ -9,10 +9,14 @@
<string name="action_import_gpx">Import GPX</string>
<string name="action_send_gpx_trail">Envoyer trace du traceur</string>
<string name="action_send_gpx_trail_by_xmpp">Envoyer trace du traceur par XMPP</string>
<string name="action_send_to">Envoyer par</string>
<string name="action_clear_trail">Supprimer données traceur</string>
<string name="action_clear_dog">Supprimer données chien</string>
<string name="action_active_vibration_object">Active vibration objets</string>
<string name="action_qr_code_generator">Affiche identifiant</string>
<string name="action_qr_code_reader">Lecture identifiant</string>
<string name="menu_title_xmpp">XMPP</string>
<string name="action_active_xmpp">Active XMPP</string>
<string name="action_active_xmpp_real_time_mode">Active mode temps réel</string>
<string name="action_send_gpx_trail_by_xmpp">Envoyer trace du traceur</string>
</resources>