link to openkeychain from contact details

Daniel Gultsch created

Change summary

src/eu/siacs/conversations/crypto/PgpEngine.java          | 13 +++
src/eu/siacs/conversations/ui/ContactDetailsActivity.java | 29 +++++++-
2 files changed, 33 insertions(+), 9 deletions(-)

Detailed changes

src/eu/siacs/conversations/crypto/PgpEngine.java 🔗

@@ -274,9 +274,7 @@ public class PgpEngine {
 		params.setAction(OpenPgpApi.ACTION_GET_KEY);
 		params.putExtra(OpenPgpApi.EXTRA_KEY_ID, contact.getPgpKeyId());
 		params.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, contact.getAccount().getJid());
-		InputStream is = new ByteArrayInputStream(new byte[0]);
-		OutputStream os = new ByteArrayOutputStream();
-		api.executeApiAsync(params, is, os, new IOpenPgpCallback() {
+		api.executeApiAsync(params, null, null, new IOpenPgpCallback() {
 			
 			@Override
 			public void onReturn(Intent result) {
@@ -296,4 +294,13 @@ public class PgpEngine {
 			}
 		});
 	}
+	
+	public PendingIntent getIntentForKey(Contact contact) {
+		Intent params = new Intent();
+		params.setAction(OpenPgpApi.ACTION_GET_KEY);
+		params.putExtra(OpenPgpApi.EXTRA_KEY_ID, contact.getPgpKeyId());
+		params.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, contact.getAccount().getJid());
+		Intent result = api.executeApi(params, null, null);
+		return (PendingIntent) result.getParcelableExtra(OpenPgpApi.RESULT_INTENT);
+	}
 }

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

@@ -4,10 +4,14 @@ import java.math.BigInteger;
 import java.util.Iterator;
 import java.util.Locale;
 
+import org.openintents.openpgp.util.OpenPgpUtils;
+
 import android.app.AlertDialog;
+import android.app.PendingIntent;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.IntentSender.SendIntentException;
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.CommonDataKinds;
@@ -26,6 +30,7 @@ import android.widget.QuickContactBadge;
 import android.widget.TextView;
 import android.widget.Toast;
 import eu.siacs.conversations.R;
+import eu.siacs.conversations.crypto.PgpEngine;
 import eu.siacs.conversations.entities.Contact;
 import eu.siacs.conversations.entities.Presences;
 import eu.siacs.conversations.utils.UIHelper;
@@ -252,17 +257,29 @@ public class ContactDetailsActivity extends XmppActivity {
 			key.setText(otrFingerprint);
 			keys.addView(view);
 		}
-		Log.d("gultsch", "pgp key id " + contact.getPgpKeyId());
 		if (contact.getPgpKeyId() != 0) {
 			View view = (View) inflater.inflate(R.layout.contact_key, null);
 			TextView key = (TextView) view.findViewById(R.id.key);
 			TextView keyType = (TextView) view.findViewById(R.id.key_type);
 			keyType.setText("PGP Key ID");
-			BigInteger bi = new BigInteger("" + contact.getPgpKeyId());
-			StringBuilder builder = new StringBuilder(bi.toString(16)
-					.toUpperCase(Locale.US));
-			builder.insert(8, " ");
-			key.setText(builder.toString());
+			key.setText(OpenPgpUtils.convertKeyIdToHex(contact.getPgpKeyId()));
+			view.setOnClickListener(new OnClickListener() {
+				
+				@Override
+				public void onClick(View v) {
+					PgpEngine pgp = activity.xmppConnectionService.getPgpEngine();
+					if (pgp!=null) {
+						PendingIntent intent = pgp.getIntentForKey(contact);
+						if (intent!=null) {
+							try {
+								startIntentSenderForResult(intent.getIntentSender(), 0, null, 0, 0, 0);
+							} catch (SendIntentException e) {
+								
+							}
+						}
+					}
+				}
+			});
 			keys.addView(view);
 		}
 	}