[android] data driven style implementation

This commit is contained in:
Ivo van Dongen
2017-01-17 17:43:49 +02:00
committed by John Firebaugh
parent 8a5bff8ee6
commit f562ecdfc3
58 changed files with 7449 additions and 5171 deletions

View File

@@ -0,0 +1,50 @@
package com.mapbox.mapboxsdk.style.functions;
import android.support.annotation.Keep;
import android.support.annotation.NonNull;
import com.mapbox.mapboxsdk.style.functions.stops.ExponentialStops;
import com.mapbox.mapboxsdk.style.functions.stops.IntervalStops;
import com.mapbox.mapboxsdk.style.functions.stops.Stop;
import com.mapbox.mapboxsdk.style.functions.stops.Stops;
/**
* Camera function. Functions that take camera properties as input (zoom for now)
* <p>
* Zoom functions allow the appearance of a map feature to change with map’s zoom level.
* Zoom functions can be used to create the illusion of depth and control data density.
* Each stop is an array with two elements: the first is a zoom level and the second is
* a function output value.
*
* @param <I> the input type
* @param <O> the output type
* @see Function#zoom
*/
public class CameraFunction<I extends Number, O> extends Function<I, O> {
/**
* Create an exponential camera function
*
* @param stops @see {@link com.mapbox.mapboxsdk.style.functions.stops.Stops#exponential(float, Stop[])}
*/
CameraFunction(@NonNull ExponentialStops<I, O> stops) {
super(stops);
}
/**
* Create an interval camera function
*
* @param stops @see {@link com.mapbox.mapboxsdk.style.functions.stops.Stops#interval(Stop[])}
*/
CameraFunction(@NonNull IntervalStops<I, O> stops) {
super(stops);
}
/**
* JNI constructor
*/
@Keep
private CameraFunction(Stops<I, O> stops) {
super(stops);
}
}

View File

