Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 9d96228

Browse files
Kevin LiIgor Tarasovtobrun
authored
Cherry-pick for 9.2.1 (#385)
* Fix binary size. (#382) Add compiler and linker options to reduce binary size for release build: - reduce symbol visibility: `-fvisibility=hidden`, `-fvisibility-inlines=hidden`; - link time optimization `-flto` and enable gold plugin; - remove duplicated code: `–icf=all`; - size optimization for compilation (`-Oz`); - garbage collect unused sections: `-Wl,--gc-sections` (cherry picked from commit 05974e2) * Reset AndroidRendererBackend properly to prevent a crash during rotation on an Android 4.2.2 x86 tablet. (#381) Co-authored-by: Tsoi Yat Shing <ystsoi@yahoo.com.hk> (cherry picked from commit d319e17) * Fix getFilter with distance expression crash. (#380) * Fix getFilter with distance expression crash. * Update gl-native and test case * Bump gl-native to maps-1.6.0 * Update review comment. (cherry picked from commit 0010a58) * Update changelog for 9.2.1 (#384) * Update changelog for 9.2.1 * Update changelog for 9.2.1 (cherry picked from commit f8fade5) Co-authored-by: Igor Tarasov <igor.tarasov@mapbox.com> Co-authored-by: Tobrun <tobrun.van.nuland@gmail.com>
1 parent 14b615a commit 9d96228

File tree

14 files changed

+816
-198
lines changed

14 files changed

+816
-198
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
Mapbox welcomes participation and contributions from everyone. Please read [`Contributing Guide`](https://github.com/mapbox/mapbox-gl-native/blob/master/CONTRIBUTING.md) to get started.
44

5+
## 9.2.1 - May 15, 2020
6+
### Improvements and bug fixes
7+
- Added compiler and linker options to reduce binary size for release build. ([#382](https://github.com/mapbox/mapbox-gl-native-android/pull/382))
8+
- Fixed a crash when `Layer.getFilter()` is used with the `distance` expression. ([#380](https://github.com/mapbox/mapbox-gl-native-android/pull/380))
9+
- Reset AndroidRendererBackend properly to prevent a crash during rotation on an Android 4.2.2 x86 tablet. ([#381](https://github.com/mapbox/mapbox-gl-native-android/pull/381)(h/t [ystsoi](https://github.com/ystsoi))
10+
511
## 9.2.0 - May 7, 2020
612
### Features
713
- Added the `distance` expression for calculating the shortest distance between an evaluated feature and a given GeoJSON object. ([#339](https://github.com/mapbox/mapbox-gl-native-android/pull/339))

MapboxGLAndroidSDK/src/cpp/CMakeLists.txt

Lines changed: 201 additions & 197 deletions
Large diffs are not rendered by default.

MapboxGLAndroidSDK/src/cpp/map_renderer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ void MapRenderer::requestSnapshot(SnapshotCallback callback) {
122122

123123
void MapRenderer::resetRenderer() {
124124
renderer.reset();
125+
backend.reset();
125126
}
126127

127128
void MapRenderer::scheduleSnapshot(std::unique_ptr<SnapshotCallback> callback) {

MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@
99
import com.google.gson.JsonObject;
1010
import com.google.gson.JsonPrimitive;
1111
import com.mapbox.geojson.GeoJson;
12+
import com.mapbox.geojson.LineString;
13+
import com.mapbox.geojson.MultiLineString;
14+
import com.mapbox.geojson.MultiPoint;
15+
import com.mapbox.geojson.MultiPolygon;
16+
import com.mapbox.geojson.Point;
1217
import com.mapbox.geojson.Polygon;
18+
import com.mapbox.geojson.gson.GeometryGeoJson;
1319
import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
1420
import com.mapbox.mapboxsdk.style.layers.PropertyValue;
1521

@@ -1583,7 +1589,8 @@ public static Expression in(@NonNull String needle, @NonNull Expression haystack
15831589
* Currently supports `Point`, `MultiPoint`, `LineString`, `MultiLineString` geometry types.
15841590
*
15851591
* @param geoJson the target feature geoJson.
1586-
* Currently supports `Point`, `MultiPoint`, `LineString`, `MultiLineString` geometry types
1592+
* Currently supports `Point`, `MultiPoint`, `LineString`, `MultiLineString`, `Polygon`, `MultiPolygon`
1593+
* geometry types
15871594
* @return the distance in the unit "meters".
15881595
* @see <a href="https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-distance">Style specification</a>
15891596
*/
@@ -4767,6 +4774,8 @@ public static Expression convert(@NonNull JsonArray jsonArray) {
47674774
final List<Expression> arguments = new ArrayList<>();
47684775
if (operator.equals("within")) {
47694776
return within(Polygon.fromJson(jsonArray.get(1).toString()));
4777+
} else if (operator.equals("distance")) {
4778+
return distance(GeometryGeoJson.fromJson(jsonArray.get(1).toString()));
47704779
}
47714780
for (int i = 1; i < jsonArray.size(); i++) {
47724781
JsonElement jsonElement = jsonArray.get(i);

MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/BackgroundLayerTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
import androidx.test.annotation.UiThreadTest;
77
import androidx.test.ext.junit.runners.AndroidJUnit4;
88

9+
import com.mapbox.geojson.LineString;
10+
import com.mapbox.geojson.MultiLineString;
11+
import com.mapbox.geojson.MultiPoint;
12+
import com.mapbox.geojson.MultiPolygon;
13+
import com.mapbox.geojson.Point;
14+
import com.mapbox.geojson.Polygon;
915
import com.mapbox.mapboxsdk.maps.BaseLayerTest;
1016
import org.junit.Before;
1117
import timber.log.Timber;
@@ -22,6 +28,9 @@
2228
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.*;
2329

2430
import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
31+
import java.util.ArrayList;
32+
import java.util.Collections;
33+
import java.util.List;
2534

2635
/**
2736
* Basic smoke tests for BackgroundLayer
@@ -30,6 +39,19 @@
3039
public class BackgroundLayerTest extends BaseLayerTest {
3140

3241
private BackgroundLayer layer;
42+
private final List<Point> pointsList = new ArrayList<Point>() {
43+
{
44+
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
45+
add(Point.fromLngLat(55.29743486255916, 25.25827212207261));
46+
add(Point.fromLngLat(55.28978863411328, 25.251356725509737));
47+
add(Point.fromLngLat(55.300027931336984, 25.246425506635504));
48+
add(Point.fromLngLat(55.307474692951274, 25.244200378933655));
49+
add(Point.fromLngLat(55.31212891895635, 25.256408010450187));
50+
add(Point.fromLngLat(55.30774064871093, 25.26266169122738));
51+
add(Point.fromLngLat(55.301357710197806, 25.264946609615492));
52+
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
53+
}
54+
};
3355

3456
@Before
3557
@UiThreadTest

MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CircleLayerTest.java

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
import androidx.test.annotation.UiThreadTest;
77
import androidx.test.ext.junit.runners.AndroidJUnit4;
88

9+
import com.mapbox.geojson.LineString;
10+
import com.mapbox.geojson.MultiLineString;
11+
import com.mapbox.geojson.MultiPoint;
12+
import com.mapbox.geojson.MultiPolygon;
13+
import com.mapbox.geojson.Point;
14+
import com.mapbox.geojson.Polygon;
915
import com.mapbox.mapboxsdk.maps.BaseLayerTest;
1016
import org.junit.Before;
1117
import timber.log.Timber;
@@ -22,6 +28,9 @@
2228
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.*;
2329

2430
import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
31+
import java.util.ArrayList;
32+
import java.util.Collections;
33+
import java.util.List;
2534

2635
/**
2736
* Basic smoke tests for CircleLayer
@@ -30,6 +39,19 @@
3039
public class CircleLayerTest extends BaseLayerTest {
3140

3241
private CircleLayer layer;
42+
private final List<Point> pointsList = new ArrayList<Point>() {
43+
{
44+
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
45+
add(Point.fromLngLat(55.29743486255916, 25.25827212207261));
46+
add(Point.fromLngLat(55.28978863411328, 25.251356725509737));
47+
add(Point.fromLngLat(55.300027931336984, 25.246425506635504));
48+
add(Point.fromLngLat(55.307474692951274, 25.244200378933655));
49+
add(Point.fromLngLat(55.31212891895635, 25.256408010450187));
50+
add(Point.fromLngLat(55.30774064871093, 25.26266169122738));
51+
add(Point.fromLngLat(55.301357710197806, 25.264946609615492));
52+
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
53+
}
54+
};
3355

3456
@Before
3557
@UiThreadTest
@@ -97,6 +119,60 @@ public void testFilter() {
97119
assertEquals(layer.getFilter().toString(), filter.toString());
98120
}
99121

122+
@Test
123+
@UiThreadTest
124+
public void testFilterDistance() {
125+
Timber.i("FilterDistance");
126+
assertNotNull(layer);
127+
128+
// Get initial
129+
assertEquals(layer.getFilter(), null);
130+
131+
// distance with Point
132+
Expression filter = lt(distance(Point.fromLngLat(1.0, 1.0)), 50);
133+
layer.setFilter(filter);
134+
assertEquals(layer.getFilter().toString(), filter.toString());
135+
136+
// distance with LineString
137+
filter = lt(distance(LineString.fromLngLats(pointsList)), 50);
138+
layer.setFilter(filter);
139+
assertEquals(layer.getFilter().toString(), filter.toString());
140+
141+
// distance with MultiPoint
142+
filter = lt(distance(MultiPoint.fromLngLats(pointsList)), 50);
143+
layer.setFilter(filter);
144+
assertEquals(layer.getFilter().toString(), filter.toString());
145+
146+
// distance with MultiPoint
147+
filter = lt(distance(MultiLineString.fromLngLats(Collections.singletonList(pointsList))), 50);
148+
layer.setFilter(filter);
149+
assertEquals(layer.getFilter().toString(), filter.toString());
150+
151+
// distance with Polygon
152+
filter = lt(distance(Polygon.fromLngLats(Collections.singletonList(pointsList))), 50);
153+
layer.setFilter(filter);
154+
assertEquals(layer.getFilter().toString(), filter.toString());
155+
156+
// distance with MultiPolygon
157+
filter = lt(distance(MultiPolygon.fromLngLats(Collections
158+
.singletonList(Collections.singletonList(pointsList)))), 50);
159+
layer.setFilter(filter);
160+
assertEquals(layer.getFilter().toString(), filter.toString());
161+
}
162+
163+
@Test
164+
@UiThreadTest
165+
public void testFilterWithin() {
166+
Timber.i("FilterWithin");
167+
assertNotNull(layer);
168+
169+
// Get initial
170+
assertEquals(layer.getFilter(), null);
171+
172+
Expression filter = within(Polygon.fromLngLats(Collections.singletonList(pointsList)));
173+
layer.setFilter(filter);
174+
assertEquals(layer.getFilter().toString(), filter.toString());
175+
}
100176

101177

102178
@Test

MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
import androidx.test.annotation.UiThreadTest;
77
import androidx.test.ext.junit.runners.AndroidJUnit4;
88

9+
import com.mapbox.geojson.LineString;
10+
import com.mapbox.geojson.MultiLineString;
11+
import com.mapbox.geojson.MultiPoint;
12+
import com.mapbox.geojson.MultiPolygon;
13+
import com.mapbox.geojson.Point;
14+
import com.mapbox.geojson.Polygon;
915
import com.mapbox.mapboxsdk.maps.BaseLayerTest;
1016
import org.junit.Before;
1117
import timber.log.Timber;
@@ -22,6 +28,9 @@
2228
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.*;
2329

2430
import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
31+
import java.util.ArrayList;
32+
import java.util.Collections;
33+
import java.util.List;
2534

2635
/**
2736
* Basic smoke tests for FillExtrusionLayer
@@ -30,6 +39,19 @@
3039
public class FillExtrusionLayerTest extends BaseLayerTest {
3140

3241
private FillExtrusionLayer layer;
42+
private final List<Point> pointsList = new ArrayList<Point>() {
43+
{
44+
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
45+
add(Point.fromLngLat(55.29743486255916, 25.25827212207261));
46+
add(Point.fromLngLat(55.28978863411328, 25.251356725509737));
47+
add(Point.fromLngLat(55.300027931336984, 25.246425506635504));
48+
add(Point.fromLngLat(55.307474692951274, 25.244200378933655));
49+
add(Point.fromLngLat(55.31212891895635, 25.256408010450187));
50+
add(Point.fromLngLat(55.30774064871093, 25.26266169122738));
51+
add(Point.fromLngLat(55.301357710197806, 25.264946609615492));
52+
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
53+
}
54+
};
3355

3456
@Before
3557
@UiThreadTest
@@ -97,6 +119,60 @@ public void testFilter() {
97119
assertEquals(layer.getFilter().toString(), filter.toString());
98120
}
99121

122+
@Test
123+
@UiThreadTest
124+
public void testFilterDistance() {
125+
Timber.i("FilterDistance");
126+
assertNotNull(layer);
127+
128+
// Get initial
129+
assertEquals(layer.getFilter(), null);
130+
131+
// distance with Point
132+
Expression filter = lt(distance(Point.fromLngLat(1.0, 1.0)), 50);
133+
layer.setFilter(filter);
134+
assertEquals(layer.getFilter().toString(), filter.toString());
135+
136+
// distance with LineString
137+
filter = lt(distance(LineString.fromLngLats(pointsList)), 50);
138+
layer.setFilter(filter);
139+
assertEquals(layer.getFilter().toString(), filter.toString());
140+
141+
// distance with MultiPoint
142+
filter = lt(distance(MultiPoint.fromLngLats(pointsList)), 50);
143+
layer.setFilter(filter);
144+
assertEquals(layer.getFilter().toString(), filter.toString());
145+
146+
// distance with MultiPoint
147+
filter = lt(distance(MultiLineString.fromLngLats(Collections.singletonList(pointsList))), 50);
148+
layer.setFilter(filter);
149+
assertEquals(layer.getFilter().toString(), filter.toString());
150+
151+
// distance with Polygon
152+
filter = lt(distance(Polygon.fromLngLats(Collections.singletonList(pointsList))), 50);
153+
layer.setFilter(filter);
154+
assertEquals(layer.getFilter().toString(), filter.toString());
155+
156+
// distance with MultiPolygon
157+
filter = lt(distance(MultiPolygon.fromLngLats(Collections
158+
.singletonList(Collections.singletonList(pointsList)))), 50);
159+
layer.setFilter(filter);
160+
assertEquals(layer.getFilter().toString(), filter.toString());
161+
}
162+
163+
@Test
164+
@UiThreadTest
165+
public void testFilterWithin() {
166+
Timber.i("FilterWithin");
167+
assertNotNull(layer);
168+
169+
// Get initial
170+
assertEquals(layer.getFilter(), null);
171+
172+
Expression filter = within(Polygon.fromLngLats(Collections.singletonList(pointsList)));
173+
layer.setFilter(filter);
174+
assertEquals(layer.getFilter().toString(), filter.toString());
175+
}
100176

101177

102178
@Test

0 commit comments

Comments
 (0)