avoid some null pointers when pgp api is not installed

Daniel Gultsch created

Change summary

src/eu/siacs/conversations/ui/ConversationFragment.java  | 50 ++++-----
src/eu/siacs/conversations/ui/ManageAccountActivity.java | 16 +-
src/eu/siacs/conversations/ui/XmppActivity.java          | 15 +++
3 files changed, 48 insertions(+), 33 deletions(-)

Detailed changes

src/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -439,34 +439,32 @@ public class ConversationFragment extends Fragment {
 		ConversationActivity activity = (ConversationActivity) getActivity();
 		final XmppConnectionService xmppService = activity.xmppConnectionService;
 		Contact contact = message.getConversation().getContact();
-		if (contact.getPgpKeyId() != 0) {
-			xmppService.sendMessage(message, null);
-			chatMsg.setText("");
-		} else {
-			AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-			builder.setTitle("No openPGP key found");
-			builder.setIconAttribute(android.R.attr.alertDialogIcon);
-			builder.setMessage("There is no openPGP key assoziated with this contact");
-			builder.setNegativeButton("Cancel", null);
-			builder.setPositiveButton("Send plain text",
-					new DialogInterface.OnClickListener() {
-
-						@Override
-						public void onClick(DialogInterface dialog, int which) {
-							conversation.nextMessageEncryption = Message.ENCRYPTION_NONE;
-							message.setEncryption(Message.ENCRYPTION_NONE);
-							xmppService.sendMessage(message, null);
-							chatMsg.setText("");
-						}
-					});
-			builder.create().show();
+		if (activity.hasPgp()) {
+			if (contact.getPgpKeyId() != 0) {
+				xmppService.sendMessage(message, null);
+				chatMsg.setText("");
+			} else {
+				AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+				builder.setTitle("No openPGP key found");
+				builder.setIconAttribute(android.R.attr.alertDialogIcon);
+				builder.setMessage("There is no openPGP key assoziated with this contact");
+				builder.setNegativeButton("Cancel", null);
+				builder.setPositiveButton("Send plain text",
+						new DialogInterface.OnClickListener() {
+	
+							@Override
+							public void onClick(DialogInterface dialog, int which) {
+								conversation.nextMessageEncryption = Message.ENCRYPTION_NONE;
+								message.setEncryption(Message.ENCRYPTION_NONE);
+								xmppService.sendMessage(message, null);
+								chatMsg.setText("");
+							}
+						});
+				builder.create().show();
+			}
 		}
 	}
-
-	public void resendPgpMessage(String msg) {
-		this.queuedPqpMessage = msg;
-	}
-
+	
 	protected void sendOtrMessage(final Message message) {
 		ConversationActivity activity = (ConversationActivity) getActivity();
 		final XmppConnectionService xmppService = activity.xmppConnectionService;

src/eu/siacs/conversations/ui/ManageAccountActivity.java 🔗

@@ -237,14 +237,16 @@ public class ManageAccountActivity extends XmppActivity implements ActionMode.Ca
 			builder.setNegativeButton("Cancel",null);
 			builder.create().show();
 		} else if (item.getItemId()==R.id.announce_pgp) {
-			mode.finish();
-			try {
-				xmppConnectionService.generatePgpAnnouncement(selectedAccountForActionMode);
-			} catch (PgpEngine.UserInputRequiredException e) {
+			if (this.hasPgp()) {
+				mode.finish();
 				try {
-					startIntentSenderForResult(e.getPendingIntent().getIntentSender(), REQUEST_ANNOUNCE_PGP, null, 0, 0, 0);
-				} catch (SendIntentException e1) {
-					Log.d("gultsch","sending intent failed");
+					xmppConnectionService.generatePgpAnnouncement(selectedAccountForActionMode);
+				} catch (PgpEngine.UserInputRequiredException e) {
+					try {
+						startIntentSenderForResult(e.getPendingIntent().getIntentSender(), REQUEST_ANNOUNCE_PGP, null, 0, 0, 0);
+					} catch (SendIntentException e1) {
+						Log.d("gultsch","sending intent failed");
+					}
 				}
 			}
 		}

src/eu/siacs/conversations/ui/XmppActivity.java 🔗

@@ -3,6 +3,8 @@ package eu.siacs.conversations.ui;
 import eu.siacs.conversations.services.XmppConnectionService;
 import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder;
 import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.AlertDialog.Builder;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -63,5 +65,18 @@ public abstract class XmppActivity extends Activity {
 		}
 	}
 	
+	public boolean hasPgp() {
+		if (xmppConnectionService.getPgpEngine()!=null) {
+			return true;
+		} else {
+			Builder builder = new AlertDialog.Builder(getApplicationContext());
+			builder.setTitle("OpenKeychain not found");
+			builder.setIconAttribute(android.R.attr.alertDialogIcon);
+			builder.setMessage("Please make sure you have installed OpenKeychain");
+			builder.create().show();
+			return false;
+		}
+	}
+	
 	abstract void onBackendConnected();
 }