Improve verification result display, close #568

This commit is contained in:
Dominik Schürmann 2014-04-15 22:37:36 +02:00
parent fcb73f4e24
commit 14a8586e8c
6 changed files with 195 additions and 134 deletions

View File

@ -31,7 +31,6 @@ import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
import com.beardedhen.androidbootstrap.BootstrapButton; import com.beardedhen.androidbootstrap.BootstrapButton;
import com.devspark.appmsg.AppMsg;
import org.openintents.openpgp.OpenPgpSignatureResult; import org.openintents.openpgp.OpenPgpSignatureResult;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
@ -73,11 +72,6 @@ public class DecryptFragment extends Fragment {
} }
}); });
mResultLayout.setVisibility(View.GONE); mResultLayout.setVisibility(View.GONE);
mResultLayout.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
lookupUnknownKey(mSignatureKeyId);
}
});
} }
private void lookupUnknownKey(long unknownKeyId) { private void lookupUnknownKey(long unknownKeyId) {
@ -119,7 +113,7 @@ public class DecryptFragment extends Fragment {
String userId = signatureResult.getUserId(); String userId = signatureResult.getUserId();
String[] userIdSplit = PgpKeyHelper.splitUserId(userId); String[] userIdSplit = PgpKeyHelper.splitUserId(userId);
if (userIdSplit[0] != null) { if (userIdSplit[0] != null) {
mUserId.setText(userId); mUserId.setText(userIdSplit[0]);
} else { } else {
mUserId.setText(R.string.user_id_no_name); mUserId.setText(R.string.user_id_no_name);
} }
@ -132,37 +126,63 @@ public class DecryptFragment extends Fragment {
switch (signatureResult.getStatus()) { switch (signatureResult.getStatus()) {
case OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED: { case OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED: {
mResultText.setText(R.string.decrypt_verified_successful); if (signatureResult.isSignatureOnly()) {
mResultText.setText(R.string.decrypt_result_signature_certified);
} else {
mResultText.setText(R.string.decrypt_result_decrypted_and_signature_certified);
}
mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_green)); mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_green));
mSignatureStatusImage.setImageResource(R.drawable.overlay_ok); mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
mSignatureLayout.setVisibility(View.VISIBLE);
mLookupKey.setVisibility(View.GONE); mLookupKey.setVisibility(View.GONE);
break; break;
} }
case OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED: { case OpenPgpSignatureResult.SIGNATURE_SUCCESS_UNCERTIFIED: {
mResultText.setText(R.string.decrypt_verified_successful); if (signatureResult.isSignatureOnly()) {
mResultText.setText(R.string.decrypt_result_signature_uncertified);
} else {
mResultText.setText(R.string.decrypt_result_decrypted_and_signature_uncertified);
}
mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_orange)); mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_orange));
mSignatureStatusImage.setImageResource(R.drawable.overlay_ok); mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
mSignatureLayout.setVisibility(View.VISIBLE);
mLookupKey.setVisibility(View.GONE); mLookupKey.setVisibility(View.GONE);
break; break;
} }
case OpenPgpSignatureResult.SIGNATURE_UNKNOWN_PUB_KEY: { case OpenPgpSignatureResult.SIGNATURE_UNKNOWN_PUB_KEY: {
mResultText.setText(R.string.unknown_signature); if (signatureResult.isSignatureOnly()) {
mResultText.setText(R.string.decrypt_result_signature_unknown_pub_key);
} else {
mResultText.setText(R.string.decrypt_result_decrypted_unknown_pub_key);
}
mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_orange)); mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_orange));
mSignatureStatusImage.setImageResource(R.drawable.overlay_error); mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
mSignatureLayout.setVisibility(View.VISIBLE);
mLookupKey.setVisibility(View.VISIBLE); mLookupKey.setVisibility(View.VISIBLE);
break; break;
} }
case OpenPgpSignatureResult.SIGNATURE_ERROR: {
mResultText.setText(R.string.decrypt_result_invalid_signature);
mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_red));
mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
mSignatureLayout.setVisibility(View.GONE);
mLookupKey.setVisibility(View.GONE);
break;
}
default: { default: {
mResultText.setText(R.string.error); mResultText.setText(R.string.error);
mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_red)); mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_red));
mSignatureStatusImage.setImageResource(R.drawable.overlay_error); mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
mSignatureLayout.setVisibility(View.GONE);
mLookupKey.setVisibility(View.GONE); mLookupKey.setVisibility(View.GONE);
break; break;
} }
@ -172,7 +192,7 @@ public class DecryptFragment extends Fragment {
// only successful decryption // only successful decryption
mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_blue)); mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_blue));
mResultText.setText(R.string.decrypt_successful); mResultText.setText(R.string.decrypt_result_decrypted);
} }
} }

View File

