diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..bfed76e --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +DeNa Drive \ No newline at end of file diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b86273d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..b268ef3 --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..97f0a8e --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..7061a0d --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,61 @@ + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..c224ad5 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..74dd639 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..16660f1 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 76a45b8..6249dd2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -56,4 +56,6 @@ dependencies { androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) + + implementation(libs.androidx.navigation.compose) } \ No newline at end of file diff --git a/app/src/main/java/com/bbc/denadrive/MainActivity.kt b/app/src/main/java/com/bbc/denadrive/MainActivity.kt index 3e64401..8adc934 100644 --- a/app/src/main/java/com/bbc/denadrive/MainActivity.kt +++ b/app/src/main/java/com/bbc/denadrive/MainActivity.kt @@ -11,22 +11,28 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview +import androidx.navigation.compose.rememberNavController import com.bbc.denadrive.ui.theme.DeNaDriveTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - enableEdgeToEdge() + setContent { - DeNaDriveTheme { - Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> - Greeting( - name = "Android", - modifier = Modifier.padding(innerPadding) - ) - } - } + val navController = rememberNavController() + NavigationGraph(navController) } +// enableEdgeToEdge() +// setContent { +// DeNaDriveTheme { +// Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> +// Greeting( +// name = "Android", +// modifier = Modifier.padding(innerPadding) +// ) +// } +// } +// } } } diff --git a/app/src/main/java/com/bbc/denadrive/MyNavGraph.kt b/app/src/main/java/com/bbc/denadrive/MyNavGraph.kt new file mode 100644 index 0000000..f1fea76 --- /dev/null +++ b/app/src/main/java/com/bbc/denadrive/MyNavGraph.kt @@ -0,0 +1,25 @@ +package com.bbc.denadrive + +import androidx.compose.runtime.Composable +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import com.bbc.denadrive.home.DetailsScreen +import com.bbc.denadrive.home.HomeScreen + +@Composable +fun NavigationGraph(navController: NavHostController) { + // Create a NavHost that defines the navigation graph + NavHost(navController = navController, startDestination = "home") { + // Define the home screen destination + composable("home") { HomeScreen(navController) } + + // Define the details screen destination with an argument + composable("details/{itemId}") { backStackEntry -> + // Retrieve the argument from the back stack entry + val itemId = backStackEntry.arguments?.getString("itemId") + // Pass the argument to the DetailsScreen + DetailsScreen(itemId, navController) + } + } +} diff --git a/app/src/main/java/com/bbc/denadrive/home/DebugScreens.kt b/app/src/main/java/com/bbc/denadrive/home/DebugScreens.kt new file mode 100644 index 0000000..50731d9 --- /dev/null +++ b/app/src/main/java/com/bbc/denadrive/home/DebugScreens.kt @@ -0,0 +1,184 @@ +package com.bbc.denadrive.home + +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.navigation.NavHostController +//import androidx.compose.foundation.background +//import androidx.compose.foundation.clickable +//import androidx.compose.foundation.layout.* +//import androidx.compose.material3.* +//import androidx.compose.runtime.* +//import androidx.compose.ui.Alignment +//import androidx.compose.ui.Modifier +//import androidx.compose.ui.graphics.Color +//import androidx.compose.ui.unit.dp +//import androidx.compose.ui.unit.sp + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Menu +import androidx.compose.material.icons.filled.MoreVert +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +//import androidx.compose.material3.icons.Icons +//import androidx.compose.material3.icons.filled.Menu +//import androidx.compose.material3.icons.filled.MoreVert + +@Composable +fun HomeScreen(navController: NavHostController) { + Button(onClick = { navController.navigate("details/1") }) { + Text("Go to Details") + } +} + +@Composable +fun DetailsScreen(itemId: String?, navController: NavHostController) { + Text(text = "Details for item: $itemId") +} + + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun ScaffoldWithSidebar() { + // State to control the drawer + var isDrawerOpen by remember { mutableStateOf(false) } + + // ModalNavigationDrawer + ModalNavigationDrawer( + drawerState = rememberDrawerState(initialValue = DrawerValue.Closed), + drawerContent = { + // Drawer content + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp) + ) { + Text("Item 1", modifier = Modifier.clickable { /* Handle click */ }) + Spacer(modifier = Modifier.height(8.dp)) + Text("Item 2", modifier = Modifier.clickable { /* Handle click */ }) + Spacer(modifier = Modifier.height(8.dp)) + Text("Item 3", modifier = Modifier.clickable { /* Handle click */ }) + } + }, + content = { + // Main content of the screen + Scaffold( + topBar = { + TopAppBar( + title = { Text("My App") }, + navigationIcon = { + IconButton(onClick = { isDrawerOpen = true }) { + // Icon for the menu (three horizontal lines) + Icon(Icons.Filled.Menu, contentDescription = "Menu") + } + }, + actions = { + IconButton(onClick = { /* Handle settings click */ }) { + // Icon for the settings (three vertical dots) + Icon(Icons.Filled.MoreVert, contentDescription = "Settings") + } + } + ) + }, + content = { innerPadding -> + Box( + modifier = Modifier + .fillMaxSize() + .padding(innerPadding) + .padding(16.dp), + contentAlignment = Alignment.Center + ) { + Text("Main Content", fontSize = 24.sp) + } + } + ) + } + ) +} + +@Composable +fun MyApp() { + ScaffoldWithSidebar() +} + +@Composable +fun MainActivityContent() { + MyApp() +} + + +//@OptIn(ExperimentalMaterial3Api::class) +//@Composable +//fun ScaffoldWithSidebar() { +// // State to control the drawer +// var isDrawerOpen by remember { mutableStateOf(false) } +// +// // Main Scaffold +// Scaffold( +// topBar = { +// TopAppBar( +// title = { Text("My App") }, +// navigationIcon = { +// IconButton(onClick = { isDrawerOpen = true }) { +// // Icon for the menu (three horizontal lines) +// Icon(Icons.Filled.Menu, contentDescription = "Menu") +// } +// }, +// actions = { +// IconButton(onClick = { /* Handle settings click */ }) { +// // Icon for the settings (three vertical dots) +// Icon(Icons.Filled.MoreVert, contentDescription = "Settings") +// } +// } +// ) +// }, +// drawerContent = { +// // Drawer content +// Column( +// modifier = Modifier +// .fillMaxSize() +// .padding(16.dp) +// ) { +// Text("Item 1", modifier = Modifier.clickable { /* Handle click */ }) +// Spacer(modifier = Modifier.height(8.dp)) +// Text("Item 2", modifier = Modifier.clickable { /* Handle click */ }) +// Spacer(modifier = Modifier.height(8.dp)) +// Text("Item 3", modifier = Modifier.clickable { /* Handle click */ }) +// } +// }, +// drawerGesturesEnabled = true, +// drawerShape = MaterialTheme.shapes.large, +// drawerContentColor = MaterialTheme.colorScheme.background, +// drawerContainerColor = MaterialTheme.colorScheme.surface, +// content = { padding -> +// // Main content of the screen +// Box( +// modifier = Modifier +// .fillMaxSize() +// .padding(padding) +// .background(Color.White), +// contentAlignment = Alignment.Center +// ) { +// Text("Main Content", fontSize = 24.sp) +// } +// } +// ) +// +// // Handle drawer state +// if (isDrawerOpen) { +// // Close the drawer when clicking outside +// Box( +// modifier = Modifier +// .fillMaxSize() +// .background(Color.Black.copy(alpha = 0.5f)) +// .clickable { isDrawerOpen = false } +// ) +// } +//} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4d5cbd6..ab0d952 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,9 +8,11 @@ espressoCore = "3.6.1" lifecycleRuntimeKtx = "2.8.7" activityCompose = "1.10.1" composeBom = "2024.09.00" +navigationCompose = "2.8.8" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }