New decryption screen UI with modernPGP icons

This commit is contained in:
Dominik Schürmann 2014-10-08 17:32:32 +02:00
parent adcc07ca65
commit b573afe235
31 changed files with 391 additions and 242 deletions

View File

@ -21,16 +21,14 @@ import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import org.openintents.openpgp.OpenPgpSignatureResult;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.KeyRing;
import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.service.results.DecryptVerifyResult;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
@ -43,14 +41,19 @@ public abstract class DecryptFragment extends Fragment {
protected long mSignatureKeyId = 0;
protected LinearLayout mResultLayout;
protected RelativeLayout mSignatureLayout;
protected TextView mResultText;
protected ImageView mSignatureStatusImage;
protected TextView mUserId;
protected TextView mUserIdRest;
protected ImageView mEncryptionIcon;
protected TextView mEncryptionText;
protected ImageView mSignatureIcon;
protected TextView mSignatureText;
protected View mSignatureLayout;
protected View mSignatureDivider1;
protected View mSignatureDivider2;
protected TextView mSignatureName;
protected TextView mSignatureEmail;
protected TextView mSignatureAction;
protected Button mLookupKey;
// State
protected String mPassphrase;
@ -60,20 +63,20 @@ public abstract class DecryptFragment extends Fragment {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mResultLayout = (LinearLayout) getView().findViewById(R.id.result);
mResultText = (TextView) getView().findViewById(R.id.result_text);
mSignatureLayout = (RelativeLayout) getView().findViewById(R.id.result_signature);
mSignatureStatusImage = (ImageView) getView().findViewById(R.id.ic_signature_status);
mUserId = (TextView) getView().findViewById(R.id.mainUserId);
mUserIdRest = (TextView) getView().findViewById(R.id.mainUserIdRest);
mLookupKey = (Button) getView().findViewById(R.id.lookup_key);
mLookupKey.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
lookupUnknownKey(mSignatureKeyId);
}
});
mResultLayout = (LinearLayout) getView().findViewById(R.id.result_main_layout);
mResultLayout.setVisibility(View.GONE);
mEncryptionIcon = (ImageView) getView().findViewById(R.id.result_encryption_icon);
mEncryptionText = (TextView) getView().findViewById(R.id.result_encryption_text);
mSignatureIcon = (ImageView) getView().findViewById(R.id.result_signature_icon);
mSignatureText = (TextView) getView().findViewById(R.id.result_signature_text);
mSignatureLayout = getView().findViewById(R.id.result_signature_layout);
mSignatureDivider1 = getView().findViewById(R.id.result_signature_divider1);
mSignatureDivider2 = getView().findViewById(R.id.result_signature_divider2);
mSignatureName = (TextView) getView().findViewById(R.id.result_signature_name);
mSignatureEmail = (TextView) getView().findViewById(R.id.result_signature_email);
mSignatureAction = (TextView) getView().findViewById(R.id.result_signature_action);
}
private void lookupUnknownKey(long unknownKeyId) {
@ -103,101 +106,114 @@ public abstract class DecryptFragment extends Fragment {
}
protected void onResult(DecryptVerifyResult decryptVerifyResult) {
OpenPgpSignatureResult signatureResult = decryptVerifyResult.getSignatureResult();
final OpenPgpSignatureResult signatureResult = decryptVerifyResult.getSignatureResult();
mSignatureKeyId = 0;
mResultLayout.setVisibility(View.VISIBLE);
if (signatureResult != null) {
mSignatureStatusImage.setVisibility(View.VISIBLE);
mSignatureKeyId = signatureResult.getKeyId();
String userId = signatureResult.getPrimaryUserId();
String[] userIdSplit = KeyRing.splitUserId(userId);
if (userIdSplit[0] != null) {
mUserId.setText(userIdSplit[0]);
mSignatureName.setText(userIdSplit[0]);
} else {
mUserId.setText(R.string.user_id_no_name);
mSignatureName.setText(R.string.user_id_no_name);
}
if (userIdSplit[1] != null) {
mUserIdRest.setText(userIdSplit[1]);
mSignatureEmail.setText(userIdSplit[1]);
} else {
mUserIdRest.setText(KeyFormattingUtils.beautifyKeyIdWithPrefix(getActivity(), mSignatureKeyId));
mSignatureEmail.setText(KeyFormattingUtils.beautifyKeyIdWithPrefix(getActivity(), mSignatureKeyId));
}
if (signatureResult.isSignatureOnly()) {
mEncryptionText.setText(R.string.decrypt_result_not_encrypted);
KeyFormattingUtils.setStatusImage(getActivity(), mEncryptionIcon, mEncryptionText, KeyFormattingUtils.STATE_NOT_ENCRYPTED);
} else {
mEncryptionText.setText(R.string.decrypt_result_encrypted);
KeyFormattingUtils.setStatusImage(getActivity(), mEncryptionIcon, mEncryptionText, KeyFormattingUtils.STATE_ENCRYPTED);
}
switch (signatureResult.getStatus()) {
case OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED: {
if (signatureResult.isSignatureOnly()) {
mResultText.setText(R.string.decrypt_result_signature_certified);
} else {
mResultText.setText(R.string.decrypt_result_decrypted_and_signature_certified);
}
mSignatureText.setText(R.string.decrypt_result_signature_certified);
KeyFormattingUtils.setStatusImage(getActivity(), mSignatureIcon, mSignatureText, KeyFormattingUtils.STATE_VERIFIED);
mResultLayout.setBackgroundColor(getResources().getColor(R.color.android_green_light));
mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
mSignatureLayout.setVisibility(View.VISIBLE);
mLookupKey.setVisibility(View.GONE);
setSignatureLayoutVisibility(View.VISIBLE);
mSignatureAction.setText(R.string.decrypt_result_action_show);
mSignatureAction.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_action_accounts, 0);
mSignatureLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent viewKeyIntent = new Intent(getActivity(), ViewKeyActivity.class);
viewKeyIntent.setData(KeychainContract.KeyRings
.buildGenericKeyRingUri(mSignatureKeyId));
startActivity(viewKeyIntent);
}
});
break;
}
case OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED: {
if (signatureResult.isSignatureOnly()) {
mResultText.setText(R.string.decrypt_result_signature_uncertified);
} else {
mResultText.setText(R.string.decrypt_result_decrypted_and_signature_uncertified);
}
mSignatureText.setText(R.string.decrypt_result_signature_uncertified);
KeyFormattingUtils.setStatusImage(getActivity(), mSignatureIcon, mSignatureText, KeyFormattingUtils.STATE_UNVERIFIED);
mResultLayout.setBackgroundColor(getResources().getColor(R.color.android_orange_light));
mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
mSignatureLayout.setVisibility(View.VISIBLE);
mLookupKey.setVisibility(View.GONE);
setSignatureLayoutVisibility(View.VISIBLE);
mSignatureAction.setText(R.string.decrypt_result_action_show);
mSignatureAction.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_action_accounts, 0);
mSignatureLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent viewKeyIntent = new Intent(getActivity(), ViewKeyActivity.class);
viewKeyIntent.setData(KeychainContract.KeyRings
.buildGenericKeyRingUri(mSignatureKeyId));
startActivity(viewKeyIntent);
}
});
break;
}
case OpenPgpSignatureResult.SIGNATURE_KEY_MISSING: {
if (signatureResult.isSignatureOnly()) {
mResultText.setText(R.string.decrypt_result_signature_unknown_pub_key);
} else {
mResultText.setText(R.string.decrypt_result_decrypted_unknown_pub_key);
}
mSignatureText.setText(R.string.decrypt_result_signature_unknown_pub_key);
KeyFormattingUtils.setStatusImage(getActivity(), mSignatureIcon, mSignatureText, KeyFormattingUtils.STATE_UNKNOWN_KEY);
mResultLayout.setBackgroundColor(getResources().getColor(R.color.android_orange_light));
mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
mSignatureLayout.setVisibility(View.VISIBLE);
mLookupKey.setVisibility(View.VISIBLE);
setSignatureLayoutVisibility(View.VISIBLE);
mSignatureAction.setText(R.string.decrypt_result_action_Lookup);
mSignatureAction.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_action_download, 0);
mSignatureLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lookupUnknownKey(mSignatureKeyId);
}
});
break;
}
// TODO: Maybe this should be part of the Result parcel, it is an error, not a valid status!
case OpenPgpSignatureResult.SIGNATURE_ERROR: {
mResultText.setText(R.string.decrypt_result_invalid_signature);
mSignatureText.setText(R.string.decrypt_result_invalid_signature);
KeyFormattingUtils.setStatusImage(getActivity(), mSignatureIcon, mSignatureText, KeyFormattingUtils.STATE_INVALID);
mResultLayout.setBackgroundColor(getResources().getColor(R.color.android_red_light));
mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
mSignatureLayout.setVisibility(View.GONE);
mLookupKey.setVisibility(View.GONE);
break;
}
default: {
mResultText.setText(R.string.error);
mResultLayout.setBackgroundColor(getResources().getColor(R.color.android_red_light));
mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
mSignatureLayout.setVisibility(View.GONE);
mLookupKey.setVisibility(View.GONE);
setSignatureLayoutVisibility(View.GONE);
break;
}
}
} else {
mSignatureLayout.setVisibility(View.GONE);
mLookupKey.setVisibility(View.GONE);
setSignatureLayoutVisibility(View.GONE);
// successful decryption-only
mResultLayout.setBackgroundColor(getResources().getColor(R.color.android_purple_light));
mResultText.setText(R.string.decrypt_result_decrypted);
mSignatureText.setText(R.string.decrypt_result_no_signature);
KeyFormattingUtils.setStatusImage(getActivity(), mSignatureIcon, mSignatureText, KeyFormattingUtils.STATE_NOT_SIGNED);
mEncryptionText.setText(R.string.decrypt_result_encrypted);
KeyFormattingUtils.setStatusImage(getActivity(), mEncryptionIcon, mEncryptionText, KeyFormattingUtils.STATE_ENCRYPTED);
}
}
private void setSignatureLayoutVisibility(int visibility) {
mSignatureLayout.setVisibility(visibility);
mSignatureDivider1.setVisibility(visibility);
mSignatureDivider2.setVisibility(visibility);
}
/**
* Should be overridden by MessageFragment and FileFragment to start actual decryption
*/

