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 com.beardedhen.androidbootstrap.BootstrapButton;
import com.devspark.appmsg.AppMsg;
import org.openintents.openpgp.OpenPgpSignatureResult;
import org.sufficientlysecure.keychain.R;
@ -73,11 +72,6 @@ public class DecryptFragment extends Fragment {
}
});
mResultLayout.setVisibility(View.GONE);
mResultLayout.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
lookupUnknownKey(mSignatureKeyId);
}
});
}
private void lookupUnknownKey(long unknownKeyId) {
@ -119,7 +113,7 @@ public class DecryptFragment extends Fragment {
String userId = signatureResult.getUserId();
String[] userIdSplit = PgpKeyHelper.splitUserId(userId);
if (userIdSplit[0] != null) {
mUserId.setText(userId);
mUserId.setText(userIdSplit[0]);
} else {
mUserId.setText(R.string.user_id_no_name);
}
@ -132,37 +126,63 @@ public class DecryptFragment extends Fragment {
switch (signatureResult.getStatus()) {
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));
mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
mSignatureLayout.setVisibility(View.VISIBLE);
mLookupKey.setVisibility(View.GONE);
break;
}
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));
mSignatureStatusImage.setImageResource(R.drawable.overlay_ok);
mSignatureLayout.setVisibility(View.VISIBLE);
mLookupKey.setVisibility(View.GONE);
break;
}
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));
mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
mSignatureLayout.setVisibility(View.VISIBLE);
mLookupKey.setVisibility(View.VISIBLE);
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: {
mResultText.setText(R.string.error);
mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_red));
mSignatureStatusImage.setImageResource(R.drawable.overlay_error);
mSignatureLayout.setVisibility(View.GONE);
mLookupKey.setVisibility(View.GONE);
break;
}
@ -172,7 +192,7 @@ public class DecryptFragment extends Fragment {
// only successful decryption
mResultLayout.setBackgroundColor(getResources().getColor(R.color.result_blue));
mResultText.setText(R.string.decrypt_successful);
mResultText.setText(R.string.decrypt_result_decrypted);
}
}

View File

