4
4
5
5
package io .flutter .plugins .googlemaps ;
6
6
7
+ import static com .google .android .gms .maps .GoogleMap .MAP_TYPE_HYBRID ;
8
+ import static com .google .android .gms .maps .GoogleMap .MAP_TYPE_NONE ;
9
+ import static com .google .android .gms .maps .GoogleMap .MAP_TYPE_NORMAL ;
10
+ import static com .google .android .gms .maps .GoogleMap .MAP_TYPE_SATELLITE ;
11
+ import static com .google .android .gms .maps .GoogleMap .MAP_TYPE_TERRAIN ;
12
+
7
13
import android .content .res .AssetManager ;
8
14
import android .graphics .Bitmap ;
9
15
import android .graphics .BitmapFactory ;
44
50
/** Conversions between JSON-like values and GoogleMaps data types. */
45
51
class Convert {
46
52
// These constants must match the corresponding constants in serialization.dart
47
- public static final String HEATMAPS_TO_ADD_KEY = "heatmapsToAdd" ;
48
53
public static final String HEATMAP_ID_KEY = "heatmapId" ;
49
54
public static final String HEATMAP_DATA_KEY = "data" ;
50
55
public static final String HEATMAP_GRADIENT_KEY = "gradient" ;
@@ -313,6 +318,16 @@ private static boolean toBoolean(Object o) {
313
318
return (Boolean ) o ;
314
319
}
315
320
321
+ static @ NonNull CameraPosition cameraPositionFromPigeon (
322
+ @ NonNull Messages .PlatformCameraPosition position ) {
323
+ final CameraPosition .Builder builder = CameraPosition .builder ();
324
+ builder .bearing (position .getBearing ().floatValue ());
325
+ builder .target (latLngFromPigeon (position .getTarget ()));
326
+ builder .tilt (position .getTilt ().floatValue ());
327
+ builder .zoom (position .getZoom ().floatValue ());
328
+ return builder .build ();
329
+ }
330
+
316
331
static CameraPosition toCameraPosition (Object o ) {
317
332
final Map <?, ?> data = toMap (o );
318
333
final CameraPosition .Builder builder = CameraPosition .builder ();
@@ -364,14 +379,30 @@ private static float toFloat(Object o) {
364
379
return ((Number ) o ).floatValue ();
365
380
}
366
381
367
- private static Float toFloatWrapper ( Object o ) {
368
- return (o == null ) ? null : toFloat ( o );
382
+ private static @ Nullable Float nullableDoubleToFloat ( @ Nullable Double d ) {
383
+ return (d == null ) ? null : d . floatValue ( );
369
384
}
370
385
371
386
private static int toInt (Object o ) {
372
387
return ((Number ) o ).intValue ();
373
388
}
374
389
390
+ static int toMapType (@ NonNull Messages .PlatformMapType type ) {
391
+ switch (type ) {
392
+ case NONE :
393
+ return MAP_TYPE_NONE ;
394
+ case NORMAL :
395
+ return MAP_TYPE_NORMAL ;
396
+ case SATELLITE :
397
+ return MAP_TYPE_SATELLITE ;
398
+ case TERRAIN :
399
+ return MAP_TYPE_TERRAIN ;
400
+ case HYBRID :
401
+ return MAP_TYPE_HYBRID ;
402
+ }
403
+ return MAP_TYPE_NORMAL ;
404
+ }
405
+
375
406
static @ Nullable MapsInitializer .Renderer toMapRendererType (
376
407
@ Nullable Messages .PlatformRendererType type ) {
377
408
if (type == null ) {
@@ -396,49 +427,17 @@ private static int toInt(Object o) {
396
427
.build ();
397
428
}
398
429
399
- static Object latLngBoundsToJson (LatLngBounds latLngBounds ) {
400
- final Map <String , Object > arguments = new HashMap <>(2 );
401
- arguments .put ("southwest" , latLngToJson (latLngBounds .southwest ));
402
- arguments .put ("northeast" , latLngToJson (latLngBounds .northeast ));
403
- return arguments ;
404
- }
405
-
406
430
static Messages .PlatformLatLngBounds latLngBoundsToPigeon (LatLngBounds latLngBounds ) {
407
431
return new Messages .PlatformLatLngBounds .Builder ()
408
432
.setNortheast (latLngToPigeon (latLngBounds .northeast ))
409
433
.setSouthwest (latLngToPigeon (latLngBounds .southwest ))
410
434
.build ();
411
435
}
412
436
413
- static Object markerIdToJson (String markerId ) {
414
- if (markerId == null ) {
415
- return null ;
416
- }
417
- final Map <String , Object > data = new HashMap <>(1 );
418
- data .put ("markerId" , markerId );
419
- return data ;
420
- }
421
-
422
- static Object polygonIdToJson (String polygonId ) {
423
- if (polygonId == null ) {
424
- return null ;
425
- }
426
- final Map <String , Object > data = new HashMap <>(1 );
427
- data .put ("polygonId" , polygonId );
428
- return data ;
429
- }
430
-
431
- static Object polylineIdToJson (String polylineId ) {
432
- if (polylineId == null ) {
433
- return null ;
434
- }
435
- final Map <String , Object > data = new HashMap <>(1 );
436
- data .put ("polylineId" , polylineId );
437
- return data ;
438
- }
439
-
440
- static Object latLngToJson (LatLng latLng ) {
441
- return Arrays .asList (latLng .latitude , latLng .longitude );
437
+ static @ NonNull LatLngBounds latLngBoundsFromPigeon (
438
+ @ NonNull Messages .PlatformLatLngBounds bounds ) {
439
+ return new LatLngBounds (
440
+ latLngFromPigeon (bounds .getSouthwest ()), latLngFromPigeon (bounds .getNortheast ()));
442
441
}
443
442
444
443
static Messages .PlatformLatLng latLngToPigeon (LatLng latLng ) {
@@ -571,92 +570,90 @@ private static String toString(Object o) {
571
570
return (String ) o ;
572
571
}
573
572
574
- static void interpretGoogleMapOptions ( Object o , GoogleMapOptionsSink sink ) {
575
- final Map <?, ?> data = toMap ( o );
576
- final Object cameraTargetBounds = data . get ( "cameraTargetBounds" );
573
+ static void interpretMapConfiguration (
574
+ @ NonNull Messages . PlatformMapConfiguration config , @ NonNull GoogleMapOptionsSink sink ) {
575
+ final Messages . PlatformCameraTargetBounds cameraTargetBounds = config . getCameraTargetBounds ( );
577
576
if (cameraTargetBounds != null ) {
578
- final List <?> targetData = toList ( cameraTargetBounds );
579
- sink .setCameraTargetBounds (toLatLngBounds ( targetData . get ( 0 ) ));
577
+ final @ Nullable Messages . PlatformLatLngBounds bounds = cameraTargetBounds . getBounds ( );
578
+ sink .setCameraTargetBounds (bounds == null ? null : latLngBoundsFromPigeon ( bounds ));
580
579
}
581
- final Object compassEnabled = data . get ( "compassEnabled" );
580
+ final Boolean compassEnabled = config . getCompassEnabled ( );
582
581
if (compassEnabled != null ) {
583
- sink .setCompassEnabled (toBoolean ( compassEnabled ) );
582
+ sink .setCompassEnabled (compassEnabled );
584
583
}
585
- final Object mapToolbarEnabled = data . get ( "mapToolbarEnabled" );
584
+ final Boolean mapToolbarEnabled = config . getMapToolbarEnabled ( );
586
585
if (mapToolbarEnabled != null ) {
587
- sink .setMapToolbarEnabled (toBoolean ( mapToolbarEnabled ) );
586
+ sink .setMapToolbarEnabled (mapToolbarEnabled );
588
587
}
589
- final Object mapType = data . get ( "mapType" );
588
+ final Messages . PlatformMapType mapType = config . getMapType ( );
590
589
if (mapType != null ) {
591
- sink .setMapType (toInt (mapType ));
590
+ sink .setMapType (toMapType (mapType ));
592
591
}
593
- final Object minMaxZoomPreference = data . get ( "minMaxZoomPreference" );
592
+ final Messages . PlatformZoomRange minMaxZoomPreference = config . getMinMaxZoomPreference ( );
594
593
if (minMaxZoomPreference != null ) {
595
- final List <?> zoomPreferenceData = toList (minMaxZoomPreference );
596
- sink .setMinMaxZoomPreference ( //
597
- toFloatWrapper (zoomPreferenceData .get (0 )), //
598
- toFloatWrapper (zoomPreferenceData .get (1 )));
594
+ sink .setMinMaxZoomPreference (
595
+ nullableDoubleToFloat (minMaxZoomPreference .getMin ()),
596
+ nullableDoubleToFloat (minMaxZoomPreference .getMax ()));
599
597
}
600
- final Object padding = data . get ( "padding" );
598
+ final Messages . PlatformEdgeInsets padding = config . getPadding ( );
601
599
if (padding != null ) {
602
- final List <?> paddingData = toList (padding );
603
600
sink .setPadding (
604
- toFloat ( paddingData . get ( 0 ) ),
605
- toFloat ( paddingData . get ( 1 ) ),
606
- toFloat ( paddingData . get ( 2 ) ),
607
- toFloat ( paddingData . get ( 3 ) ));
601
+ padding . getTop (). floatValue ( ),
602
+ padding . getLeft (). floatValue ( ),
603
+ padding . getBottom (). floatValue ( ),
604
+ padding . getRight (). floatValue ( ));
608
605
}
609
- final Object rotateGesturesEnabled = data . get ( "rotateGesturesEnabled" );
606
+ final Boolean rotateGesturesEnabled = config . getRotateGesturesEnabled ( );
610
607
if (rotateGesturesEnabled != null ) {
611
- sink .setRotateGesturesEnabled (toBoolean ( rotateGesturesEnabled ) );
608
+ sink .setRotateGesturesEnabled (rotateGesturesEnabled );
612
609
}
613
- final Object scrollGesturesEnabled = data . get ( "scrollGesturesEnabled" );
610
+ final Boolean scrollGesturesEnabled = config . getScrollGesturesEnabled ( );
614
611
if (scrollGesturesEnabled != null ) {
615
- sink .setScrollGesturesEnabled (toBoolean ( scrollGesturesEnabled ) );
612
+ sink .setScrollGesturesEnabled (scrollGesturesEnabled );
616
613
}
617
- final Object tiltGesturesEnabled = data . get ( "tiltGesturesEnabled" );
614
+ final Boolean tiltGesturesEnabled = config . getTiltGesturesEnabled ( );
618
615
if (tiltGesturesEnabled != null ) {
619
- sink .setTiltGesturesEnabled (toBoolean ( tiltGesturesEnabled ) );
616
+ sink .setTiltGesturesEnabled (tiltGesturesEnabled );
620
617
}
621
- final Object trackCameraPosition = data . get ( "trackCameraPosition" );
618
+ final Boolean trackCameraPosition = config . getTrackCameraPosition ( );
622
619
if (trackCameraPosition != null ) {
623
- sink .setTrackCameraPosition (toBoolean ( trackCameraPosition ) );
620
+ sink .setTrackCameraPosition (trackCameraPosition );
624
621
}
625
- final Object zoomGesturesEnabled = data . get ( "zoomGesturesEnabled" );
622
+ final Boolean zoomGesturesEnabled = config . getZoomGesturesEnabled ( );
626
623
if (zoomGesturesEnabled != null ) {
627
- sink .setZoomGesturesEnabled (toBoolean ( zoomGesturesEnabled ) );
624
+ sink .setZoomGesturesEnabled (zoomGesturesEnabled );
628
625
}
629
- final Object liteModeEnabled = data . get ( "liteModeEnabled" );
626
+ final Boolean liteModeEnabled = config . getLiteModeEnabled ( );
630
627
if (liteModeEnabled != null ) {
631
- sink .setLiteModeEnabled (toBoolean ( liteModeEnabled ) );
628
+ sink .setLiteModeEnabled (liteModeEnabled );
632
629
}
633
- final Object myLocationEnabled = data . get ( "myLocationEnabled" );
630
+ final Boolean myLocationEnabled = config . getMyLocationEnabled ( );
634
631
if (myLocationEnabled != null ) {
635
- sink .setMyLocationEnabled (toBoolean ( myLocationEnabled ) );
632
+ sink .setMyLocationEnabled (myLocationEnabled );
636
633
}
637
- final Object zoomControlsEnabled = data . get ( "zoomControlsEnabled" );
634
+ final Boolean zoomControlsEnabled = config . getZoomControlsEnabled ( );
638
635
if (zoomControlsEnabled != null ) {
639
- sink .setZoomControlsEnabled (toBoolean ( zoomControlsEnabled ) );
636
+ sink .setZoomControlsEnabled (zoomControlsEnabled );
640
637
}
641
- final Object myLocationButtonEnabled = data . get ( "myLocationButtonEnabled" );
638
+ final Boolean myLocationButtonEnabled = config . getMyLocationButtonEnabled ( );
642
639
if (myLocationButtonEnabled != null ) {
643
- sink .setMyLocationButtonEnabled (toBoolean ( myLocationButtonEnabled ) );
640
+ sink .setMyLocationButtonEnabled (myLocationButtonEnabled );
644
641
}
645
- final Object indoorEnabled = data . get ( "indoorEnabled" );
642
+ final Boolean indoorEnabled = config . getIndoorViewEnabled ( );
646
643
if (indoorEnabled != null ) {
647
- sink .setIndoorEnabled (toBoolean ( indoorEnabled ) );
644
+ sink .setIndoorEnabled (indoorEnabled );
648
645
}
649
- final Object trafficEnabled = data . get ( "trafficEnabled" );
646
+ final Boolean trafficEnabled = config . getTrafficEnabled ( );
650
647
if (trafficEnabled != null ) {
651
- sink .setTrafficEnabled (toBoolean ( trafficEnabled ) );
648
+ sink .setTrafficEnabled (trafficEnabled );
652
649
}
653
- final Object buildingsEnabled = data . get ( "buildingsEnabled" );
650
+ final Boolean buildingsEnabled = config . getBuildingsEnabled ( );
654
651
if (buildingsEnabled != null ) {
655
- sink .setBuildingsEnabled (toBoolean ( buildingsEnabled ) );
652
+ sink .setBuildingsEnabled (buildingsEnabled );
656
653
}
657
- final Object style = data . get ( "style" );
654
+ final String style = config . getStyle ( );
658
655
if (style != null ) {
659
- sink .setMapStyle (toString ( style ) );
656
+ sink .setMapStyle (style );
660
657
}
661
658
}
662
659
@@ -869,7 +866,7 @@ static String interpretCircleOptions(Map<String, ?> data, CircleOptionsSink sink
869
866
/**
870
867
* Set the options in the given heatmap object to the given sink.
871
868
*
872
- * @param o the object expected to be a Map containing the heatmap options. The options map is
869
+ * @param data the object expected to be a Map containing the heatmap options. The options map is
873
870
* expected to have the following structure:
874
871
* <pre>{@code
875
872
* {
0 commit comments