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

Commit daafc0b

Browse files
authored
Add OnDidFailLoadingTileListener. (#704)
* Add OnDidFailLoadingTileListener. * Fix typo. * Add unit tests. * Bump gl-core to 5.3.0 * Add changelog for 9.7.0 release.
1 parent 096a0bd commit daafc0b

File tree

6 files changed

+113
-5
lines changed

6 files changed

+113
-5
lines changed

CHANGELOG.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,16 @@
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.7.0 - September 24, 2021
6+
[Changes](https://github.com/mapbox/mapbox-gl-native-android/compare/android-v9.6.2...android-v9.7.0) since [Mapbox Maps SDK for Android 9.6.2](https://github.com/mapbox/mapbox-gl-native-android/releases/tag/android-v9.6.2)
7+
### Improvements and bug fixes
8+
- Fix the race condition when updating LocationCompoent's position. ([#703](https://github.com/mapbox/mapbox-gl-native-android/pull/703))
9+
- Handle exceptions thrown at layout initialization (including those thrown from vector tile parsing) and add `OnDidFailLoadingTileListener`, which will be trigged when tile failed to load. ([#704](https://github.com/mapbox/mapbox-gl-native-android/pull/704))
10+
### Dependencies
11+
- Update core library to 5.3.0
12+
513
## 9.6.2 - July 7, 2021
6-
[Changes](https://github.com/mapbox/mapbox-gl-native-android/compare/android-v9.6.1...android-v9.6.2) since [Mapbox Maps SDK for Android 9.6.1](https://github.com/mapbox/mapbox-gl-native-android/releases/tag/android-v9.6.0)
14+
[Changes](https://github.com/mapbox/mapbox-gl-native-android/compare/android-v9.6.1...android-v9.6.2) since [Mapbox Maps SDK for Android 9.6.1](https://github.com/mapbox/mapbox-gl-native-android/releases/tag/android-v9.6.1)
715
### Dependencies
816
- Update telemetry to 8.1.0 (okhttp3 variant) and events-core 5.0.0 to make project compatible with Android 12
917

MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapChangeReceiver.java

+25
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class MapChangeReceiver implements NativeMapView.StateCallback {
1818
= new CopyOnWriteArrayList<>();
1919
private final List<MapView.OnDidFailLoadingMapListener> onDidFailLoadingMapListenerList
2020
= new CopyOnWriteArrayList<>();
21+
private final List<MapView.OnDidFailLoadingTileListener> onDidFailLoadingTileListenerList
22+
= new CopyOnWriteArrayList<>();
2123
private final List<MapView.OnWillStartRenderingFrameListener> onWillStartRenderingFrameList
2224
= new CopyOnWriteArrayList<>();
2325
private final List<MapView.OnDidFinishRenderingFrameListener> onDidFinishRenderingFrameList
@@ -120,6 +122,20 @@ public void onDidFailLoadingMap(String error) {
120122
}
121123
}
122124

125+
@Override
126+
public void onDidFailLoadingTile(String error) {
127+
try {
128+
if (!onDidFailLoadingTileListenerList.isEmpty()) {
129+
for (MapView.OnDidFailLoadingTileListener onDidFailLoadingTileListener : onDidFailLoadingTileListenerList) {
130+
onDidFailLoadingTileListener.onDidFailLoadingTile(error);
131+
}
132+
}
133+
} catch (Throwable err) {
134+
Logger.e(TAG, "Exception in onDidFailLoadingTile", err);
135+
throw err;
136+
}
137+
}
138+
123139
@Override
124140
public void onWillStartRenderingFrame() {
125141
try {
@@ -303,6 +319,14 @@ void removeOnDidFailLoadingMapListener(MapView.OnDidFailLoadingMapListener liste
303319
onDidFailLoadingMapListenerList.remove(listener);
304320
}
305321

322+
void addOnDidFailLoadingTileListener(MapView.OnDidFailLoadingTileListener listener) {
323+
onDidFailLoadingTileListenerList.add(listener);
324+
}
325+
326+
void removeOnDidFailLoadingTileListener(MapView.OnDidFailLoadingTileListener listener) {
327+
onDidFailLoadingTileListenerList.remove(listener);
328+
}
329+
306330
void addOnWillStartRenderingFrameListener(MapView.OnWillStartRenderingFrameListener listener) {
307331
onWillStartRenderingFrameList.add(listener);
308332
}
@@ -382,6 +406,7 @@ void clear() {
382406
onWillStartLoadingMapListenerList.clear();
383407
onDidFinishLoadingMapListenerList.clear();
384408
onDidFailLoadingMapListenerList.clear();
409+
onDidFailLoadingTileListenerList.clear();
385410
onWillStartRenderingFrameList.clear();
386411
onDidFinishRenderingFrameList.clear();
387412
onWillStartRenderingMapListenerList.clear();

MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java

+36-3
Original file line numberDiff line numberDiff line change
@@ -767,6 +767,24 @@ public void removeOnDidFailLoadingMapListener(@NonNull OnDidFailLoadingMapListen
767767
mapChangeReceiver.removeOnDidFailLoadingMapListener(listener);
768768
}
769769

770+
/**
771+
* Set a callback that's invoked when the tile failed to load.
772+
*
773+
* @param listener The callback that's invoked when the tile failed to load
774+
*/
775+
public void addOnDidFailLoadingTileListener(@NonNull OnDidFailLoadingTileListener listener) {
776+
mapChangeReceiver.addOnDidFailLoadingTileListener(listener);
777+
}
778+
779+
/**
780+
* Set a callback that's invoked when the tile failed to load.
781+
*
782+
* @param listener The callback that's invoked when the tile failed to load
783+
*/
784+
public void removeOnDidFailLoadingTileListener(@NonNull OnDidFailLoadingTileListener listener) {
785+
mapChangeReceiver.removeOnDidFailLoadingTileListener(listener);
786+
}
787+
770788
/**
771789
* Set a callback that's invoked when the map will start rendering a frame.
772790
*
@@ -1022,6 +1040,21 @@ public interface OnDidFailLoadingMapListener {
10221040
void onDidFailLoadingMap(String errorMessage);
10231041
}
10241042

1043+
/**
1044+
* Interface definition for a callback to be invoked when the tile failed to load.
1045+
* <p>
1046+
* {@link MapView#addOnDidFailLoadingTileListener(OnDidFailLoadingTileListener)}
1047+
* </p>
1048+
*/
1049+
public interface OnDidFailLoadingTileListener {
1050+
/**
1051+
* Called when the tile failed to load.
1052+
*
1053+
* @param errorMessage The reason why the tile failed to load
1054+
*/
1055+
void onDidFailLoadingTile(String errorMessage);
1056+
}
1057+
10251058
/**
10261059
* Interface definition for a callback to be invoked when the map will start rendering a frame.
10271060
* <p>
@@ -1053,7 +1086,7 @@ public interface OnDidFinishRenderingFrameListener {
10531086
/**
10541087
* Interface definition for a callback to be invoked when the map will start rendering the map.
10551088
* <p>
1056-
* {@link MapView#addOnDidFailLoadingMapListener(OnDidFailLoadingMapListener)}
1089+
* {@link MapView#addOnWillStartRenderingMapListener(OnWillStartRenderingMapListener)}
10571090
* </p>
10581091
*/
10591092
public interface OnWillStartRenderingMapListener {
@@ -1098,7 +1131,7 @@ public interface OnDidBecomeIdleListener {
10981131
/**
10991132
* Interface definition for a callback to be invoked when the map has loaded the style.
11001133
* <p>
1101-
* {@link MapView#addOnDidFailLoadingMapListener(OnDidFailLoadingMapListener)}
1134+
* {@link MapView#addOnDidFinishLoadingStyleListener(OnDidFinishLoadingStyleListener)}
11021135
* </p>
11031136
*/
11041137
public interface OnDidFinishLoadingStyleListener {
@@ -1111,7 +1144,7 @@ public interface OnDidFinishLoadingStyleListener {
11111144
/**
11121145
* Interface definition for a callback to be invoked when a map source has changed.
11131146
* <p>
1114-
* {@link MapView#addOnDidFailLoadingMapListener(OnDidFailLoadingMapListener)}
1147+
* {@link MapView#addOnSourceChangedListener(OnSourceChangedListener)}
11151148
* </p>
11161149
*/
11171150
public interface OnSourceChangedListener {

MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java

+9
Original file line numberDiff line numberDiff line change
@@ -1125,6 +1125,13 @@ private void onDidFailLoadingMap(String error) {
11251125
}
11261126
}
11271127

1128+
@Keep
1129+
private void onDidFailLoadingTile(String error) {
1130+
if (stateCallback != null) {
1131+
stateCallback.onDidFailLoadingTile(error);
1132+
}
1133+
}
1134+
11281135
@Keep
11291136
private void onWillStartRenderingFrame() {
11301137
if (stateCallback != null) {
@@ -1645,6 +1652,8 @@ interface StateCallback extends StyleCallback {
16451652

16461653
void onDidFailLoadingMap(String error);
16471654

1655+
void onDidFailLoadingTile(String error);
1656+
16481657
void onWillStartRenderingFrame();
16491658

16501659
void onDidFinishRenderingFrame(boolean fully);

MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapChangeReceiverTest.java

+33
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public class MapChangeReceiverTest {
4343
@Mock
4444
private MapView.OnDidFailLoadingMapListener onDidFailLoadingMapListener;
4545

46+
@Mock
47+
private MapView.OnDidFailLoadingTileListener onDidFailLoadingTileListener;
48+
4649
@Mock
4750
private MapView.OnWillStartRenderingFrameListener onWillStartRenderingFrameListener;
4851

@@ -314,6 +317,36 @@ public void testOnDidFailLoadingMapListener() {
314317
}
315318
}
316319

320+
@Test
321+
public void testOnDidFailLoadingTileListener() {
322+
mapChangeEventManager.addOnDidFailLoadingTileListener(onDidFailLoadingTileListener);
323+
mapChangeEventManager.onDidFailLoadingTile(TEST_STRING);
324+
verify(onDidFailLoadingTileListener).onDidFailLoadingTile(TEST_STRING);
325+
mapChangeEventManager.removeOnDidFailLoadingTileListener(onDidFailLoadingTileListener);
326+
mapChangeEventManager.onDidFailLoadingTile(TEST_STRING);
327+
verify(onDidFailLoadingTileListener).onDidFailLoadingTile(TEST_STRING);
328+
329+
mapChangeEventManager.addOnDidFailLoadingTileListener(onDidFailLoadingTileListener);
330+
Logger.setLoggerDefinition(loggerDefinition);
331+
Exception exc = new RuntimeException();
332+
doThrow(exc).when(onDidFailLoadingTileListener).onDidFailLoadingTile(TEST_STRING);
333+
try {
334+
mapChangeEventManager.onDidFailLoadingTile(TEST_STRING);
335+
Assert.fail("The exception should've been re-thrown.");
336+
} catch (RuntimeException throwable) {
337+
verify(loggerDefinition).e(anyString(), anyString(), eq(exc));
338+
}
339+
340+
Error err = new ExecutionError("", new Error());
341+
doThrow(err).when(onDidFailLoadingTileListener).onDidFailLoadingTile(TEST_STRING);
342+
try {
343+
mapChangeEventManager.onDidFailLoadingTile(TEST_STRING);
344+
Assert.fail("The exception should've been re-thrown.");
345+
} catch (ExecutionError throwable) {
346+
verify(loggerDefinition).e(anyString(), anyString(), eq(err));
347+
}
348+
}
349+
317350
@Test
318351
public void testOnWillStartRenderingFrameListener() {
319352
mapChangeEventManager.addOnWillStartRenderingFrameListener(onWillStartRenderingFrameListener);

gradle/dependencies.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ ext {
4040
ktlint : '0.34.0',
4141
commonsIO : '2.6',
4242
mapboxSdkVersions: '1.1.0',
43-
mapboxSdkCore : '5.2.2',
43+
mapboxSdkCore : '5.3.0',
4444
mapboxSdkRegistryPlugin: '0.3.0',
4545
okio : '2.4.3'
4646
]

0 commit comments

Comments
 (0)