@ -8,74 +8,86 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="4dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="vertical">
<include layout="@layout/decrypt_signature_include" />
<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="wrap_content"
android:orientation="horizontal">
android:layout_height="match_parent"
android:paddingTop="4dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="vertical">
<EditText
android:id="@+id/decrypt_file_filename"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="top|left"
android:inputType="textMultiLine|textUri"
android:lines="4"
android:maxLines="10"
android:minLines="2"
android:scrollbars="vertical" />
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/decrypt_file_browse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
bootstrapbutton:bb_icon_left="fa-folder-open"
bootstrapbutton:bb_roundedCorners="true"
bootstrapbutton:bb_size="default"
bootstrapbutton:bb_type="default" />
</LinearLayout>
<CheckBox
android:id="@+id/decrypt_file_delete_after_decryption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_delete_after_decryption" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
style="@style/SectionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/section_decrypt_verify"
android:layout_above="@+id/decrypt_file_action_decrypt"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/decrypt_file_action_decrypt"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:text="@string/btn_decrypt_verify"
bootstrapbutton:bb_icon_left="fa-unlock"
bootstrapbutton:bb_type="info"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
android:layout_height="wrap_content"
android:orientation="horizontal">
</RelativeLayout>
<EditText
android:id="@+id/decrypt_file_filename"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="top|left"
android:inputType="textMultiLine|textUri"
android:lines="4"
android:maxLines="10"
android:minLines="2"
android:scrollbars="vertical" />
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/decrypt_file_browse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
bootstrapbutton:bb_icon_left="fa-folder-open"
bootstrapbutton:bb_roundedCorners="true"
bootstrapbutton:bb_size="default"
bootstrapbutton:bb_type="default" />
</LinearLayout>
<CheckBox
android:id="@+id/decrypt_file_delete_after_decryption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_delete_after_decryption" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
style="@style/SectionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/section_decrypt_verify"
android:layout_above="@+id/decrypt_file_action_decrypt"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/decrypt_file_action_decrypt"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:text="@string/btn_decrypt_verify"
bootstrapbutton:bb_icon_left="fa-unlock"
bootstrapbutton:bb_type="info"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@ -8,59 +8,72 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="4dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="vertical">
<include layout="@layout/decrypt_signature_include" />
<include layout="@layout/decrypt_result_include" />
<EditText
android:id="@+id/message"
<View
android:id="@+id/status_divider"
android:layout_height="1dip"
android:layout_width="match_parent"
android:layout_height="0dip"
android:gravity="top"
android:hint="@string/decrypt_content_edit_text_hint"
android:inputType="text|textCapSentences|textMultiLine|textLongMessage"
android:scrollHorizontally="true"
android:layout_weight="1" />
<TextView
style="@style/SectionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/section_decrypt_verify"
android:id="@+id/decrypt_message_section" />
android:background="?android:attr/listDivider" />
<LinearLayout
android:id="@+id/decrypt_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:layout_height="match_parent"
android:paddingTop="4dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="vertical">
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/action_decrypt"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginRight="4dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_weight="1"
android:text="@string/btn_decrypt_verify"
bootstrapbutton:bb_icon_left="fa-unlock"
bootstrapbutton:bb_type="info" />
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/action_decrypt_from_clipboard"
<EditText
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="4dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_weight="1"
android:text="@string/btn_decrypt_verify_clipboard"
bootstrapbutton:bb_icon_left="fa-clipboard"
bootstrapbutton:bb_type="info" />
android:layout_height="0dip"
android:gravity="top"
android:hint="@string/decrypt_content_edit_text_hint"
android:inputType="text|textCapSentences|textMultiLine|textLongMessage"
android:scrollHorizontally="true"
android:layout_weight="1" />
<TextView
style="@style/SectionHeader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/section_decrypt_verify"
android:id="@+id/decrypt_message_section" />
<LinearLayout
android:id="@+id/decrypt_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/action_decrypt"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginRight="4dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_weight="1"
android:text="@string/btn_decrypt_verify"
bootstrapbutton:bb_icon_left="fa-unlock"
bootstrapbutton:bb_type="info" />
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/action_decrypt_from_clipboard"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="4dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_weight="1"
android:text="@string/btn_decrypt_verify_clipboard"
bootstrapbutton:bb_icon_left="fa-clipboard"
bootstrapbutton:bb_type="info" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@ -5,16 +5,19 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="4dp"
android:paddingLeft="10dp"
android:paddingRight="10dp">
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:background="@color/result_blue">
<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:text="result text"
android:textColor="@color/white" />
<RelativeLayout
android:id="@+id/result_signature"
@ -26,7 +29,7 @@
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/relativeLayout">
android:id="@+id/result_signature_image">
<ImageView
android:id="@+id/ic_signature"
@ -45,20 +48,24 @@
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/relativeLayout" />
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/relativeLayout" />
android:layout_toRightOf="@+id/result_signature_image"
android:textColor="@color/white" />
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/lookup_key"
@ -74,4 +81,5 @@
android:layout_alignParentEnd="true" />
</RelativeLayout>
</LinearLayout>

View File

@ -4,8 +4,8 @@
<color name="emphasis">#31b6e7</color>
<color name="bg_gray">#cecbce</color>
<color name="result_red">#CC0000</color>
<color name="result_orange">#FF8800</color>
<color name="result_green">#669900</color>
<color name="result_blue">#336699</color>
<color name="result_red">#FF4444</color>
<color name="result_orange">#FFBB33</color>
<color name="result_green">#99CC00</color>
<color name="result_blue">#33B5E5</color>
</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_successful">Successfully deleted.</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_clipboard_successful">Successfully signed and/or encrypted to clipboard.</string>
<string name="enter_passphrase_twice">Enter the passphrase twice.</string>
@ -258,7 +256,6 @@
<item quantity="other">Found %d keys.</item>
</plurals>
<string name="unknown_signature">Unknown signature, click button to lookup the missing key.</string>
<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>
@ -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_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_signature_failed">signature failed</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_invalid_data">not valid encryption data</string>
@ -305,14 +301,16 @@
<string name="error_wrong_passphrase">wrong passphrase</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_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_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_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_query">Querying keyserver failed</string>
<string name="error_keyserver_too_many_responses">Too many responses</string>
@ -328,6 +326,16 @@
</plurals>
<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 '…' -->
<string name="progress_done">Done.</string>
<string name="progress_cancel">Cancel</string>