avoid some null pointers when pgp api is not installed

This commit is contained in:
Daniel Gultsch 2014-03-03 16:39:19 +01:00
parent c609eefefa
commit 69af009c88
3 changed files with 48 additions and 33 deletions

View File

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

View File

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

View File

@ -3,6 +3,8 @@ package eu.siacs.conversations.ui;
import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder; import eu.siacs.conversations.services.XmppConnectionService.XmppConnectionBinder;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; 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(); abstract void onBackendConnected();
} }