Skip to content

Commit 254d7ac

Browse files
Merge pull request #10739 from woocommerce/issue/10574-fix-budget-slider-responsiveness
Fix budget slider responsiveness
2 parents 09cb7f6 + 9c9c872 commit 254d7ac

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetScreen.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ private fun EditBudgetSection(
201201
)
202202
Slider(
203203
modifier = Modifier.padding(top = 8.dp, bottom = 8.dp),
204-
value = state.sliderValue,
204+
value = state.totalBudget,
205205
valueRange = state.budgetRangeMin..state.budgetRangeMax,
206206
onValueChange = { onBudgetUpdated(it) },
207207
onValueChangeFinished = { onBudgetChangeFinished() },
@@ -413,7 +413,6 @@ private fun CampaignBudgetScreenPreview() {
413413
state = BlazeCampaignBudgetViewModel.BudgetUiState(
414414
currencyCode = "USD",
415415
totalBudget = 35f,
416-
sliderValue = 35f,
417416
budgetRangeMin = 5f,
418417
budgetRangeMax = 35f,
419418
dailySpending = "$5",

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt

+12-11
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import kotlinx.coroutines.launch
2323
import kotlinx.parcelize.Parcelize
2424
import java.util.Date
2525
import javax.inject.Inject
26+
import kotlin.math.roundToInt
2627
import kotlin.time.Duration.Companion.days
2728

2829
@HiltViewModel
@@ -38,7 +39,6 @@ class BlazeCampaignBudgetViewModel @Inject constructor(
3839
BudgetUiState(
3940
currencyCode = navArgs.budget.currencyCode,
4041
totalBudget = navArgs.budget.totalBudget,
41-
sliderValue = navArgs.budget.totalBudget,
4242
budgetRangeMin = navArgs.budget.durationInDays * CAMPAIGN_MINIMUM_DAILY_SPEND,
4343
budgetRangeMax = navArgs.budget.durationInDays * CAMPAIGN_MAXIMUM_DAILY_SPEND,
4444
dailySpending = formatDailySpend(
@@ -106,14 +106,11 @@ class BlazeCampaignBudgetViewModel @Inject constructor(
106106
}
107107

108108
fun onBudgetUpdated(sliderValue: Float) {
109-
budgetUiState.update { it.copy(sliderValue = sliderValue) }
110-
if (sliderValue.toInt().mod(budgetUiState.value.durationInDays) == 0) {
111-
budgetUiState.update {
112-
it.copy(
113-
totalBudget = sliderValue,
114-
dailySpending = formatDailySpend(sliderValue / it.durationInDays)
115-
)
116-
}
109+
budgetUiState.update {
110+
it.copy(
111+
totalBudget = sliderValue,
112+
dailySpending = formatDailySpend(sliderValue / it.durationInDays)
113+
)
117114
}
118115
}
119116

@@ -127,7 +124,6 @@ class BlazeCampaignBudgetViewModel @Inject constructor(
127124
budgetRangeMax = duration * CAMPAIGN_MAXIMUM_DAILY_SPEND,
128125
dailySpending = formatDailySpend(currentDailyExpend),
129126
totalBudget = newTotalBudget,
130-
sliderValue = newTotalBudget,
131127
campaignDurationDates = getCampaignDurationDisplayDate(it.campaignStartDateMillis, duration)
132128
)
133129
}
@@ -148,6 +144,12 @@ class BlazeCampaignBudgetViewModel @Inject constructor(
148144

149145
fun onBudgetChangeFinished() {
150146
fetchAdForecast()
147+
val roundedBudgetToDurationMultiple =
148+
(budgetUiState.value.totalBudget / budgetUiState.value.durationInDays).roundToInt() *
149+
budgetUiState.value.durationInDays
150+
budgetUiState.update {
151+
it.copy(totalBudget = roundedBudgetToDurationMultiple.toFloat())
152+
}
151153
}
152154

153155
private fun fetchAdForecast() {
@@ -193,7 +195,6 @@ class BlazeCampaignBudgetViewModel @Inject constructor(
193195
data class BudgetUiState(
194196
val currencyCode: String,
195197
val totalBudget: Float,
196-
val sliderValue: Float,
197198
val budgetRangeMin: Float,
198199
val budgetRangeMax: Float,
199200
val dailySpending: String,

0 commit comments

Comments
 (0)