Skip to content

Commit 389d441

Browse files
committed
fix: catch ActivityNotFoundException when opening email app
Devices without a default email app crash when the user taps 'Open Mail' during email verification. Catches the exception and shows a toast instead. Fixes Bugsnag 6a3f422fd7a912dd24962554 Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 832f09e commit 389d441

3 files changed

Lines changed: 17 additions & 4 deletions

File tree

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/IntentUtils.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ object IntentUtils {
2424

2525
fun tweet(message: String) = Intent(Intent.ACTION_VIEW).apply {
2626
val url = Linkify.tweet(message)
27-
setData(url.toUri())
27+
data = url.toUri()
2828
flags = Intent.FLAG_ACTIVITY_NEW_TASK
2929
}
3030

@@ -57,7 +57,7 @@ object IntentUtils {
5757
}
5858

5959
fun appStoreListing(packageName: String) = Intent(Intent.ACTION_VIEW).apply {
60-
setData(Uri.parse("https://play.google.com/store/apps/details?id=$packageName"))
60+
data = "https://play.google.com/store/apps/details?id=$packageName".toUri()
6161
flags = Intent.FLAG_ACTIVITY_NEW_TASK
6262
}
6363

apps/flipcash/core/src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,10 +367,11 @@
367367

368368
<string name="title_verificationFlow">Verify Your Phone Number And Email To Continue</string>
369369
<string name="subtitle_verificationFlowForOnramp">This will allow you to add funds from your debit card</string>
370-
"
371370

372371
<string name="title_email">Email</string>
373372
<string name="action_openMail">Open Mail</string>
373+
<string name="error_title_noEmailAppFound">No email app found on this device</string>
374+
<string name="error_description_noEmailAppFound">Please install an email app to receive your verification email</string>
374375
<string name="title_checkYourInbox">Check your inbox</string>
375376
<string name="subtitle_linkSentToEmail">Tap the link we sent to</string>
376377
<string name="subtitle_didntGetEmail">Didn\'t get an email?</string>

apps/flipcash/features/contact-verification/src/main/kotlin/com/flipcash/app/contact/verification/email/EmailMagicLinkScreen.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,15 @@ import com.flipcash.app.analytics.Analytics
1212
import com.flipcash.app.analytics.rememberAnalytics
1313
import com.flipcash.app.contact.verification.internal.email.EmailMagicLinkScreen
1414
import com.flipcash.app.contact.verification.internal.email.EmailVerificationViewModel
15+
import android.content.ActivityNotFoundException
16+
import android.widget.Toast
17+
import androidx.compose.ui.platform.LocalResources
1518
import com.flipcash.app.core.android.IntentUtils
1619
import com.flipcash.app.core.verification.VerificationResult
1720
import com.flipcash.app.core.verification.VerificationStep
1821
import com.flipcash.app.core.verification.email.EmailDeeplinkOrigin
1922
import com.flipcash.features.contact.verification.R
23+
import com.getcode.manager.BottomBarManager
2024
import com.getcode.navigation.flow.flowSharedViewModel
2125
import com.getcode.navigation.flow.rememberFlowNavigator
2226
import com.getcode.ui.components.AppBarWithTitle
@@ -59,12 +63,20 @@ fun EmailMagicLinkContent(
5963
viewModel.dispatchEvent(EmailVerificationViewModel.Event.OnDataProvided(email, code))
6064
}
6165

66+
val resources = LocalResources.current
6267
val context = LocalContext.current
6368
LaunchedEffect(viewModel) {
6469
viewModel.eventFlow
6570
.filterIsInstance<EmailVerificationViewModel.Event.OpenMailApp>()
6671
.onEach {
67-
context.startActivity(IntentUtils.emailApp())
72+
try {
73+
context.startActivity(IntentUtils.emailApp())
74+
} catch (_: ActivityNotFoundException) {
75+
BottomBarManager.showError(
76+
title = resources.getString(R.string.error_title_noEmailAppFound),
77+
message = resources.getString(R.string.error_description_noEmailAppFound),
78+
)
79+
}
6880
}.launchIn(this)
6981
}
7082

0 commit comments

Comments
 (0)