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

Commit 0ac95bd

Browse files
committed
[android] - add style image missing binding integration, add synchronous
image overloads to style
1 parent a209714 commit 0ac95bd

10 files changed

Lines changed: 303 additions & 60 deletions

File tree

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class MapChangeReceiver implements NativeMapView.StateCallback {
3131
private final List<MapView.OnDidFinishLoadingStyleListener> onDidFinishLoadingStyleListenerList
3232
= new CopyOnWriteArrayList<>();
3333
private final List<MapView.OnSourceChangedListener> onSourceChangedListenerList = new CopyOnWriteArrayList<>();
34+
private final List<MapView.OnStyleImageMissingListener> onStyleImageMissingListenerList
35+
= new CopyOnWriteArrayList<>();
3436

3537
@Override
3638
public void onCameraWillChange(boolean animated) {
@@ -214,6 +216,20 @@ public void onSourceChanged(String sourceId) {
214216
}
215217
}
216218

219+
@Override
220+
public void onStyleImageMissing(String imageId) {
221+
try {
222+
if (!onStyleImageMissingListenerList.isEmpty()) {
223+
for (MapView.OnStyleImageMissingListener listener : onStyleImageMissingListenerList) {
224+
listener.onStyleImageMissing(imageId);
225+
}
226+
}
227+
} catch (Throwable err) {
228+
Logger.e(TAG, "Exception in onStyleImageMissing", err);
229+
throw err;
230+
}
231+
}
232+
217233
void addOnCameraWillChangeListener(MapView.OnCameraWillChangeListener listener) {
218234
onCameraWillChangeListenerList.add(listener);
219235
}
@@ -318,6 +334,14 @@ void removeOnSourceChangedListener(MapView.OnSourceChangedListener listener) {
318334
onSourceChangedListenerList.remove(listener);
319335
}
320336

337+
void addOnStyleImageMissingListener(MapView.OnStyleImageMissingListener listener) {
338+
onStyleImageMissingListenerList.add(listener);
339+
}
340+
341+
void removeOnStyleImageMissingListener(MapView.OnStyleImageMissingListener listener) {
342+
onStyleImageMissingListenerList.remove(listener);
343+
}
344+
321345
void clear() {
322346
onCameraWillChangeListenerList.clear();
323347
onCameraIsChangingListenerList.clear();
@@ -332,5 +356,6 @@ void clear() {
332356
onDidBecomeIdleListenerList.clear();
333357
onDidFinishLoadingStyleListenerList.clear();
334358
onSourceChangedListenerList.clear();
359+
onStyleImageMissingListenerList.clear();
335360
}
336361
}

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

Lines changed: 58 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ public Bitmap getViewContent() {
568568
*
569569
* @param listener The callback that's invoked when the camera region will change
570570
*/
571-
public void addOnCameraWillChangeListener(OnCameraWillChangeListener listener) {
571+
public void addOnCameraWillChangeListener(@NonNull OnCameraWillChangeListener listener) {
572572
mapChangeReceiver.addOnCameraWillChangeListener(listener);
573573
}
574574

@@ -577,7 +577,7 @@ public void addOnCameraWillChangeListener(OnCameraWillChangeListener listener) {
577577
*
578578
* @param listener The callback that's invoked when the camera region will change
579579
*/
580-
public void removeOnCameraWillChangeListener(OnCameraWillChangeListener listener) {
580+
public void removeOnCameraWillChangeListener(@NonNull OnCameraWillChangeListener listener) {
581581
mapChangeReceiver.removeOnCameraWillChangeListener(listener);
582582
}
583583

@@ -586,7 +586,7 @@ public void removeOnCameraWillChangeListener(OnCameraWillChangeListener listener
586586
*
587587
* @param listener The callback that's invoked when the camera is changing
588588
*/
589-
public void addOnCameraIsChangingListener(OnCameraIsChangingListener listener) {
589+
public void addOnCameraIsChangingListener(@NonNull OnCameraIsChangingListener listener) {
590590
mapChangeReceiver.addOnCameraIsChangingListener(listener);
591591
}
592592

@@ -595,7 +595,7 @@ public void addOnCameraIsChangingListener(OnCameraIsChangingListener listener) {
595595
*
596596
* @param listener The callback that's invoked when the camera is changing
597597
*/
598-
public void removeOnCameraIsChangingListener(OnCameraIsChangingListener listener) {
598+
public void removeOnCameraIsChangingListener(@NonNull OnCameraIsChangingListener listener) {
599599
mapChangeReceiver.removeOnCameraIsChangingListener(listener);
600600
}
601601

@@ -604,7 +604,7 @@ public void removeOnCameraIsChangingListener(OnCameraIsChangingListener listener
604604
*
605605
* @param listener The callback that's invoked when the camera region did change
606606
*/
607-
public void addOnCameraDidChangeListener(OnCameraDidChangeListener listener) {
607+
public void addOnCameraDidChangeListener(@NonNull OnCameraDidChangeListener listener) {
608608
mapChangeReceiver.addOnCameraDidChangeListener(listener);
609609
}
610610

@@ -613,7 +613,7 @@ public void addOnCameraDidChangeListener(OnCameraDidChangeListener listener) {
613613
*
614614
* @param listener The callback that's invoked when the camera region did change
615615
*/
616-
public void removeOnCameraDidChangeListener(OnCameraDidChangeListener listener) {
616+
public void removeOnCameraDidChangeListener(@NonNull OnCameraDidChangeListener listener) {
617617
mapChangeReceiver.removeOnCameraDidChangeListener(listener);
618618
}
619619

@@ -622,7 +622,7 @@ public void removeOnCameraDidChangeListener(OnCameraDidChangeListener listener)
622622
*
623623
* @param listener The callback that's invoked when the map will start loading
624624
*/
625-
public void addOnWillStartLoadingMapListener(OnWillStartLoadingMapListener listener) {
625+
public void addOnWillStartLoadingMapListener(@NonNull OnWillStartLoadingMapListener listener) {
626626
mapChangeReceiver.addOnWillStartLoadingMapListener(listener);
627627
}
628628

@@ -631,7 +631,7 @@ public void addOnWillStartLoadingMapListener(OnWillStartLoadingMapListener liste
631631
*
632632
* @param listener The callback that's invoked when the map will start loading
633633
*/
634-
public void removeOnWillStartLoadingMapListener(OnWillStartLoadingMapListener listener) {
634+
public void removeOnWillStartLoadingMapListener(@NonNull OnWillStartLoadingMapListener listener) {
635635
mapChangeReceiver.removeOnWillStartLoadingMapListener(listener);
636636
}
637637

@@ -640,7 +640,7 @@ public void removeOnWillStartLoadingMapListener(OnWillStartLoadingMapListener li
640640
*
641641
* @param listener The callback that's invoked when the map has finished loading
642642
*/
643-
public void addOnDidFinishLoadingMapListener(OnDidFinishLoadingMapListener listener) {
643+
public void addOnDidFinishLoadingMapListener(@NonNull OnDidFinishLoadingMapListener listener) {
644644
mapChangeReceiver.addOnDidFinishLoadingMapListener(listener);
645645
}
646646

@@ -649,7 +649,7 @@ public void addOnDidFinishLoadingMapListener(OnDidFinishLoadingMapListener liste
649649
*
650650
* @param listener The callback that's invoked when the map has finished loading
651651
*/
652-
public void removeOnDidFinishLoadingMapListener(OnDidFinishLoadingMapListener listener) {
652+
public void removeOnDidFinishLoadingMapListener(@NonNull OnDidFinishLoadingMapListener listener) {
653653
mapChangeReceiver.removeOnDidFinishLoadingMapListener(listener);
654654
}
655655

@@ -658,7 +658,7 @@ public void removeOnDidFinishLoadingMapListener(OnDidFinishLoadingMapListener li
658658
*
659659
* @param listener The callback that's invoked when the map failed to load
660660
*/
661-
public void addOnDidFailLoadingMapListener(OnDidFailLoadingMapListener listener) {
661+
public void addOnDidFailLoadingMapListener(@NonNull OnDidFailLoadingMapListener listener) {
662662
mapChangeReceiver.addOnDidFailLoadingMapListener(listener);
663663
}
664664

@@ -667,7 +667,7 @@ public void addOnDidFailLoadingMapListener(OnDidFailLoadingMapListener listener)
667667
*
668668
* @param listener The callback that's invoked when the map failed to load
669669
*/
670-
public void removeOnDidFailLoadingMapListener(OnDidFailLoadingMapListener listener) {
670+
public void removeOnDidFailLoadingMapListener(@NonNull OnDidFailLoadingMapListener listener) {
671671
mapChangeReceiver.removeOnDidFailLoadingMapListener(listener);
672672
}
673673

@@ -676,7 +676,7 @@ public void removeOnDidFailLoadingMapListener(OnDidFailLoadingMapListener listen
676676
*
677677
* @param listener The callback that's invoked when the camera will start rendering a frame
678678
*/
679-
public void addOnWillStartRenderingFrameListener(OnWillStartRenderingFrameListener listener) {
679+
public void addOnWillStartRenderingFrameListener(@NonNull OnWillStartRenderingFrameListener listener) {
680680
mapChangeReceiver.addOnWillStartRenderingFrameListener(listener);
681681
}
682682

@@ -685,7 +685,7 @@ public void addOnWillStartRenderingFrameListener(OnWillStartRenderingFrameListen
685685
*
686686
* @param listener The callback that's invoked when the camera will start rendering a frame
687687
*/
688-
public void removeOnWillStartRenderingFrameListener(OnWillStartRenderingFrameListener listener) {
688+
public void removeOnWillStartRenderingFrameListener(@NonNull OnWillStartRenderingFrameListener listener) {
689689
mapChangeReceiver.removeOnWillStartRenderingFrameListener(listener);
690690
}
691691

@@ -694,7 +694,7 @@ public void removeOnWillStartRenderingFrameListener(OnWillStartRenderingFrameLis
694694
*
695695
* @param listener The callback that's invoked when the map has finished rendering a frame
696696
*/
697-
public void addOnDidFinishRenderingFrameListener(OnDidFinishRenderingFrameListener listener) {
697+
public void addOnDidFinishRenderingFrameListener(@NonNull OnDidFinishRenderingFrameListener listener) {
698698
mapChangeReceiver.addOnDidFinishRenderingFrameListener(listener);
699699
}
700700

@@ -703,7 +703,7 @@ public void addOnDidFinishRenderingFrameListener(OnDidFinishRenderingFrameListen
703703
*
704704
* @param listener The callback that's invoked when the map has finished rendering a frame
705705
*/
706-
public void removeOnDidFinishRenderingFrameListener(OnDidFinishRenderingFrameListener listener) {
706+
public void removeOnDidFinishRenderingFrameListener(@NonNull OnDidFinishRenderingFrameListener listener) {
707707
mapChangeReceiver.removeOnDidFinishRenderingFrameListener(listener);
708708
}
709709

@@ -712,7 +712,7 @@ public void removeOnDidFinishRenderingFrameListener(OnDidFinishRenderingFrameLis
712712
*
713713
* @param listener The callback that's invoked when the map will start rendering
714714
*/
715-
public void addOnWillStartRenderingMapListener(OnWillStartRenderingMapListener listener) {
715+
public void addOnWillStartRenderingMapListener(@NonNull OnWillStartRenderingMapListener listener) {
716716
mapChangeReceiver.addOnWillStartRenderingMapListener(listener);
717717
}
718718

@@ -721,7 +721,7 @@ public void addOnWillStartRenderingMapListener(OnWillStartRenderingMapListener l
721721
*
722722
* @param listener The callback that's invoked when the map will start rendering
723723
*/
724-
public void removeOnWillStartRenderingMapListener(OnWillStartRenderingMapListener listener) {
724+
public void removeOnWillStartRenderingMapListener(@NonNull OnWillStartRenderingMapListener listener) {
725725
mapChangeReceiver.removeOnWillStartRenderingMapListener(listener);
726726
}
727727

@@ -730,7 +730,7 @@ public void removeOnWillStartRenderingMapListener(OnWillStartRenderingMapListene
730730
*
731731
* @param listener The callback that's invoked when the map has finished rendering
732732
*/
733-
public void addOnDidFinishRenderingMapListener(OnDidFinishRenderingMapListener listener) {
733+
public void addOnDidFinishRenderingMapListener(@NonNull OnDidFinishRenderingMapListener listener) {
734734
mapChangeReceiver.addOnDidFinishRenderingMapListener(listener);
735735
}
736736

@@ -748,7 +748,7 @@ public void removeOnDidFinishRenderingMapListener(OnDidFinishRenderingMapListene
748748
*
749749
* @param listener The callback that's invoked when the map has entered the idle state.
750750
*/
751-
public void addOnDidBecomeIdleListener(OnDidBecomeIdleListener listener) {
751+
public void addOnDidBecomeIdleListener(@NonNull OnDidBecomeIdleListener listener) {
752752
mapChangeReceiver.addOnDidBecomeIdleListener(listener);
753753
}
754754

@@ -757,7 +757,7 @@ public void addOnDidBecomeIdleListener(OnDidBecomeIdleListener listener) {
757757
*
758758
* @param listener The callback that's invoked when the map has entered the idle state.
759759
*/
760-
public void removeOnDidBecomeIdleListener(OnDidBecomeIdleListener listener) {
760+
public void removeOnDidBecomeIdleListener(@NonNull OnDidBecomeIdleListener listener) {
761761
mapChangeReceiver.removeOnDidBecomeIdleListener(listener);
762762
}
763763

@@ -767,7 +767,7 @@ public void removeOnDidBecomeIdleListener(OnDidBecomeIdleListener listener) {
767767
*
768768
* @param listener The callback that's invoked when the style has finished loading
769769
*/
770-
public void addOnDidFinishLoadingStyleListener(OnDidFinishLoadingStyleListener listener) {
770+
public void addOnDidFinishLoadingStyleListener(@NonNull OnDidFinishLoadingStyleListener listener) {
771771
mapChangeReceiver.addOnDidFinishLoadingStyleListener(listener);
772772
}
773773

@@ -776,7 +776,7 @@ public void addOnDidFinishLoadingStyleListener(OnDidFinishLoadingStyleListener l
776776
*
777777
* @param listener The callback that's invoked when the style has finished loading
778778
*/
779-
public void removeOnDidFinishLoadingStyleListener(OnDidFinishLoadingStyleListener listener) {
779+
public void removeOnDidFinishLoadingStyleListener(@NonNull OnDidFinishLoadingStyleListener listener) {
780780
mapChangeReceiver.removeOnDidFinishLoadingStyleListener(listener);
781781
}
782782

@@ -785,7 +785,7 @@ public void removeOnDidFinishLoadingStyleListener(OnDidFinishLoadingStyleListene
785785
*
786786
* @param listener The callback that's invoked when the source has changed
787787
*/
788-
public void addOnSourceChangedListener(OnSourceChangedListener listener) {
788+
public void addOnSourceChangedListener(@NonNull OnSourceChangedListener listener) {
789789
mapChangeReceiver.addOnSourceChangedListener(listener);
790790
}
791791

@@ -794,10 +794,28 @@ public void addOnSourceChangedListener(OnSourceChangedListener listener) {
794794
*
795795
* @param listener The callback that's invoked when the source has changed
796796
*/
797-
public void removeOnSourceChangedListener(OnSourceChangedListener listener) {
797+
public void removeOnSourceChangedListener(@NonNull OnSourceChangedListener listener) {
798798
mapChangeReceiver.removeOnSourceChangedListener(listener);
799799
}
800800

801+
/**
802+
* Set a callback that's invoked when the id of an icon is missing.
803+
*
804+
* @param listener The callback that's invoked when the id of an icon is missing
805+
*/
806+
public void addOnStyleImageMissingListener(@NonNull OnStyleImageMissingListener listener) {
807+
mapChangeReceiver.addOnStyleImageMissingListener(listener);
808+
}
809+
810+
/**
811+
* Set a callback that's invoked when a map source has changed.
812+
*
813+
* @param listener The callback that's invoked when the source has changed
814+
*/
815+
public void removeOnStyleImageMissingListener(@NonNull OnStyleImageMissingListener listener) {
816+
mapChangeReceiver.removeOnStyleImageMissingListener(listener);
817+
}
818+
801819
/**
802820
* Interface definition for a callback to be invoked when the camera will change.
803821
* <p>
@@ -976,6 +994,21 @@ public interface OnSourceChangedListener {
976994
void onSourceChangedListener(String id);
977995
}
978996

997+
/**
998+
* Interface definition for a callback to be invoked with the id of a missing icon.
999+
* <p>
1000+
* {@link MapView#addOnStyleImageMissingListener(OnStyleImageMissingListener)}
1001+
* </p>
1002+
*/
1003+
public interface OnStyleImageMissingListener {
1004+
/**
1005+
* Called when the map is missing an icon.
1006+
*
1007+
* @param id the id of the icon that is missing
1008+
*/
1009+
void onStyleImageMissing(@NonNull String id);
1010+
}
1011+
9791012
/**
9801013
* Sets a callback object which will be triggered when the {@link MapboxMap} instance is ready to be used.
9811014
*

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1025,7 +1025,9 @@ private void onDidFinishRenderingMap(boolean fully) {
10251025

10261026
@Keep
10271027
private void onDidBecomeIdle() {
1028-
stateCallback.onDidBecomeIdle();
1028+
if (stateCallback != null) {
1029+
stateCallback.onDidBecomeIdle();
1030+
}
10291031
}
10301032

10311033
@Keep
@@ -1042,6 +1044,14 @@ private void onSourceChanged(String sourceId) {
10421044
}
10431045
}
10441046

1047+
@Keep
1048+
private void onStyleImageMissing(String imageId) {
1049+
Logger.e(TAG, "OnStyleImageMissing: " + imageId);
1050+
if (stateCallback != null) {
1051+
stateCallback.onStyleImageMissing(imageId);
1052+
}
1053+
}
1054+
10451055
@Keep
10461056
protected void onSnapshotReady(@Nullable Bitmap mapContent) {
10471057
if (checkState("OnSnapshotReady")) {
@@ -1473,5 +1483,7 @@ interface StateCallback extends StyleCallback {
14731483
void onDidBecomeIdle();
14741484

14751485
void onSourceChanged(String sourceId);
1486+
1487+
void onStyleImageMissing(String imageId);
14761488
}
14771489
}

0 commit comments

Comments
 (0)