offer to announce pgp key if pgp encryption is selected from menu

This commit is contained in:
Daniel Gultsch 2014-05-08 14:35:21 +02:00
parent 0ed29c1c77
commit 99a56a2bde
3 changed files with 50 additions and 42 deletions

View File

@ -423,7 +423,7 @@ public class ConversationActivity extends XmppActivity {
startActivity(inviteIntent); startActivity(inviteIntent);
break; break;
case R.id.action_security: case R.id.action_security:
final Conversation selConv = getSelectedConversation(); final Conversation conversation = getSelectedConversation();
View menuItemView = findViewById(R.id.action_security); View menuItemView = findViewById(R.id.action_security);
PopupMenu popup = new PopupMenu(this, menuItemView); PopupMenu popup = new PopupMenu(this, menuItemView);
final ConversationFragment fragment = (ConversationFragment) getFragmentManager() final ConversationFragment fragment = (ConversationFragment) getFragmentManager()
@ -435,19 +435,25 @@ public class ConversationActivity extends XmppActivity {
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.encryption_choice_none: case R.id.encryption_choice_none:
selConv.setNextEncryption(Message.ENCRYPTION_NONE); conversation.setNextEncryption(Message.ENCRYPTION_NONE);
item.setChecked(true); item.setChecked(true);
break; break;
case R.id.encryption_choice_otr: case R.id.encryption_choice_otr:
selConv.setNextEncryption(Message.ENCRYPTION_OTR); conversation.setNextEncryption(Message.ENCRYPTION_OTR);
item.setChecked(true); item.setChecked(true);
break; break;
case R.id.encryption_choice_pgp: case R.id.encryption_choice_pgp:
selConv.setNextEncryption(Message.ENCRYPTION_PGP); if (hasPgp()) {
item.setChecked(true); if (conversation.getAccount().getKeys().has("pgp_signature")) {
conversation.setNextEncryption(Message.ENCRYPTION_PGP);
item.setChecked(true);
} else {
announcePgp(conversation.getAccount());
}
}
break; break;
default: default:
selConv.setNextEncryption(Message.ENCRYPTION_NONE); conversation.setNextEncryption(Message.ENCRYPTION_NONE);
break; break;
} }
fragment.updateChatMsgHint(); fragment.updateChatMsgHint();
@ -455,7 +461,7 @@ public class ConversationActivity extends XmppActivity {
} }
}); });
popup.inflate(R.menu.encryption_choices); popup.inflate(R.menu.encryption_choices);
switch (selConv.getNextEncryption()) { switch (conversation.getNextEncryption()) {
case Message.ENCRYPTION_NONE: case Message.ENCRYPTION_NONE:
popup.getMenu().findItem(R.id.encryption_choice_none) popup.getMenu().findItem(R.id.encryption_choice_none)
.setChecked(true); .setChecked(true);
@ -468,10 +474,6 @@ public class ConversationActivity extends XmppActivity {
popup.getMenu().findItem(R.id.encryption_choice_pgp) popup.getMenu().findItem(R.id.encryption_choice_pgp)
.setChecked(true); .setChecked(true);
break; break;
case Message.ENCRYPTION_DECRYPTED:
popup.getMenu().findItem(R.id.encryption_choice_pgp)
.setChecked(true);
break;
default: default:
popup.getMenu().findItem(R.id.encryption_choice_none) popup.getMenu().findItem(R.id.encryption_choice_none)
.setChecked(true); .setChecked(true);

View File

@ -39,8 +39,6 @@ import android.widget.TextView;
public class ManageAccountActivity extends XmppActivity { public class ManageAccountActivity extends XmppActivity {
public static final int REQUEST_ANNOUNCE_PGP = 0x73731;
protected boolean isActionMode = false; protected boolean isActionMode = false;
protected ActionMode actionMode; protected ActionMode actionMode;
protected Account selectedAccountForActionMode = null; protected Account selectedAccountForActionMode = null;
@ -281,7 +279,7 @@ public class ManageAccountActivity extends XmppActivity {
} else if (item.getItemId()==R.id.mgmt_account_announce_pgp) { } else if (item.getItemId()==R.id.mgmt_account_announce_pgp) {
if (activity.hasPgp()) { if (activity.hasPgp()) {
mode.finish(); mode.finish();
announcePgp(); announcePgp(selectedAccountForActionMode);
} }
} else if (item.getItemId() == R.id.mgmt_otr_key) { } else if (item.getItemId() == R.id.mgmt_otr_key) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity); AlertDialog.Builder builder = new AlertDialog.Builder(activity);
@ -362,33 +360,6 @@ public class ManageAccountActivity extends XmppActivity {
}); });
} }
private void announcePgp() {
final Account account = selectedAccountForActionMode;
xmppConnectionService.getPgpEngine().generateSignature(account, "online", new OnPgpEngineResult() {
@Override
public void userInputRequried(PendingIntent pi) {
try {
startIntentSenderForResult(pi.getIntentSender(), REQUEST_ANNOUNCE_PGP, null, 0, 0, 0);
} catch (SendIntentException e) {
Log.d("xmppService","coulnd start intent for pgp anncouncment");
}
}
@Override
public void success() {
xmppConnectionService.databaseBackend.updateAccount(account);
xmppConnectionService.sendPgpPresence(account, account.getPgpSignature());
}
@Override
public void error(OpenPgpError openPgpError) {
// TODO Auto-generated method stub
}
});
}
@Override @Override
protected void onStop() { protected void onStop() {
if (xmppConnectionServiceBound) { if (xmppConnectionServiceBound) {
@ -487,7 +458,7 @@ public class ManageAccountActivity extends XmppActivity {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_ANNOUNCE_PGP) { if (requestCode == REQUEST_ANNOUNCE_PGP) {
announcePgp(); announcePgp(selectedAccountForActionMode);
} }
} }
} }

