mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-27 11:42:16 -05:00
pass OpenPgpError to display, delete old layout
This commit is contained in:
parent
d57f6c0ed5
commit
a0b4faf688
@ -440,7 +440,7 @@ public class LocalMessageExtractor {
|
|||||||
OpenPgpResultBodyPart resultBodyPart = getSignatureResultForPart(part);
|
OpenPgpResultBodyPart resultBodyPart = getSignatureResultForPart(part);
|
||||||
if (resultBodyPart != NO_SIGNATURE_RESULT) {
|
if (resultBodyPart != NO_SIGNATURE_RESULT) {
|
||||||
OpenPgpSignatureResult pgpResult = resultBodyPart.getSignatureResult();
|
OpenPgpSignatureResult pgpResult = resultBodyPart.getSignatureResult();
|
||||||
OpenPgpError pgpError = null;
|
OpenPgpError pgpError = resultBodyPart.getError();
|
||||||
boolean wasEncrypted = resultBodyPart.wasEncrypted();
|
boolean wasEncrypted = resultBodyPart.wasEncrypted();
|
||||||
PendingIntent pendingIntent = resultBodyPart.getPendingIntent();
|
PendingIntent pendingIntent = resultBodyPart.getPendingIntent();
|
||||||
|
|
||||||
@ -456,6 +456,16 @@ public class LocalMessageExtractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<Part> getCryptPieces(Part part) throws MessagingException {
|
public static List<Part> getCryptPieces(Part part) throws MessagingException {
|
||||||
|
|
||||||
|
// TODO make sure this method does what it is supposed to
|
||||||
|
/* This method returns a list of mime parts which are to be parsed into
|
||||||
|
* individual MessageViewContainers for display, which each have their
|
||||||
|
* own crypto header. This means parts should be individual for each
|
||||||
|
* multipart/encrypted, multipart/signed, or a multipart/* which does
|
||||||
|
* not contain children of the former types.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
ArrayList<Part> parts = new ArrayList<Part>();
|
ArrayList<Part> parts = new ArrayList<Part>();
|
||||||
if (!getCryptSubPieces(part, parts)) {
|
if (!getCryptSubPieces(part, parts)) {
|
||||||
parts.add(part);
|
parts.add(part);
|
||||||
|
@ -1,423 +0,0 @@
|
|||||||
|
|
||||||
package com.fsck.k9.ui.messageview;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.nio.charset.Charset;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.Fragment;
|
|
||||||
import android.app.PendingIntent;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.IntentSender.SendIntentException;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.view.View;
|
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.ProgressBar;
|
|
||||||
import android.widget.RelativeLayout;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import com.fsck.k9.Account;
|
|
||||||
import com.fsck.k9.Identity;
|
|
||||||
import com.fsck.k9.K9;
|
|
||||||
import com.fsck.k9.R;
|
|
||||||
import com.fsck.k9.crypto.CryptoHelper;
|
|
||||||
import com.fsck.k9.crypto.OpenPgpApiHelper;
|
|
||||||
import com.fsck.k9.helper.IdentityHelper;
|
|
||||||
import com.fsck.k9.mail.Message;
|
|
||||||
import com.fsck.k9.mail.MessagingException;
|
|
||||||
import com.fsck.k9.mail.Part;
|
|
||||||
|
|
||||||
import com.fsck.k9.mail.internet.MessageExtractor;
|
|
||||||
import com.fsck.k9.mail.internet.MimeUtility;
|
|
||||||
import org.openintents.openpgp.OpenPgpError;
|
|
||||||
import org.openintents.openpgp.OpenPgpSignatureResult;
|
|
||||||
import org.openintents.openpgp.util.OpenPgpApi;
|
|
||||||
import org.openintents.openpgp.util.OpenPgpServiceConnection;
|
|
||||||
|
|
||||||
public class MessageOpenPgpViewOld extends LinearLayout {
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private MessageViewFragment mFragment;
|
|
||||||
private RelativeLayout mSignatureLayout = null;
|
|
||||||
private ImageView mSignatureStatusImage = null;
|
|
||||||
private TextView mSignatureUserId = null;
|
|
||||||
private TextView mText = null;
|
|
||||||
private ProgressBar mProgress;
|
|
||||||
private Button mGetKeyButton;
|
|
||||||
|
|
||||||
private OpenPgpServiceConnection mOpenPgpServiceConnection;
|
|
||||||
private OpenPgpApi mOpenPgpApi;
|
|
||||||
|
|
||||||
private String mOpenPgpProvider;
|
|
||||||
private Message mMessage;
|
|
||||||
|
|
||||||
private PendingIntent mMissingKeyPI;
|
|
||||||
|
|
||||||
private static final int REQUEST_CODE_DECRYPT_VERIFY = 12;
|
|
||||||
|
|
||||||
String mData;
|
|
||||||
Account mAccount;
|
|
||||||
|
|
||||||
public MessageOpenPgpViewOld(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
mContext = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setupChildViews() {
|
|
||||||
mSignatureLayout = (RelativeLayout) findViewById(R.id.openpgp_signature_layout);
|
|
||||||
mSignatureStatusImage = (ImageView) findViewById(R.id.openpgp_signature_status);
|
|
||||||
mSignatureUserId = (TextView) findViewById(R.id.openpgp_user_id);
|
|
||||||
mText = (TextView) findViewById(R.id.openpgp_text);
|
|
||||||
mProgress = (ProgressBar) findViewById(R.id.openpgp_progress);
|
|
||||||
mGetKeyButton = (Button) findViewById(R.id.openpgp_get_key);
|
|
||||||
|
|
||||||
mGetKeyButton.setOnClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
getMissingKey();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFragment(Fragment fragment) {
|
|
||||||
mFragment = (MessageViewFragment) fragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fill the decrypt layout with signature data, if known, make controls
|
|
||||||
* visible, if they should be visible.
|
|
||||||
*/
|
|
||||||
public void updateLayout(Account account, String decryptedData,
|
|
||||||
final OpenPgpSignatureResult signatureResult,
|
|
||||||
final Message message) {
|
|
||||||
|
|
||||||
// set class variables
|
|
||||||
mAccount = account;
|
|
||||||
mOpenPgpProvider = mAccount.getOpenPgpProvider();
|
|
||||||
mMessage = message;
|
|
||||||
|
|
||||||
// only use this view if a OpenPGP Provider is set
|
|
||||||
if (mOpenPgpProvider == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Activity activity = mFragment.getActivity();
|
|
||||||
if (activity == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// bind to service
|
|
||||||
mOpenPgpServiceConnection = new OpenPgpServiceConnection(activity,
|
|
||||||
mOpenPgpProvider);
|
|
||||||
mOpenPgpServiceConnection.bindToService();
|
|
||||||
|
|
||||||
if ((message == null) && (decryptedData == null)) {
|
|
||||||
this.setVisibility(View.GONE);
|
|
||||||
|
|
||||||
// don't process further
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (decryptedData != null && signatureResult == null) {
|
|
||||||
// encrypted-only
|
|
||||||
|
|
||||||
MessageOpenPgpViewOld.this.setBackgroundColor(mFragment.getResources().getColor(
|
|
||||||
R.color.openpgp_blue));
|
|
||||||
mText.setText(R.string.openpgp_successful_decryption);
|
|
||||||
|
|
||||||
// don't process further
|
|
||||||
return;
|
|
||||||
} else if (decryptedData != null && signatureResult != null) {
|
|
||||||
// signed-only and signed-and-encrypted
|
|
||||||
|
|
||||||
switch (signatureResult.getStatus()) {
|
|
||||||
case OpenPgpSignatureResult.SIGNATURE_ERROR:
|
|
||||||
// TODO: signature error but decryption works?
|
|
||||||
mText.setText(R.string.openpgp_signature_invalid);
|
|
||||||
MessageOpenPgpViewOld.this.setBackgroundColor(mFragment.getResources().getColor(
|
|
||||||
R.color.openpgp_red));
|
|
||||||
|
|
||||||
mGetKeyButton.setVisibility(View.GONE);
|
|
||||||
mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
|
|
||||||
mSignatureLayout.setVisibility(View.GONE);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED:
|
|
||||||
if (signatureResult.isSignatureOnly()) {
|
|
||||||
mText.setText(R.string.openpgp_signature_valid_certified);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mText.setText(R.string.openpgp_successful_decryption_valid_signature_certified);
|
|
||||||
}
|
|
||||||
MessageOpenPgpViewOld.this.setBackgroundColor(mFragment.getResources().getColor(
|
|
||||||
R.color.openpgp_green));
|
|
||||||
|
|
||||||
mGetKeyButton.setVisibility(View.GONE);
|
|
||||||
mSignatureUserId.setText(signatureResult.getPrimaryUserId());
|
|
||||||
mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
|
|
||||||
mSignatureLayout.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OpenPgpSignatureResult.SIGNATURE_KEY_MISSING:
|
|
||||||
if (signatureResult.isSignatureOnly()) {
|
|
||||||
mText.setText(R.string.openpgp_signature_unknown_text);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mText.setText(R.string.openpgp_successful_decryption_unknown_signature);
|
|
||||||
}
|
|
||||||
MessageOpenPgpViewOld.this.setBackgroundColor(mFragment.getResources().getColor(
|
|
||||||
R.color.openpgp_orange));
|
|
||||||
|
|
||||||
mGetKeyButton.setVisibility(View.VISIBLE);
|
|
||||||
mSignatureUserId.setText(R.string.openpgp_signature_unknown);
|
|
||||||
mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
|
|
||||||
mSignatureLayout.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED:
|
|
||||||
if (signatureResult.isSignatureOnly()) {
|
|
||||||
mText.setText(R.string.openpgp_signature_valid_uncertified);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mText.setText(R.string.openpgp_successful_decryption_valid_signature_uncertified);
|
|
||||||
}
|
|
||||||
MessageOpenPgpViewOld.this.setBackgroundColor(mFragment.getResources().getColor(
|
|
||||||
R.color.openpgp_orange));
|
|
||||||
|
|
||||||
mGetKeyButton.setVisibility(View.GONE);
|
|
||||||
mSignatureUserId.setText(signatureResult.getPrimaryUserId());
|
|
||||||
mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
|
|
||||||
mSignatureLayout.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// don't process further
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start new decryption/verification
|
|
||||||
CryptoHelper helper = new CryptoHelper();
|
|
||||||
if (helper.isEncrypted(message) || helper.isSigned(message)) {
|
|
||||||
// start automatic decrypt
|
|
||||||
decryptAndVerify(message);
|
|
||||||
} else {
|
|
||||||
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...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void decryptAndVerify(final Message message) {
|
|
||||||
this.setVisibility(View.VISIBLE);
|
|
||||||
mProgress.setVisibility(View.VISIBLE);
|
|
||||||
MessageOpenPgpViewOld.this.setBackgroundColor(mFragment.getResources().getColor(
|
|
||||||
R.color.openpgp_orange));
|
|
||||||
mText.setText(R.string.openpgp_decrypting_verifying);
|
|
||||||
|
|
||||||
// waiting in a new thread
|
|
||||||
Runnable r = new Runnable() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
// get data String
|
|
||||||
Part part = MimeUtility.findFirstPartByMimeType(message, "text/plain");
|
|
||||||
if (part == null) {
|
|
||||||
part = MimeUtility.findFirstPartByMimeType(message, "text/html");
|
|
||||||
}
|
|
||||||
if (part != null) {
|
|
||||||
mData = MessageExtractor.getTextFromPart(part);
|
|
||||||
}
|
|
||||||
|
|
||||||
// wait for service to be bound
|
|
||||||
while (!mOpenPgpServiceConnection.isBound()) {
|
|
||||||
try {
|
|
||||||
Thread.sleep(100);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mOpenPgpApi = new OpenPgpApi(getContext(),
|
|
||||||
mOpenPgpServiceConnection.getService());
|
|
||||||
|
|
||||||
decryptVerify(new Intent());
|
|
||||||
|
|
||||||
} catch (MessagingException me) {
|
|
||||||
Log.e(K9.LOG_TAG, "Unable to decrypt email.", me);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
new Thread(r).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void decryptVerify(Intent intent) {
|
|
||||||
intent.setAction(OpenPgpApi.ACTION_DECRYPT_VERIFY);
|
|
||||||
intent.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
|
|
||||||
|
|
||||||
Identity identity = IdentityHelper.getRecipientIdentityFromMessage(mAccount, mMessage);
|
|
||||||
String accName = OpenPgpApiHelper.buildAccountName(identity);
|
|
||||||
intent.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, accName);
|
|
||||||
|
|
||||||
InputStream is = new ByteArrayInputStream(mData.getBytes(Charset.forName("UTF-8")));
|
|
||||||
final ByteArrayOutputStream os = new ByteArrayOutputStream();
|
|
||||||
|
|
||||||
DecryptVerifyCallback callback = new DecryptVerifyCallback(os, REQUEST_CODE_DECRYPT_VERIFY);
|
|
||||||
|
|
||||||
mOpenPgpApi.executeApiAsync(intent, is, os, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void getMissingKey() {
|
|
||||||
try {
|
|
||||||
mFragment.getActivity().startIntentSenderForResult(
|
|
||||||
mMissingKeyPI.getIntentSender(),
|
|
||||||
REQUEST_CODE_DECRYPT_VERIFY, null, 0, 0, 0);
|
|
||||||
} catch (SendIntentException e) {
|
|
||||||
Log.e(K9.LOG_TAG, "SendIntentException", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called on successful decrypt/verification
|
|
||||||
*/
|
|
||||||
private class DecryptVerifyCallback implements OpenPgpApi.IOpenPgpCallback {
|
|
||||||
ByteArrayOutputStream os;
|
|
||||||
int requestCode;
|
|
||||||
|
|
||||||
private DecryptVerifyCallback(ByteArrayOutputStream os, int requestCode) {
|
|
||||||
this.os = os;
|
|
||||||
this.requestCode = requestCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onReturn(Intent result) {
|
|
||||||
switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) {
|
|
||||||
case OpenPgpApi.RESULT_CODE_SUCCESS: {
|
|
||||||
try {
|
|
||||||
final String output = os.toString("UTF-8");
|
|
||||||
|
|
||||||
OpenPgpSignatureResult sigResult = null;
|
|
||||||
if (result.hasExtra(OpenPgpApi.RESULT_SIGNATURE)) {
|
|
||||||
sigResult = result.getParcelableExtra(OpenPgpApi.RESULT_SIGNATURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (K9.DEBUG)
|
|
||||||
Log.d(K9.LOG_TAG, "result: " + os.toByteArray().length
|
|
||||||
+ " str=" + output);
|
|
||||||
|
|
||||||
// missing key -> PendingIntent to get keys
|
|
||||||
mMissingKeyPI = result.getParcelableExtra(OpenPgpApi.RESULT_INTENT);
|
|
||||||
|
|
||||||
mProgress.setVisibility(View.GONE);
|
|
||||||
// mFragment.setMessageWithOpenPgp(output, sigResult);
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
Log.e(K9.LOG_TAG, "UnsupportedEncodingException", e);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED: {
|
|
||||||
PendingIntent pi = result.getParcelableExtra(OpenPgpApi.RESULT_INTENT);
|
|
||||||
try {
|
|
||||||
mFragment.getActivity().startIntentSenderForResult(
|
|
||||||
pi.getIntentSender(),
|
|
||||||
requestCode, null, 0, 0, 0);
|
|
||||||
} catch (SendIntentException e) {
|
|
||||||
Log.e(K9.LOG_TAG, "SendIntentException", e);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case OpenPgpApi.RESULT_CODE_ERROR: {
|
|
||||||
OpenPgpError error = result.getParcelableExtra(OpenPgpApi.RESULT_ERROR);
|
|
||||||
handleError(error);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean handleOnActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
if (K9.DEBUG)
|
|
||||||
Log.d(K9.LOG_TAG, "onActivityResult resultCode: " + resultCode);
|
|
||||||
|
|
||||||
// try again after user interaction
|
|
||||||
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_DECRYPT_VERIFY) {
|
|
||||||
/*
|
|
||||||
* The data originally given to the decryptVerify() method, is again
|
|
||||||
* returned here to be used when calling decryptVerify() after user
|
|
||||||
* interaction. The Intent now also contains results from the user
|
|
||||||
* interaction, for example selected key ids.
|
|
||||||
*/
|
|
||||||
decryptVerify(data);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleError(final OpenPgpError error) {
|
|
||||||
Activity activity = mFragment.getActivity();
|
|
||||||
if (activity == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
activity.runOnUiThread(new Runnable() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
mProgress.setVisibility(View.GONE);
|
|
||||||
|
|
||||||
if (K9.DEBUG) {
|
|
||||||
Log.d(K9.LOG_TAG, "OpenPGP Error ID:" + error.getErrorId());
|
|
||||||
Log.d(K9.LOG_TAG, "OpenPGP Error Message:" + error.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
mText.setText(mFragment.getString(R.string.openpgp_error) + " "
|
|
||||||
+ error.getMessage());
|
|
||||||
MessageOpenPgpViewOld.this.setBackgroundColor(mFragment.getResources().getColor(
|
|
||||||
R.color.openpgp_red));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onAttachedToWindow() {
|
|
||||||
super.onAttachedToWindow();
|
|
||||||
|
|
||||||
// bind to service if a OpenPGP Provider is available
|
|
||||||
if (mOpenPgpProvider != null) {
|
|
||||||
mOpenPgpServiceConnection = new OpenPgpServiceConnection(mFragment.getActivity(),
|
|
||||||
mOpenPgpProvider);
|
|
||||||
mOpenPgpServiceConnection.bindToService();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDetachedFromWindow() {
|
|
||||||
super.onDetachedFromWindow();
|
|
||||||
|
|
||||||
if (mOpenPgpServiceConnection != null) {
|
|
||||||
mOpenPgpServiceConnection.unbindFromService();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -250,6 +250,4 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<include layout="@layout/message_view_openpgp_layout_old"/>
|
|
||||||
|
|
||||||
</com.fsck.k9.view.MessageHeader>
|
</com.fsck.k9.view.MessageHeader>
|
||||||
|
@ -1,91 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<com.fsck.k9.ui.messageview.MessageOpenPgpViewOld xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/layout_decrypt_openpgp"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:visibility="gone" >
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1.00"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:padding="2dp" >
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/openpgp_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:ellipsize="end"
|
|
||||||
android:gravity="center"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:padding="2dp"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:textColor="?android:textColorPrimaryInverse"
|
|
||||||
android:textIsSelectable="false" />
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:id="@+id/openpgp_signature_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:padding="2dp"
|
|
||||||
android:visibility="gone" >
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:id="@+id/openpgp_signature_layout_image"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" >
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/openpgp_signature"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@drawable/signed_large" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/openpgp_signature_status"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:src="@drawable/overlay_error" />
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/openpgp_user_id"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_toRightOf="@+id/openpgp_signature_layout_image"
|
|
||||||
android:ellipsize="end"
|
|
||||||
android:paddingLeft="5dip"
|
|
||||||
android:text="@string/openpgp_user_id"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:textColor="?android:textColorPrimaryInverse" />
|
|
||||||
</RelativeLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/openpgp_get_key"
|
|
||||||
style="?android:attr/buttonStyleSmall"
|
|
||||||
android:layout_width="100dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_alignTop="@+id/openpgp_signature_layout_image"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:text="@string/openpgp_get_key"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
<ProgressBar
|
|
||||||
android:id="@+id/openpgp_progress"
|
|
||||||
style="?android:attr/progressBarStyleSmallInverse"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:padding="4dp"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
</com.fsck.k9.ui.messageview.MessageOpenPgpViewOld>
|
|
Loading…
Reference in New Issue
Block a user