[android] #4076 - MapboxMapOptions fix

This commit is contained in:
Tobrun
2016-03-09 17:46:00 -05:00
parent 7cceca4b45
commit 808bf7004a
14 changed files with 468 additions and 172 deletions

View File

@@ -13,7 +13,6 @@ import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.PointF;
@@ -39,7 +38,6 @@ import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -112,8 +110,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
*/
public class MapView extends FrameLayout {
private static final String TAG = "MapView";
private MapboxMap mMapboxMap;
private List<Icon> mIcons;
@@ -151,7 +147,7 @@ public class MapView extends FrameLayout {
@UiThread
public MapView(@NonNull Context context) {
super(context);
initialize(context, null);
initialize(context, MapboxMapOptions.createFromAttributes(context, null));
}
@UiThread
@@ -172,7 +168,7 @@ public class MapView extends FrameLayout {
initialize(context, options);
}
private void initialize(@NonNull Context context, @Nullable MapboxMapOptions options) {
private void initialize(@NonNull Context context, @NonNull MapboxMapOptions options) {
mInitialLoad = true;
mOnMapChangedListener = new CopyOnWriteArrayList<>();
mMapboxMap = new MapboxMap(this);
@@ -209,11 +205,6 @@ public class MapView extends FrameLayout {
mRotateGestureDetector = new RotateGestureDetector(context, new RotateGestureListener());
mShoveGestureDetector = new ShoveGestureDetector(context, new ShoveGestureListener());
// Shows the zoom controls
if (!context.getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)) {
mMapboxMap.getUiSettings().setZoomControlsEnabled(true);
}
mZoomButtonsController = new ZoomButtonsController(this);
mZoomButtonsController.setZoomSpeed(MapboxConstants.ANIMATION_DURATION);
mZoomButtonsController.setOnZoomListener(new OnZoomListener());
@@ -235,69 +226,69 @@ public class MapView extends FrameLayout {
mScreenDensity = context.getResources().getDisplayMetrics().density;
// // Load the attributes
// TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MapView, 0, 0);
// try {
// // Debug mode
// mMapboxMap.setDebugActive(typedArray.getBoolean(R.styleable.MapView_debug_active, false));
//
// // Move camera
// CameraPosition cameraPosition = new CameraPosition.Builder(typedArray).build();
// mMapboxMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
//
// // Access token
// String accessToken = typedArray.getString(R.styleable.MapView_access_token);
// if (accessToken != null) {
// setAccessToken(typedArray.getString(R.styleable.MapView_access_token));
// }
//
// // Style url
// String styleUrl = typedArray.getString(R.styleable.MapView_style_url);
// if (styleUrl != null) {
// mMapboxMap.setStyleUrl(styleUrl);
// }
//
// // Enable gestures
// UiSettings uiSettings = mMapboxMap.getUiSettings();
// uiSettings.setZoomGesturesEnabled(typedArray.getBoolean(R.styleable.MapView_zoom_enabled, true));
// uiSettings.setScrollGesturesEnabled(typedArray.getBoolean(R.styleable.MapView_scroll_enabled, true));
// uiSettings.setRotateGesturesEnabled(typedArray.getBoolean(R.styleable.MapView_rotate_enabled, true));
// uiSettings.setTiltGesturesEnabled(typedArray.getBoolean(R.styleable.MapView_tilt_enabled, true));
// uiSettings.setZoomControlsEnabled(typedArray.getBoolean(R.styleable.MapView_zoom_controls_enabled, false));
//
// // Zoom
// uiSettings.setMaxZoom(typedArray.getFloat(R.styleable.MapView_zoom_max, (float) MapboxConstants.MAXIMUM_ZOOM));
// uiSettings.setMinZoom(typedArray.getFloat(R.styleable.MapView_zoom_min, (float) MapboxConstants.MINIMUM_ZOOM));
//
// // Compass
// uiSettings.setCompassEnabled(typedArray.getBoolean(R.styleable.MapView_compass_enabled, true));
// uiSettings.setCompassGravity(typedArray.getInt(R.styleable.MapView_compass_gravity, Gravity.TOP | Gravity.END));
// uiSettings.setCompassMargins((int) (typedArray.getDimension(R.styleable.MapView_compass_margin_left, DIMENSION_TEN_DP) * mScreenDensity)
// , ((int) typedArray.getDimension(R.styleable.MapView_compass_margin_top, DIMENSION_TEN_DP * mScreenDensity))
// , ((int) typedArray.getDimension(R.styleable.MapView_compass_margin_right, DIMENSION_TEN_DP * mScreenDensity))
// , ((int) typedArray.getDimension(R.styleable.MapView_compass_margin_bottom, DIMENSION_TEN_DP * mScreenDensity)));
//
// // Logo
// uiSettings.setLogoEnabled(typedArray.getBoolean(R.styleable.MapView_logo_visibility, true));
// uiSettings.setLogoGravity(typedArray.getInt(R.styleable.MapView_logo_gravity, Gravity.BOTTOM | Gravity.START));
// uiSettings.setLogoMargins((int) (typedArray.getDimension(R.styleable.MapView_logo_margin_left, DIMENSION_SIXTEEN_DP) * mScreenDensity)
// , (int) (typedArray.getDimension(R.styleable.MapView_logo_margin_top, DIMENSION_SIXTEEN_DP) * mScreenDensity)
// , (int) (typedArray.getDimension(R.styleable.MapView_logo_margin_right, DIMENSION_SIXTEEN_DP) * mScreenDensity)
// , (int) (typedArray.getDimension(R.styleable.MapView_logo_margin_bottom, DIMENSION_SIXTEEN_DP) * mScreenDensity));
//
// // Attribution
// uiSettings.setAttributionEnabled(typedArray.getBoolean(R.styleable.MapView_attribution_visibility, true));
// uiSettings.setAttributionGravity(typedArray.getInt(R.styleable.MapView_attribution_gravity, Gravity.BOTTOM));
// uiSettings.setAttributionMargins((int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_left, DIMENSION_SEVENTY_SIX_DP) * mScreenDensity)
// , (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_top, DIMENSION_SEVEN_DP) * mScreenDensity)
// , (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_right, DIMENSION_SEVEN_DP) * mScreenDensity)
// , (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_bottom, DIMENSION_SEVEN_DP) * mScreenDensity));
//
// // User location
// mMapboxMap.setMyLocationEnabled(typedArray.getBoolean(R.styleable.MapView_my_location_enabled, false));
// } finally {
// typedArray.recycle();
// }
setInitialState(options);
// Shows the zoom controls
if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)) {
mMapboxMap.getUiSettings().setZoomControlsEnabled(true);
}
}
private void setInitialState(MapboxMapOptions options) {
mMapboxMap.setDebugActive(options.getDebugActive());
CameraPosition position = options.getCamera();
if (position != null) {
mMapboxMap.moveCamera(CameraUpdateFactory.newCameraPosition(position));
}
String accessToken = options.getAccessToken();
if (!TextUtils.isEmpty(accessToken)) {
mMapboxMap.setAccessToken(accessToken);
}
String style = options.getStyle();
if (!TextUtils.isEmpty(style)) {
mMapboxMap.setStyleUrl(style);
}
mMapboxMap.setMyLocationEnabled(options.getLocationEnabled());
// Enable gestures
UiSettings uiSettings = mMapboxMap.getUiSettings();
uiSettings.setZoomGesturesEnabled(options.getZoomGesturesEnabled());
uiSettings.setScrollGesturesEnabled(options.getScrollGesturesEnabled());
uiSettings.setRotateGesturesEnabled(options.getRotateGesturesEnabled());
uiSettings.setTiltGesturesEnabled(options.getTiltGesturesEnabled());
uiSettings.setZoomControlsEnabled(options.getZoomControlsEnabled());
// Zoom
uiSettings.setMaxZoom(options.getMaxZoom());
uiSettings.setMinZoom(options.getMinZoom());
// Compass
uiSettings.setCompassEnabled(options.getCompassEnabled());
uiSettings.setCompassGravity(options.getCompassGravity());
int[] compassMargins = options.getCompassMargins();
if (compassMargins != null) {
uiSettings.setCompassMargins(compassMargins[0], compassMargins[1], compassMargins[2], compassMargins[3]);
}
// Logo
uiSettings.setLogoEnabled(options.getLogoEnabled());
uiSettings.setLogoGravity(options.getLogoGravity());
int[] logoMargins = options.getLogoMargins();
if (logoMargins != null) {
uiSettings.setLogoMargins(logoMargins[0], logoMargins[1], logoMargins[2], logoMargins[3]);
}
// Attribution
uiSettings.setAttributionEnabled(options.getAttributionEnabled());
uiSettings.setAttributionGravity(options.getAttributionGravity());
int[] attributionMargins = options.getAttributionMargins();
if (attributionMargins != null) {
uiSettings.setAttributionMargins(attributionMargins[0], attributionMargins[1], attributionMargins[2], attributionMargins[3]);
}
}
//
@@ -359,7 +350,6 @@ public class MapView extends FrameLayout {
, savedInstanceState.getInt(MapboxConstants.STATE_ATTRIBUTION_MARGIN_RIGHT)
, savedInstanceState.getInt(MapboxConstants.STATE_ATTRIBUTION_MARGIN_BOTTOM));
mMapboxMap.setDebugActive(savedInstanceState.getBoolean(MapboxConstants.STATE_DEBUG_ACTIVE));
mMapboxMap.setStyleUrl(savedInstanceState.getString(MapboxConstants.STATE_STYLE_URL));
setAccessToken(savedInstanceState.getString(MapboxConstants.STATE_ACCESS_TOKEN));
@@ -435,7 +425,6 @@ public class MapView extends FrameLayout {
outState.putLong(MapboxConstants.STATE_DEFAULT_TRANSITION_DURATION, mNativeMapView.getDefaultTransitionDuration());
outState.putBoolean(MapboxConstants.STATE_MY_LOCATION_ENABLED, mMapboxMap.isMyLocationEnabled());
// TrackingSettings
TrackingSettings trackingSettings = mMapboxMap.getTrackingSettings();
outState.putInt(MapboxConstants.STATE_MY_LOCATION_TRACKING_MODE, trackingSettings.getMyLocationTrackingMode());
@@ -809,12 +798,9 @@ public class MapView extends FrameLayout {
* You must set a valid access token before you call {@link MapView#onCreate(Bundle)}
* or an exception will be thrown.
* </p>
* You can use {@link ApiAccess#getToken(Context)} to load an access token from your
* application's manifest.
*
* @param accessToken Your public Mapbox access token.
* @see MapView#onCreate(Bundle)
* @see ApiAccess#getToken(Context)
*/
@UiThread
public void setAccessToken(@NonNull String accessToken) {
@@ -863,7 +849,7 @@ public class MapView extends FrameLayout {
}
}
} catch (Exception e) {
Log.w(TAG, "Error checking for Telemetry Service Config: " + e);
Log.w(MapboxConstants.TAG, "Error checking for Telemetry Service Config: " + e);
}
throw new TelemetryServiceNotConfiguredException();
}
@@ -954,12 +940,12 @@ public class MapView extends FrameLayout {
return;
}
if (updatedMarker == null) {
Log.w(TAG, "marker was null, doing nothing");
Log.w(MapboxConstants.TAG, "marker was null, doing nothing");
return;
}
if (updatedMarker.getId() == -1) {
Log.w(TAG, "marker has an id of -1, possibly was not added yet, doing nothing");
Log.w(MapboxConstants.TAG, "marker has an id of -1, possibly was not added yet, doing nothing");
}
ensureIconLoaded(updatedMarker);
@@ -1048,7 +1034,7 @@ public class MapView extends FrameLayout {
}
if (bbox == null) {
Log.w(TAG, "bbox was null, so just returning null");
Log.w(MapboxConstants.TAG, "bbox was null, so just returning null");
return null;
}
@@ -1753,7 +1739,6 @@ public class MapView extends FrameLayout {
PointF centerPoint = mUserLocationView.getMarkerScreenPoint();
mNativeMapView.scaleBy(detector.getScaleFactor(), centerPoint.x / mScreenDensity, centerPoint.y / mScreenDensity);
}
trackGestureEvent(MapboxEvent.GESTURE_QUICK_ZOOM, detector.getFocusX(), detector.getFocusY());
}
return true;
}
@@ -1841,7 +1826,7 @@ public class MapView extends FrameLayout {
}
// This class handles a vertical two-finger shove. (If you place two fingers on screen with
// less than a 20 degree angle between them, this will detect movement on the Y-axis.)
// less than a 20 degree angle between them, this will detect movement on the Y-axis.)
private class ShoveGestureListener implements ShoveGestureDetector.OnShoveGestureListener {
long mBeginTime = 0;
@@ -1912,7 +1897,7 @@ public class MapView extends FrameLayout {
}
// This class handles input events from the zoom control buttons
// Zoom controls allow single touch only devices to zoom in and out
// Zoom controls allow single touch only devices to zoom in and out
private class OnZoomListener implements ZoomButtonsController.OnZoomListener {
// Not used
@@ -2219,9 +2204,9 @@ public class MapView extends FrameLayout {
}
}
//
// Connectivity events
//
//
// Connectivity events
//
// This class handles connectivity changes
private class ConnectivityReceiver extends BroadcastReceiver {

View File

@@ -4,6 +4,8 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.Gravity;
@@ -27,11 +29,11 @@ public class MapboxMapOptions implements Parcelable {
private int compassMargins[];
private boolean logoEnabled = true;
private int logoGravity;
private int logoGravity = Gravity.BOTTOM | Gravity.START;
private int logoMargins[];
private boolean attributionEnabled = true;
private int attributionGravity;
private int attributionGravity = Gravity.BOTTOM;
private int attributionMargins[];
private float minZoom = MapboxConstants.MINIMUM_ZOOM;
@@ -40,8 +42,8 @@ public class MapboxMapOptions implements Parcelable {
private boolean rotateGesturesEnabled = true;
private boolean scrollGesturesEnabled = true;
private boolean tiltGesturesEnabled = true;
private boolean zoomControlsEnabled = true;
private boolean zoomGesturesEnabled = true;
private boolean zoomControlsEnabled = false;
private boolean locationEnabled;
@@ -54,17 +56,35 @@ public class MapboxMapOptions implements Parcelable {
private MapboxMapOptions(Parcel in) {
cameraPosition = in.readParcelable(CameraPosition.class.getClassLoader());
debugActive = in.readByte() != 0;
compassEnabled = in.readByte() != 0;
compassGravity = in.readInt();
compassMargins = in.createIntArray();
logoEnabled = in.readByte() != 0;
logoGravity = in.readInt();
logoMargins = in.createIntArray();
attributionEnabled = in.readByte() != 0;
attributionGravity = in.readInt();
attributionMargins = in.createIntArray();
minZoom = in.readFloat();
maxZoom = in.readFloat();
rotateGesturesEnabled = in.readByte() != 0;
scrollGesturesEnabled = in.readByte() != 0;
tiltGesturesEnabled = in.readByte() != 0;
zoomControlsEnabled = in.readByte() != 0;
zoomGesturesEnabled = in.readByte() != 0;
locationEnabled = in.readByte() != 0;
style = in.readString();
accessToken = in.readString();
}
public static MapboxMapOptions createFromAttributes(Context context, AttributeSet attrs) {
public static MapboxMapOptions createFromAttributes(@NonNull Context context, @Nullable AttributeSet attrs) {
MapboxMapOptions mapboxMapOptions = new MapboxMapOptions();
float screenDensity = context.getResources().getDisplayMetrics().density;
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MapView, 0, 0);
@@ -91,30 +111,25 @@ public class MapboxMapOptions implements Parcelable {
, ((int) typedArray.getDimension(R.styleable.MapView_compass_margin_top, DIMENSION_TEN_DP * screenDensity))
, ((int) typedArray.getDimension(R.styleable.MapView_compass_margin_right, DIMENSION_TEN_DP * screenDensity))
, ((int) typedArray.getDimension(R.styleable.MapView_compass_margin_bottom, DIMENSION_TEN_DP * screenDensity))});
//
// // Logo
uiSettings.setLogoEnabled(typedArray.getBoolean(R.styleable.MapView_logo_visibility, true));
uiSettings.setLogoGravity(typedArray.getInt(R.styleable.MapView_logo_gravity, Gravity.BOTTOM | Gravity.START));
uiSettings.setLogoMargins((int) (typedArray.getDimension(R.styleable.MapView_logo_margin_left, DIMENSION_SIXTEEN_DP) * mScreenDensity)
, (int) (typedArray.getDimension(R.styleable.MapView_logo_margin_top, DIMENSION_SIXTEEN_DP) * mScreenDensity)
, (int) (typedArray.getDimension(R.styleable.MapView_logo_margin_right, DIMENSION_SIXTEEN_DP) * mScreenDensity)
, (int) (typedArray.getDimension(R.styleable.MapView_logo_margin_bottom, DIMENSION_SIXTEEN_DP) * mScreenDensity));
//
// // Attribution
// uiSettings.setAttributionEnabled(typedArray.getBoolean(R.styleable.MapView_attribution_visibility, true));
// uiSettings.setAttributionGravity(typedArray.getInt(R.styleable.MapView_attribution_gravity, Gravity.BOTTOM));
// uiSettings.setAttributionMargins((int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_left, DIMENSION_SEVENTY_SIX_DP) * mScreenDensity)
// , (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_top, DIMENSION_SEVEN_DP) * mScreenDensity)
// , (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_right, DIMENSION_SEVEN_DP) * mScreenDensity)
// , (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_bottom, DIMENSION_SEVEN_DP) * mScreenDensity));
//
// // User location
// mMapboxMap.setMyLocationEnabled(typedArray.getBoolean(R.styleable.MapView_my_location_enabled, false));
mapboxMapOptions.logoEnabled(typedArray.getBoolean(R.styleable.MapView_logo_visibility, true));
mapboxMapOptions.logoGravity(typedArray.getInt(R.styleable.MapView_logo_gravity, Gravity.BOTTOM | Gravity.START));
mapboxMapOptions.logoMargins(new int[]{(int) (typedArray.getDimension(R.styleable.MapView_logo_margin_left, DIMENSION_SIXTEEN_DP) * screenDensity)
, (int) (typedArray.getDimension(R.styleable.MapView_logo_margin_top, DIMENSION_SIXTEEN_DP) * screenDensity)
, (int) (typedArray.getDimension(R.styleable.MapView_logo_margin_right, DIMENSION_SIXTEEN_DP) * screenDensity)
, (int) (typedArray.getDimension(R.styleable.MapView_logo_margin_bottom, DIMENSION_SIXTEEN_DP) * screenDensity)});
mapboxMapOptions.attributionEnabled(typedArray.getBoolean(R.styleable.MapView_attribution_visibility, true));
mapboxMapOptions.attributionGravity(typedArray.getInt(R.styleable.MapView_attribution_gravity, Gravity.BOTTOM));
mapboxMapOptions.attributionMargins(new int[]{(int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_left, DIMENSION_SEVENTY_SIX_DP) * screenDensity)
, (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_top, DIMENSION_SEVEN_DP) * screenDensity)
, (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_right, DIMENSION_SEVEN_DP) * screenDensity)
, (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_bottom, DIMENSION_SEVEN_DP) * screenDensity)});
mapboxMapOptions.locationEnabled(typedArray.getBoolean(R.styleable.MapView_my_location_enabled, false));
} finally {
typedArray.recycle();
}
return mapboxMapOptions;
}
@@ -163,21 +178,36 @@ public class MapboxMapOptions implements Parcelable {
return this;
}
public MapboxMapOptions logoEnabled(boolean enabled){
logoEnabled = enabled;
return this
public MapboxMapOptions logoEnabled(boolean enabled) {
logoEnabled = enabled;
return this;
}
public MapboxMapOptions logoGravity(int gravity){
public MapboxMapOptions logoGravity(int gravity) {
logoGravity = gravity;
return this;
}
public MapboxMapOptions logoMargins(int[]margins){
public MapboxMapOptions logoMargins(int[] margins) {
logoMargins = margins;
return this;
}
public MapboxMapOptions attributionEnabled(boolean enabled) {
attributionEnabled = enabled;
return this;
}
public MapboxMapOptions attributionGravity(int gravity) {
attributionGravity = gravity;
return this;
}
public MapboxMapOptions attributionMargins(int[] margins) {
attributionMargins = margins;
return this;
}
public MapboxMapOptions rotateGesturesEnabled(boolean enabled) {
rotateGesturesEnabled = enabled;
return this;
@@ -203,6 +233,11 @@ public class MapboxMapOptions implements Parcelable {
return this;
}
public MapboxMapOptions locationEnabled(boolean locationEnabled) {
this.locationEnabled = locationEnabled;
return this;
}
public CameraPosition getCamera() {
return cameraPosition;
}
@@ -255,7 +290,7 @@ public class MapboxMapOptions implements Parcelable {
return scrollGesturesEnabled;
}
public boolean getTitltGesturesEnabeld() {
public boolean getTiltGesturesEnabled() {
return tiltGesturesEnabled;
}
@@ -267,6 +302,26 @@ public class MapboxMapOptions implements Parcelable {
return zoomGesturesEnabled;
}
public boolean getAttributionEnabled() {
return attributionEnabled;
}
public int getAttributionGravity() {
return attributionGravity;
}
public int[] getAttributionMargins() {
return attributionMargins;
}
public boolean getLocationEnabled() {
return locationEnabled;
}
public boolean getDebugActive() {
return debugActive;
}
public static final Parcelable.Creator<MapboxMapOptions> CREATOR
= new Parcelable.Creator<MapboxMapOptions>() {
public MapboxMapOptions createFromParcel(Parcel in) {
@@ -287,12 +342,30 @@ public class MapboxMapOptions implements Parcelable {
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(cameraPosition, flags);
dest.writeByte((byte) (debugActive ? 1 : 0));
dest.writeByte((byte) (compassEnabled ? 1 : 0));
dest.writeInt(compassGravity);
dest.writeIntArray(compassMargins);
dest.writeByte((byte) (logoEnabled ? 1 : 0));
dest.writeInt(logoGravity);
dest.writeIntArray(logoMargins);
dest.writeByte((byte) (attributionEnabled ? 1 : 0));
dest.writeInt(attributionGravity);
dest.writeIntArray(attributionMargins);
dest.writeFloat(minZoom);
dest.writeFloat(maxZoom);
dest.writeByte((byte) (rotateGesturesEnabled ? 1 : 0));
dest.writeByte((byte) (scrollGesturesEnabled ? 1 : 0));
dest.writeByte((byte) (tiltGesturesEnabled ? 1 : 0));
dest.writeByte((byte) (zoomControlsEnabled ? 1 : 0));
dest.writeByte((byte) (zoomGesturesEnabled ? 1 : 0));
dest.writeByte((byte) (locationEnabled ? 1 : 0));
dest.writeString(style);
dest.writeString(accessToken);
}