From 44219d00d83dc5b9661816a6158215501471cb40 Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Sat, 2 May 2026 12:23:25 +0200 Subject: [PATCH] feat(app): add HomeSearchFullScreen route and integrate search functionality in HomeScreen --- .../purefin/navigation/RouteEntryBuilder.kt | 4 ++ .../hu/bbara/purefin/ui/screen/AppScreen.kt | 1 + .../purefin/ui/screen/home/HomeScreen.kt | 60 +++++-------------- .../feature/browse/home/AppViewModel.kt | 4 ++ .../java/hu/bbara/purefin/navigation/Route.kt | 3 + 5 files changed, 28 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/hu/bbara/purefin/navigation/RouteEntryBuilder.kt b/app/src/main/java/hu/bbara/purefin/navigation/RouteEntryBuilder.kt index 61217d75..56dd8967 100644 --- a/app/src/main/java/hu/bbara/purefin/navigation/RouteEntryBuilder.kt +++ b/app/src/main/java/hu/bbara/purefin/navigation/RouteEntryBuilder.kt @@ -5,6 +5,7 @@ import hu.bbara.purefin.ui.screen.library.LibraryScreen import hu.bbara.purefin.ui.screen.login.LoginScreen import hu.bbara.purefin.ui.screen.AppScreen import hu.bbara.purefin.ui.screen.episode.EpisodeScreen +import hu.bbara.purefin.ui.screen.home.components.search.HomeSearchFullScreen import hu.bbara.purefin.ui.screen.movie.MovieScreen import hu.bbara.purefin.ui.screen.series.SeriesScreen @@ -12,6 +13,9 @@ fun EntryProviderScope.appRouteEntryBuilder() { entry { AppScreen() } + entry { + HomeSearchFullScreen() + } entry { MovieScreen(movie = it.item) } diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/AppScreen.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/AppScreen.kt index 78460863..f1350355 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/AppScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/AppScreen.kt @@ -77,6 +77,7 @@ fun AppScreen( onProfileClick = {}, onSettingsClick = {}, onLogoutClick = viewModel::logout, + onSearchClick = viewModel::openSearch, selectedTab = selectedTab, onTabSelected = onTabSelected, modifier = Modifier.fillMaxSize() diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/home/HomeScreen.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/home/HomeScreen.kt index bec34f20..a1e253ad 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/home/HomeScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/home/HomeScreen.kt @@ -1,26 +1,18 @@ package hu.bbara.purefin.ui.screen.home -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import hu.bbara.purefin.ui.model.LibraryUiModel import hu.bbara.purefin.ui.model.MediaUiModel import hu.bbara.purefin.ui.screen.AppBottomBar import hu.bbara.purefin.ui.screen.home.components.HomeContent import hu.bbara.purefin.ui.screen.home.components.HomeTopBar -import hu.bbara.purefin.ui.screen.home.components.search.HomeSearchOverlay import java.util.UUID -@OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen( libraries: List, @@ -35,12 +27,11 @@ fun HomeScreen( onProfileClick: () -> Unit, onSettingsClick: () -> Unit, onLogoutClick: () -> Unit, + onSearchClick: () -> Unit, selectedTab: Int, onTabSelected: (Int) -> Unit, modifier: Modifier = Modifier ) { - var isSearchVisible by rememberSaveable { mutableStateOf(false) } - Scaffold( modifier = modifier .fillMaxSize(), @@ -48,7 +39,7 @@ fun HomeScreen( contentColor = MaterialTheme.colorScheme.onBackground, topBar = { HomeTopBar( - onSearchClick = { isSearchVisible = true }, + onSearchClick = onSearchClick, onProfileClick = onProfileClick, onSettingsClick = onSettingsClick, onLogoutClick = onLogoutClick @@ -61,37 +52,18 @@ fun HomeScreen( ) } ) { innerPadding -> - Box(modifier = Modifier.fillMaxSize()) { - HomeContent( - libraries = libraries, - libraryContent = libraryContent, - suggestions = suggestions, - continueWatching = continueWatching, - nextUp = nextUp, - isRefreshing = isRefreshing, - onRefresh = onRefresh, - onMediaSelected = onMediaSelected, - onLibrarySelected = onLibrarySelected, - onBrowseLibrariesClick = { onTabSelected(1) }, - modifier = Modifier.padding(innerPadding) - ) - HomeSearchOverlay( - visible = isSearchVisible, - topPadding = innerPadding.calculateTopPadding(), - onDismiss = { isSearchVisible = false }, - onMovieSelected = { - isSearchVisible = false - //TODO use MediaUiModel as well - //onMovieSelected(it) - }, - onSeriesSelected = { - isSearchVisible = false - //onSeriesSelected(it) - }, - modifier = Modifier - .fillMaxSize() - .padding(innerPadding) - ) - } + HomeContent( + libraries = libraries, + libraryContent = libraryContent, + suggestions = suggestions, + continueWatching = continueWatching, + nextUp = nextUp, + isRefreshing = isRefreshing, + onRefresh = onRefresh, + onMediaSelected = onMediaSelected, + onLibrarySelected = onLibrarySelected, + onBrowseLibrariesClick = { onTabSelected(1) }, + modifier = Modifier.padding(innerPadding) + ) } -} \ No newline at end of file +} diff --git a/core/src/main/java/hu/bbara/purefin/feature/browse/home/AppViewModel.kt b/core/src/main/java/hu/bbara/purefin/feature/browse/home/AppViewModel.kt index a1244b8e..7691ab53 100644 --- a/core/src/main/java/hu/bbara/purefin/feature/browse/home/AppViewModel.kt +++ b/core/src/main/java/hu/bbara/purefin/feature/browse/home/AppViewModel.kt @@ -251,6 +251,10 @@ class AppViewModel @Inject constructor( } } + fun openSearch() { + navigationManager.navigate(Route.HomeSearchRoute) + } + fun logout() { viewModelScope.launch { userSessionRepository.setLoggedIn(false) diff --git a/core/src/main/java/hu/bbara/purefin/navigation/Route.kt b/core/src/main/java/hu/bbara/purefin/navigation/Route.kt index 150bde89..327d1fbe 100644 --- a/core/src/main/java/hu/bbara/purefin/navigation/Route.kt +++ b/core/src/main/java/hu/bbara/purefin/navigation/Route.kt @@ -8,6 +8,9 @@ sealed interface Route : NavKey { @Serializable data object Home : Route + @Serializable + data object HomeSearchRoute : Route + @Serializable data class MovieRoute(val item: MovieDto) : Route