@ -8,13 +8,24 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/decrypt_result_include" />
<View
android:id="@+id/status_divider"
android:layout_height="1dip"
android:layout_width="match_parent"
android:background="?android:attr/listDivider" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="4dp" android:paddingTop="4dp"
android:paddingLeft="16dp" android:paddingLeft="16dp"
android:paddingRight="16dp" android:paddingRight="16dp"
android:orientation="vertical"> android:orientation="vertical">
<include layout="@layout/decrypt_signature_include" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -78,4 +89,5 @@
</RelativeLayout> </RelativeLayout>
</LinearLayout> </LinearLayout>
</LinearLayout>
</ScrollView> </ScrollView>

View File

@ -8,12 +8,24 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/decrypt_result_include" />
<View
android:id="@+id/status_divider"
android:layout_height="1dip"
android:layout_width="match_parent"
android:background="?android:attr/listDivider" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="4dp" android:paddingTop="4dp"
android:paddingLeft="16dp" android:paddingLeft="16dp"
android:paddingRight="16dp" android:paddingRight="16dp"
android:orientation="vertical"> android:orientation="vertical">
<include layout="@layout/decrypt_signature_include" />
<EditText <EditText
android:id="@+id/message" android:id="@+id/message"
@ -63,4 +75,5 @@
bootstrapbutton:bb_type="info" /> bootstrapbutton:bb_type="info" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout>
</ScrollView> </ScrollView>

View File

@ -5,16 +5,19 @@
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="4dp" android:paddingLeft="16dp"
android:paddingLeft="10dp" android:paddingRight="16dp"
android:paddingRight="10dp"> android:paddingTop="4dp"
android:paddingBottom="4dp"
android:background="@color/result_blue">
<TextView <TextView
android:id="@+id/result_text" android:id="@+id/result_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:text="result text" /> android:text="result text"
android:textColor="@color/white" />
<RelativeLayout <RelativeLayout
android:id="@+id/result_signature" android:id="@+id/result_signature"
@ -26,7 +29,7 @@
<RelativeLayout <RelativeLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/relativeLayout"> android:id="@+id/result_signature_image">
<ImageView <ImageView
android:id="@+id/ic_signature" android:id="@+id/ic_signature"
@ -45,20 +48,24 @@
android:id="@+id/mainUserId" android:id="@+id/mainUserId"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:layout_gravity="left" android:layout_gravity="left"
android:text="@string/label_main_user_id" android:text="@string/label_main_user_id"
android:textAppearance="?android:attr/textAppearanceMedium" android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_toRightOf="@+id/relativeLayout" /> android:layout_toRightOf="@+id/result_signature_image"
android:textColor="@color/white" />
<TextView <TextView
android:id="@+id/mainUserIdRest" android:id="@+id/mainUserIdRest"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:layout_gravity="left" android:layout_gravity="left"
android:text="Main User Id Rest" android:text="Main User Id Rest"
android:textAppearance="?android:attr/textAppearanceSmall" android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_below="@+id/mainUserId" android:layout_below="@+id/mainUserId"
android:layout_toRightOf="@+id/relativeLayout" /> android:layout_toRightOf="@+id/result_signature_image"
android:textColor="@color/white" />
<com.beardedhen.androidbootstrap.BootstrapButton <com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/lookup_key" android:id="@+id/lookup_key"
@ -74,4 +81,5 @@
android:layout_alignParentEnd="true" /> android:layout_alignParentEnd="true" />
</RelativeLayout> </RelativeLayout>
</LinearLayout> </LinearLayout>

View File

@ -4,8 +4,8 @@
<color name="emphasis">#31b6e7</color> <color name="emphasis">#31b6e7</color>
<color name="bg_gray">#cecbce</color> <color name="bg_gray">#cecbce</color>
<color name="result_red">#CC0000</color> <color name="result_red">#FF4444</color>
<color name="result_orange">#FF8800</color> <color name="result_orange">#FFBB33</color>
<color name="result_green">#669900</color> <color name="result_green">#99CC00</color>
<color name="result_blue">#336699</color> <color name="result_blue">#33B5E5</color>
</resources> </resources>

View File

