Skip to content

Commit

Permalink
feat(blockchain_card): AND-6762 Blockchain Card Waitlist Announcement…
Browse files Browse the repository at this point in the history
… (#4098)

* Blockchain card waitlist announcement

* ktlint

* retrieve list of eligible countries from remoteconfig
  • Loading branch information
labreu-bc committed Nov 11, 2022
1 parent 1abd620 commit 7d8023e
Show file tree
Hide file tree
Showing 8 changed files with 116 additions and 2 deletions.
Expand Up @@ -186,11 +186,21 @@ class AnnouncementQueries(
}
}

fun isBlockchainCardAvailable(): Single<Boolean> =
remoteConfigService.getRawJson(BLOCKCHAIN_CARD_ELIGIBLE_COUNTRIES).flatMap { json ->
val eligibleCountries = Json.decodeFromString<List<String>>(json)
getCountryCode().map { countryCode ->
eligibleCountries.contains(countryCode)
}
}

companion object {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
const val NEW_ASSET_TICKER = "new_asset_announcement_ticker"

private const val RENAME_ASSET_TICKER = "rename_asset_announcement_ticker"

private const val BLOCKCHAIN_CARD_ELIGIBLE_COUNTRIES = "blockchain_card_eligible_countries"
}
}

Expand Down
Expand Up @@ -9,6 +9,7 @@ import org.koin.dsl.bind
import org.koin.dsl.module
import piuk.blockchain.android.ui.dashboard.announcements.rule.BackupPhraseAnnouncement
import piuk.blockchain.android.ui.dashboard.announcements.rule.BitpayAnnouncement
import piuk.blockchain.android.ui.dashboard.announcements.rule.BlockchainCardWaitlistAnnouncement
import piuk.blockchain.android.ui.dashboard.announcements.rule.CloudBackupAnnouncement
import piuk.blockchain.android.ui.dashboard.announcements.rule.FiatFundsKycAnnouncement
import piuk.blockchain.android.ui.dashboard.announcements.rule.FiatFundsNoKycAnnouncement
Expand Down Expand Up @@ -272,6 +273,13 @@ val dashboardAnnouncementsModule = module {
announcementQueries = get()
)
}.bind(AnnouncementRule::class)

factory {
BlockchainCardWaitlistAnnouncement(
announcementQueries = get(),
dismissRecorder = get()
)
}.bind(AnnouncementRule::class)
}

