Skip to content

Commit 8b949c0

Browse files
committed
chore(slideconfirm): make loading state visibility tied directly to loading
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent fcb492e commit 8b949c0

8 files changed

Lines changed: 50 additions & 48 deletions

File tree

api/src/main/java/com/getcode/network/HistoryController.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import com.getcode.network.repository.encodeBase64
3434
import com.getcode.network.source.ChatMessagePagingSource
3535
import com.getcode.util.resources.ResourceHelper
3636
import com.getcode.util.resources.ResourceType
37+
import com.getcode.utils.ErrorUtils
3738
import com.getcode.utils.TraceType
3839
import com.getcode.utils.trace
3940
import kotlinx.coroutines.CoroutineScope

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.getcode.network.repository
22

33
import com.getcode.model.BalanceCurrencyFeature
4+
import com.getcode.model.BetaFlag
45
import com.getcode.model.BuyModuleFeature
6+
import com.getcode.model.Feature
57
import com.getcode.model.PrefsBool
68
import com.getcode.model.RequestKinFeature
79
import com.getcode.model.TipCardFeature
@@ -15,7 +17,7 @@ import javax.inject.Inject
1517
* Collates [BetaOptions] with server availability (stored in [PrefRepository]).
1618
*/
1719
class FeatureRepository @Inject constructor(
18-
betaFlags: BetaFlagsRepository,
20+
private val betaFlags: BetaFlagsRepository,
1921
prefRepository: PrefRepository,
2022
) {
2123
val buyModule = combine(
@@ -31,4 +33,6 @@ class FeatureRepository @Inject constructor(
3133
val requestKin = betaFlags.observe().map { RequestKinFeature(it.giveRequestsEnabled) }
3234

3335
val balanceCurrencySelection = betaFlags.observe().map { BalanceCurrencyFeature(it.balanceCurrencySelectionEnabled) }
36+
37+
suspend fun isEnabled(feature: PrefsBool): Boolean = betaFlags.isEnabled(feature)
3438
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ class MessagingRepository @Inject constructor(
171171
.build()
172172

173173
return networkOracle.managedRequest(messagingApi.pollMessages(request))
174+
.observeOn(Schedulers.io())
174175
.map { response ->
175176
Timber.d("response=${response.messagesList}")
176177
response.messagesList.mapNotNull { m -> StreamMessage.getInstance(m) }

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ import com.getcode.network.exchange.Exchange
1818
import com.getcode.solana.keys.PublicKey
1919
import com.getcode.utils.ErrorUtils
2020
import io.reactivex.rxjava3.core.Completable
21+
import io.reactivex.rxjava3.schedulers.Schedulers
2122
import kotlinx.coroutines.CoroutineScope
2223
import kotlinx.coroutines.Dispatchers
2324
import kotlinx.coroutines.launch
2425
import kotlinx.coroutines.suspendCancellableCoroutine
26+
import kotlinx.coroutines.withContext
2527
import timber.log.Timber
2628
import javax.inject.Inject
2729
import kotlin.coroutines.resume
@@ -90,7 +92,9 @@ class PaymentRepository @Inject constructor(
9092
@SuppressLint("CheckResult")
9193
suspend fun completePayment(amount: KinAmount, rendezvousKey: KeyPair) {
9294
// 1. ensure we have exchange rates and compute the fees for this transaction
93-
exchange.fetchRatesIfNeeded()
95+
withContext(Dispatchers.IO) {
96+
exchange.fetchRatesIfNeeded()
97+
}
9498

9599
var paymentAmount = amount
96100
return suspendCancellableCoroutine { cont ->
@@ -156,7 +160,7 @@ class PaymentRepository @Inject constructor(
156160
Completable.concatArray(
157161
balanceController.fetchBalance(),
158162
client.fetchLimits(isForce = true)
159-
).doOnComplete {
163+
).observeOn(Schedulers.io()).doOnComplete {
160164
analytics.transfer(
161165
amount = paymentAmount,
162166
successful = true,
@@ -209,7 +213,7 @@ class PaymentRepository @Inject constructor(
209213
Completable.concatArray(
210214
balanceController.fetchBalance(),
211215
client.fetchLimits(isForce = true)
212-
).doOnComplete {
216+
).observeOn(Schedulers.io()).doOnComplete {
213217
analytics.transferForTip(amount = amount, successful = true)
214218
cont.resume(Unit)
215219
}.subscribe()

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package com.getcode.ui.components
44

55
import androidx.compose.animation.AnimatedContent
6+
import androidx.compose.animation.animateColorAsState
67
import androidx.compose.animation.core.Spring
78
import androidx.compose.animation.core.animateDpAsState
89
import androidx.compose.animation.core.animateFloatAsState
@@ -178,7 +179,7 @@ fun SlideToConfirm(
178179

179180
val hapticFeedback = LocalHapticFeedback.current
180181
val swipeState = rememberSwipeableState(
181-
initialValue = if (loading) Anchor.End else Anchor.Start,
182+
initialValue = Anchor.Start,
182183
)
183184

184185
val composeScope = rememberCoroutineScope()
@@ -217,7 +218,6 @@ fun SlideToConfirm(
217218
hint(swipeFraction, PaddingValues(horizontal = Thumb.Size + CodeTheme.dimens.grid.x2), label)
218219
}
219220

220-
221221
if (isSuccess) {
222222
Image(
223223
painter = painterResource(id = R.drawable.ic_check),
@@ -227,9 +227,13 @@ fun SlideToConfirm(
227227
.align(Alignment.Center),
228228
)
229229
} else {
230+
val loadingColor by animateColorAsState(
231+
targetValue = if (loading) Color.White else Color.Transparent
232+
)
233+
230234
CodeCircularProgressIndicator(
231235
strokeWidth = CodeTheme.dimens.thickBorder,
232-
color = calculateLoadingColor(swipeFraction),
236+
color = loadingColor,
233237
modifier = Modifier
234238
.size(CodeTheme.dimens.grid.x4)
235239
.align(Alignment.Center),
@@ -362,10 +366,6 @@ private fun calculateHintTextColor(swipeFraction: Float): Color {
362366
return lerp(Color.White, Color.White.copy(alpha = 0f), fraction)
363367
}
364368

365-
private fun calculateLoadingColor(swipeFraction: Float): Color {
366-
if (swipeFraction < 0.1f) return Color.White.copy(0f)
367-
return Color.White
368-
}
369369

370370
@Preview
371371
@Composable

app/src/main/java/com/getcode/util/DeeplinkHandler.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,17 @@ import android.content.Intent
55
import android.net.Uri
66
import androidx.core.net.toUri
77
import cafe.adriel.voyager.core.screen.Screen
8-
import com.getcode.model.BetaFlag
98
import com.getcode.model.PrefsBool
109
import com.getcode.models.DeepLinkRequest
11-
import com.getcode.models.encode
1210
import com.getcode.navigation.screens.HomeScreen
1311
import com.getcode.navigation.screens.LoginScreen
1412
import com.getcode.network.repository.BetaFlagsRepository
15-
import com.getcode.network.repository.encodeBase64
1613
import com.getcode.network.repository.urlDecode
17-
import com.getcode.ui.utils.getActivity
1814
import com.getcode.utils.TraceType
1915
import com.getcode.utils.base64EncodedData
2016
import com.getcode.utils.trace
2117
import dagger.hilt.android.qualifiers.ApplicationContext
2218
import kotlinx.coroutines.flow.MutableStateFlow
23-
import kotlinx.serialization.json.buildJsonObject
24-
import kotlinx.serialization.json.put
2519
import timber.log.Timber
2620
import javax.inject.Inject
2721
import javax.inject.Singleton

app/src/main/java/com/getcode/view/main/balance/BalanceSheetViewModel.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.getcode.model.PrefsBool
1010
import com.getcode.model.Rate
1111
import com.getcode.network.BalanceController
1212
import com.getcode.network.HistoryController
13+
import com.getcode.network.repository.BetaFlagsRepository
1314
import com.getcode.network.repository.FeatureRepository
1415
import com.getcode.network.repository.PrefRepository
1516
import com.getcode.util.Kin
@@ -18,6 +19,7 @@ import com.getcode.view.BaseViewModel2
1819
import dagger.hilt.android.lifecycle.HiltViewModel
1920
import kotlinx.coroutines.Dispatchers
2021
import kotlinx.coroutines.flow.distinctUntilChanged
22+
import kotlinx.coroutines.flow.filter
2123
import kotlinx.coroutines.flow.filterIsInstance
2224
import kotlinx.coroutines.flow.filterNotNull
2325
import kotlinx.coroutines.flow.launchIn
@@ -124,6 +126,7 @@ class BalanceSheetViewModel @Inject constructor(
124126

125127
eventFlow
126128
.filterIsInstance<Event.OnOpened>()
129+
.filter { features.isEnabled(PrefsBool.TIPS_CHAT_ENABLED) }
127130
.onEach { historyController.fetchChats(true) }
128131
.launchIn(viewModelScope)
129132
}

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

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -883,30 +883,28 @@ class HomeViewModel @Inject constructor(
883883

884884
val isReceived = payload != null
885885
val presentationStyle = if (isReceived) PresentationStyle.Pop else PresentationStyle.Slide
886-
withContext(Dispatchers.Main) {
887-
uiFlow.update {
888-
var billState = it.billState.copy(
889-
bill = Bill.Payment(amount, code, request),
890-
valuation = PaymentValuation(amount),
891-
primaryAction = null,
892-
)
893-
894-
if (isReceived) {
895-
billState = billState.copy(
896-
paymentConfirmation = PaymentConfirmation(
897-
state = ConfirmationState.AwaitingConfirmation,
898-
payload = code,
899-
requestedAmount = amount,
900-
localAmount = amount.replacing(exchange.localRate)
901-
),
902-
)
903-
}
886+
uiFlow.update {
887+
var billState = it.billState.copy(
888+
bill = Bill.Payment(amount, code, request),
889+
valuation = PaymentValuation(amount),
890+
primaryAction = null,
891+
)
904892

905-
it.copy(
906-
presentationStyle = presentationStyle,
907-
billState = billState,
893+
if (isReceived) {
894+
billState = billState.copy(
895+
paymentConfirmation = PaymentConfirmation(
896+
state = ConfirmationState.AwaitingConfirmation,
897+
payload = code,
898+
requestedAmount = amount,
899+
localAmount = amount.replacing(exchange.localRate)
900+
),
908901
)
909902
}
903+
904+
it.copy(
905+
presentationStyle = presentationStyle,
906+
billState = billState,
907+
)
910908
}
911909

912910
analytics.requestShown(amount = amount)
@@ -929,17 +927,14 @@ class HomeViewModel @Inject constructor(
929927
cashLinkManager.cancelBillTimeout()
930928

931929
val paymentConfirmation = uiFlow.value.billState.paymentConfirmation ?: return@launch
932-
withContext(Dispatchers.Main) {
933-
uiFlow.update {
934-
val billState = it.billState
935-
it.copy(
936-
billState = billState.copy(
937-
paymentConfirmation = paymentConfirmation.copy(state = ConfirmationState.Sending)
938-
),
939-
)
940-
}
930+
uiFlow.update {
931+
val billState = it.billState
932+
it.copy(
933+
billState = billState.copy(
934+
paymentConfirmation = paymentConfirmation.copy(state = ConfirmationState.Sending)
935+
),
936+
)
941937
}
942-
943938
runCatching {
944939
paymentRepository.completePayment(
945940
paymentConfirmation.requestedAmount,

0 commit comments

Comments
 (0)