sending text message after returing from pending intent
This commit is contained in:
		
							parent
							
								
									7fa61564b8
								
							
						
					
					
						commit
						c555a9d03c
					
				| 
						 | 
				
			
			@ -114,59 +114,18 @@ public class PgpEngine {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void encrypt(Account account, final Message message,
 | 
			
		||||
			final OnPgpEngineResult callback) {
 | 
			
		||||
	public void encrypt(final Message message,final OnPgpEngineResult callback) {
 | 
			
		||||
		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_REQUEST_ASCII_ARMOR, true);
 | 
			
		||||
		params.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, account.getJid());
 | 
			
		||||
 | 
			
		||||
		InputStream is = new ByteArrayInputStream(message.getBody().getBytes());
 | 
			
		||||
		final OutputStream os = new ByteArrayOutputStream();
 | 
			
		||||
		api.executeApiAsync(params, is, os, new IOpenPgpCallback() {
 | 
			
		||||
			
 | 
			
		||||
			@Override
 | 
			
		||||
			public void onReturn(Intent result) {
 | 
			
		||||
				switch (result.getIntExtra(OpenPgpApi.RESULT_CODE,
 | 
			
		||||
						OpenPgpApi.RESULT_CODE_ERROR)) {
 | 
			
		||||
				case OpenPgpApi.RESULT_CODE_SUCCESS:
 | 
			
		||||
					StringBuilder encryptedMessageBody = new StringBuilder();
 | 
			
		||||
					String[] lines = os.toString().split("\n");
 | 
			
		||||
					for (int i = 3; i < lines.length - 1; ++i) {
 | 
			
		||||
						encryptedMessageBody.append(lines[i].trim());
 | 
			
		||||
					}
 | 
			
		||||
					message.setEncryptedBody(encryptedMessageBody.toString());
 | 
			
		||||
					callback.success();
 | 
			
		||||
					break;
 | 
			
		||||
				case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED:
 | 
			
		||||
					callback.userInputRequried((PendingIntent) result
 | 
			
		||||
							.getParcelableExtra(OpenPgpApi.RESULT_INTENT));
 | 
			
		||||
					break;
 | 
			
		||||
				case OpenPgpApi.RESULT_CODE_ERROR:
 | 
			
		||||
					callback.error((OpenPgpError) result
 | 
			
		||||
							.getParcelableExtra(OpenPgpApi.RESULT_ERROR));
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
		params.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, message.getConversation().getAccount().getJid());
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
		if (message.getType() == Message.TYPE_TEXT) {
 | 
			
		||||
			params.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
 | 
			
		||||
	
 | 
			
		||||
	public void encrypt(final Message message, final OnPgpEngineResult callback) {
 | 
			
		||||
		try {
 | 
			
		||||
			Log.d("xmppService","calling to encrypt file");
 | 
			
		||||
			JingleFile inputFile = this.mXmppConnectionService.getFileBackend().getJingleFile(message, true);
 | 
			
		||||
			JingleFile outputFile = this.mXmppConnectionService.getFileBackend().getJingleFile(message, false);
 | 
			
		||||
			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);
 | 
			
		||||
			OutputStream os = new FileOutputStream(outputFile);
 | 
			
		||||
			InputStream is = new ByteArrayInputStream(message.getBody().getBytes());
 | 
			
		||||
			final OutputStream os = new ByteArrayOutputStream();
 | 
			
		||||
			api.executeApiAsync(params, is, os, new IOpenPgpCallback() {
 | 
			
		||||
				
 | 
			
		||||
				@Override
 | 
			
		||||
| 
						 | 
				
			
			@ -174,6 +133,12 @@ public class PgpEngine {
 | 
			
		|||
					switch (result.getIntExtra(OpenPgpApi.RESULT_CODE,
 | 
			
		||||
							OpenPgpApi.RESULT_CODE_ERROR)) {
 | 
			
		||||
					case OpenPgpApi.RESULT_CODE_SUCCESS:
 | 
			
		||||
						StringBuilder encryptedMessageBody = new StringBuilder();
 | 
			
		||||
						String[] lines = os.toString().split("\n");
 | 
			
		||||
						for (int i = 3; i < lines.length - 1; ++i) {
 | 
			
		||||
							encryptedMessageBody.append(lines[i].trim());
 | 
			
		||||
						}
 | 
			
		||||
						message.setEncryptedBody(encryptedMessageBody.toString());
 | 
			
		||||
						callback.success();
 | 
			
		||||
						break;
 | 
			
		||||
					case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED:
 | 
			
		||||
| 
						 | 
				
			
			@ -187,13 +152,41 @@ public class PgpEngine {
 | 
			
		|||
					}
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
		} catch (FileNotFoundException e) {
 | 
			
		||||
			Log.d("xmppService","file not found: "+e.getMessage());
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			Log.d("xmppService","io exception during file encrypt");
 | 
			
		||||
		} else if (message.getType() == Message.TYPE_IMAGE) {
 | 
			
		||||
			try {
 | 
			
		||||
				JingleFile inputFile = this.mXmppConnectionService.getFileBackend().getJingleFile(message, true);
 | 
			
		||||
				JingleFile outputFile = this.mXmppConnectionService.getFileBackend().getJingleFile(message, false);
 | 
			
		||||
				outputFile.createNewFile();
 | 
			
		||||
				InputStream is = new FileInputStream(inputFile);
 | 
			
		||||
				OutputStream os = new FileOutputStream(outputFile);
 | 
			
		||||
				api.executeApiAsync(params, is, os, new IOpenPgpCallback() {
 | 
			
		||||
					
 | 
			
		||||
					@Override
 | 
			
		||||
					public void onReturn(Intent result) {
 | 
			
		||||
						switch (result.getIntExtra(OpenPgpApi.RESULT_CODE,
 | 
			
		||||
								OpenPgpApi.RESULT_CODE_ERROR)) {
 | 
			
		||||
						case OpenPgpApi.RESULT_CODE_SUCCESS:
 | 
			
		||||
							callback.success();
 | 
			
		||||
							break;
 | 
			
		||||
						case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED:
 | 
			
		||||
							callback.userInputRequried((PendingIntent) result
 | 
			
		||||
									.getParcelableExtra(OpenPgpApi.RESULT_INTENT));
 | 
			
		||||
							break;
 | 
			
		||||
						case OpenPgpApi.RESULT_CODE_ERROR:
 | 
			
		||||
							callback.error((OpenPgpError) result
 | 
			
		||||
									.getParcelableExtra(OpenPgpApi.RESULT_ERROR));
 | 
			
		||||
							break;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
			} catch (FileNotFoundException e) {
 | 
			
		||||
				Log.d("xmppService","file not found: "+e.getMessage());
 | 
			
		||||
			} catch (IOException e) {
 | 
			
		||||
				Log.d("xmppService","io exception during file encrypt");
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	public long fetchKeyId(Account account, String status, String signature) {
 | 
			
		||||
		if ((signature == null) || (api == null)) {
 | 
			
		||||
			return 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@ package eu.siacs.conversations.ui;
 | 
			
		|||
 | 
			
		||||
import java.io.FileNotFoundException;
 | 
			
		||||
import java.lang.ref.WeakReference;
 | 
			
		||||
import java.math.BigInteger;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Hashtable;
 | 
			
		||||
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_SEND_PGP_IMAGE = 0x53883;
 | 
			
		||||
	private static final int REQUEST_ATTACH_FILE = 0x73824;
 | 
			
		||||
	public static final int REQUEST_ENCRYPT_MESSAGE = 0x378018;
 | 
			
		||||
 | 
			
		||||
	protected SlidingPaneLayout spl;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -652,6 +654,10 @@ public class ConversationActivity extends XmppActivity {
 | 
			
		|||
				attachFile();
 | 
			
		||||
			} else if (requestCode == REQUEST_ANNOUNCE_PGP) {
 | 
			
		||||
				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();
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -664,10 +664,10 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	protected void sendPgpMessage(final Message message) {
 | 
			
		||||
		activity.pendingMessage = message;
 | 
			
		||||
		final ConversationActivity activity = (ConversationActivity) getActivity();
 | 
			
		||||
		final XmppConnectionService xmppService = activity.xmppConnectionService;
 | 
			
		||||
		final Contact contact = message.getConversation().getContact();
 | 
			
		||||
		final Account account = message.getConversation().getAccount();
 | 
			
		||||
		if (activity.hasPgp()) {
 | 
			
		||||
			if (contact.getPgpKeyId() != 0) {
 | 
			
		||||
				xmppService.getPgpEngine().hasKey(contact,
 | 
			
		||||
| 
						 | 
				
			
			@ -677,37 +677,12 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
							public void userInputRequried(PendingIntent pi) {
 | 
			
		||||
								activity.runIntent(
 | 
			
		||||
										pi,
 | 
			
		||||
										ConversationActivity.REQUEST_SEND_MESSAGE);
 | 
			
		||||
										ConversationActivity.REQUEST_ENCRYPT_MESSAGE);
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
							@Override
 | 
			
		||||
							public void success() {
 | 
			
		||||
								xmppService.getPgpEngine().encrypt(account,
 | 
			
		||||
										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
 | 
			
		||||
 | 
			
		||||
											}
 | 
			
		||||
										});
 | 
			
		||||
								activity.encryptTextMessage();
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
							@Override
 | 
			
		||||
| 
						 | 
				
			
			@ -809,4 +784,8 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
	public void setText(String text) {
 | 
			
		||||
		this.pastedText = text;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void clearInputField() {
 | 
			
		||||
		this.chatMsg.setText("");
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue