Revert primary base activity context change in MessageDetailsActivity to prevent print manager crash.

MAILAND-1122
This commit is contained in:
Tomasz Giszczak 2020-11-12 14:28:29 +01:00
parent df3b571f33
commit 418429d78e
3 changed files with 17 additions and 13 deletions

View File

@ -20,6 +20,7 @@ package ch.protonmail.android.activities.messageDetails
import android.app.AlertDialog
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.graphics.Color
@ -85,6 +86,7 @@ import ch.protonmail.android.jobs.PostTrashJobV2
import ch.protonmail.android.jobs.PostUnreadJob
import ch.protonmail.android.jobs.ReportPhishingJob
import ch.protonmail.android.utils.AppUtil
import ch.protonmail.android.utils.CustomLocale
import ch.protonmail.android.utils.DownloadUtils
import ch.protonmail.android.utils.Event
import ch.protonmail.android.utils.HTMLTransformer.AbstractTransformer
@ -129,6 +131,7 @@ internal class MessageDetailsActivity :
private lateinit var pmWebViewClient: PMWebViewClient
private lateinit var messageExpandableAdapter: MessageDetailsAdapter
private lateinit var attachmentsListAdapter: MessageDetailsAttachmentListAdapter
private lateinit var primaryBaseActivity: Context
/**
* Whether the current message needs to be store in database. If transient if won't be stored
@ -154,11 +157,17 @@ internal class MessageDetailsActivity :
override fun checkForPermissionOnStartup(): Boolean = false
override fun attachBaseContext(base: Context) {
primaryBaseActivity = base
super.attachBaseContext(CustomLocale.apply(base))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (mUserManager.isFirstMessageDetails) {
mUserManager.firstMessageDetailsDone()
}
markAsRead = true
messageId = requireNotNull(intent.getStringExtra(EXTRA_MESSAGE_ID))
messageRecipientUsername = intent.getStringExtra(EXTRA_MESSAGE_RECIPIENT_USERNAME)
@ -396,7 +405,7 @@ internal class MessageDetailsActivity :
}
}
R.id.action_report_phishing -> showReportPhishingDialog(message)
R.id.action_print -> viewModel.printMessage(applicationContext)
R.id.action_print -> viewModel.printMessage(primaryBaseActivity) // do not change context type
}
if (job != null) {
mJobManager.addJobInBackground(job)

View File

@ -29,16 +29,12 @@ import android.webkit.WebViewClient
import androidx.annotation.RequiresApi
import androidx.annotation.StringRes
import ch.protonmail.android.R
import ch.protonmail.android.activities.BaseActivity
import ch.protonmail.android.api.models.MessageRecipient
import ch.protonmail.android.api.models.room.messages.Message
import ch.protonmail.android.utils.DateUtil
import ch.protonmail.android.utils.Logger
import ch.protonmail.android.utils.extensions.showToast
import timber.log.Timber
/**
* Created by Kamil Rajtar on 09.08.18.
*/
internal class MessagePrinter(
private val context: Context,
private val resources: Resources,
@ -110,7 +106,7 @@ internal class MessagePrinter(
try {
printManager.print(jobName, printAdapter, PrintAttributes.Builder().build())
} catch (e: Exception) {
Logger.doLogException(e)
Timber.e(e)
context.showToast(R.string.print_error)
}
}

View File

@ -19,7 +19,6 @@
package ch.protonmail.android.activities.messageDetails.viewmodel
import android.content.Context
import android.content.res.Resources
import android.print.PrintManager
import android.util.Pair
import androidx.hilt.Assisted
@ -56,8 +55,8 @@ import ch.protonmail.android.events.FetchMessageDetailEvent
import ch.protonmail.android.events.FetchVerificationKeysEvent
import ch.protonmail.android.events.Status
import ch.protonmail.android.jobs.helper.EmbeddedImage
import ch.protonmail.android.usecase.delete.DeleteMessage
import ch.protonmail.android.usecase.VerifyConnection
import ch.protonmail.android.usecase.delete.DeleteMessage
import ch.protonmail.android.utils.AppUtil
import ch.protonmail.android.utils.DownloadUtils
import ch.protonmail.android.utils.Event
@ -586,13 +585,13 @@ internal class MessageDetailsViewModel @ViewModelInject constructor(
}
}
fun printMessage(context: Context) {
fun printMessage(activityContext: Context) {
val message = message.value
message?.let {
MessagePrinter(
context,
context.resources,
context.getSystemService(Context.PRINT_SERVICE) as PrintManager,
activityContext,
activityContext.resources,
activityContext.getSystemService(Context.PRINT_SERVICE) as PrintManager,
remoteContentDisplayed
).printMessage(it, this.bodyString ?: "")
}