@ -209,8 +209,6 @@
<string name="file_delete_confirmation">Are you sure you want to delete\n%s?</string> <string name="file_delete_confirmation">Are you sure you want to delete\n%s?</string>
<string name="file_delete_successful">Successfully deleted.</string> <string name="file_delete_successful">Successfully deleted.</string>
<string name="no_file_selected">Select a file first.</string> <string name="no_file_selected">Select a file first.</string>
<string name="decrypt_successful">Successfully decrypted.</string>
<string name="decrypt_verified_successful">Successfully decrypted and/or verified.</string>
<string name="encrypt_sign_successful">Successfully signed and/or encrypted.</string> <string name="encrypt_sign_successful">Successfully signed and/or encrypted.</string>
<string name="encrypt_sign_clipboard_successful">Successfully signed and/or encrypted to clipboard.</string> <string name="encrypt_sign_clipboard_successful">Successfully signed and/or encrypted to clipboard.</string>
<string name="enter_passphrase_twice">Enter the passphrase twice.</string> <string name="enter_passphrase_twice">Enter the passphrase twice.</string>
@ -258,7 +256,6 @@
<item quantity="other">Found %d keys.</item> <item quantity="other">Found %d keys.</item>
</plurals> </plurals>
<string name="unknown_signature">Unknown signature, click button to lookup the missing key.</string>
<plurals name="bad_keys_encountered"> <plurals name="bad_keys_encountered">
<item quantity="one">%d bad secret key ignored. Perhaps you exported with the option\n --export-secret-subkeys\nMake sure you export with\n --export-secret-keys\ninstead.</item> <item quantity="one">%d bad secret key ignored. Perhaps you exported with the option\n --export-secret-subkeys\nMake sure you export with\n --export-secret-keys\ninstead.</item>
@ -295,7 +292,6 @@
<string name="error_main_user_id_must_not_be_empty">main user id must not be empty</string> <string name="error_main_user_id_must_not_be_empty">main user id must not be empty</string>
<string name="error_key_needs_master_key">need at least a master key</string> <string name="error_key_needs_master_key">need at least a master key</string>
<string name="error_no_encryption_keys_or_passphrase">no encryption keys or passphrase given</string> <string name="error_no_encryption_keys_or_passphrase">no encryption keys or passphrase given</string>
<string name="error_signature_failed">signature failed</string>
<string name="error_no_signature_passphrase">no passphrase given</string> <string name="error_no_signature_passphrase">no passphrase given</string>
<string name="error_no_signature_key">no signature key given</string> <string name="error_no_signature_key">no signature key given</string>
<string name="error_invalid_data">not valid encryption data</string> <string name="error_invalid_data">not valid encryption data</string>
@ -305,14 +301,16 @@
<string name="error_wrong_passphrase">wrong passphrase</string> <string name="error_wrong_passphrase">wrong passphrase</string>
<string name="error_saving_keys">error saving some keys</string> <string name="error_saving_keys">error saving some keys</string>
<string name="error_could_not_extract_private_key">could not extract private key</string> <string name="error_could_not_extract_private_key">could not extract private key</string>
<string name="error_only_files_are_supported">Direct binary data without actual file in filesystem is not supported. This is only supported by ACTION_ENCRYPT_STREAM_AND_RETURN.</string>
<string name="error_jelly_bean_needed">You need Android 4.1 alias Jelly Bean to use Androids NFC Beam feature!</string>
<string name="error_nfc_needed">NFC is not available on your device!</string>
<string name="error_nothing_import">Nothing to import!</string>
<string name="error_expiry_must_come_after_creation">expiry date must come after creation date</string> <string name="error_expiry_must_come_after_creation">expiry date must come after creation date</string>
<string name="error_save_first">please save the keyring first</string> <string name="error_save_first">please save the keyring first</string>
<string name="error_can_not_delete_contact">you can not delete this contact because it is your own.</string> <string name="error_can_not_delete_contact">you can not delete this contact because it is your own.</string>
<string name="error_can_not_delete_contacts">you can not delete the following contacts because they are your own:\n%s</string> <string name="error_can_not_delete_contacts">you can not delete the following contacts because they are your own:\n%s</string>
<!-- errors without preceeding Error: -->
<string name="error_only_files_are_supported">Direct binary data without actual file in filesystem is not supported. This is only supported by ACTION_ENCRYPT_STREAM_AND_RETURN.</string>
<string name="error_jelly_bean_needed">You need Android 4.1 alias Jelly Bean to use Androids NFC Beam feature!</string>
<string name="error_nfc_needed">NFC is not available on your device!</string>
<string name="error_nothing_import">Nothing to import!</string>
<string name="error_keyserver_insufficient_query">Insufficient server query</string> <string name="error_keyserver_insufficient_query">Insufficient server query</string>
<string name="error_keyserver_query">Querying keyserver failed</string> <string name="error_keyserver_query">Querying keyserver failed</string>
<string name="error_keyserver_too_many_responses">Too many responses</string> <string name="error_keyserver_too_many_responses">Too many responses</string>
@ -328,6 +326,16 @@
</plurals> </plurals>
<string name="error_change_something_first">You must make changes to the keyring before you can save it</string> <string name="error_change_something_first">You must make changes to the keyring before you can save it</string>
<!-- results shown after decryption/verification -->
<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>
<!-- progress dialogs, usually ending in '…' --> <!-- progress dialogs, usually ending in '…' -->
<string name="progress_done">Done.</string> <string name="progress_done">Done.</string>
<string name="progress_cancel">Cancel</string> <string name="progress_cancel">Cancel</string>