Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions apps/flipcash/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ dependencies {
implementation(project(":apps:flipcash:features:discovery"))
implementation(project(":apps:flipcash:features:user-profile"))
implementation(project(":apps:flipcash:features:userflags"))
implementation(project(":apps:flipcash:features:tipping"))

implementation(project(":libs:crypto:solana"))
implementation(project(":libs:datetime"))
Expand Down Expand Up @@ -259,7 +260,7 @@ dependencies {
implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.navigation.ui)
implementation(libs.androidx.work)
implementation("androidx.webkit:webkit:1.16.0")
implementation(libs.androidx.webkit)

//hilt dependency injection
implementation(libs.hilt.android)
Expand All @@ -273,7 +274,7 @@ dependencies {
testImplementation(libs.hilt.android.test)
kspTest(libs.hilt.android.compiler)

androidTestImplementation("io.mockk:mockk:1.14.11")
androidTestImplementation(libs.mockk)

//Jetpack compose
implementation(platform(libs.compose.bom))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import com.flipcash.app.balance.BalanceScreen
import com.flipcash.app.cash.CashScreen
import com.flipcash.app.contact.verification.VerificationFlowScreen
import com.flipcash.app.currencycreator.CurrencyCreatorFlowScreen
import com.flipcash.app.tipping.TippingFlowScreen
import com.flipcash.app.core.AppRoute
import com.flipcash.app.core.navigation.DeeplinkAction
import com.flipcash.app.currency.RegionSelectionScreen
Expand Down Expand Up @@ -92,6 +93,9 @@ fun appEntryProvider(
// Sheets (inner content — wrapped in Main.Sheet by navigateTo())
annotatedEntry<AppRoute.Sheets.Give> { key -> CashScreen(key.mint, key.fromTokenInfo) }
annotatedEntry<AppRoute.Sheets.Send> { SendFlowScreen(resultStateRegistry = resultStateRegistry) }
annotatedEntry<AppRoute.Sheets.Tips> { key ->
TippingFlowScreen(route = key, resultStateRegistry = resultStateRegistry)
}
annotatedEntry<AppRoute.Sheets.TokenSelection> { key -> TokenSelectScreen(key.purpose) }
annotatedEntry<AppRoute.Sheets.Wallet> { BalanceScreen() }
annotatedEntry<AppRoute.Sheets.ShareApp> { ShareAppScreen() }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,10 @@ sealed interface AppRoute : NavKey, Parcelable {
@Serializable
data class Send(val resumed: Boolean = false): Sheets

@Serializable
data class Tips(val resumed: Boolean = false): Sheets {
}

@Serializable
data object Wallet : Sheets
@Serializable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,23 @@ import com.getcode.opencode.model.financial.Token
import kotlin.time.Duration

data class BillState(
val bill: Scannable.Payable?,
val bill: Scannable?,
val showToast: Boolean,
val toast: BillToast?,
val valuation: Valuation?,
val primaryAction: Action?,
val secondaryAction: Action?,
) {
val canSwipeToDismiss: Boolean
get() = bill?.canSwipeToDismiss == true
get() = when (val b = bill) {
null -> false
is Scannable.Payable -> b.canSwipeToDismiss
else -> true // non-payment scannables (e.g. TipCard) are dismissable
}

val confirmationDelayMillis: Int
get() = (bill?.confirmationDelay ?: Duration.ZERO).inWholeMilliseconds.toInt()
get() = ((bill as? Scannable.Payable)?.confirmationDelay ?: Duration.ZERO)
.inWholeMilliseconds.toInt()

companion object {
val Default = BillState(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ enum class NavBarButton {
Wallet,
Discover,
Send,
Tips,
;

companion object {
val defaultOrder = listOf(Discover, Give, Send, Wallet,)
val defaultOrder = listOf(Discover, Give, Send, Tips, Wallet,)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.flipcash.app.core.tipping

import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable

@Serializable
sealed interface TipResult : Parcelable {
@Parcelize
@Serializable
data object Success : TipResult

@Parcelize
@Serializable
data object Canceled : TipResult
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.flipcash.app.core.tipping

import android.os.Parcelable
import com.getcode.navigation.NonDismissableRoute
import com.getcode.navigation.NonDraggableRoute
import com.getcode.navigation.flow.FlowStep
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable

@Serializable
sealed interface TipStep : FlowStep, Parcelable, NonDismissableRoute, NonDraggableRoute {

@Parcelize
@Serializable
data object Intro : TipStep

@Parcelize
@Serializable
data object TipCard: TipStep

@Parcelize
@Serializable
data object Tips : TipStep
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.flipcash.app.core.ui

import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
Expand Down Expand Up @@ -60,6 +61,7 @@ import com.getcode.ui.utils.widthOrZero

data class NavigationBarState(
val contactDmUnreadCount: Int = 0,
val tipUnreadCount: Int = 0,
val showToast: Boolean = false,
val toastText: String? = null,
val isPaused: Boolean = false,
Expand Down Expand Up @@ -93,6 +95,7 @@ fun NavigationBar(
verticalAlignment = Alignment.Bottom,
horizontalArrangement = Arrangement.SpaceAround,
) {
val imageSize by animateDpAsState(if (config.order.size < 5) CodeTheme.dimens.staticGrid.x10 else CodeTheme.dimens.staticGrid.x7)
config.order.forEachIndexed { index, button ->
val buttonModifier = if (reorderState != null) {
Modifier.weight(1f).longPressDraggable(reorderState, index)
Expand All @@ -106,13 +109,15 @@ fun NavigationBar(
label = stringResource(config.giveButtonLabel.labelRes),
painter = painterResource(R.drawable.ic_cash_bill),
badgeCount = 0,
imageSize = imageSize,
onClick = { onButtonClick(NavBarButton.Give) }
)
NavBarButton.Wallet -> BottomBarAction(
modifier = buttonModifier,
label = stringResource(R.string.action_wallet),
painter = painterResource(R.drawable.ic_flipcash_balance),
onClick = { onButtonClick(NavBarButton.Wallet) },
imageSize = imageSize,
toast = {
AnimatedVisibility(
visible = state.showToast && state.toastText != null,
Expand All @@ -138,6 +143,7 @@ fun NavigationBar(
label = stringResource(R.string.action_discover),
painter = painterResource(R.drawable.ic_coins),
badgeCount = 0,
imageSize = imageSize,
onClick = { onButtonClick(NavBarButton.Discover) }
)

Expand All @@ -146,8 +152,18 @@ fun NavigationBar(
label = stringResource(R.string.action_send),
badgeCount = state.contactDmUnreadCount,
painter = painterResource(R.drawable.ic_send_outlined),
imageSize = imageSize,
onClick = { onButtonClick(NavBarButton.Send) }
)

NavBarButton.Tips -> BottomBarAction(
modifier = buttonModifier,
label = stringResource(R.string.action_tips),
badgeCount = state.tipUnreadCount,
painter = painterResource(R.drawable.ic_tipping_hand),
imageSize = imageSize,
onClick = { onButtonClick(NavBarButton.Tips) }
)
}
}
}
Expand Down
28 changes: 28 additions & 0 deletions apps/flipcash/core/src/main/res/drawable/ic_tipping_hand.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="M21,15C23.485,15 25.5,12.985 25.5,10.5C25.5,8.015 23.485,6 21,6C18.515,6 16.5,8.015 16.5,10.5C16.5,12.985 18.515,15 21,15Z"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#ffffff"/>
<path
android:pathData="M19.244,6C18.626,4.252 16.959,3 15,3C12.515,3 10.5,5.015 10.5,7.5C10.5,9.985 12.515,12 15,12C15.618,12 16.208,11.875 16.744,11.65"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#ffffff"/>
<path
android:pathData="M6,30H7.5C7.5,30 12.895,31.86 16.5,31.5C20.35,31.115 26.592,27.562 29.004,26.112C29.631,25.735 30,25.057 30,24.326C30,22.893 28.618,21.864 27.245,22.276L16.5,25.5"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#ffffff"
android:strokeLineCap="square"/>
<path
android:pathData="M6,21.75L11.874,19.792C12.452,19.6 13.063,19.527 13.67,19.577L21.011,20.189C21.406,20.222 21.685,20.59 21.61,20.979C21.235,22.928 19.808,24.508 17.906,25.078L16.5,25.5"
android:strokeWidth="3"
android:fillColor="#00000000"
android:strokeColor="#ffffff"
android:strokeLineCap="square"/>
</vector>
28 changes: 28 additions & 0 deletions apps/flipcash/core/src/main/res/drawable/ic_tipping_hand_large.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="128dp"
android:height="128dp"
android:viewportWidth="128"
android:viewportHeight="128">
<path
android:pathData="M74.67,53.33C83.5,53.33 90.67,46.17 90.67,37.33C90.67,28.5 83.5,21.33 74.67,21.33C65.83,21.33 58.67,28.5 58.67,37.33C58.67,46.17 65.83,53.33 74.67,53.33Z"
android:strokeWidth="6"
android:fillColor="#00000000"
android:strokeColor="#ffffff" />
<path
android:pathData="M68.42,21.33C66.23,15.12 60.3,10.67 53.33,10.67C44.5,10.67 37.33,17.83 37.33,26.67C37.33,35.5 44.5,42.67 53.33,42.67C55.53,42.67 57.63,42.22 59.53,41.42"
android:strokeWidth="6"
android:fillColor="#00000000"
android:strokeColor="#ffffff" />
<path
android:pathData="M21.33,106.67H26.67C26.67,106.67 45.85,113.28 58.67,112C72.35,110.63 94.55,98 103.13,92.84C105.36,91.5 106.67,89.09 106.67,86.49C106.67,81.4 101.75,77.74 96.87,79.21L58.67,90.67"
android:strokeWidth="6"
android:fillColor="#00000000"
android:strokeColor="#ffffff"
android:strokeLineCap="square"/>
<path
android:pathData="M21.33,77.33L42.22,70.37C44.27,69.69 46.45,69.43 48.61,69.61L74.71,71.78C76.11,71.9 77.1,73.21 76.84,74.59C75.5,81.52 70.43,87.14 63.67,89.17L58.67,90.67"
android:strokeWidth="6"
android:fillColor="#00000000"
android:strokeColor="#ffffff"
android:strokeLineCap="square"/>
</vector>
8 changes: 8 additions & 0 deletions apps/flipcash/core/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -855,6 +855,12 @@
<string name="label_amountToBuy">Amount to buy</string>
<string name="label_exchangeFee">Exchange fee</string>

<string name="action_tips">Tips</string>
<string name="title_tips">Tips</string>
<string name="title_tipIntro">Receive Tips From Everyone</string>
<string name="subtitle_tipIntro">Add your name and a picture to receive tips</string>
<string name="action_startReceivingTips">Start Receiving Tips</string>

<string name="title_profileNameSelection">What is your name?</string>
<string name="hint_profileName">Your Name</string>
<string name="error_title_profileNameNotAllowed">This Name is Not Allowed</string>
Expand All @@ -863,4 +869,6 @@
<string name="subtitle_profileImageSelection">CThis photo will be shown when receiving tips</string>
<string name="placeholder_profileDisplayName">Your Name</string>
<string name="subtitle_profileImageRecommended">500x500 Recommended</string>
<string name="title_myTipCard">My Tip Card</string>

</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,9 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.flipcash.app.bill.customization.components.BillPlayground
import com.flipcash.app.bills.AnimatedBill
import com.flipcash.app.core.bill.Scannable
import com.flipcash.app.bills.AnimatedScannable
import com.flipcash.features.bill.playground.R
import com.getcode.theme.CodeTheme
import com.getcode.ui.components.AppBarDefaults
import com.getcode.ui.core.measured
import androidx.compose.foundation.clickable
import com.getcode.ui.utils.AnimationUtils
Expand Down Expand Up @@ -104,7 +102,7 @@ fun BillPlaygroundScaffold(content: @Composable () -> Unit) {

Box(modifier = Modifier.fillMaxSize()) {
content()
AnimatedBill(
AnimatedScannable(
modifier = Modifier.fillMaxSize(),
dismissState = billDismissState,
dismissed = !isUsingPlayground,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ import com.flipcash.app.bill.customization.Event
import com.flipcash.app.bill.customization.LocalBillPlaygroundController
import com.flipcash.app.bill.customization.PlaygroundContext
import com.flipcash.app.bill.customization.components.BillPlayground
import com.flipcash.app.bills.RenderedBill
import com.flipcash.app.core.bill.Scannable
import com.flipcash.app.bills.ScannableRenderer
import com.flipcash.app.core.ui.transitions.SharedTransition
import com.flipcash.app.core.ui.transitions.sharedBoundsTransition
import com.flipcash.app.currencycreator.internal.CurrencyCreatorViewModel
Expand Down Expand Up @@ -88,15 +87,15 @@ internal fun BillCustomizationContent(
horizontalAlignment = Alignment.CenterHorizontally
) {
augmentedBill?.let { bill ->
RenderedBill(
ScannableRenderer(
modifier = Modifier
.padding(top = CodeTheme.dimens.grid.x3)
.fillMaxWidth()
.weight(1f)
.sharedBoundsTransition(
transition = SharedTransition.CurrencyBill
),
bill = bill,
scannable = bill,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.flipcash.app.bills.RenderedBill
import com.flipcash.app.bills.ScannableRenderer
import com.flipcash.app.core.tokens.CurrencyCreatorResult
import com.flipcash.app.core.tokens.CurrencyCreatorStep
import com.flipcash.app.core.ui.TokenIconWithName
Expand All @@ -32,7 +32,6 @@ import com.getcode.ui.theme.CodeButton
import com.getcode.ui.theme.CodeScaffold
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach

@Composable
Expand Down Expand Up @@ -120,14 +119,14 @@ internal fun ReviewContent(
}

state.bill?.let { bill ->
RenderedBill(
ScannableRenderer(
modifier = Modifier
.weight(1f)
.fillMaxWidth()
.sharedBoundsTransition(
transition = SharedTransition.CurrencyBill
),
bill = bill,
scannable = bill,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import com.flipcash.app.core.extensions.navigateAll
import com.flipcash.app.core.extensions.openAsSheet
import com.flipcash.app.core.navigation.DeeplinkType
import com.flipcash.app.router.LocalRouter
import com.flipcash.app.scanner.internal.bills.BillContainer
import com.flipcash.app.scanner.internal.bills.ScannableContainer
import com.flipcash.app.session.LocalSessionController
import com.getcode.libs.code.detection.CodeScanResult
import com.getcode.navigation.core.LocalCodeNavigator
Expand Down Expand Up @@ -74,7 +74,7 @@ internal fun Scanner() {
}

@SuppressLint("LocalContextGetResourceValueCall")
BillContainer(
ScannableContainer(
isPaused = isPaused,
isPinching = isPinching,
zoomRatio = zoomRatio,
Expand All @@ -90,7 +90,7 @@ internal fun Scanner() {
navigator.openAsSheet(route)
}

return@BillContainer
return@ScannableContainer
}
}
else -> Unit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ sealed class ScannerDecorItem(val screen: AppRoute) {
data object Logo: ScannerDecorItem(AppRoute.Sheets.ShareApp)
data object Discover: ScannerDecorItem(AppRoute.Token.Discovery)
data object Send: ScannerDecorItem(AppRoute.Sheets.Send())
data object Tips: ScannerDecorItem(AppRoute.Sheets.Tips())
}
Loading
Loading