View File

@ -64,12 +64,12 @@ public class UserIdInfoDialogFragment extends DialogFragment {
} else {
switch (isVerified) {
case KeychainContract.Certs.VERIFIED_SECRET:
title = getString(R.string.user_id_info_verified_title);
message = getString(R.string.user_id_info_verified_text);
title = getString(R.string.user_id_info_certified_title);
message = getString(R.string.user_id_info_certified_text);
break;
case KeychainContract.Certs.VERIFIED_SELF:
title = getString(R.string.user_id_info_not_verified_title);
message = getString(R.string.user_id_info_not_verified_text);
title = getString(R.string.user_id_info_uncertified_title);
message = getString(R.string.user_id_info_uncertified_text);
break;
default:
title = getString(R.string.user_id_info_invalid_title);

View File

@ -19,18 +19,13 @@
package org.sufficientlysecure.keychain.ui.util;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.Typeface;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.text.style.TypefaceSpan;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import org.spongycastle.asn1.ASN1ObjectIdentifier;
import org.spongycastle.asn1.nist.NISTNamedCurves;
@ -386,36 +381,126 @@ public class KeyFormattingUtils {
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);
}
/**
* Sets status image based on constant
*/
public static void setStatusImage(Context context, ImageView statusView, int state) {
public static void setStatusImage(Context context, ImageView statusIcon, TextView statusText, int state) {
switch (state) {
case STATE_REVOKED:
statusView.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_revoked_cutout));
statusView.setColorFilter(context.getResources().getColor(R.color.android_red_dark),
PorterDuff.Mode.SRC_ATOP);
break;
case STATE_EXPIRED:
statusView.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_expired_cutout));
statusView.setColorFilter(context.getResources().getColor(R.color.android_orange_dark),
PorterDuff.Mode.SRC_ATOP);
break;
case STATE_UNAVAILABLE:
statusView.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_invalid_cutout));
statusView.setColorFilter(context.getResources().getColor(R.color.bg_gray),
PorterDuff.Mode.SRC_ATOP);
break;
case STATE_VERIFIED:
statusView.setImageDrawable(
/** GREEN: everything is good **/
case STATE_VERIFIED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_verified_cutout));
statusView.setColorFilter(context.getResources().getColor(R.color.android_green_dark),
statusIcon.setColorFilter(context.getResources().getColor(R.color.android_green_dark),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.android_green_dark));
}
break;
}
case STATE_ENCRYPTED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_lock_closed));
statusIcon.setColorFilter(context.getResources().getColor(R.color.android_green_dark),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.android_green_dark));
}
break;
}
/** ORANGE: mostly bad... **/
case STATE_UNVERIFIED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_unverified_cutout));
statusIcon.setColorFilter(context.getResources().getColor(R.color.android_orange_dark),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.android_orange_dark));
}
break;
}
case STATE_EXPIRED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_expired_cutout));
statusIcon.setColorFilter(context.getResources().getColor(R.color.android_orange_dark),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.android_orange_dark));
}
break;
}
case STATE_UNKNOWN_KEY: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_unknown_cutout));
statusIcon.setColorFilter(context.getResources().getColor(R.color.android_orange_dark),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.android_orange_dark));
}
break;
}
/** RED: really bad... **/
case STATE_REVOKED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_revoked_cutout));
statusIcon.setColorFilter(context.getResources().getColor(R.color.android_red_dark),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.android_red_dark));
}
break;
}
case STATE_NOT_ENCRYPTED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_lock_open));
statusIcon.setColorFilter(context.getResources().getColor(R.color.android_red_dark),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.android_red_dark));
}
break;
}
case STATE_NOT_SIGNED: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_unknown_cutout));
statusIcon.setColorFilter(context.getResources().getColor(R.color.android_red_dark),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.android_red_dark));
}
break;
}
case STATE_INVALID: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_invalid_cutout));
statusIcon.setColorFilter(context.getResources().getColor(R.color.android_red_dark),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.android_red_dark));
}
break;
}
/** special **/
case STATE_UNAVAILABLE: {
statusIcon.setImageDrawable(
context.getResources().getDrawable(R.drawable.status_signature_invalid_cutout));
statusIcon.setColorFilter(context.getResources().getColor(R.color.bg_gray),
PorterDuff.Mode.SRC_ATOP);
if (statusText != null) {
statusText.setTextColor(context.getResources().getColor(R.color.bg_gray));
}
break;
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -1,97 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/result"
android:id="@+id/result_main_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:background="@color/android_purple_light">
android:background="@color/holo_gray_bright">
<View
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/result_main_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="1dip"
android:background="?android:attr/listDivider"
android:layout_marginTop="4dp" />
<TextView
android:id="@+id/result_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="result text"
android:textColor="@color/white"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" />
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="4dp"
android:paddingBottom="4dp">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/result_encryption_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/status_lock_open"
android:layout_gravity="center_vertical" />
<TextView
android:id="@+id/result_encryption_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Not Encrypted (set in-code)"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/result_signature_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/status_signature_unverified_cutout"
android:layout_gravity="center_vertical" />
<TextView
android:id="@+id/result_signature_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Signed by (set in-code)"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" />
</LinearLayout>
<View
android:id="@+id/result_signature_divider1"
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="32dp"
android:background="?android:attr/listDivider" />
<LinearLayout
android:id="@+id/result_signature_layout"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:clickable="true"
android:layout_marginLeft="32dp"
android:paddingRight="4dp"
style="@style/SelectableItem"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:paddingRight="4dp"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/result_signature_name"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Alice (set in-code)" />
<TextView
android:id="@+id/result_signature_email"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/tertiary_text_light"
android:text="alice@example.com (set in-code)"
android:gravity="center_vertical" />
</LinearLayout>
<View
android:layout_width="1dip"
android:layout_height="match_parent"
android:gravity="right"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:background="?android:attr/listDivider" />
<TextView
android:id="@+id/result_signature_action"
android:paddingLeft="8dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="Show"
android:drawableRight="@drawable/ic_action_accounts"
android:drawablePadding="8dp"
android:gravity="center_vertical"
style="@style/SelectableItem" />
</LinearLayout>
<View
android:id="@+id/result_signature_divider2"
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="32dp"
android:background="?android:attr/listDivider" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:background="?android:attr/listDivider" />
<RelativeLayout
android:id="@+id/result_signature"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:orientation="horizontal"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/result_signature_image">
<ImageView
android:id="@+id/ic_signature"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/signed_large" />
<ImageView
android:id="@+id/ic_signature_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/overlay_error" />
</RelativeLayout>
<TextView
android:id="@+id/mainUserId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:layout_gravity="left"
android:text="@string/label_main_user_id"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_toRightOf="@+id/result_signature_image"
android:textColor="@color/white" />
<TextView
android:id="@+id/mainUserIdRest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:layout_gravity="left"
android:text="Main User Id Rest"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_below="@+id/mainUserId"
android:layout_toRightOf="@+id/result_signature_image"
android:textColor="@color/white" />
<Button
android:id="@+id/lookup_key"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_lookup_key"
android:drawableRight="@drawable/ic_action_download"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/button_edgy"/>
</RelativeLayout>
</LinearLayout>

View File

@ -397,10 +397,10 @@
<string name="key_view_tab_certs">Certifikáty</string>
<string name="user_id_info_revoked_title">Zneplatněno</string>
<string name="user_id_info_revoked_text">Tato identity byla zneplatněna vlastníkem klíče. Klíč již není platný.</string>
<string name="user_id_info_verified_title">Ověřeno</string>
<string name="user_id_info_verified_text">Tato identita byla ověřena.</string>
<string name="user_id_info_not_verified_title">Neověřeno</string>
<string name="user_id_info_not_verified_text">Tato identita nebyla ještě ověřena. Nemůžete si být jisti, jestli identita opravdu odpovídá určité osobě.</string>
<string name="user_id_info_certified_title">Ověřeno</string>
<string name="user_id_info_certified_text">Tato identita byla ověřena.</string>
<string name="user_id_info_uncertified_title">Neověřeno</string>
<string name="user_id_info_uncertified_text">Tato identita nebyla ještě ověřena. Nemůžete si být jisti, jestli identita opravdu odpovídá určité osobě.</string>
<string name="user_id_info_invalid_title">Neplatná</string>
<string name="user_id_info_invalid_text">S touto identitou je něco v nepořádku!</string>
<!--Edit key-->

View File

@ -438,10 +438,10 @@
<string name="key_view_tab_certs">Beglaubigungen</string>
<string name="user_id_info_revoked_title">Wiederrufen</string>
<string name="user_id_info_revoked_text">Diese Identität wurde durch den Schlüsselinhaber wiederrufen. Sie ist nicht mehr gültig.</string>
<string name="user_id_info_verified_title">Überprüft</string>
<string name="user_id_info_verified_text">Diese Identität wurde überprüft.</string>
<string name="user_id_info_not_verified_title">Nicht überprüft</string>
<string name="user_id_info_not_verified_text">Diese Identität wurde noch nicht verifiziert. Du kannst nicht sicher sein, ob diese Identität wirklich zu einer bestimmten Person gehört.</string>
<string name="user_id_info_certified_title">Überprüft</string>
<string name="user_id_info_certified_text">Diese Identität wurde überprüft.</string>
<string name="user_id_info_uncertified_title">Nicht überprüft</string>
<string name="user_id_info_uncertified_text">Diese Identität wurde noch nicht verifiziert. Du kannst nicht sicher sein, ob diese Identität wirklich zu einer bestimmten Person gehört.</string>
<string name="user_id_info_invalid_title">Ungültig</string>
<string name="user_id_info_invalid_text">Irgend etwas ist mit dieser Identität nicht in Ordnung!</string>
<!--Edit key-->

View File

@ -421,10 +421,10 @@
<string name="key_view_tab_certs">Certificados</string>
<string name="user_id_info_revoked_title">Revocada</string>
<string name="user_id_info_revoked_text">Esta identidad ha sido revocada por el propietario de la clave. En adelante no es válida.</string>
<string name="user_id_info_verified_title">Verificada</string>
<string name="user_id_info_verified_text">Esta identidad ha sido verificada</string>
<string name="user_id_info_not_verified_title">No verificada</string>
<string name="user_id_info_not_verified_text">Esta identidad no se ha verificado aún. No puede estar seguro de si la identidad realmente corresponde a una persona en concreto.</string>
<string name="user_id_info_certified_title">Verificada</string>
<string name="user_id_info_certified_text">Esta identidad ha sido verificada</string>
<string name="user_id_info_uncertified_title">No verificada</string>
<string name="user_id_info_uncertified_text">Esta identidad no se ha verificado aún. No puede estar seguro de si la identidad realmente corresponde a una persona en concreto.</string>
<string name="user_id_info_invalid_title">No válido</string>
<string name="user_id_info_invalid_text">¡Algo está mal con esta identidad!</string>
<!--Edit key-->

View File

@ -421,10 +421,10 @@
<string name="key_view_tab_certs">Certificats</string>
<string name="user_id_info_revoked_title">Révoquée</string>
<string name="user_id_info_revoked_text">Cette identité a été révoquée par le propriétaire de la clef. Elle n\'est plus valide.</string>
<string name="user_id_info_verified_title">Vérifiée</string>
<string name="user_id_info_verified_text">Cette identité a été vérifiée.</string>
<string name="user_id_info_not_verified_title">Non vérifiée</string>
<string name="user_id_info_not_verified_text">Cette identité n\'a pas encore été vérifiée. Vous ne pouvez pas être certain si l\'identité corresponds vraiment à une personne spécifique.</string>
<string name="user_id_info_certified_title">Vérifiée</string>
<string name="user_id_info_certified_text">Cette identité a été vérifiée.</string>
<string name="user_id_info_uncertified_title">Non vérifiée</string>
<string name="user_id_info_uncertified_text">Cette identité n\'a pas encore été vérifiée. Vous ne pouvez pas être certain si l\'identité corresponds vraiment à une personne spécifique.</string>
<string name="user_id_info_invalid_title">Invalide</string>
<string name="user_id_info_invalid_text">Quelque chose ne va pas avec cette identité !</string>
<!--Edit key-->

View File

@ -426,10 +426,10 @@ Permetti accesso?\n\nATTENZIONE: Se non sai perche\' questo schermata e\' appars
<string name="key_view_tab_certs">Certificati</string>
<string name="user_id_info_revoked_title">Revocato</string>
<string name="user_id_info_revoked_text">Questa identità è stata revocata dal suo proprietario. Non è più valida.</string>
<string name="user_id_info_verified_title">Verificato</string>
<string name="user_id_info_verified_text">Questa identità è stata verificata.</string>
<string name="user_id_info_not_verified_title">Non verificato</string>
<string name="user_id_info_not_verified_text">Questa identità non è stata ancora verificata. Non puoi esser sicuro che l\'identità corrisponda veramente ad una specifica persona.</string>
<string name="user_id_info_certified_title">Verificato</string>
<string name="user_id_info_certified_text">Questa identità è stata verificata.</string>
<string name="user_id_info_uncertified_title">Non verificato</string>
<string name="user_id_info_uncertified_text">Questa identità non è stata ancora verificata. Non puoi esser sicuro che l\'identità corrisponda veramente ad una specifica persona.</string>
<string name="user_id_info_invalid_title">Non valido</string>
<string name="user_id_info_invalid_text">C\'è qualcosa che non va con questa identità!</string>
<!--Edit key-->

View File

@ -443,10 +443,10 @@
<string name="key_view_tab_certs">証明</string>
<string name="user_id_info_revoked_title">破棄</string>
<string name="user_id_info_revoked_text">このIDは鍵の所有者により破棄されています。もう適正ではありません。</string>
<string name="user_id_info_verified_title">検証</string>
<string name="user_id_info_verified_text">このIDは検証されています。</string>
<string name="user_id_info_not_verified_title">未検証</string>
<string name="user_id_info_not_verified_text">このIDはまだ検証されていません。IDが本当に特定の人に対応している場合を、あなたは確認することができません。</string>
<string name="user_id_info_certified_title">検証</string>
<string name="user_id_info_certified_text">このIDは検証されています。</string>
<string name="user_id_info_uncertified_title">未検証</string>
<string name="user_id_info_uncertified_text">このIDはまだ検証されていません。IDが本当に特定の人に対応している場合を、あなたは確認することができません。</string>
<string name="user_id_info_invalid_title">不適正</string>
<string name="user_id_info_invalid_text">このIDではなにかしら問題があります!</string>
<!--Edit key-->

View File

@ -361,9 +361,9 @@
<string name="key_view_tab_keys">Доп. ключи</string>
<string name="key_view_tab_certs">Сертификация</string>
<string name="user_id_info_revoked_title">Аннулировано</string>
<string name="user_id_info_verified_title">Подтверждено</string>
<string name="user_id_info_not_verified_title">Не подтверждено</string>
<string name="user_id_info_not_verified_text">Этот идентификатор не был заверен. Нет гарантии, что он принадлежит этому человеку.</string>
<string name="user_id_info_certified_title">Подтверждено</string>
<string name="user_id_info_uncertified_title">Не подтверждено</string>
<string name="user_id_info_uncertified_text">Этот идентификатор не был заверен. Нет гарантии, что он принадлежит этому человеку.</string>
<string name="user_id_info_invalid_title">Недействительно</string>
<string name="user_id_info_invalid_text">Что-то не так с идентификатором!</string>
<!--Edit key-->

View File

@ -380,9 +380,9 @@
<string name="key_view_tab_certs">Certifikati</string>
<string name="user_id_info_revoked_title">Preklican</string>
<string name="user_id_info_revoked_text">Lastnik ključa je preklical to identiteto. Ta ni več veljavna.</string>
<string name="user_id_info_verified_title">Preverjen</string>
<string name="user_id_info_verified_text">Identiteta je bila preverjena</string>
<string name="user_id_info_not_verified_title">Nepreverjen</string>
<string name="user_id_info_certified_title">Preverjen</string>
<string name="user_id_info_certified_text">Identiteta je bila preverjena</string>
<string name="user_id_info_uncertified_title">Nepreverjen</string>
<string name="user_id_info_invalid_title">Neveljaven</string>
<!--Edit key-->
<string name="edit_key_action_change_passphrase">Zamenjaj geslo</string>

View File

@ -393,10 +393,10 @@
<string name="key_view_tab_certs">Сертификати</string>
<string name="user_id_info_revoked_title">Опозван</string>
<string name="user_id_info_revoked_text">Власник кључа је опозвао овај идентитет. Више није исправан.</string>
<string name="user_id_info_verified_title">Оверен</string>
<string name="user_id_info_verified_text">Овај идентитет није оверен.</string>
<string name="user_id_info_not_verified_title">Није оверен</string>
<string name="user_id_info_not_verified_text">Овај идентитет још није оверен. Не можете бити сигурни да идентитет заиста одговара одређеној особи.</string>
<string name="user_id_info_certified_title">Оверен</string>
<string name="user_id_info_certified_text">Овај идентитет није оверен.</string>
<string name="user_id_info_uncertified_title">Није оверен</string>
<string name="user_id_info_uncertified_text">Овај идентитет још није оверен. Не можете бити сигурни да идентитет заиста одговара одређеној особи.</string>
<string name="user_id_info_invalid_title">Неисправан</string>
<string name="user_id_info_invalid_text">Нешто није у реду са овим идентитетом!</string>
<!--Edit key-->

View File

@ -353,10 +353,10 @@
<string name="key_view_tab_share">Paylaş</string>
<string name="key_view_tab_keys">Alt anahtarlar</string>
<string name="key_view_tab_certs">Sertifikalar</string>
<string name="user_id_info_verified_title">Doğrulanmış</string>
<string name="user_id_info_verified_text">Kimlik doğrulandı.</string>
<string name="user_id_info_not_verified_title">Doğrulanmamış</string>
<string name="user_id_info_not_verified_text">Bu kimlik henüz doğrulanmadı. Bu kimliğin belirli bir kişiye ait olduğundan emin olamazsınız.</string>
<string name="user_id_info_certified_title">Doğrulanmış</string>
<string name="user_id_info_certified_text">Kimlik doğrulandı.</string>
<string name="user_id_info_uncertified_title">Doğrulanmamış</string>
<string name="user_id_info_uncertified_text">Bu kimlik henüz doğrulanmadı. Bu kimliğin belirli bir kişiye ait olduğundan emin olamazsınız.</string>
<string name="user_id_info_invalid_title">Geçersiz</string>
<string name="user_id_info_invalid_text">Bu kimlikle ilgili yanlış olan bazı şeyler var!</string>
<!--Edit key-->

View File

@ -383,10 +383,10 @@
<string name="key_view_tab_certs">Сертифікати</string>
<string name="user_id_info_revoked_title">Відхилено</string>
<string name="user_id_info_revoked_text">Ця сутність вже відкликана власником ключа. Вона більше не дійсна.</string>
<string name="user_id_info_verified_title">Перевірено</string>
<string name="user_id_info_verified_text">Не перевірено</string>
<string name="user_id_info_not_verified_title">Не перевірено</string>
<string name="user_id_info_not_verified_text">Ця сутність ще не перевірена. Ви не можете переконатися, чи сутність справді відповідає вказаній особі.</string>
<string name="user_id_info_certified_title">Перевірено</string>
<string name="user_id_info_certified_text">Не перевірено</string>
<string name="user_id_info_uncertified_title">Не перевірено</string>
<string name="user_id_info_uncertified_text">Ця сутність ще не перевірена. Ви не можете переконатися, чи сутність справді відповідає вказаній особі.</string>
<string name="user_id_info_invalid_title">Недійсна</string>
<string name="user_id_info_invalid_text">Щось неправильне у цій сутності!</string>
<!--Edit key-->

View File

@ -266,14 +266,15 @@
<string name="error_generic_report_bug">"A generic error occurred, please create a new bug report for OpenKeychain."</string>
<!-- results shown after decryption/verification -->
<string name="decrypt_result_no_signature">"Not Signed"</string>
<string name="decrypt_result_invalid_signature">"Invalid signature!"</string>
<string name="decrypt_result_signature_unknown_pub_key">"Unknown public key"</string>
<string name="decrypt_result_signature_uncertified">"Valid signature (uncertified)"</string>
<string name="decrypt_result_signature_certified">"Valid signature (certified)"</string>
<string name="decrypt_result_decrypted">"Successfully decrypted"</string>
<string name="decrypt_result_decrypted_unknown_pub_key">"Successfully decrypted but unknown public key"</string>
<string name="decrypt_result_decrypted_and_signature_uncertified">"Successfully decrypted and valid signature (uncertified)"</string>
<string name="decrypt_result_decrypted_and_signature_certified">"Successfully decrypted and valid signature (certified)"</string>
<string name="decrypt_result_signature_uncertified">"Signed by (not certified!)"</string>
<string name="decrypt_result_signature_certified">"Signed by"</string>
<string name="decrypt_result_encrypted">"Encrypted"</string>
<string name="decrypt_result_not_encrypted">"Not Encrypted"</string>
<string name="decrypt_result_action_show">"Show"</string>
<string name="decrypt_result_action_Lookup">"Lookup"</string>
<!-- Add keys -->
<string name="add_keys_section_secure_exchange">"Exchange"</string>
@ -507,10 +508,10 @@
<string name="key_view_tab_certs">"Certificates"</string>
<string name="user_id_info_revoked_title">"Revoked"</string>
<string name="user_id_info_revoked_text">"This identity has been revoked by the key owner. It is no longer valid."</string>
<string name="user_id_info_verified_title">"Verified"</string>
<string name="user_id_info_verified_text">"This identity has been verified."</string>
<string name="user_id_info_not_verified_title">"Not verified"</string>
<string name="user_id_info_not_verified_text">"This identity has not been verified yet. You cannot be sure if the identity really corresponds to a specific person."</string>
<string name="user_id_info_certified_title">"Certified"</string>
<string name="user_id_info_certified_text">"This identity has been certified by you."</string>
<string name="user_id_info_uncertified_title">"Not certified"</string>
<string name="user_id_info_uncertified_text">"This identity has not been certified yet. You cannot be sure if the identity really corresponds to a specific person."</string>
<string name="user_id_info_invalid_title">"Invalid"</string>
<string name="user_id_info_invalid_text">"Something is wrong with this identity!"</string>