#42 highlight selected screen
This commit is contained in:
parent
7b3a82cc30
commit
e73cc798f0
6 changed files with 39 additions and 16 deletions
|
@ -77,7 +77,7 @@ fun PrimaryScreenPreview() {
|
|||
PrimaryScreenTemplate(
|
||||
"Preview screen",
|
||||
DrawerActions({}, {}, {}, {}, {}),
|
||||
NavigationBarActions({}, {}, {}, {}),
|
||||
NavigationBarActions({ false }, {}, {}, {}, {}),
|
||||
{
|
||||
IconButton(onClick = { /*TODO*/ }) {
|
||||
Icon(
|
||||
|
|
|
@ -17,6 +17,7 @@ import be.ugent.sel.studeez.ui.theme.StudeezTheme
|
|||
import be.ugent.sel.studeez.R.string as AppText
|
||||
|
||||
data class NavigationBarActions(
|
||||
val selectedTab: (Int) -> Boolean,
|
||||
val onHomeClick: () -> Unit,
|
||||
val onTasksClick: () -> Unit,
|
||||
val onSessionsClick: () -> Unit,
|
||||
|
@ -28,10 +29,19 @@ fun getNavigationBarActions(
|
|||
open: (String) -> Unit,
|
||||
): NavigationBarActions {
|
||||
return NavigationBarActions(
|
||||
onHomeClick = { navigationBarViewModel.onHomeClick(open) },
|
||||
onTasksClick = { navigationBarViewModel.onTasksClick(open) },
|
||||
onSessionsClick = { navigationBarViewModel.onSessionsClick(open) },
|
||||
onProfileClick = { navigationBarViewModel.onProfileClick(open) },
|
||||
selectedTab = { navigationBarViewModel.isSelected(it) },
|
||||
onHomeClick = {
|
||||
navigationBarViewModel.onHomeClick(open)
|
||||
},
|
||||
onTasksClick = {
|
||||
navigationBarViewModel.onTasksClick(open)
|
||||
},
|
||||
onSessionsClick = {
|
||||
navigationBarViewModel.onSessionsClick(open)
|
||||
},
|
||||
onProfileClick = {
|
||||
navigationBarViewModel.onProfileClick(open)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -39,16 +49,14 @@ fun getNavigationBarActions(
|
|||
fun NavigationBar(
|
||||
navigationBarActions: NavigationBarActions,
|
||||
) {
|
||||
// TODO Pass functions and new screens.
|
||||
// TODO Pass which screen is selected.
|
||||
// TODO Disabled -> HIGH/MEDIUM_EMPHASIS if the page is implemented
|
||||
BottomNavigation(
|
||||
elevation = 10.dp
|
||||
) {
|
||||
|
||||
BottomNavigationItem(
|
||||
icon = { Icon(imageVector = Icons.Default.List, resources().getString(AppText.home)) },
|
||||
label = { Text(text = resources().getString(AppText.home)) },
|
||||
selected = false, // TODO
|
||||
selected = navigationBarActions.selectedTab(0),
|
||||
onClick = navigationBarActions.onHomeClick
|
||||
)
|
||||
|
||||
|
@ -59,7 +67,7 @@ fun NavigationBar(
|
|||
)
|
||||
},
|
||||
label = { Text(text = resources().getString(AppText.tasks)) },
|
||||
selected = false, // TODO
|
||||
selected = navigationBarActions.selectedTab(1),
|
||||
onClick = navigationBarActions.onTasksClick
|
||||
)
|
||||
|
||||
|
@ -73,7 +81,7 @@ fun NavigationBar(
|
|||
)
|
||||
},
|
||||
label = { Text(text = resources().getString(AppText.sessions)) },
|
||||
selected = false, // TODO
|
||||
selected = navigationBarActions.selectedTab(2),
|
||||
onClick = navigationBarActions.onSessionsClick
|
||||
)
|
||||
|
||||
|
@ -84,7 +92,7 @@ fun NavigationBar(
|
|||
)
|
||||
},
|
||||
label = { Text(text = resources().getString(AppText.profile)) },
|
||||
selected = false, // TODO
|
||||
selected = navigationBarActions.selectedTab(3),
|
||||
onClick = navigationBarActions.onProfileClick
|
||||
)
|
||||
|
||||
|
@ -95,6 +103,6 @@ fun NavigationBar(
|
|||
@Composable
|
||||
fun NavigationBarPreview() {
|
||||
StudeezTheme {
|
||||
NavigationBar(NavigationBarActions({}, {}, {}, {}))
|
||||
NavigationBar(NavigationBarActions({ false }, {}, {}, {}, {}))
|
||||
}
|
||||
}
|
|
@ -7,26 +7,41 @@ import be.ugent.sel.studeez.navigation.StudeezDestinations.PROFILE_SCREEN
|
|||
import be.ugent.sel.studeez.screens.StudeezViewModel
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@HiltViewModel
|
||||
class NavigationBarViewModel @Inject constructor(
|
||||
private val accountDAO: AccountDAO,
|
||||
var selectedTab: SelectedTabState,
|
||||
logService: LogService
|
||||
) : StudeezViewModel(logService) {
|
||||
|
||||
fun isSelected(index: Int): Boolean {
|
||||
return index == selectedTab.selectedTab
|
||||
}
|
||||
|
||||
fun onHomeClick(open: (String) -> Unit) {
|
||||
selectedTab.selectedTab = 0
|
||||
open(HOME_SCREEN)
|
||||
}
|
||||
|
||||
fun onTasksClick(open: (String) -> Unit) {
|
||||
// TODO
|
||||
selectedTab.selectedTab = 1
|
||||
}
|
||||
|
||||
fun onSessionsClick(open: (String) -> Unit) {
|
||||
// TODO
|
||||
selectedTab.selectedTab = 2
|
||||
}
|
||||
|
||||
fun onProfileClick(open: (String) -> Unit) {
|
||||
selectedTab.selectedTab = 3
|
||||
open(PROFILE_SCREEN)
|
||||
}
|
||||
}
|
||||
|
||||
@Singleton
|
||||
class SelectedTabState @Inject constructor() {
|
||||
var selectedTab: Int = 0
|
||||
}
|
|
@ -69,6 +69,6 @@ fun HomeScreenPreview() {
|
|||
HomeScreen(
|
||||
onStartSessionClick = {},
|
||||
drawerActions = DrawerActions({}, {}, {}, {}, {}),
|
||||
navigationBarActions = NavigationBarActions({}, {}, {}, {})
|
||||
navigationBarActions = NavigationBarActions({ false }, {}, {}, {}, {})
|
||||
)
|
||||
}
|
||||
|
|
|
@ -90,6 +90,6 @@ fun ProfileScreenPreview() {
|
|||
ProfileScreen(
|
||||
profileActions = ProfileActions({ null }, {}),
|
||||
drawerActions = DrawerActions({}, {}, {}, {}, {}),
|
||||
navigationBarActions = NavigationBarActions({}, {}, {}, {})
|
||||
navigationBarActions = NavigationBarActions({ false }, {}, {}, {}, {})
|
||||
)
|
||||
}
|
|
@ -86,6 +86,6 @@ fun TimerSelectionPreview() {
|
|||
TimerSelectionScreen(
|
||||
timerSelectionActions = TimerSelectionActions({ flowOf() }, {}),
|
||||
drawerActions = DrawerActions({}, {}, {}, {}, {}),
|
||||
navigationBarActions = NavigationBarActions({}, {}, {}, {}),
|
||||
navigationBarActions = NavigationBarActions({ false }, {}, {}, {}, {}),
|
||||
)
|
||||
}
|
Reference in a new issue