diff --git a/DBTApp/.idea/deploymentTargetSelector.xml b/DBTApp/.idea/deploymentTargetSelector.xml index 4baf7a9..d50afaf 100644 --- a/DBTApp/.idea/deploymentTargetSelector.xml +++ b/DBTApp/.idea/deploymentTargetSelector.xml @@ -8,6 +8,9 @@ + + \ No newline at end of file diff --git a/DBTApp/app/src/main/AndroidManifest.xml b/DBTApp/app/src/main/AndroidManifest.xml index c8854e3..77d63e8 100644 --- a/DBTApp/app/src/main/AndroidManifest.xml +++ b/DBTApp/app/src/main/AndroidManifest.xml @@ -11,6 +11,15 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.DBTApp" - tools:targetApi="31" /> + tools:targetApi="31"> + + + + + + + + + \ No newline at end of file diff --git a/DBTApp/app/src/main/java/de/cdaut/dbtapp/MainActivity.kt b/DBTApp/app/src/main/java/de/cdaut/dbtapp/MainActivity.kt index e4f0737..227b740 100644 --- a/DBTApp/app/src/main/java/de/cdaut/dbtapp/MainActivity.kt +++ b/DBTApp/app/src/main/java/de/cdaut/dbtapp/MainActivity.kt @@ -1,17 +1,93 @@ package de.cdaut.dbtapp +import android.graphics.drawable.shapes.Shape import android.os.Bundle import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Emergency +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonColors +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Shapes import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview -import androidx.activity.compose.setContent +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import com.google.android.material.floatingactionbutton.FloatingActionButton +import de.cdaut.dbtapp.components.BottomNavigationBar +import de.cdaut.dbtapp.navigation.Screens -class MainActivity : ComponentActivity(){ +class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { + MainContent() } } } +@Preview(locale = "en-US") +@Composable +private fun MainContent() { + val navController = rememberNavController() + Box { + Scaffold( + modifier = Modifier.fillMaxSize(), + bottomBar = { BottomNavigationBar(navController) }, + floatingActionButton = { EmergencyButton() } + ) { paddingValues -> + NavHost( + navController = navController, + startDestination = Screens.Home.route, + modifier = Modifier.padding(paddingValues = paddingValues) + ) { + composable(Screens.Tracking.route) { + Text("Tracking") + } + composable(Screens.Skillslist.route) { + Text("Skillslist") + } + composable(Screens.Home.route) { + Text("Home") + } + composable(Screens.Favourites.route) { + Text("Favourites") + + } + composable(Screens.Skillschains.route) { + Text("Skillschains") + + } + } + } + } +} + +@Preview +@Composable +private fun EmergencyButton() { + FloatingActionButton( + onClick = {}, + containerColor = Color.Red + ) { + Icon( + imageVector = Icons.Filled.Emergency, + contentDescription = stringResource(R.string.emergency_button_description), + ) + } +} \ No newline at end of file diff --git a/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/BottomNavBar.kt b/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/BottomNavBar.kt deleted file mode 100644 index 62c3fe6..0000000 --- a/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/BottomNavBar.kt +++ /dev/null @@ -1,66 +0,0 @@ -package de.cdaut.dbtapp.components - -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.Icon -import androidx.compose.material3.NavigationBar -import androidx.compose.material3.NavigationBarItem -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import androidx.navigation.NavGraph.Companion.findStartDestination -import androidx.navigation.compose.rememberNavController -import de.cdaut.dbtapp.navigation.BottomNavigationItem - - -@Preview -@Composable -private fun BottomNavigationBar() { - var navigationSelectedItem by remember { - mutableIntStateOf( - BottomNavigationItem().bottomNavigationItems() - .find { item -> item.label == "Home" }!!.idx - ) - } - val navController = rememberNavController() - - Scaffold( - modifier = Modifier.fillMaxSize(), - bottomBar = { - NavigationBar { - BottomNavigationItem().bottomNavigationItems().sortedBy { item -> item.idx } - .forEachIndexed { index, item -> - NavigationBarItem( - selected = index == navigationSelectedItem, - label = { - if (index == navigationSelectedItem) { - Text(item.label) - } - }, - icon = { - Icon( - item.icon, - contentDescription = item.label - ) - }, - onClick = { - navigationSelectedItem = index - navController.navigate(item.route) { - popUpTo(navController.graph.findStartDestination().id) - launchSingleTop = true - restoreState = true - } - } - ) - } - } - } - ) { paddingVals -> - Text("Test $paddingVals") - } -} \ No newline at end of file diff --git a/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/BottomNavigationBar.kt b/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/BottomNavigationBar.kt new file mode 100644 index 0000000..5513015 --- /dev/null +++ b/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/BottomNavigationBar.kt @@ -0,0 +1,62 @@ +package de.cdaut.dbtapp.components + +import androidx.compose.material3.Icon +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.platform.LocalContext +import androidx.navigation.NavController +import androidx.navigation.NavGraph.Companion.findStartDestination +import de.cdaut.dbtapp.navigation.BottomNavigationItem + + +@Composable +fun BottomNavigationBar(navController: NavController) { + var context = LocalContext.current + //remember the currently selected view + var navigationSelectedItem by remember { + mutableIntStateOf( + //default view is home + BottomNavigationItem().bottomNavigationItems(ctx = context) + .find { item -> item.label == "Home" }!!.idx + ) + } + + NavigationBar { + //Create an entry in the bottom bar for each view + BottomNavigationItem().bottomNavigationItems(ctx = context).sortedBy { item -> item.idx } + .forEachIndexed { index, item -> + NavigationBarItem( + selected = index == navigationSelectedItem, + //label is only visible iff item is selected + label = { + if (index == navigationSelectedItem) { + Text(item.label) + } + }, + icon = { + Icon( + item.icon, + contentDescription = item.label + ) + }, + //navigate to the target view + onClick = { + navigationSelectedItem = index + navController.navigate(item.route) { + popUpTo(navController.graph.findStartDestination().id) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + } + ) + } + } +} diff --git a/DBTApp/app/src/main/java/de/cdaut/dbtapp/navigation/BottomNavigationItem.kt b/DBTApp/app/src/main/java/de/cdaut/dbtapp/navigation/BottomNavigationItem.kt index 375ba6a..2d3bf49 100644 --- a/DBTApp/app/src/main/java/de/cdaut/dbtapp/navigation/BottomNavigationItem.kt +++ b/DBTApp/app/src/main/java/de/cdaut/dbtapp/navigation/BottomNavigationItem.kt @@ -1,16 +1,16 @@ package de.cdaut.dbtapp.navigation -import android.content.res.Resources +import android.content.Context import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.MenuBook import androidx.compose.material.icons.filled.CalendarToday import androidx.compose.material.icons.filled.Checklist import androidx.compose.material.icons.filled.Home -import androidx.compose.material.icons.filled.MenuBook import androidx.compose.material.icons.outlined.Star import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.core.content.ContextCompat.getString import de.cdaut.dbtapp.R -import de.cdaut.dbtapp.navigation.BottomNavigationItem data class BottomNavigationItem( val label: String = "", @@ -18,34 +18,34 @@ data class BottomNavigationItem( val route: String = "", val idx: Int = 0 ) { - fun bottomNavigationItems(): List { + fun bottomNavigationItems(ctx: Context): List { return listOf( BottomNavigationItem( - label = Resources.getSystem().getString(R.string.label_tracking), + label = getString(ctx, R.string.label_tracking), icon = Icons.Filled.CalendarToday, route = Screens.Tracking.route, idx = 0 ), BottomNavigationItem( - label = Resources.getSystem().getString(R.string.label_skillslist), + label = getString(ctx, R.string.label_skillslist), icon = Icons.AutoMirrored.Filled.MenuBook, route = Screens.Skillslist.route, idx = 1 ), BottomNavigationItem( - label = Resources.getSystem().getString(R.string.label_home), + label = getString(ctx, R.string.label_home), icon = Icons.Filled.Home, route = Screens.Home.route, idx = 2 ), BottomNavigationItem( - label = Resources.getSystem().getString(R.string.label_favourites), + label = getString(ctx, R.string.label_favourites), icon = Icons.Outlined.Star, route = Screens.Favourites.route, idx = 3 ), BottomNavigationItem( - label = Resources.getSystem().getString(R.string.label_skillschains), + label = getString(ctx, R.string.label_skillschains), icon = Icons.Filled.Checklist, route = Screens.Skillschains.route, idx = 4 diff --git a/DBTApp/app/src/main/res/values-de/strings.xml b/DBTApp/app/src/main/res/values-de/strings.xml index 7873163..6c2bae3 100644 --- a/DBTApp/app/src/main/res/values-de/strings.xml +++ b/DBTApp/app/src/main/res/values-de/strings.xml @@ -6,4 +6,5 @@ Tracking Favoriten Skillsketten + Notfallknopf \ No newline at end of file diff --git a/DBTApp/app/src/main/res/values/strings.xml b/DBTApp/app/src/main/res/values/strings.xml index 99eb4dd..1f3ac30 100644 --- a/DBTApp/app/src/main/res/values/strings.xml +++ b/DBTApp/app/src/main/res/values/strings.xml @@ -5,4 +5,5 @@ Tracking Favourites Skills Chains + Emergency Button \ No newline at end of file