display open pgp key id in account details and allow to delete. fixes #2470
This commit is contained in:
		
							parent
							
								
									839178b269
								
							
						
					
					
						commit
						f98888d796
					
				| @ -304,9 +304,6 @@ public class PgpEngine { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public PendingIntent getIntentForKey(Contact contact) { | ||||
| 		return getIntentForKey(contact.getPgpKeyId()); | ||||
| 	} | ||||
| 
 | ||||
| 	public PendingIntent getIntentForKey(long pgpKeyId) { | ||||
| 		Intent params = new Intent(); | ||||
|  | ||||
| @ -551,7 +551,11 @@ public class Account extends AbstractEntity { | ||||
| 	public boolean setPgpSignId(long pgpID) { | ||||
| 		synchronized (this.keys) { | ||||
| 			try { | ||||
| 				if (pgpID == 0) { | ||||
| 					keys.remove(KEY_PGP_ID); | ||||
| 				} else { | ||||
| 					keys.put(KEY_PGP_ID, pgpID); | ||||
| 				} | ||||
| 			} catch (JSONException e) { | ||||
| 				return false; | ||||
| 			} | ||||
|  | ||||
| @ -1,11 +1,9 @@ | ||||
| package eu.siacs.conversations.ui; | ||||
| 
 | ||||
| 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.content.SharedPreferences; | ||||
| import android.net.Uri; | ||||
| import android.os.Bundle; | ||||
| @ -451,7 +449,7 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp | ||||
| 						.findViewById(R.id.button_remove); | ||||
| 				removeButton.setVisibility(View.VISIBLE); | ||||
| 				key.setText(CryptoHelper.prettifyFingerprint(otrFingerprint)); | ||||
| 				if (otrFingerprint != null && otrFingerprint.equals(messageFingerprint)) { | ||||
| 				if (otrFingerprint != null && otrFingerprint.equalsIgnoreCase(messageFingerprint)) { | ||||
| 					keyType.setText(R.string.otr_fingerprint_selected_message); | ||||
| 					keyType.setTextColor(ContextCompat.getColor(this, R.color.accent)); | ||||
| 				} else { | ||||
| @ -509,14 +507,7 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp | ||||
| 
 | ||||
| 				@Override | ||||
| 				public void onClick(View v) { | ||||
| 					PgpEngine pgp = ContactDetailsActivity.this.xmppConnectionService.getPgpEngine(); | ||||
| 					try { | ||||
| 						startIntentSenderForResult( | ||||
| 								pgp.getIntentForKey(contact).getIntentSender(), 0, null, 0, | ||||
| 								0, 0); | ||||
| 					} catch (Throwable e) { | ||||
| 						Toast.makeText(ContactDetailsActivity.this,R.string.openpgp_error,Toast.LENGTH_SHORT).show(); | ||||
| 					} | ||||
| 					launchOpenKeyChain(contact.getPgpKeyId()); | ||||
| 				} | ||||
| 			}; | ||||
| 			view.setOnClickListener(openKey); | ||||
|  | ||||
| @ -514,6 +514,8 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa | ||||
| 						if (message.getEncryption() == Message.ENCRYPTION_PGP | ||||
| 								|| message.getEncryption() == Message.ENCRYPTION_DECRYPTED) { | ||||
| 							fingerprint = "pgp"; | ||||
| 						} else if (message.getEncryption() == Message.ENCRYPTION_OTR) { | ||||
| 							fingerprint = "otr"; | ||||
| 						} else { | ||||
| 							fingerprint = message.getFingerprint(); | ||||
| 						} | ||||
|  | ||||
| @ -36,6 +36,8 @@ import android.widget.TableRow; | ||||
| import android.widget.TextView; | ||||
| import android.widget.Toast; | ||||
| 
 | ||||
| import org.openintents.openpgp.util.OpenPgpUtils; | ||||
| 
 | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
| import java.util.Set; | ||||
| @ -93,13 +95,18 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat | ||||
| 	private TextView mSessionEst; | ||||
| 	private TextView mOtrFingerprint; | ||||
| 	private TextView mAxolotlFingerprint; | ||||
| 	private TextView mPgpFingerprint; | ||||
| 	private TextView mOwnFingerprintDesc; | ||||
| 	private TextView mOtrFingerprintDesc; | ||||
| 	private TextView getmPgpFingerprintDesc; | ||||
| 	private TextView mAccountJidLabel; | ||||
| 	private ImageView mAvatar; | ||||
| 	private RelativeLayout mOtrFingerprintBox; | ||||
| 	private RelativeLayout mAxolotlFingerprintBox; | ||||
| 	private RelativeLayout mPgpFingerprintBox; | ||||
| 	private ImageButton mOtrFingerprintToClipboardButton; | ||||
| 	private ImageButton mAxolotlFingerprintToClipboardButton; | ||||
| 	private ImageButton mPgpDeleteFingerprintButton; | ||||
| 	private LinearLayout keys; | ||||
| 	private LinearLayout keysCard; | ||||
| 	private LinearLayout mNamePort; | ||||
| @ -505,7 +512,12 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat | ||||
| 		this.mServerInfoHttpUpload = (TextView) findViewById(R.id.server_info_http_upload); | ||||
| 		this.mPushRow = (TableRow) findViewById(R.id.push_row); | ||||
| 		this.mServerInfoPush = (TextView) findViewById(R.id.server_info_push); | ||||
| 		this.mPgpFingerprintBox = (RelativeLayout) findViewById(R.id.pgp_fingerprint_box); | ||||
| 		this.mPgpFingerprint = (TextView) findViewById(R.id.pgp_fingerprint); | ||||
| 		this.getmPgpFingerprintDesc = (TextView) findViewById(R.id.pgp_fingerprint_desc); | ||||
| 		this.mPgpDeleteFingerprintButton = (ImageButton) findViewById(R.id.action_delete_pgp); | ||||
| 		this.mOtrFingerprint = (TextView) findViewById(R.id.otr_fingerprint); | ||||
| 		this.mOtrFingerprintDesc = (TextView) findViewById(R.id.otr_fingerprint_desc); | ||||
| 		this.mOtrFingerprintBox = (RelativeLayout) findViewById(R.id.otr_fingerprint_box); | ||||
| 		this.mOtrFingerprintToClipboardButton = (ImageButton) findViewById(R.id.action_copy_to_clipboard); | ||||
| 		this.mAxolotlFingerprint = (TextView) findViewById(R.id.axolotl_fingerprint); | ||||
| @ -896,8 +908,36 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat | ||||
| 			} else { | ||||
| 				this.mServerInfoPush.setText(R.string.server_info_unavailable); | ||||
| 			} | ||||
| 			final long pgpKeyId = this.mAccount.getPgpId(); | ||||
| 			if (pgpKeyId != 0 && Config.supportOpenPgp()) { | ||||
| 				OnClickListener openPgp = new OnClickListener() { | ||||
| 					@Override | ||||
| 					public void onClick(View view) { | ||||
| 						launchOpenKeyChain(pgpKeyId); | ||||
| 					} | ||||
| 				}; | ||||
| 				OnClickListener delete = new OnClickListener() { | ||||
| 					@Override | ||||
| 					public void onClick(View view) { | ||||
| 						showDeletePgpDialog(); | ||||
| 					} | ||||
| 				}; | ||||
| 				this.mPgpFingerprintBox.setVisibility(View.VISIBLE); | ||||
| 				this.mPgpFingerprint.setText(OpenPgpUtils.convertKeyIdToHex(pgpKeyId)); | ||||
| 				this.mPgpFingerprint.setOnClickListener(openPgp); | ||||
| 				if ("pgp".equals(messageFingerprint)) { | ||||
| 					this.getmPgpFingerprintDesc.setTextColor(ContextCompat.getColor(this, R.color.accent)); | ||||
| 				} | ||||
| 				this.getmPgpFingerprintDesc.setOnClickListener(openPgp); | ||||
| 				this.mPgpDeleteFingerprintButton.setOnClickListener(delete); | ||||
| 			} else { | ||||
| 				this.mPgpFingerprintBox.setVisibility(View.GONE); | ||||
| 			} | ||||
| 			final String otrFingerprint = this.mAccount.getOtrFingerprint(); | ||||
| 			if (otrFingerprint != null && Config.supportOtr()) { | ||||
| 				if ("otr".equals(messageFingerprint)) { | ||||
| 					this.mOtrFingerprintDesc.setTextColor(ContextCompat.getColor(this, R.color.accent)); | ||||
| 				} | ||||
| 				this.mOtrFingerprintBox.setVisibility(View.VISIBLE); | ||||
| 				this.mOtrFingerprint.setText(CryptoHelper.prettifyFingerprint(otrFingerprint)); | ||||
| 				this.mOtrFingerprintToClipboardButton | ||||
| @ -986,6 +1026,24 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	private void showDeletePgpDialog() { | ||||
| 		AlertDialog.Builder builder = new AlertDialog.Builder(this); | ||||
| 		builder.setTitle(R.string.unpublish_pgp); | ||||
| 		builder.setMessage(R.string.unpublish_pgp_message); | ||||
| 		builder.setNegativeButton(R.string.cancel,null); | ||||
| 		builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { | ||||
| 			@Override | ||||
| 			public void onClick(DialogInterface dialogInterface, int i) { | ||||
| 				mAccount.setPgpSignId(0); | ||||
| 				mAccount.unsetPgpSignature(); | ||||
| 				xmppConnectionService.databaseBackend.updateAccount(mAccount); | ||||
| 				xmppConnectionService.sendPresence(mAccount); | ||||
| 				refreshUiReal(); | ||||
| 			} | ||||
| 		}); | ||||
| 		builder.create().show(); | ||||
| 	} | ||||
| 
 | ||||
| 	private void showOsOptimizationWarning(boolean showBatteryWarning, boolean showDataSaverWarning) { | ||||
| 		this.mOsOptimizations.setVisibility(showBatteryWarning || showDataSaverWarning ? View.VISIBLE : View.GONE); | ||||
| 		if (showDataSaverWarning) { | ||||
|  | ||||
| @ -66,6 +66,7 @@ import java.util.concurrent.atomic.AtomicInteger; | ||||
| 
 | ||||
| import eu.siacs.conversations.Config; | ||||
| import eu.siacs.conversations.R; | ||||
| import eu.siacs.conversations.crypto.PgpEngine; | ||||
| import eu.siacs.conversations.entities.Account; | ||||
| import eu.siacs.conversations.entities.Contact; | ||||
| import eu.siacs.conversations.entities.Conversation; | ||||
| @ -1017,6 +1018,17 @@ public abstract class XmppActivity extends Activity { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	protected void launchOpenKeyChain(long keyId) { | ||||
| 		PgpEngine pgp = XmppActivity.this.xmppConnectionService.getPgpEngine(); | ||||
| 		try { | ||||
| 			startIntentSenderForResult( | ||||
| 					pgp.getIntentForKey(keyId).getIntentSender(), 0, null, 0, | ||||
| 					0, 0); | ||||
| 		} catch (Throwable e) { | ||||
| 			Toast.makeText(XmppActivity.this,R.string.openpgp_error,Toast.LENGTH_SHORT).show(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void onResume() { | ||||
| 		super.onResume(); | ||||
|  | ||||
| @ -475,7 +475,7 @@ | ||||
|                 </TableLayout> | ||||
| 
 | ||||
|                 <RelativeLayout | ||||
|                     android:id="@+id/otr_fingerprint_box" | ||||
|                     android:id="@+id/pgp_fingerprint_box" | ||||
|                     android:layout_width="wrap_content" | ||||
|                     android:layout_height="match_parent" | ||||
|                     android:layout_marginTop="32dp"> | ||||
| @ -484,6 +484,52 @@ | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_alignParentLeft="true" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:layout_toLeftOf="@+id/action_delete_pgp" | ||||
|                         android:orientation="vertical"> | ||||
| 
 | ||||
|                         <TextView | ||||
|                             android:id="@+id/pgp_fingerprint" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:fontFamily="monospace" | ||||
|                             android:textColor="?attr/color_text_primary" | ||||
|                             android:textSize="?attr/TextSizeBody" | ||||
|                             android:typeface="monospace"/> | ||||
| 
 | ||||
|                         <TextView | ||||
|                             android:id="@+id/pgp_fingerprint_desc" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:text="@string/openpgp_key_id" | ||||
|                             android:textColor="?attr/color_text_secondary" | ||||
|                             android:textSize="?attr/TextSizeInfo"/> | ||||
|                     </LinearLayout> | ||||
| 
 | ||||
|                     <ImageButton | ||||
|                         android:id="@+id/action_delete_pgp" | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_alignParentRight="true" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:background="?android:selectableItemBackground" | ||||
|                         android:padding="@dimen/image_button_padding" | ||||
|                         android:src="?attr/icon_remove" | ||||
|                         android:alpha="?attr/icon_alpha" | ||||
|                         android:visibility="visible"/> | ||||
|                 </RelativeLayout> | ||||
| 
 | ||||
|                 <RelativeLayout | ||||
|                     android:id="@+id/otr_fingerprint_box" | ||||
|                     android:layout_width="wrap_content" | ||||
|                     android:layout_height="match_parent" | ||||
|                     android:layout_marginTop="24dp"> | ||||
| 
 | ||||
|                     <LinearLayout | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_alignParentLeft="true" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:layout_toLeftOf="@+id/action_copy_to_clipboard" | ||||
|                         android:orientation="vertical"> | ||||
| 
 | ||||
| @ -497,6 +543,7 @@ | ||||
|                             android:typeface="monospace"/> | ||||
| 
 | ||||
|                         <TextView | ||||
|                             android:id="@+id/otr_fingerprint_desc" | ||||
|                             android:layout_width="wrap_content" | ||||
|                             android:layout_height="wrap_content" | ||||
|                             android:text="@string/otr_fingerprint" | ||||
| @ -521,12 +568,13 @@ | ||||
|                     android:id="@+id/axolotl_fingerprint_box" | ||||
|                     android:layout_width="wrap_content" | ||||
|                     android:layout_height="match_parent" | ||||
|                     android:layout_marginTop="32dp"> | ||||
|                     android:layout_marginTop="24dp"> | ||||
| 
 | ||||
|                     <LinearLayout | ||||
|                         android:layout_width="wrap_content" | ||||
|                         android:layout_height="wrap_content" | ||||
|                         android:layout_alignParentLeft="true" | ||||
|                         android:layout_centerVertical="true" | ||||
|                         android:layout_toLeftOf="@+id/axolotl_actions" | ||||
|                         android:orientation="vertical"> | ||||
| 
 | ||||
|  | ||||
| @ -171,6 +171,8 @@ | ||||
| 	<string name="mgmt_account_disable">Temporarily disable</string> | ||||
| 	<string name="mgmt_account_publish_avatar">Publish avatar</string> | ||||
| 	<string name="mgmt_account_publish_pgp">Publish OpenPGP public key</string> | ||||
| 	<string name="unpublish_pgp">Remove OpenPGP public key</string> | ||||
| 	<string name="unpublish_pgp_message">Are you sure you want to remove your OpenPGP public key from your presence announcement?\nYour contacts will no longer be able to send you OpenPGP encrypted messages.</string> | ||||
| 	<string name="openpgp_has_been_published">OpenPGP public key has been published.</string> | ||||
| 	<string name="republish_pgp_keys">Remember to republish your OpenPGP public keys!</string> | ||||
| 	<string name="mgmt_account_enable">Enable account</string> | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch