Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions android/src/main/java/com/mapbox/mapboxgl/Convert.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@

package com.mapbox.mapboxgl;

import android.content.Context;
import android.graphics.Point;
import android.util.DisplayMetrics;

import com.mapbox.geojson.Polygon;
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.camera.CameraUpdate;
Expand Down Expand Up @@ -235,7 +238,8 @@ private static String toString(Object o) {
return (String) o;
}

static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink) {
static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink, Context context) {
final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
final Map<?, ?> data = toMap(o);
final Object cameraTargetBounds = data.get("cameraTargetBounds");
if (cameraTargetBounds != null) {
Expand Down Expand Up @@ -292,7 +296,8 @@ static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink) {
final Object logoViewMargins = data.get("logoViewMargins");
if(logoViewMargins != null){
final List logoViewMarginsData = toList(logoViewMargins);
sink.setLogoViewMargins(toInt(logoViewMarginsData.get(0)), toInt(logoViewMarginsData.get(1)));
final Point point = toPoint(logoViewMarginsData, metrics.density);
sink.setLogoViewMargins(point.x, point.y);
}
final Object compassGravity = data.get("compassViewPosition");
if(compassGravity != null){
Expand All @@ -301,12 +306,18 @@ static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink) {
final Object compassViewMargins = data.get("compassViewMargins");
if(compassViewMargins != null){
final List compassViewMarginsData = toList(compassViewMargins);
sink.setCompassViewMargins(toInt(compassViewMarginsData.get(0)), toInt(compassViewMarginsData.get(1)));
final Point point = toPoint(compassViewMarginsData, metrics.density);
sink.setCompassViewMargins(point.x, point.y);
}
final Object attributionButtonGravity = data.get("attributionButtonPosition");
if(attributionButtonGravity != null){
sink.setAttributionButtonGravity(toInt(attributionButtonGravity));
}
final Object attributionButtonMargins = data.get("attributionButtonMargins");
if(attributionButtonMargins != null){
final List attributionButtonMarginsData = toList(attributionButtonMargins);
sink.setAttributionButtonMargins(toInt(attributionButtonMarginsData.get(0)), toInt(attributionButtonMarginsData.get(1)));
final Point point = toPoint(attributionButtonMarginsData, metrics.density);
sink.setAttributionButtonMargins(point.x, point.y);
}
}

Expand Down
47 changes: 39 additions & 8 deletions android/src/main/java/com/mapbox/mapboxgl/MapboxMapBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public void setMyLocationTrackingMode(int myLocationTrackingMode) {
public void setMyLocationRenderMode(int myLocationRenderMode) {
this.myLocationRenderMode = myLocationRenderMode;
}

public void setLogoViewMargins(int x, int y) {
options.logoMargins(new int[] {
(int) x, //left
Expand All @@ -134,7 +134,6 @@ public void setCompassGravity(int gravity) {
case 0:
options.compassGravity(Gravity.TOP | Gravity.START);
break;
default:
case 1:
options.compassGravity(Gravity.TOP | Gravity.END);
break;
Expand All @@ -154,6 +153,8 @@ public void setCompassViewMargins(int x, int y) {
case Gravity.TOP | Gravity.START:
options.compassMargins(new int[] {(int) x, (int) y, 0, 0});
break;
// If the application code has not specified gravity, assume the platform
// default for the compass which is top-right
default:
case Gravity.TOP | Gravity.END:
options.compassMargins(new int[] {0, (int) y, (int) x, 0});
Expand All @@ -167,14 +168,44 @@ public void setCompassViewMargins(int x, int y) {
}
}

@Override
public void setAttributionButtonGravity(int gravity) {
switch(gravity){
case 0:
options.attributionGravity(Gravity.TOP | Gravity.START);
break;
case 1:
options.attributionGravity(Gravity.TOP | Gravity.END);
break;
case 2:
options.attributionGravity(Gravity.BOTTOM | Gravity.START);
break;
case 3:
options.attributionGravity(Gravity.BOTTOM | Gravity.END);
break;
}
}

@Override
public void setAttributionButtonMargins(int x, int y) {
options.attributionMargins(new int[] {
(int) x, //left
(int) 0, //top
(int) 0, //right
(int) y, //bottom
});
switch(options.getAttributionGravity())
{
case Gravity.TOP | Gravity.START:
options.attributionMargins(new int[] {(int) x, (int) y, 0, 0});
break;
case Gravity.TOP | Gravity.END:
options.attributionMargins(new int[] {0, (int) y, (int) x, 0});
break;
// If the application code has not specified gravity, assume the platform
// default for the attribution button which is bottom left
default:
case Gravity.BOTTOM | Gravity.START:
options.attributionMargins(new int[] {(int) x, 0, 0, (int) y});
break;
case Gravity.BOTTOM | Gravity.END:
options.attributionMargins(new int[] {0, 0, (int) x, (int) y});
break;
}
}

public void setAnnotationOrder(List<String> annotations) {
Expand Down
46 changes: 40 additions & 6 deletions android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ public void onStyleLoaded(@NonNull Style style) {
throw new IllegalArgumentException("Unknown annotation type: " + annotationType + ", must be either 'fill', 'line', 'circle' or 'symbol'");
}
}

if (myLocationEnabled) {
enableLocationComponent(style);
}
Expand Down Expand Up @@ -418,7 +418,7 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) {
mapReadyResult = result;
break;
case "map#update": {
Convert.interpretMapboxMapOptions(call.argument("options"), this);
Convert.interpretMapboxMapOptions(call.argument("options"), this, context);
result.success(Convert.toJson(getCameraPosition()));
break;
}
Expand Down Expand Up @@ -703,7 +703,7 @@ public void onError(@NonNull String message) {
result.success(null);
break;
}
case "line#addAll": {
case "line#addAll": {
List<String> newIds = new ArrayList<String>();
final List<Object> options = call.argument("options");
List<LineOptions> optionList = new ArrayList<LineOptions>();
Expand Down Expand Up @@ -775,7 +775,7 @@ public void onError(@NonNull String message) {
result.success(circleId);
break;
}
case "circle#addAll": {
case "circle#addAll": {
List<String> newIds = new ArrayList<String>();
final List<Object> options = call.argument("options");
List<CircleOptions> optionList = new ArrayList<CircleOptions>();
Expand Down Expand Up @@ -851,7 +851,7 @@ public void onError(@NonNull String message) {
break;
}

case "fill#addAll": {
case "fill#addAll": {
List<String> newIds = new ArrayList<String>();
final List<Object> options = call.argument("options");
List<FillOptions> optionList = new ArrayList<FillOptions>();
Expand Down Expand Up @@ -1321,9 +1321,43 @@ public void setCompassViewMargins(int x, int y) {
}
}

@Override
public void setAttributionButtonGravity(int gravity) {
switch(gravity) {
case 0:
mapboxMap.getUiSettings().setAttributionGravity(Gravity.TOP | Gravity.START);
break;
default:
case 1:
mapboxMap.getUiSettings().setAttributionGravity(Gravity.TOP | Gravity.END);
break;
case 2:
mapboxMap.getUiSettings().setAttributionGravity(Gravity.BOTTOM | Gravity.START);
break;
case 3:
mapboxMap.getUiSettings().setAttributionGravity(Gravity.BOTTOM | Gravity.END);
break;
}
}

@Override
public void setAttributionButtonMargins(int x, int y) {
mapboxMap.getUiSettings().setAttributionMargins(x, 0, 0, y);
switch(mapboxMap.getUiSettings().getAttributionGravity())
{
case Gravity.TOP | Gravity.START:
mapboxMap.getUiSettings().setAttributionMargins(x, y, 0, 0);
break;
default:
case Gravity.TOP | Gravity.END:
mapboxMap.getUiSettings().setAttributionMargins(0, y, x, 0);
break;
case Gravity.BOTTOM | Gravity.START:
mapboxMap.getUiSettings().setAttributionMargins(x, 0, 0, y);
break;
case Gravity.BOTTOM | Gravity.END:
mapboxMap.getUiSettings().setAttributionMargins(0, 0, x, y);
break;
}
}

private void updateMyLocationEnabled() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public PlatformView create(Context context, int id, Object args) {
Map<String, Object> params = (Map<String, Object>) args;
final MapboxMapBuilder builder = new MapboxMapBuilder();

Convert.interpretMapboxMapOptions(params.get("options"), builder);
Convert.interpretMapboxMapOptions(params.get("options"), builder, context);
if (params.containsKey("initialCameraPosition")) {
CameraPosition position = Convert.toCameraPosition(params.get("initialCameraPosition"));
builder.setInitialCameraPosition(position);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,7 @@ interface MapboxMapOptionsSink {

void setCompassViewMargins(int x, int y);

void setAttributionButtonGravity(int gravity);

void setAttributionButtonMargins(int x, int y);
}
5 changes: 4 additions & 1 deletion ios/Classes/Convert.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,11 @@ class Convert {
if let attributionButtonMargins = options["attributionButtonMargins"] as? [Double] {
delegate.setAttributionButtonMargins(x: attributionButtonMargins[0], y: attributionButtonMargins[1])
}
if let attributionButtonPosition = options["attributionButtonPosition"] as? UInt, let position = MGLOrnamentPosition(rawValue: attributionButtonPosition) {
delegate.setAttributionButtonPosition(position: position)
}
}

class func parseCameraUpdate(cameraUpdate: [Any], mapView: MGLMapView) -> MGLMapCamera? {
guard let type = cameraUpdate[0] as? String else { return nil }
switch (type) {
Expand Down
3 changes: 3 additions & 0 deletions ios/Classes/MapboxMapController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1070,4 +1070,7 @@ class MapboxMapController: NSObject, FlutterPlatformView, MGLMapViewDelegate, Ma
func setAttributionButtonMargins(x: Double, y: Double) {
mapView.attributionButtonMargins = CGPoint(x: x, y: y)
}
func setAttributionButtonPosition(position: MGLOrnamentPosition) {
mapView.attributionButtonPosition = position
}
}
1 change: 1 addition & 0 deletions ios/Classes/MapboxMapOptionsSink.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ protocol MapboxMapOptionsSink {
func setCompassViewPosition(position: MGLOrnamentPosition)
func setCompassViewMargins(x: Double, y: Double)
func setAttributionButtonMargins(x: Double, y: Double)
func setAttributionButtonPosition(position: MGLOrnamentPosition)
}
1 change: 1 addition & 0 deletions lib/mapbox_gl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export 'package:mapbox_gl_platform_interface/mapbox_gl_platform_interface.dart'
MyLocationTrackingMode,
MyLocationRenderMode,
CompassViewPosition,
AttributionButtonPosition,
Circle,
CircleOptions,
Line,
Expand Down
14 changes: 13 additions & 1 deletion lib/src/mapbox_map.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class MapboxMap extends StatefulWidget {
this.logoViewMargins,
this.compassViewPosition,
this.compassViewMargins,
this.attributionButtonPosition,
this.attributionButtonMargins,
this.onMapClick,
this.onUserLocationUpdated,
Expand Down Expand Up @@ -156,7 +157,13 @@ class MapboxMap extends StatefulWidget {
/// Set the layout margins for the Mapbox Compass
final Point? compassViewMargins;

/// Set the layout margins for the Mapbox Attribution Buttons
/// Set the position for the Mapbox Attribution Button
final AttributionButtonPosition? attributionButtonPosition;

/// Set the layout margins for the Mapbox Attribution Buttons. If you set this
/// value, you may also want to set [attributionButtonPosition] to harmonize
/// the layout between iOS and Android, since the underlying frameworks have
/// different defaults.
final Point? attributionButtonMargins;

/// Which gestures should be consumed by the map.
Expand Down Expand Up @@ -299,6 +306,7 @@ class _MapboxMapOptions {
this.logoViewMargins,
this.compassViewPosition,
this.compassViewMargins,
this.attributionButtonPosition,
this.attributionButtonMargins,
});

Expand All @@ -319,6 +327,7 @@ class _MapboxMapOptions {
logoViewMargins: map.logoViewMargins,
compassViewPosition: map.compassViewPosition,
compassViewMargins: map.compassViewMargins,
attributionButtonPosition: map.attributionButtonPosition,
attributionButtonMargins: map.attributionButtonMargins,
);
}
Expand Down Expand Up @@ -353,6 +362,8 @@ class _MapboxMapOptions {

final Point? compassViewMargins;

final AttributionButtonPosition? attributionButtonPosition;

final Point? attributionButtonMargins;

Map<String, dynamic> toMap() {
Expand Down Expand Up @@ -387,6 +398,7 @@ class _MapboxMapOptions {
addIfNonNull('logoViewMargins', pointToArray(logoViewMargins));
addIfNonNull('compassViewPosition', compassViewPosition?.index);
addIfNonNull('compassViewMargins', pointToArray(compassViewMargins));
addIfNonNull('attributionButtonPosition', attributionButtonPosition?.index);
addIfNonNull(
'attributionButtonMargins', pointToArray(attributionButtonMargins));
return optionsMap;
Expand Down
8 changes: 8 additions & 0 deletions mapbox_gl_platform_interface/lib/src/ui.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,14 @@ enum CompassViewPosition {
BottomRight,
}

/// Attribution Button Position
enum AttributionButtonPosition {
TopLeft,
TopRight,
BottomLeft,
BottomRight,
}

/// Bounds for the map camera target.
// Used with [MapboxMapOptions] to wrap a [LatLngBounds] value. This allows
// distinguishing between specifying an unbounded target (null `LatLngBounds`)
Expand Down
7 changes: 6 additions & 1 deletion mapbox_gl_web/lib/src/convert.dart
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,17 @@ class Convert {
options['logoViewMargins'][0], options['logoViewMargins'][1]);
}
if (options.containsKey('compassViewPosition')) {
sink.setCompassGravity(options['compassViewPosition']);
final position = CompassViewPosition.values[options['compassViewPosition']];
sink.setCompassAlignment(position);
}
if (options.containsKey('compassViewMargins')) {
sink.setCompassViewMargins(
options['compassViewMargins'][0], options['compassViewMargins'][1]);
}
if (options.containsKey('attributionButtonPosition')) {
final position = AttributionButtonPosition.values[options['attributionButtonPosition']];
sink.setAttributionButtonAlignment(position);
}
if (options.containsKey('attributionButtonMargins')) {
sink.setAttributionButtonMargins(options['attributionButtonMargins'][0],
options['attributionButtonMargins'][1]);
Expand Down
9 changes: 7 additions & 2 deletions mapbox_gl_web/lib/src/mapbox_map_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -625,8 +625,13 @@ class MapboxMapController extends MapboxGlPlatform
}

@override
void setCompassGravity(int gravity) {
_updateNavigationControl(position: CompassViewPosition.values[gravity]);
void setCompassAlignment(CompassViewPosition position) {
_updateNavigationControl(position: position);
}

@override
void setAttributionButtonAlignment(AttributionButtonPosition position) {
print('setAttributionButtonAlignment not available in web');
}

@override
Expand Down
4 changes: 3 additions & 1 deletion mapbox_gl_web/lib/src/options_sink.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ abstract class MapboxMapOptionsSink {

void setLogoViewMargins(int x, int y);

void setCompassGravity(int gravity);
void setCompassAlignment(CompassViewPosition position);

void setCompassViewMargins(int x, int y);

void setAttributionButtonAlignment(AttributionButtonPosition position);

void setAttributionButtonMargins(int x, int y);
}