Handle allocation failure [Core feature] (#4178)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
@@ -58,6 +58,8 @@ class MapChangeReceiver implements NativeMapView.StateCallback {
|
||||
= new CopyOnWriteArrayList<>();
|
||||
private final List<MapView.OnSpriteRequestedListener> onSpriteRequestedList
|
||||
= new CopyOnWriteArrayList<>();
|
||||
private final List<MapView.OnRenderErrorListener> onRenderErrorList
|
||||
= new CopyOnWriteArrayList<>();
|
||||
|
||||
@Override
|
||||
public void onCameraWillChange(boolean animated) {
|
||||
@@ -424,6 +426,20 @@ class MapChangeReceiver implements NativeMapView.StateCallback {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRenderError() {
|
||||
try {
|
||||
if (!onRenderErrorList.isEmpty()) {
|
||||
for (MapView.OnRenderErrorListener listener : onRenderErrorList) {
|
||||
listener.onRenderError();
|
||||
}
|
||||
}
|
||||
} catch (Throwable err) {
|
||||
Logger.e(TAG, "Exception in onRenderError", err);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
void addOnCameraWillChangeListener(MapView.OnCameraWillChangeListener listener) {
|
||||
onCameraWillChangeListenerList.add(listener);
|
||||
}
|
||||
@@ -592,6 +608,10 @@ class MapChangeReceiver implements NativeMapView.StateCallback {
|
||||
onSpriteRequestedList.add(callback);
|
||||
}
|
||||
|
||||
public void addOnRenderErrorListener(MapView.OnRenderErrorListener callback) {
|
||||
onRenderErrorList.add(callback);
|
||||
}
|
||||
|
||||
public void removeOnPreCompileShaderListener(MapView.OnPreCompileShaderListener callback) {
|
||||
onPreCompileShaderList.remove(callback);
|
||||
}
|
||||
@@ -632,6 +652,10 @@ class MapChangeReceiver implements NativeMapView.StateCallback {
|
||||
onSpriteRequestedList.remove(callback);
|
||||
}
|
||||
|
||||
public void removeOnRenderErrorListener(MapView.OnRenderErrorListener callback) {
|
||||
onRenderErrorList.remove(callback);
|
||||
}
|
||||
|
||||
void clear() {
|
||||
onCameraWillChangeListenerList.clear();
|
||||
onCameraIsChangingListenerList.clear();
|
||||
@@ -658,5 +682,6 @@ class MapChangeReceiver implements NativeMapView.StateCallback {
|
||||
onSpriteLoadedList.clear();
|
||||
onSpriteErrorList.clear();
|
||||
onSpriteRequestedList.clear();
|
||||
onRenderErrorList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1064,7 +1064,7 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a callback that's invoked after a sprite fails to laod.
|
||||
* Set a callback that's invoked after a sprite fails to load.
|
||||
*
|
||||
* @param listener The callback that's invoked after a sprite fails to load
|
||||
*/
|
||||
@@ -1073,7 +1073,7 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a callback that's invoked after a sprite fails to laod.
|
||||
* Removes a callback that's invoked after a sprite fails to load.
|
||||
*
|
||||
* @param listener The callback that's invoked after a sprite fails to load
|
||||
*/
|
||||
@@ -1099,6 +1099,28 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
|
||||
mapChangeReceiver.removeOnSpriteRequestedListener(callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a callback that's invoked after an error occurs
|
||||
* while trying to render a layer or drawable.
|
||||
*
|
||||
* @param listener The callback that's invoked after an error occurs
|
||||
* while trying to render a layer or drawable.
|
||||
*/
|
||||
public void addOnRenderErrorListener(MapView.OnRenderErrorListener callback) {
|
||||
mapChangeReceiver.addOnRenderErrorListener(callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a callback that's invoked after an error occurs
|
||||
* while trying to render a layer or drawable.
|
||||
*
|
||||
* @param listener The callback that's invoked after an error occurs
|
||||
* while trying to render a layer or drawable.
|
||||
*/
|
||||
public void removeOnRenderErrorListener(MapView.OnRenderErrorListener callback) {
|
||||
mapChangeReceiver.removeOnRenderErrorListener(callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface definition for a callback to be invoked when the camera will change.
|
||||
* <p>
|
||||
@@ -1513,6 +1535,20 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
|
||||
void onSpriteRequested(@NonNull String id, @NonNull String url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface definition for a callback to be invoked after an error occurs
|
||||
* while trying to render a layer or drawable.
|
||||
* <p>
|
||||
* {@link MapView#addOnRenderErrorListener(OnRenderErrorListener)}
|
||||
* </p>
|
||||
*/
|
||||
public interface OnRenderErrorListener {
|
||||
/**
|
||||
* Called when an error occurs while trying to render a layer or drawable.
|
||||
*/
|
||||
void onRenderError();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a callback object which will be triggered when the {@link MapLibreMap} instance is ready to be used.
|
||||
*
|
||||
|
||||
@@ -1379,6 +1379,13 @@ final class NativeMapView implements NativeMap {
|
||||
}
|
||||
}
|
||||
|
||||
@Keep
|
||||
private void onRenderError() {
|
||||
if (stateCallback != null) {
|
||||
stateCallback.onRenderError();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// JNI methods
|
||||
//
|
||||
@@ -1867,5 +1874,7 @@ final class NativeMapView implements NativeMap {
|
||||
void onSpriteError(String id, String url);
|
||||
|
||||
void onSpriteRequested(String id, String url);
|
||||
|
||||
void onRenderError();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user