Skip to content

Commit 5af52ac

Browse files
authored
Merge pull request #510 from code-payments/feat/add-tipcard-to-homescreen
2 parents e527536 + 3c06420 commit 5af52ac

12 files changed

Lines changed: 112 additions & 18 deletions

File tree

api/src/main/java/com/getcode/model/Feature.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ data class TipCardFeature(
1717
override val available: Boolean = true, // always available
1818
): Feature
1919

20+
data class TipCardOnHomeScreenFeature(
21+
override val enabled: Boolean = BetaOptions.Defaults.tipCardOnHomeScreen,
22+
override val available: Boolean = true, // always available
23+
): Feature
24+
2025
data class TipChatFeature(
2126
override val enabled: Boolean = BetaOptions.Defaults.tipsChatEnabled,
2227
override val available: Boolean = true, // always available

api/src/main/java/com/getcode/model/PrefBool.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ sealed class PrefsBool(val value: String) {
5050
data object BALANCE_CURRENCY_SELECTION_ENABLED: PrefsBool("balance_currency_enabled"), BetaFlag
5151
data object KADO_WEBVIEW_ENABLED : PrefsBool("kado_inapp_enabled"), BetaFlag
5252
data object SHARE_TWEET_TO_TIP : PrefsBool("share_tweet_to_tip"), BetaFlag
53+
data object TIP_CARD_ON_HOMESCREEN: PrefsBool("tip_card_on_home_screen"), BetaFlag
5354
}
5455

5556
val APP_SETTINGS: List<AppSetting> = listOf(PrefsBool.CAMERA_START_BY_DEFAULT, PrefsBool.REQUIRE_BIOMETRICS)

api/src/main/java/com/getcode/network/repository/BetaFlagsRepository.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ data class BetaOptions(
2020
val balanceCurrencySelectionEnabled: Boolean,
2121
val kadoWebViewEnabled: Boolean,
2222
val shareTweetToTip: Boolean,
23+
val tipCardOnHomeScreen: Boolean,
2324
) {
2425
companion object {
2526
// Default states for various beta flags in app.
@@ -37,7 +38,8 @@ data class BetaOptions(
3738
tipsChatCashEnabled = false,
3839
balanceCurrencySelectionEnabled = true,
3940
kadoWebViewEnabled = false,
40-
shareTweetToTip = false
41+
shareTweetToTip = false,
42+
tipCardOnHomeScreen = true,
4143
)
4244
}
4345
}
@@ -73,7 +75,8 @@ class BetaFlagsRepository @Inject constructor(
7375
observeBetaFlag(PrefsBool.BALANCE_CURRENCY_SELECTION_ENABLED, defaults.balanceCurrencySelectionEnabled),
7476
observeBetaFlag(PrefsBool.DISPLAY_ERRORS, default = defaults.displayErrors),
7577
observeBetaFlag(PrefsBool.KADO_WEBVIEW_ENABLED, default = defaults.kadoWebViewEnabled),
76-
observeBetaFlag(PrefsBool.SHARE_TWEET_TO_TIP, default = defaults.shareTweetToTip)
78+
observeBetaFlag(PrefsBool.SHARE_TWEET_TO_TIP, default = defaults.shareTweetToTip),
79+
observeBetaFlag(PrefsBool.TIP_CARD_ON_HOMESCREEN, defaults.tipCardOnHomeScreen)
7780
) {
7881
BetaOptions(
7982
showNetworkDropOff = it[0],
@@ -89,7 +92,8 @@ class BetaFlagsRepository @Inject constructor(
8992
balanceCurrencySelectionEnabled = it[10],
9093
displayErrors = it[11],
9194
kadoWebViewEnabled = it[12],
92-
shareTweetToTip = it[13]
95+
shareTweetToTip = it[13],
96+
tipCardOnHomeScreen = it[14]
9397
)
9498
}
9599
}

api/src/main/java/com/getcode/network/repository/FeatureRepository.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.getcode.model.Feature
77
import com.getcode.model.PrefsBool
88
import com.getcode.model.RequestKinFeature
99
import com.getcode.model.TipCardFeature
10+
import com.getcode.model.TipCardOnHomeScreenFeature
1011
import com.getcode.model.TipChatCashFeature
1112
import com.getcode.model.TipChatFeature
1213
import kotlinx.coroutines.flow.combine
@@ -26,7 +27,7 @@ class FeatureRepository @Inject constructor(
2627
) { enabled, available -> BuyModuleFeature(enabled, available) }
2728

2829
val tipCards = betaFlags.observe().map { TipCardFeature(it.tipsEnabled) }
29-
30+
val tipCardOnHomeScreen = betaFlags.observe().map { TipCardOnHomeScreenFeature(it.tipCardOnHomeScreen) }
3031
val tipChat = betaFlags.observe().map { TipChatFeature(it.tipsChatEnabled) }
3132
val tipChatCash = betaFlags.observe().map { TipChatCashFeature(it.tipsChatCashEnabled) }
3233

app/src/main/java/com/getcode/navigation/screens/ModalScreens.kt

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -466,19 +466,35 @@ data class ConnectAccount(
466466
override fun Content() {
467467
val navigator = LocalCodeNavigator.current
468468
val viewModel = getViewModel<TipConnectViewModel>()
469-
ModalContainer(
470-
backButtonEnabled = {
471-
if (navigator.isVisible) {
472-
it is ConnectAccount
473-
} else {
474-
navigator.progress > 0f
469+
when (reason) {
470+
IdentityConnectionReason.TipCard -> {
471+
ModalContainer(
472+
closeButtonEnabled = {
473+
if (navigator.isVisible) {
474+
it is ConnectAccount
475+
} else {
476+
navigator.progress > 0f
477+
}
478+
}
479+
) {
480+
ConnectAccountScreen(viewModel)
481+
}
482+
}
483+
IdentityConnectionReason.IdentityReveal -> {
484+
ModalContainer(
485+
backButtonEnabled = {
486+
if (navigator.isVisible) {
487+
it is ConnectAccount
488+
} else {
489+
navigator.progress > 0f
490+
}
491+
}
492+
) {
493+
ConnectAccountScreen(viewModel)
475494
}
476495
}
477-
) {
478-
ConnectAccountScreen(viewModel)
479496
}
480497

481-
482498
LaunchedEffect(viewModel, reason) {
483499
viewModel.dispatchEvent(TipConnectViewModel.Event.OnReasonChanged(reason))
484500
}

app/src/main/java/com/getcode/view/main/account/BetaFlagsScreen.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@ fun BetaFlagsScreen(
8989
stringResource(id = R.string.beta_tipcard_description),
9090
state.tipsEnabled,
9191
),
92+
BetaFeature(
93+
PrefsBool.TIP_CARD_ON_HOMESCREEN,
94+
R.string.beta_tipcard_on_homescreen,
95+
stringResource(id = R.string.beta_tipcard_on_homescreen_description),
96+
state.tipCardOnHomeScreen,
97+
),
9298
BetaFeature(
9399
PrefsBool.TIPS_CHAT_ENABLED,
94100
R.string.beta_tipchats,

app/src/main/java/com/getcode/view/main/home/HomeScan.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,11 @@ import com.getcode.navigation.screens.AccountModal
4848
import com.getcode.navigation.screens.BalanceModal
4949
import com.getcode.navigation.screens.BuyMoreKinModal
5050
import com.getcode.navigation.screens.BuySellScreen
51+
import com.getcode.navigation.screens.ConnectAccount
5152
import com.getcode.navigation.screens.EnterTipModal
5253
import com.getcode.navigation.screens.GetKinModal
5354
import com.getcode.navigation.screens.GiveKinModal
55+
import com.getcode.navigation.screens.HomeResult
5456
import com.getcode.navigation.screens.ShareDownloadLinkModal
5557
import com.getcode.ui.components.OnLifecycleEvent
5658
import com.getcode.ui.components.PermissionCheck
@@ -81,7 +83,8 @@ enum class HomeBottomSheet {
8183
GIVE_KIN,
8284
GET_KIN,
8385
BALANCE,
84-
SHARE_DOWNLOAD
86+
SHARE_DOWNLOAD,
87+
TIP_CARD
8588
}
8689

8790
@Composable
@@ -191,6 +194,13 @@ private fun HomeScan(
191194
HomeBottomSheet.GET_KIN -> navigator.show(GetKinModal)
192195
HomeBottomSheet.BALANCE -> navigator.show(BalanceModal)
193196
HomeBottomSheet.SHARE_DOWNLOAD -> navigator.show(ShareDownloadLinkModal)
197+
HomeBottomSheet.TIP_CARD -> {
198+
if (dataState.tipCardConnected) {
199+
homeViewModel.presentShareableTipCard()
200+
} else {
201+
navigator.push(ConnectAccount())
202+
}
203+
}
194204
HomeBottomSheet.NONE -> Unit
195205
}
196206
}

app/src/main/java/com/getcode/view/main/home/HomeViewModel.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.getcode.model.PrefsBool
3232
import com.getcode.model.Rate
3333
import com.getcode.model.RequestKinFeature
3434
import com.getcode.model.TipCardFeature
35+
import com.getcode.model.TipCardOnHomeScreenFeature
3536
import com.getcode.model.TwitterUser
3637
import com.getcode.model.Username
3738
import com.getcode.models.Bill
@@ -147,6 +148,7 @@ data class HomeUiModel(
147148
val buyModule: Feature = BuyModuleFeature(),
148149
val requestKin: Feature = RequestKinFeature(),
149150
val tips: Feature = TipCardFeature(),
151+
val tipCardOnHomeScreen: Feature = TipCardOnHomeScreenFeature(),
150152
val tipCardConnected: Boolean = false,
151153
)
152154

@@ -225,6 +227,13 @@ class HomeViewModel @Inject constructor(
225227
}
226228
}.launchIn(viewModelScope)
227229

230+
features.tipCardOnHomeScreen
231+
.onEach { module ->
232+
uiFlow.update {
233+
it.copy(tipCardOnHomeScreen = module)
234+
}
235+
}.launchIn(viewModelScope)
236+
228237
features.requestKin
229238
.onEach { module ->
230239
uiFlow.update {

app/src/main/java/com/getcode/view/main/home/components/HomeBottom.kt

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,30 @@ internal fun HomeBottom(
5050
contentPadding = PaddingValues(horizontal = CodeTheme.dimens.grid.x3),
5151
) {
5252
BottomBarAction(
53-
label = stringResource(R.string.title_getKin),
53+
label = if (state.tipCardOnHomeScreen.enabled) {
54+
stringResource(R.string.title_tipCard)
55+
} else {
56+
stringResource(R.string.title_getKin)
57+
},
5458
contentPadding = PaddingValues(
5559
start = CodeTheme.dimens.grid.x3,
5660
end = CodeTheme.dimens.grid.x3,
5761
top = CodeTheme.dimens.grid.x1,
5862
bottom = CodeTheme.dimens.grid.x2,
5963
),
6064
imageSize = CodeTheme.dimens.grid.x7,
61-
painter = painterResource(R.drawable.ic_wallet),
62-
onClick = { onPress(HomeBottomSheet.GET_KIN) },
65+
painter = if (state.tipCardOnHomeScreen.enabled) {
66+
painterResource(R.drawable.ic_tip_card)
67+
} else {
68+
painterResource(R.drawable.ic_wallet)
69+
},
70+
onClick = {
71+
if (state.tipCardOnHomeScreen.enabled) {
72+
onPress(HomeBottomSheet.TIP_CARD)
73+
} else {
74+
onPress(HomeBottomSheet.GET_KIN)
75+
}
76+
},
6377
)
6478
Spacer(modifier = Modifier.weight(1f))
6579
BottomBarAction(
@@ -86,7 +100,12 @@ internal fun HomeBottom(
86100
modifier = Modifier.padding(top = 2.dp, end = 2.dp),
87101
count = state.chatUnreadCount,
88102
color = ChatNodeDefaults.UnreadIndicator,
89-
enterTransition = scaleIn(animationSpec = tween(durationMillis = 300, delayMillis = 1000)) + fadeIn()
103+
enterTransition = scaleIn(
104+
animationSpec = tween(
105+
durationMillis = 300,
106+
delayMillis = 1000
107+
)
108+
) + fadeIn()
90109
)
91110
}
92111
)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="22dp"
3+
android:height="32dp"
4+
android:viewportWidth="22"
5+
android:viewportHeight="32">
6+
<group>
7+
<clip-path
8+
android:pathData="M1,0L21,0A1,1 0,0 1,22 1L22,31A1,1 0,0 1,21 32L1,32A1,1 0,0 1,0 31L0,1A1,1 0,0 1,1 0z"/>
9+
<path
10+
android:pathData="M1,0L21,0A1,1 0,0 1,22 1L22,31A1,1 0,0 1,21 32L1,32A1,1 0,0 1,0 31L0,1A1,1 0,0 1,1 0z"
11+
android:strokeWidth="6"
12+
android:fillColor="#00000000"
13+
android:strokeColor="#ffffff"/>
14+
</group>
15+
<path
16+
android:pathData="M11,13m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0"
17+
android:strokeWidth="3"
18+
android:fillColor="#00000000"
19+
android:strokeColor="#ffffff"/>
20+
</vector>

0 commit comments

Comments
 (0)