From 389ed24c884a4c0d7a15098f94c61c46d66fa159 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 29 Apr 2025 09:14:13 +0200 Subject: [PATCH 1/6] Show up to 10 popular products --- .../ui/woopos/common/data/WooPosPopularProductsProvider.kt | 2 +- .../ui/woopos/home/items/search/WooPosItemsSearchViewModel.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosPopularProductsProvider.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosPopularProductsProvider.kt index 0886bcc88bb..af9529af099 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosPopularProductsProvider.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosPopularProductsProvider.kt @@ -18,7 +18,7 @@ class WooPosPopularProductsProvider @Inject constructor( private val productsTypesFilterConfig: WooPosProductsTypesFilterConfig, ) { companion object { - private const val MAX_POPULAR_PRODUCTS = 3 + private const val MAX_POPULAR_PRODUCTS = 10 } private val mutex = Mutex() diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchViewModel.kt index 7a512ee8524..4846ee40c27 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchViewModel.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchViewModel.kt @@ -286,7 +286,7 @@ class WooPosItemsSearchViewModel @Inject constructor( } private companion object { - const val MAX_ITEMS_COUNT = 3 + const val MAX_ITEMS_COUNT = 10 const val SEARCH_DEBOUNCING_TIME = 500L } } From 934f5e89a5db1378aff5056332cadc6eee81abdb Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 29 Apr 2025 09:23:42 +0200 Subject: [PATCH 2/6] Fixed compilation issues from the trunk --- .../home/items/coupons/WooPosCouponsListViewStateManager.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsListViewStateManager.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsListViewStateManager.kt index 49248db0685..da0b3fc7729 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsListViewStateManager.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/coupons/WooPosCouponsListViewStateManager.kt @@ -13,7 +13,7 @@ import com.woocommerce.android.ui.woopos.home.items.coupons.WooPosCouponsListVie import com.woocommerce.android.ui.woopos.home.items.coupons.WooPosCouponsListViewStateManager.FetchingCouponsState.FETCHING_FIRST_PAGE import com.woocommerce.android.ui.woopos.home.items.coupons.WooPosCouponsListViewStateManager.FetchingCouponsState.FETCHING_MORE import com.woocommerce.android.ui.woopos.home.items.coupons.WooPosCouponsListViewStateManager.FetchingCouponsState.IDLE -import com.woocommerce.android.ui.woopos.util.GetCachedStoreCurrency +import com.woocommerce.android.ui.woopos.util.WooPosGetCachedStoreCurrency import com.woocommerce.android.ui.woopos.util.format.WooPosFormatCouponSummary import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope @@ -32,7 +32,7 @@ private const val AVOID_UI_FLICKERING_DELAY = 500L class WooPosCouponsListViewStateManager @Inject constructor( private val couponsDataSource: WooPosCouponsDataSource, private val formatCouponSummary: WooPosFormatCouponSummary, - private val getCachedStoreCurrency: GetCachedStoreCurrency, + private val getCachedStoreCurrency: WooPosGetCachedStoreCurrency, private val dispatcher: CoroutineDispatcher = Dispatchers.IO ) { private val fetchingState: MutableStateFlow = MutableStateFlow(IDLE) From 103a277d1509d0073ffd04dc19b88c0e82be4dad Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 29 Apr 2025 09:25:25 +0200 Subject: [PATCH 3/6] Hide keyboard when scrolled on the empty search query state --- .../search/WooPosItemsEmptySearchQueryStateScreen.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsEmptySearchQueryStateScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsEmptySearchQueryStateScreen.kt index d806be39f4c..7ec0df0ad0f 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsEmptySearchQueryStateScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsEmptySearchQueryStateScreen.kt @@ -23,9 +23,11 @@ import androidx.compose.material.icons.outlined.Search import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -49,6 +51,12 @@ fun WooPosItemsEmptySearchQueryStateScreen( onUIEvent: (WooPosItemsSearchUiEvent) -> Unit ) { val scrollState = rememberScrollState() + val focusManager = LocalFocusManager.current + LaunchedEffect(scrollState.isScrollInProgress) { + if (scrollState.isScrollInProgress) { + focusManager.clearFocus() + } + } Column( Modifier .fillMaxHeight() From b8865c0d4c73588c29d1d8cab5b86c4b193185ba Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 29 Apr 2025 09:34:05 +0200 Subject: [PATCH 4/6] Removed icons. Change the title. Change the padding to match the design --- .../WooPosItemsEmptySearchQueryStateScreen.kt | 39 +++++-------------- WooCommerce/src/main/res/values/strings.xml | 2 +- 2 files changed, 10 insertions(+), 31 deletions(-) diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsEmptySearchQueryStateScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsEmptySearchQueryStateScreen.kt index 7ec0df0ad0f..1c40c062188 100644 --- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsEmptySearchQueryStateScreen.kt +++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsEmptySearchQueryStateScreen.kt @@ -17,8 +17,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.KeyboardArrowRight -import androidx.compose.material.icons.automirrored.outlined.TrendingUp -import androidx.compose.material.icons.filled.History import androidx.compose.material.icons.outlined.Search import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -26,7 +24,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -110,11 +107,10 @@ private fun PopularItemsSection( onPopularItemClicked: (WooPosItemSelectionViewState.Product) -> Unit, ) { SectionHeader( - icon = Icons.AutoMirrored.Outlined.TrendingUp, title = stringResource(R.string.woopos_search_popular_items_title) ) - Spacer(modifier = Modifier.height(WooPosSpacing.Small.value.toAdaptivePadding())) + Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) popularItems.forEach { popularItem -> val itemContentDescription = stringResource( @@ -140,11 +136,10 @@ private fun RecentSearchesSection( onRecentSearchClicked: (String) -> Unit, ) { SectionHeader( - icon = Icons.Filled.History, title = stringResource(R.string.woopos_search_recent_searches_title) ) - Spacer(modifier = Modifier.height(WooPosSpacing.Small.value.toAdaptivePadding())) + Spacer(modifier = Modifier.height(WooPosSpacing.Medium.value.toAdaptivePadding())) state.recentSearches.forEach { recentSearch -> WooPosCard( @@ -195,29 +190,13 @@ private fun RecentSearchesSection( } @Composable -private fun SectionHeader( - icon: ImageVector, - title: String -) { - Row( - verticalAlignment = Alignment.CenterVertically - ) { - Icon( - imageVector = icon, - contentDescription = null, - tint = MaterialTheme.colorScheme.onSurface, - modifier = Modifier.size(24.dp) - ) - - Spacer(modifier = Modifier.width(WooPosSpacing.Small.value.toAdaptivePadding())) - - WooPosText( - text = title, - style = WooPosTypography.BodyMedium, - color = MaterialTheme.colorScheme.onSurface, - fontWeight = FontWeight.Bold, - ) - } +private fun SectionHeader(title: String) { + WooPosText( + text = title, + style = WooPosTypography.BodyMedium, + color = MaterialTheme.colorScheme.onSurface, + fontWeight = FontWeight.Bold, + ) } @WooPosPreview diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml index e793e0d8991..4180cb92b9d 100644 --- a/WooCommerce/src/main/res/values/strings.xml +++ b/WooCommerce/src/main/res/values/strings.xml @@ -4411,7 +4411,7 @@ Back Clear Search products… - Popular items + Popular products Recent searches Nothing found We couldn\'t find anything matching your search. From 7c1ceec83de07ffeb5f67e8341eee302064be172 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 1 May 2025 10:38:03 +0200 Subject: [PATCH 5/6] Fixed unit test --- .../common/data/WooPosPopularProductsProviderTest.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosPopularProductsProviderTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosPopularProductsProviderTest.kt index 9e3e48d5f82..17013151ebe 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosPopularProductsProviderTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/common/data/WooPosPopularProductsProviderTest.kt @@ -63,7 +63,7 @@ class WooPosPopularProductsProviderTest { productStore.fetchProducts( site = siteModel, offset = 0, - pageSize = 3, + pageSize = 10, filterOptions = emptyMap(), includeTypes = emptyList(), sortType = ProductSorting.POPULARITY_DESC @@ -88,7 +88,7 @@ class WooPosPopularProductsProviderTest { productStore.fetchProducts( site = siteModel, offset = 0, - pageSize = 3, + pageSize = 10, filterOptions = emptyMap(), includeTypes = emptyList(), sortType = ProductSorting.POPULARITY_DESC @@ -122,7 +122,7 @@ class WooPosPopularProductsProviderTest { productStore.fetchProducts( site = siteModel, offset = 0, - pageSize = 3, + pageSize = 10, filterOptions = emptyMap(), includeTypes = emptyList(), sortType = ProductSorting.POPULARITY_DESC @@ -149,7 +149,7 @@ class WooPosPopularProductsProviderTest { productStore.fetchProducts( site = siteModel, offset = 0, - pageSize = 3, + pageSize = 10, filterOptions = emptyMap(), includeTypes = emptyList(), sortType = ProductSorting.POPULARITY_DESC @@ -175,7 +175,7 @@ class WooPosPopularProductsProviderTest { productStore.fetchProducts( site = siteModel, offset = 0, - pageSize = 3, + pageSize = 10, filterOptions = emptyMap(), includeTypes = emptyList(), sortType = ProductSorting.POPULARITY_DESC From b4c0ea27a609da491c9bf648a0938535adf87b34 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 1 May 2025 11:19:50 +0200 Subject: [PATCH 6/6] Fixed unit test --- .../home/items/search/WooPosItemsSearchViewModelTest.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchViewModelTest.kt b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchViewModelTest.kt index 94aa5060d0d..3e7415c8137 100644 --- a/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchViewModelTest.kt +++ b/WooCommerce/src/test/kotlin/com/woocommerce/android/ui/woopos/home/items/search/WooPosItemsSearchViewModelTest.kt @@ -145,11 +145,12 @@ class WooPosItemsSearchViewModelTest { val emptySearchQuery = value as WooPosItemsSearchViewState.EmptySearchQuery assertThat(emptySearchQuery.popularItems).hasSize(2) assertThat(emptySearchQuery.popularItems.map { it.id }).containsExactly(1, 2) - assertThat(emptySearchQuery.recentSearches).hasSize(3) + assertThat(emptySearchQuery.recentSearches).hasSize(4) assertThat(emptySearchQuery.recentSearches).containsExactly( "Recent Search 1", "Recent Search 2", - "Recent Search 3" + "Recent Search 3", + "Recent Search 4", ) } }