Skip to content

Commit bf991ee

Browse files
feat: add map padding (#232)
* feat: add map padding support * feat: add padding to map init params * refactor: general pr improvements * chore: format * chore: fix padding value presentation on example app * feat: add get padding * test: padding integration test --------- Co-authored-by: Joonas Kerttula <[email protected]>
1 parent d1c0cfb commit bf991ee

31 files changed

+1366
-378
lines changed

android/src/main/kotlin/com/google/maps/flutter/navigation/AndroidAutoBaseScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ open class AndroidAutoBaseScreen(carContext: CarContext) :
121121
mViewRegistry = viewRegistry
122122
mAutoMapView =
123123
GoogleMapsAutoMapView(
124-
GoogleMapOptions(),
124+
MapOptions(GoogleMapOptions(), null),
125125
viewRegistry,
126126
imageRegistry,
127127
navigationView,

android/src/main/kotlin/com/google/maps/flutter/navigation/Convert.kt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,28 +61,28 @@ object Convert {
6161
* @param options pigeon message [NavigationViewCreationOptionsDto].
6262
* @return Google Map Options [GoogleMapOptions].
6363
*/
64-
fun convertMapOptionsFromDto(options: MapOptionsDto): GoogleMapOptions {
65-
val mapOptions = GoogleMapOptions()
64+
fun convertMapOptionsFromDto(options: MapOptionsDto): MapOptions {
65+
val googleMapOptions = GoogleMapOptions()
6666

67-
mapOptions.camera(convertCameraPositionFromDto(options.cameraPosition))
68-
mapOptions.mapType(convertMapTypeFromDto(options.mapType))
69-
mapOptions.compassEnabled(options.compassEnabled)
70-
mapOptions.rotateGesturesEnabled(options.rotateGesturesEnabled)
71-
mapOptions.scrollGesturesEnabled(options.scrollGesturesEnabled)
72-
mapOptions.tiltGesturesEnabled(options.tiltGesturesEnabled)
73-
mapOptions.zoomGesturesEnabled(options.zoomGesturesEnabled)
74-
mapOptions.scrollGesturesEnabledDuringRotateOrZoom(
67+
googleMapOptions.camera(convertCameraPositionFromDto(options.cameraPosition))
68+
googleMapOptions.mapType(convertMapTypeFromDto(options.mapType))
69+
googleMapOptions.compassEnabled(options.compassEnabled)
70+
googleMapOptions.rotateGesturesEnabled(options.rotateGesturesEnabled)
71+
googleMapOptions.scrollGesturesEnabled(options.scrollGesturesEnabled)
72+
googleMapOptions.tiltGesturesEnabled(options.tiltGesturesEnabled)
73+
googleMapOptions.zoomGesturesEnabled(options.zoomGesturesEnabled)
74+
googleMapOptions.scrollGesturesEnabledDuringRotateOrZoom(
7575
options.scrollGesturesEnabledDuringRotateOrZoom
7676
)
77-
mapOptions.mapToolbarEnabled(options.mapToolbarEnabled)
77+
googleMapOptions.mapToolbarEnabled(options.mapToolbarEnabled)
7878
options.cameraTargetBounds?.let {
79-
mapOptions.latLngBoundsForCameraTarget(convertLatLngBoundsFromDto(it))
79+
googleMapOptions.latLngBoundsForCameraTarget(convertLatLngBoundsFromDto(it))
8080
}
81-
options.minZoomPreference?.let { mapOptions.minZoomPreference(it.toFloat()) }
82-
options.maxZoomPreference?.let { mapOptions.maxZoomPreference(it.toFloat()) }
83-
mapOptions.zoomControlsEnabled(options.zoomControlsEnabled)
81+
options.minZoomPreference?.let { googleMapOptions.minZoomPreference(it.toFloat()) }
82+
options.maxZoomPreference?.let { googleMapOptions.maxZoomPreference(it.toFloat()) }
83+
googleMapOptions.zoomControlsEnabled(options.zoomControlsEnabled)
8484

85-
return mapOptions
85+
return MapOptions(googleMapOptions, options.padding)
8686
}
8787

8888
/**

android/src/main/kotlin/com/google/maps/flutter/navigation/GoogleMapView.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,19 @@ package com.google.maps.flutter.navigation
1818

1919
import android.content.Context
2020
import android.view.View
21-
import com.google.android.gms.maps.GoogleMapOptions
2221
import com.google.android.gms.maps.MapView
2322
import io.flutter.plugin.platform.PlatformView
2423

2524
class GoogleMapView
2625
internal constructor(
2726
context: Context,
28-
mapOptions: GoogleMapOptions,
27+
mapOptions: MapOptions,
2928
viewId: Int,
3029
viewEventApi: ViewEventApi,
3130
private val viewRegistry: GoogleMapsViewRegistry,
3231
imageRegistry: ImageRegistry,
3332
) : PlatformView, GoogleMapsBaseMapView(viewId, mapOptions, viewEventApi, imageRegistry) {
34-
private val _mapView: MapView = MapView(context, mapOptions)
33+
private val _mapView: MapView = MapView(context, mapOptions.googleMapOptions)
3534

3635
override fun getView(): View {
3736
return _mapView
@@ -51,6 +50,7 @@ internal constructor(
5150
initListeners()
5251
imageRegistry.mapViewInitializationComplete()
5352
mapReady()
53+
mapOptions.padding?.let { setPadding(it) }
5454
invalidateViewAfterMapLoad()
5555
}
5656
}

android/src/main/kotlin/com/google/maps/flutter/navigation/GoogleMapsAutoMapView.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@ package com.google.maps.flutter.navigation
1818

1919
import android.view.View
2020
import com.google.android.gms.maps.GoogleMap
21-
import com.google.android.gms.maps.GoogleMapOptions
2221
import com.google.android.libraries.navigation.NavigationViewForAuto
2322

2423
class GoogleMapsAutoMapView
2524
internal constructor(
26-
mapOptions: GoogleMapOptions,
25+
mapOptions: MapOptions,
2726
private val viewRegistry: GoogleMapsViewRegistry,
2827
imageRegistry: ImageRegistry,
2928
private val mapView: NavigationViewForAuto,

android/src/main/kotlin/com/google/maps/flutter/navigation/GoogleMapsAutoViewMessageHandler.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,4 +385,12 @@ class GoogleMapsAutoViewMessageHandler(private val viewRegistry: GoogleMapsViewR
385385
override fun isAutoScreenAvailable(): Boolean {
386386
return viewRegistry.getAndroidAutoView() != null
387387
}
388+
389+
override fun setPadding(padding: MapPaddingDto) {
390+
getView().setPadding(padding)
391+
}
392+
393+
override fun getPadding(): MapPaddingDto {
394+
return getView().getPadding()
395+
}
388396
}

android/src/main/kotlin/com/google/maps/flutter/navigation/GoogleMapsBaseMapView.kt

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import com.google.android.gms.maps.CameraUpdate
2525
import com.google.android.gms.maps.CameraUpdateFactory
2626
import com.google.android.gms.maps.GoogleMap
2727
import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener
28-
import com.google.android.gms.maps.GoogleMapOptions
2928
import com.google.android.gms.maps.model.CameraPosition
3029
import com.google.android.gms.maps.model.Circle
3130
import com.google.android.gms.maps.model.FollowMyLocationOptions
@@ -39,7 +38,7 @@ import com.google.android.libraries.navigation.NavigationView
3938

4039
abstract class GoogleMapsBaseMapView(
4140
protected val viewId: Int?,
42-
mapOptions: GoogleMapOptions,
41+
mapOptions: MapOptions,
4342
protected val viewEventApi: ViewEventApi?,
4443
private val imageRegistry: ImageRegistry,
4544
) {
@@ -59,6 +58,8 @@ abstract class GoogleMapsBaseMapView(
5958
private var _minZoomLevelPreference: Float? = null
6059
private var _maxZoomLevelPreference: Float? = null
6160

61+
private var _mapOptions: MapOptions? = null
62+
6263
// Nullable variable to hold the callback function
6364
private var _mapReadyCallback: ((Result<Unit>) -> Unit)? = null
6465
private var _loadedCallbackPending = false
@@ -100,8 +101,9 @@ abstract class GoogleMapsBaseMapView(
100101
}
101102

102103
init {
103-
_minZoomLevelPreference = mapOptions.minZoomPreference
104-
_maxZoomLevelPreference = mapOptions.maxZoomPreference
104+
_minZoomLevelPreference = mapOptions.googleMapOptions.minZoomPreference
105+
_maxZoomLevelPreference = mapOptions.googleMapOptions.maxZoomPreference
106+
_mapOptions = mapOptions
105107
}
106108

107109
protected fun mapReady() {
@@ -942,4 +944,19 @@ abstract class GoogleMapsBaseMapView(
942944
) {}
943945
}
944946
}
947+
948+
fun setPadding(padding: MapPaddingDto) {
949+
_mapOptions?.padding = padding
950+
getMap()
951+
.setPadding(
952+
padding.left.toInt(),
953+
padding.top.toInt(),
954+
padding.right.toInt(),
955+
padding.bottom.toInt(),
956+
)
957+
}
958+
959+
fun getPadding(): MapPaddingDto {
960+
return _mapOptions?.padding ?: MapPaddingDto(0, 0, 0, 0)
961+
}
945962
}

android/src/main/kotlin/com/google/maps/flutter/navigation/GoogleMapsNavigationView.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,20 @@ import android.content.Context
2020
import android.content.res.Configuration
2121
import android.view.View
2222
import com.google.android.gms.maps.CameraUpdateFactory
23-
import com.google.android.gms.maps.GoogleMapOptions
2423
import com.google.android.libraries.navigation.NavigationView
2524
import io.flutter.plugin.platform.PlatformView
2625

2726
class GoogleMapsNavigationView
2827
internal constructor(
2928
context: Context,
30-
mapOptions: GoogleMapOptions,
29+
mapOptions: MapOptions,
3130
navigationOptions: NavigationViewOptions?,
3231
viewId: Int,
3332
private val viewRegistry: GoogleMapsViewRegistry,
3433
viewEventApi: ViewEventApi,
3534
private val imageRegistry: ImageRegistry,
3635
) : PlatformView, GoogleMapsBaseMapView(viewId, mapOptions, viewEventApi, imageRegistry) {
37-
private val _navigationView: NavigationView = NavigationView(context, mapOptions)
36+
private val _navigationView: NavigationView = NavigationView(context, mapOptions.googleMapOptions)
3837

3938
/// Default values for UI features.
4039
private var _isNavigationTripProgressBarEnabled: Boolean = false
@@ -79,11 +78,12 @@ internal constructor(
7978
// respected.
8079
_navigationView.isNavigationUiEnabled = navigationViewEnabled
8180
if (!navigationViewEnabled) {
82-
map.moveCamera(CameraUpdateFactory.newCameraPosition(mapOptions.camera))
81+
map.moveCamera(CameraUpdateFactory.newCameraPosition(mapOptions.googleMapOptions.camera))
8382
}
8483

8584
// Call and clear view ready callback if available.
8685
mapReady()
86+
mapOptions.padding?.let { setPadding(it) }
8787
invalidateViewAfterMapLoad()
8888
}
8989
}

android/src/main/kotlin/com/google/maps/flutter/navigation/GoogleMapsViewMessageHandler.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,4 +475,12 @@ class GoogleMapsViewMessageHandler(private val viewRegistry: GoogleMapsViewRegis
475475
override fun registerOnCameraChangedListener(viewId: Long) {
476476
getView(viewId.toInt()).registerOnCameraChangedListener()
477477
}
478+
479+
override fun setPadding(viewId: Long, padding: MapPaddingDto) {
480+
getView(viewId.toInt()).setPadding(padding)
481+
}
482+
483+
override fun getPadding(viewId: Long): MapPaddingDto {
484+
return getView(viewId.toInt()).getPadding()
485+
}
478486
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright 2024 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.maps.flutter.navigation
18+
19+
import com.google.android.gms.maps.GoogleMapOptions
20+
21+
class MapOptions(val googleMapOptions: GoogleMapOptions, var padding: MapPaddingDto?) {}

0 commit comments

Comments
 (0)