From db178b206b7be4645865570b71deb6e39eecab4f Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 5 Mar 2024 19:24:48 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/MainActivity.kt | 3 - .../tangem/tap/common/extensions/Activity.kt | 1 + core/navigation/build.gradle.kts | 6 ++ .../core/navigation/di/EmailSenderModule.kt | 22 +++++++ .../navigation/email/AndroidEmailSender.kt | 65 +++++++++++++++++++ .../core/navigation/email/EmailSender.kt | 21 ++++++ core/utils/src/main/AndroidManifest.xml | 2 - 7 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 core/navigation/src/main/java/com/tangem/core/navigation/di/EmailSenderModule.kt create mode 100644 core/navigation/src/main/java/com/tangem/core/navigation/email/AndroidEmailSender.kt create mode 100644 core/navigation/src/main/java/com/tangem/core/navigation/email/EmailSender.kt delete mode 100644 core/utils/src/main/AndroidManifest.xml diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 99a374a21f..c1d5853c80 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -141,9 +141,6 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac @Inject lateinit var userWalletsListManagerFeatureToggles: UserWalletsListManagerFeatureToggles - @Inject - lateinit var generalUserWalletsListManager: UserWalletsListManager - internal val viewModel: MainViewModel by viewModels() private lateinit var appThemeModeFlow: SharedFlow diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Activity.kt b/app/src/main/java/com/tangem/tap/common/extensions/Activity.kt index adf3e19fed..ec4f3737f0 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Activity.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Activity.kt @@ -17,6 +17,7 @@ import java.io.File * * */ +@Deprecated("Use EmailSender instead") fun Activity.sendEmail( email: String, subject: String, diff --git a/core/navigation/build.gradle.kts b/core/navigation/build.gradle.kts index bb00481f67..8dc7d5437d 100644 --- a/core/navigation/build.gradle.kts +++ b/core/navigation/build.gradle.kts @@ -1,6 +1,8 @@ plugins { alias(deps.plugins.android.library) alias(deps.plugins.kotlin.android) + alias(deps.plugins.kotlin.kapt) + alias(deps.plugins.hilt.android) id("configuration") } @@ -9,6 +11,10 @@ android { } dependencies { + implementation(deps.hilt.android) + kapt(deps.hilt.kapt) + implementation(deps.material) implementation(deps.reKotlin) + implementation(deps.timber) } \ No newline at end of file diff --git a/core/navigation/src/main/java/com/tangem/core/navigation/di/EmailSenderModule.kt b/core/navigation/src/main/java/com/tangem/core/navigation/di/EmailSenderModule.kt new file mode 100644 index 0000000000..0651ea8926 --- /dev/null +++ b/core/navigation/src/main/java/com/tangem/core/navigation/di/EmailSenderModule.kt @@ -0,0 +1,22 @@ +package com.tangem.core.navigation.di + +import android.content.Context +import com.tangem.core.navigation.email.AndroidEmailSender +import com.tangem.core.navigation.email.EmailSender +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.qualifiers.ActivityContext +import dagger.hilt.android.scopes.ActivityScoped + +@Module +@InstallIn(ActivityComponent::class) +internal object EmailSenderModule { + + @Provides + @ActivityScoped + fun provideEmailSender(@ActivityContext context: Context): EmailSender { + return AndroidEmailSender(context) + } +} \ No newline at end of file diff --git a/core/navigation/src/main/java/com/tangem/core/navigation/email/AndroidEmailSender.kt b/core/navigation/src/main/java/com/tangem/core/navigation/email/AndroidEmailSender.kt new file mode 100644 index 0000000000..d6fe4b6d35 --- /dev/null +++ b/core/navigation/src/main/java/com/tangem/core/navigation/email/AndroidEmailSender.kt @@ -0,0 +1,65 @@ +package com.tangem.core.navigation.email + +import android.content.Context +import android.content.Intent +import android.net.Uri +import androidx.core.app.ShareCompat +import androidx.core.content.ContextCompat +import androidx.core.content.FileProvider +import timber.log.Timber + +/** + * Implementation of email sender for Android + * + * @property context context + * +[REDACTED_AUTHOR] + */ +internal class AndroidEmailSender(private val context: Context) : EmailSender { + + override fun send(email: EmailSender.Email, onFail: ((Exception) -> Unit)?) { + val originalIntent = createEmailShareIntent(email) + val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")) + + val packageManager = context.packageManager + val originalIntentResults = packageManager.queryIntentActivities(originalIntent, 0) + val emailFilterIntentResults = packageManager.queryIntentActivities(emailFilterIntent, 0) + + val targetedIntents = originalIntentResults + .filter { originalResult -> + emailFilterIntentResults.any { + originalResult.activityInfo.packageName == it.activityInfo.packageName + } + } + .map { + createEmailShareIntent(email).apply { setPackage(it.activityInfo.packageName) } + } + .toMutableList() + + try { + val chooserIntent = Intent.createChooser(targetedIntents.removeAt(0), "Send mail...").apply { + putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray()) + } + + ContextCompat.startActivity(context, chooserIntent, null) + } catch (ex: Exception) { + Timber.e("Failed to send email: $ex") + } + } + + private fun createEmailShareIntent(email: EmailSender.Email): Intent { + val builder = ShareCompat.IntentBuilder(context) + .setType("message/rfc822") + .setEmailTo(arrayOf(email.address)) + .setSubject(email.subject) + .setText(email.message) + + email.attachment?.let { + builder.setStream( + FileProvider.getUriForFile(context, "${context.packageName}.provider", it), + ) + } + + return builder.intent + } +} \ No newline at end of file diff --git a/core/navigation/src/main/java/com/tangem/core/navigation/email/EmailSender.kt b/core/navigation/src/main/java/com/tangem/core/navigation/email/EmailSender.kt new file mode 100644 index 0000000000..3aa803b702 --- /dev/null +++ b/core/navigation/src/main/java/com/tangem/core/navigation/email/EmailSender.kt @@ -0,0 +1,21 @@ +package com.tangem.core.navigation.email + +import java.io.File + +/** + * Email sender + * +[REDACTED_AUTHOR] + */ +interface EmailSender { + + /** Send [email] or handle exception [onFail] */ + fun send(email: Email, onFail: ((Exception) -> Unit)? = null) + + data class Email( + val address: String, + val subject: String, + val message: String, + val attachment: File? = null, + ) +} \ No newline at end of file diff --git a/core/utils/src/main/AndroidManifest.xml b/core/utils/src/main/AndroidManifest.xml deleted file mode 100644 index 02f6bf24ad..0000000000 --- a/core/utils/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file