public final class

LaneDirection

extends java.lang.Object

implements VersionedParcelable

 java.lang.Object

↳androidx.car.cluster.navigation.LaneDirection

Gradle dependencies

compile group: 'androidx.car', name: 'car-cluster', version: '1.0.0-alpha5'

  • groupId: androidx.car
  • artifactId: car-cluster
  • version: 1.0.0-alpha5

Artifact androidx.car:car-cluster:1.0.0-alpha5 it located at Google repository (https://maven.google.com/)

Overview

One of the possible directions a driver can go when using a particular lane at a particular step in the navigation. This can be used by the consumer to choose what icon or icons to combine in order to display a lane configuration to the user.

Summary

Methods
public booleanequals(java.lang.Object o)

public LaneDirection.ShapegetShape()

Returns shape of this lane direction.

public inthashCode()

public booleanisHighlighted()

Returns whether this is a direction the driver should take in order to stay in the navigation route.

public java.lang.StringtoString()

from java.lang.Objectclone, finalize, getClass, notify, notifyAll, wait, wait, wait

Methods

public LaneDirection.Shape getShape()

Returns shape of this lane direction.

public boolean isHighlighted()

Returns whether this is a direction the driver should take in order to stay in the navigation route.

public boolean equals(java.lang.Object o)

public int hashCode()

public java.lang.String toString()

Source

/*
 * Copyright 2018 The Android Open Source Project
 *
 * 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 androidx.car.cluster.navigation;

import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;

import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.versionedparcelable.ParcelField;
import androidx.versionedparcelable.VersionedParcelable;
import androidx.versionedparcelable.VersionedParcelize;

import java.util.Objects;

/**
 * One of the possible directions a driver can go when using a particular lane at a particular
 * step in the navigation. This can be used by the consumer to choose what icon or icons to combine
 * in order to display a lane configuration to the user.
 */
@VersionedParcelize
public final class LaneDirection implements VersionedParcelable {
    /**
     * Turn amount and direction.
     */
    public enum Shape {
        /**
         * The shape is unknown to the consumer, in which case the consumer shouldn't show any
         * lane information at all.
         */
        UNKNOWN,
        /**
         * No turn.
         */
        STRAIGHT,
        /**
         * Slight turn (10-45 degrees).
         */
        SLIGHT_LEFT,
        /**
         * @see #SLIGHT_LEFT
         */
        SLIGHT_RIGHT,
        /**
         * Regular turn (45-135 degrees).
         */
        NORMAL_LEFT,
        /**
         * @see #NORMAL_LEFT
         */
        NORMAL_RIGHT,
        /**
         * Sharp turn (135-175 degrees).
         */
        SHARP_LEFT,
        /**
         * @see #SHARP_LEFT
         */
        SHARP_RIGHT,
        /**
         * A turn onto the opposite side of the same street (175-180 degrees).
         */
        U_TURN_LEFT,
        /**
         * @see #U_TURN_LEFT
         */
        U_TURN_RIGHT,
    }


    @ParcelField(1)
    EnumWrapper<Shape> mShape;
    @ParcelField(2)
    boolean mHighlighted;

    /**
     * Used by {@link VersionedParcelable}
     *
     * @hide
     */
    @RestrictTo(LIBRARY_GROUP_PREFIX)
    LaneDirection() {
    }

    /**
     * @hide
     */
    @RestrictTo(LIBRARY_GROUP_PREFIX)
    LaneDirection(@NonNull EnumWrapper<Shape> shape, boolean highlighted) {
        mShape = shape;
        mHighlighted = highlighted;
    }

    /**
     * Builder for creating a {@link LaneDirection}
     */
    public static final class Builder {
        private EnumWrapper<Shape> mShape;
        private boolean mHighlighted;

        /**
         * Sets the {@link Shape} of this lane direction, and any fallback values that could be used
         * by the consumer if the shape is unknown to it.
         *
         * @param shape lane direction shape
         * @param fallbacks Variations of {@code shape}, in case the consumer of this API doesn't
         *                  know the main one (used for backward compatibility).
         * @return this object for chaining
         */
        @NonNull
        public Builder setShape(@NonNull Shape shape, @NonNull Shape ... fallbacks) {
            mShape = EnumWrapper.of(shape, fallbacks);
            return this;
        }

        /**
         * Sets whether this a direction the driver could take in order to stay in the navigation
         * route.
         *
         * @param highlighted true if this is a recommended lane direction, or false otherwise.
         * @return this object for chaining
         */
        @NonNull
        public Builder setHighlighted(boolean highlighted) {
            mHighlighted = highlighted;
            return this;
        }

        /**
         * Returns a {@link LaneDirection} built with the provided information.
         */
        @NonNull
        public LaneDirection build() {
            return new LaneDirection(mShape, mHighlighted);
        }

    }

    /**
     * Returns shape of this lane direction.
     */
    @NonNull
    public Shape getShape() {
        return EnumWrapper.getValue(mShape, Shape.UNKNOWN);
    }

    /**
     * Returns whether this is a direction the driver should take in order to stay in the
     * navigation route.
     */
    public boolean isHighlighted() {
        return mHighlighted;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        LaneDirection laneDirection = (LaneDirection) o;
        return Objects.equals(getShape(), laneDirection.getShape())
                && isHighlighted() == laneDirection.isHighlighted();
    }

    @Override
    public int hashCode() {
        return Objects.hash(getShape(), isHighlighted());
    }

    @Override
    public String toString() {
        return String.format("{shape: %s, highlighted: %s}", mShape, mHighlighted);
    }
}