Skip to content

Commit e7cc162

Browse files
committed
Merge branch 'AndroidOverlayButtonFixes' into integration
2 parents dd847dd + 06c02d0 commit e7cc162

File tree

16 files changed

+175
-27
lines changed

16 files changed

+175
-27
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ This Flutter plugin allows to show embedded interactive and customizable vector
1010

1111
- Install [Flutter](https://flutter.io/get-started/) and validate its installation with `flutter doctor`
1212
- Clone the repository with `git clone [email protected]:tobrun/flutter-mapbox-gl.git`
13-
- Add a public Mapbox access token to the example app (see next section)
13+
- Get a public Mapbox access token (see next section)
1414
- Add a secret Mapbox access token for downloading the SDK
1515
- Connect a mobile device or start an emulator, simulator or chrome
1616
- Locate the id of a the device with `flutter devices`
17-
- Run the app with `cd flutter_mapbox/example && flutter packages get && flutter run -d {device_id}`
17+
- Run the app with `cd flutter_mapbox/example && flutter packages get && flutter run -d {device_id} --dart-define=ACCESS_TOKEN=ADD_YOUR_TOKEN_HERE`
1818

1919
## Adding a Mapbox Access Token
2020

android/src/main/java/com/mapbox/mapboxgl/Convert.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44

55
package com.mapbox.mapboxgl;
66

7+
import android.content.Context;
78
import android.graphics.Point;
9+
import android.util.DisplayMetrics;
10+
811
import com.mapbox.geojson.Polygon;
912
import com.mapbox.mapboxsdk.camera.CameraPosition;
1013
import com.mapbox.mapboxsdk.camera.CameraUpdate;
@@ -245,7 +248,8 @@ private static String toString(Object o) {
245248
return (String) o;
246249
}
247250

248-
static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink) {
251+
static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink, Context context) {
252+
final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
249253
final Map<?, ?> data = toMap(o);
250254
final Object cameraTargetBounds = data.get("cameraTargetBounds");
251255
if (cameraTargetBounds != null) {
@@ -302,7 +306,8 @@ static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink) {
302306
final Object logoViewMargins = data.get("logoViewMargins");
303307
if(logoViewMargins != null){
304308
final List logoViewMarginsData = toList(logoViewMargins);
305-
sink.setLogoViewMargins(toInt(logoViewMarginsData.get(0)), toInt(logoViewMarginsData.get(1)));
309+
final Point point = toPoint(logoViewMarginsData, metrics.density);
310+
sink.setLogoViewMargins(point.x, point.y);
306311
}
307312
final Object compassGravity = data.get("compassViewPosition");
308313
if(compassGravity != null){
@@ -311,12 +316,18 @@ static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink) {
311316
final Object compassViewMargins = data.get("compassViewMargins");
312317
if(compassViewMargins != null){
313318
final List compassViewMarginsData = toList(compassViewMargins);
314-
sink.setCompassViewMargins(toInt(compassViewMarginsData.get(0)), toInt(compassViewMarginsData.get(1)));
319+
final Point point = toPoint(compassViewMarginsData, metrics.density);
320+
sink.setCompassViewMargins(point.x, point.y);
321+
}
322+
final Object attributionButtonGravity = data.get("attributionButtonPosition");
323+
if(attributionButtonGravity != null){
324+
sink.setAttributionButtonGravity(toInt(attributionButtonGravity));
315325
}
316326
final Object attributionButtonMargins = data.get("attributionButtonMargins");
317327
if(attributionButtonMargins != null){
318328
final List attributionButtonMarginsData = toList(attributionButtonMargins);
319-
sink.setAttributionButtonMargins(toInt(attributionButtonMarginsData.get(0)), toInt(attributionButtonMarginsData.get(1)));
329+
final Point point = toPoint(attributionButtonMarginsData, metrics.density);
330+
sink.setAttributionButtonMargins(point.x, point.y);
320331
}
321332
}
322333

android/src/main/java/com/mapbox/mapboxgl/MapboxMapBuilder.java

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,43 @@ public void setCompassViewMargins(int x, int y) {
167167
}
168168
}
169169

170+
@Override
171+
public void setAttributionButtonGravity(int gravity) {
172+
switch(gravity){
173+
case 0:
174+
options.attributionGravity(Gravity.TOP | Gravity.START);
175+
break;
176+
default:
177+
case 1:
178+
options.attributionGravity(Gravity.TOP | Gravity.END);
179+
break;
180+
case 2:
181+
options.attributionGravity(Gravity.BOTTOM | Gravity.START);
182+
break;
183+
case 3:
184+
options.attributionGravity(Gravity.BOTTOM | Gravity.END);
185+
break;
186+
}
187+
}
188+
170189
@Override
171190
public void setAttributionButtonMargins(int x, int y) {
172-
options.attributionMargins(new int[] {
173-
(int) x, //left
174-
(int) 0, //top
175-
(int) 0, //right
176-
(int) y, //bottom
177-
});
191+
switch(options.getAttributionGravity())
192+
{
193+
case Gravity.TOP | Gravity.START:
194+
options.attributionMargins(new int[] {(int) x, (int) y, 0, 0});
195+
break;
196+
default:
197+
case Gravity.TOP | Gravity.END:
198+
options.attributionMargins(new int[] {0, (int) y, (int) x, 0});
199+
break;
200+
case Gravity.BOTTOM | Gravity.START:
201+
options.attributionMargins(new int[] {(int) x, 0, 0, (int) y});
202+
break;
203+
case Gravity.BOTTOM | Gravity.END:
204+
options.attributionMargins(new int[] {0, 0, (int) x, (int) y});
205+
break;
206+
}
178207
}
179208

180209
public void setAnnotationOrder(List<String> annotations) {

android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) {
421421
mapReadyResult = result;
422422
break;
423423
case "map#update": {
424-
Convert.interpretMapboxMapOptions(call.argument("options"), this);
424+
Convert.interpretMapboxMapOptions(call.argument("options"), this, context);
425425
result.success(Convert.toJson(getCameraPosition()));
426426
break;
427427
}
@@ -1338,9 +1338,43 @@ public void setCompassViewMargins(int x, int y) {
13381338
}
13391339
}
13401340

1341+
@Override
1342+
public void setAttributionButtonGravity(int gravity) {
1343+
switch(gravity) {
1344+
case 0:
1345+
mapboxMap.getUiSettings().setAttributionGravity(Gravity.TOP | Gravity.START);
1346+
break;
1347+
default:
1348+
case 1:
1349+
mapboxMap.getUiSettings().setAttributionGravity(Gravity.TOP | Gravity.END);
1350+
break;
1351+
case 2:
1352+
mapboxMap.getUiSettings().setAttributionGravity(Gravity.BOTTOM | Gravity.START);
1353+
break;
1354+
case 3:
1355+
mapboxMap.getUiSettings().setAttributionGravity(Gravity.BOTTOM | Gravity.END);
1356+
break;
1357+
}
1358+
}
1359+
13411360
@Override
13421361
public void setAttributionButtonMargins(int x, int y) {
1343-
mapboxMap.getUiSettings().setAttributionMargins(0, 0, x, y);
1362+
switch(mapboxMap.getUiSettings().getAttributionGravity())
1363+
{
1364+
case Gravity.TOP | Gravity.START:
1365+
mapboxMap.getUiSettings().setAttributionMargins(x, y, 0, 0);
1366+
break;
1367+
default:
1368+
case Gravity.TOP | Gravity.END:
1369+
mapboxMap.getUiSettings().setAttributionMargins(0, y, x, 0);
1370+
break;
1371+
case Gravity.BOTTOM | Gravity.START:
1372+
mapboxMap.getUiSettings().setAttributionMargins(x, 0, 0, y);
1373+
break;
1374+
case Gravity.BOTTOM | Gravity.END:
1375+
mapboxMap.getUiSettings().setAttributionMargins(0, 0, x, y);
1376+
break;
1377+
}
13441378
}
13451379

13461380
private void updateMyLocationEnabled() {

android/src/main/java/com/mapbox/mapboxgl/MapboxMapFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public PlatformView create(Context context, int id, Object args) {
3030
Map<String, Object> params = (Map<String, Object>) args;
3131
final MapboxMapBuilder builder = new MapboxMapBuilder();
3232

33-
Convert.interpretMapboxMapOptions(params.get("options"), builder);
33+
Convert.interpretMapboxMapOptions(params.get("options"), builder, context);
3434
if (params.containsKey("initialCameraPosition")) {
3535
CameraPosition position = Convert.toCameraPosition(params.get("initialCameraPosition"));
3636
builder.setInitialCameraPosition(position);

android/src/main/java/com/mapbox/mapboxgl/MapboxMapOptionsSink.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,7 @@ interface MapboxMapOptionsSink {
4141

4242
void setCompassViewMargins(int x, int y);
4343

44+
void setAttributionButtonGravity(int gravity);
45+
4446
void setAttributionButtonMargins(int x, int y);
4547
}

example/lib/main.dart

Lines changed: 44 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,14 @@ final List<ExamplePage> _allPages = <ExamplePage>[
4343
];
4444

4545
class MapsDemo extends StatelessWidget {
46-
//FIXME: Add your Mapbox access token here
47-
static const String ACCESS_TOKEN = "YOUR_TOKEN_HERE";
46+
// FIXME: You need to pass in your access token via the command line argument
47+
// --dart-define=ACCESS_TOKEN=ADD_YOUR_TOKEN_HERE
48+
// It is also possible to pass it in while running the app via an IDE by
49+
// passing the same args there.
50+
//
51+
// Alternatively you can replace `String.fromEnvironment("ACCESS_TOKEN")`
52+
// in the following line with your access token directly.
53+
static const String ACCESS_TOKEN = String.fromEnvironment("ACCESS_TOKEN");
4854

4955
void _pushPage(BuildContext context, ExamplePage page) async {
5056
if (!kIsWeb) {
@@ -65,14 +71,42 @@ class MapsDemo extends StatelessWidget {
6571
Widget build(BuildContext context) {
6672
return Scaffold(
6773
appBar: AppBar(title: const Text('MapboxMaps examples')),
68-
body: ListView.separated(
69-
itemCount: _allPages.length,
70-
separatorBuilder: (BuildContext context, int index) =>
71-
const Divider(height: 1),
72-
itemBuilder: (_, int index) => ListTile(
73-
leading: _allPages[index].leading,
74-
title: Text(_allPages[index].title),
75-
onTap: () => _pushPage(context, _allPages[index]),
74+
body: ACCESS_TOKEN.isEmpty || ACCESS_TOKEN.contains("YOUR_TOKEN")
75+
? buildAccessTokenWarning()
76+
: ListView.separated(
77+
itemCount: _allPages.length,
78+
separatorBuilder: (BuildContext context, int index) =>
79+
const Divider(height: 1),
80+
itemBuilder: (_, int index) => ListTile(
81+
leading: _allPages[index].leading,
82+
title: Text(_allPages[index].title),
83+
onTap: () => _pushPage(context, _allPages[index]),
84+
),
85+
),
86+
);
87+
}
88+
89+
Widget buildAccessTokenWarning() {
90+
return Container(
91+
color: Colors.red[900],
92+
child: SizedBox.expand(
93+
child: Column(
94+
mainAxisAlignment: MainAxisAlignment.center,
95+
children: [
96+
"Please pass in your access token with",
97+
"--dart-define=ACCESS_TOKEN=ADD_YOUR_TOKEN_HERE",
98+
"passed into flutter run or add it to args in vscode's launch.json",
99+
]
100+
.map((text) => Padding(
101+
padding: EdgeInsets.all(8),
102+
child: Text(text,
103+
textAlign: TextAlign.center,
104+
style: TextStyle(
105+
fontSize: 14,
106+
fontWeight: FontWeight.bold,
107+
color: Colors.white)),
108+
))
109+
.toList(),
76110
),
77111
),
78112
);

ios/Classes/Convert.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@ class Convert {
5252
if let attributionButtonMargins = options["attributionButtonMargins"] as? [Double] {
5353
delegate.setAttributionButtonMargins(x: attributionButtonMargins[0], y: attributionButtonMargins[1])
5454
}
55+
if let attributionButtonPosition = options["attributionButtonPosition"] as? UInt, let position = MGLOrnamentPosition(rawValue: attributionButtonPosition) {
56+
delegate.setAttributionButtonPosition(position: position)
57+
}
5558
}
56-
59+
5760
class func parseCameraUpdate(cameraUpdate: [Any], mapView: MGLMapView) -> MGLMapCamera? {
5861
guard let type = cameraUpdate[0] as? String else { return nil }
5962
switch (type) {

ios/Classes/MapboxMapController.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,4 +1072,7 @@ class MapboxMapController: NSObject, FlutterPlatformView, MGLMapViewDelegate, Ma
10721072
func setAttributionButtonMargins(x: Double, y: Double) {
10731073
mapView.attributionButtonMargins = CGPoint(x: x, y: y)
10741074
}
1075+
func setAttributionButtonPosition(position: MGLOrnamentPosition) {
1076+
mapView.attributionButtonPosition = position
1077+
}
10751078
}

ios/Classes/MapboxMapOptionsSink.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ protocol MapboxMapOptionsSink {
1818
func setCompassViewPosition(position: MGLOrnamentPosition)
1919
func setCompassViewMargins(x: Double, y: Double)
2020
func setAttributionButtonMargins(x: Double, y: Double)
21+
func setAttributionButtonPosition(position: MGLOrnamentPosition)
2122
}

0 commit comments

Comments
 (0)