From 12489e7847a823407d40a05cbef58e6b9e0595af Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Mon, 21 Feb 2022 10:30:34 +0200 Subject: [PATCH 01/15] Migrate MessageDetailsActivity to use Navigation.| #1682 --- FlowCrypt/src/main/AndroidManifest.xml | 35 ++++++++++--------- .../ui/activity/MessageDetailsActivity.kt | 12 ++----- .../res/layout/activity_message_details.xml | 6 ++-- .../main/res/navigation/msg_details_graph.xml | 24 +++++++++++++ 4 files changed, 49 insertions(+), 28 deletions(-) create mode 100644 FlowCrypt/src/main/res/navigation/msg_details_graph.xml diff --git a/FlowCrypt/src/main/AndroidManifest.xml b/FlowCrypt/src/main/AndroidManifest.xml index 7b3495a09d..8f9b9bd5c2 100644 --- a/FlowCrypt/src/main/AndroidManifest.xml +++ b/FlowCrypt/src/main/AndroidManifest.xml @@ -53,8 +53,8 @@ @@ -79,23 +79,26 @@ + android:screenOrientation="portrait"> + + + @@ -129,69 +132,69 @@ diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/MessageDetailsActivity.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/MessageDetailsActivity.kt index 1e1f882c64..deb64e842b 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/MessageDetailsActivity.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/MessageDetailsActivity.kt @@ -9,11 +9,11 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.view.View +import androidx.navigation.fragment.NavHostFragment import com.flowcrypt.email.R import com.flowcrypt.email.api.email.model.LocalFolder import com.flowcrypt.email.database.entity.MessageEntity import com.flowcrypt.email.ui.activity.base.BaseBackStackSyncActivity -import com.flowcrypt.email.ui.activity.fragment.MessageDetailsFragment import com.flowcrypt.email.util.idling.SingleIdlingResources /** @@ -35,14 +35,8 @@ class MessageDetailsActivity : BaseBackStackSyncActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (savedInstanceState == null) { - val fragment = MessageDetailsFragment().apply { - arguments = intent.extras - } - supportFragmentManager.beginTransaction() - .add(R.id.fragmentContainerView, fragment) - .commit() - } + (supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as? NavHostFragment) + ?.navController?.setGraph(R.navigation.msg_details_graph, intent.extras) } companion object { diff --git a/FlowCrypt/src/main/res/layout/activity_message_details.xml b/FlowCrypt/src/main/res/layout/activity_message_details.xml index ed1db5b3d2..1b00f348dc 100644 --- a/FlowCrypt/src/main/res/layout/activity_message_details.xml +++ b/FlowCrypt/src/main/res/layout/activity_message_details.xml @@ -14,9 +14,9 @@ - + app:defaultNavHost="true" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> diff --git a/FlowCrypt/src/main/res/navigation/msg_details_graph.xml b/FlowCrypt/src/main/res/navigation/msg_details_graph.xml new file mode 100644 index 0000000000..77e4236add --- /dev/null +++ b/FlowCrypt/src/main/res/navigation/msg_details_graph.xml @@ -0,0 +1,24 @@ + + + + + + + + + From e830e7aada7b0006a563366e9170499979703ed4 Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Mon, 21 Feb 2022 10:32:23 +0200 Subject: [PATCH 02/15] Added RESTRICT_ANDROID_ATTACHMENT_HANDLING rule.| #1602 --- .../email/api/retrofit/response/model/OrgRules.kt | 3 ++- .../activity/fragment/MessageDetailsFragment.kt | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/OrgRules.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/OrgRules.kt index 856d07cd4f..71791daaf8 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/OrgRules.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/OrgRules.kt @@ -238,7 +238,8 @@ data class OrgRules constructor( USE_LEGACY_ATTESTER_SUBMIT, DEFAULT_REMEMBER_PASS_PHRASE, HIDE_ARMOR_META, - FORBID_STORING_PASS_PHRASE; + FORBID_STORING_PASS_PHRASE, + RESTRICT_ANDROID_ATTACHMENT_HANDLING; companion object CREATOR : Parcelable.Creator { override fun createFromParcel(parcel: Parcel): DomainRule = values()[parcel.readInt()] diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt index 0201e65f00..dab75c16a7 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt @@ -52,6 +52,7 @@ import com.flowcrypt.email.api.retrofit.response.base.Result import com.flowcrypt.email.api.retrofit.response.model.DecryptErrorMsgBlock import com.flowcrypt.email.api.retrofit.response.model.DecryptedAttMsgBlock import com.flowcrypt.email.api.retrofit.response.model.MsgBlock +import com.flowcrypt.email.api.retrofit.response.model.OrgRules import com.flowcrypt.email.api.retrofit.response.model.PublicKeyMsgBlock import com.flowcrypt.email.database.MessageState import com.flowcrypt.email.database.entity.AccountEntity @@ -1476,10 +1477,18 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi private fun downloadAttachment() { lastClickedAtt?.let { attInfo -> - if (attInfo.rawData?.isNotEmpty() == true) { - downloadInlinedAtt(attInfo) + if (account?.isRuleExist(OrgRules.DomainRule.RESTRICT_ANDROID_ATTACHMENT_HANDLING) == true) { + if (attInfo.rawData?.isNotEmpty() == true) { + //downloadInlinedAtt + } else { + //show downloading att dialog + } } else { - context?.startService(AttachmentDownloadManagerService.newIntent(context, attInfo)) + if (attInfo.rawData?.isNotEmpty() == true) { + downloadInlinedAtt(attInfo) + } else { + context?.startService(AttachmentDownloadManagerService.newIntent(context, attInfo)) + } } } } From 913065c60f742fd1822d6a7b40fea7c723bd6388 Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Mon, 21 Feb 2022 10:50:43 +0200 Subject: [PATCH 03/15] MessageDetailsFragment. Migrated to use binding.| #1682 --- .../fragment/MessageDetailsFragment.kt | 226 ++++++++---------- 1 file changed, 102 insertions(+), 124 deletions(-) diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt index dab75c16a7..715a6d4475 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt @@ -24,10 +24,7 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.CompoundButton -import android.widget.ImageButton -import android.widget.ImageView import android.widget.ListView -import android.widget.ProgressBar import android.widget.TextView import android.widget.Toast import androidx.appcompat.widget.PopupMenu @@ -58,6 +55,7 @@ import com.flowcrypt.email.database.MessageState import com.flowcrypt.email.database.entity.AccountEntity import com.flowcrypt.email.database.entity.MessageEntity import com.flowcrypt.email.database.entity.PublicKeyEntity +import com.flowcrypt.email.databinding.FragmentMessageDetailsBinding import com.flowcrypt.email.extensions.decrementSafely import com.flowcrypt.email.extensions.gone import com.flowcrypt.email.extensions.incrementSafely @@ -121,17 +119,18 @@ import javax.mail.internet.InternetAddress */ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickListener { override val progressView: View? - get() = view?.findViewById(R.id.progress) + get() = binding?.progress?.root override val contentView: View? - get() = view?.findViewById(R.id.layoutContent) + get() = binding?.layoutContent override val statusView: View? - get() = view?.findViewById(R.id.status) + get() = binding?.status?.root private val args by navArgs() private val msgDetailsViewModel: MsgDetailsViewModel by viewModels { MsgDetailsViewModelFactory(args.localFolder, args.messageEntity, requireActivity().application) } private val pgpSignatureHandlerViewModel: PgpSignatureHandlerViewModel by viewModels() + private var binding: FragmentMessageDetailsBinding? = null private val attachmentsRecyclerViewAdapter = AttachmentsRecyclerViewAdapter( object : AttachmentsRecyclerViewAdapter.Listener { @@ -172,27 +171,6 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi } }) - private var textViewSenderAddress: TextView? = null - private var textViewDate: TextView? = null - private var textViewSubject: TextView? = null - private var tVTo: TextView? = null - private var viewFooterOfHeader: View? = null - private var layoutMsgParts: ViewGroup? = null - private var layoutContent: View? = null - private var imageBtnReplyAll: ImageButton? = null - private var imageBtnMoreOptions: View? = null - private var iBShowDetails: View? = null - private var layoutReplyButton: View? = null - private var layoutFwdButton: View? = null - private var layoutReplyBtns: View? = null - private var emailWebView: EmailWebView? = null - private var layoutActionProgress: View? = null - private var textViewActionProgress: TextView? = null - private var progressBarActionProgress: ProgressBar? = null - private var rVAttachments: RecyclerView? = null - private var rVMsgDetails: RecyclerView? = null - private var rVPgpBadges: RecyclerView? = null - private var msgInfo: IncomingMessageInfo? = null private var folderType: FoldersManager.FolderType? = null private val labelsViewModel: LabelsViewModel by viewModels() @@ -215,9 +193,15 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi updateActionsVisibility(args.localFolder, null) } + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + binding = FragmentMessageDetailsBinding.inflate(inflater, container, false) + return binding?.root + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - initViews(view) updateViews() setupLabelsViewModel() @@ -368,12 +352,12 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi popup.setOnMenuItemClickListener { when (it.itemId) { R.id.menuActionReply -> { - layoutReplyButton?.let { view -> onClick(view) } + binding?.layoutReplyButtons?.layoutReplyButton?.let { view -> onClick(view) } true } R.id.menuActionForward -> { - layoutFwdButton?.let { view -> onClick(view) } + binding?.layoutReplyButtons?.layoutFwdButton?.let { view -> onClick(view) } true } else -> { @@ -440,13 +424,13 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi private fun showIncomingMsgInfo(msgInfo: IncomingMessageInfo) { this.msgInfo = msgInfo this.msgEncryptType = msgInfo.encryptionType - imageBtnReplyAll?.visibility = View.VISIBLE - imageBtnMoreOptions?.visibility = View.VISIBLE + binding?.imageButtonReplyAll?.visibility = View.VISIBLE + binding?.imageButtonMoreOptions?.visibility = View.VISIBLE isAdditionalActionEnabled = true activity?.invalidateOptionsMenu() msgInfo.localFolder = args.localFolder - msgInfo.inlineSubject?.let { textViewSubject?.text = it } + msgInfo.inlineSubject?.let { binding?.textViewSubject?.text = it } updateMsgBody() showContent() @@ -454,15 +438,16 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi private fun setActionProgress(progress: Int, message: String? = null) { if (progress > 0) { - progressBarActionProgress?.progress = progress + binding?.progressBarActionProgress?.progress = progress } if (progress != 100) { - textViewActionProgress?.text = getString(R.string.progress_message, progress, message) - textViewActionProgress?.visibility = View.VISIBLE + binding?.textViewActionProgress?.text = + getString(R.string.progress_message, progress, message) + binding?.textViewActionProgress?.visibility = View.VISIBLE } else { - textViewActionProgress?.text = null - layoutActionProgress?.visibility = View.GONE + binding?.textViewActionProgress?.text = null + binding?.layoutActionProgress?.visibility = View.GONE } } @@ -674,41 +659,18 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi supportActionBar?.subtitle = actionBarSubTitle } - private fun initViews(view: View) { - layoutActionProgress = view.findViewById(R.id.layoutActionProgress) - textViewActionProgress = view.findViewById(R.id.textViewActionProgress) - progressBarActionProgress = view.findViewById(R.id.progressBarActionProgress) - - textViewSenderAddress = view.findViewById(R.id.textViewSenderAddress) - textViewDate = view.findViewById(R.id.textViewDate) - textViewSubject = view.findViewById(R.id.textViewSubject) - tVTo = view.findViewById(R.id.tVTo) - viewFooterOfHeader = view.findViewById(R.id.layoutFooterOfHeader) - layoutMsgParts = view.findViewById(R.id.layoutMessageParts) - layoutReplyBtns = view.findViewById(R.id.layoutReplyButtons) - emailWebView = view.findViewById(R.id.emailWebView) - - layoutContent = view.findViewById(R.id.layoutContent) - imageBtnReplyAll = view.findViewById(R.id.imageButtonReplyAll) - imageBtnReplyAll?.setOnClickListener(this) - imageBtnMoreOptions = view.findViewById(R.id.imageButtonMoreOptions) - imageBtnMoreOptions?.setOnClickListener(this) - iBShowDetails = view.findViewById(R.id.iBShowDetails) - - rVAttachments = view.findViewById(R.id.rVAttachments) - rVMsgDetails = view.findViewById(R.id.rVMsgDetails) - rVPgpBadges = view.findViewById(R.id.rVPgpBadges) - } - private fun updateViews() { - iBShowDetails?.setOnClickListener { - rVMsgDetails?.visibleOrGone(!(rVMsgDetails?.isVisible ?: false)) - textViewDate?.visibleOrGone(!(rVMsgDetails?.isVisible ?: false)) + binding?.imageButtonReplyAll?.setOnClickListener(this) + binding?.imageButtonMoreOptions?.setOnClickListener(this) + + binding?.iBShowDetails?.setOnClickListener { + binding?.rVMsgDetails?.visibleOrGone(!(binding?.rVMsgDetails?.isVisible ?: false)) + binding?.textViewDate?.visibleOrGone(!(binding?.rVMsgDetails?.isVisible ?: false)) } updateMsgDetails() - rVAttachments?.apply { + binding?.rVAttachments?.apply { layoutManager = LinearLayoutManager(context) addItemDecoration( MarginItemDecoration( @@ -723,16 +685,17 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi args.messageEntity.subject if (folderType === FoldersManager.FolderType.SENT) { - textViewSenderAddress?.text = EmailUtil.getFirstAddressString(args.messageEntity.to) + binding?.textViewSenderAddress?.text = EmailUtil.getFirstAddressString(args.messageEntity.to) } else { - textViewSenderAddress?.text = EmailUtil.getFirstAddressString(args.messageEntity.from) + binding?.textViewSenderAddress?.text = + EmailUtil.getFirstAddressString(args.messageEntity.from) } - textViewSubject?.text = subject + binding?.textViewSubject?.text = subject if (JavaEmailConstants.FOLDER_OUTBOX.equals(args.messageEntity.folder, ignoreCase = true)) { - textViewDate?.text = + binding?.textViewDate?.text = DateTimeUtil.formatSameDayTime(context, args.messageEntity.sentDate ?: 0) } else { - textViewDate?.text = + binding?.textViewDate?.text = DateTimeUtil.formatSameDayTime(context, args.messageEntity.receivedDate ?: 0) } @@ -740,7 +703,7 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi } private fun updateMsgDetails() { - rVMsgDetails?.apply { + binding?.rVMsgDetails?.apply { layoutManager = LinearLayoutManager(context) addItemDecoration( VerticalSpaceMarginItemDecoration( @@ -752,7 +715,7 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi adapter = msgDetailsAdapter } - rVPgpBadges?.apply { + binding?.rVPgpBadges?.apply { layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false) addItemDecoration( MarginItemDecoration( @@ -762,7 +725,7 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi adapter = pgpBadgeListAdapter } - tVTo?.text = prepareToText() + binding?.tVTo?.text = prepareToText() val headers = mutableListOf().apply { add( @@ -863,8 +826,8 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi private fun updateMsgView() { val inlineEncryptedAtts = mutableListOf() - emailWebView?.loadUrl("about:blank") - layoutMsgParts?.removeAllViews() + binding?.emailWebView?.loadUrl("about:blank") + binding?.layoutMessageParts?.removeAllViews() var isFirstMsgPartText = true var isHtmlDisplayed = false @@ -881,22 +844,27 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi MsgBlock.Type.DECRYPTED_TEXT -> { msgEncryptType = MessageEncryptionType.ENCRYPTED - layoutMsgParts?.addView(genDecryptedTextPart(block, layoutInflater)) + binding?.layoutMessageParts?.addView(genDecryptedTextPart(block, layoutInflater)) } MsgBlock.Type.PLAIN_TEXT -> { - layoutMsgParts?.addView(genTextPart(block, layoutInflater)) + binding?.layoutMessageParts?.addView(genTextPart(block, layoutInflater)) if (isFirstMsgPartText) { - viewFooterOfHeader?.visibility = View.VISIBLE + binding?.layoutFooterOfHeader?.visibility = View.VISIBLE } } MsgBlock.Type.PUBLIC_KEY -> - layoutMsgParts?.addView(genPublicKeyPart(block as PublicKeyMsgBlock, layoutInflater)) + binding?.layoutMessageParts?.addView( + genPublicKeyPart( + block as PublicKeyMsgBlock, + layoutInflater + ) + ) MsgBlock.Type.DECRYPT_ERROR -> { msgEncryptType = MessageEncryptionType.ENCRYPTED - layoutMsgParts?.addView( + binding?.layoutMessageParts?.addView( genDecryptErrorPart( block as DecryptErrorMsgBlock, layoutInflater @@ -932,27 +900,27 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi block: @JvmSuppressWildcards MsgBlock, layoutInflater: LayoutInflater ) { - layoutMsgParts?.addView( + binding?.layoutMessageParts?.addView( genDefPart( block, layoutInflater, - R.layout.message_part_other, layoutMsgParts + R.layout.message_part_other, binding?.layoutMessageParts ) ) } private fun setupWebView(block: MsgBlock) { - emailWebView?.configure() + binding?.emailWebView?.configure() val text = clipLargeText(block.content) ?: "" - emailWebView?.loadDataWithBaseURL( + binding?.emailWebView?.loadDataWithBaseURL( null, text, "text/html", StandardCharsets.UTF_8.displayName(), null ) - emailWebView?.setOnPageFinishedListener(object : EmailWebView.OnPageFinishedListener { + binding?.emailWebView?.setOnPageFinishedListener(object : EmailWebView.OnPageFinishedListener { override fun onPageFinished() { setActionProgress(100, null) updateReplyButtons() @@ -975,42 +943,39 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi * Update the reply buttons layout depending on the [MessageEncryptionType] */ private fun updateReplyButtons() { - if (layoutReplyBtns != null) { - val imageViewReply = layoutReplyBtns!!.findViewById(R.id.imageViewReply) - val imageViewReplyAll = layoutReplyBtns!!.findViewById(R.id.imageViewReplyAll) - val imageViewFwd = layoutReplyBtns!!.findViewById(R.id.imageViewFwd) + if (binding?.layoutReplyButtons != null) { + val imageViewReply = binding?.layoutReplyButtons?.imageViewReply + val imageViewReplyAll = binding?.layoutReplyButtons?.imageViewReplyAll + val imageViewFwd = binding?.layoutReplyButtons?.imageViewFwd - val textViewReply = layoutReplyBtns!!.findViewById(R.id.textViewReply) - val textViewReplyAll = layoutReplyBtns!!.findViewById(R.id.textViewReplyAll) - val textViewFwd = layoutReplyBtns!!.findViewById(R.id.textViewFwd) + val textViewReply = binding?.layoutReplyButtons?.textViewReply + val textViewReplyAll = binding?.layoutReplyButtons?.textViewReplyAll + val textViewFwd = binding?.layoutReplyButtons?.textViewFwd if (msgEncryptType === MessageEncryptionType.ENCRYPTED) { - imageViewReply.setImageResource(R.mipmap.ic_reply_green) - imageViewReplyAll.setImageResource(R.mipmap.ic_reply_all_green) - imageBtnReplyAll?.setImageResource(R.mipmap.ic_reply_all_green) - imageViewFwd.setImageResource(R.mipmap.ic_forward_green) - - textViewReply.setText(R.string.reply_encrypted) - textViewReplyAll.setText(R.string.reply_all_encrypted) - textViewFwd.setText(R.string.forward_encrypted) + imageViewReply?.setImageResource(R.mipmap.ic_reply_green) + imageViewReplyAll?.setImageResource(R.mipmap.ic_reply_all_green) + binding?.imageButtonReplyAll?.setImageResource(R.mipmap.ic_reply_all_green) + imageViewFwd?.setImageResource(R.mipmap.ic_forward_green) + + textViewReply?.setText(R.string.reply_encrypted) + textViewReplyAll?.setText(R.string.reply_all_encrypted) + textViewFwd?.setText(R.string.forward_encrypted) } else { - imageViewReply.setImageResource(R.mipmap.ic_reply_red) - imageViewReplyAll.setImageResource(R.mipmap.ic_reply_all_red) - imageBtnReplyAll?.setImageResource(R.mipmap.ic_reply_all_red) - imageViewFwd.setImageResource(R.mipmap.ic_forward_red) - - textViewReply.setText(R.string.reply) - textViewReplyAll.setText(R.string.reply_all) - textViewFwd.setText(R.string.forward) + imageViewReply?.setImageResource(R.mipmap.ic_reply_red) + imageViewReplyAll?.setImageResource(R.mipmap.ic_reply_all_red) + binding?.imageButtonReplyAll?.setImageResource(R.mipmap.ic_reply_all_red) + imageViewFwd?.setImageResource(R.mipmap.ic_forward_red) + + textViewReply?.setText(R.string.reply) + textViewReplyAll?.setText(R.string.reply_all) + textViewFwd?.setText(R.string.forward) } - layoutReplyButton = layoutReplyBtns?.findViewById(R.id.layoutReplyButton) - layoutReplyButton?.setOnClickListener(this) - layoutFwdButton = layoutReplyBtns?.findViewById(R.id.layoutFwdButton) - layoutFwdButton?.setOnClickListener(this) - layoutReplyBtns?.findViewById(R.id.layoutReplyAllButton)?.setOnClickListener(this) - - layoutReplyBtns?.visibility = View.VISIBLE + binding?.layoutReplyButtons?.layoutReplyButton?.setOnClickListener(this) + binding?.layoutReplyButtons?.layoutFwdButton?.setOnClickListener(this) + binding?.layoutReplyButtons?.layoutReplyAllButton?.setOnClickListener(this) + binding?.layoutReplyButtons?.root?.visibility = View.VISIBLE } } @@ -1031,8 +996,11 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi ) } - val pubKeyView = - inflater.inflate(R.layout.message_part_public_key, layoutMsgParts, false) as ViewGroup + val pubKeyView = inflater.inflate( + R.layout.message_part_public_key, + binding?.layoutMessageParts, + false + ) as ViewGroup val textViewPgpPublicKey = pubKeyView.findViewById(R.id.textViewPgpPublicKey) val switchShowPublicKey = pubKeyView.findViewById(R.id.switchShowPublicKey) @@ -1150,11 +1118,21 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi } private fun genTextPart(block: MsgBlock, layoutInflater: LayoutInflater): View { - return genDefPart(block, layoutInflater, R.layout.message_part_text, layoutMsgParts) + return genDefPart( + block, + layoutInflater, + R.layout.message_part_text, + binding?.layoutMessageParts + ) } private fun genDecryptedTextPart(block: MsgBlock, layoutInflater: LayoutInflater): View { - return genDefPart(block, layoutInflater, R.layout.message_part_pgp_message, layoutMsgParts) + return genDefPart( + block, + layoutInflater, + R.layout.message_part_pgp_message, + binding?.layoutMessageParts + ) } private fun genDecryptErrorPart( @@ -1230,7 +1208,7 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi ): View { val viewGroup = layoutInflater.inflate( R.layout.message_part_pgp_message_error, - layoutMsgParts, false + binding?.layoutMessageParts, false ) as ViewGroup val textViewErrorMsg = viewGroup.findViewById(R.id.textViewErrorMessage) ExceptionUtil.handleError(ManualHandledException(errorMsg)) @@ -1256,7 +1234,7 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi */ private fun generateMissingPrivateKeyLayout(pgpMsg: String?, inflater: LayoutInflater): View { val viewGroup = inflater.inflate( - R.layout.message_part_pgp_message_missing_private_key, layoutMsgParts, false + R.layout.message_part_pgp_message_missing_private_key, binding?.layoutMessageParts, false ) as ViewGroup val buttonImportPrivateKey = viewGroup.findViewById