single {
Expand Down
@@ -0,0 +1,58 @@
package piuk.blockchain.android.ui.dashboard.announcements.rule

import androidx.annotation.VisibleForTesting
import com.blockchain.walletmode.WalletMode
import io.reactivex.rxjava3.core.Single
import piuk.blockchain.android.R
import piuk.blockchain.android.ui.dashboard.announcements.AnnouncementHost
import piuk.blockchain.android.ui.dashboard.announcements.AnnouncementQueries
import piuk.blockchain.android.ui.dashboard.announcements.AnnouncementRule
import piuk.blockchain.android.ui.dashboard.announcements.DismissRecorder
import piuk.blockchain.android.ui.dashboard.announcements.DismissRule
import piuk.blockchain.android.ui.dashboard.announcements.StandardAnnouncementCard
import piuk.blockchain.android.urllinks.URL_JOIN_BLOCKCHAIN_CARD_WAITLIST

class BlockchainCardWaitlistAnnouncement(
private val announcementQueries: AnnouncementQueries,
dismissRecorder: DismissRecorder
) : AnnouncementRule(dismissRecorder) {

override val dismissKey = DISMISS_KEY

override val name = "card_issuing_waitlist"
override val associatedWalletModes: List<WalletMode>
get() = listOf(WalletMode.CUSTODIAL_ONLY)

override fun shouldShow(): Single<Boolean> =
if (dismissEntry.isDismissed) {
Single.just(false)
} else {
announcementQueries.isBlockchainCardAvailable()
}

companion object {
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
const val DISMISS_KEY = "BlockchainCardWaitlistAnnouncement_DISMISSED"
}

override fun show(host: AnnouncementHost) {
host.showAnnouncementCard(
card = StandardAnnouncementCard(
name = name,
dismissRule = DismissRule.CardOneTime,
dismissEntry = dismissEntry,
titleText = R.string.blockchain_card_waitlist_announcement_title,
bodyText = R.string.blockchain_card_waitlist_announcement_description,
ctaText = R.string.blockchain_card_waitlist_announcement_action,
iconImage = R.drawable.card_filled_with_background,
dismissFunction = {
host.dismissAnnouncementCard()
},
ctaFunction = {
host.dismissAnnouncementCard()
host.openBrowserLink(URL_JOIN_BLOCKCHAIN_CARD_WAITLIST)
}
)
)
}
}
2 changes: 2 additions & 0 deletions app/src/main/java/piuk/blockchain/android/urllinks/Links.kt
Expand Up @@ -81,3 +81,5 @@ const val STAKING_LEARN_MORE = "https://support.blockchain.com/hc/en-us/sections
const val STAKING_WEB_APP = "https://login.blockchain.com/en/#/open/earn"

const val MULTICHAIN_LEARN_MORE = "https://support.blockchain.com/hc/en-us/articles/6416326056092"

const val URL_JOIN_BLOCKCHAIN_CARD_WAITLIST = "https://www.blockchain.com/card"
10 changes: 10 additions & 0 deletions componentlib/src/main/res/drawable/card.xml
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M5,4C3.343,4 2,5.343 2,7V17C2,18.657 3.343,20 5,20H19C20.657,20 22,18.657 22,17V7C22,5.343 20.657,4 19,4H5ZM4,7C4,6.448 4.448,6 5,6H19C19.552,6 20,6.448 20,7V8H4V7ZM4,10H20V17C20,17.552 19.552,18 19,18H5C4.448,18 4,17.552 4,17V10ZM7,13C6.448,13 6,13.448 6,14V15C6,15.552 6.448,16 7,16H9C9.552,16 10,15.552 10,15V14C10,13.448 9.552,13 9,13H7Z"
android:fillColor="#121D33"
android:fillType="evenOdd"/>
</vector>
10 changes: 10 additions & 0 deletions componentlib/src/main/res/drawable/card_filled.xml
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M5,4C3.343,4 2,5.343 2,7V8H22V7C22,5.343 20.657,4 19,4H5ZM22,10H2V17C2,18.657 3.343,20 5,20H19C20.657,20 22,18.657 22,17V10ZM6,14C6,13.448 6.448,13 7,13H9C9.552,13 10,13.448 10,14V15C10,15.552 9.552,16 9,16H7C6.448,16 6,15.552 6,15V14Z"
android:fillColor="#121D33"
android:fillType="evenOdd"/>
</vector>
13 changes: 13 additions & 0 deletions componentlib/src/main/res/drawable/card_filled_with_background.xml
@@ -0,0 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="32"
android:viewportHeight="32">
<path
android:pathData="M16,16m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0"
android:fillColor="#F0F2F7"/>
<path
android:pathData="M7.668,11.834C7.668,10.453 8.787,9.334 10.168,9.334H21.835C23.215,9.334 24.335,10.453 24.335,11.834V12.667H7.668V11.834ZM7.668,14.334V20.167C7.668,21.548 8.787,22.667 10.168,22.667H21.835C23.215,22.667 24.335,21.548 24.335,20.167V14.334H7.668ZM11.001,17.834C11.001,17.282 11.449,16.834 12.001,16.834H13.335C13.887,16.834 14.335,17.282 14.335,17.834V18.334C14.335,18.886 13.887,19.334 13.335,19.334H12.001C11.449,19.334 11.001,18.886 11.001,18.334V17.834Z"
android:fillColor="#000000"
android:fillType="evenOdd"/>
</vector>
7 changes: 5 additions & 2 deletions string-resources/src/main/res/values/strings.xml
Expand Up @@ -3068,7 +3068,7 @@ If you want to know more about our verification process visit our <annotation li
<string name="defi_onboarding_complete_description">Your DeFi Wallet was successfully created. You DeFi wallet supports Bitcoin, Bitcoin Cash, Ethereum, |etc| and 1500 tokens.</string>
<!-- Blockchain Card -->
<string name="order_my_card">Order My Card</string>
<string name="order_card_intro">Spend your crypto or cash without fees.¹ Earn 0.5\u0025 back in crypto.²</string>
<string name="order_card_intro">Spend your crypto or cash without fees.¹ Earn 1\u0025 back in crypto.²</string>
<string name="link_card_here">Already Have A Card? Link It Here"</string>
<string name="virtual">Virtual</string>
<string name="physical">Physical</string>
Expand Down Expand Up @@ -3116,7 +3116,7 @@ If you want to know more about our verification process visit our <annotation li
<string name="feature_not_available">Feature is not available.</string>
<string name="terms_and_conditions_label">I agree to Blockchain.com’s Terms of Service</string>
<string name="crypto_back_title">Crypto Back</string>
<string name="crypto_back_description">Earn 0.5\u0025 back in crypto rewards on all your purchases.²</string>
<string name="crypto_back_description">Earn 1\u0025 back in crypto rewards on all your purchases.²</string>
<string name="legal_info_title">The Legal Stuff</string>
<string name="continue_to_card_dashboard">Continue to view your card dashboard.</string>
<string name="go_to_dashboard">Go To Dashboard</string>
Expand Down Expand Up @@ -3384,6 +3384,9 @@ If you want to know more about our verification process visit our <annotation li
<string name="bc_card_kyc_failed_description">We are processing the provided information and there seems to be an issue with the following below.</string>
<string name="bc_card_kyc_failed_ssn">SSN Does Not Match Our Records</string>
<string name="bc_card_kyc_failed_address">Residential Address Invalid</string>
<string name="blockchain_card_waitlist_announcement_title">Introducing the Blockchain.com Visa® Card</string>
<string name="blockchain_card_waitlist_announcement_description">Spend your crypto or cash without fees. Earn 1%% back in crypto.</string>
<string name="blockchain_card_waitlist_announcement_action">Join The Waitlist</string>

<string name="show_trading_accounts">Show trading accounts</string>
<string name="secured_by_bchain">Secured by Blockchain.com</string>
Expand Down

0 comments on commit 7d8023e

Please sign in to comment.