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
8 changes: 4 additions & 4 deletions app/src/main/java/com/getcode/view/main/home/DecorView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ internal fun DecorView(
isCameraReady: Boolean,
isPaused: Boolean,
modifier: Modifier = Modifier,
showBottomSheet: (HomeBottomSheet) -> Unit,
onAction: (HomeAction) -> Unit,
) {
val tips = LocalTipsEngine.current!!.tips as DefinedTips
val tipProvider = LocalTipProvider.current
Expand All @@ -74,7 +74,7 @@ internal fun DecorView(

val scope = rememberCoroutineScope()
val openDownloadModal = {
showBottomSheet(HomeBottomSheet.SHARE_DOWNLOAD)
onAction(HomeAction.SHARE_DOWNLOAD)
scope.launch {
delay(300)
tipProvider.dismiss()
Expand Down Expand Up @@ -113,7 +113,7 @@ internal fun DecorView(
.align(Alignment.TopEnd)
.clip(CircleShape)
.rememberedClickable {
showBottomSheet(HomeBottomSheet.ACCOUNT)
onAction(HomeAction.ACCOUNT)
},
painter = painterResource(
R.drawable.ic_home_options
Expand Down Expand Up @@ -186,7 +186,7 @@ internal fun DecorView(
.padding(bottom = CodeTheme.dimens.grid.x3),
state = dataState,
onPress = {
showBottomSheet(it)
onAction(it)
},
)
}
Expand Down
27 changes: 13 additions & 14 deletions app/src/main/java/com/getcode/view/main/home/HomeScan.kt
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ import com.getcode.navigation.screens.ConnectAccount
import com.getcode.navigation.screens.EnterTipModal
import com.getcode.navigation.screens.GetKinModal
import com.getcode.navigation.screens.GiveKinModal
import com.getcode.navigation.screens.HomeResult
import com.getcode.navigation.screens.ShareDownloadLinkModal
import com.getcode.ui.components.OnLifecycleEvent
import com.getcode.ui.components.PermissionCheck
Expand All @@ -77,7 +76,7 @@ import timber.log.Timber
import kotlin.time.Duration.Companion.milliseconds


enum class HomeBottomSheet {
enum class HomeAction {
NONE,
ACCOUNT,
GIVE_KIN,
Expand Down Expand Up @@ -186,22 +185,22 @@ private fun HomeScan(
}
}

fun showBottomSheet(bottomSheet: HomeBottomSheet) {
fun handleAction(action: HomeAction) {
scope.launch {
when (bottomSheet) {
HomeBottomSheet.GIVE_KIN -> navigator.show(GiveKinModal)
HomeBottomSheet.ACCOUNT -> navigator.show(AccountModal)
HomeBottomSheet.GET_KIN -> navigator.show(GetKinModal)
HomeBottomSheet.BALANCE -> navigator.show(BalanceModal)
HomeBottomSheet.SHARE_DOWNLOAD -> navigator.show(ShareDownloadLinkModal)
HomeBottomSheet.TIP_CARD -> {
when (action) {
HomeAction.GIVE_KIN -> navigator.show(GiveKinModal)
HomeAction.ACCOUNT -> navigator.show(AccountModal)
HomeAction.GET_KIN -> navigator.show(GetKinModal)
HomeAction.BALANCE -> navigator.show(BalanceModal)
HomeAction.SHARE_DOWNLOAD -> navigator.show(ShareDownloadLinkModal)
HomeAction.TIP_CARD -> {
if (dataState.tipCardConnected) {
homeViewModel.presentShareableTipCard()
} else {
navigator.show(ConnectAccount())
}
}
HomeBottomSheet.NONE -> Unit
HomeAction.NONE -> Unit
}
}
}
Expand All @@ -225,7 +224,7 @@ private fun HomeScan(
}
)
},
showBottomSheet = { showBottomSheet(it) },
onAction = { handleAction(it) },
)

OnLifecycleEvent { _, event ->
Expand Down Expand Up @@ -291,7 +290,7 @@ private fun BillContainer(
homeViewModel: HomeViewModel,
scannerView: @Composable () -> Unit,
onStartCamera: () -> Unit,
showBottomSheet: (HomeBottomSheet) -> Unit,
onAction: (HomeAction) -> Unit,
) {
val onPermissionResult =
{ isGranted: Boolean ->
Expand Down Expand Up @@ -377,7 +376,7 @@ private fun BillContainer(
exit = fadeOut(),
modifier = Modifier.fillMaxSize()
) {
DecorView(updatedState, isCameraReady, isPaused) { showBottomSheet(it) }
DecorView(updatedState, isCameraReady, isPaused) { onAction(it) }
}

var managementHeight by remember {
Expand Down
33 changes: 16 additions & 17 deletions app/src/main/java/com/getcode/view/main/home/HomeViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ data class HomeUiModel(
val buyModule: Feature = BuyModuleFeature(),
val requestKin: Feature = RequestKinFeature(),
val tips: Feature = TipCardFeature(),
val tipCardOnHomeScreen: Feature = TipCardOnHomeScreenFeature(),
val actions: List<HomeAction> = listOf(HomeAction.GIVE_KIN, HomeAction.TIP_CARD, HomeAction.BALANCE),
val tipCardConnected: Boolean = false,
)

Expand Down Expand Up @@ -186,7 +186,6 @@ class HomeViewModel @Inject constructor(
private val mnemonicManager: MnemonicManager,
private val cashLinkManager: CashLinkManager,
appSettings: AppSettingsRepository,
betaFlags: BetaFlagsRepository,
features: FeatureRepository,
) : BaseViewModel(resources), ScreenModel {
val uiFlow = MutableStateFlow(HomeUiModel())
Expand All @@ -208,20 +207,6 @@ class HomeViewModel @Inject constructor(
}
}.launchIn(viewModelScope)

// betaFlags.observe()
// .distinctUntilChanged()
// .onEach { beta ->
// ErrorUtils.setDisplayErrors(beta.displayErrors)
//
// if (beta.establishCodeRelationship) {
// val organizer = SessionManager.getOrganizer() ?: return@onEach
// val domain = Domain.from("getcode.com") ?: return@onEach
// if (organizer.relationshipFor(domain) == null) {
// client.awaitEstablishRelationship(organizer, domain)
// }
// }
// }.launchIn(viewModelScope)

features.buyModule
.onEach { module ->
uiFlow.update {
Expand All @@ -232,7 +217,7 @@ class HomeViewModel @Inject constructor(
features.tipCardOnHomeScreen
.onEach { module ->
uiFlow.update {
it.copy(tipCardOnHomeScreen = module)
it.copy(actions = buildActions(module.enabled))
}
}.launchIn(viewModelScope)

Expand Down Expand Up @@ -388,6 +373,20 @@ class HomeViewModel @Inject constructor(
}
}

private fun buildActions(
tipCardOnHomeScreen: Boolean,
): List<HomeAction> {
return listOf(
HomeAction.GIVE_KIN,
if (tipCardOnHomeScreen) {
HomeAction.TIP_CARD
} else {
HomeAction.GET_KIN
},
HomeAction.BALANCE
)
}

fun onCameraScanning(scanning: Boolean) {
uiFlow.update { it.copy(isCameraScanEnabled = scanning) }
}
Expand Down
131 changes: 64 additions & 67 deletions app/src/main/java/com/getcode/view/main/home/components/HomeBottom.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.scaleIn
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
Expand All @@ -15,7 +16,6 @@ import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.layoutId
Expand All @@ -24,101 +24,99 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastForEach
import com.getcode.R
import com.getcode.theme.CodeTheme
import com.getcode.ui.components.Badge
import com.getcode.ui.components.Row
import com.getcode.ui.components.chat.ChatNodeDefaults
import com.getcode.ui.utils.heightOrZero
import com.getcode.ui.utils.rememberedClickable
import com.getcode.ui.utils.unboundedClickable
import com.getcode.ui.utils.widthOrZero
import com.getcode.view.main.home.HomeBottomSheet
import com.getcode.view.main.home.HomeAction
import com.getcode.view.main.home.HomeUiModel

@Preview
@Composable
internal fun HomeBottom(
modifier: Modifier = Modifier,
state: HomeUiModel = HomeUiModel(),
onPress: (homeBottomSheet: HomeBottomSheet) -> Unit = {},
onPress: (homeBottomSheet: HomeAction) -> Unit = {},
) {
Row(
modifier = Modifier
.fillMaxWidth()
.then(modifier),
verticalAlignment = Alignment.Bottom,
contentPadding = PaddingValues(horizontal = CodeTheme.dimens.grid.x3),
horizontalArrangement = Arrangement.SpaceAround,
) {
BottomBarAction(
label = if (state.tipCardOnHomeScreen.enabled) {
stringResource(R.string.title_tipCard)
} else {
stringResource(R.string.title_getCash)
},
contentPadding = PaddingValues(
start = CodeTheme.dimens.grid.x3,
end = CodeTheme.dimens.grid.x3,
top = CodeTheme.dimens.grid.x1,
bottom = CodeTheme.dimens.grid.x2,
),
imageSize = CodeTheme.dimens.grid.x7,
painter = if (state.tipCardOnHomeScreen.enabled) {
painterResource(R.drawable.ic_tip_card)
} else {
painterResource(R.drawable.ic_wallet)
},
onClick = {
if (state.tipCardOnHomeScreen.enabled) {
onPress(HomeBottomSheet.TIP_CARD)
} else {
onPress(HomeBottomSheet.GET_KIN)
state.actions.fastForEach { action ->
when (action) {
HomeAction.GIVE_KIN -> {
BottomBarAction(
modifier = Modifier.weight(1f),
label = stringResource(R.string.action_give),
painter = painterResource(R.drawable.ic_kin_white_small),
onClick = { onPress(action) }
)
}
},
)
Spacer(modifier = Modifier.weight(1f))
BottomBarAction(
label = stringResource(R.string.action_giveKin),
contentPadding = PaddingValues(
horizontal = CodeTheme.dimens.grid.x3,
vertical = CodeTheme.dimens.grid.x2
),
imageSize = CodeTheme.dimens.grid.x10,
painter = painterResource(R.drawable.ic_kin_white),
onClick = { onPress(HomeBottomSheet.GIVE_KIN) }
)
Spacer(modifier = Modifier.weight(1f))
BottomBarAction(
label = stringResource(R.string.action_balance),
contentPadding = PaddingValues(
horizontal = CodeTheme.dimens.grid.x2,
),
imageSize = CodeTheme.dimens.grid.x9,
painter = painterResource(R.drawable.ic_history),
onClick = { onPress(HomeBottomSheet.BALANCE) },
badge = {
Badge(
modifier = Modifier.padding(top = 2.dp, end = 2.dp),
count = state.chatUnreadCount,
color = ChatNodeDefaults.UnreadIndicator,
enterTransition = scaleIn(
animationSpec = tween(
durationMillis = 300,
delayMillis = 1000
)
) + fadeIn()
)
HomeAction.GET_KIN -> {
BottomBarAction(
modifier = Modifier.weight(1f),
label = stringResource(R.string.action_receive),
painter = painterResource(R.drawable.ic_wallet),
onClick = { onPress(action) },
)
}
HomeAction.BALANCE -> {
BottomBarAction(
modifier = Modifier.weight(1f),
label = stringResource(R.string.action_balance),
painter = painterResource(R.drawable.ic_balance),
contentPadding = PaddingValues(
top = CodeTheme.dimens.grid.x2,
bottom = CodeTheme.dimens.grid.x3
),
imageSize = CodeTheme.dimens.staticGrid.x6,
onClick = { onPress(HomeAction.BALANCE) },
badge = {
Badge(
modifier = Modifier.padding(top = 2.dp, end = 2.dp),
count = state.chatUnreadCount,
color = ChatNodeDefaults.UnreadIndicator,
enterTransition = scaleIn(
animationSpec = tween(
durationMillis = 300,
delayMillis = 1000
)
) + fadeIn()
)
}
)
}
HomeAction.TIP_CARD -> {
BottomBarAction(
modifier = Modifier.weight(1f),
label = stringResource(R.string.action_receive),
painter = painterResource(R.drawable.ic_tip_card),
onClick = { onPress(action) },
)
}
else -> Unit
}
)
}
}
}

@Composable
private fun BottomBarAction(
modifier: Modifier = Modifier,
label: String,
contentPadding: PaddingValues = PaddingValues(),
contentPadding: PaddingValues = PaddingValues(
vertical = CodeTheme.dimens.grid.x2
),
painter: Painter,
imageSize: Dp,
imageSize: Dp = CodeTheme.dimens.staticGrid.x8,
badge: @Composable () -> Unit = { },
onClick: () -> Unit,
) {
Expand All @@ -127,8 +125,7 @@ private fun BottomBarAction(
content = {
Column(
modifier = Modifier
.clip(CodeTheme.shapes.medium)
.rememberedClickable { onClick() }
.unboundedClickable { onClick() }
.layoutId("action"),
horizontalAlignment = Alignment.CenterHorizontally
) {
Expand Down
21 changes: 21 additions & 0 deletions app/src/main/res/drawable/ic_balance.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="28dp"
android:viewportWidth="32"
android:viewportHeight="28">
<path
android:pathData="M0,2H24"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#ffffff"/>
<path
android:pathData="M0,26H24"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#ffffff"/>
<path
android:pathData="M8,14H32"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#ffffff"/>
</vector>
Loading