From d994f2de0fc9331d712b8dddded9e3792efa154f Mon Sep 17 00:00:00 2001 From: Tobrun Date: Wed, 2 Mar 2016 11:21:03 +0100 Subject: [PATCH] [android] #4166 - move style url to map view for improved async loading --- .../mapbox/mapboxsdk/maps/MapFragment.java | 1 + .../com/mapbox/mapboxsdk/maps/MapView.java | 110 +++++++++++++++--- .../com/mapbox/mapboxsdk/maps/MapboxMap.java | 3 +- .../mapboxsdk/maps/SupportMapFragment.java | 1 + .../mapboxsdk/testapp/CameraActivity.java | 1 - .../testapp/CoordinateChangeActivity.java | 1 - .../mapboxsdk/testapp/DoubleMapActivity.java | 5 +- .../testapp/DynamicMarkerChangeActivity.java | 1 - .../mapboxsdk/testapp/GeocoderActivity.java | 4 +- .../mapboxsdk/testapp/InfoWindowActivity.java | 9 +- .../testapp/LatLngBoundsActivity.java | 1 + .../mapboxsdk/testapp/MainActivity.java | 14 +-- .../mapboxsdk/testapp/ManualZoomActivity.java | 2 +- .../testapp/MapFragmentActivity.java | 2 - .../mapboxsdk/testapp/MapPaddingActivity.java | 22 ++-- .../mapboxsdk/testapp/MapboxMapActivity.java | 6 +- .../mapboxsdk/testapp/MaxMinZoomActivity.java | 2 +- .../mapboxsdk/testapp/OfflineActivity.java | 4 +- .../testapp/PressForMarkerActivity.java | 6 +- .../mapboxsdk/testapp/ScrollByActivity.java | 3 +- .../mapboxsdk/testapp/TiltActivity.java | 4 - .../mapbox/mapboxsdk/maps/MapboxMapTest.java | 16 --- 22 files changed, 130 insertions(+), 88 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 3d103f6f8..61d4af51c 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 @@ -9,6 +9,7 @@ import android.view.View; import android.view.ViewGroup; import com.mapbox.mapboxsdk.R; +import com.mapbox.mapboxsdk.constants.Style; import com.mapbox.mapboxsdk.utils.ApiAccess; /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index 3a689ac97..cd2d0c68a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -55,6 +55,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ListView; import android.widget.ZoomButtonsController; + import com.almeros.android.multitouch.gesturedetectors.RotateGestureDetector; import com.almeros.android.multitouch.gesturedetectors.ShoveGestureDetector; import com.almeros.android.multitouch.gesturedetectors.TwoFingerGestureDetector; @@ -71,6 +72,7 @@ import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.constants.MyBearingTracking; import com.mapbox.mapboxsdk.constants.MyLocationTracking; +import com.mapbox.mapboxsdk.constants.Style; import com.mapbox.mapboxsdk.exceptions.IconBitmapChangedException; import com.mapbox.mapboxsdk.exceptions.InvalidAccessTokenException; import com.mapbox.mapboxsdk.exceptions.TelemetryServiceNotConfiguredException; @@ -82,6 +84,7 @@ import com.mapbox.mapboxsdk.maps.widgets.UserLocationView; import com.mapbox.mapboxsdk.telemetry.MapboxEvent; import com.mapbox.mapboxsdk.telemetry.MapboxEventManager; import com.mapbox.mapboxsdk.utils.ApiAccess; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.nio.ByteBuffer; @@ -145,6 +148,10 @@ public class MapView extends FrameLayout { private int mContentPaddingRight; private int mContentPaddingBottom; + private OnMapReadyCallback mMapReadyCallback; + private String mStyleUrl; + private boolean mInitialLoad; + @UiThread public MapView(@NonNull Context context) { super(context); @@ -164,6 +171,7 @@ public class MapView extends FrameLayout { } private void initialize(@NonNull Context context, @Nullable AttributeSet attrs) { + mInitialLoad = true; mOnMapChangedListener = new CopyOnWriteArrayList<>(); mMapboxMap = new MapboxMap(this); mIcons = new ArrayList<>(); @@ -307,6 +315,9 @@ public class MapView extends FrameLayout { */ @UiThread public void onCreate(@Nullable Bundle savedInstanceState) { + // Force a check for an access token + validateAccessToken(getAccessToken()); + if (savedInstanceState != null && savedInstanceState.getBoolean(MapboxConstants.STATE_HAS_SAVED_STATE)) { // Get previous camera position @@ -370,16 +381,10 @@ public class MapView extends FrameLayout { // Force a check for Telemetry validateTelemetryServiceConfigured(); - // Force a check for an access token - validateAccessToken(getAccessToken()); - // Start Telemetry (authorization determined in initial MapboxEventManager constructor) MapboxEventManager.configureAndStartMapboxEventManager(getContext(), getAccessToken()); } - // Force a check for an access token - validateAccessToken(getAccessToken()); - // Initialize EGL mNativeMapView.initializeDisplay(); mNativeMapView.initializeContext(); @@ -392,6 +397,12 @@ public class MapView extends FrameLayout { reloadIcons(); reloadMarkers(); adjustTopOffsetPixels(); + if (mInitialLoad) { + mInitialLoad = false; + if (mMapReadyCallback != null) { + mMapReadyCallback.onMapReady(mMapboxMap); + } + } } } }); @@ -417,7 +428,7 @@ public class MapView extends FrameLayout { outState.putBoolean(MapboxConstants.STATE_HAS_SAVED_STATE, true); outState.putParcelable(MapboxConstants.STATE_CAMERA_POSITION, mMapboxMap.getCameraPosition()); outState.putBoolean(MapboxConstants.STATE_DEBUG_ACTIVE, mMapboxMap.isDebugActive()); - outState.putString(MapboxConstants.STATE_STYLE_URL, mMapboxMap.getStyleUrl()); + outState.putString(MapboxConstants.STATE_STYLE_URL, mStyleUrl); outState.putString(MapboxConstants.STATE_ACCESS_TOKEN, mMapboxMap.getAccessToken()); outState.putLong(MapboxConstants.STATE_DEFAULT_TRANSITION_DURATION, mNativeMapView.getDefaultTransitionDuration()); outState.putBoolean(MapboxConstants.STATE_MY_LOCATION_ENABLED, mMapboxMap.isMyLocationEnabled()); @@ -514,6 +525,11 @@ public class MapView extends FrameLayout { mNativeMapView.resume(); mNativeMapView.update(); mUserLocationView.resume(); + + if (mStyleUrl == null) { + // user has failed to supply a style url + setStyleUrl(Style.MAPBOX_STREETS); + } } /** @@ -676,10 +692,72 @@ public class MapView extends FrameLayout { // Styling // - void setStyleUrl(@NonNull String url) { + /** + *

+ * Loads a new map style from the specified URL. + *

+ * {@code url} can take the following forms: + *