Skip to content

Commit eb69ab3

Browse files
committed
chore: sync up airdrop toast and badge animations more
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 36709f1 commit eb69ab3

3 files changed

Lines changed: 46 additions & 32 deletions

File tree

app/src/main/java/com/getcode/ui/components/Badge.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.getcode.ui.components
22

33
import androidx.compose.animation.AnimatedVisibility
4+
import androidx.compose.animation.EnterTransition
5+
import androidx.compose.animation.ExitTransition
6+
import androidx.compose.animation.core.tween
47
import androidx.compose.animation.fadeIn
58
import androidx.compose.animation.fadeOut
69
import androidx.compose.animation.scaleIn
@@ -26,8 +29,10 @@ fun Badge(
2629
count: Int,
2730
color: Color = CodeTheme.colors.brand,
2831
contentColor: Color = Color.White,
32+
enterTransition: EnterTransition = scaleIn(tween(durationMillis = 300)) + fadeIn(),
33+
exitTransition: ExitTransition = fadeOut() + scaleOut(tween(durationMillis = 300))
2934
) {
30-
AnimatedVisibility(visible = count > 0, enter = scaleIn() + fadeIn(), exit = fadeOut() + scaleOut()) {
35+
AnimatedVisibility(visible = count > 0, enter = enterTransition, exit = exitTransition) {
3136
val text = when {
3237
count in 1..99 -> "$count"
3338
else -> "99+"

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

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ import java.util.TimerTask
115115
import java.util.concurrent.TimeUnit
116116
import javax.inject.Inject
117117
import kotlin.concurrent.schedule
118+
import kotlin.time.Duration
118119
import kotlin.time.Duration.Companion.milliseconds
119120
import kotlin.time.Duration.Companion.seconds
120121

@@ -212,7 +213,7 @@ class HomeViewModel @Inject constructor(
212213
} ?: Completable.complete()
213214
receiveWithinLimits.subscribe({}, {})
214215

215-
showToast(amount = amount, isDeposit = true)
216+
showToast(amount = amount, isDeposit = true, initialDelay = 1.seconds)
216217

217218
historyController.fetchChats()
218219
},
@@ -486,30 +487,34 @@ class HomeViewModel @Inject constructor(
486487

487488
private fun showToast(
488489
amount: KinAmount,
489-
isDeposit: Boolean = false
490+
isDeposit: Boolean = false,
491+
initialDelay: Duration = 500.milliseconds
490492
) {
491-
if (amount.kin.toKinTruncatingLong() == 0L) {
492-
uiFlow.update { uiModel ->
493-
val billState = uiModel.billState
494-
uiModel.copy(
495-
billState = billState.copy(
496-
toast = null
493+
viewModelScope.launch {
494+
delay(initialDelay)
495+
if (amount.kin.toKinTruncatingLong() == 0L) {
496+
uiFlow.update { uiModel ->
497+
val billState = uiModel.billState
498+
uiModel.copy(
499+
billState = billState.copy(
500+
toast = null
501+
)
497502
)
498-
)
503+
}
504+
return@launch
499505
}
500-
return
501-
}
502506

503-
uiFlow.update {
504-
it.copy(
505-
billState = it.billState.copy(
506-
showToast = true,
507-
toast = BillToast(amount = amount, isDeposit = isDeposit)
507+
uiFlow.update {
508+
it.copy(
509+
billState = it.billState.copy(
510+
showToast = true,
511+
toast = BillToast(amount = amount, isDeposit = isDeposit)
512+
)
508513
)
509-
)
510-
}
514+
}
515+
516+
delay(5.seconds)
511517

512-
Timer().schedule(5.seconds.inWholeMilliseconds) {
513518
uiFlow.update { uiModel ->
514519
val billState = uiModel.billState
515520
uiModel.copy(
@@ -518,16 +523,16 @@ class HomeViewModel @Inject constructor(
518523
)
519524
)
520525
}
526+
521527
// wait for animation to run
522-
Timer().schedule(500.milliseconds.inWholeMilliseconds) {
523-
uiFlow.update { uiModel ->
524-
val billState = uiModel.billState
525-
uiModel.copy(
526-
billState = billState.copy(
527-
toast = null
528-
)
528+
delay(500.milliseconds)
529+
uiFlow.update { uiModel ->
530+
val billState = uiModel.billState
531+
uiModel.copy(
532+
billState = billState.copy(
533+
toast = null
529534
)
530-
}
535+
)
531536
}
532537
}
533538
}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.getcode.view.main.home.components
22

3+
import androidx.compose.animation.core.tween
4+
import androidx.compose.animation.fadeIn
5+
import androidx.compose.animation.scaleIn
36
import androidx.compose.foundation.Image
47
import androidx.compose.foundation.layout.Box
58
import androidx.compose.foundation.layout.Column
@@ -23,12 +26,12 @@ import androidx.compose.ui.unit.Dp
2326
import androidx.compose.ui.unit.dp
2427
import com.getcode.R
2528
import com.getcode.theme.CodeTheme
26-
import com.getcode.ui.utils.heightOrZero
27-
import com.getcode.ui.utils.rememberedClickable
28-
import com.getcode.ui.utils.widthOrZero
2929
import com.getcode.ui.components.Badge
3030
import com.getcode.ui.components.Row
3131
import com.getcode.ui.components.chat.ChatNodeDefaults
32+
import com.getcode.ui.utils.heightOrZero
33+
import com.getcode.ui.utils.rememberedClickable
34+
import com.getcode.ui.utils.widthOrZero
3235
import com.getcode.view.main.home.HomeBottomSheet
3336
import com.getcode.view.main.home.HomeUiModel
3437

@@ -82,7 +85,8 @@ internal fun HomeBottom(
8285
Badge(
8386
modifier = Modifier.padding(top = 2.dp, end = 2.dp),
8487
count = state.chatUnreadCount,
85-
color = ChatNodeDefaults.UnreadIndicator
88+
color = ChatNodeDefaults.UnreadIndicator,
89+
enterTransition = scaleIn(animationSpec = tween(durationMillis = 300, delayMillis = 1000)) + fadeIn()
8690
)
8791
}
8892
)

0 commit comments

Comments
 (0)