@@ -0,0 +1,86 @@
package com.mapbox.mapboxsdk.style.functions;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.mapbox.mapboxsdk.style.functions.stops.CompositeStops;
import com.mapbox.mapboxsdk.style.functions.stops.Stops;
import java.util.Map;
/**
* Composite functions combine {@link android.graphics.Camera} and {@link SourceFunction}s.
* <p>
* Composite functions allow the appearance of a map feature to change with both its
* properties and zoom. Each stop is an array with two elements, the first is an object
* with a property input value and a zoom, and the second is a function output value. Note
* that support for property functions is not yet complete.
*
* @param <Z> the zoom type (usually Float)
* @param <I> the input type (the feature property type)
* @param <O> the output type (the property type)
* @see Function#composite
*/
public class CompositeFunction<Z extends Number, I, O> extends Function<I, O> {
private final String property;
private O defaultValue;
CompositeFunction(@NonNull String property,
@NonNull CompositeStops<Z, I, O, ? extends Stops<I, O>> stops) {
this(null, property, stops);
}
/**
* JNI Constructor
*/
private CompositeFunction(@Nullable O defaultValue, @NonNull String property,
@NonNull CompositeStops<Z, I, O, ? extends Stops<I, O>> stops) {
super(stops);
this.defaultValue = defaultValue;
this.property = property;
}
/**
* Set the default value
*
* @param defaultValue the default value to use when no other applies
* @return this (for chaining)
*/
public CompositeFunction<Z, I, O> withDefaultValue(O defaultValue) {
this.defaultValue = defaultValue;
return this;
}
/**
* @return the defaultValue
*/
@Nullable
public O getDefaultValue() {
return defaultValue;
}
/**
* INTERNAL USAGE ONLY
*
* @return the feature property name
*/
public String getProperty() {
return property;
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, Object> toValueObject() {
Map<String, Object> valueObject = super.toValueObject();
valueObject.put(PROPERTY_KEY, property);
if (defaultValue != null) {
valueObject.put(DEFAULT_VALUE_KEY, defaultValue);
}
return valueObject;
}
}

View File

@@ -0,0 +1,301 @@
package com.mapbox.mapboxsdk.style.functions;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.mapbox.mapboxsdk.style.functions.stops.CategoricalStops;
import com.mapbox.mapboxsdk.style.functions.stops.CompositeStops;
import com.mapbox.mapboxsdk.style.functions.stops.ExponentialStops;
import com.mapbox.mapboxsdk.style.functions.stops.IdentityStops;
import com.mapbox.mapboxsdk.style.functions.stops.IntervalStops;
import com.mapbox.mapboxsdk.style.functions.stops.Stop;
import com.mapbox.mapboxsdk.style.functions.stops.Stops;
import java.util.Map;
import timber.log.Timber;
/**
* Functions are used to change properties in relation to the state of the map.
* <p>
* The value for any layout or paint property may be specified as a function. Functions allow you to
* make the appearance of a map feature change with the current zoom level and/or the feature's properties.
*
* @param <I> the function's input type
* @param <O> the target property's value type. Make sure it matches.
* @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#types-function">The style specification</a>
*/
public class Function<I, O> {
static final String PROPERTY_KEY = "property";
static final String DEFAULT_VALUE_KEY = "defaultValue";
/**
* Create an exponential {@link CameraFunction}
* <p>
* Zoom functions allow the appearance of a map feature to change with map’s zoom.
* Zoom functions can be used to create the illusion of depth and control data density.
* Each stop is an array with two elements, the first is a zoom and the second is a function output value.
*
* @param <Z> the zoom level type (Float, Integer)
* @param <O> the property type
* @param stops the stops implementation that define the function. @see {@link Stops#exponential(Stop[])}
* @return the {@link CameraFunction}
* @see CameraFunction
* @see ExponentialStops
* @see Stops#exponential(Stop[])
* @see Stops#exponential(Stop[])
* @see Stop#stop
*/
public static <Z extends Number, O> CameraFunction<Z, O> zoom(@NonNull ExponentialStops<Z, O> stops) {
return new CameraFunction<>(stops);
}
/**
* Create an interval {@link CameraFunction}
* <p>
* Zoom functions allow the appearance of a map feature to change with map’s zoom.
* Zoom functions can be used to create the illusion of depth and control data density.
* Each stop is an array with two elements, the first is a zoom and the second is a function output value.
*
* @param <Z> the zoom level type (Float, Integer)
* @param <O> the property type
* @param stops the stops implementation that define the function. @see {@link Stops#interval(Stop[])}
* @return the {@link CameraFunction}
* @see CameraFunction
* @see IntervalStops
* @see Stops#interval(Stop[])
* @see Stop#stop
*/
public static <Z extends Number, O> CameraFunction<Z, O> zoom(@NonNull IntervalStops<Z, O> stops) {
return new CameraFunction<>(stops);
}
/**
* Create an exponential {@link SourceFunction}
* <p>
* Source functions allow the appearance of a map feature to change with
* its properties. Source functions can be used to visually differentiate
* types of features within the same layer or create data visualizations.
* Each stop is an array with two elements, the first is a property input
* value and the second is a function output value. Note that support for
* property functions is not available across all properties and platforms
* at this time.
*
* @param property the feature property name
* @param stops the stops
* @param <I> the function input type
* @param <O> the function output type
* @return the {@link SourceFunction}
* @see SourceFunction
* @see ExponentialStops
* @see Stops#exponential(Stop[])
* @see Stop#stop
*/
public static <I, O> SourceFunction<I, O> property(@NonNull String property, @NonNull ExponentialStops<I, O> stops) {
return new SourceFunction<>(property, stops);
}
/**
* Create an identity {@link SourceFunction}
* <p>
* Source functions allow the appearance of a map feature to change with
* its properties. Source functions can be used to visually differentiate
* types of features within the same layer or create data visualizations.
* Each stop is an array with two elements, the first is a property input
* value and the second is a function output value. Note that support for
* property functions is not available across all properties and platforms
* at this time.
*
* @param property the feature property name
* @param stops the stops
* @param <T> the function input/output type
* @return the {@link SourceFunction}
* @see SourceFunction
* @see IdentityStops
* @see Stops#identity()
* @see Stop#stop
*/
public static <T> SourceFunction<T, T> property(@NonNull String property, @NonNull IdentityStops<T> stops) {
return new SourceFunction<>(property, stops);
}
/**
* Create an interval {@link SourceFunction}
* <p>
* Source functions allow the appearance of a map feature to change with
* its properties. Source functions can be used to visually differentiate
* types of features within the same layer or create data visualizations.
* Each stop is an array with two elements, the first is a property input
* value and the second is a function output value. Note that support for
* property functions is not available across all properties and platforms
* at this time.
*
* @param property the feature property name
* @param stops the stops
* @param <I> the function input type
* @param <O> the function output type
* @return the {@link SourceFunction}
* @see SourceFunction
* @see IntervalStops
* @see Stops#interval(Stop[])
* @see Stop#stop
*/
public static <I, O> SourceFunction<I, O> property(@NonNull String property, @NonNull IntervalStops<I, O> stops) {
return new SourceFunction<>(property, stops);
}
/**
* Create an categorical {@link SourceFunction}
* <p>
* Source functions allow the appearance of a map feature to change with
* its properties. Source functions can be used to visually differentiate
* types of features within the same layer or create data visualizations.
* Each stop is an array with two elements, the first is a property input
* value and the second is a function output value. Note that support for
* property functions is not available across all properties and platforms
* at this time.
*
* @param property the feature property name
* @param stops the stops
* @param <I> the function input type
* @param <O> the function output type
* @return the {@link SourceFunction}
* @see SourceFunction
* @see CategoricalStops
* @see Stops#categorical(Stop[])
* @see Stop#stop
*/
public static <I, O> SourceFunction<I, O> property(@NonNull String property, @NonNull CategoricalStops<I, O> stops) {
return new SourceFunction<>(property, stops);
}
/**
* Create a composite, categorical function.
* <p>
* Composite functions allow the appearance of a map feature to change with both its
* properties and zoom. Each stop is an array with two elements, the first is an object
* with a property input value and a zoom, and the second is a function output value. Note
* that support for property functions is not yet complete.
*
* @param property the feature property name for the source part of the function
* @param stops the stops
* @param <Z> the zoom function input type (Float usually)
* @param <I> the function input type for the source part of the function
* @param <O> the function output type
* @return the {@link CompositeFunction}
* @see CompositeFunction
* @see CategoricalStops
* @see Stops#categorical(Stop[])
* @see Stop#stop
*/
public static <Z extends Number, I, O> CompositeFunction<Z, I, O> composite(
@NonNull String property,
@NonNull CategoricalStops<Stop.CompositeValue<Z, I>, O> stops) {
return new CompositeFunction<>(property, new CompositeStops<>(stops));
}
/**
* Create a composite, exponential function.
* <p>
* Composite functions allow the appearance of a map feature to change with both its
* properties and zoom. Each stop is an array with two elements, the first is an object
* with a property input value and a zoom, and the second is a function output value. Note
* that support for property functions is not yet complete.
*
* @param property the feature property name for the source part of the function
* @param stops the stops
* @param <Z> the zoom function input type (Float usually)
* @param <I> the function input type for the source part of the function
* @param <O> the function output type
* @return the {@link CompositeFunction}
* @see CompositeFunction
* @see ExponentialStops
* @see Stops#exponential(Stop[])
* @see Stop#stop
*/
public static <Z extends Number, I, O> CompositeFunction<Z, I, O> composite(
@NonNull String property,
@NonNull ExponentialStops<Stop.CompositeValue<Z, I>, O> stops) {
return new CompositeFunction<>(property, new CompositeStops<>(stops));
}
/**
* Create a composite, interval function.
* <p>
* Composite functions allow the appearance of a map feature to change with both its
* properties and zoom. Each stop is an array with two elements, the first is an object
* with a property input value and a zoom, and the second is a function output value. Note
* that support for property functions is not yet complete.
*
* @param property the feature property name for the source part of the function
* @param stops the stops
* @param <Z> the zoom function input type (Float usually)
* @param <I> the function input type for the source part of the function
* @param <O> the function output type
* @return the {@link CompositeFunction}
* @see CompositeFunction
* @see IntervalStops
* @see Stops#interval(Stop[])
* @see Stop#stop
*/
public static <Z extends Number, I, O> CompositeFunction<Z, I, O> composite(
@NonNull String property,
@NonNull IntervalStops<Stop.CompositeValue<Z, I>, O> stops) {
return new CompositeFunction<>(property, new CompositeStops<>(stops));
}
// Class definition //
private final Stops<I, O> stops;
/**
* JNI Cosntructor for implementation classes
*
* @param stops the stops
*/
Function(@NonNull Stops stops) {
this.stops = stops;
}
/**
* @return the stops in this function
*/
public Stops getStops() {
return stops;
}
/**
* Convenience method
*
* @param <S> the Stops implementation type
* @return the Stops implementation or null when the wrong type is specified
*/
@Nullable
public <S extends Stops> S getStopsAs() {
try {
// noinspection unchecked
return (S) stops;
} catch (ClassCastException exception) {
Timber.e(String.format("Stops: %s is a different type: %s", stops.getClass(), exception));
return null;
}
}
/**
* INTERNAL USAGE ONLY
*
* @return a value object representation for core conversion
*/
public Map<String, Object> toValueObject() {
return stops.toValueObject();
}
@Override
public String toString() {
return String.format("%s: %s", getClass().getSimpleName(), stops);
}
}

View File

@@ -0,0 +1,84 @@
package com.mapbox.mapboxsdk.style.functions;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.mapbox.mapboxsdk.style.functions.stops.Stops;
import java.util.Map;
/**
* Source functions take Feature property names as input.
* <p>
* Source functions allow the appearance of a map feature to change with
* its properties. Source functions can be used to visually differentiate
* types of features within the same layer or create data visualizations.
* Each stop is an array with two elements, the first is a property input
* value and the second is a function output value. Note that support for
* property functions is not available across all properties and platforms
* at this time.
*
* @param <I> the input type
* @param <O> the output type
* @see Function#property
*/
public class SourceFunction<I, O> extends Function<I, O> {
private final String property;
private O defaultValue;
SourceFunction(@NonNull String property, @NonNull Stops<I, O> stops) {
this(null, property, stops);
}
/**
* JNI Constructor
*/
private SourceFunction(@Nullable O defaultValue, @NonNull String property, @NonNull Stops<I, O> stops) {
super(stops);
this.property = property;
this.defaultValue = defaultValue;
}
/**
* INTERNAL USAGE ONLY
*
* @return The feature property name
*/
public String getProperty() {
return property;
}
/**
* Set the default value
*
* @param defaultValue the default value to use when no other applies
* @return this (for chaining)
*/
public SourceFunction<I, O> withDefaultValue(O defaultValue) {
this.defaultValue = defaultValue;
return this;
}
/**
* @return the defaultValue
*/
@Nullable
public O getDefaultValue() {
return defaultValue;
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, Object> toValueObject() {
Map<String, Object> valueObject = super.toValueObject();
valueObject.put(PROPERTY_KEY, property);
if (defaultValue != null) {
valueObject.put(DEFAULT_VALUE_KEY, defaultValue);
}
return valueObject;
}
}

View File

@@ -0,0 +1,6 @@
/**
* Contains the Mapbox Maps Android Style Function API classes.
*
* @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#types-function">The style specification</a>
*/
package com.mapbox.mapboxsdk.style.functions;

View File

@@ -0,0 +1,64 @@
package com.mapbox.mapboxsdk.style.functions.stops;
import android.support.annotation.NonNull;
import android.support.annotation.Size;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
/**
* {@link Stops} implementation for categorical functions
*
* @param <I> the {@link Stop} input type
* @param <O> the {@link Stop} output type
*/
public class CategoricalStops<I, O> extends IterableStops<I, O, Stop<I, O>> {
private final Stop<I, O>[] stops;
/**
* Create a categorical {@link Stops} implementation. Use through {@link Stops#categorical(Stop[])}
*
* @param stops the stops
*/
@SafeVarargs
public CategoricalStops(@NonNull @Size(min = 1) Stop<I, O>... stops) {
this.stops = stops;
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, Object> toValueObject() {
Map<String, Object> map = super.toValueObject();
map.put("stops", toValueObjects(stops));
return map;
}
/**
* {@inheritDoc}
*/
@Override
public String getTypeName() {
return "categorical";
}
/**
* {@inheritDoc}
*/
@Override
public Iterator<Stop<I, O>> iterator() {
return Arrays.asList(stops).iterator();
}
/**
* {@inheritDoc}
*/
@Override
public int size() {
return stops.length;
}
}

View File

@@ -0,0 +1,151 @@
package com.mapbox.mapboxsdk.style.functions.stops;
import android.support.annotation.Keep;
import android.support.annotation.NonNull;
import android.support.annotation.Size;
import com.mapbox.mapboxsdk.style.functions.stops.Stop.CompositeValue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* The {@link Stops} implementation for composite functions
*
* @param <Z> the zoom type (usually Float)
* @param <I> the input type (the feature property type)
* @param <O> the output type (the property type)
* @param <S> the {@link Stops} implementation (eg CategoricalStops, {@link ExponentialStops} or {@link IntervalStops})
*/
public class CompositeStops<Z extends Number, I, O, S extends IterableStops<I, O, Stop<I, O>>>
extends IterableStops<CompositeValue<Z, I>, O, Map.Entry<Z, S>> {
private final Map<Z, S> stops;
/**
* JNI Constructor
*
* @param stops the stops {@link Map}
*/
@Keep
private CompositeStops(@NonNull @Size(min = 1) Map<Z, S> stops) {
this.stops = stops;
}
/**
* Create composite stops for {@link ExponentialStops}. Use
* {@link com.mapbox.mapboxsdk.style.functions.Function#composite(String, ExponentialStops)}
*
* @param stops the stops
*/
public CompositeStops(@NonNull ExponentialStops<Stop.CompositeValue<Z, I>, O> stops) {
this.stops = new HashMap<>();
for (Map.Entry<Z, List<Stop<I, O>>> entry : collect(stops).entrySet()) {
// noinspection unchecked
this.stops.put(entry.getKey(),
(S) new ExponentialStops<>(stops.getBase(), entry.getValue().toArray(new Stop[0])));
}
}
/**
* Create composite stops for {@link IntervalStops}.
* Use {@link com.mapbox.mapboxsdk.style.functions.Function#composite(String, IntervalStops)}
*
* @param stops the stops
*/
public CompositeStops(@NonNull IntervalStops<Stop.CompositeValue<Z, I>, O> stops) {
this.stops = new HashMap<>();
for (Map.Entry<Z, List<Stop<I, O>>> entry : collect(stops).entrySet()) {
// noinspection unchecked
this.stops.put(entry.getKey(), (S) new IntervalStops<>(entry.getValue().toArray(new Stop[0])));
}
}
/**
* Create composite stops for {@link CategoricalStops}.
* Use {@link com.mapbox.mapboxsdk.style.functions.Function#composite(String, CategoricalStops)}
*
* @param stops the stops
*/
public CompositeStops(@NonNull CategoricalStops<CompositeValue<Z, I>, O> stops) {
this.stops = new HashMap<>();
for (Map.Entry<Z, List<Stop<I, O>>> entry : collect(stops).entrySet()) {
// noinspection unchecked
this.stops.put(entry.getKey(), (S) new CategoricalStops<>(entry.getValue().toArray(new Stop[0])));
}
}
/**
* {@inheritDoc}
*/
@Override
protected String getTypeName() {
return stops.values().iterator().next().getTypeName();
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, Object> toValueObject() {
Map<String, Object> map = super.toValueObject();
// Flatten and toValueObjects stops
// noinspection unchecked
map.put("stops", toValueObjects(flatten(this.stops).toArray(new Stop[0])));
return map;
}
@NonNull
private List<Stop<CompositeValue<Z, I>, O>> flatten(Map<Z, S> stops) {
List<Stop<CompositeValue<Z, I>, O>> flattenedStops = new ArrayList<>();
for (Map.Entry<Z, S> entry : stops.entrySet()) {
for (Stop<I, O> stop : entry.getValue()) {
flattenedStops.add(new Stop<>(new CompositeValue<>(entry.getKey(), stop.in), stop.out));
}
}
return flattenedStops;
}
@NonNull
private Map<Z, List<Stop<I, O>>> collect(
@NonNull IterableStops<CompositeValue<Z, I>, O, Stop<CompositeValue<Z, I>, O>> stops) {
Map<Z, List<Stop<I, O>>> converted = new HashMap<>();
for (Stop<CompositeValue<Z, I>, O> stop : stops) {
List<Stop<I, O>> stopsForZ = converted.get(stop.in.zoom);
if (stopsForZ == null) {
stopsForZ = new ArrayList<>();
converted.put(stop.in.zoom, stopsForZ);
}
stopsForZ.add(new Stop<>(stop.in.value, stop.out));
}
return converted;
}
/**
* {@inheritDoc}
*/
@Override
public Iterator<Map.Entry<Z, S>> iterator() {
return stops.entrySet().iterator();
}
/**
* {@inheritDoc}
*/
@Override
public int size() {
return stops.size();
}
}

View File

@@ -0,0 +1,97 @@
package com.mapbox.mapboxsdk.style.functions.stops;
import android.support.annotation.NonNull;
import android.support.annotation.Size;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
/**
* The {@link Stops} implementation for exponential functions
*
* @param <I> the input type
* @param <O> the output type
*/
public class ExponentialStops<I, O> extends IterableStops<I, O, Stop<I, O>> {
private float base;
private final Stop<I, O>[] stops;
/**
* Create exponential stops with an explicit base. Use through {@link Stops#exponential(Stop[])}
*
* @param base The exponential base of the interpolation curve. It controls the rate at which the function output
* increases. Higher values make the output increase more towards the high end of the range.
* With values close to 1 the output increases linearly.
* @param stops the stops
*/
@SafeVarargs
public ExponentialStops(Float base, @NonNull @Size(min = 1) Stop<I, O>... stops) {
this.base = base != null ? base : 1.0f;
this.stops = stops;
}
/**
* Create exponential stops without an explicit base. Use through {@link Stops#exponential(Stop[])}
*
* @param stops the stops
*/
@SafeVarargs
public ExponentialStops(@NonNull @Size(min = 1) Stop<I, O>... stops) {
this(null, stops);
}
/**
* Set the exponential base
*
* @param base the base to use in the exponential function
* @return this (for chaining)
*/
public ExponentialStops<I, O> withBase(float base) {
this.base = base;
return this;
}
/**
* @return The exponential base
*/
public float getBase() {
return base;
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, Object> toValueObject() {
Map<String, Object> map = super.toValueObject();
map.put("base", base);
map.put("stops", toValueObjects(stops));
return map;
}
/**
* {@inheritDoc}
*/
@Override
public String getTypeName() {
return "exponential";
}
/**
* {@inheritDoc}
*/
@Override
public Iterator<Stop<I, O>> iterator() {
return Arrays.asList(stops).iterator();
}
/**
* {@inheritDoc}
*/
@Override
public int size() {
return stops.length;
}
}

View File

@@ -0,0 +1,18 @@
package com.mapbox.mapboxsdk.style.functions.stops;
/**
* The {@link Stops} implementation for identity functions
*
* @param <T> the input/output type
*/
public class IdentityStops<T> extends Stops<T, T> {
/**
* {@inheritDoc}
*/
@Override
protected String getTypeName() {
return "identity";
}
}

View File

@@ -0,0 +1,58 @@
package com.mapbox.mapboxsdk.style.functions.stops;
import android.support.annotation.NonNull;
import android.support.annotation.Size;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
/**
* The {@link Stops} implementation for interval functions
*
* @param <I> the input type
* @param <O> the output type
*/
public class IntervalStops<I, O> extends IterableStops<I, O, Stop<I, O>> {
private final Stop<I, O>[] stops;
@SafeVarargs
public IntervalStops(@NonNull @Size(min = 1) Stop<I, O>... stops) {
this.stops = stops;
}
/**
* {@inheritDoc}
*/
@Override
public String getTypeName() {
return "interval";
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, Object> toValueObject() {
Map<String, Object> map = super.toValueObject();
map.put("stops", toValueObjects(stops));
return map;
}
/**
* @return an {@link Iterator} for the contained stops
*/
@Override
public Iterator<Stop<I, O>> iterator() {
return Arrays.asList(stops).iterator();
}
/**
* @return The number of contained stops
*/
@Override
public int size() {
return stops.length;
}
}

View File

@@ -0,0 +1,52 @@
package com.mapbox.mapboxsdk.style.functions.stops;
import java.util.Iterator;
/**
* Base class for {@link Stops} implementations with a collection of stops
*
* @param <I> the {@link Stops} input type
* @param <O> the {@link Stops} output type
* @param <S> the {@link Iterable} element type (usually {@link Stop})
*/
public abstract class IterableStops<I, O, S> extends Stops<I, O> implements Iterable<S> {
/**
* @return The size of the contained stops collection
*/
public abstract int size();
/**
* Convenience function to toValueObjects an array of stops to an array of value objects
*
* @param stops the stops to toValueObjects
* @return the stops as value objects
*/
Object[] toValueObjects(Stop<I, O>[] stops) {
if (stops != null) {
Object[] stopsValue = new Object[stops.length];
for (int i = 0; i < stopsValue.length; i++) {
Stop stop = stops[i];
stopsValue[i] = stop.toValueObject();
}
return stopsValue;
}
return null;
}
@Override
public String toString() {
StringBuilder buffer = new StringBuilder();
Iterator<S> iterator = iterator();
while (iterator.hasNext()) {
S stop = iterator.next();
buffer.append(stop);
if (iterator.hasNext()) {
buffer.append(",");
}
}
return String.format("%s: [%s]", super.toString(), buffer.toString());
}
}

View File

@@ -0,0 +1,109 @@
package com.mapbox.mapboxsdk.style.functions.stops;
import com.mapbox.mapboxsdk.style.functions.Function;
import com.mapbox.mapboxsdk.style.layers.PropertyValue;
import java.util.HashMap;
import java.util.Map;
/**
* A stop represents a certain point in the range of this function
*
* @param <I> input the stop (function) input type
* @param <O> output the stop (function) output type
* @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#types-function">The style specification</a>
*/
public class Stop<I, O> {
/**
* Creates a {@link Stop} to use in a {@link Function}
*
* @param in the input for the stop
* @param output the output for the stop
* @param <I> the input property type
* @param <O> the output property type
* @return the {@link Stop}
*/
public static <I, O> Stop<I, O> stop(I in, PropertyValue<O> output) {
return new Stop<>(in, output.value);
}
/**
* Create a composite {@link Stop} for use in a {@link com.mapbox.mapboxsdk.style.functions.CompositeFunction}
*
* @param zoom the zoom input
* @param value the feature property input
* @param output the output for the stop
* @param <Z> the zoom type
* @param <I> the feature property input type
* @param <O> the output property type
* @return the {@link Stop}
* @see Function#composite(String, ExponentialStops)
*/
public static <Z extends Number, I, O> Stop<Stop.CompositeValue<Z, I>, O> stop(Z zoom,
I value,
PropertyValue<O> output) {
return new Stop<>(new Stop.CompositeValue<>(zoom, value), output.value);
}
/**
* Represents a composite input value for composite functions (eg zoom and feature property value)
*
* @param <Z> the zoom input type (typically Float)
* @param <V> the feature property input type
*/
public static class CompositeValue<Z extends Number, V> {
Z zoom;
V value;
CompositeValue(Z zoom, V value) {
this.zoom = zoom;
this.value = value;
}
/**
* INTERNAL USAGE ONLY
*
* @return the value object representation for core conversion
*/
Map<String, Object> toValueObject() {
HashMap<String, Object> map = new HashMap<>();
map.put("zoom", zoom);
map.put("value", value);
return map;
}
@Override
public String toString() {
return String.format("[zoom: %s, value: %s]", zoom, value);
}
}
/**
* The input type
*/
public final I in;
/**
* The output type
*/
public final O out;
Stop(I in, O out) {
this.in = in;
this.out = out;
}
/**
* INTERNAL USAGE ONLY
*
* @return an array representation of the Stop
*/
Object[] toValueObject() {
return new Object[] {in instanceof CompositeValue ? ((CompositeValue) in).toValueObject() : in, out};
}
@Override
public String toString() {
return String.format("[%s, %s]", in, out);
}
}

View File

@@ -0,0 +1,97 @@
package com.mapbox.mapboxsdk.style.functions.stops;
import android.support.annotation.NonNull;
import android.support.annotation.Size;
import java.util.HashMap;
import java.util.Map;
/**
* The base class for different stops implementations
*
* @param <I> the input type
* @param <O> the output type
* @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#types-function">The style specification</a>
*/
public abstract class Stops<I, O> {
/**
* Convenience method for use in function declarations
*
* @param stops the collections of discrete stops
* @param <I> the Stops input type
* @param <O> the Stops output type
* @return the {@link Stops} implementation
* @see Stop#stop
* @see CategoricalStops
*/
@SafeVarargs
public static <I, O> CategoricalStops<I, O> categorical(@NonNull @Size(min = 1) Stop<I, O>... stops) {
return new CategoricalStops<>(stops);
}
/**
* Convenience method for use in function declarations
*
* @param stops the collections of discrete stops
* @param <I> the Stops input type
* @param <O> the Stops output type
* @return the {@link Stops} implementation
* @see Stop#stop
* @see ExponentialStops
*/
@SafeVarargs
public static <I, O> ExponentialStops<I, O> exponential(@NonNull @Size(min = 1) Stop<I, O>... stops) {
return new ExponentialStops<>(stops);
}
/**
* Convenience method for use in function declarations
*
* @param <T> the Stops input/output type
* @return the {@link IdentityStops} implementation
* @see Stop#stop
* @see IdentityStops
*/
public static <T> IdentityStops<T> identity() {
return new IdentityStops<>();
}
/**
* Convenience method for use in function declarations
*
* @param stops the collections of discrete stops
* @param <I> the Stops input type
* @param <O> the Stops output type
* @return the {@link Stops} implementation
* @see Stop#stop
* @see IntervalStops
*/
@SafeVarargs
public static <I, O> IntervalStops<I, O> interval(@NonNull @Size(min = 1) Stop<I, O>... stops) {
return new IntervalStops<>(stops);
}
/**
* INTERNAL USAGE ONLY
*
* @return the value object representation for conversion to core
*/
public Map<String, Object> toValueObject() {
HashMap<String, Object> map = new HashMap<>();
map.put("type", getTypeName());
return map;
}
/**
* INTERNAL USAGE ONLY
*
* @return the unique type name as a string according to the style specification
*/
protected abstract String getTypeName();
@Override
public String toString() {
return getTypeName();
}
}

View File

@@ -0,0 +1,6 @@
/**
* Contains the Mapbox Maps Android Style Function Stop implementation API classes.
*
* @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#types-function">The style specification</a>
*/
package com.mapbox.mapboxsdk.style.functions.stops;

View File

@@ -1,6 +1,7 @@
package com.mapbox.mapboxsdk.style.layers;
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
@@ -41,7 +42,7 @@ public class BackgroundLayer extends Layer {
* @param properties the var-args properties
* @return This
*/
public BackgroundLayer withProperties(@NonNull Property<?>... properties) {
public BackgroundLayer withProperties(@NonNull PropertyValue<?>... properties) {
setProperties(properties);
return this;
}
@@ -55,7 +56,7 @@ public class BackgroundLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getBackgroundColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetBackgroundColor());
return (PropertyValue<String>) new PropertyValue("background-color", nativeGetBackgroundColor());
}
/**
@@ -82,7 +83,7 @@ public class BackgroundLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getBackgroundPattern() {
return (PropertyValue<String>) new PropertyValue(nativeGetBackgroundPattern());
return (PropertyValue<String>) new PropertyValue("background-pattern", nativeGetBackgroundPattern());
}
/**
@@ -92,7 +93,7 @@ public class BackgroundLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getBackgroundOpacity() {
return (PropertyValue<Float>) new PropertyValue(nativeGetBackgroundOpacity());
return (PropertyValue<Float>) new PropertyValue("background-opacity", nativeGetBackgroundOpacity());
}
private native Object nativeGetBackgroundColor();

View File

@@ -1,6 +1,7 @@
package com.mapbox.mapboxsdk.style.layers;
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
@@ -96,14 +97,13 @@ public class CircleLayer extends Layer {
return this;
}
/**
* Set a property or properties.
*
* @param properties the var-args properties
* @return This
*/
public CircleLayer withProperties(@NonNull Property<?>... properties) {
public CircleLayer withProperties(@NonNull PropertyValue<?>... properties) {
setProperties(properties);
return this;
}
@@ -117,7 +117,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getCircleRadius() {
return (PropertyValue<Float>) new PropertyValue(nativeGetCircleRadius());
return (PropertyValue<Float>) new PropertyValue("circle-radius", nativeGetCircleRadius());
}
/**
@@ -127,7 +127,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getCircleColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetCircleColor());
return (PropertyValue<String>) new PropertyValue("circle-color", nativeGetCircleColor());
}
/**
@@ -154,7 +154,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getCircleBlur() {
return (PropertyValue<Float>) new PropertyValue(nativeGetCircleBlur());
return (PropertyValue<Float>) new PropertyValue("circle-blur", nativeGetCircleBlur());
}
/**
@@ -164,7 +164,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getCircleOpacity() {
return (PropertyValue<Float>) new PropertyValue(nativeGetCircleOpacity());
return (PropertyValue<Float>) new PropertyValue("circle-opacity", nativeGetCircleOpacity());
}
/**
@@ -174,7 +174,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float[]> getCircleTranslate() {
return (PropertyValue<Float[]>) new PropertyValue(nativeGetCircleTranslate());
return (PropertyValue<Float[]>) new PropertyValue("circle-translate", nativeGetCircleTranslate());
}
/**
@@ -184,7 +184,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getCircleTranslateAnchor() {
return (PropertyValue<String>) new PropertyValue(nativeGetCircleTranslateAnchor());
return (PropertyValue<String>) new PropertyValue("circle-translate-anchor", nativeGetCircleTranslateAnchor());
}
/**
@@ -194,7 +194,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getCirclePitchScale() {
return (PropertyValue<String>) new PropertyValue(nativeGetCirclePitchScale());
return (PropertyValue<String>) new PropertyValue("circle-pitch-scale", nativeGetCirclePitchScale());
}
/**
@@ -204,7 +204,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getCircleStrokeWidth() {
return (PropertyValue<Float>) new PropertyValue(nativeGetCircleStrokeWidth());
return (PropertyValue<Float>) new PropertyValue("circle-stroke-width", nativeGetCircleStrokeWidth());
}
/**
@@ -214,7 +214,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getCircleStrokeColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetCircleStrokeColor());
return (PropertyValue<String>) new PropertyValue("circle-stroke-color", nativeGetCircleStrokeColor());
}
/**
@@ -241,7 +241,7 @@ public class CircleLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getCircleStrokeOpacity() {
return (PropertyValue<Float>) new PropertyValue(nativeGetCircleStrokeOpacity());
return (PropertyValue<Float>) new PropertyValue("circle-stroke-opacity", nativeGetCircleStrokeOpacity());
}
private native Object nativeGetCircleRadius();

View File

@@ -1,6 +1,7 @@
package com.mapbox.mapboxsdk.style.layers;
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
@@ -96,14 +97,13 @@ public class FillLayer extends Layer {
return this;
}
/**
* Set a property or properties.
*
* @param properties the var-args properties
* @return This
*/
public FillLayer withProperties(@NonNull Property<?>... properties) {
public FillLayer withProperties(@NonNull PropertyValue<?>... properties) {
setProperties(properties);
return this;
}
@@ -117,7 +117,7 @@ public class FillLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getFillAntialias() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetFillAntialias());
return (PropertyValue<Boolean>) new PropertyValue("fill-antialias", nativeGetFillAntialias());
}
/**
@@ -127,7 +127,7 @@ public class FillLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getFillOpacity() {
return (PropertyValue<Float>) new PropertyValue(nativeGetFillOpacity());
return (PropertyValue<Float>) new PropertyValue("fill-opacity", nativeGetFillOpacity());
}
/**
@@ -137,12 +137,11 @@ public class FillLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getFillColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetFillColor());
return (PropertyValue<String>) new PropertyValue("fill-color", nativeGetFillColor());
}
/**
* The color of the filled part of this layer. This color can be specified as `rgba` with an alpha component and the
* color's opacity will not affect the opacity of the 1px stroke, if it is used.
* The color of the filled part of this layer. This color can be specified as `rgba` with an alpha component and the color's opacity will not affect the opacity of the 1px stroke, if it is used.
*
* @return int representation of a rgba string color
* @throws RuntimeException thrown if property isn't a value
@@ -165,7 +164,7 @@ public class FillLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getFillOutlineColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetFillOutlineColor());
return (PropertyValue<String>) new PropertyValue("fill-outline-color", nativeGetFillOutlineColor());
}
/**
@@ -192,7 +191,7 @@ public class FillLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float[]> getFillTranslate() {
return (PropertyValue<Float[]>) new PropertyValue(nativeGetFillTranslate());
return (PropertyValue<Float[]>) new PropertyValue("fill-translate", nativeGetFillTranslate());
}
/**
@@ -202,7 +201,7 @@ public class FillLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getFillTranslateAnchor() {
return (PropertyValue<String>) new PropertyValue(nativeGetFillTranslateAnchor());
return (PropertyValue<String>) new PropertyValue("fill-translate-anchor", nativeGetFillTranslateAnchor());
}
/**
@@ -212,7 +211,7 @@ public class FillLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getFillPattern() {
return (PropertyValue<String>) new PropertyValue(nativeGetFillPattern());
return (PropertyValue<String>) new PropertyValue("fill-pattern", nativeGetFillPattern());
}
private native Object nativeGetFillAntialias();

View File

@@ -1,137 +0,0 @@
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.FloatRange;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.Size;
import java.util.HashMap;
import java.util.Map;
/**
* Functions are used to change properties in relation to the state of the map.
* <p>
* Currently, only zoom functions are supported.
* </p>
*
* @param <T> the target property's value type. Make sure it matches.
* @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#types-function">The online documentation</a>
*/
public class Function<T> {
/**
* A stop represents a certain point in the range of this function
*
* @param <I> input
* @param <O> output
*/
public static class Stop<I, O> {
public final I in;
public final O out;
Stop(I in, O out) {
this.in = in;
this.out = out;
}
/**
* @return an array representation of the Stop
*/
Object[] toValueObject() {
return new Object[] {in, out};
}
@Override
public String toString() {
return String.format("[%s, %s]", in, out);
}
}
/**
* Zoom functions allow the appearance of a map feature to change with map’s zoom.
* Zoom functions can be used to create the illusion of depth and control data density.
* Each stop is an array with two elements, the first is a zoom and the second is a function output value.
*
* @param stops the stops that define the function
* @param <T> the property type
* @return the {@link Function}
*/
@SafeVarargs
public static <T> Function<T> zoom(@NonNull @Size(min = 1) Stop<Float, T>... stops) {
return new Function<T>(stops);
}
/**
* Zoom functions allow the appearance of a map feature to change with map’s zoom.
* Zoom functions can be used to create the illusion of depth and control data density.
* Each stop is an array with two elements, the first is a zoom and the second is a function output value.
*
* @param stops the stops that define the function
* @param base the exponential base of the interpolation curve - Default 1
* @param <T> the property type
* @return the {@link Function}
*/
@SafeVarargs
public static <T> Function<T> zoom(
@FloatRange(from = 0, to = 1, fromInclusive = false, toInclusive = false) float base,
@NonNull @Size(min = 1) Stop<Float, T>... stops) {
return new Function<T>(stops)
.withBase(base);
}
/**
* Creates a stop to use in a {@link Function}
*
* @param in the input for the stop
* @param output the output for the stop
* @param <T> the output property type
* @return the {@link Stop}
*/
public static <T> Stop<Float, T> stop(float in, Property<T> output) {
return new Stop<>(in, output.value);
}
private final Stop<Float, T>[] stops;
private Float base;
Function(@NonNull @Size(min = 1) Stop<Float, T>[] stops) {
this.stops = stops;
}
Function<T> withBase(float base) {
this.base = base;
return this;
}
/**
* @return the base
*/
@Nullable
public Float getBase() {
return base;
}
/**
* @return the stops in this function
*/
public Stop<Float, T>[] getStops() {
return stops;
}
Map<String, Object> toValueObject() {
Object[] stopsValue = new Object[stops.length];
for (int i = 0; i < stopsValue.length; i++) {
Stop stop = stops[i];
stopsValue[i] = stop.toValueObject();
}
Map<String, Object> value = new HashMap<>();
if (base != null) {
value.put("base", base);
}
value.put("stops", stopsValue);
return value;
}
}

View File

@@ -2,6 +2,8 @@ package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.NonNull;
import com.mapbox.mapboxsdk.style.functions.Function;
/**
* Base class for the different Layer types
*/
@@ -17,14 +19,14 @@ public abstract class Layer {
public Layer() {
}
public void setProperties(@NonNull Property<?>... properties) {
public void setProperties(@NonNull PropertyValue<?>... properties) {
if (properties.length == 0) {
return;
}
for (Property<?> property : properties) {
for (PropertyValue<?> property : properties) {
Object converted = convertValue(property.value);
if (property instanceof PaintProperty) {
if (property instanceof PaintPropertyValue) {
nativeSetPaintProperty(property.name, converted);
} else {
nativeSetLayoutProperty(property.name, converted);
@@ -37,7 +39,7 @@ public abstract class Layer {
}
public PropertyValue<String> getVisibility() {
return new PropertyValue<>(nativeGetVisibility());
return new PaintPropertyValue<>("visibility", (String) nativeGetVisibility());
}
public float getMinZoom() {

View File

@@ -1,9 +0,0 @@
package com.mapbox.mapboxsdk.style.layers;
class LayoutProperty<T> extends Property<T> {
LayoutProperty(String name, T value) {
super(name, value);
}
}

View File

@@ -0,0 +1,11 @@
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.NonNull;
class LayoutPropertyValue<T> extends PropertyValue<T> {
LayoutPropertyValue(@NonNull String name, T value) {
super(name, value);
}
}

View File

@@ -1,6 +1,7 @@
package com.mapbox.mapboxsdk.style.layers;
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
@@ -96,14 +97,13 @@ public class LineLayer extends Layer {
return this;
}
/**
* Set a property or properties.
*
* @param properties the var-args properties
* @return This
*/
public LineLayer withProperties(@NonNull Property<?>... properties) {
public LineLayer withProperties(@NonNull PropertyValue<?>... properties) {
setProperties(properties);
return this;
}
@@ -117,7 +117,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getLineCap() {
return (PropertyValue<String>) new PropertyValue(nativeGetLineCap());
return (PropertyValue<String>) new PropertyValue("line-cap", nativeGetLineCap());
}
/**
@@ -127,7 +127,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getLineJoin() {
return (PropertyValue<String>) new PropertyValue(nativeGetLineJoin());
return (PropertyValue<String>) new PropertyValue("line-join", nativeGetLineJoin());
}
/**
@@ -137,7 +137,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getLineMiterLimit() {
return (PropertyValue<Float>) new PropertyValue(nativeGetLineMiterLimit());
return (PropertyValue<Float>) new PropertyValue("line-miter-limit", nativeGetLineMiterLimit());
}
/**
@@ -147,7 +147,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getLineRoundLimit() {
return (PropertyValue<Float>) new PropertyValue(nativeGetLineRoundLimit());
return (PropertyValue<Float>) new PropertyValue("line-round-limit", nativeGetLineRoundLimit());
}
/**
@@ -157,7 +157,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getLineOpacity() {
return (PropertyValue<Float>) new PropertyValue(nativeGetLineOpacity());
return (PropertyValue<Float>) new PropertyValue("line-opacity", nativeGetLineOpacity());
}
/**
@@ -167,7 +167,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getLineColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetLineColor());
return (PropertyValue<String>) new PropertyValue("line-color", nativeGetLineColor());
}
/**
@@ -194,7 +194,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float[]> getLineTranslate() {
return (PropertyValue<Float[]>) new PropertyValue(nativeGetLineTranslate());
return (PropertyValue<Float[]>) new PropertyValue("line-translate", nativeGetLineTranslate());
}
/**
@@ -204,7 +204,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getLineTranslateAnchor() {
return (PropertyValue<String>) new PropertyValue(nativeGetLineTranslateAnchor());
return (PropertyValue<String>) new PropertyValue("line-translate-anchor", nativeGetLineTranslateAnchor());
}
/**
@@ -214,7 +214,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getLineWidth() {
return (PropertyValue<Float>) new PropertyValue(nativeGetLineWidth());
return (PropertyValue<Float>) new PropertyValue("line-width", nativeGetLineWidth());
}
/**
@@ -224,7 +224,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getLineGapWidth() {
return (PropertyValue<Float>) new PropertyValue(nativeGetLineGapWidth());
return (PropertyValue<Float>) new PropertyValue("line-gap-width", nativeGetLineGapWidth());
}
/**
@@ -234,7 +234,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getLineOffset() {
return (PropertyValue<Float>) new PropertyValue(nativeGetLineOffset());
return (PropertyValue<Float>) new PropertyValue("line-offset", nativeGetLineOffset());
}
/**
@@ -244,7 +244,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getLineBlur() {
return (PropertyValue<Float>) new PropertyValue(nativeGetLineBlur());
return (PropertyValue<Float>) new PropertyValue("line-blur", nativeGetLineBlur());
}
/**
@@ -254,7 +254,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float[]> getLineDasharray() {
return (PropertyValue<Float[]>) new PropertyValue(nativeGetLineDasharray());
return (PropertyValue<Float[]>) new PropertyValue("line-dasharray", nativeGetLineDasharray());
}
/**
@@ -264,7 +264,7 @@ public class LineLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getLinePattern() {
return (PropertyValue<String>) new PropertyValue(nativeGetLinePattern());
return (PropertyValue<String>) new PropertyValue("line-pattern", nativeGetLinePattern());
}
private native Object nativeGetLineCap();

View File

@@ -1,9 +0,0 @@
package com.mapbox.mapboxsdk.style.layers;
class PaintProperty<T> extends Property<T> {
PaintProperty(String name, T value) {
super(name, value);
}
}

View File

@@ -0,0 +1,11 @@
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.NonNull;
class PaintPropertyValue<T> extends PropertyValue<T> {
PaintPropertyValue(@NonNull String name, T value) {
super(name, value);
}
}

View File

@@ -1,6 +1,7 @@
package com.mapbox.mapboxsdk.style.layers;
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.StringDef;
import java.lang.annotation.Retention;
@@ -9,7 +10,7 @@ import java.lang.annotation.RetentionPolicy;
/**
* Paint/Layout properties for Layer
*/
public abstract class Property<T> {
public final class Property {
// VISIBILITY: Whether this layer is displayed.
@@ -22,13 +23,12 @@ public abstract class Property<T> {
*/
public static final String NONE = "none";
@StringDef( {
VISIBLE,
NONE
@StringDef({
VISIBLE,
NONE
})
@Retention(RetentionPolicy.SOURCE)
public @interface VISIBILITY {
}
public @interface VISIBILITY {}
// LINE_CAP: The display of line endings.
@@ -37,57 +37,50 @@ public abstract class Property<T> {
*/
public static final String LINE_CAP_BUTT = "butt";
/**
* A cap with a rounded end which is drawn beyond the endpoint of the line at a radius of one-half of the line's
* width and centered on the endpoint of the line.
* A cap with a rounded end which is drawn beyond the endpoint of the line at a radius of one-half of the line's width and centered on the endpoint of the line.
*/
public static final String LINE_CAP_ROUND = "round";
/**
* A cap with a squared-off end which is drawn beyond the endpoint of the line at a distance of one-half of the
* line's width.
* A cap with a squared-off end which is drawn beyond the endpoint of the line at a distance of one-half of the line's width.
*/
public static final String LINE_CAP_SQUARE = "square";
/**
* The display of line endings.
*/
@StringDef( {
LINE_CAP_BUTT,
LINE_CAP_ROUND,
LINE_CAP_SQUARE,
})
@StringDef({
LINE_CAP_BUTT,
LINE_CAP_ROUND,
LINE_CAP_SQUARE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface LINE_CAP {
}
public @interface LINE_CAP {}
// LINE_JOIN: The display of lines when joining.
/**
* A join with a squared-off end which is drawn beyond the endpoint of the line at a distance of one-half of the
* line's width.
* A join with a squared-off end which is drawn beyond the endpoint of the line at a distance of one-half of the line's width.
*/
public static final String LINE_JOIN_BEVEL = "bevel";
/**
* A join with a rounded end which is drawn beyond the endpoint of the line at a radius of one-half of the line's
* width and centered on the endpoint of the line.
* A join with a rounded end which is drawn beyond the endpoint of the line at a radius of one-half of the line's width and centered on the endpoint of the line.
*/
public static final String LINE_JOIN_ROUND = "round";
/**
* A join with a sharp, angled corner which is drawn with the outer sides beyond the endpoint of the path until
* they meet.
* A join with a sharp, angled corner which is drawn with the outer sides beyond the endpoint of the path until they meet.
*/
public static final String LINE_JOIN_MITER = "miter";
/**
* The display of lines when joining.
*/
@StringDef( {
LINE_JOIN_BEVEL,
LINE_JOIN_ROUND,
LINE_JOIN_MITER,
})
@StringDef({
LINE_JOIN_BEVEL,
LINE_JOIN_ROUND,
LINE_JOIN_MITER,
})
@Retention(RetentionPolicy.SOURCE)
public @interface LINE_JOIN {
}
public @interface LINE_JOIN {}
// SYMBOL_PLACEMENT: Label placement relative to its geometry.
@@ -103,44 +96,38 @@ public abstract class Property<T> {
/**
* Label placement relative to its geometry.
*/
@StringDef( {
SYMBOL_PLACEMENT_POINT,
SYMBOL_PLACEMENT_LINE,
})
@StringDef({
SYMBOL_PLACEMENT_POINT,
SYMBOL_PLACEMENT_LINE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface SYMBOL_PLACEMENT {
}
public @interface SYMBOL_PLACEMENT {}
// ICON_ROTATION_ALIGNMENT: In combination with `symbol-placement`, determines the rotation behavior of icons.
/**
* When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_POINT}, aligns icons east-west. When
* {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_LINE}, aligns icon x-axes with the line.
* When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_POINT}, aligns icons east-west. When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_LINE}, aligns icon x-axes with the line.
*/
public static final String ICON_ROTATION_ALIGNMENT_MAP = "map";
/**
* Produces icons whose x-axes are aligned with the x-axis of the viewport, regardless of the value of
* {@link SYMBOL_PLACEMENT}.
* Produces icons whose x-axes are aligned with the x-axis of the viewport, regardless of the value of {@link SYMBOL_PLACEMENT}.
*/
public static final String ICON_ROTATION_ALIGNMENT_VIEWPORT = "viewport";
/**
* When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_POINT}, this is equivalent to
* {@link Property#ICON_ROTATION_ALIGNMENT_VIEWPORT}. When {@link SYMBOL_PLACEMENT} is set to
* {@link Property#SYMBOL_PLACEMENT_LINE}, this is equivalent to {@link Property#ICON_ROTATION_ALIGNMENT_MAP}.
* When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_POINT}, this is equivalent to {@link Property#ICON_ROTATION_ALIGNMENT_VIEWPORT}. When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_LINE}, this is equivalent to {@link Property#ICON_ROTATION_ALIGNMENT_MAP}.
*/
public static final String ICON_ROTATION_ALIGNMENT_AUTO = "auto";
/**
* In combination with `symbol-placement`, determines the rotation behavior of icons.
*/
@StringDef( {
ICON_ROTATION_ALIGNMENT_MAP,
ICON_ROTATION_ALIGNMENT_VIEWPORT,
ICON_ROTATION_ALIGNMENT_AUTO,
})
@StringDef({
ICON_ROTATION_ALIGNMENT_MAP,
ICON_ROTATION_ALIGNMENT_VIEWPORT,
ICON_ROTATION_ALIGNMENT_AUTO,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ICON_ROTATION_ALIGNMENT {
}
public @interface ICON_ROTATION_ALIGNMENT {}
// ICON_TEXT_FIT: Scales the icon to fit around the associated text.
@@ -164,15 +151,14 @@ public abstract class Property<T> {
/**
* Scales the icon to fit around the associated text.
*/
@StringDef( {
ICON_TEXT_FIT_NONE,
ICON_TEXT_FIT_WIDTH,
ICON_TEXT_FIT_HEIGHT,
ICON_TEXT_FIT_BOTH,
})
@StringDef({
ICON_TEXT_FIT_NONE,
ICON_TEXT_FIT_WIDTH,
ICON_TEXT_FIT_HEIGHT,
ICON_TEXT_FIT_BOTH,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ICON_TEXT_FIT {
}
public @interface ICON_TEXT_FIT {}
// TEXT_PITCH_ALIGNMENT: Orientation of text when map is pitched.
@@ -192,46 +178,39 @@ public abstract class Property<T> {
/**
* Orientation of text when map is pitched.
*/
@StringDef( {
TEXT_PITCH_ALIGNMENT_MAP,
TEXT_PITCH_ALIGNMENT_VIEWPORT,
TEXT_PITCH_ALIGNMENT_AUTO,
})
@StringDef({
TEXT_PITCH_ALIGNMENT_MAP,
TEXT_PITCH_ALIGNMENT_VIEWPORT,
TEXT_PITCH_ALIGNMENT_AUTO,
})
@Retention(RetentionPolicy.SOURCE)
public @interface TEXT_PITCH_ALIGNMENT {
}
public @interface TEXT_PITCH_ALIGNMENT {}
// TEXT_ROTATION_ALIGNMENT: In combination with `symbol-placement`, determines the rotation behavior of the individual
// glyphs forming the text.
// TEXT_ROTATION_ALIGNMENT: In combination with `symbol-placement`, determines the rotation behavior of the individual glyphs forming the text.
/**
* When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_POINT}, aligns text east-west. When
* {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_LINE}, aligns text x-axes with the line.
* When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_POINT}, aligns text east-west. When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_LINE}, aligns text x-axes with the line.
*/
public static final String TEXT_ROTATION_ALIGNMENT_MAP = "map";
/**
* Produces glyphs whose x-axes are aligned with the x-axis of the viewport, regardless of the value of
* {@link SYMBOL_PLACEMENT}.
* Produces glyphs whose x-axes are aligned with the x-axis of the viewport, regardless of the value of {@link SYMBOL_PLACEMENT}.
*/
public static final String TEXT_ROTATION_ALIGNMENT_VIEWPORT = "viewport";
/**
* When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_POINT}, this is equivalent to
* {@link Property#TEXT_ROTATION_ALIGNMENT_VIEWPORT}. When {@link SYMBOL_PLACEMENT} is set to
* {@link Property#SYMBOL_PLACEMENT_LINE}, this is equivalent to {@link Property#TEXT_ROTATION_ALIGNMENT_MAP}.
* When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_POINT}, this is equivalent to {@link Property#TEXT_ROTATION_ALIGNMENT_VIEWPORT}. When {@link SYMBOL_PLACEMENT} is set to {@link Property#SYMBOL_PLACEMENT_LINE}, this is equivalent to {@link Property#TEXT_ROTATION_ALIGNMENT_MAP}.
*/
public static final String TEXT_ROTATION_ALIGNMENT_AUTO = "auto";
/**
* In combination with `symbol-placement`, determines the rotation behavior of the individual glyphs forming the text.
*/
@StringDef( {
TEXT_ROTATION_ALIGNMENT_MAP,
TEXT_ROTATION_ALIGNMENT_VIEWPORT,
TEXT_ROTATION_ALIGNMENT_AUTO,
})
@StringDef({
TEXT_ROTATION_ALIGNMENT_MAP,
TEXT_ROTATION_ALIGNMENT_VIEWPORT,
TEXT_ROTATION_ALIGNMENT_AUTO,
})
@Retention(RetentionPolicy.SOURCE)
public @interface TEXT_ROTATION_ALIGNMENT {
}
public @interface TEXT_ROTATION_ALIGNMENT {}
// TEXT_JUSTIFY: Text justification options.
@@ -251,14 +230,13 @@ public abstract class Property<T> {
/**
* Text justification options.
*/
@StringDef( {
TEXT_JUSTIFY_LEFT,
TEXT_JUSTIFY_CENTER,
TEXT_JUSTIFY_RIGHT,
})
@StringDef({
TEXT_JUSTIFY_LEFT,
TEXT_JUSTIFY_CENTER,
TEXT_JUSTIFY_RIGHT,
})
@Retention(RetentionPolicy.SOURCE)
public @interface TEXT_JUSTIFY {
}
public @interface TEXT_JUSTIFY {}
// TEXT_ANCHOR: Part of the text placed closest to the anchor.
@@ -302,20 +280,19 @@ public abstract class Property<T> {
/**
* Part of the text placed closest to the anchor.
*/
@StringDef( {
TEXT_ANCHOR_CENTER,
TEXT_ANCHOR_LEFT,
TEXT_ANCHOR_RIGHT,
TEXT_ANCHOR_TOP,
TEXT_ANCHOR_BOTTOM,
TEXT_ANCHOR_TOP_LEFT,
TEXT_ANCHOR_TOP_RIGHT,
TEXT_ANCHOR_BOTTOM_LEFT,
TEXT_ANCHOR_BOTTOM_RIGHT,
})
@StringDef({
TEXT_ANCHOR_CENTER,
TEXT_ANCHOR_LEFT,
TEXT_ANCHOR_RIGHT,
TEXT_ANCHOR_TOP,
TEXT_ANCHOR_BOTTOM,
TEXT_ANCHOR_TOP_LEFT,
TEXT_ANCHOR_TOP_RIGHT,
TEXT_ANCHOR_BOTTOM_LEFT,
TEXT_ANCHOR_BOTTOM_RIGHT,
})
@Retention(RetentionPolicy.SOURCE)
public @interface TEXT_ANCHOR {
}
public @interface TEXT_ANCHOR {}
// TEXT_TRANSFORM: Specifies how to capitalize text, similar to the CSS `text-transform` property.
@@ -335,14 +312,13 @@ public abstract class Property<T> {
/**
* Specifies how to capitalize text, similar to the CSS `text-transform` property.
*/
@StringDef( {
TEXT_TRANSFORM_NONE,
TEXT_TRANSFORM_UPPERCASE,
TEXT_TRANSFORM_LOWERCASE,
})
@StringDef({
TEXT_TRANSFORM_NONE,
TEXT_TRANSFORM_UPPERCASE,
TEXT_TRANSFORM_LOWERCASE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface TEXT_TRANSFORM {
}
public @interface TEXT_TRANSFORM {}
// FILL_TRANSLATE_ANCHOR: Controls the translation reference point.
@@ -358,13 +334,12 @@ public abstract class Property<T> {
/**
* Controls the translation reference point.
*/
@StringDef( {
FILL_TRANSLATE_ANCHOR_MAP,
FILL_TRANSLATE_ANCHOR_VIEWPORT,
})
@StringDef({
FILL_TRANSLATE_ANCHOR_MAP,
FILL_TRANSLATE_ANCHOR_VIEWPORT,
})
@Retention(RetentionPolicy.SOURCE)
public @interface FILL_TRANSLATE_ANCHOR {
}
public @interface FILL_TRANSLATE_ANCHOR {}
// LINE_TRANSLATE_ANCHOR: Controls the translation reference point.
@@ -380,13 +355,12 @@ public abstract class Property<T> {
/**
* Controls the translation reference point.
*/
@StringDef( {
LINE_TRANSLATE_ANCHOR_MAP,
LINE_TRANSLATE_ANCHOR_VIEWPORT,
})
@StringDef({
LINE_TRANSLATE_ANCHOR_MAP,
LINE_TRANSLATE_ANCHOR_VIEWPORT,
})
@Retention(RetentionPolicy.SOURCE)
public @interface LINE_TRANSLATE_ANCHOR {
}
public @interface LINE_TRANSLATE_ANCHOR {}
// ICON_TRANSLATE_ANCHOR: Controls the translation reference point.
@@ -402,13 +376,12 @@ public abstract class Property<T> {
/**
* Controls the translation reference point.
*/
@StringDef( {
ICON_TRANSLATE_ANCHOR_MAP,
ICON_TRANSLATE_ANCHOR_VIEWPORT,
})
@StringDef({
ICON_TRANSLATE_ANCHOR_MAP,
ICON_TRANSLATE_ANCHOR_VIEWPORT,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ICON_TRANSLATE_ANCHOR {
}
public @interface ICON_TRANSLATE_ANCHOR {}
// TEXT_TRANSLATE_ANCHOR: Controls the translation reference point.
@@ -424,13 +397,12 @@ public abstract class Property<T> {
/**
* Controls the translation reference point.
*/
@StringDef( {
TEXT_TRANSLATE_ANCHOR_MAP,
TEXT_TRANSLATE_ANCHOR_VIEWPORT,
})
@StringDef({
TEXT_TRANSLATE_ANCHOR_MAP,
TEXT_TRANSLATE_ANCHOR_VIEWPORT,
})
@Retention(RetentionPolicy.SOURCE)
public @interface TEXT_TRANSLATE_ANCHOR {
}
public @interface TEXT_TRANSLATE_ANCHOR {}
// CIRCLE_TRANSLATE_ANCHOR: Controls the translation reference point.
@@ -446,13 +418,12 @@ public abstract class Property<T> {
/**
* Controls the translation reference point.
*/
@StringDef( {
CIRCLE_TRANSLATE_ANCHOR_MAP,
CIRCLE_TRANSLATE_ANCHOR_VIEWPORT,
})
@StringDef({
CIRCLE_TRANSLATE_ANCHOR_MAP,
CIRCLE_TRANSLATE_ANCHOR_VIEWPORT,
})
@Retention(RetentionPolicy.SOURCE)
public @interface CIRCLE_TRANSLATE_ANCHOR {
}
public @interface CIRCLE_TRANSLATE_ANCHOR {}
// CIRCLE_PITCH_SCALE: Controls the scaling behavior of the circle when the map is pitched.
@@ -468,20 +439,14 @@ public abstract class Property<T> {
/**
* Controls the scaling behavior of the circle when the map is pitched.
*/
@StringDef( {
CIRCLE_PITCH_SCALE_MAP,
CIRCLE_PITCH_SCALE_VIEWPORT,
})
@StringDef({
CIRCLE_PITCH_SCALE_MAP,
CIRCLE_PITCH_SCALE_VIEWPORT,
})
@Retention(RetentionPolicy.SOURCE)
public @interface CIRCLE_PITCH_SCALE {
}
public @interface CIRCLE_PITCH_SCALE {}
// Class definition
public final String name;
public final T value;
/* package */ Property(String name, T value) {
this.name = name;
this.value = value;
private Property() {
}
}

View File

@@ -1,7 +1,10 @@
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.mapbox.mapboxsdk.style.functions.Function;
import timber.log.Timber;
/**
@@ -9,9 +12,11 @@ import timber.log.Timber;
*/
public class PropertyValue<T> {
private final Object value;
public final String name;
public final T value;
/* package */ PropertyValue(Object value) {
/* package */ PropertyValue(@NonNull String name, T value) {
this.name = name;
this.value = value;
}
@@ -28,10 +33,10 @@ public class PropertyValue<T> {
}
@Nullable
public Function<T> getFunction() {
public Function<?, T> getFunction() {
if (isFunction()) {
// noinspection unchecked
return (Function<T>) value;
return (Function<?, T>) value;
} else {
Timber.w("not a function, try value");
return null;
@@ -51,7 +56,6 @@ public class PropertyValue<T> {
@Override
public String toString() {
return String.format("%s (%s)", getClass().getSimpleName(), value != null
? value.getClass().getSimpleName() : null);
return String.format("%s: %s", name, value);
}
}

View File

@@ -1,9 +1,13 @@
package com.mapbox.mapboxsdk.style.layers;
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import static com.mapbox.mapboxsdk.utils.ColorUtils.rgbaToColor;
/**
* Raster map textures such as satellite imagery.
*
@@ -59,7 +63,7 @@ public class RasterLayer extends Layer {
* @param properties the var-args properties
* @return This
*/
public RasterLayer withProperties(@NonNull Property<?>... properties) {
public RasterLayer withProperties(@NonNull PropertyValue<?>... properties) {
setProperties(properties);
return this;
}
@@ -73,7 +77,7 @@ public class RasterLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getRasterOpacity() {
return (PropertyValue<Float>) new PropertyValue(nativeGetRasterOpacity());
return (PropertyValue<Float>) new PropertyValue("raster-opacity", nativeGetRasterOpacity());
}
/**
@@ -83,7 +87,7 @@ public class RasterLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getRasterHueRotate() {
return (PropertyValue<Float>) new PropertyValue(nativeGetRasterHueRotate());
return (PropertyValue<Float>) new PropertyValue("raster-hue-rotate", nativeGetRasterHueRotate());
}
/**
@@ -93,7 +97,7 @@ public class RasterLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getRasterBrightnessMin() {
return (PropertyValue<Float>) new PropertyValue(nativeGetRasterBrightnessMin());
return (PropertyValue<Float>) new PropertyValue("raster-brightness-min", nativeGetRasterBrightnessMin());
}
/**
@@ -103,7 +107,7 @@ public class RasterLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getRasterBrightnessMax() {
return (PropertyValue<Float>) new PropertyValue(nativeGetRasterBrightnessMax());
return (PropertyValue<Float>) new PropertyValue("raster-brightness-max", nativeGetRasterBrightnessMax());
}
/**
@@ -113,7 +117,7 @@ public class RasterLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getRasterSaturation() {
return (PropertyValue<Float>) new PropertyValue(nativeGetRasterSaturation());
return (PropertyValue<Float>) new PropertyValue("raster-saturation", nativeGetRasterSaturation());
}
/**
@@ -123,7 +127,7 @@ public class RasterLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getRasterContrast() {
return (PropertyValue<Float>) new PropertyValue(nativeGetRasterContrast());
return (PropertyValue<Float>) new PropertyValue("raster-contrast", nativeGetRasterContrast());
}
/**
@@ -133,7 +137,7 @@ public class RasterLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getRasterFadeDuration() {
return (PropertyValue<Float>) new PropertyValue(nativeGetRasterFadeDuration());
return (PropertyValue<Float>) new PropertyValue("raster-fade-duration", nativeGetRasterFadeDuration());
}
private native Object nativeGetRasterOpacity();

View File

@@ -1,6 +1,7 @@
package com.mapbox.mapboxsdk.style.layers;
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
@@ -96,14 +97,13 @@ public class SymbolLayer extends Layer {
return this;
}
/**
* Set a property or properties.
*
* @param properties the var-args properties
* @return This
*/
public SymbolLayer withProperties(@NonNull Property<?>... properties) {
public SymbolLayer withProperties(@NonNull PropertyValue<?>... properties) {
setProperties(properties);
return this;
}
@@ -117,7 +117,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getSymbolPlacement() {
return (PropertyValue<String>) new PropertyValue(nativeGetSymbolPlacement());
return (PropertyValue<String>) new PropertyValue("symbol-placement", nativeGetSymbolPlacement());
}
/**
@@ -127,7 +127,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getSymbolSpacing() {
return (PropertyValue<Float>) new PropertyValue(nativeGetSymbolSpacing());
return (PropertyValue<Float>) new PropertyValue("symbol-spacing", nativeGetSymbolSpacing());
}
/**
@@ -137,7 +137,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getSymbolAvoidEdges() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetSymbolAvoidEdges());
return (PropertyValue<Boolean>) new PropertyValue("symbol-avoid-edges", nativeGetSymbolAvoidEdges());
}
/**
@@ -147,7 +147,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getIconAllowOverlap() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetIconAllowOverlap());
return (PropertyValue<Boolean>) new PropertyValue("icon-allow-overlap", nativeGetIconAllowOverlap());
}
/**
@@ -157,7 +157,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getIconIgnorePlacement() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetIconIgnorePlacement());
return (PropertyValue<Boolean>) new PropertyValue("icon-ignore-placement", nativeGetIconIgnorePlacement());
}
/**
@@ -167,7 +167,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getIconOptional() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetIconOptional());
return (PropertyValue<Boolean>) new PropertyValue("icon-optional", nativeGetIconOptional());
}
/**
@@ -177,7 +177,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getIconRotationAlignment() {
return (PropertyValue<String>) new PropertyValue(nativeGetIconRotationAlignment());
return (PropertyValue<String>) new PropertyValue("icon-rotation-alignment", nativeGetIconRotationAlignment());
}
/**
@@ -187,7 +187,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getIconSize() {
return (PropertyValue<Float>) new PropertyValue(nativeGetIconSize());
return (PropertyValue<Float>) new PropertyValue("icon-size", nativeGetIconSize());
}
/**
@@ -197,7 +197,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getIconTextFit() {
return (PropertyValue<String>) new PropertyValue(nativeGetIconTextFit());
return (PropertyValue<String>) new PropertyValue("icon-text-fit", nativeGetIconTextFit());
}
/**
@@ -207,7 +207,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float[]> getIconTextFitPadding() {
return (PropertyValue<Float[]>) new PropertyValue(nativeGetIconTextFitPadding());
return (PropertyValue<Float[]>) new PropertyValue("icon-text-fit-padding", nativeGetIconTextFitPadding());
}
/**
@@ -217,7 +217,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getIconImage() {
return (PropertyValue<String>) new PropertyValue(nativeGetIconImage());
return (PropertyValue<String>) new PropertyValue("icon-image", nativeGetIconImage());
}
/**
@@ -227,7 +227,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getIconRotate() {
return (PropertyValue<Float>) new PropertyValue(nativeGetIconRotate());
return (PropertyValue<Float>) new PropertyValue("icon-rotate", nativeGetIconRotate());
}
/**
@@ -237,7 +237,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getIconPadding() {
return (PropertyValue<Float>) new PropertyValue(nativeGetIconPadding());
return (PropertyValue<Float>) new PropertyValue("icon-padding", nativeGetIconPadding());
}
/**
@@ -247,7 +247,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getIconKeepUpright() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetIconKeepUpright());
return (PropertyValue<Boolean>) new PropertyValue("icon-keep-upright", nativeGetIconKeepUpright());
}
/**
@@ -257,7 +257,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float[]> getIconOffset() {
return (PropertyValue<Float[]>) new PropertyValue(nativeGetIconOffset());
return (PropertyValue<Float[]>) new PropertyValue("icon-offset", nativeGetIconOffset());
}
/**
@@ -267,7 +267,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getTextPitchAlignment() {
return (PropertyValue<String>) new PropertyValue(nativeGetTextPitchAlignment());
return (PropertyValue<String>) new PropertyValue("text-pitch-alignment", nativeGetTextPitchAlignment());
}
/**
@@ -277,7 +277,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getTextRotationAlignment() {
return (PropertyValue<String>) new PropertyValue(nativeGetTextRotationAlignment());
return (PropertyValue<String>) new PropertyValue("text-rotation-alignment", nativeGetTextRotationAlignment());
}
/**
@@ -287,7 +287,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getTextField() {
return (PropertyValue<String>) new PropertyValue(nativeGetTextField());
return (PropertyValue<String>) new PropertyValue("text-field", nativeGetTextField());
}
/**
@@ -297,7 +297,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String[]> getTextFont() {
return (PropertyValue<String[]>) new PropertyValue(nativeGetTextFont());
return (PropertyValue<String[]>) new PropertyValue("text-font", nativeGetTextFont());
}
/**
@@ -307,7 +307,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextSize() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextSize());
return (PropertyValue<Float>) new PropertyValue("text-size", nativeGetTextSize());
}
/**
@@ -317,7 +317,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextMaxWidth() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextMaxWidth());
return (PropertyValue<Float>) new PropertyValue("text-max-width", nativeGetTextMaxWidth());
}
/**
@@ -327,7 +327,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextLineHeight() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextLineHeight());
return (PropertyValue<Float>) new PropertyValue("text-line-height", nativeGetTextLineHeight());
}
/**
@@ -337,7 +337,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextLetterSpacing() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextLetterSpacing());
return (PropertyValue<Float>) new PropertyValue("text-letter-spacing", nativeGetTextLetterSpacing());
}
/**
@@ -347,7 +347,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getTextJustify() {
return (PropertyValue<String>) new PropertyValue(nativeGetTextJustify());
return (PropertyValue<String>) new PropertyValue("text-justify", nativeGetTextJustify());
}
/**
@@ -357,7 +357,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getTextAnchor() {
return (PropertyValue<String>) new PropertyValue(nativeGetTextAnchor());
return (PropertyValue<String>) new PropertyValue("text-anchor", nativeGetTextAnchor());
}
/**
@@ -367,7 +367,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextMaxAngle() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextMaxAngle());
return (PropertyValue<Float>) new PropertyValue("text-max-angle", nativeGetTextMaxAngle());
}
/**
@@ -377,7 +377,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextRotate() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextRotate());
return (PropertyValue<Float>) new PropertyValue("text-rotate", nativeGetTextRotate());
}
/**
@@ -387,7 +387,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextPadding() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextPadding());
return (PropertyValue<Float>) new PropertyValue("text-padding", nativeGetTextPadding());
}
/**
@@ -397,7 +397,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getTextKeepUpright() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetTextKeepUpright());
return (PropertyValue<Boolean>) new PropertyValue("text-keep-upright", nativeGetTextKeepUpright());
}
/**
@@ -407,7 +407,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getTextTransform() {
return (PropertyValue<String>) new PropertyValue(nativeGetTextTransform());
return (PropertyValue<String>) new PropertyValue("text-transform", nativeGetTextTransform());
}
/**
@@ -417,7 +417,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float[]> getTextOffset() {
return (PropertyValue<Float[]>) new PropertyValue(nativeGetTextOffset());
return (PropertyValue<Float[]>) new PropertyValue("text-offset", nativeGetTextOffset());
}
/**
@@ -427,7 +427,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getTextAllowOverlap() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetTextAllowOverlap());
return (PropertyValue<Boolean>) new PropertyValue("text-allow-overlap", nativeGetTextAllowOverlap());
}
/**
@@ -437,7 +437,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getTextIgnorePlacement() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetTextIgnorePlacement());
return (PropertyValue<Boolean>) new PropertyValue("text-ignore-placement", nativeGetTextIgnorePlacement());
}
/**
@@ -447,7 +447,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Boolean> getTextOptional() {
return (PropertyValue<Boolean>) new PropertyValue(nativeGetTextOptional());
return (PropertyValue<Boolean>) new PropertyValue("text-optional", nativeGetTextOptional());
}
/**
@@ -457,7 +457,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getIconOpacity() {
return (PropertyValue<Float>) new PropertyValue(nativeGetIconOpacity());
return (PropertyValue<Float>) new PropertyValue("icon-opacity", nativeGetIconOpacity());
}
/**
@@ -467,7 +467,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getIconColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetIconColor());
return (PropertyValue<String>) new PropertyValue("icon-color", nativeGetIconColor());
}
/**
@@ -494,7 +494,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getIconHaloColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetIconHaloColor());
return (PropertyValue<String>) new PropertyValue("icon-halo-color", nativeGetIconHaloColor());
}
/**
@@ -521,7 +521,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getIconHaloWidth() {
return (PropertyValue<Float>) new PropertyValue(nativeGetIconHaloWidth());
return (PropertyValue<Float>) new PropertyValue("icon-halo-width", nativeGetIconHaloWidth());
}
/**
@@ -531,7 +531,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getIconHaloBlur() {
return (PropertyValue<Float>) new PropertyValue(nativeGetIconHaloBlur());
return (PropertyValue<Float>) new PropertyValue("icon-halo-blur", nativeGetIconHaloBlur());
}
/**
@@ -541,7 +541,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float[]> getIconTranslate() {
return (PropertyValue<Float[]>) new PropertyValue(nativeGetIconTranslate());
return (PropertyValue<Float[]>) new PropertyValue("icon-translate", nativeGetIconTranslate());
}
/**
@@ -551,7 +551,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getIconTranslateAnchor() {
return (PropertyValue<String>) new PropertyValue(nativeGetIconTranslateAnchor());
return (PropertyValue<String>) new PropertyValue("icon-translate-anchor", nativeGetIconTranslateAnchor());
}
/**
@@ -561,7 +561,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextOpacity() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextOpacity());
return (PropertyValue<Float>) new PropertyValue("text-opacity", nativeGetTextOpacity());
}
/**
@@ -571,7 +571,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getTextColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetTextColor());
return (PropertyValue<String>) new PropertyValue("text-color", nativeGetTextColor());
}
/**
@@ -598,7 +598,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getTextHaloColor() {
return (PropertyValue<String>) new PropertyValue(nativeGetTextHaloColor());
return (PropertyValue<String>) new PropertyValue("text-halo-color", nativeGetTextHaloColor());
}
/**
@@ -625,7 +625,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextHaloWidth() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextHaloWidth());
return (PropertyValue<Float>) new PropertyValue("text-halo-width", nativeGetTextHaloWidth());
}
/**
@@ -635,7 +635,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float> getTextHaloBlur() {
return (PropertyValue<Float>) new PropertyValue(nativeGetTextHaloBlur());
return (PropertyValue<Float>) new PropertyValue("text-halo-blur", nativeGetTextHaloBlur());
}
/**
@@ -645,7 +645,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<Float[]> getTextTranslate() {
return (PropertyValue<Float[]>) new PropertyValue(nativeGetTextTranslate());
return (PropertyValue<Float[]>) new PropertyValue("text-translate", nativeGetTextTranslate());
}
/**
@@ -655,7 +655,7 @@ public class SymbolLayer extends Layer {
*/
@SuppressWarnings("unchecked")
public PropertyValue<String> getTextTranslateAnchor() {
return (PropertyValue<String>) new PropertyValue(nativeGetTextTranslateAnchor());
return (PropertyValue<String>) new PropertyValue("text-translate-anchor", nativeGetTextTranslateAnchor());
}
private native Object nativeGetSymbolPlacement();

View File

@@ -4,14 +4,14 @@
const doc = locals.doc;
-%>
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.UiThread;
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import static com.mapbox.mapboxsdk.utils.ColorUtils.*;
import static com.mapbox.mapboxsdk.utils.ColorUtils.rgbaToColor;
/**
* <%- doc %>
@@ -21,151 +21,153 @@ import static com.mapbox.mapboxsdk.utils.ColorUtils.*;
@UiThread
public class <%- camelize(type) %>Layer extends Layer {
/**
* Creates a <%- camelize(type) %>Layer.
*
* @param nativePtr pointer used by core
*/
public <%- camelize(type) %>Layer(long nativePtr) {
super(nativePtr);
}
/**
* Creates a <%- camelize(type) %>Layer.
*
* @param nativePtr pointer used by core
*/
public <%- camelize(type) %>Layer(long nativePtr) {
super(nativePtr);
}
<% if (type === 'background') { -%>
/**
* Creates a <%- camelize(type) %>Layer.
*
* @param layerId the id of the layer
*/
public <%- camelize(type) %>Layer(String layerId) {
initialize(layerId);
}
/**
* Creates a <%- camelize(type) %>Layer.
*
* @param layerId the id of the layer
*/
public <%- camelize(type) %>Layer(String layerId) {
initialize(layerId);
}
protected native void initialize(String layerId);
protected native void initialize(String layerId);
<% } else { -%>
/**
* Creates a <%- camelize(type) %>Layer.
*
* @param layerId the id of the layer
* @param sourceId the id of the source
*/
public <%- camelize(type) %>Layer(String layerId, String sourceId) {
initialize(layerId, sourceId);
}
/**
* Creates a <%- camelize(type) %>Layer.
*
* @param layerId the id of the layer
* @param sourceId the id of the source
*/
public <%- camelize(type) %>Layer(String layerId, String sourceId) {
initialize(layerId, sourceId);
}
protected native void initialize(String layerId, String sourceId);
protected native void initialize(String layerId, String sourceId);
/**
* Set the source layer.
*
* @param sourceLayer the source layer to set
*/
public void setSourceLayer(String sourceLayer) {
nativeSetSourceLayer(sourceLayer);
}
/**
* Set the source layer.
*
* @param sourceLayer the source layer to set
*/
public void setSourceLayer(String sourceLayer) {
nativeSetSourceLayer(sourceLayer);
}
/**
* Set the source Layer.
*
* @param sourceLayer the source layer to set
* @return This
*/
public <%- camelize(type) %>Layer withSourceLayer(String sourceLayer) {
setSourceLayer(sourceLayer);
return this;
}
/**
* Set the source Layer.
*
* @param sourceLayer the source layer to set
* @return This
*/
public <%- camelize(type) %>Layer withSourceLayer(String sourceLayer) {
setSourceLayer(sourceLayer);
return this;
}
<% } -%>
<% if (type !== 'background' && type !== 'raster') { -%>
/**
* Set a single filter.
*
* @param filter the filter to set
*/
public void setFilter(Filter.Statement filter) {
this.setFilter(filter.toArray());
}
/**
* Set a single filter.
*
* @param filter the filter to set
*/
public void setFilter(Filter.Statement filter) {
this.setFilter(filter.toArray());
}
/**
* Set an array of filters.
*
* @param filter the filter array to set
*/
public void setFilter(Object[] filter) {
nativeSetFilter(filter);
}
/**
* Set an array of filters.
*
* @param filter the filter array to set
*/
public void setFilter(Object[] filter) {
nativeSetFilter(filter);
}
/**
* Set an array of filters.
*
* @param filter tthe filter array to set
* @return This
*/
public <%- camelize(type) %>Layer withFilter(Object[] filter) {
setFilter(filter);
return this;
}
/**
* Set an array of filters.
*
* @param filter tthe filter array to set
* @return This
*/
public <%- camelize(type) %>Layer withFilter(Object[] filter) {
setFilter(filter);
return this;
}
/**
* Set a single filter.
*
* @param filter the filter to set
* @return This
*/
public <%- camelize(type) %>Layer withFilter(Filter.Statement filter) {
setFilter(filter);
return this;
}
/**
* Set a single filter.
*
* @param filter the filter to set
* @return This
*/
public <%- camelize(type) %>Layer withFilter(Filter.Statement filter) {
setFilter(filter);
return this;
}
<% } -%>
/**
* Set a property or properties.
*
* @param properties the var-args properties
* @return This
*/
public <%- camelize(type) %>Layer withProperties(@NonNull PropertyValue<?>... properties) {
setProperties(properties);
return this;
}
/**
* Set a property or properties.
*
* @param properties the var-args properties
* @return This
*/
public <%- camelize(type) %>Layer withProperties(@NonNull Property<?>... properties) {
setProperties(properties);
return this;
}
// Property getters
// Property getters
<% for (const property of properties) { -%>
/**
* Get the <%- camelize(property.name) %> property
*
* @return property wrapper value around <%- propertyType(property) %>
*/
@SuppressWarnings("unchecked")
public PropertyValue<<%- propertyType(property) %>> get<%- camelize(property.name) %>() {
return (PropertyValue<<%- propertyType(property) %>>) new PropertyValue(nativeGet<%- camelize(property.name) %>());
}
<% if (property.type == 'color') { -%>
/**
* <%- property.doc %>
*
* @return int representation of a rgba string color
* @throws RuntimeException thrown if property isn't a value
*/
@ColorInt
public int get<%- camelize(property.name) %>AsInt() {
PropertyValue<<%- propertyType(property) %>> value = get<%- camelize(property.name) %>();
if (value.isValue()) {
return rgbaToColor(value.getValue());
} else {
throw new RuntimeException("<%- property.name %> was set as a Function");
}
}
/**
* Get the <%- camelize(property.name) %> property
*
* @return property wrapper value around <%- propertyType(property) %>
*/
@SuppressWarnings("unchecked")
public PropertyValue<<%- propertyType(property) %>> get<%- camelize(property.name) %>() {
return (PropertyValue<<%- propertyType(property) %>>) new PropertyValue("<%- property.name %>", nativeGet<%- camelize(property.name) %>());
}
<% if (property.type == 'color') { -%>
<% } -%>
/**
* <%- property.doc %>
*
* @return int representation of a rgba string color
* @throws RuntimeException thrown if property isn't a value
*/
@ColorInt
public int get<%- camelize(property.name) %>AsInt() {
PropertyValue<<%- propertyType(property) %>> value = get<%- camelize(property.name) %>();
if (value.isValue()) {
return rgbaToColor(value.getValue());
} else {
throw new RuntimeException("<%- property.name %> was set as a Function");
}
}
<% } -%>
<% } -%>
<% for (const property of properties) { -%>
private native Object nativeGet<%- camelize(property.name) %>();
private native Object nativeGet<%- camelize(property.name) %>();
<% } -%>
@Override
protected native void finalize() throws Throwable;
@Override
protected native void finalize() throws Throwable;
}

View File

@@ -2,6 +2,7 @@
const properties = locals.properties;
-%>
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.support.annotation.StringDef;
@@ -12,56 +13,49 @@ import java.lang.annotation.RetentionPolicy;
/**
* Paint/Layout properties for Layer
*/
public abstract class Property<T> {
public final class Property {
// VISIBILITY: Whether this layer is displayed.
// VISIBILITY: Whether this layer is displayed.
/**
* The layer is shown.
*/
public static final String VISIBLE = "visible";
/**
* The layer is hidden.
*/
public static final String NONE = "none";
/**
* The layer is shown.
*/
public static final String VISIBLE = "visible";
/**
* The layer is hidden.
*/
public static final String NONE = "none";
@StringDef({
VISIBLE,
NONE
})
@Retention(RetentionPolicy.SOURCE)
public @interface VISIBILITY {}
@StringDef({
VISIBLE,
NONE
})
@Retention(RetentionPolicy.SOURCE)
public @interface VISIBILITY {}
<% for (const property of properties) { -%>
// <%- snakeCaseUpper(property.name) %>: <%- property.doc %>
// <%- snakeCaseUpper(property.name) %>: <%- property.doc %>
<% for (const value in property.values) { -%>
/**
* <%- propertyValueDoc(property, value) %>
*/
public static final String <%- snakeCaseUpper(property.name) %>_<%- snakeCaseUpper(value) %> = "<%- value %>";
/**
* <%- propertyValueDoc(property, value) %>
*/
public static final String <%- snakeCaseUpper(property.name) %>_<%- snakeCaseUpper(value) %> = "<%- value %>";
<% } -%>
/**
* <%- property.doc %>
*/
@StringDef({
<% for (const value of Object.keys(property.values)) { -%>
<%- snakeCaseUpper(property.name) %>_<%- snakeCaseUpper(value) %>,
<% } -%>
})
@Retention(RetentionPolicy.SOURCE)
public @interface <%- snakeCaseUpper(property.name) %> {}
/**
* <%- property.doc %>
*/
@StringDef({
<% for (const value of Object.keys(property.values)) { -%>
<%- snakeCaseUpper(property.name) %>_<%- snakeCaseUpper(value) %>,
<% } -%>
})
@Retention(RetentionPolicy.SOURCE)
public @interface <%- snakeCaseUpper(property.name) %> {}
<% } -%>
// Class definition
public final String name;
public final T value;
/* package */ Property(String name, T value) {
this.name = name;
this.value = value;
}
private Property() {
}
}

View File

@@ -3,11 +3,15 @@
const layoutProperties = locals.layoutProperties;
-%>
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.layers;
import android.annotation.SuppressLint;
import android.support.annotation.ColorInt;
import com.mapbox.mapboxsdk.style.functions.Function;
import com.mapbox.mapboxsdk.style.functions.CameraFunction;
/**
* Constructs paint/layout properties for Layers
*
@@ -15,85 +19,121 @@ import android.support.annotation.ColorInt;
*/
public class PropertyFactory {
/**
* Set the property visibility.
*
* @param value the visibility value
* @return property wrapper around visibility
*/
public static Property<String> visibility(@Property.VISIBILITY String value) {
return new LayoutProperty<>("visibility", value);
}
/**
* Set the property visibility.
*
* @param value the visibility value
* @return property wrapper around visibility
*/
public static PropertyValue<String> visibility(@Property.VISIBILITY String value) {
return new LayoutPropertyValue<>("visibility", value);
}
/**
* Set the property visibility.
*
* @param function the visibility function
* @return property wrapper around a String function
*/
public static Property<Function<String>> visibility(Function<String> function) {
return new LayoutProperty<>("visibility", function);
}
/**
* Set the property visibility.
*
* @param <T> the function input type
* @param function the visibility function
* @return property wrapper around a String function
*/
public static <T> PropertyValue<Function<T, String>> visibility(Function<T, String> function) {
return new LayoutPropertyValue<>("visibility", function);
}
<% for (const property of paintProperties) { -%>
<% if (property.type == 'color') { -%>
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param value a int color value
* @return property wrapper around String color
*/
public static Property<String> <%- camelizeWithLeadingLowercase(property.name) %>(@ColorInt int value) {
return new PaintProperty<>("<%- property.name %>", colorToRgbaString(value));
}
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param value a int color value
* @return property wrapper around String color
*/
public static PropertyValue<String> <%- camelizeWithLeadingLowercase(property.name) %>(@ColorInt int value) {
return new PaintPropertyValue<>("<%- property.name %>", colorToRgbaString(value));
}
<% } -%>
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param value a <%- propertyType(property) %> value
* @return property wrapper around <%- propertyType(property) %>
*/
public static Property<<%- propertyType(property) %>> <%- camelizeWithLeadingLowercase(property.name) %>(<%- propertyTypeAnnotation(property) %><%- iff(() => propertyTypeAnnotation(property), " ") %><%- propertyType(property) %> value) {
return new PaintProperty<>("<%- property.name %>", value);
}
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param value a <%- propertyType(property) %> value
* @return property wrapper around <%- propertyType(property) %>
*/
public static PropertyValue<<%- propertyType(property) %>> <%- camelizeWithLeadingLowercase(property.name) %>(<%- propertyTypeAnnotation(property) %><%- iff(() => propertyTypeAnnotation(property), " ") %><%- propertyType(property) %> value) {
return new PaintPropertyValue<>("<%- property.name %>", value);
}
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param function a wrapper function for <%- propertyType(property) %>
* @return property wrapper around a <%- propertyType(property) %> function
*/
public static Property<Function<<%- propertyType(property) %>>> <%- camelizeWithLeadingLowercase(property.name) %>(Function<<%- propertyType(property) %>> function) {
return new PaintProperty<>("<%- property.name %>", function);
}
<% if (supportsPropertyFunction(property)) { -%>
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param <T> the function input type
* @param function a wrapper function for <%- propertyType(property) %>
* @return property wrapper around a <%- propertyType(property) %> function
*/
public static <T> PropertyValue<Function<T, <%- propertyType(property) %>>> <%- camelizeWithLeadingLowercase(property.name) %>(Function<T, <%- propertyType(property) %>> function) {
return new PaintPropertyValue<>("<%- property.name %>", function);
}
<% } else if (supportsZoomFunction(property)) { -%>
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param <Z> the zoom parameter type
* @param function a wrapper {@link CameraFunction} for <%- propertyType(property) %>
* @return property wrapper around a <%- propertyType(property) %> function
*/
public static <Z extends Number> PropertyValue<CameraFunction<Z, <%- propertyType(property) %>>> <%- camelizeWithLeadingLowercase(property.name) %>(CameraFunction<Z, <%- propertyType(property) %>> function) {
return new PaintPropertyValue<>("<%- property.name %>", function);
}
<% } -%>
<% } -%>
<% for (const property of layoutProperties) { -%>
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param value a <%- propertyType(property) %> value
* @return property wrapper around <%- propertyType(property) %>
*/
public static Property<<%- propertyType(property) %>> <%- camelizeWithLeadingLowercase(property.name) %>(<%- propertyTypeAnnotation(property) %><%- iff(() => propertyTypeAnnotation(property), " ") %><%- propertyType(property) %> value) {
return new LayoutProperty<>("<%- property.name %>", value);
}
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param value a <%- propertyType(property) %> value
* @return property wrapper around <%- propertyType(property) %>
*/
public static PropertyValue<<%- propertyType(property) %>> <%- camelizeWithLeadingLowercase(property.name) %>(<%- propertyTypeAnnotation(property) %><%- iff(() => propertyTypeAnnotation(property), " ") %><%- propertyType(property) %> value) {
return new LayoutPropertyValue<>("<%- property.name %>", value);
}
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param function a wrapper function for <%- propertyType(property) %>
* @return property wrapper around a <%- propertyType(property) %> function
*/
public static Property<Function<<%- propertyType(property) %>>> <%- camelizeWithLeadingLowercase(property.name) %>(Function<<%- propertyType(property) %>> function) {
return new LayoutProperty<>("<%- property.name %>", function);
}
<% if (supportsPropertyFunction(property)) { -%>
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param <T> the function input type
* @param function a wrapper function for <%- propertyType(property) %>
* @return property wrapper around a <%- propertyType(property) %> function
*/
public static <T> PropertyValue<Function<T, <%- propertyType(property) %>>> <%- camelizeWithLeadingLowercase(property.name) %>(Function<T, <%- propertyType(property) %>> function) {
return new LayoutPropertyValue<>("<%- property.name %>", function);
}
<% } else if (supportsZoomFunction(property)) { -%>
/**
* <%- propertyFactoryMethodDoc(property) %>
*
* @param <Z> the zoom parameter type
* @param function a wrapper {@link CameraFunction} for <%- propertyType(property) %>
* @return property wrapper around a <%- propertyType(property) %> function
*/
public static <Z extends Number> PropertyValue<CameraFunction<Z, <%- propertyType(property) %>>> <%- camelizeWithLeadingLowercase(property.name) %>(CameraFunction<Z, <%- propertyType(property) %>> function) {
return new LayoutPropertyValue<>("<%- property.name %>", function);
}
<% } -%>
@SuppressLint("DefaultLocale")
static String colorToRgbaString(@ColorInt int value) {
return String.format("rgba(%d, %d, %d, %d)", (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF, (value >> 24) & 0xFF);
}
<% } -%>
@SuppressLint("DefaultLocale")
public static String colorToRgbaString(@ColorInt int value) {
return String.format("rgba(%d, %d, %d, %d)", (value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF, (value >> 24) & 0xFF);
}
}