Loading app/src/main/java/foundation/e/apps/ui/compose/components/SearchResultsContent.kt +153 −77 Original line number Diff line number Diff line Loading @@ -75,22 +75,44 @@ fun SearchResultsContent( selectedTab: SearchTabType, fossItems: LazyPagingItems<Application>?, pwaItems: LazyPagingItems<Application>?, modifier: Modifier = Modifier, playStoreItems: LazyPagingItems<Application>? = null, searchVersion: Int, getScrollPosition: (SearchTabType) -> ScrollPosition?, onScrollPositionChange: (SearchTabType, Int, Int) -> Unit, onTabSelected: (SearchTabType) -> Unit, modifier: Modifier = Modifier, onResultClick: (Application) -> Unit = {}, onPrimaryActionClick: (Application, InstallButtonAction) -> Unit = { _, _ -> }, onShowMoreClick: (Application) -> Unit = {}, onPrivacyClick: (Application) -> Unit = {}, installButtonStateProvider: (Application) -> InstallButtonState, ) { if (tabs.isEmpty() || selectedTab !in tabs) { when { tabs.isEmpty() || selectedTab !in tabs -> { return } // Don't show tabs when a single source is checked in the Settings screen tabs.size == 1 -> { SearchTabPage( tab = selectedTab, fossItems = fossItems, pwaItems = pwaItems, playStoreItems = playStoreItems, searchVersion = searchVersion, getScrollPosition = getScrollPosition, onScrollPositionChange = onScrollPositionChange, onResultClick = onResultClick, onPrimaryActionClick = onPrimaryActionClick, onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = modifier.fillMaxSize(), ) return } else -> { val coroutineScope = rememberCoroutineScope() val selectedIndex = tabs.indexOf(selectedTab).coerceAtLeast(0) val pagerState = rememberPagerState( Loading Loading @@ -134,6 +156,43 @@ fun SearchResultsContent( .padding(top = 16.dp), ) { page -> val tab = tabs[page] SearchTabPage( tab = tab, fossItems = fossItems, pwaItems = pwaItems, playStoreItems = playStoreItems, searchVersion = searchVersion, getScrollPosition = getScrollPosition, onScrollPositionChange = onScrollPositionChange, onResultClick = onResultClick, onPrimaryActionClick = onPrimaryActionClick, onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = Modifier.fillMaxSize(), ) } } } } } @Composable private fun SearchTabPage( tab: SearchTabType, fossItems: LazyPagingItems<Application>?, pwaItems: LazyPagingItems<Application>?, playStoreItems: LazyPagingItems<Application>?, searchVersion: Int, getScrollPosition: (SearchTabType) -> ScrollPosition?, onScrollPositionChange: (SearchTabType, Int, Int) -> Unit, onResultClick: (Application) -> Unit, onPrimaryActionClick: (Application, InstallButtonAction) -> Unit, onShowMoreClick: (Application) -> Unit, onPrivacyClick: (Application) -> Unit, installButtonStateProvider: (Application) -> InstallButtonState, modifier: Modifier = Modifier, ) { when (tab) { SearchTabType.OPEN_SOURCE -> { PagingSearchResultList( Loading @@ -147,7 +206,7 @@ fun SearchResultsContent( onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = Modifier.fillMaxSize(), modifier = modifier, ) } Loading @@ -163,7 +222,7 @@ fun SearchResultsContent( onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = Modifier.fillMaxSize(), modifier = modifier, ) } Loading @@ -178,13 +237,11 @@ fun SearchResultsContent( onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = Modifier.fillMaxSize(), modifier = modifier, ) } } } } } @Composable private fun SearchTabs( Loading Loading @@ -578,6 +635,25 @@ private fun SearchTabType.toLabelRes(): Int = when (this) { SearchTabType.WEB_APPS -> R.string.search_tab_web_apps } @Preview(showBackground = true) @Composable private fun SearchResultsContentSingleTabPreview() { AppTheme(darkTheme = false) { SearchResultsContent( tabs = listOf(SearchTabType.OPEN_SOURCE), selectedTab = SearchTabType.OPEN_SOURCE, fossItems = null, pwaItems = null, playStoreItems = null, searchVersion = 0, getScrollPosition = { null }, onScrollPositionChange = { _, _, _ -> }, onTabSelected = {}, installButtonStateProvider = { InstallButtonState() }, ) } } @Preview(showBackground = true) @Composable private fun SearchResultsContentPreview() { Loading app/src/main/java/foundation/e/apps/ui/compose/screens/SearchScreen.kt +4 −4 Original line number Diff line number Diff line Loading @@ -111,15 +111,15 @@ fun SearchScreen( selectedTab = state.selectedTab!!, fossItems = fossItems, pwaItems = pwaItems, modifier = Modifier .align(Alignment.TopStart) .fillMaxWidth() .padding(top = 8.dp), playStoreItems = playStoreItems, searchVersion = searchVersion, getScrollPosition = getScrollPosition, onScrollPositionChange = onScrollPositionChange, onTabSelected = onTabSelected, modifier = Modifier .align(Alignment.TopStart) .fillMaxWidth() .padding(top = 8.dp), onResultClick = onResultClick, onPrimaryActionClick = onPrimaryAction, onShowMoreClick = onShowMoreClick, Loading Loading
app/src/main/java/foundation/e/apps/ui/compose/components/SearchResultsContent.kt +153 −77 Original line number Diff line number Diff line Loading @@ -75,22 +75,44 @@ fun SearchResultsContent( selectedTab: SearchTabType, fossItems: LazyPagingItems<Application>?, pwaItems: LazyPagingItems<Application>?, modifier: Modifier = Modifier, playStoreItems: LazyPagingItems<Application>? = null, searchVersion: Int, getScrollPosition: (SearchTabType) -> ScrollPosition?, onScrollPositionChange: (SearchTabType, Int, Int) -> Unit, onTabSelected: (SearchTabType) -> Unit, modifier: Modifier = Modifier, onResultClick: (Application) -> Unit = {}, onPrimaryActionClick: (Application, InstallButtonAction) -> Unit = { _, _ -> }, onShowMoreClick: (Application) -> Unit = {}, onPrivacyClick: (Application) -> Unit = {}, installButtonStateProvider: (Application) -> InstallButtonState, ) { if (tabs.isEmpty() || selectedTab !in tabs) { when { tabs.isEmpty() || selectedTab !in tabs -> { return } // Don't show tabs when a single source is checked in the Settings screen tabs.size == 1 -> { SearchTabPage( tab = selectedTab, fossItems = fossItems, pwaItems = pwaItems, playStoreItems = playStoreItems, searchVersion = searchVersion, getScrollPosition = getScrollPosition, onScrollPositionChange = onScrollPositionChange, onResultClick = onResultClick, onPrimaryActionClick = onPrimaryActionClick, onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = modifier.fillMaxSize(), ) return } else -> { val coroutineScope = rememberCoroutineScope() val selectedIndex = tabs.indexOf(selectedTab).coerceAtLeast(0) val pagerState = rememberPagerState( Loading Loading @@ -134,6 +156,43 @@ fun SearchResultsContent( .padding(top = 16.dp), ) { page -> val tab = tabs[page] SearchTabPage( tab = tab, fossItems = fossItems, pwaItems = pwaItems, playStoreItems = playStoreItems, searchVersion = searchVersion, getScrollPosition = getScrollPosition, onScrollPositionChange = onScrollPositionChange, onResultClick = onResultClick, onPrimaryActionClick = onPrimaryActionClick, onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = Modifier.fillMaxSize(), ) } } } } } @Composable private fun SearchTabPage( tab: SearchTabType, fossItems: LazyPagingItems<Application>?, pwaItems: LazyPagingItems<Application>?, playStoreItems: LazyPagingItems<Application>?, searchVersion: Int, getScrollPosition: (SearchTabType) -> ScrollPosition?, onScrollPositionChange: (SearchTabType, Int, Int) -> Unit, onResultClick: (Application) -> Unit, onPrimaryActionClick: (Application, InstallButtonAction) -> Unit, onShowMoreClick: (Application) -> Unit, onPrivacyClick: (Application) -> Unit, installButtonStateProvider: (Application) -> InstallButtonState, modifier: Modifier = Modifier, ) { when (tab) { SearchTabType.OPEN_SOURCE -> { PagingSearchResultList( Loading @@ -147,7 +206,7 @@ fun SearchResultsContent( onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = Modifier.fillMaxSize(), modifier = modifier, ) } Loading @@ -163,7 +222,7 @@ fun SearchResultsContent( onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = Modifier.fillMaxSize(), modifier = modifier, ) } Loading @@ -178,13 +237,11 @@ fun SearchResultsContent( onShowMoreClick = onShowMoreClick, onPrivacyClick = onPrivacyClick, installButtonStateProvider = installButtonStateProvider, modifier = Modifier.fillMaxSize(), modifier = modifier, ) } } } } } @Composable private fun SearchTabs( Loading Loading @@ -578,6 +635,25 @@ private fun SearchTabType.toLabelRes(): Int = when (this) { SearchTabType.WEB_APPS -> R.string.search_tab_web_apps } @Preview(showBackground = true) @Composable private fun SearchResultsContentSingleTabPreview() { AppTheme(darkTheme = false) { SearchResultsContent( tabs = listOf(SearchTabType.OPEN_SOURCE), selectedTab = SearchTabType.OPEN_SOURCE, fossItems = null, pwaItems = null, playStoreItems = null, searchVersion = 0, getScrollPosition = { null }, onScrollPositionChange = { _, _, _ -> }, onTabSelected = {}, installButtonStateProvider = { InstallButtonState() }, ) } } @Preview(showBackground = true) @Composable private fun SearchResultsContentPreview() { Loading
app/src/main/java/foundation/e/apps/ui/compose/screens/SearchScreen.kt +4 −4 Original line number Diff line number Diff line Loading @@ -111,15 +111,15 @@ fun SearchScreen( selectedTab = state.selectedTab!!, fossItems = fossItems, pwaItems = pwaItems, modifier = Modifier .align(Alignment.TopStart) .fillMaxWidth() .padding(top = 8.dp), playStoreItems = playStoreItems, searchVersion = searchVersion, getScrollPosition = getScrollPosition, onScrollPositionChange = onScrollPositionChange, onTabSelected = onTabSelected, modifier = Modifier .align(Alignment.TopStart) .fillMaxWidth() .padding(top = 8.dp), onResultClick = onResultClick, onPrimaryActionClick = onPrimaryAction, onShowMoreClick = onShowMoreClick, Loading