package org.sechat.app.task;
/**
* Copyright (c) 2014 Sechat GbR <support@sechat.org>
*
* You should have received a copy of the MIT License
* along with this program (license.txt).
* If not, see <http://sechat.github.io/license.txt>.
*/
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smackx.packet.VCard;
import org.sechat.app.Encryption;
import org.sechat.app.ThreadHelper;
import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
public class SendMessage extends AsyncTask<String, String, String> {
private static ThreadHelper th = new ThreadHelper();
private static Encryption encryption = new Encryption();
Activity act;
String TAG = getClass().getName();
public SendMessage(Activity act) {
this.act = act;
}
@Override
protected String doInBackground(String... params) {
if (ThreadHelper.xmppConnection != null ||
ThreadHelper.xmppConnection.isAuthenticated()) {
VCard vCard = new VCard();
String user = th.getActiveChatUser();
try {
vCard.load(ThreadHelper.xmppConnection, user);
} catch (XMPPException e) {
return "Sending failed! Missing public key for user. Please try again later...";
}
Roster roster = ThreadHelper.xmppConnection.getRoster();
ChatManager chatmanager = ThreadHelper.xmppConnection.getChatManager();
Chat newChat = chatmanager.createChat(user, null);
try {
String encMsg = encryption.encrypt(
vCard.getField("pubkey"), params[0]);
newChat.sendMessage(encMsg);
th.addDiscussionEntry(act, user, params[0], true);
} catch (XMPPException e) {
if (th.D) Log.d(TAG, e.getMessage(), e);
return "Sending failed: "+e.getMessage();
} catch (NullPointerException e) {
if (th.D) Log.d(TAG, e.getMessage(), e);
return "Cannot fetch public key from other user!";
}
if (!roster.getPresence(user).isAvailable())
return "User offline! The message will be delivered later.";
} else return "You are not connected! Message was not delivered.";
return null;
}
@Override
protected void onPostExecute(String result) {
if (result != null)
th.sendNotification(act, result, Toast.LENGTH_LONG);
}
}