Compare commits
8 Commits
11df4593ab
...
7b1c18971a
| Author | SHA1 | Date |
|---|---|---|
|
|
7b1c18971a | |
|
|
538930c6a1 | |
|
|
0941e945f6 | |
|
|
4c41b3c41f | |
|
|
8a75d0fd4e | |
|
|
28003f7300 | |
|
|
94c7e2c5f0 | |
|
|
6d1fe2d5e8 |
29
app/app.iml
|
|
@ -49,13 +49,6 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
|
||||
|
|
@ -63,6 +56,13 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
|
||||
|
|
@ -70,13 +70,6 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
|
|
@ -84,6 +77,13 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" />
|
||||
|
|
@ -95,6 +95,7 @@
|
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-apk" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-main-apk-res" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@
|
|||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
|
||||
|
||||
|
|
@ -25,6 +24,7 @@
|
|||
|
||||
<activity android:name=".QRCodeGeneratorActivity"></activity>
|
||||
<activity android:name=".QRCodeReaderActivity"></activity>
|
||||
<activity android:name=".XmppFriendsListActivity"></activity>
|
||||
</application>
|
||||
|
||||
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 18 KiB |
|
|
@ -3,6 +3,7 @@ package fr.chteufleur.mytrackingdog;
|
|||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
|
|
@ -22,8 +23,10 @@ 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.AlertDialog;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.text.InputType;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
|
@ -32,11 +35,13 @@ import android.view.Surface;
|
|||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.roster.RosterEntry;
|
||||
import org.jxmpp.stringprep.XmppStringprepException;
|
||||
import org.osmdroid.api.IMapController;
|
||||
import org.osmdroid.config.Configuration;
|
||||
|
|
@ -59,6 +64,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
import java.util.Set;
|
||||
|
||||
import fr.chteufleur.mytrackingdog.models.Notification;
|
||||
import fr.chteufleur.mytrackingdog.models.beans.MyLocation;
|
||||
|
|
@ -75,6 +81,7 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
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;
|
||||
private static final int ACTIVITY_XMPP_FRIENDS_LIST = 4;
|
||||
|
||||
private ServiceTrackingDog serviceTrackingDog = null;
|
||||
public static String appName = "";
|
||||
|
|
@ -403,6 +410,10 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
sendGpxFileByXmpp();
|
||||
mDrawerLayout.closeDrawers();
|
||||
return true;
|
||||
} else if (id == R.id.action_xmpp_friends_list) {
|
||||
startActivityXmppFriendsList();
|
||||
mDrawerLayout.closeDrawers();
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
|
|
@ -485,6 +496,8 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
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);
|
||||
navigationView.getMenu().findItem(R.id.action_xmpp_friends_list).setEnabled(newStat);
|
||||
navigationView.getMenu().findItem(R.id.action_xmpp_friends_list).setEnabled(newStat);
|
||||
item.setChecked(newStat);
|
||||
item.setIcon(getResources().getDrawable(newStat ? R.drawable.ic_check_box_checked : R.drawable.ic_check_box_unchecked));
|
||||
}
|
||||
|
|
@ -509,6 +522,24 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
startActivityForResult(intent, ACTIVITY_QR_CODE_READER);
|
||||
}
|
||||
|
||||
private void startActivityXmppFriendsList() {
|
||||
Intent intent = new Intent(this, XmppFriendsListActivity.class);
|
||||
Set<RosterEntry> rosterEntries = serviceTrackingDog.getRosterEntries();
|
||||
String[] friendsListArray = new String[rosterEntries.size()];
|
||||
int i = 0;
|
||||
for (RosterEntry rosterEntry: rosterEntries) {
|
||||
String name = rosterEntry.getName();
|
||||
if (name != null) {
|
||||
friendsListArray[i] = name;
|
||||
} else {
|
||||
friendsListArray[i] = rosterEntry.getJid().asBareJid().toString();
|
||||
}
|
||||
i++;
|
||||
}
|
||||
intent.putExtra(XmppFriendsListActivity.EXTRA_FRIENDS_LIST, friendsListArray);
|
||||
startActivityForResult(intent, ACTIVITY_XMPP_FRIENDS_LIST);
|
||||
}
|
||||
|
||||
private void sendGpxFileByXmpp() {
|
||||
File trailFile = serviceTrackingDog.getLastExportedTrailFile();
|
||||
if (trailFile != null) {
|
||||
|
|
@ -531,6 +562,7 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
if (data.hasExtra(FilePicker.EXTRA_FILE_PATH)) {
|
||||
String traceType = data.getStringExtra(FilePicker.EXTRA_TRACE_TYPE);
|
||||
if (traceType != null && traceType.equals(FilePicker.EXTRA_TRACE_TYPE_VALUE_DOG)) {
|
||||
clearDog();
|
||||
serviceTrackingDog.importDogGpxTrace(new File(data.getStringExtra(FilePicker.EXTRA_FILE_PATH)));
|
||||
updateDogTrace();
|
||||
|
||||
|
|
@ -544,6 +576,7 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
updatePlaceholder(getTextDog());
|
||||
|
||||
} else if (traceType != null && traceType.equals(FilePicker.EXTRA_TRACE_TYPE_VALUE_TRAIL)) {
|
||||
clearTrail();
|
||||
serviceTrackingDog.importTrailGpxTrace(new File(data.getStringExtra(FilePicker.EXTRA_FILE_PATH)));
|
||||
updateTrailTrace();
|
||||
|
||||
|
|
@ -564,12 +597,69 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
|
||||
case ACTIVITY_QR_CODE_READER:
|
||||
if (data.hasExtra(QRCodeReaderActivity.EXTRA_SCANNED_TEXT)) {
|
||||
String text = data.getStringExtra(QRCodeReaderActivity.EXTRA_SCANNED_TEXT);
|
||||
final String text = data.getStringExtra(QRCodeReaderActivity.EXTRA_SCANNED_TEXT);
|
||||
try {
|
||||
serviceTrackingDog.setOtherJid(text);
|
||||
serviceTrackingDog.sendCommandConnexion(text);
|
||||
|
||||
boolean isInRoster = serviceTrackingDog.isInRoster(text);
|
||||
if (!isInRoster) {
|
||||
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
|
||||
dialogBuilder.setTitle("Ajout à la liste d’amis");
|
||||
dialogBuilder.setMessage("Voulez-vous ajouter cette personne à votre liste d’amis ?");
|
||||
final EditText inputName = new EditText(this);
|
||||
inputName.setHint("Donner un nom");
|
||||
inputName.setInputType(InputType.TYPE_CLASS_TEXT);
|
||||
dialogBuilder.setView(inputName);
|
||||
dialogBuilder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
try {
|
||||
serviceTrackingDog.sendSubscription(text);
|
||||
|
||||
final String _name = inputName.getText().toString();
|
||||
if (!_name.equals("")) {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
serviceTrackingDog.setJidName(text, _name);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
} catch (SmackException.NotConnectedException | InterruptedException | XmppStringprepException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
dialogBuilder.setNegativeButton("Non", null);
|
||||
AlertDialog dialog = dialogBuilder.create();
|
||||
dialog.show();
|
||||
}
|
||||
Log.i(TAG, "TEXT: "+text);
|
||||
} catch (SmackException.NotConnectedException | InterruptedException | XmppStringprepException e) {
|
||||
Log.e(TAG, "Fail send presence", e);
|
||||
} catch (XmppStringprepException e) {
|
||||
Log.e(TAG, "Fail send connexion command", e);
|
||||
Toast.makeText(ctx, "Echec connexion avec le matériel", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ACTIVITY_XMPP_FRIENDS_LIST:
|
||||
if (data.hasExtra(XmppFriendsListActivity.EXTRA_SELECTED_FRIEND)) {
|
||||
String selectedFriend = data.getStringExtra(XmppFriendsListActivity.EXTRA_SELECTED_FRIEND);
|
||||
String friendJid;
|
||||
if (selectedFriend.contains("@")) {
|
||||
friendJid = selectedFriend;
|
||||
} else {
|
||||
friendJid = serviceTrackingDog.getFullJidByName(selectedFriend);
|
||||
}
|
||||
try {
|
||||
serviceTrackingDog.sendCommandConnexion(friendJid);
|
||||
Log.i(TAG, "Connexion to: "+selectedFriend);
|
||||
} catch (XmppStringprepException e) {
|
||||
Log.e(TAG, "Fail send connexion command", e);
|
||||
Toast.makeText(ctx, "Echec connexion avec le matériel", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
|
@ -860,6 +950,49 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
|
|||
navigationView.getMenu().findItem(R.id.action_active_xmpp_real_time_mode).setChecked(serviceTrackingDog.isXmppRealTimeMode());
|
||||
}
|
||||
});
|
||||
} else if (notification.isAction(ServiceXmpp.NOTIF_NEW_PRESENCE_SUBSCRIPTION)) {
|
||||
final String _jid = (String) notification.getExtra(ServiceXmpp.NOTIF_NEW_PRESENCE_RECEIVED_VALUE_JID);
|
||||
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle("Demande d'ami");
|
||||
builder.setMessage("Voulez-vous l'ajouter dans votre liste d'ami ?");
|
||||
final EditText inputName = new EditText(this);
|
||||
inputName.setHint("Donner un nom");
|
||||
inputName.setInputType(InputType.TYPE_CLASS_TEXT);
|
||||
builder.setView(inputName);
|
||||
builder.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
try {
|
||||
serviceTrackingDog.sendAcceptSubscription(_jid);
|
||||
serviceTrackingDog.sendSubscription(_jid);
|
||||
|
||||
final String _name = inputName.getText().toString();
|
||||
if (!_name.equals("")) {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
serviceTrackingDog.setJidName(_jid, _name);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
} catch (SmackException.NotConnectedException | XmppStringprepException | InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton("Non", null);
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(ctx, "Demande d'ami", Toast.LENGTH_LONG).show();
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,46 @@
|
|||
package fr.chteufleur.mytrackingdog;
|
||||
|
||||
import android.app.ListActivity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ListAdapter;
|
||||
import android.widget.ListView;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class XmppFriendsListActivity extends ListActivity {
|
||||
|
||||
public static final String EXTRA_FRIENDS_LIST = "extra_friends_list";
|
||||
public static final String EXTRA_SELECTED_FRIEND = "extra_selected_friend";
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.xmpp_friends_list);
|
||||
|
||||
Intent intent = getIntent();
|
||||
String[] friendsListArray = intent.getStringArrayExtra(EXTRA_FRIENDS_LIST);
|
||||
List<String> list = Arrays.asList(friendsListArray); // Doesn't work
|
||||
ArrayAdapter<String> listDataAdapter = new ArrayAdapter<>(this, R.layout.xmpp_friend_info, R.id.xmpp_friend_info, list);
|
||||
this.setListAdapter(listDataAdapter);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onListItemClick(ListView l, View v, int position, long id) {
|
||||
ListAdapter listAdapter = l.getAdapter();
|
||||
// Get user selected item object.
|
||||
String selectedFriend = (String) listAdapter.getItem(position);
|
||||
|
||||
Intent extra = new Intent();
|
||||
extra.putExtra(EXTRA_SELECTED_FRIEND, selectedFriend);
|
||||
setResult(RESULT_OK, extra);
|
||||
finish();
|
||||
|
||||
super.onListItemClick(l, v, position, id);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
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.jxmpp.jid.Jid;
|
||||
|
||||
import fr.chteufleur.mytrackingdog.QRCodeGeneratorActivity;
|
||||
import fr.chteufleur.mytrackingdog.services.ServiceXmpp;
|
||||
|
||||
public class ConnexionCommand extends LocalCommand {
|
||||
|
||||
private final ServiceXmpp serviceXmpp;
|
||||
private Jid jid = null;
|
||||
|
||||
public ConnexionCommand(ServiceXmpp serviceXmpp) {
|
||||
this.serviceXmpp = serviceXmpp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLastStage() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(Jid jid) {
|
||||
this.jid = jid;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
|
||||
if (serviceXmpp != null) {
|
||||
serviceXmpp.setOtherJid(jid.toString());
|
||||
}
|
||||
this.addNote(new AdHocCommandNote(AdHocCommandNote.Type.info, "SUCCESS"));
|
||||
QRCodeGeneratorActivity.pressBackButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void next(Form response) throws SmackException.NoResponseException, XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException {
|
||||
}
|
||||
|
||||
@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 {
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package fr.chteufleur.mytrackingdog.models.xmpp.commands.send;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import org.jivesoftware.smackx.commands.AdHocCommandManager;
|
||||
import org.jivesoftware.smackx.commands.RemoteCommand;
|
||||
import org.jxmpp.jid.FullJid;
|
||||
|
||||
import fr.chteufleur.mytrackingdog.services.ServiceXmpp;
|
||||
|
||||
public class SendConnexionCommand extends SendCommand {
|
||||
|
||||
public SendConnexionCommand(AdHocCommandManager commandManager, FullJid to) {
|
||||
super(commandManager, to);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void executeCommand() throws Exception {
|
||||
Log.i(TAG, "Send command connexion");
|
||||
RemoteCommand command = commandManager.getRemoteCommand(to, ServiceXmpp.XMPP_NODE_CONNEXION);
|
||||
command.execute();
|
||||
}
|
||||
}
|
||||
|
|
@ -11,6 +11,7 @@ import android.os.Vibrator;
|
|||
|
||||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.roster.RosterEntry;
|
||||
import org.jxmpp.stringprep.XmppStringprepException;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
|
|
@ -23,6 +24,8 @@ import java.util.Date;
|
|||
import java.util.List;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import fr.chteufleur.mytrackingdog.QRCodeGeneratorActivity;
|
||||
import fr.chteufleur.mytrackingdog.models.ExportGpx;
|
||||
|
|
@ -281,8 +284,6 @@ public class ServiceTrackingDog implements Observer {
|
|||
currentLocationProvider = LocationProvider.XMPP;
|
||||
} else if (notification.isAction(ServiceXmpp.NOTIF_STOP_TRAIL)) {
|
||||
currentLocationProvider = LocationProvider.GPS;
|
||||
} else if (notification.isAction(ServiceXmpp.NOTIF_NEW_PRESENCE_RECEIVED)) {
|
||||
QRCodeGeneratorActivity.pressBackButton();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -366,12 +367,14 @@ public class ServiceTrackingDog implements Observer {
|
|||
}
|
||||
return ret;
|
||||
}
|
||||
/*
|
||||
public void setOtherJid(String otherJid) throws SmackException.NotConnectedException, InterruptedException, XmppStringprepException {
|
||||
if (serviceXmpp != null && otherJid != null) {
|
||||
serviceXmpp.setOtherJid(otherJid);
|
||||
serviceXmpp.sendPresenceAvailable();
|
||||
serviceXmpp.sendPresenceAvailable(); // TODO send connexion command
|
||||
}
|
||||
}
|
||||
*/
|
||||
public void sendXmppFile(File file) throws XmppStringprepException, SmackException {
|
||||
if (serviceXmpp != null) {
|
||||
serviceXmpp.sendFile(file);
|
||||
|
|
@ -394,6 +397,44 @@ public class ServiceTrackingDog implements Observer {
|
|||
}
|
||||
return ret;
|
||||
}
|
||||
public Set<RosterEntry> getRosterEntries() {
|
||||
Set<RosterEntry> ret;
|
||||
if (serviceXmpp != null) {
|
||||
ret = serviceXmpp.getRosterEntries();
|
||||
} else {
|
||||
ret = new TreeSet<>();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
public boolean isInRoster(String jid) {
|
||||
boolean ret = false;
|
||||
if (serviceXmpp != null) {
|
||||
ret = serviceXmpp.isInRoster(jid);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
public String getFullJidByName(String name) {
|
||||
String ret = "";
|
||||
if (serviceXmpp != null) {
|
||||
ret = serviceXmpp.getFullJidByName(name);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
public void setJidName(String jid, String name) {
|
||||
if (serviceXmpp != null) {
|
||||
serviceXmpp.setJidName(jid, name);
|
||||
}
|
||||
}
|
||||
public void sendSubscription(String fullJid) throws SmackException.NotConnectedException, XmppStringprepException, InterruptedException {
|
||||
if (serviceXmpp != null) {
|
||||
serviceXmpp.sendPresenceSubscribe(fullJid);
|
||||
}
|
||||
}
|
||||
public void sendAcceptSubscription(String fullJid) throws SmackException.NotConnectedException, XmppStringprepException, InterruptedException {
|
||||
if (serviceXmpp != null) {
|
||||
serviceXmpp.sendPresenceSubscribed(fullJid);
|
||||
}
|
||||
}
|
||||
//<editor-fold defaultstate="collapsed" desc="Commands">
|
||||
public void sendXmppCommandStartTrail() throws XmppStringprepException {
|
||||
if (serviceXmpp != null) {
|
||||
|
|
@ -415,6 +456,12 @@ public class ServiceTrackingDog implements Observer {
|
|||
serviceXmpp.sendCommandLocationTrail(lat, lon, time);
|
||||
}
|
||||
}
|
||||
public void sendCommandConnexion(String jid) throws XmppStringprepException {
|
||||
if (serviceXmpp != null) {
|
||||
serviceXmpp.sendCommandConnexion(jid);
|
||||
serviceXmpp.setOtherJid(jid);
|
||||
}
|
||||
}
|
||||
//</editor-fold>
|
||||
//</editor-fold>
|
||||
|
||||
|
|
|
|||
|
|
@ -12,11 +12,15 @@ import org.jivesoftware.smack.AbstractXMPPConnection;
|
|||
import org.jivesoftware.smack.ConnectionConfiguration;
|
||||
import org.jivesoftware.smack.ConnectionListener;
|
||||
import org.jivesoftware.smack.SmackException;
|
||||
import org.jivesoftware.smack.StanzaListener;
|
||||
import org.jivesoftware.smack.XMPPConnection;
|
||||
import org.jivesoftware.smack.XMPPException;
|
||||
import org.jivesoftware.smack.filter.PresenceTypeFilter;
|
||||
import org.jivesoftware.smack.filter.StanzaFilter;
|
||||
import org.jivesoftware.smack.packet.Presence;
|
||||
import org.jivesoftware.smack.roster.PresenceEventListener;
|
||||
import org.jivesoftware.smack.packet.Stanza;
|
||||
import org.jivesoftware.smack.roster.Roster;
|
||||
import org.jivesoftware.smack.roster.RosterEntry;
|
||||
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
|
||||
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
|
||||
import org.jivesoftware.smackx.commands.AdHocCommandManager;
|
||||
|
|
@ -29,8 +33,6 @@ import org.jivesoftware.smackx.filetransfer.FileTransferRequest;
|
|||
import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;
|
||||
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
|
||||
import org.jivesoftware.smackx.iqregister.AccountManager;
|
||||
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.parts.Localpart;
|
||||
|
|
@ -43,25 +45,28 @@ import java.net.Inet4Address;
|
|||
import java.net.UnknownHostException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Observable;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import fr.chteufleur.mytrackingdog.QRCodeGeneratorActivity;
|
||||
import fr.chteufleur.mytrackingdog.models.Notification;
|
||||
import fr.chteufleur.mytrackingdog.models.beans.MyLocation;
|
||||
import fr.chteufleur.mytrackingdog.models.beans.RandomString;
|
||||
import fr.chteufleur.mytrackingdog.models.xmpp.commands.ConnexionCommand;
|
||||
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;
|
||||
import fr.chteufleur.mytrackingdog.models.xmpp.commands.send.SendCommand;
|
||||
import fr.chteufleur.mytrackingdog.models.xmpp.commands.send.SendConnexionCommand;
|
||||
import fr.chteufleur.mytrackingdog.models.xmpp.commands.send.SendObjectLocationCommand;
|
||||
import fr.chteufleur.mytrackingdog.models.xmpp.commands.send.SendRealTimeModeCommand;
|
||||
import fr.chteufleur.mytrackingdog.models.xmpp.commands.send.SendStartTrailCommand;
|
||||
import fr.chteufleur.mytrackingdog.models.xmpp.commands.send.SendStopTrailCommand;
|
||||
import fr.chteufleur.mytrackingdog.models.xmpp.commands.send.SendTrailLocationCommand;
|
||||
|
||||
public class ServiceXmpp extends Observable implements Runnable, ConnectionListener, PresenceEventListener, FileTransferListener {
|
||||
public class ServiceXmpp extends Observable implements Runnable, ConnectionListener, StanzaListener, FileTransferListener {
|
||||
|
||||
public static final String TAG = ServiceXmpp.class.getName();
|
||||
|
||||
|
|
@ -69,7 +74,7 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
public static final String NOTIF_NEW_OBJECT = ServiceXmpp.class.getName()+".newobject";
|
||||
public static final String NOTIF_START_TRAIL = ServiceXmpp.class.getName()+".starttrail";
|
||||
public static final String NOTIF_STOP_TRAIL = ServiceXmpp.class.getName()+".stoptrail";
|
||||
public static final String NOTIF_NEW_PRESENCE_RECEIVED = ServiceXmpp.class.getName()+".newpresencereceived";
|
||||
public static final String NOTIF_NEW_PRESENCE_SUBSCRIPTION = ServiceXmpp.class.getName()+".newpresencesubscriptionreceived";
|
||||
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";
|
||||
|
|
@ -77,7 +82,7 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
|
||||
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_PRESENCE_RECEIVED_VALUE_JID = NOTIF_NEW_PRESENCE_SUBSCRIPTION+".value.jid";
|
||||
public static final String NOTIF_NEW_REAL_TIME_MODE_VALUE = NOTIF_NEW_REAL_TIME_MODE+".value";
|
||||
|
||||
public static final String XMPP_NODE_TRAIL_GEOLOC = "trail_geoloc";
|
||||
|
|
@ -85,12 +90,14 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
public static final String XMPP_NODE_START_TRAIL_GEOLOC = "start_trail_geoloc";
|
||||
public static final String XMPP_NODE_STOP_TRAIL_GEOLOC = "stop_trail_geoloc";
|
||||
public static final String XMPP_NODE_REAL_TIME_MODE = "real_time_mode";
|
||||
public static final String XMPP_NODE_CONNEXION = "connexion";
|
||||
|
||||
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 = "dog.xmpp.kingpenguin.tk";
|
||||
// private static final String XMPP_DOMAIN_SERVER = "kingpenguin.tk";
|
||||
private static final int XMPP_PORT = 5222;
|
||||
public static final String XMPP_RESOURCE = "MyTrackingDog";
|
||||
|
||||
//<editor-fold defaultstate="collapsed" desc="Preferences">
|
||||
private final SharedPreferences preferences;
|
||||
|
|
@ -111,11 +118,14 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
private FileTransferManager fileManager;
|
||||
private AccountManager accountManager;
|
||||
private AbstractXMPPConnection connection;
|
||||
private Roster roster;
|
||||
private String jid;
|
||||
private String otherJid;
|
||||
private final ServiceXmpp thsi;
|
||||
private boolean run = false;
|
||||
|
||||
private StanzaFilter subscribefilter = PresenceTypeFilter.SUBSCRIBE;
|
||||
|
||||
private boolean isEnable = false;
|
||||
private boolean isRealTimeMode = false;
|
||||
|
||||
|
|
@ -170,6 +180,7 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
boolean isConnected;
|
||||
connection = new XMPPTCPConnection(configuration);
|
||||
connection.addConnectionListener(this);
|
||||
connection.addAsyncStanzaListener(this, subscribefilter);
|
||||
commandManager = AdHocCommandManager.getAddHocCommandsManager(connection);
|
||||
fileManager = FileTransferManager.getInstanceFor(connection);
|
||||
connection.connect();
|
||||
|
|
@ -187,6 +198,7 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
} catch (SmackException.NotConnectedException | InterruptedException | XmppStringprepException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
otherJid = null;
|
||||
}
|
||||
if (connection != null) {
|
||||
connection.disconnect();
|
||||
|
|
@ -254,7 +266,7 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
}
|
||||
|
||||
try {
|
||||
connection.login(prefXmppUser, prefXmppPassword, Resourcepart.from("MyTrackingDog"));
|
||||
connection.login(prefXmppUser, prefXmppPassword, Resourcepart.from(XMPP_RESOURCE));
|
||||
} catch (XmppStringprepException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InterruptedException | IOException | SmackException | XMPPException e) {
|
||||
|
|
@ -263,8 +275,9 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
|
||||
registerCommands();
|
||||
fileManager.addFileTransferListener(this);
|
||||
Roster roster = Roster.getInstanceFor(connection);
|
||||
roster.addPresenceEventListener(this);
|
||||
|
||||
roster = Roster.getInstanceFor(connection);
|
||||
roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -295,7 +308,6 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
}
|
||||
};
|
||||
new Thread(r).start();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -338,16 +350,54 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
//<editor-fold defaultstate="collapsed" desc="Presence">
|
||||
public void sendPresenceAvailable() throws SmackException.NotConnectedException, InterruptedException, XmppStringprepException {
|
||||
if (otherJid != null) {
|
||||
sendPresence(JidCreate.fullFrom(otherJid), Presence.Type.available);
|
||||
Jid jid;
|
||||
if (otherJid.contains("/")) {
|
||||
jid = JidCreate.fullFrom(otherJid);
|
||||
} else {
|
||||
jid = JidCreate.bareFrom(otherJid);
|
||||
}
|
||||
sendPresence(jid, Presence.Type.available);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendPresenceAvailable(String to) throws SmackException.NotConnectedException, InterruptedException, XmppStringprepException {
|
||||
sendPresence(JidCreate.fullFrom(to), Presence.Type.available);
|
||||
Jid jid;
|
||||
if (to.contains("/")) {
|
||||
jid = JidCreate.fullFrom(to);
|
||||
} else {
|
||||
jid = JidCreate.bareFrom(to);
|
||||
}
|
||||
sendPresence(jid, Presence.Type.available);
|
||||
}
|
||||
|
||||
public void sendPresenceUnavailable(String to) throws SmackException.NotConnectedException, InterruptedException, XmppStringprepException {
|
||||
sendPresence(JidCreate.fullFrom(to), Presence.Type.unavailable);
|
||||
Jid jid;
|
||||
if (to.contains("/")) {
|
||||
jid = JidCreate.fullFrom(to);
|
||||
} else {
|
||||
jid = JidCreate.bareFrom(to);
|
||||
}
|
||||
sendPresence(jid, Presence.Type.unavailable);
|
||||
}
|
||||
|
||||
public void sendPresenceSubscribe(String to) throws XmppStringprepException, SmackException.NotConnectedException, InterruptedException {
|
||||
Jid jid;
|
||||
if (to.contains("/")) {
|
||||
jid = JidCreate.fullFrom(to);
|
||||
} else {
|
||||
jid = JidCreate.bareFrom(to);
|
||||
}
|
||||
sendPresence(jid, Presence.Type.subscribe);
|
||||
}
|
||||
|
||||
public void sendPresenceSubscribed(String to) throws XmppStringprepException, SmackException.NotConnectedException, InterruptedException {
|
||||
Jid jid;
|
||||
if (to.contains("/")) {
|
||||
jid = JidCreate.fullFrom(to);
|
||||
} else {
|
||||
jid = JidCreate.bareFrom(to);
|
||||
}
|
||||
sendPresence(jid, Presence.Type.subscribed);
|
||||
}
|
||||
|
||||
private void sendPresence(Jid to, Presence.Type type) throws SmackException.NotConnectedException, InterruptedException {
|
||||
|
|
@ -367,46 +417,26 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
}
|
||||
|
||||
@Override
|
||||
public void presenceAvailable(FullJid address, Presence presence) {
|
||||
String fullJid = address.asFullJidIfPossible().toString();
|
||||
if (presence.getType() == Presence.Type.available) {
|
||||
if (!fullJid.equals(jid) && (otherJid == null || !fullJid.equals(otherJid))) {
|
||||
Log.i(TAG, "PRESENCE AVAILABLE RECEIVED FROM " + fullJid);
|
||||
otherJid = fullJid;
|
||||
try {
|
||||
sendPresenceAvailable(fullJid);
|
||||
} catch (SmackException.NotConnectedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (XmppStringprepException e) {
|
||||
e.printStackTrace();
|
||||
public void processStanza(Stanza packet) throws SmackException.NotConnectedException, InterruptedException {
|
||||
if (packet instanceof Presence) {
|
||||
Presence presence = (Presence) packet;
|
||||
String from = presence.getFrom().toString();
|
||||
Presence.Type type = presence.getType();
|
||||
|
||||
if (type == Presence.Type.subscribe) {
|
||||
if (isInRoster(from)) {
|
||||
try {
|
||||
sendPresenceSubscribed(from);
|
||||
} catch (XmppStringprepException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
setChanged();
|
||||
notifyObservers(new Notification(NOTIF_NEW_PRESENCE_SUBSCRIPTION).addExtra(NOTIF_NEW_PRESENCE_RECEIVED_VALUE_JID, from));
|
||||
}
|
||||
setChanged();
|
||||
notifyObservers(new Notification(NOTIF_NEW_PRESENCE_RECEIVED).addExtra(NOTIF_NEW_PRESENCE_RECEIVED_VALUE_JID, otherJid));
|
||||
}
|
||||
} else if (presence.getType() == Presence.Type.unavailable) {
|
||||
if (otherJid != null && otherJid.equals(fullJid)) {
|
||||
otherJid = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@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>
|
||||
|
||||
//<editor-fold defaultstate="collapsed" desc="Commands">
|
||||
|
|
@ -442,6 +472,12 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
return new RealTimeModeCommand(thsi);
|
||||
}
|
||||
});
|
||||
commandManager.registerCommand(XMPP_NODE_CONNEXION, XMPP_NODE_CONNEXION, new LocalCommandFactory() {
|
||||
@Override
|
||||
public LocalCommand getInstance() throws InstantiationException, IllegalAccessException {
|
||||
return new ConnexionCommand(thsi);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void startTrailGeoloc() {
|
||||
|
|
@ -507,6 +543,10 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
}
|
||||
}
|
||||
|
||||
public void sendCommandConnexion(String jid) throws XmppStringprepException {
|
||||
sendCommand(new SendConnexionCommand(commandManager, JidCreate.fullFrom(jid)));
|
||||
}
|
||||
|
||||
private void sendCommand(SendCommand command) {
|
||||
if (command != null) {
|
||||
synchronized (listSendCommand) {
|
||||
|
|
@ -595,8 +635,67 @@ public class ServiceXmpp extends Observable implements Runnable, ConnectionListe
|
|||
}
|
||||
//</editor-fold>
|
||||
|
||||
//<editor-fold defaultstate="collapsed" desc="Roster">
|
||||
public Set<RosterEntry> getRosterEntries() {
|
||||
Set<RosterEntry> ret;
|
||||
if (roster != null) {
|
||||
ret = roster.getEntries();
|
||||
} else {
|
||||
ret = new TreeSet<>();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public boolean isInRoster(String jid) {
|
||||
boolean ret = false;
|
||||
if (jid != null) {
|
||||
for (RosterEntry entry: roster.getEntries()) {
|
||||
if (jid.startsWith(entry.getJid().asBareJid().toString())) {
|
||||
ret = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public String getFullJidByName(String name) {
|
||||
String ret = "";
|
||||
if (name != null) {
|
||||
for (RosterEntry entry: roster.getEntries()) {
|
||||
String _name = entry.getName();
|
||||
if (_name != null && _name.equals(name)) {
|
||||
ret = entry.getJid().asBareJid().toString()+"/"+ServiceXmpp.XMPP_RESOURCE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void setJidName(String jid, String name) {
|
||||
if (jid != null && name != null) {
|
||||
for (RosterEntry entry: roster.getEntries()) {
|
||||
if (jid.startsWith(entry.getJid().asBareJid().toString())) {
|
||||
try {
|
||||
entry.setName(name);
|
||||
} catch (SmackException.NotConnectedException | SmackException.NoResponseException | XMPPException.XMPPErrorException | InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
public void setOtherJid(String otherJid) {
|
||||
this.otherJid = otherJid;
|
||||
try {
|
||||
sendPresenceAvailable(otherJid);
|
||||
} catch (SmackException.NotConnectedException | InterruptedException | XmppStringprepException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isOtherJidSet() {
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 760 B After Width: | Height: | Size: 484 B |
|
Before Width: | Height: | Size: 765 B After Width: | Height: | Size: 484 B |
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical" android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/xmpp_friend_info"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="20dp"
|
||||
android:textStyle="bold"
|
||||
android:minHeight="50dp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/xmpp_friends_list"
|
||||
android:textSize="25dp" />
|
||||
<ListView
|
||||
android:id="@id/android:list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -46,6 +46,9 @@
|
|||
android:id="@+id/action_send_gpx_trail_by_xmpp"
|
||||
android:title="@string/action_send_gpx_trail_by_xmpp"
|
||||
android:icon="@drawable/ic_share" />
|
||||
<item
|
||||
android:id="@+id/action_xmpp_friends_list"
|
||||
android:title="@string/action_xmpp_friends_list" />
|
||||
</menu>
|
||||
</item>
|
||||
</menu>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 12 KiB |
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#449DEF</color>
|
||||
</resources>
|
||||
|
|
@ -13,11 +13,13 @@
|
|||
<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_active_vibration_object">Activer 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="menu_title_xmpp">Social</string>
|
||||
<string name="action_active_xmpp">Activer social</string>
|
||||
<string name="action_active_xmpp_real_time_mode">Activer mode temps réel</string>
|
||||
<string name="action_send_gpx_trail_by_xmpp">Envoyer trace du traceur</string>
|
||||
<string name="action_xmpp_friends_list">Amis</string>
|
||||
<string name="xmpp_friends_list">List d’amis</string>
|
||||
</resources>
|
||||
|
|
|
|||