k-9/k9mail/src/main/java/com/fsck/k9/ui/messageview/OpenPgpHeaderView.java

297 lines
13 KiB
Java
Raw Normal View History

2014-02-21 11:38:20 -05:00
package com.fsck.k9.ui.messageview;
2014-02-21 11:38:20 -05:00
import android.app.PendingIntent;
2014-02-21 11:38:20 -05:00
import android.content.Context;
2015-01-27 11:50:40 -05:00
import android.graphics.PorterDuff;
2014-02-21 11:38:20 -05:00
import android.util.AttributeSet;
import android.view.View;
2015-01-28 09:09:19 -05:00
import android.widget.Button;
2014-02-21 11:38:20 -05:00
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.fsck.k9.R;
2015-01-27 11:50:40 -05:00
2014-06-21 10:54:09 -04:00
import org.openintents.openpgp.OpenPgpSignatureResult;
2015-01-28 09:09:19 -05:00
import org.openintents.openpgp.util.OpenPgpUtils;
2014-06-21 10:54:09 -04:00
2015-01-28 05:30:29 -05:00
public class OpenPgpHeaderView extends LinearLayout {
private Context mContext;
private OpenPgpHeaderViewCallback callback;
2015-01-28 05:30:29 -05:00
private OpenPgpSignatureResult signatureResult;
private boolean encrypted;
private PendingIntent pendingIntent;
2014-02-21 11:38:20 -05:00
2015-01-27 11:50:40 -05:00
private ImageView mResultEncryptionIcon;
private TextView mResultEncryptionText;
private ImageView mResultSignatureIcon;
private TextView mResultSignatureText;
private LinearLayout mResultSignatureLayout;
private TextView mResultSignatureName;
private TextView mResultSignatureEmail;
2015-01-28 09:09:19 -05:00
private Button mResultSignatureButton;
2014-02-21 11:38:20 -05:00
2015-01-28 05:30:29 -05:00
public OpenPgpHeaderView(Context context, AttributeSet attrs) {
2014-02-21 11:38:20 -05:00
super(context, attrs);
mContext = context;
}
2015-01-28 05:30:29 -05:00
public void setOpenPgpData(OpenPgpSignatureResult signatureResult,
boolean encrypted, PendingIntent pendingIntent) {
2015-01-28 05:30:29 -05:00
this.signatureResult = signatureResult;
this.encrypted = encrypted;
this.pendingIntent = pendingIntent;
2015-01-28 05:30:29 -05:00
displayOpenPgpView();
}
public void setCallback(OpenPgpHeaderViewCallback callback) {
this.callback = callback;
}
2015-01-28 05:30:29 -05:00
public void displayOpenPgpView() {
2015-01-27 11:50:40 -05:00
mResultEncryptionIcon = (ImageView) findViewById(R.id.result_encryption_icon);
mResultEncryptionText = (TextView) findViewById(R.id.result_encryption_text);
mResultSignatureIcon = (ImageView) findViewById(R.id.result_signature_icon);
mResultSignatureText = (TextView) findViewById(R.id.result_signature_text);
mResultSignatureLayout = (LinearLayout) findViewById(R.id.result_signature_layout);
mResultSignatureName = (TextView) findViewById(R.id.result_signature_name);
mResultSignatureEmail = (TextView) findViewById(R.id.result_signature_email);
2015-01-28 09:09:19 -05:00
mResultSignatureButton = (Button) findViewById(R.id.result_signature_button);
2015-01-27 11:50:40 -05:00
mResultSignatureButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
callback.onPgpSignatureButtonClick(pendingIntent);
}
});
2014-02-21 11:38:20 -05:00
2015-01-28 05:30:29 -05:00
if (encrypted) {
2015-01-27 11:50:40 -05:00
setStatusImage(mContext, mResultEncryptionIcon, mResultEncryptionText, STATE_ENCRYPTED);
mResultEncryptionText.setText(R.string.openpgp_result_encrypted);
2015-01-28 05:30:29 -05:00
} else {
setStatusImage(mContext, mResultEncryptionIcon, mResultEncryptionText, STATE_NOT_ENCRYPTED);
mResultEncryptionText.setText(R.string.openpgp_result_not_encrypted);
2015-01-27 11:50:40 -05:00
}
2014-02-21 11:38:20 -05:00
2015-01-28 05:30:29 -05:00
if (signatureResult == null) {
setStatusImage(mContext, mResultSignatureIcon, mResultSignatureText, STATE_NOT_SIGNED);
mResultSignatureText.setText(R.string.openpgp_result_no_signature);
mResultSignatureLayout.setVisibility(View.GONE);
2015-01-28 05:30:29 -05:00
} else {
2014-02-21 11:38:20 -05:00
switch (signatureResult.getStatus()) {
case OpenPgpSignatureResult.SIGNATURE_ERROR: {
2015-01-27 11:50:40 -05:00
setStatusImage(mContext, mResultSignatureIcon, mResultSignatureText, STATE_INVALID);
mResultSignatureText.setText(R.string.openpgp_result_invalid_signature);
2015-01-28 09:09:19 -05:00
mResultSignatureButton.setVisibility(View.GONE);
mResultSignatureLayout.setVisibility(View.GONE);
2014-02-21 11:38:20 -05:00
break;
}
case OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED: {
2015-01-27 11:50:40 -05:00
setStatusImage(mContext, mResultSignatureIcon, mResultSignatureText, STATE_VERIFIED);
mResultSignatureText.setText(R.string.openpgp_result_signature_certified);
2015-01-27 11:50:40 -05:00
2015-01-28 09:22:38 -05:00
setUserId(signatureResult);
mResultSignatureButton.setText(R.string.openpgp_result_action_show);
2015-01-28 09:09:19 -05:00
mResultSignatureButton.setVisibility(View.VISIBLE);
mResultSignatureLayout.setVisibility(View.VISIBLE);
2014-02-21 11:38:20 -05:00
break;
}
2015-01-28 09:22:38 -05:00
case OpenPgpSignatureResult.SIGNATURE_KEY_MISSING: {
2015-01-27 11:50:40 -05:00
setStatusImage(mContext, mResultSignatureIcon, mResultSignatureText, STATE_UNKNOWN_KEY);
mResultSignatureText.setText(R.string.openpgp_result_signature_missing_key);
2015-01-27 11:50:40 -05:00
2015-01-28 09:22:38 -05:00
setUserId(signatureResult);
mResultSignatureButton.setText(R.string.openpgp_result_action_lookup);
2015-01-28 09:22:38 -05:00
mResultSignatureButton.setVisibility(View.VISIBLE);
mResultSignatureLayout.setVisibility(View.VISIBLE);
2014-02-21 11:38:20 -05:00
break;
}
case OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED: {
2015-01-27 11:50:40 -05:00
setStatusImage(mContext, mResultSignatureIcon, mResultSignatureText, STATE_UNVERIFIED);
mResultSignatureText.setText(R.string.openpgp_result_signature_uncertified);
2015-01-27 11:50:40 -05:00
2015-01-28 09:22:38 -05:00
setUserId(signatureResult);
mResultSignatureButton.setText(R.string.openpgp_result_action_show);
2015-01-28 09:22:38 -05:00
mResultSignatureButton.setVisibility(View.VISIBLE);
mResultSignatureLayout.setVisibility(View.VISIBLE);
break;
}
case OpenPgpSignatureResult.SIGNATURE_KEY_EXPIRED: {
setStatusImage(mContext, mResultSignatureIcon, mResultSignatureText, STATE_EXPIRED);
mResultSignatureText.setText(R.string.openpgp_result_signature_expired_key);
setUserId(signatureResult);
mResultSignatureButton.setText(R.string.openpgp_result_action_show);
2015-01-28 09:22:38 -05:00
mResultSignatureButton.setVisibility(View.VISIBLE);
mResultSignatureLayout.setVisibility(View.VISIBLE);
break;
}
case OpenPgpSignatureResult.SIGNATURE_KEY_REVOKED: {
setStatusImage(mContext, mResultSignatureIcon, mResultSignatureText, STATE_REVOKED);
mResultSignatureText.setText(R.string.openpgp_result_signature_revoked_key);
setUserId(signatureResult);
mResultSignatureButton.setText(R.string.openpgp_result_action_show);
2015-01-28 09:22:38 -05:00
mResultSignatureButton.setVisibility(View.VISIBLE);
mResultSignatureLayout.setVisibility(View.VISIBLE);
break;
}
2014-02-21 11:38:20 -05:00
default:
break;
}
}
}
2015-01-28 09:22:38 -05:00
private void setUserId(OpenPgpSignatureResult signatureResult) {
String[] splitUserId = OpenPgpUtils.splitUserId(signatureResult.getPrimaryUserId());
if (splitUserId[0] != null) {
mResultSignatureName.setText(splitUserId[0]);
} else {
mResultSignatureName.setText(R.string.openpgp_result_no_name);
2015-01-28 09:22:38 -05:00
}
if (splitUserId[1] != null) {
mResultSignatureEmail.setText(splitUserId[1]);
} else {
mResultSignatureEmail.setText(R.string.openpgp_result_no_email);
2015-01-28 09:22:38 -05:00
}
}
2015-01-27 11:50:40 -05:00
public static final int STATE_REVOKED = 1;
public static final int STATE_EXPIRED = 2;
public static final int STATE_VERIFIED = 3;
public static final int STATE_UNAVAILABLE = 4;
public static final int STATE_ENCRYPTED = 5;
public static final int STATE_NOT_ENCRYPTED = 6;
public static final int STATE_UNVERIFIED = 7;
public static final int STATE_UNKNOWN_KEY = 8;
public static final int STATE_INVALID = 9;
public static final int STATE_NOT_SIGNED = 10;
public static void setStatusImage(Context context, ImageView statusIcon, int state) {
setStatusImage(context, statusIcon, null, state);
2014-02-21 11:38:20 -05:00
}
/**
2015-01-27 11:50:40 -05:00
* Sets status image based on constant
2014-02-21 11:38:20 -05:00
*/
2015-01-27 11:50:40 -05:00
public static void setStatusImage(Context context, ImageView statusIcon, TextView statusText,
int state) {
switch (state) {
/** GREEN: everything is good **/
case STATE_VERIFIED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_verified_cutout));
int color = R.color.openpgp_green;
statusIcon.setColorFilter(context.getResources().getColor(color),
PorterDuff.Mode.SRC_IN);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(color));
2014-02-21 11:38:20 -05:00
}
2015-01-27 11:50:40 -05:00
break;
}
case STATE_ENCRYPTED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_lock_closed));
int color = R.color.openpgp_green;
statusIcon.setColorFilter(context.getResources().getColor(color),
PorterDuff.Mode.SRC_IN);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(color));
2014-02-21 11:38:20 -05:00
}
2015-01-27 11:50:40 -05:00
break;
}
/** ORANGE: mostly bad... **/
case STATE_UNVERIFIED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_unverified_cutout));
int color = R.color.openpgp_orange;
statusIcon.setColorFilter(context.getResources().getColor(color),
PorterDuff.Mode.SRC_IN);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(color));
2014-02-21 11:38:20 -05:00
}
2015-01-27 11:50:40 -05:00
break;
2014-02-21 11:38:20 -05:00
}
2015-01-27 11:50:40 -05:00
case STATE_UNKNOWN_KEY: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_unknown_cutout));
int color = R.color.openpgp_orange;
statusIcon.setColorFilter(context.getResources().getColor(color),
PorterDuff.Mode.SRC_IN);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(color));
2014-02-21 11:38:20 -05:00
}
2015-01-27 11:50:40 -05:00
break;
}
/** RED: really bad... **/
case STATE_REVOKED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_revoked_cutout));
int color = R.color.openpgp_red;
statusIcon.setColorFilter(context.getResources().getColor(color),
PorterDuff.Mode.SRC_IN);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(color));
}
break;
}
case STATE_EXPIRED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_expired_cutout));
int color = R.color.openpgp_red;
statusIcon.setColorFilter(context.getResources().getColor(color),
PorterDuff.Mode.SRC_IN);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(color));
}
break;
}
case STATE_NOT_ENCRYPTED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_lock_open));
int color = R.color.openpgp_red;
statusIcon.setColorFilter(context.getResources().getColor(color),
PorterDuff.Mode.SRC_IN);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(color));
}
break;
}
case STATE_NOT_SIGNED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_unknown_cutout));
int color = R.color.openpgp_red;
statusIcon.setColorFilter(context.getResources().getColor(color),
PorterDuff.Mode.SRC_IN);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(color));
}
break;
}
case STATE_INVALID: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_invalid_cutout));
int color = R.color.openpgp_red;
statusIcon.setColorFilter(context.getResources().getColor(color),
PorterDuff.Mode.SRC_IN);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(color));
}
break;
2014-02-21 11:38:20 -05:00
}
}
}
}