2020import android .text .TextUtils ;
2121import android .text .format .DateFormat ;
2222import android .text .format .Formatter ;
23+ import android .transition .TransitionManager ;
2324import android .view .LayoutInflater ;
2425import android .view .Menu ;
2526import android .view .MenuInflater ;
@@ -578,7 +579,7 @@ private String prepareViewportHtml(String incomingHtml) {
578579 private View generatePublicKeyPart (final MessagePartPgpPublicKey messagePartPgpPublicKey ,
579580 LayoutInflater layoutInflater ) {
580581
581- View messagePartPublicKeyView = layoutInflater .inflate (
582+ final ViewGroup messagePartPublicKeyView = ( ViewGroup ) layoutInflater .inflate (
582583 R .layout .message_part_public_key , layoutMessageParts , false );
583584
584585 TextView textViewKeyOwnerTemplate = messagePartPublicKeyView .findViewById (R .id .textViewKeyOwnerTemplate );
@@ -593,6 +594,7 @@ private View generatePublicKeyPart(final MessagePartPgpPublicKey messagePartPgpP
593594 @ Override
594595 public void onCheckedChanged (CompoundButton buttonView , boolean
595596 isChecked ) {
597+ TransitionManager .beginDelayedTransition (messagePartPublicKeyView );
596598 textViewPgpPublicKey .setVisibility (isChecked ? View .VISIBLE : View .GONE );
597599
598600 buttonView .setText (isChecked ? R .string .hide_the_public_key :
@@ -725,14 +727,23 @@ private TextView generateTextPart(MessagePart messagePart, LayoutInflater layout
725727 }
726728
727729 @ NonNull
728- private TextView generatePgpMessagePart (MessagePartPgpMessage messagePartPgpMessage ,
729- LayoutInflater layoutInflater ) {
730+ private View generatePgpMessagePart (MessagePartPgpMessage messagePartPgpMessage ,
731+ LayoutInflater layoutInflater ) {
730732 if (messagePartPgpMessage != null ) {
731733 if (TextUtils .isEmpty (messagePartPgpMessage .getErrorMessage ())) {
732734 return generateMessagePart (messagePartPgpMessage , layoutInflater , R .layout .message_part_pgp_message ,
733735 layoutMessageParts );
734736 } else {
735737 switch (messagePartPgpMessage .getPgpMessageDecryptError ()) {
738+ case FORMAT_ERROR :
739+ final ViewGroup formatErrorLayout = (ViewGroup ) layoutInflater .inflate (
740+ R .layout .message_part_pgp_message_format_error , layoutMessageParts , false );
741+ TextView textViewFormatError = formatErrorLayout .findViewById (R .id .textViewFormatError );
742+ textViewFormatError .setText (messagePartPgpMessage .getErrorMessage ());
743+ formatErrorLayout .addView (generateShowOriginalMessageLayout
744+ (messagePartPgpMessage .getValue (), layoutInflater , formatErrorLayout ));
745+ return formatErrorLayout ;
746+
736747 default :
737748 TextView textViewMessagePartOther = (TextView ) layoutInflater .inflate (
738749 R .layout .message_part_pgp_message_error , layoutMessageParts , false );
@@ -744,6 +755,38 @@ private TextView generatePgpMessagePart(MessagePartPgpMessage messagePartPgpMess
744755 } else return new TextView (getContext ());
745756 }
746757
758+ /**
759+ * Generate a layout with switch button which will be regulate visibility of original message info.
760+ *
761+ * @param originalPgpMessage The original pgp message info.
762+ * @param layoutInflater The {@link LayoutInflater} instance.
763+ * @param rootView The root view which will be used while we create a new layout using
764+ * {@link LayoutInflater}.
765+ * @return A generated layout.
766+ */
767+ @ NonNull
768+ private ViewGroup generateShowOriginalMessageLayout (String originalPgpMessage , LayoutInflater layoutInflater ,
769+ final ViewGroup rootView ) {
770+ ViewGroup showOriginalMessageLayout = (ViewGroup ) layoutInflater .inflate (
771+ R .layout .pgp_show_original_message , rootView , false );
772+ final TextView textViewOriginalPgpMessage
773+ = showOriginalMessageLayout .findViewById (R .id .textViewOriginalPgpMessage );
774+ textViewOriginalPgpMessage .setText (originalPgpMessage );
775+
776+ Switch switchShowOriginalMessage = showOriginalMessageLayout .findViewById (R .id
777+ .switchShowOriginalMessage );
778+
779+ switchShowOriginalMessage .setOnCheckedChangeListener (new CompoundButton .OnCheckedChangeListener () {
780+ @ Override
781+ public void onCheckedChanged (CompoundButton buttonView , boolean isChecked ) {
782+ TransitionManager .beginDelayedTransition (rootView );
783+ textViewOriginalPgpMessage .setVisibility (isChecked ? View .VISIBLE : View .GONE );
784+ buttonView .setText (isChecked ? R .string .hide_original_message : R .string .show_original_message );
785+ }
786+ });
787+ return showOriginalMessageLayout ;
788+ }
789+
747790 public interface OnActionListener {
748791 void onArchiveMessageClicked ();
749792
0 commit comments