/** * Fill the decrypt layout with signature data, if known, make controls visible, if they should be * visible. */ public void updateLayout( final CryptoProvider cryptoProvider, final PgpData pgpData, final Message message) { if (pgpData.getSignatureKeyId() != 0) { mCryptoSignatureUserIdRest.setText( mContext.getString( R.string.key_id, Long.toHexString(pgpData.getSignatureKeyId() & 0xffffffffL))); String userId = pgpData.getSignatureUserId(); if (userId == null) { userId = mContext.getString(R.string.unknown_crypto_signature_user_id); } String chunks[] = userId.split(" <", 2); String name = chunks[0]; if (chunks.length > 1) { mCryptoSignatureUserIdRest.setText("<" + chunks[1]); } mCryptoSignatureUserId.setText(name); if (pgpData.getSignatureSuccess()) { mCryptoSignatureStatusImage.setImageResource(R.drawable.overlay_ok); } else if (pgpData.getSignatureUnknown()) { mCryptoSignatureStatusImage.setImageResource(R.drawable.overlay_error); } else { mCryptoSignatureStatusImage.setImageResource(R.drawable.overlay_error); } mCryptoSignatureLayout.setVisibility(View.VISIBLE); this.setVisibility(View.VISIBLE); } else { mCryptoSignatureLayout.setVisibility(View.INVISIBLE); } if ((message == null) && (pgpData.getDecryptedData() == null)) { this.setVisibility(View.GONE); return; } if (pgpData.getDecryptedData() != null) { if (pgpData.getSignatureKeyId() == 0) { this.setVisibility(View.GONE); } else { // no need to show this after decryption/verification mDecryptButton.setVisibility(View.GONE); } return; } mDecryptButton.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { try { String data = null; Part part = MimeUtility.findFirstPartByMimeType(message, "text/plain"); if (part == null) { part = MimeUtility.findFirstPartByMimeType(message, "text/html"); } if (part != null) { data = MimeUtility.getTextFromPart(part); } cryptoProvider.decrypt(mActivity, data, pgpData); } catch (MessagingException me) { Log.e(K9.LOG_TAG, "Unable to decrypt email.", me); } } }); mDecryptButton.setVisibility(View.VISIBLE); if (cryptoProvider.isEncrypted(message)) { mDecryptButton.setText(R.string.btn_decrypt); this.setVisibility(View.VISIBLE); } else if (cryptoProvider.isSigned(message)) { mDecryptButton.setText(R.string.btn_verify); this.setVisibility(View.VISIBLE); } else { this.setVisibility(View.GONE); try { // check for PGP/MIME encryption Part pgp = MimeUtility.findFirstPartByMimeType(message, "application/pgp-encrypted"); if (pgp != null) { Toast.makeText(mContext, R.string.pgp_mime_unsupported, Toast.LENGTH_LONG).show(); } } catch (MessagingException e) { // nothing to do... } } }