Skip to content

Commit 934fee6

Browse files
committed
feat: Add NavigationViewDelegate
Adds NavigationViewDelegate to support NavigationView in the navigation sample app. This change allows the navigation sample app to use NavigationView, which provides turn-by-turn navigation functionality. The NavigationViewDelegate handles the lifecycle and rendering of the NavigationView, ensuring that it is properly integrated into the Jetpack Compose UI. Uses a MarkerComposable to demonstrate the map really is a composable
1 parent bcdf6b0 commit 934fee6

File tree

7 files changed

+280
-100
lines changed

7 files changed

+280
-100
lines changed

gradle.properties

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
1717
android.useAndroidX=true
1818
# Automatically convert third-party libraries to use AndroidX
1919
# (not needed, since no requested libraries are pre-AndroidX)
20-
android.enableJetifier=false
20+
#android.enableJetifier=false
21+
# This is needed for the navigation SDK library. It needs the recycler view.
22+
android.enableJetifier=true
2123
# Kotlin code style for this project: "official" or "obsolete":
2224
kotlin.code.style=official
2325

navigation-app/build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ dependencies {
8383

8484
implementation(libs.play.services.location)
8585

86-
// testImplementation(libs.robolectric)
8786
testImplementation(libs.androidx.core)
8887
testImplementation(libs.truth)
8988

@@ -94,7 +93,6 @@ dependencies {
9493

9594
// Accompanist permission helper
9695
implementation(libs.accompanist.permissions)
97-
9896
}
9997

10098
secrets {

navigation-app/src/main/java/com/google/maps/android/compose/navigation/MainActivity.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
2323
import com.google.accompanist.permissions.ExperimentalPermissionsApi
2424
import com.google.accompanist.permissions.rememberMultiplePermissionsState
2525
import com.google.android.gms.maps.model.LatLng
26+
import com.google.android.libraries.navigation.NavigationApi
2627
import com.google.maps.android.compose.navigation.ui.theme.AndroidmapscomposeTheme
2728
import kotlinx.coroutines.launch
2829

2930
val defaultLocation = LatLng(39.9828503662161, -105.71835147137016)
3031

3132
@OptIn(ExperimentalPermissionsApi::class)
3233
class MainActivity : ComponentActivity() {
33-
private val myViewModel: MainViewModel by viewModels { MainViewModel.Factory }
34+
private val myViewModel: NavigationViewModel by viewModels { NavigationViewModel.Factory }
3435

3536
override fun onResume() {
3637
super.onResume()
@@ -40,6 +41,9 @@ class MainActivity : ComponentActivity() {
4041
override fun onCreate(savedInstanceState: Bundle?) {
4142
super.onCreate(savedInstanceState)
4243
enableEdgeToEdge()
44+
45+
NavigationApi.getNavigator(this, myViewModel)
46+
4347
setContent {
4448
val context = LocalContext.current
4549
val snackbarHostState by remember { mutableStateOf(SnackbarHostState()) }

navigation-app/src/main/java/com/google/maps/android/compose/navigation/MainViewModel.kt

Lines changed: 0 additions & 95 deletions
This file was deleted.

navigation-app/src/main/java/com/google/maps/android/compose/navigation/NavigationScreen.kt

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,31 @@
11
package com.google.maps.android.compose.navigation
22

3+
import androidx.compose.foundation.Image
4+
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.layout.Box
36
import androidx.compose.foundation.layout.Column
47
import androidx.compose.foundation.layout.fillMaxSize
8+
import androidx.compose.foundation.layout.height
9+
import androidx.compose.foundation.layout.width
10+
import androidx.compose.foundation.shape.RoundedCornerShape
511
import androidx.compose.runtime.Composable
612
import androidx.compose.runtime.LaunchedEffect
13+
import androidx.compose.ui.Alignment
714
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.draw.clip
16+
import androidx.compose.ui.graphics.Color
17+
import androidx.compose.ui.res.painterResource
18+
import androidx.compose.ui.unit.dp
819
import com.google.android.gms.maps.CameraUpdateFactory
920
import com.google.android.gms.maps.model.CameraPosition
1021
import com.google.android.gms.maps.model.LatLng
1122
import com.google.android.libraries.navigation.NavigationView
1223
import com.google.maps.android.compose.ComposeMapColorScheme
1324
import com.google.maps.android.compose.GoogleMap
25+
import com.google.maps.android.compose.MarkerComposable
1426
import com.google.maps.android.compose.navigation.components.MovableMarker
1527
import com.google.maps.android.compose.rememberCameraPositionState
28+
import com.google.maps.android.compose.rememberMarkerState
1629

1730
@Composable
1831
fun NavigationScreen(
@@ -54,6 +67,25 @@ fun NavigationScreen(
5467
title = "User location",
5568
)
5669
}
70+
71+
MarkerComposable(
72+
title = "Bigfoot",
73+
state = rememberMarkerState(position = LatLng(39.99932703674056, -105.28152457787887)),
74+
) {
75+
Box(
76+
modifier = Modifier
77+
.width(48.dp)
78+
.height(48.dp)
79+
.clip(RoundedCornerShape(16.dp))
80+
.background(Color.Transparent),
81+
contentAlignment = Alignment.Center,
82+
) {
83+
Image(
84+
painter = painterResource(R.drawable.bigfoot),
85+
contentDescription = ""
86+
)
87+
}
88+
}
5789
}
5890
}
59-
}
91+
}

0 commit comments

Comments
 (0)