From 6d2ebc7961c3add7fb4d038bff15bd5e8c555c7b Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 31 Mar 2021 19:03:46 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/MainActivity.kt | 1 + .../java/com/tangem/tap/TapApplication.kt | 3 +- .../tap/features/feedback/FeedbackManager.kt | 51 ++++++++++++++----- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 732ca5892e..0b349f013a 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -55,6 +55,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + store.state.globalState.feedbackManager?.updateAcivity(this) requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; store.dispatch(NavigationAction.ActivityCreated(WeakReference(this))) diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 0f609b7328..286c39df5e 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -74,7 +74,6 @@ class TapApplication : Application() { val logWriter = TangemLogCollector() Log.addLogger(logWriter) - val feedbackManager = FeedbackManager(infoHolder, this, logWriter) - store.dispatch(GlobalAction.SetFeedbackManager(feedbackManager)) + store.dispatch(GlobalAction.SetFeedbackManager(FeedbackManager(infoHolder, logWriter))) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt b/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt index ce94b2602b..3a57a3a211 100644 --- a/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt +++ b/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt @@ -1,11 +1,13 @@ package com.tangem.tap.features.feedback +import android.app.Activity import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.net.Uri import android.os.Build +import androidx.core.app.ShareCompat import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import com.tangem.Log @@ -22,39 +24,60 @@ import java.io.StringWriter */ class FeedbackManager( val infoHolder: AdditionalEmailInfo, - private val context: Context, private val logCollector: TangemLogCollector, private val email: String = "support@tangem.com", ) { + private lateinit var activity: Activity + + fun updateAcivity(activity: Activity) { + this.activity = activity + } + fun send(emailData: EmailData) { val fileLog = if (emailData is ScanFailsEmail) createLogFile() else null sendTo(email, emailData.subject, emailData.joinTogether(infoHolder), fileLog) } private fun sendTo(email: String, subject: String, message: String, fileLog: File? = null) { - val intent = Intent(Intent.ACTION_SENDTO).apply { - data = Uri.parse("mailto:$email") - putExtra(Intent.EXTRA_SUBJECT, subject) - putExtra(Intent.EXTRA_TEXT, message) - fileLog?.let { - val uri = FileProvider.getUriForFile(context, "${context.packageName}.provider", it) - putExtra(Intent.EXTRA_STREAM, uri) - } - } - + val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")) + val originalIntentResults = activity.packageManager.queryIntentActivities(emailFilterIntent, 0) + val emailFilterIntentResults = activity.packageManager.queryIntentActivities(emailFilterIntent, 0) + val targetedIntents = originalIntentResults + .filter { originalResult -> + emailFilterIntentResults.any { + originalResult.activityInfo.packageName == it.activityInfo.packageName + } + } + .map { + createEmailShareIntent(email, subject, message, fileLog).apply { + setPackage(it.activityInfo.packageName) + } + } + .toMutableList() try { - val chooserIntent = Intent.createChooser(intent, "Send mail...") + val chooserIntent = Intent.createChooser(targetedIntents.removeAt(0), "Send mail...") + chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray()) chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - ContextCompat.startActivity(context, chooserIntent, null) + ContextCompat.startActivity(activity, chooserIntent, null) } catch (ex: ActivityNotFoundException) { Timber.e(ex) } } + private fun createEmailShareIntent(recipient: String, subject: String, text: String, file: File? = null): Intent { + val builder = ShareCompat.IntentBuilder.from(activity) + .setType("message/rfc822") + .setEmailTo(arrayOf(recipient)) + .setSubject(subject) + .setText(text) + file?.let { builder.setStream(FileProvider.getUriForFile(activity, "${activity.packageName}.provider", it)) } + return builder.intent + } + private fun createLogFile(): File? { return try { - val file = File(context.filesDir, "logs.txt") + val file = File(activity.filesDir, "logs.txt") file.delete() file.createNewFile()