summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2017-12-16 17:51:53 +0100
committerTobrun <tobrun.van.nuland@gmail.com>2017-12-18 13:33:42 +0100
commita82f9595aefd76a61b22e7081254fc1320d0d6b3 (patch)
treefb40ddce65dd991ea197c5ac944d4975dac681c5
parent74b06274326de3c4d9cb34cd70497bd8d85a1e58 (diff)
downloadqtlocation-mapboxgl-upstream/tvn-remove-fragment-flash.tar.gz
[android] - remove startup flash from fragment, rework OnMapReady callback for multiple listenersupstream/tvn-remove-fragment-flash
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java30
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java30
2 files changed, 44 insertions, 16 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java
index 01c6da4971..0c11a4220e 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java
@@ -11,6 +11,9 @@ import android.view.ViewGroup;
import com.mapbox.mapboxsdk.utils.MapFragmentUtils;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Fragment wrapper around a map view.
* <p>
@@ -25,10 +28,11 @@ import com.mapbox.mapboxsdk.utils.MapFragmentUtils;
*
* @see #getMapAsync(OnMapReadyCallback)
*/
-public final class MapFragment extends Fragment {
+public final class MapFragment extends Fragment implements OnMapReadyCallback {
+ private final List<OnMapReadyCallback> mapReadyCallbackList = new ArrayList<>();
+ private MapboxMap mapboxMap;
private MapView map;
- private OnMapReadyCallback onMapReadyCallback;
/**
* Creates a default MapFragment instance
@@ -63,7 +67,9 @@ public final class MapFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
Context context = inflater.getContext();
- return map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments()));
+ map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments()));
+ map.setVisibility(View.INVISIBLE);
+ return map;
}
/**
@@ -76,9 +82,16 @@ public final class MapFragment extends Fragment {
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
map.onCreate(savedInstanceState);
- if (onMapReadyCallback != null) {
- map.getMapAsync(onMapReadyCallback);
+ map.getMapAsync(this);
+ }
+
+ @Override
+ public void onMapReady(MapboxMap mapboxMap) {
+ this.mapboxMap = mapboxMap;
+ for (OnMapReadyCallback onMapReadyCallback : mapReadyCallbackList) {
+ onMapReadyCallback.onMapReady(mapboxMap);
}
+ map.setVisibility(View.VISIBLE);
}
/**
@@ -144,6 +157,7 @@ public final class MapFragment extends Fragment {
public void onDestroyView() {
super.onDestroyView();
map.onDestroy();
+ mapReadyCallbackList.clear();
}
/**
@@ -152,10 +166,10 @@ public final class MapFragment extends Fragment {
* @param onMapReadyCallback The callback to be invoked.
*/
public void getMapAsync(@NonNull final OnMapReadyCallback onMapReadyCallback) {
- if (map == null) {
- this.onMapReadyCallback = onMapReadyCallback;
+ if (mapboxMap == null) {
+ mapReadyCallbackList.add(onMapReadyCallback);
} else {
- map.getMapAsync(onMapReadyCallback);
+ onMapReadyCallback.onMapReady(mapboxMap);
}
}
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java
index 6c90cd95ec..c072ec8237 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java
@@ -11,6 +11,9 @@ import android.view.ViewGroup;
import com.mapbox.mapboxsdk.utils.MapFragmentUtils;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* Support Fragment wrapper around a map view.
* <p>
@@ -25,10 +28,11 @@ import com.mapbox.mapboxsdk.utils.MapFragmentUtils;
*
* @see #getMapAsync(OnMapReadyCallback)
*/
-public class SupportMapFragment extends Fragment {
+public class SupportMapFragment extends Fragment implements OnMapReadyCallback {
+ private final List<OnMapReadyCallback> mapReadyCallbackList = new ArrayList<>();
+ private MapboxMap mapboxMap;
private MapView map;
- private OnMapReadyCallback onMapReadyCallback;
/**
* Creates a default MapFragment instance
@@ -63,7 +67,9 @@ public class SupportMapFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
Context context = inflater.getContext();
- return map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments()));
+ map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments()));
+ map.setVisibility(View.INVISIBLE);
+ return map;
}
/**
@@ -76,9 +82,16 @@ public class SupportMapFragment extends Fragment {
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
map.onCreate(savedInstanceState);
- if (onMapReadyCallback != null) {
- map.getMapAsync(onMapReadyCallback);
+ map.getMapAsync(this);
+ }
+
+ @Override
+ public void onMapReady(MapboxMap mapboxMap) {
+ this.mapboxMap = mapboxMap;
+ for (OnMapReadyCallback onMapReadyCallback : mapReadyCallbackList) {
+ onMapReadyCallback.onMapReady(mapboxMap);
}
+ map.setVisibility(View.VISIBLE);
}
/**
@@ -144,6 +157,7 @@ public class SupportMapFragment extends Fragment {
public void onDestroyView() {
super.onDestroyView();
map.onDestroy();
+ mapReadyCallbackList.clear();
}
/**
@@ -152,10 +166,10 @@ public class SupportMapFragment extends Fragment {
* @param onMapReadyCallback The callback to be invoked.
*/
public void getMapAsync(@NonNull final OnMapReadyCallback onMapReadyCallback) {
- if (map == null) {
- this.onMapReadyCallback = onMapReadyCallback;
+ if (mapboxMap == null) {
+ mapReadyCallbackList.add(onMapReadyCallback);
} else {
- map.getMapAsync(onMapReadyCallback);
+ onMapReadyCallback.onMapReady(mapboxMap);
}
}
}