Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Verified Commit 75f02d23 authored by Fahim M. Choudhury's avatar Fahim M. Choudhury
Browse files

feat: hide tabs when only a single app source is checked on the Settings screen

parent f545d61b
Loading
Loading
Loading
Loading
Loading
+153 −77
Original line number Diff line number Diff line
@@ -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(
@@ -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(
@@ -147,7 +206,7 @@ fun SearchResultsContent(
                onShowMoreClick = onShowMoreClick,
                onPrivacyClick = onPrivacyClick,
                installButtonStateProvider = installButtonStateProvider,
                        modifier = Modifier.fillMaxSize(),
                modifier = modifier,
            )
        }

@@ -163,7 +222,7 @@ fun SearchResultsContent(
                onShowMoreClick = onShowMoreClick,
                onPrivacyClick = onPrivacyClick,
                installButtonStateProvider = installButtonStateProvider,
                        modifier = Modifier.fillMaxSize(),
                modifier = modifier,
            )
        }

@@ -178,13 +237,11 @@ fun SearchResultsContent(
                onShowMoreClick = onShowMoreClick,
                onPrivacyClick = onPrivacyClick,
                installButtonStateProvider = installButtonStateProvider,
                        modifier = Modifier.fillMaxSize(),
                modifier = modifier,
            )
        }
    }
}
    }
}

@Composable
private fun SearchTabs(
@@ -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() {
+4 −4
Original line number Diff line number Diff line
@@ -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,