Anonymous XMPP connection + preparing Ad-Hoc command
This commit is contained in:
parent
fd2947d9b8
commit
e41c3e9948
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<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>
|
||||
53
app/app.iml
53
app/app.iml
|
|
@ -116,6 +116,31 @@
|
|||
</content>
|
||||
<orderEntry type="jdk" jdkName="Android API 26 Platform" jdkType="Android SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Gradle: org.igniterealtime.smack:smack-resolver-minidns:4.2.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.jxmpp:jxmpp-jid:0.5.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.osmdroid:osmdroid-android-6.0.2" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-1.1.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-media-compat-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: de.measite.minidns:minidns-hla:0.2.4@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:26.1.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-v4-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.igniterealtime.smack:smack-extensions:4.2.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7-26.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: xpp3:xpp3:1.1.4c@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.0.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui-26.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:monitor-1.0.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.2@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: me.dm7.barcodescanner:core-1.9" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.igniterealtime.smack:smack-sasl-provided:4.2.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:design-26.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: de.measite.minidns:minidns-iterative-resolver:0.2.4@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.igniterealtime.smack:smack-tcp:4.2.0@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner-1.0.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:animated-vector-drawable-26.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support:support-annotations:27.1.1@jar" level="project" />
|
||||
|
|
@ -123,30 +148,24 @@
|
|||
<orderEntry type="library" name="Gradle: com.android.support:appcompat-v7-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-fragment-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.core:common:1.0.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.osmdroid:osmdroid-android-6.0.2" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-1.1.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-media-compat-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:26.1.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-v4-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-compat-26.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:recyclerview-v7-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.jxmpp:jxmpp-util-cache:0.5.0@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core-3.0.2" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.igniterealtime.smack:smack-core:4.2.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.google.zxing:core:3.2.1@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:common:1.0.0@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-vector-drawable-26.1.0" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-core-ui-26.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:monitor-1.0.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:support-core-utils-26.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource-3.0.2" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.2@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: me.dm7.barcodescanner:zxing-1.9" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.jxmpp:jxmpp-core:0.5.0@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: com.android.support:design-26.1.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.igniterealtime.smack:smack-im:4.2.0@jar" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.igniterealtime.smack:smack-android:4.2.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: de.measite.minidns:minidns-core:0.2.4@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: de.measite.minidns:minidns-dnssec:0.2.4@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.igniterealtime.smack:smack-android-extensions:4.2.0@jar" level="project" />
|
||||
<orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime-1.0.0" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
|
|
@ -28,4 +28,13 @@ dependencies {
|
|||
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
||||
|
||||
implementation 'org.osmdroid:osmdroid-android:6.0.2'
|
||||
// XMPP (Smack)
|
||||
//implementation "org.igniterealtime.smack:smack-android:4.2.0"
|
||||
implementation "org.igniterealtime.smack:smack-android-extensions:4.2.0"
|
||||
implementation "org.igniterealtime.smack:smack-tcp:4.2.0"
|
||||
|
||||
// QR Code (Zxing)
|
||||
implementation 'com.google.zxing:core:3.2.1'
|
||||
implementation 'me.dm7.barcodescanner:zxing:1.9'
|
||||
//implementation 'com.journeyapps:zxing-android-embedded:3.4.0'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@
|
|||
</activity>
|
||||
|
||||
<activity android:name=".FilePicker"></activity>
|
||||
|
||||
<activity android:name=".QRCodeGeneratorActivity"></activity>
|
||||
<activity android:name=".QRCodeReaderActivity"></activity>
|
||||
</application>
|
||||
|
||||
|
||||
|
|
@ -32,4 +35,5 @@
|
|||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
</manifest>
|
||||
|
|
@ -18,6 +18,7 @@ import android.support.annotation.NonNull;
|
|||
import android.support.annotation.RequiresApi;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
|
|
@ -28,6 +29,9 @@ import android.widget.Button;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jxmpp.stringprep.XmppStringprepException;
|
||||
import org.osmdroid.api.IMapController;
|
||||
import org.osmdroid.config.Configuration;
|
||||
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
|
||||
|
|
@ -44,6 +48,7 @@ import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
|
|||
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Observable;
|
||||
|
|
@ -53,16 +58,22 @@ import fr.chteufleur.mytrackingdog.models.beans.MyLocation;
|
|||
import fr.chteufleur.mytrackingdog.models.beans.MyLocationArray;
|
||||
import fr.chteufleur.mytrackingdog.models.beans.WayPointLocation;
|
||||
import fr.chteufleur.mytrackingdog.services.ServiceGps;
|
||||
import fr.chteufleur.mytrackingdog.services.ServiceXmpp;
|
||||
|
||||
public class MainActivity extends AppCompatActivity implements IOrientationConsumer, Observer {
|
||||
|
||||
public static final String TAG = MainActivity.class.getName();
|
||||
|
||||
private static final int ACTIVITY_REQUEST_PICK_FILE = 1;
|
||||
private static final int ACTIVITY_QR_CODE_GENERATOR = 2;
|
||||
private static final int ACTIVITY_QR_CODE_READER = 3;
|
||||
|
||||
public static String appName = "";
|
||||
|
||||
private MyLocationNewOverlay mLocationOverlay;
|
||||
private IOrientationProvider compass = null;
|
||||
private ServiceGps serviceGps = null;
|
||||
private ServiceXmpp serviceXmpp = null;
|
||||
|
||||
private Context ctx = null;
|
||||
private MapView map = null;
|
||||
|
|
@ -188,6 +199,22 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
);
|
||||
serviceGps.addObserver(this);
|
||||
}
|
||||
|
||||
if (serviceXmpp == null) {
|
||||
try {
|
||||
serviceXmpp = new ServiceXmpp(getResources());
|
||||
serviceXmpp.addObserver(this);
|
||||
serviceXmpp.connect();
|
||||
} catch (InterruptedException e) {
|
||||
Toast.makeText(ctx, "Échec du service XMPP.", Toast.LENGTH_LONG).show();
|
||||
} catch (XMPPException e) {
|
||||
Toast.makeText(ctx, "Échec du service XMPP.", Toast.LENGTH_LONG).show();
|
||||
} catch (SmackException e) {
|
||||
Toast.makeText(ctx, "Échec du service XMPP.", Toast.LENGTH_LONG).show();
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(ctx, "Échec du service XMPP.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void changeStatusTrace() {
|
||||
|
|
@ -365,6 +392,9 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
if (serviceGps != null) {
|
||||
serviceGps.stop();
|
||||
}
|
||||
if (serviceXmpp != null) {
|
||||
serviceXmpp.close();
|
||||
}
|
||||
zoomed = false;
|
||||
}
|
||||
|
||||
|
|
@ -389,9 +419,17 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
if (id == R.id.action_import_gpx) {
|
||||
Intent intent = new Intent(this, FilePicker.class);
|
||||
intent.putExtra(FilePicker.EXTRA_FILE_PATH, Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + appName);
|
||||
startActivityForResult(intent, REQUEST_PICK_FILE);
|
||||
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) {
|
||||
File trailFile = serviceGps.getLastExportedTrailFile();
|
||||
if (trailFile != null) {
|
||||
|
|
@ -415,13 +453,12 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
private static final int REQUEST_PICK_FILE = 1;
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
switch (requestCode) {
|
||||
case REQUEST_PICK_FILE:
|
||||
case ACTIVITY_REQUEST_PICK_FILE:
|
||||
if (data.hasExtra(FilePicker.EXTRA_FILE_PATH)) {
|
||||
serviceGps.importGpxTrace(new File(data.getStringExtra(FilePicker.EXTRA_FILE_PATH)));
|
||||
updateDogTrace();
|
||||
|
|
@ -444,6 +481,23 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ACTIVITY_QR_CODE_READER:
|
||||
if (data.hasExtra(QRCodeReaderActivity.EXTRA_SCANNED_TEXT)) {
|
||||
String text = data.getStringExtra(QRCodeReaderActivity.EXTRA_SCANNED_TEXT);
|
||||
try {
|
||||
serviceXmpp.setOtherJid(text);
|
||||
serviceXmpp.sendPresenceAvailable();
|
||||
Log.i(TAG, "TEXT: "+text);
|
||||
} catch (SmackException.NotConnectedException e) {
|
||||
Log.e(TAG, "Fail send presence", e);
|
||||
} catch (InterruptedException e) {
|
||||
Log.e(TAG, "Fail send presence", e);
|
||||
} catch (XmppStringprepException e) {
|
||||
Log.e(TAG, "Fail send presence", e);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -557,44 +611,53 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
@Override
|
||||
public void update(Observable observable, Object o) {
|
||||
if (observable == serviceGps) {
|
||||
if (o instanceof String && o.equals(ServiceGps.NOTIF_NEW_LOCATION)) {
|
||||
MyLocation loc = serviceGps.getCurrentLocation();
|
||||
if (loc != null) {
|
||||
GeoPoint currentPoint = new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude());
|
||||
if (mLocationOverlay.isFollowLocationEnabled()) {
|
||||
map.getController().setCenter(currentPoint);
|
||||
}
|
||||
if (serviceGps.isTraceurActivated()) {
|
||||
updateTrailTrace();
|
||||
if (lastLocation != null) {
|
||||
distance += loc.distanceTo(lastLocation);
|
||||
updateDistance();
|
||||
}
|
||||
lastLocation = loc;
|
||||
} else if (serviceGps.isDogActivated()) {
|
||||
updateDogTrace();
|
||||
if (lastLocation != null) {
|
||||
distance += loc.distanceTo(lastLocation);
|
||||
updateDistance();
|
||||
}
|
||||
lastLocation = loc;
|
||||
}
|
||||
updateServiceGps(o);
|
||||
} else if (observable == serviceXmpp) {
|
||||
updateServiceXmpp(o);
|
||||
}
|
||||
}
|
||||
|
||||
float orientation = serviceGps.getOrientation(deviceOrientation);
|
||||
if (orientation >= 0) {
|
||||
map.setMapOrientation(orientation);
|
||||
public void updateServiceGps(Object o) {
|
||||
if (o instanceof String && o.equals(ServiceGps.NOTIF_NEW_LOCATION)) {
|
||||
MyLocation loc = serviceGps.getCurrentLocation();
|
||||
if (loc != null) {
|
||||
GeoPoint currentPoint = new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude());
|
||||
if (mLocationOverlay.isFollowLocationEnabled()) {
|
||||
map.getController().setCenter(currentPoint);
|
||||
}
|
||||
if (serviceGps.isTraceurActivated()) {
|
||||
updateTrailTrace();
|
||||
if (lastLocation != null) {
|
||||
distance += loc.distanceTo(lastLocation);
|
||||
updateDistance();
|
||||
}
|
||||
lastLocation = loc;
|
||||
} else if (serviceGps.isDogActivated()) {
|
||||
updateDogTrace();
|
||||
if (lastLocation != null) {
|
||||
distance += loc.distanceTo(lastLocation);
|
||||
updateDistance();
|
||||
}
|
||||
lastLocation = loc;
|
||||
}
|
||||
|
||||
if (!zoomed) {
|
||||
IMapController mapController = map.getController();
|
||||
mapController.setZoom(20.0);
|
||||
zoomed = true;
|
||||
}
|
||||
float orientation = serviceGps.getOrientation(deviceOrientation);
|
||||
if (orientation >= 0) {
|
||||
map.setMapOrientation(orientation);
|
||||
}
|
||||
|
||||
if (!zoomed) {
|
||||
IMapController mapController = map.getController();
|
||||
mapController.setZoom(20.0);
|
||||
zoomed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updateServiceXmpp(Object o) {
|
||||
}
|
||||
|
||||
private List<GeoPoint> convertListLocation(MyLocationArray list) {
|
||||
List<GeoPoint> ret = new ArrayList<>();
|
||||
if (list != null) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
package fr.chteufleur.mytrackingdog;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
import com.google.zxing.MultiFormatWriter;
|
||||
import com.google.zxing.WriterException;
|
||||
import com.google.zxing.common.BitMatrix;
|
||||
|
||||
public class QRCodeGeneratorActivity extends Activity {
|
||||
|
||||
public static final String TAG = QRCodeGeneratorActivity.class.getName();
|
||||
public final static int QRcodeWidth = 500 ;
|
||||
|
||||
private ImageView imageView;
|
||||
private static Bitmap image = null;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.qr_code_generator);
|
||||
|
||||
imageView = findViewById(R.id.qr_code_image);
|
||||
if (image != null) {
|
||||
imageView.setImageBitmap(image);
|
||||
}
|
||||
}
|
||||
|
||||
public static void textToImageEncode(String value, Resources resources) throws WriterException {
|
||||
Log.i(TAG, "QR CODE "+value);
|
||||
BitMatrix bitMatrix;
|
||||
try {
|
||||
bitMatrix = new MultiFormatWriter().encode(
|
||||
value,
|
||||
BarcodeFormat.DATA_MATRIX.QR_CODE,
|
||||
QRcodeWidth, QRcodeWidth, null
|
||||
);
|
||||
} catch (IllegalArgumentException Illegalargumentexception) {
|
||||
return;
|
||||
}
|
||||
int bitMatrixWidth = bitMatrix.getWidth();
|
||||
int bitMatrixHeight = bitMatrix.getHeight();
|
||||
int[] pixels = new int[bitMatrixWidth * bitMatrixHeight];
|
||||
for (int y = 0; y < bitMatrixHeight; y++) {
|
||||
int offset = y * bitMatrixWidth;
|
||||
for (int x = 0; x < bitMatrixWidth; x++) {
|
||||
pixels[offset + x] = bitMatrix.get(x, y) ?
|
||||
resources.getColor(R.color.black):resources.getColor(R.color.white);
|
||||
}
|
||||
}
|
||||
image = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444);
|
||||
image.setPixels(pixels, 0, 500, 0, 0, bitMatrixWidth, bitMatrixHeight);
|
||||
Log.i(TAG, "FIN GENERATION QR CODE");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package fr.chteufleur.mytrackingdog;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.RequiresApi;
|
||||
|
||||
import com.google.zxing.Result;
|
||||
|
||||
import me.dm7.barcodescanner.zxing.ZXingScannerView;
|
||||
|
||||
public class QRCodeReaderActivity extends Activity implements ZXingScannerView.ResultHandler {
|
||||
|
||||
private final int REQUEST_CODE_ASK_PERMISSION = 123;
|
||||
|
||||
public static final String EXTRA_SCANNED_TEXT = "scanned_text";
|
||||
public static final String TAG = QRCodeReaderActivity.class.getName();
|
||||
|
||||
private ZXingScannerView mScannerView;
|
||||
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||
protected void checkPermissions() {
|
||||
int hasCameraPermission = checkSelfPermission(Manifest.permission.CAMERA);
|
||||
if (hasCameraPermission != PackageManager.PERMISSION_GRANTED) {
|
||||
requestPermissions(new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_ASK_PERMISSION);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
checkPermissions();
|
||||
}
|
||||
setContentView(R.layout.qr_code_reader);
|
||||
mScannerView = new ZXingScannerView(this);
|
||||
setContentView(mScannerView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
|
||||
mScannerView.startCamera(); // Start camera on resume
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
mScannerView.stopCamera(); // Stop camera on pause
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleResult(Result rawResult) {
|
||||
Intent extra = new Intent();
|
||||
extra.putExtra(EXTRA_SCANNED_TEXT, rawResult.getText());
|
||||
setResult(RESULT_OK, extra);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
package fr.chteufleur.mytrackingdog.models.xmpp.commands;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
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;
|
||||
|
||||
public class TrailGeolocCommand extends LocalCommand {
|
||||
|
||||
public static final String TAG = TrailGeolocCommand.class.getName();
|
||||
|
||||
public static final String FIELD_PARAM_LATITUDE = "latitude";
|
||||
public static final String FIELD_PARAM_LONGITUDE = "longitude";
|
||||
public static final String FIELD_PARAM_TIME = "time";
|
||||
|
||||
private long latitude;
|
||||
private long longitude;
|
||||
private int time;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isLastStage() {
|
||||
return getCurrentStage() == 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(Jid jid) {
|
||||
// TODO
|
||||
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 resultFieldLatitude = new FormField(FIELD_PARAM_LATITUDE);
|
||||
resultFieldLatitude.setLabel(FIELD_PARAM_LATITUDE);
|
||||
resultFieldLatitude.setType(FormField.Type.text_single);
|
||||
result.addField(resultFieldLatitude);
|
||||
|
||||
FormField resultFieldLongitude = new FormField(FIELD_PARAM_LONGITUDE);
|
||||
resultFieldLongitude.setLabel(FIELD_PARAM_LONGITUDE);
|
||||
resultFieldLongitude.setType(FormField.Type.text_single);
|
||||
result.addField(resultFieldLongitude);
|
||||
|
||||
FormField resultFieldTime = new FormField(FIELD_PARAM_TIME);
|
||||
resultFieldTime.setLabel(FIELD_PARAM_TIME);
|
||||
resultFieldTime.setType(FormField.Type.text_single);
|
||||
result.addField(resultFieldTime);
|
||||
|
||||
this.addActionAvailable(Action.next);
|
||||
setForm(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void next(Form response) throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
|
||||
FormField formLatitude = response.getField(FIELD_PARAM_LATITUDE);
|
||||
FormField formLongitude = response.getField(FIELD_PARAM_LONGITUDE);
|
||||
FormField formTime = response.getField(FIELD_PARAM_TIME);
|
||||
|
||||
if (formLatitude != null && formLongitude != null && formTime != null) {
|
||||
List<String> latitudeStrs = formLatitude.getValues();
|
||||
List<String> longitudeStrs = response.getField(FIELD_PARAM_LONGITUDE).getValues();
|
||||
List<String> timeStrs = response.getField(FIELD_PARAM_TIME).getValues();
|
||||
|
||||
for (String latitudeStr : latitudeStrs) {
|
||||
Log.i(TAG, "Next latitude: " + latitudeStr);
|
||||
}
|
||||
for (String longitudeStr : longitudeStrs) {
|
||||
Log.i(TAG, "Next longitude: " + longitudeStr);
|
||||
}
|
||||
for (String timeStr : timeStrs) {
|
||||
Log.i(TAG, "Next time: " + timeStr);
|
||||
}
|
||||
|
||||
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 {
|
||||
}
|
||||
}
|
||||
|
|
@ -34,7 +34,7 @@ import fr.chteufleur.mytrackingdog.models.beans.WayPointLocation;
|
|||
public class ServiceGps extends Observable implements IServiceGps, LocationListener {
|
||||
|
||||
private static final String TAG = ServiceGps.class.getName();
|
||||
public static final String NOTIF_NEW_LOCATION = "fr.chteufleur.mytrackingdog.services.servicegps.newlocation";
|
||||
public static final String NOTIF_NEW_LOCATION = ServiceGps.class.getName()+".newlocation";
|
||||
|
||||
private static final String PREF_VIBRATION_NEAR_OBJECT_ENABLED = "PREF_VIBRATION_NEAR_OBJECT_ENABLED";
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,177 @@
|
|||
package fr.chteufleur.mytrackingdog.services;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.os.StrictMode;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.zxing.WriterException;
|
||||
|
||||
import org.jivesoftware.smack.AbstractXMPPConnection;
|
||||
import org.jivesoftware.smack.ConnectionConfiguration;
|
||||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.packet.Presence;
|
||||
import org.jivesoftware.smack.roster.PresenceEventListener;
|
||||
import org.jivesoftware.smack.roster.Roster;
|
||||
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
|
||||
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
|
||||
import org.jivesoftware.smackx.commands.AdHocCommandManager;
|
||||
import org.jivesoftware.smackx.commands.LocalCommand;
|
||||
import org.jxmpp.jid.BareJid;
|
||||
import org.jxmpp.jid.FullJid;
|
||||
import org.jxmpp.jid.Jid;
|
||||
import org.jxmpp.jid.impl.JidCreate;
|
||||
import org.jxmpp.jid.impl.LocalAndDomainpartJid;
|
||||
import org.jxmpp.jid.impl.LocalDomainAndResourcepartJid;
|
||||
import org.jxmpp.stringprep.XmppStringprepException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.Inet4Address;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Observable;
|
||||
|
||||
import fr.chteufleur.mytrackingdog.QRCodeGeneratorActivity;
|
||||
import fr.chteufleur.mytrackingdog.models.xmpp.commands.TrailGeolocCommand;
|
||||
|
||||
public class ServiceXmpp extends Observable implements PresenceEventListener {
|
||||
public static final String TAG = ServiceXmpp.class.getName();
|
||||
|
||||
private static final String XMPP_NODE_TRAIL_GEOLOC = "trail_geoloc";
|
||||
private static final String XMPP_IP_SERVER = "51.254.205.203";
|
||||
private static final String XMPP_DOMAIN_SERVER = "anon.xmpp.kingpenguin.tk";
|
||||
//private static final String XMPP_DOMAIN_SERVER = "kingpenguin.tk";
|
||||
private static final int XMPP_PORT = 5222;
|
||||
|
||||
private final Resources resources;
|
||||
private final XMPPTCPConnectionConfiguration configuration;
|
||||
private AdHocCommandManager commandManager;
|
||||
private AbstractXMPPConnection connection;
|
||||
private String jid;
|
||||
|
||||
private String otherJid;
|
||||
|
||||
private Roster roster;
|
||||
|
||||
public ServiceXmpp(Resources resources) throws UnknownHostException, XmppStringprepException {
|
||||
this.resources = resources;
|
||||
this.configuration = XMPPTCPConnectionConfiguration.builder()
|
||||
.setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible)
|
||||
.setHostAddress(Inet4Address.getByName(XMPP_IP_SERVER))
|
||||
.setPort(XMPP_PORT)
|
||||
.setXmppDomain(XMPP_DOMAIN_SERVER)
|
||||
.setDebuggerEnabled(true)
|
||||
.performSaslAnonymousAuthentication()
|
||||
.setKeystoreType(null)
|
||||
.build();
|
||||
}
|
||||
|
||||
public boolean connect() throws InterruptedException, XMPPException, SmackException, IOException {
|
||||
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
|
||||
StrictMode.setThreadPolicy(policy);
|
||||
|
||||
boolean isConnected;
|
||||
connection = new XMPPTCPConnection(configuration);
|
||||
|
||||
commandManager = AdHocCommandManager.getAddHocCommandsManager(connection);
|
||||
|
||||
connection.connect();
|
||||
connection.login();
|
||||
|
||||
commandManager.registerCommand(XMPP_NODE_TRAIL_GEOLOC, XMPP_NODE_TRAIL_GEOLOC, TrailGeolocCommand.class);
|
||||
|
||||
roster = Roster.getInstanceFor(connection);
|
||||
roster.addPresenceEventListener(this);
|
||||
|
||||
isConnected = connection.isConnected();
|
||||
if (isConnected) {
|
||||
jid = connection.getUser().asEntityBareJidString();
|
||||
Log.i(TAG, "JID: "+jid);
|
||||
try {
|
||||
QRCodeGeneratorActivity.textToImageEncode(jid, resources);
|
||||
} catch (WriterException ex) {
|
||||
Log.e(TAG, "Failed to generate QR Code");
|
||||
}
|
||||
}
|
||||
return isConnected;
|
||||
}
|
||||
|
||||
public void close() {
|
||||
if (otherJid != null) {
|
||||
try {
|
||||
sendPresenceUnavailable(otherJid);
|
||||
} catch (SmackException.NotConnectedException ex) {
|
||||
} catch (InterruptedException ex) {
|
||||
} catch (XmppStringprepException ex) {
|
||||
}
|
||||
}
|
||||
if (connection != null) {
|
||||
connection.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
//<editor-fold defaultstate="collapsed" desc="Presence">
|
||||
public void sendPresenceAvailable() throws SmackException.NotConnectedException, InterruptedException, XmppStringprepException {
|
||||
if (otherJid != null) {
|
||||
sendPresence(JidCreate.bareFrom(otherJid), Presence.Type.available);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendPresenceAvailable(String to) throws SmackException.NotConnectedException, InterruptedException, XmppStringprepException {
|
||||
sendPresence(JidCreate.bareFrom(to), Presence.Type.available);
|
||||
}
|
||||
|
||||
public void sendPresenceUnavailable(String to) throws SmackException.NotConnectedException, InterruptedException, XmppStringprepException {
|
||||
sendPresence(JidCreate.bareFrom(to), Presence.Type.unavailable);
|
||||
}
|
||||
|
||||
private void sendPresence(Jid to, Presence.Type type) throws SmackException.NotConnectedException, InterruptedException {
|
||||
if (connection != null) {
|
||||
Presence presence = new Presence(to, type);
|
||||
presence.setStatus("");
|
||||
connection.sendStanza(presence);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void presenceAvailable(FullJid address, Presence availablePresence) {
|
||||
String bareJid = address.asBareJid().toString();
|
||||
if (!bareJid.equals(jid) && (otherJid == null || !bareJid.equals(otherJid))) {
|
||||
Log.i(TAG, "PRESENCE AVAILABLE RECEIVED FROM "+bareJid);
|
||||
otherJid = bareJid;
|
||||
try {
|
||||
sendPresenceAvailable(bareJid);
|
||||
} catch (SmackException.NotConnectedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (XmppStringprepException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void presenceUnavailable(FullJid address, Presence presence) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void presenceError(Jid address, Presence errorPresence) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void presenceSubscribed(BareJid address, Presence subscribedPresence) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void presenceUnsubscribed(BareJid address, Presence unsubscribedPresence) {
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
public void setOtherJid(String otherJid) {
|
||||
this.otherJid = otherJid;
|
||||
}
|
||||
|
||||
public boolean isOtherJidSet() {
|
||||
return this.otherJid != null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout 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:orientation="vertical"
|
||||
tools:context="fr.chteufleur.mytrackingdog.QRCodeGeneratorActivity">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/qr_code_image"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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"
|
||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin"
|
||||
tools:context="fr.chteufleur.mytrackingdog.QRCodeReaderActivity">
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
@ -18,6 +18,14 @@
|
|||
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" />
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -3,4 +3,6 @@
|
|||
<color name="colorPrimary">#3F51B5</color>
|
||||
<color name="colorPrimaryDark">#303F9F</color>
|
||||
<color name="colorAccent">#FF4081</color>
|
||||
<color name="black">#000000</color>
|
||||
<color name="white">#ffffff</color>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
<resources>
|
||||
<dimen name="fab_margin">16dp</dimen>
|
||||
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -11,4 +11,6 @@
|
|||
<string name="action_send_gpx_trail">Envoyer trace du traceur</string>
|
||||
<string name="action_send_to">Envoyer par</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>
|
||||
</resources>
|
||||
|
|
|
|||
Loading…
Reference in New Issue