diff --git a/financial-connections/src/main/java/com/stripe/android/financialconnections/features/common/AccountItem.kt b/financial-connections/src/main/java/com/stripe/android/financialconnections/features/common/AccountItem.kt index d8453c83f14..d1e7760fc62 100644 --- a/financial-connections/src/main/java/com/stripe/android/financialconnections/features/common/AccountItem.kt +++ b/financial-connections/src/main/java/com/stripe/android/financialconnections/features/common/AccountItem.kt @@ -1,5 +1,6 @@ package com.stripe.android.financialconnections.features.common +import FinancialConnectionsGenericInfoScreen import android.os.Build.VERSION.SDK_INT import android.os.Build.VERSION_CODES.M import android.view.HapticFeedbackConstants.CONTEXT_CLICK @@ -14,7 +15,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.ContentAlpha import androidx.compose.material.Icon import androidx.compose.material.Text import androidx.compose.material.icons.Icons @@ -28,10 +28,13 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.core.os.ConfigurationCompat.getLocales +import com.stripe.android.financialconnections.features.common.AccountSelectionState.Disabled +import com.stripe.android.financialconnections.features.common.AccountSelectionState.Enabled import com.stripe.android.financialconnections.model.FinancialConnectionsAccount import com.stripe.android.financialconnections.model.FinancialConnectionsInstitution import com.stripe.android.financialconnections.model.Image @@ -63,8 +66,8 @@ internal fun AccountItem( networkedAccount: NetworkedAccount? = null, ) { val view = LocalView.current - // networked account's allowSelection takes precedence over the account's. - val selectable = networkedAccount?.allowSelection ?: account.allowSelection + val viewState = remember(account, networkedAccount) { getVisibilityState(account, networkedAccount) } + val shape = remember { RoundedCornerShape(12.dp) } Box( modifier = Modifier @@ -78,11 +81,11 @@ internal fun AccountItem( }, shape = shape ) - .clickableSingle(enabled = selectable) { + .clickableSingle(enabled = viewState != Disabled) { if (SDK_INT >= M) view.performHapticFeedback(CONTEXT_CLICK) onAccountClicked(account) } - .alpha(if (selectable) 1f else ContentAlpha.disabled) + .alpha(viewState.alpha) .padding(16.dp) ) { Row( @@ -104,7 +107,7 @@ internal fun AccountItem( color = colors.textDefault, style = typography.labelLargeEmphasized ) - AccountSubtitle(selectable, account, networkedAccount) + AccountSubtitle(viewState, account, networkedAccount) } Icon( modifier = Modifier @@ -118,18 +121,39 @@ internal fun AccountItem( } } +private fun getVisibilityState( + account: PartnerAccount, + networkedAccount: NetworkedAccount? +): AccountSelectionState = when { + // networked account's allowSelection takes precedence over the account's. + networkedAccount?.allowSelection ?: account.allowSelection -> Enabled + // Even if the account looks "not selectable", when clicking we'd display the "drawer on selection" if available. + networkedAccount?.drawerOnSelection != null -> AccountSelectionState.VisuallyDisabled + else -> Disabled +} + @Composable private fun AccountSubtitle( - selectable: Boolean, + accountSelectionState: AccountSelectionState, account: PartnerAccount, networkedAccount: NetworkedAccount?, ) { - val subtitle = getSubtitle(allowSelection = selectable, account = account, networkedAccount = networkedAccount) + val subtitle = getSubtitle( + accountSelectionState = accountSelectionState, + account = account, + networkedAccount = networkedAccount + ) Row( verticalAlignment = Alignment.CenterVertically ) { MiddleEllipsisText( text = subtitle ?: account.redactedAccountNumbers, + // underline there's a subtitle and the account is clickable (even if visually disabled) + textDecoration = if (accountSelectionState != Disabled && subtitle != null) { + TextDecoration.Underline + } else { + null + }, color = colors.textSubdued, style = typography.labelMedium ) @@ -156,12 +180,13 @@ private fun AccountSubtitle( @Composable private fun getSubtitle( - allowSelection: Boolean, + accountSelectionState: AccountSelectionState, account: PartnerAccount, networkedAccount: NetworkedAccount?, ): String? = when { networkedAccount?.caption != null -> networkedAccount.caption - allowSelection.not() && account.allowSelectionMessage?.isNotBlank() == true -> account.allowSelectionMessage + accountSelectionState != Enabled && account.allowSelectionMessage?.isNotBlank() == true -> + account.allowSelectionMessage else -> null } @@ -180,6 +205,18 @@ private fun PartnerAccount.getFormattedBalance(): String? { } } +private enum class AccountSelectionState(val alpha: Float) { + Enabled(alpha = 1f), + Disabled(alpha = VISUALLY_DISABLED_ALPHA), + VisuallyDisabled(alpha = VISUALLY_DISABLED_ALPHA) +} + +/** + * Using a more visible alpha (instead of ContentAlpha.disabled) + * since disabled accounts are still clickable (they can show a drawer on selection) + */ +private const val VISUALLY_DISABLED_ALPHA = 0.6f + @Composable @Preview internal fun AccountItemPreview() { @@ -194,7 +231,35 @@ internal fun AccountItemPreview() { onAccountClicked = { }, account = PartnerAccount( id = "id", - name = "Regular Checking (Unselected)", + name = "Regular Checking", + allowSelectionMessage = "allowSelectionMessage", + institution = FinancialConnectionsInstitution( + id = "id", + name = "Bank of America", + featured = false, + mobileHandoffCapable = false, + icon = Image(default = "www.image.com") + ), + authorization = "", + currency = "USD", + category = FinancialConnectionsAccount.Category.CASH, + subcategory = FinancialConnectionsAccount.Subcategory.CHECKING, + supportedPaymentMethodTypes = emptyList(), + balanceAmount = 100, + ), + networkedAccount = NetworkedAccount( + id = "id", + caption = "With some caption", + allowSelection = true, + icon = Image(default = "www.image.com") + ) + ) + AccountItem( + selected = false, + onAccountClicked = { }, + account = PartnerAccount( + id = "id", + name = "Regular Checking", allowSelectionMessage = "allowSelectionMessage", institution = FinancialConnectionsInstitution( id = "id", @@ -294,6 +359,37 @@ internal fun AccountItemPreview() { icon = Image(default = "www.image.com") ) ) + AccountItem( + selected = false, + onAccountClicked = { }, + account = PartnerAccount( + id = "id", + name = "Manually entered (Disabled)", + _allowSelection = false, + allowSelectionMessage = "Visually disabled but clickable", + institution = FinancialConnectionsInstitution( + id = "id", + name = "Bank of America", + featured = false, + mobileHandoffCapable = false, + icon = Image(default = "www.image.com") + ), + authorization = "", + currency = "USD", + category = FinancialConnectionsAccount.Category.CASH, + subcategory = FinancialConnectionsAccount.Subcategory.CHECKING, + supportedPaymentMethodTypes = emptyList(), + balanceAmount = 100, + ), + networkedAccount = NetworkedAccount( + id = "id", + allowSelection = false, + icon = Image(default = "www.image.com"), + drawerOnSelection = FinancialConnectionsGenericInfoScreen( + id = "id", + ) + ) + ) } } } diff --git a/financial-connections/src/main/java/com/stripe/android/financialconnections/features/linkaccountpicker/LinkAccountPickerViewModel.kt b/financial-connections/src/main/java/com/stripe/android/financialconnections/features/linkaccountpicker/LinkAccountPickerViewModel.kt index c122f7e9bfd..b97175a2755 100644 --- a/financial-connections/src/main/java/com/stripe/android/financialconnections/features/linkaccountpicker/LinkAccountPickerViewModel.kt +++ b/financial-connections/src/main/java/com/stripe/android/financialconnections/features/linkaccountpicker/LinkAccountPickerViewModel.kt @@ -280,6 +280,15 @@ internal class LinkAccountPickerViewModel @AssistedInject constructor( fun onAccountClick(partnerAccount: PartnerAccount) { logAccountClick(partnerAccount) + val accounts = requireNotNull(stateFlow.value.payload()?.accounts) + val drawerOnSelection = accounts.firstOrNull { it.first.id == partnerAccount.id }?.second?.drawerOnSelection + + if (drawerOnSelection != null) { + // TODO@carlosmuvi handle drawer display. + logger.debug("Drawer on selection: $drawerOnSelection") + return + } + val updateRequired = createUpdateRequiredContent( partnerAccount = partnerAccount, partnerToCoreAuths = stateFlow.value.payload()?.partnerToCoreAuths, diff --git a/financial-connections/src/main/java/com/stripe/android/financialconnections/model/FinancialConnectionsGenericInfoScreen.kt b/financial-connections/src/main/java/com/stripe/android/financialconnections/model/FinancialConnectionsGenericInfoScreen.kt index f42b0f570b4..01e23d28d22 100644 --- a/financial-connections/src/main/java/com/stripe/android/financialconnections/model/FinancialConnectionsGenericInfoScreen.kt +++ b/financial-connections/src/main/java/com/stripe/android/financialconnections/model/FinancialConnectionsGenericInfoScreen.kt @@ -95,9 +95,6 @@ internal data class FinancialConnectionsGenericInfoScreen( val id: String, val label: String, val icon: ImageResponse? = null, - val action: String? = null, - @SerialName("test_id") - val testId: String? = null ) : Parcelable } diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_2,NEXUS_5].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_2,NEXUS_5].png index c0055c02823..d12bc4f3695 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_2,NEXUS_5].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_2,NEXUS_5].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_2,PIXEL_C].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_2,PIXEL_C].png index b05cb126d0c..b57b4feecf9 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_2,PIXEL_C].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_2,PIXEL_C].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_3,NEXUS_5].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_3,NEXUS_5].png index a08b4a8b381..e2b12d789f5 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_3,NEXUS_5].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_3,NEXUS_5].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_3,PIXEL_C].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_3,PIXEL_C].png index e2b9897c056..4728742184e 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_3,PIXEL_C].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.accountpicker_null_AccountPickerPane_AccountPickerPreview_0_null_3,PIXEL_C].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.common_null_DefaultGroup_AccountItemPreview_0_null,NEXUS_5].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.common_null_DefaultGroup_AccountItemPreview_0_null,NEXUS_5].png index e3da0ee8db7..d50634a20b5 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.common_null_DefaultGroup_AccountItemPreview_0_null,NEXUS_5].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.common_null_DefaultGroup_AccountItemPreview_0_null,NEXUS_5].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.common_null_DefaultGroup_AccountItemPreview_0_null,PIXEL_C].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.common_null_DefaultGroup_AccountItemPreview_0_null,PIXEL_C].png index f657ce29d27..a0dfadbee79 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.common_null_DefaultGroup_AccountItemPreview_0_null,PIXEL_C].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.common_null_DefaultGroup_AccountItemPreview_0_null,PIXEL_C].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_0,NEXUS_5].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_0,NEXUS_5].png index ab86e47f659..4c91547f0ed 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_0,NEXUS_5].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_0,NEXUS_5].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_0,PIXEL_C].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_0,PIXEL_C].png index 96865b84b02..9db3b36d387 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_0,PIXEL_C].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_0,PIXEL_C].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_2,NEXUS_5].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_2,NEXUS_5].png index 2166ef18be8..17c8cc91f47 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_2,NEXUS_5].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_2,NEXUS_5].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_2,PIXEL_C].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_2,PIXEL_C].png index 3c52b9b8c9d..a664673569e 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_2,PIXEL_C].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_2,PIXEL_C].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_3,NEXUS_5].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_3,NEXUS_5].png index 3c9e969e091..92b4054be63 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_3,NEXUS_5].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_3,NEXUS_5].png differ diff --git a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_3,PIXEL_C].png b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_3,PIXEL_C].png index 96a3f243196..a943e46bf6d 100644 Binary files a/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_3,PIXEL_C].png and b/financial-connections/src/test/snapshots/images/com.stripe.android.financialconnections.screenshottests_PaparazziSampleScreenshotTest_preview_tests[com.stripe.android.financialconnections.features.linkaccountpicker_null_LinkAccountPickerPane_LinkAccountPickerScreenPreview_0_null_3,PIXEL_C].png differ