diff --git a/sdk/src/main/java/com/eegeo/mapapi/EegeoMap.java b/sdk/src/main/java/com/eegeo/mapapi/EegeoMap.java index 2bce50f..452c7f1 100644 --- a/sdk/src/main/java/com/eegeo/mapapi/EegeoMap.java +++ b/sdk/src/main/java/com/eegeo/mapapi/EegeoMap.java @@ -83,6 +83,8 @@ import com.eegeo.mapapi.services.routing.RoutingQueryResponse; import com.eegeo.mapapi.services.routing.RoutingApi; import com.eegeo.mapapi.services.routing.RoutingService; +import com.eegeo.mapapi.streaming.OnStreamingCompleteListener; +import com.eegeo.mapapi.streaming.StreamingApi; import com.eegeo.mapapi.util.Callbacks; import com.eegeo.mapapi.util.Promise; import com.eegeo.mapapi.util.Ready; @@ -144,6 +146,7 @@ public final class EegeoMap { private IndoorMapEntityInformationApi m_indoorMapEntityInformationApi; private IndoorMapFloorOutlineInformationApi m_indoorMapFloorOutlineInformationApi; private LabelApi m_labelApi; + private StreamingApi m_streamingApi; private static final AllowApiAccess m_allowApiAccess = new AllowApiAccess(); @@ -182,6 +185,7 @@ public final class EegeoMap { this.m_indoorMapEntityInformationApi = new IndoorMapEntityInformationApi(m_nativeRunner, m_uiRunner, m_eegeoMapApiPtr); this.m_indoorMapFloorOutlineInformationApi = new IndoorMapFloorOutlineInformationApi(m_nativeRunner, m_uiRunner, m_eegeoMapApiPtr); this.m_labelApi = new LabelApi(m_nativeRunner, m_uiRunner, m_eegeoMapApiPtr); + this.m_streamingApi = new StreamingApi(m_nativeRunner, m_uiRunner, m_eegeoMapApiPtr); } @WorkerThread @@ -1230,6 +1234,27 @@ public void removeOnIndoorEntityPickedListener(@NonNull OnIndoorEntityPickedList m_indoorEntityApi.removeOnIndoorEntityPickedListener(listener); } + /** + * Registers a listener of a streaming complete event + * + * @param listener The listener to be removed. + */ + @UiThread + public void addOnStreamingCompleteListener(@NonNull OnStreamingCompleteListener listener) { + m_streamingApi.addStreamingCompleteListener(listener); + } + + /** + * Unregisters a listener of a streaming complete event + * + * @param listener The listener to be removed. + */ + @UiThread + public void removeOnStreamingCompleteListener(@NonNull OnStreamingCompleteListener listener) { + m_streamingApi.removeStreamingCompleteListener(listener); + } + + /** * Begin an operation to precache a spherical area of the map. This allows that area to load * faster in future. @@ -1397,6 +1422,17 @@ public void run() { }); } + @WorkerThread + private void jniNotifyStreamingComplete() { + m_uiRunner.runOnUiThread(new Runnable() { + @UiThread + @Override + public void run() { + m_streamingApi.notifyStreamingCompleteReceived(); + } + }); + } + /** * Interface for objects which receive notifications of changes to the camera. */ diff --git a/sdk/src/main/java/com/eegeo/mapapi/streaming/OnStreamingCompleteListener.java b/sdk/src/main/java/com/eegeo/mapapi/streaming/OnStreamingCompleteListener.java new file mode 100644 index 0000000..0f8515f --- /dev/null +++ b/sdk/src/main/java/com/eegeo/mapapi/streaming/OnStreamingCompleteListener.java @@ -0,0 +1,18 @@ +package com.eegeo.mapapi.streaming; + +import androidx.annotation.UiThread; + +import com.eegeo.mapapi.buildings.BuildingHighlight; + +/** + * An interface that may be implemented and supplied to BuildingHighlightOptions in order to + * receive notification that BuildingInformation has been received. + */ +public interface OnStreamingCompleteListener { + /** + * Called when the streaming has been completed after a camera movement + */ + @UiThread + void onStreamingComplete(); + +} diff --git a/sdk/src/main/java/com/eegeo/mapapi/streaming/StreamingApi.java b/sdk/src/main/java/com/eegeo/mapapi/streaming/StreamingApi.java new file mode 100644 index 0000000..35ceeec --- /dev/null +++ b/sdk/src/main/java/com/eegeo/mapapi/streaming/StreamingApi.java @@ -0,0 +1,72 @@ +package com.eegeo.mapapi.streaming; + +import android.graphics.Point; +import android.util.SparseArray; + +import androidx.annotation.NonNull; +import androidx.annotation.UiThread; +import androidx.annotation.WorkerThread; + +import com.eegeo.mapapi.INativeMessageRunner; +import com.eegeo.mapapi.IUiMessageRunner; + +import java.util.ArrayList; +import java.util.List; + +/** + * @eegeo.internal + */ +public class StreamingApi { + private INativeMessageRunner m_nativeRunner; + private IUiMessageRunner m_uiRunner; + private long m_jniEegeoMapApiPtr; + + private List m_onStreamingCompleteListeners = new ArrayList<>(); + + public StreamingApi(INativeMessageRunner nativeRunner, + IUiMessageRunner uiRunner, + long jniEegeoMapApiPtr) { + this.m_nativeRunner = nativeRunner; + this.m_uiRunner = uiRunner; + this.m_jniEegeoMapApiPtr = jniEegeoMapApiPtr; + } + + @UiThread + INativeMessageRunner getNativeRunner() { + return m_nativeRunner; + } + + @UiThread + IUiMessageRunner getUiRunner() { + return m_uiRunner; + } + + /** + * Registers a listener of a streaming complete event + * + * @param listener The listener to be removed. + */ + @UiThread + public void addStreamingCompleteListener(@NonNull OnStreamingCompleteListener listener) { + m_onStreamingCompleteListeners.add(listener); + } + + /** + * Unregisters a listener of a streaming complete event + * + * @param listener The listener to be removed. + */ + @UiThread + public void removeStreamingCompleteListener(@NonNull OnStreamingCompleteListener listener) { + m_onStreamingCompleteListeners.remove(listener); + } + + @UiThread + public void notifyStreamingCompleteReceived() { + for (OnStreamingCompleteListener listener: m_onStreamingCompleteListeners){ + listener.onStreamingComplete(); + } + } +} + +