sending text message after returing from pending intent

This commit is contained in:
Daniel Gultsch 2014-05-08 17:31:53 +02:00
parent 7fa61564b8
commit c555a9d03c
3 changed files with 90 additions and 80 deletions

View file

@ -114,14 +114,15 @@ public class PgpEngine {
} }
} }
public void encrypt(Account account, final Message message, public void encrypt(final Message message,final OnPgpEngineResult callback) {
final OnPgpEngineResult callback) {
long[] keys = { message.getConversation().getContact().getPgpKeyId() }; long[] keys = { message.getConversation().getContact().getPgpKeyId() };
Intent params = new Intent(); Intent params = new Intent();
params.setAction(OpenPgpApi.ACTION_ENCRYPT); params.setAction(OpenPgpApi.ACTION_ENCRYPT);
params.putExtra(OpenPgpApi.EXTRA_KEY_IDS, keys); params.putExtra(OpenPgpApi.EXTRA_KEY_IDS, keys);
params.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, message.getConversation().getAccount().getJid());
if (message.getType() == Message.TYPE_TEXT) {
params.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true); params.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
params.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, account.getJid());
InputStream is = new ByteArrayInputStream(message.getBody().getBytes()); InputStream is = new ByteArrayInputStream(message.getBody().getBytes());
final OutputStream os = new ByteArrayOutputStream(); final OutputStream os = new ByteArrayOutputStream();
@ -151,20 +152,11 @@ public class PgpEngine {
} }
} }
}); });
} else if (message.getType() == Message.TYPE_IMAGE) {
}
public void encrypt(final Message message, final OnPgpEngineResult callback) {
try { try {
Log.d("xmppService","calling to encrypt file");
JingleFile inputFile = this.mXmppConnectionService.getFileBackend().getJingleFile(message, true); JingleFile inputFile = this.mXmppConnectionService.getFileBackend().getJingleFile(message, true);
JingleFile outputFile = this.mXmppConnectionService.getFileBackend().getJingleFile(message, false); JingleFile outputFile = this.mXmppConnectionService.getFileBackend().getJingleFile(message, false);
outputFile.createNewFile(); outputFile.createNewFile();
long[] keys = { message.getConversation().getContact().getPgpKeyId() };
Intent params = new Intent();
params.setAction(OpenPgpApi.ACTION_ENCRYPT);
params.putExtra(OpenPgpApi.EXTRA_KEY_IDS, keys);
params.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, message.getConversation().getAccount().getJid());
InputStream is = new FileInputStream(inputFile); InputStream is = new FileInputStream(inputFile);
OutputStream os = new FileOutputStream(outputFile); OutputStream os = new FileOutputStream(outputFile);
api.executeApiAsync(params, is, os, new IOpenPgpCallback() { api.executeApiAsync(params, is, os, new IOpenPgpCallback() {
@ -193,6 +185,7 @@ public class PgpEngine {
Log.d("xmppService","io exception during file encrypt"); Log.d("xmppService","io exception during file encrypt");
} }
} }
}
public long fetchKeyId(Account account, String status, String signature) { public long fetchKeyId(Account account, String status, String signature) {
if ((signature == null) || (api == null)) { if ((signature == null) || (api == null)) {

View file

@ -2,6 +2,7 @@ package eu.siacs.conversations.ui;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.math.BigInteger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.List; import java.util.List;
@ -67,6 +68,7 @@ public class ConversationActivity extends XmppActivity {
private static final int REQUEST_ATTACH_FILE_DIALOG = 0x48502; private static final int REQUEST_ATTACH_FILE_DIALOG = 0x48502;
private static final int REQUEST_SEND_PGP_IMAGE = 0x53883; private static final int REQUEST_SEND_PGP_IMAGE = 0x53883;
private static final int REQUEST_ATTACH_FILE = 0x73824; private static final int REQUEST_ATTACH_FILE = 0x73824;
public static final int REQUEST_ENCRYPT_MESSAGE = 0x378018;
protected SlidingPaneLayout spl; protected SlidingPaneLayout spl;
@ -652,6 +654,10 @@ public class ConversationActivity extends XmppActivity {
attachFile(); attachFile();
} else if (requestCode == REQUEST_ANNOUNCE_PGP) { } else if (requestCode == REQUEST_ANNOUNCE_PGP) {
announcePgp(getSelectedConversation().getAccount(),getSelectedConversation()); announcePgp(getSelectedConversation().getAccount(),getSelectedConversation());
} else if (requestCode == REQUEST_ENCRYPT_MESSAGE) {
encryptTextMessage();
} else {
Log.d(LOGTAG,"unknown result code:"+requestCode);
} }
} }
} }
@ -884,4 +890,36 @@ public class ConversationActivity extends XmppActivity {
return bitmapWorkerTaskReference.get(); return bitmapWorkerTaskReference.get();
} }
} }
public void encryptTextMessage() {
xmppConnectionService.getPgpEngine().encrypt(this.pendingMessage, new OnPgpEngineResult() {
@Override
public void userInputRequried(
PendingIntent pi) {
activity.runIntent(
pi,
ConversationActivity.REQUEST_SEND_MESSAGE);
}
@Override
public void success() {
xmppConnectionService.sendMessage(pendingMessage, null);
pendingMessage = null;
ConversationFragment selectedFragment = (ConversationFragment) getFragmentManager()
.findFragmentByTag("conversation");
if (selectedFragment != null) {
selectedFragment.clearInputField();
}
}
@Override
public void error(
OpenPgpError openPgpError) {
// TODO Auto-generated method
// stub
}
});
}
} }

View file

@ -664,10 +664,10 @@ public class ConversationFragment extends Fragment {
} }
protected void sendPgpMessage(final Message message) { protected void sendPgpMessage(final Message message) {
activity.pendingMessage = message;
final ConversationActivity activity = (ConversationActivity) getActivity(); final ConversationActivity activity = (ConversationActivity) getActivity();
final XmppConnectionService xmppService = activity.xmppConnectionService; final XmppConnectionService xmppService = activity.xmppConnectionService;
final Contact contact = message.getConversation().getContact(); final Contact contact = message.getConversation().getContact();
final Account account = message.getConversation().getAccount();
if (activity.hasPgp()) { if (activity.hasPgp()) {
if (contact.getPgpKeyId() != 0) { if (contact.getPgpKeyId() != 0) {
xmppService.getPgpEngine().hasKey(contact, xmppService.getPgpEngine().hasKey(contact,
@ -677,37 +677,12 @@ public class ConversationFragment extends Fragment {
public void userInputRequried(PendingIntent pi) { public void userInputRequried(PendingIntent pi) {
activity.runIntent( activity.runIntent(
pi, pi,
ConversationActivity.REQUEST_SEND_MESSAGE); ConversationActivity.REQUEST_ENCRYPT_MESSAGE);
} }
@Override @Override
public void success() { public void success() {
xmppService.getPgpEngine().encrypt(account, activity.encryptTextMessage();
message, new OnPgpEngineResult() {
@Override
public void userInputRequried(
PendingIntent pi) {
activity.runIntent(
pi,
ConversationActivity.REQUEST_SEND_MESSAGE);
}
@Override
public void success() {
xmppService.sendMessage(
message, null);
chatMsg.setText("");
}
@Override
public void error(
OpenPgpError openPgpError) {
// TODO Auto-generated method
// stub
}
});
} }
@Override @Override
@ -809,4 +784,8 @@ public class ConversationFragment extends Fragment {
public void setText(String text) { public void setText(String text) {
this.pastedText = text; this.pastedText = text;
} }
public void clearInputField() {
this.chatMsg.setText("");
}
} }