From 432b89672443efe29dcb4d1665b47021e2c7f696 Mon Sep 17 00:00:00 2001 From: jorgemucientesfayos Date: Fri, 9 Feb 2024 13:27:15 +0100 Subject: [PATCH 1/3] Fix budget slider responsiveness --- .../budget/BlazeCampaignBudgetScreen.kt | 3 +-- .../budget/BlazeCampaignBudgetViewModel.kt | 24 ++++++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetScreen.kt index 4e33f2e0030..4fdded8382c 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetScreen.kt @@ -201,7 +201,7 @@ private fun EditBudgetSection( ) Slider( modifier = Modifier.padding(top = 8.dp, bottom = 8.dp), - value = state.sliderValue, + value = state.totalBudget, valueRange = state.budgetRangeMin..state.budgetRangeMax, onValueChange = { onBudgetUpdated(it) }, onValueChangeFinished = { onBudgetChangeFinished() }, @@ -413,7 +413,6 @@ private fun CampaignBudgetScreenPreview() { state = BlazeCampaignBudgetViewModel.BudgetUiState( currencyCode = "USD", totalBudget = 35f, - sliderValue = 35f, budgetRangeMin = 5f, budgetRangeMax = 35f, dailySpending = "$5", diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt index df80ee1b65f..bf97d32d318 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt @@ -24,6 +24,7 @@ import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize import java.util.Date import javax.inject.Inject +import kotlin.math.roundToInt @HiltViewModel class BlazeCampaignBudgetViewModel @Inject constructor( @@ -39,7 +40,6 @@ class BlazeCampaignBudgetViewModel @Inject constructor( BudgetUiState( currencyCode = navArgs.currencyCode, totalBudget = navArgs.totalBudget, - sliderValue = navArgs.totalBudget, budgetRangeMin = navArgs.durationInDays * CAMPAIGN_MINIMUM_DAILY_SPEND, budgetRangeMax = navArgs.durationInDays * CAMPAIGN_MAXIMUM_DAILY_SPEND, dailySpending = formatDailySpend(dailySpend = navArgs.totalBudget / navArgs.durationInDays), @@ -102,14 +102,11 @@ class BlazeCampaignBudgetViewModel @Inject constructor( } fun onBudgetUpdated(sliderValue: Float) { - budgetUiState.update { it.copy(sliderValue = sliderValue) } - if (sliderValue.toInt().mod(budgetUiState.value.durationInDays) == 0) { - budgetUiState.update { - it.copy( - totalBudget = sliderValue, - dailySpending = formatDailySpend(sliderValue / it.durationInDays) - ) - } + budgetUiState.update { + it.copy( + totalBudget = sliderValue, + dailySpending = formatDailySpend(sliderValue / it.durationInDays) + ) } } @@ -123,7 +120,6 @@ class BlazeCampaignBudgetViewModel @Inject constructor( budgetRangeMax = duration * CAMPAIGN_MAXIMUM_DAILY_SPEND, dailySpending = formatDailySpend(currentDailyExpend), totalBudget = newTotalBudget, - sliderValue = newTotalBudget, campaignDurationDates = getCampaignDurationDisplayDate(it.campaignStartDateMillis, duration) ) } @@ -144,6 +140,13 @@ class BlazeCampaignBudgetViewModel @Inject constructor( fun onBudgetChangeFinished() { fetchAdForecast() + val roundedBudgetToDurationMultiple = + (budgetUiState.value.totalBudget / budgetUiState.value.durationInDays).roundToInt() * + budgetUiState.value.durationInDays + budgetUiState.update { + it.copy(totalBudget = roundedBudgetToDurationMultiple.toFloat()) + } + } private fun fetchAdForecast() { @@ -192,7 +195,6 @@ class BlazeCampaignBudgetViewModel @Inject constructor( data class BudgetUiState( val currencyCode: String, val totalBudget: Float, - val sliderValue: Float, val budgetRangeMin: Float, val budgetRangeMax: Float, val dailySpending: String, From 0306ba3dec0e7202410246e8a59b57901ad1049f Mon Sep 17 00:00:00 2001 From: jorgemucientesfayos Date: Fri, 9 Feb 2024 15:53:08 +0100 Subject: [PATCH 2/3] Fix detekt indentation issue --- .../ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt index bf97d32d318..2e43897c562 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt @@ -146,7 +146,6 @@ class BlazeCampaignBudgetViewModel @Inject constructor( budgetUiState.update { it.copy(totalBudget = roundedBudgetToDurationMultiple.toFloat()) } - } private fun fetchAdForecast() { From 9c9c8725877d75bb20fa02bf420f0a32cd4a918a Mon Sep 17 00:00:00 2001 From: jorgemucientesfayos Date: Mon, 12 Feb 2024 23:19:27 +0100 Subject: [PATCH 3/3] Fix detekt import ordering --- .../ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt index 9c1e1731117..681dc53a25e 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/budget/BlazeCampaignBudgetViewModel.kt @@ -23,8 +23,8 @@ import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize import java.util.Date import javax.inject.Inject -import kotlin.time.Duration.Companion.days import kotlin.math.roundToInt +import kotlin.time.Duration.Companion.days @HiltViewModel class BlazeCampaignBudgetViewModel @Inject constructor(