diff --git a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md index 35dd55033b78..68b9f677e2db 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md @@ -1,6 +1,10 @@ +## 2.4.5 + +* Fixes Initial padding not working when map has not been created yet. + ## 2.4.4 -* Fixes Points losing precision when converting to LatLng +* Fixes Points losing precision when converting to LatLng. * Updates minimum Flutter version to 3.0. ## 2.4.3 diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java index 66d3e283b8df..a57cd1a34c97 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapController.java @@ -70,7 +70,7 @@ final class GoogleMapController private boolean trafficEnabled = false; private boolean buildingsEnabled = true; private boolean disposed = false; - private final float density; + @VisibleForTesting final float density; private MethodChannel.Result mapReadyResult; private final Context context; private final LifecycleProvider lifecycleProvider; @@ -84,6 +84,7 @@ final class GoogleMapController private List initialPolylines; private List initialCircles; private List> initialTileOverlays; + @VisibleForTesting List initialPadding; GoogleMapController( int id, @@ -209,6 +210,13 @@ public void onMapReady(GoogleMap googleMap) { updateInitialPolylines(); updateInitialCircles(); updateInitialTileOverlays(); + if (initialPadding != null && initialPadding.size() == 4) { + setPadding( + initialPadding.get(0), + initialPadding.get(1), + initialPadding.get(2), + initialPadding.get(3)); + } } @Override @@ -741,7 +749,22 @@ public void setPadding(float top, float left, float bottom, float right) { (int) (top * density), (int) (right * density), (int) (bottom * density)); + } else { + setInitialPadding(top, left, bottom, right); + } + } + + @VisibleForTesting + void setInitialPadding(float top, float left, float bottom, float right) { + if (initialPadding == null) { + initialPadding = new ArrayList<>(); + } else { + initialPadding.clear(); } + initialPadding.add(top); + initialPadding.add(left); + initialPadding.add(bottom); + initialPadding.add(right); } @Override diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java index d8082b57e3db..52576962ba8d 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/src/test/java/io/flutter/plugins/googlemaps/GoogleMapControllerTest.java @@ -4,10 +4,12 @@ package io.flutter.plugins.googlemaps; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.content.Context; @@ -20,6 +22,7 @@ import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import java.util.HashMap; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -145,4 +148,22 @@ public void MethodCalledAfterControllerIsDestroyed() throws InterruptedException argument.getValue().onMapLoaded(); verify(mapView, never()).invalidate(); } + + @Test + public void OnMapReadySetsPaddingIfInitialPaddingIsThere() { + float padding = 10f; + int paddingWithDensity = (int) (padding * googleMapController.density); + googleMapController.setInitialPadding(padding, padding, padding, padding); + googleMapController.onMapReady(mockGoogleMap); + verify(mockGoogleMap, times(1)) + .setPadding(paddingWithDensity, paddingWithDensity, paddingWithDensity, paddingWithDensity); + } + + @Test + public void SetPaddingStoresThePaddingValuesInInInitialPaddingWhenGoogleMapIsNull() { + assertNull(googleMapController.initialPadding); + googleMapController.setPadding(0f, 0f, 0f, 0f); + assertNotNull(googleMapController.initialPadding); + Assert.assertEquals(4, googleMapController.initialPadding.size()); + } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index 0e2842bf24f2..cf8bc81e7e7c 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_android description: Android implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/plugins/tree/main/packages/google_maps_flutter/google_maps_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.4.4 +version: 2.4.5 environment: sdk: ">=2.14.0 <3.0.0"