77package com .flowcrypt .email .ui .activity .fragment ;
88
99import android .Manifest ;
10+ import android .app .Activity ;
1011import android .content .Context ;
1112import android .content .Intent ;
1213import android .content .pm .PackageManager ;
5354import com .flowcrypt .email .model .results .LoaderResult ;
5455import com .flowcrypt .email .service .attachment .AttachmentDownloadManagerService ;
5556import com .flowcrypt .email .ui .activity .CreateMessageActivity ;
57+ import com .flowcrypt .email .ui .activity .ImportPrivateKeyActivity ;
5658import com .flowcrypt .email .ui .activity .MessageDetailsActivity ;
5759import com .flowcrypt .email .ui .activity .base .BaseSyncActivity ;
5860import com .flowcrypt .email .ui .activity .fragment .base .BaseGmailFragment ;
7476 */
7577public class MessageDetailsFragment extends BaseGmailFragment implements View .OnClickListener {
7678 private static final int REQUEST_CODE_REQUEST_WRITE_EXTERNAL_STORAGE = 100 ;
79+ private static final int REQUEST_CODE_START_IMPORT_KEY_ACTIVITY = 101 ;
80+
7781 private TextView textViewSenderAddress ;
7882 private TextView textViewDate ;
7983 private TextView textViewSubject ;
@@ -145,6 +149,23 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
145149 }
146150 }
147151
152+ @ Override
153+ public void onActivityResult (int requestCode , int resultCode , Intent data ) {
154+ switch (requestCode ) {
155+ case REQUEST_CODE_START_IMPORT_KEY_ACTIVITY :
156+ switch (resultCode ) {
157+ case Activity .RESULT_OK :
158+ Toast .makeText (getContext (), R .string .key_successfully_imported , Toast .LENGTH_SHORT ).show ();
159+ getLoaderManager ().restartLoader (R .id .loader_id_load_message_info_from_database , null , this );
160+ break ;
161+ }
162+ break ;
163+
164+ default :
165+ super .onActivityResult (requestCode , resultCode , data );
166+ }
167+ }
168+
148169 @ Override
149170 public View getContentView () {
150171 return layoutMessageParts ;
@@ -502,8 +523,8 @@ public void onClick(View v) {
502523 }
503524
504525 private void updateMessageView () {
526+ layoutMessageParts .removeAllViews ();
505527 if (!TextUtils .isEmpty (incomingMessageInfo .getHtmlMessage ())) {
506- layoutMessageParts .removeAllViews ();
507528 EmailWebView emailWebView = new EmailWebView (getContext ());
508529 emailWebView .configure ();
509530
@@ -744,6 +765,9 @@ private View generatePgpMessagePart(MessagePartPgpMessage messagePartPgpMessage,
744765 (messagePartPgpMessage .getValue (), layoutInflater , formatErrorLayout ));
745766 return formatErrorLayout ;
746767
768+ case MISSING_PRIVATE_KEY :
769+ return generateMissingPrivateKeyLayout (messagePartPgpMessage , layoutInflater );
770+
747771 default :
748772 ViewGroup viewGroup = (ViewGroup ) layoutInflater .inflate (
749773 R .layout .message_part_pgp_message_error , layoutMessageParts , false );
@@ -758,6 +782,36 @@ private View generatePgpMessagePart(MessagePartPgpMessage messagePartPgpMessage,
758782 } else return new TextView (getContext ());
759783 }
760784
785+ /**
786+ * Generate a layout which describes the missing private keys situation.
787+ *
788+ * @param messagePartPgpMessage The {@link MessagePartPgpMessage} which contains info about an error.
789+ * @param layoutInflater The {@link LayoutInflater} instance.
790+ * @return Generated layout.
791+ */
792+ @ NonNull
793+ private View generateMissingPrivateKeyLayout (MessagePartPgpMessage messagePartPgpMessage ,
794+ LayoutInflater layoutInflater ) {
795+ ViewGroup missingPrivateKeyLayout = (ViewGroup ) layoutInflater .inflate (
796+ R .layout .message_part_pgp_message_missing_private_key , layoutMessageParts , false );
797+ TextView textViewErrorMessage = missingPrivateKeyLayout .findViewById (R .id .textViewErrorMessage );
798+ textViewErrorMessage .setText (messagePartPgpMessage .getErrorMessage ());
799+
800+ Button button = missingPrivateKeyLayout .findViewById (R .id .buttonImportPrivateKey );
801+ button .setOnClickListener (new View .OnClickListener () {
802+ @ Override
803+ public void onClick (View v ) {
804+ startActivityForResult (ImportPrivateKeyActivity .newIntent (
805+ getContext (), getString (R .string .import_private_key ), true , ImportPrivateKeyActivity .class ),
806+ REQUEST_CODE_START_IMPORT_KEY_ACTIVITY );
807+ }
808+ });
809+
810+ missingPrivateKeyLayout .addView (generateShowOriginalMessageLayout
811+ (messagePartPgpMessage .getValue (), layoutInflater , missingPrivateKeyLayout ));
812+ return missingPrivateKeyLayout ;
813+ }
814+
761815 /**
762816 * Generate a layout with switch button which will be regulate visibility of original message info.
763817 *
0 commit comments