View File

@ -1,28 +1,37 @@
package eu.siacs.conversations.ui; package eu.siacs.conversations.ui;
import org.openintents.openpgp.OpenPgpError;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.crypto.OnPgpEngineResult;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Conversation;
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 eu.siacs.conversations.utils.ExceptionHelper; import eu.siacs.conversations.utils.ExceptionHelper;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.AlertDialog.Builder; import android.app.AlertDialog.Builder;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnClickListener;
import android.content.IntentSender.SendIntentException;
import android.content.Intent; import android.content.Intent;
import android.content.ServiceConnection; import android.content.ServiceConnection;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.util.Log;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
public abstract class XmppActivity extends Activity { public abstract class XmppActivity extends Activity {
public static final int REQUEST_ANNOUNCE_PGP = 0x73731;
protected final static String LOGTAG = "xmppService"; protected final static String LOGTAG = "xmppService";
public XmppConnectionService xmppConnectionService; public XmppConnectionService xmppConnectionService;
@ -152,4 +161,30 @@ public abstract class XmppActivity extends Activity {
| Intent.FLAG_ACTIVITY_CLEAR_TOP); | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(viewConversationIntent); startActivity(viewConversationIntent);
} }
protected void announcePgp(final Account account) {
xmppConnectionService.getPgpEngine().generateSignature(account, "online", new OnPgpEngineResult() {
@Override
public void userInputRequried(PendingIntent pi) {
try {
startIntentSenderForResult(pi.getIntentSender(), REQUEST_ANNOUNCE_PGP, null, 0, 0, 0);
} catch (SendIntentException e) {
Log.d("xmppService","coulnd start intent for pgp anncouncment");
}
}
@Override
public void success() {
xmppConnectionService.databaseBackend.updateAccount(account);
xmppConnectionService.sendPgpPresence(account, account.getPgpSignature());
}
@Override
public void error(OpenPgpError openPgpError) {
// TODO Auto-generated method stub
}
});
}
} }