VancedMicroG/play-services-api/src/main/java/com/google/android/gms/maps/model/MarkerOptions.java

343 lines
11 KiB
Java

/*
* Copyright (C) 2013-2017 microG Project Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.gms.maps.model;
import android.os.IBinder;
import com.google.android.gms.dynamic.ObjectWrapper;
import org.microg.gms.common.PublicApi;
import org.microg.safeparcel.AutoSafeParcelable;
import org.microg.safeparcel.SafeParceled;
@PublicApi
public class MarkerOptions extends AutoSafeParcelable {
@SafeParceled(1)
private int versionCode = 1;
@SafeParceled(2)
private LatLng position;
@SafeParceled(3)
private String title;
@SafeParceled(4)
private String snippet;
/**
* This is a IBinder to the remote BitmapDescriptor created using BitmapDescriptorFactory
*/
@SafeParceled(5)
private IBinder iconBinder;
private BitmapDescriptor icon;
@SafeParceled(6)
private float anchorU = 0.5F;
@SafeParceled(7)
private float anchorV = 1F;
@SafeParceled(8)
private boolean draggable;
@SafeParceled(9)
private boolean visible;
@SafeParceled(10)
private boolean flat;
@SafeParceled(11)
private float rotation = 0F;
@SafeParceled(12)
private float infoWindowAnchorU = 0F;
@SafeParceled(13)
private float infoWindowAnchorV = 1F;
@SafeParceled(14)
private float alpha = 1F;
@SafeParceled(15)
private float zIndex = 0F;
/**
* Creates a new set of marker options.
*/
public MarkerOptions() {
}
/**
* Sets the alpha (opacity) of the marker. This is a value from 0 to 1, where 0 means the
* marker is completely transparent and 1 means the marker is completely opaque.
*
* @return the object for which the method was called, with the new alpha set.
*/
public MarkerOptions alpha(float alpha) {
this.alpha = alpha;
return this;
}
/**
* Specifies the anchor to be at a particular point in the marker image.
* <p/>
* The anchor specifies the point in the icon image that is anchored to the marker's position
* on the Earth's surface.
* <p/>
* The anchor point is specified in the continuous space [0.0, 1.0] x [0.0, 1.0], where (0, 0)
* is the top-left corner of the image, and (1, 1) is the bottom-right corner. The anchoring
* point in a W x H image is the nearest discrete grid point in a (W + 1) x (H + 1) grid,
* obtained by scaling the then rounding. For example, in a 4 x 2 image, the anchor point
* (0.7, 0.6) resolves to the grid point at (3, 1).
*
* @param u u-coordinate of the anchor, as a ratio of the image width (in the range [0, 1])
* @param v v-coordinate of the anchor, as a ratio of the image height (in the range [0, 1])
* @return the object for which the method was called, with the new anchor set.
*/
public MarkerOptions anchor(float u, float v) {
this.anchorU = u;
this.anchorV = v;
return this;
}
/**
* Sets the draggability for the marker.
*
* @return the object for which the method was called, with the new draggable state set.
*/
public MarkerOptions draggable(boolean draggable) {
this.draggable = draggable;
return this;
}
/**
* Sets whether this marker should be flat against the map true or a billboard facing the
* camera false. If the marker is flat against the map, it will remain stuck to the map as the
* camera rotates and tilts but will still remain the same size as the camera zooms, unlike a
* GroundOverlay. If the marker is a billboard, it will always be drawn facing the camera
* and will rotate and tilt with the camera. The default value is false.
*
* @return the object for which the method was called, with the new flat state set.
*/
public MarkerOptions flat(boolean flat) {
this.flat = flat;
return this;
}
/**
* Gets the alpha set for this MarkerOptions object.
*
* @return the alpha of the marker in the range [0, 1].
*/
public float getAlpha() {
return alpha;
}
/**
* Horizontal distance, normalized to [0, 1], of the anchor from the left edge.
*
* @return the u value of the anchor.
*/
public float getAnchorU() {
return anchorU;
}
/**
* Vertical distance, normalized to [0, 1], of the anchor from the top edge.
*
* @return the v value of the anchor.
*/
public float getAnchorV() {
return anchorV;
}
/**
* Gets the custom icon set for this MarkerOptions object.
*
* @return An {@link BitmapDescriptor} representing the custom icon, or {@code null} if no
* custom icon is set.
*/
public BitmapDescriptor getIcon() {
if (icon == null && iconBinder != null) {
icon = new BitmapDescriptor(ObjectWrapper.asInterface(iconBinder));
}
return icon;
}
/**
* Horizontal distance, normalized to [0, 1], of the info window anchor from the left edge.
*
* @return the u value of the info window anchor.
*/
public float getInfoWindowAnchorU() {
return infoWindowAnchorU;
}
/**
* Vertical distance, normalized to [0, 1], of the info window anchor from the top edge.
*
* @return the v value of the info window anchor.
*/
public float getInfoWindowAnchorV() {
return infoWindowAnchorV;
}
/**
* Returns the position set for this MarkerOptions object.
*
* @return A {@link LatLng} object specifying the marker's current position.
*/
public LatLng getPosition() {
return position;
}
/**
* Gets the rotation set for this MarkerOptions object.
*
* @return the rotation of the marker in degrees clockwise from the default position.
*/
public float getRotation() {
return rotation;
}
/**
* Gets the snippet set for this MarkerOptions object.
*
* @return A string containing the marker's snippet.
*/
public String getSnippet() {
return snippet;
}
/**
* Gets the title set for this MarkerOptions object.
*
* @return A string containing the marker's title.
*/
public String getTitle() {
return title;
}
/**
* Sets the icon for the marker.
*
* @param icon if null, the default marker is used.
* @return the object for which the method was called, with the new icon set.
*/
public MarkerOptions icon(BitmapDescriptor icon) {
this.icon = icon;
this.iconBinder = icon == null ? null : icon.getRemoteObject().asBinder();
return this;
}
/**
* Specifies the anchor point of the info window on the marker image. This is specified in the
* same coordinate system as the anchor. See {@link MarkerOptions#anchor(float, float)} for
* more details. The default is the top middle of the image.
*
* @param u u-coordinate of the info window anchor, as a ratio of the image width (in the range [0, 1])
* @param v v-coordinate of the info window anchor, as a ratio of the image height (in the range [0, 1])
* @return the object for which the method was called, with the new info window anchor set.
*/
public MarkerOptions infoWindowAnchor(float u, float v) {
this.infoWindowAnchorU = u;
this.infoWindowAnchorV = v;
return this;
}
/**
* Gets the draggability setting for this MarkerOptions object.
*
* @return {@code true} if the marker is draggable; otherwise, returns {@code false}.
*/
public boolean isDraggable() {
return draggable;
}
/**
* Gets the flat setting for this MarkerOptions object.
*
* @return {@code true} if the marker is flat against the map; {@code false} if the marker
* should face the camera.
*/
public boolean isFlat() {
return flat;
}
/**
* Gets the visibility setting for this MarkerOptions object.
*
* @return {@code true} if the marker is visible; otherwise, returns {@code false}.
*/
public boolean isVisible() {
return visible;
}
/**
* Sets the location for the marker.
*
* @return the object for which the method was called, with the new position set.
*/
public MarkerOptions position(LatLng position) {
this.position = position;
return this;
}
/**
* Sets the rotation of the marker in degrees clockwise about the marker's anchor point. The
* axis of rotation is perpendicular to the marker. A rotation of 0 corresponds to the default
* position of the marker. When the marker is flat on the map, the default position is North
* aligned and the rotation is such that the marker always remains flat on the map. When the
* marker is a billboard, the default position is pointing up and the rotation is such that
* the marker is always facing the camera. The default value is 0.
*
* @return the object for which the method was called, with the new rotation set.
*/
public MarkerOptions rotation(float rotation) {
this.rotation = rotation;
return this;
}
/**
* Sets the snippet for the marker.
*
* @return the object for which the method was called, with the new snippet set.
*/
public MarkerOptions snippet(String snippet) {
this.snippet = snippet;
return this;
}
/**
* Sets the title for the marker.
*
* @return the object for which the method was called, with the new title set.
*/
public MarkerOptions title(String title) {
this.title = title;
return this;
}
/**
* Sets the visibility for the marker.
*
* @return the object for which the method was called, with the new visibility state set.
*/
public MarkerOptions visible(boolean visible) {
this.visible = visible;
return this;
}
public MarkerOptions zIndex(float zIndex) {
this.zIndex = zIndex;
return this;
}
public float getZIndex() {
return this.zIndex;
}
public static Creator<MarkerOptions> CREATOR = new AutoCreator<MarkerOptions>(MarkerOptions.class);
}