Skip to content

Commit

Permalink
Use a latch for zoom animation
Browse files Browse the repository at this point in the history
  • Loading branch information
bentrengrove committed Feb 23, 2022
1 parent 8483100 commit e24c8f7
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class CityMapViewTests {
val composeTestRule = createAndroidComposeRule<MainActivity>()

private lateinit var mapState: CameraPositionState
private lateinit var zoomLatch: CountDownLatch

@Before
fun setUp() {
Expand All @@ -67,6 +68,7 @@ class CityMapViewTests {
cityDetails = destinationsRepository.getDestination(MADRID.name)!!

val countDownLatch = CountDownLatch(1)
zoomLatch = CountDownLatch(1)

composeTestRule.setContent {
CraneTheme {
Expand All @@ -77,7 +79,8 @@ class CityMapViewTests {
onMapLoadedWithCameraState = { cameraPositionState ->
mapState = cameraPositionState
countDownLatch.countDown()
}
},
onZoomChanged = { zoomLatch.countDown() }
)
}
}
Expand Down Expand Up @@ -105,7 +108,7 @@ class CityMapViewTests {
.performClick()

// Wait for the animation to happen
composeTestRule.waitForIdle()
assertTrue("Zoom timed out", zoomLatch.await(30, TimeUnit.SECONDS))

assertTrue(zoomBefore < mapState.position.zoom)
}
Expand All @@ -118,7 +121,7 @@ class CityMapViewTests {
.performClick()

// Wait for the animation to happen
composeTestRule.waitForIdle()
assertTrue("Zoom timed out", zoomLatch.await(30, TimeUnit.SECONDS))

assertTrue(zoomBefore > mapState.position.zoom)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ fun CityMapView(
latitude: String,
longitude: String,
onMapLoadedWithCameraState: ((CameraPositionState) -> Unit)? = null, // Exposed for use in tests
onZoomChanged: (() -> Unit)? = null
) {
val cityLocation = remember(latitude, longitude) {
LatLng(latitude.toDouble(), longitude.toDouble())
Expand All @@ -199,7 +200,8 @@ fun CityMapView(
cameraPositionState = cameraPositionState,
onMapLoaded = {
onMapLoadedWithCameraState?.invoke(cameraPositionState)
}
},
onZoomChanged = onZoomChanged
) {
Marker(position = cityLocation)
}
Expand All @@ -213,6 +215,7 @@ fun CityMapView(
fun MapViewContainer(
cameraPositionState: CameraPositionState,
onMapLoaded: () -> Unit = {},
onZoomChanged: (() -> Unit)? = null,
content: (@Composable () -> Unit)? = null
) {
val mapProperties = remember {
Expand All @@ -230,8 +233,18 @@ fun MapViewContainer(
val animationScope = rememberCoroutineScope()
Column {
ZoomControls(
onZoomIn = { animationScope.launch { cameraPositionState.animate(CameraUpdateFactory.zoomIn()) } },
onZoomOut = { animationScope.launch { cameraPositionState.animate(CameraUpdateFactory.zoomOut()) } }
onZoomIn = {
animationScope.launch {
cameraPositionState.animate(CameraUpdateFactory.zoomIn())
onZoomChanged?.invoke()
}
},
onZoomOut = {
animationScope.launch {
cameraPositionState.animate(CameraUpdateFactory.zoomOut())
onZoomChanged?.invoke()
}
}
)

GoogleMap(
Expand Down

0 comments on commit e24c8f7

Please sign in to comment.