This commit is contained in:
Rafal Wisniewski
2026-03-19 15:32:51 +01:00
commit 20370e3906
68 changed files with 3267 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
package cc.n0th1ng.tripmoney.navigation
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.List
import androidx.compose.material3.Icon
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.NavigationBarItem
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.res.painterResource
import androidx.navigation.NavController
import androidx.navigation.compose.currentBackStackEntryAsState
import com.composables.icons.materialsymbols.outlined.R
@Composable
fun BottomNavigation(navController: NavController) {
val navBackStack by navController.currentBackStackEntryAsState()
val current = navBackStack?.destination?.route
NavigationBar {
NavigationBarItem(
selected = current?.contains(Screens.TRIP_PICKER) == true,
onClick = { navController.navigate(Screens.TRIP_PICKER) },
icon = {
Icon(
painter = painterResource(
R.drawable.materialsymbols_ic_luggage_outlined
), "trip picker"
)
}
)
NavigationBarItem(
selected = current?.contains(Screens.LIST_EXPENSE) == true,
onClick = { navController.navigate(Screens.LIST_EXPENSE) },
icon = {
Icon(
painter = painterResource(
R.drawable.materialsymbols_ic_list_outlined,
),
null
)
}
)
NavigationBarItem(
selected = current?.contains(Screens.STATISTICS) == true,
onClick = { navController.navigate(Screens.STATISTICS) },
icon = {
Icon(
painter = painterResource(
R.drawable.materialsymbols_ic_pie_chart_outlined,
),
null
)
}
)
}
}

View File

@@ -0,0 +1,102 @@
package cc.n0th1ng.tripmoney.navigation
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Home
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material3.DrawerState
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.ModalDrawerSheet
import androidx.compose.material3.ModalNavigationDrawer
import androidx.compose.material3.NavigationDrawerItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import com.composables.icons.materialsymbols.outlined.R
import kotlinx.coroutines.launch
@Composable
fun CustomNavigationDrawer(
navController: NavController, drawerState: DrawerState, content: @Composable () -> Unit
) {
val scope = rememberCoroutineScope()
ModalNavigationDrawer(
drawerState = drawerState, drawerContent = {
ModalDrawerSheet {
Text("Trip Money", modifier = Modifier.padding(16.dp))
HorizontalDivider()
NavigationDrawerItem(
label = { Text(text = "Pick trip") },
selected = false,
onClick = {
navController.navigate(Screens.TRIP_PICKER)
scope.launch {
drawerState.close()
}
},
icon = {
Icon(
painter = painterResource(
R.drawable.materialsymbols_ic_luggage_outlined,
), null
)
})
NavigationDrawerItem(
label = { Text(text = "List of expenses") },
selected = false,
onClick = {
navController.navigate(Screens.LIST_EXPENSE)
scope.launch {
drawerState.close()
}
},
icon = {
Icon(
painter = painterResource(
R.drawable.materialsymbols_ic_list_outlined,
), null
)
})
NavigationDrawerItem(
label = { Text(text = "Statistics") },
selected = false,
onClick = {
navController.navigate(Screens.STATISTICS)
scope.launch {
drawerState.close()
}
},
icon = {
Icon(
painter = painterResource(
R.drawable.materialsymbols_ic_pie_chart_outlined,
), null
)
})
NavigationDrawerItem(
label = { Text(text = "Settings") },
selected = false,
onClick = {
navController.navigate(Screens.SETTINGS)
scope.launch {
drawerState.close()
}
},
icon = { Icon(Icons.Default.Settings, contentDescription = "settings") }
)
}
}) { content() }
}
object Screens {
const val LIST_EXPENSE = "list_expense"
const val TRIP_PICKER = "trip_picker"
const val STATISTICS = "statistics"
const val SETTINGS = "settings"
}

View File

@@ -0,0 +1,41 @@
package cc.n0th1ng.tripmoney.navigation
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavHostController
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TopBar(onClick: () -> Unit) {
TopAppBar(
title = {},
navigationIcon = {
IconButton(onClick = { onClick() }) {
Icon(Icons.Default.Menu, contentDescription = "Menu")
}
}
)
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TopBarSettings(navController: NavHostController) {
TopAppBar(
title = { Text("Settings") },
navigationIcon = {
IconButton(onClick = { navController.popBackStack() }) {
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back")
}
}
)
}