mirror of
https://codeberg.org/comaps/comaps
synced 2026-01-03 03:13:48 +00:00
[routing] New API for lanes
Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
@@ -31,18 +31,19 @@ public final class RoutingHelpers
|
||||
@NonNull
|
||||
public static LaneDirection createLaneDirection(@NonNull LaneWay laneWay, boolean isRecommended)
|
||||
{
|
||||
int shape = LaneDirection.SHAPE_UNKNOWN;
|
||||
shape = switch (laneWay)
|
||||
@LaneDirection.Shape
|
||||
final int shape = switch (laneWay)
|
||||
{
|
||||
case REVERSE -> LaneDirection.SHAPE_U_TURN_LEFT;
|
||||
case SHARP_LEFT -> LaneDirection.SHAPE_SHARP_LEFT;
|
||||
case LEFT -> LaneDirection.SHAPE_NORMAL_LEFT;
|
||||
case SLIGHT_LEFT, MERGE_TO_LEFT -> LaneDirection.SHAPE_SLIGHT_LEFT;
|
||||
case SLIGHT_RIGHT, MERGE_TO_RIGHT -> LaneDirection.SHAPE_SLIGHT_RIGHT;
|
||||
case THROUGH -> LaneDirection.SHAPE_STRAIGHT;
|
||||
case RIGHT -> LaneDirection.SHAPE_NORMAL_RIGHT;
|
||||
case SHARP_RIGHT -> LaneDirection.SHAPE_SHARP_RIGHT;
|
||||
default -> shape;
|
||||
case ReverseLeft -> LaneDirection.SHAPE_U_TURN_LEFT;
|
||||
case SharpLeft -> LaneDirection.SHAPE_SHARP_LEFT;
|
||||
case Left -> LaneDirection.SHAPE_NORMAL_LEFT;
|
||||
case MergeToLeft, SlightLeft -> LaneDirection.SHAPE_SLIGHT_LEFT;
|
||||
case Through -> LaneDirection.SHAPE_STRAIGHT;
|
||||
case SlightRight, MergeToRight -> LaneDirection.SHAPE_SLIGHT_RIGHT;
|
||||
case Right -> LaneDirection.SHAPE_NORMAL_RIGHT;
|
||||
case SharpRight -> LaneDirection.SHAPE_SHARP_RIGHT;
|
||||
case ReverseRight -> LaneDirection.SHAPE_U_TURN_RIGHT;
|
||||
default -> LaneDirection.SHAPE_UNKNOWN;
|
||||
};
|
||||
|
||||
return LaneDirection.create(shape, isRecommended);
|
||||
|
||||
@@ -8,14 +8,15 @@ import androidx.car.app.CarContext;
|
||||
import androidx.car.app.model.CarIcon;
|
||||
import androidx.car.app.navigation.model.Destination;
|
||||
import androidx.car.app.navigation.model.Lane;
|
||||
import androidx.car.app.navigation.model.LaneDirection;
|
||||
import androidx.car.app.navigation.model.Step;
|
||||
import androidx.car.app.navigation.model.TravelEstimate;
|
||||
import androidx.car.app.navigation.model.Trip;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
import app.organicmaps.sdk.bookmarks.data.MapObject;
|
||||
import app.organicmaps.sdk.routing.LaneInfo;
|
||||
import app.organicmaps.sdk.routing.LaneWay;
|
||||
import app.organicmaps.sdk.routing.RoutingInfo;
|
||||
import app.organicmaps.sdk.routing.SingleLaneInfo;
|
||||
import app.organicmaps.sdk.util.Distance;
|
||||
import app.organicmaps.util.Graphics;
|
||||
import app.organicmaps.widget.LanesDrawable;
|
||||
@@ -69,11 +70,12 @@ public final class RoutingUtils
|
||||
builder.setManeuver(RoutingHelpers.createManeuver(context, info.carDirection, info.exitNum));
|
||||
if (info.lanes != null)
|
||||
{
|
||||
for (final SingleLaneInfo laneInfo : info.lanes)
|
||||
for (final LaneInfo laneInfo : info.lanes)
|
||||
{
|
||||
final Lane.Builder laneBuilder = new Lane.Builder();
|
||||
for (final LaneWay laneWay : laneInfo.mLane)
|
||||
laneBuilder.addDirection(RoutingHelpers.createLaneDirection(laneWay, laneInfo.mIsActive));
|
||||
for (final LaneWay laneWay : laneInfo.mLaneWays)
|
||||
laneBuilder.addDirection(
|
||||
RoutingHelpers.createLaneDirection(laneWay, /* isRecommended */ laneWay == laneInfo.mActiveLaneWay));
|
||||
builder.addLane(laneBuilder.build());
|
||||
}
|
||||
final LanesDrawable lanesDrawable = new LanesDrawable(context, info.lanes);
|
||||
|
||||
@@ -8,12 +8,14 @@ import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.ColorRes;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.routing.SingleLaneInfo;
|
||||
import app.organicmaps.sdk.routing.LaneInfo;
|
||||
import app.organicmaps.sdk.routing.LaneWay;
|
||||
import java.util.Objects;
|
||||
|
||||
public class LanesDrawable extends Drawable
|
||||
@@ -41,16 +43,19 @@ public class LanesDrawable extends Drawable
|
||||
{
|
||||
private final Drawable mDrawable;
|
||||
|
||||
private LaneDrawable(@NonNull final Context context, @NonNull SingleLaneInfo laneInfo, int horizontalOffset,
|
||||
private LaneDrawable(@NonNull final Context context, @NonNull LaneInfo laneInfo, int horizontalOffset,
|
||||
TintColorInfo colorInfo)
|
||||
{
|
||||
mDrawable = Objects.requireNonNull(AppCompatResources.getDrawable(context, laneInfo.mLane[0].mTurnRes));
|
||||
final boolean isActive = laneInfo.mActiveLaneWay != LaneWay.None;
|
||||
@DrawableRes
|
||||
final int turnRes = isActive ? laneInfo.mActiveLaneWay.mTurnRes : laneInfo.mLaneWays[0].mTurnRes;
|
||||
mDrawable = Objects.requireNonNull(AppCompatResources.getDrawable(context, turnRes));
|
||||
|
||||
final int width = mDrawable.getIntrinsicWidth();
|
||||
final int height = mDrawable.getIntrinsicHeight();
|
||||
|
||||
mDrawable.setBounds(horizontalOffset, 0, horizontalOffset + width, height);
|
||||
mDrawable.setTint(laneInfo.mIsActive ? colorInfo.mActiveLaneTint : colorInfo.mInactiveLaneTint);
|
||||
mDrawable.setTint(isActive ? colorInfo.mActiveLaneTint : colorInfo.mInactiveLaneTint);
|
||||
}
|
||||
|
||||
private void draw(@NonNull final Canvas canvas)
|
||||
@@ -65,14 +70,14 @@ public class LanesDrawable extends Drawable
|
||||
private int mWidth;
|
||||
private int mHeight;
|
||||
|
||||
public LanesDrawable(@NonNull final Context context, @NonNull SingleLaneInfo[] lanes)
|
||||
public LanesDrawable(@NonNull final Context context, @NonNull LaneInfo[] lanes)
|
||||
{
|
||||
final TintColorInfo tintColorInfo = new TintColorInfo(ContextCompat.getColor(context, ACTIVE_LANE_TINT_RES),
|
||||
ContextCompat.getColor(context, INACTIVE_LANE_TINT_RES));
|
||||
mLanes = createLaneDrawables(context, lanes, tintColorInfo);
|
||||
}
|
||||
|
||||
public LanesDrawable(@NonNull final Context context, @NonNull SingleLaneInfo[] lanes, @ColorInt int activeLaneTint,
|
||||
public LanesDrawable(@NonNull final Context context, @NonNull LaneInfo[] lanes, @ColorInt int activeLaneTint,
|
||||
@ColorInt int inactiveLaneTint)
|
||||
{
|
||||
final TintColorInfo tintColorInfo = new TintColorInfo(activeLaneTint, inactiveLaneTint);
|
||||
@@ -143,7 +148,7 @@ public class LanesDrawable extends Drawable
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private LaneDrawable[] createLaneDrawables(@NonNull Context context, @NonNull SingleLaneInfo[] lanes,
|
||||
private LaneDrawable[] createLaneDrawables(@NonNull Context context, @NonNull LaneInfo[] lanes,
|
||||
@NonNull TintColorInfo tintColorInfo)
|
||||
{
|
||||
assert lanes.length > 0;
|
||||
|
||||
@@ -16,7 +16,8 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StyleableRes;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.sdk.routing.SingleLaneInfo;
|
||||
import app.organicmaps.sdk.routing.LaneInfo;
|
||||
import app.organicmaps.sdk.routing.LaneWay;
|
||||
|
||||
public class LanesView extends View
|
||||
{
|
||||
@@ -77,7 +78,7 @@ public class LanesView extends View
|
||||
mBackgroundPaint.setColor(backgroundColor);
|
||||
}
|
||||
|
||||
public void setLanes(@Nullable SingleLaneInfo[] lanes)
|
||||
public void setLanes(@Nullable LaneInfo[] lanes)
|
||||
{
|
||||
if (lanes == null || lanes.length == 0)
|
||||
mLanesDrawable = null;
|
||||
@@ -157,16 +158,16 @@ public class LanesView extends View
|
||||
|
||||
private void createLanesForEditMode(int lanesCount)
|
||||
{
|
||||
final SingleLaneInfo[] lanes = new SingleLaneInfo[lanesCount];
|
||||
lanes[0] = new SingleLaneInfo(new byte[] {1}, false);
|
||||
final LaneInfo[] lanes = new LaneInfo[lanesCount];
|
||||
lanes[0] = new LaneInfo(new LaneWay[] {LaneWay.ReverseLeft, LaneWay.Left}, LaneWay.None);
|
||||
if (lanes.length > 1)
|
||||
lanes[1] = new SingleLaneInfo(new byte[] {3}, false);
|
||||
lanes[1] = new LaneInfo(new LaneWay[] {LaneWay.SharpLeft, LaneWay.Left, LaneWay.Through}, LaneWay.None);
|
||||
for (int i = 2; i <= lanes.length - 1; i++)
|
||||
lanes[i] = new SingleLaneInfo(new byte[] {0}, true);
|
||||
lanes[i] = new LaneInfo(new LaneWay[] {LaneWay.Through, LaneWay.Left}, LaneWay.Through);
|
||||
if (lanes.length > 2)
|
||||
lanes[lanes.length - 2] = new SingleLaneInfo(new byte[] {8}, false);
|
||||
lanes[lanes.length - 2] = new LaneInfo(new LaneWay[] {LaneWay.SlightRight, LaneWay.Right}, LaneWay.SlightRight);
|
||||
if (lanes.length > 3)
|
||||
lanes[lanes.length - 1] = new SingleLaneInfo(new byte[] {9}, false);
|
||||
lanes[lanes.length - 1] = new LaneInfo(new LaneWay[] {LaneWay.ReverseRight}, LaneWay.None);
|
||||
|
||||
setLanes(lanes);
|
||||
}
|
||||
|
||||
@@ -26,13 +26,14 @@ set(SRC
|
||||
app/organicmaps/sdk/search/SearchEngine.cpp
|
||||
app/organicmaps/sdk/search/SearchRecents.cpp
|
||||
app/organicmaps/sdk/routing/JunctionInfo.hpp
|
||||
app/organicmaps/sdk/routing/LaneInfo.cpp
|
||||
app/organicmaps/sdk/routing/LaneInfo.hpp
|
||||
app/organicmaps/sdk/routing/RouteMarkData.hpp
|
||||
app/organicmaps/sdk/routing/RouteMarkType.hpp
|
||||
app/organicmaps/sdk/routing/RoutePointInfo.hpp
|
||||
app/organicmaps/sdk/routing/RouteRecommendationType.hpp
|
||||
app/organicmaps/sdk/routing/RoutingInfo.hpp
|
||||
app/organicmaps/sdk/routing/RoutingOptions.cpp
|
||||
app/organicmaps/sdk/routing/SingleLaneInfo.hpp
|
||||
app/organicmaps/sdk/routing/TransitRouteInfo.hpp
|
||||
app/organicmaps/sdk/routing/TransitStepInfo.hpp
|
||||
app/organicmaps/sdk/ChoosePositionMode.cpp
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
#include "LaneInfo.hpp"
|
||||
|
||||
#include "app/organicmaps/sdk/core/jni_helper.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace
|
||||
{
|
||||
jobject ToJavaLaneWay(JNIEnv * env, routing::turns::lanes::LaneWay const & laneWay)
|
||||
{
|
||||
static jclass const laneWayClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/routing/LaneWay");
|
||||
jfieldID fieldID =
|
||||
env->GetStaticFieldID(laneWayClass, DebugPrint(laneWay).c_str(), "Lapp/organicmaps/sdk/routing/LaneWay;");
|
||||
return env->GetStaticObjectField(laneWayClass, fieldID);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
jobjectArray CreateLanesInfo(JNIEnv * env, routing::turns::lanes::LanesInfo const & lanes)
|
||||
{
|
||||
if (lanes.empty())
|
||||
return nullptr;
|
||||
|
||||
static jclass const laneWayClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/routing/LaneWay");
|
||||
static jclass const laneInfoClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/routing/LaneInfo");
|
||||
auto const lanesSize = static_cast<jsize>(lanes.size());
|
||||
jobjectArray jLanes = env->NewObjectArray(lanesSize, laneInfoClass, nullptr);
|
||||
ASSERT(jLanes, (jni::DescribeException()));
|
||||
// Java signature : LaneInfo(LaneWay[] laneWays, LaneWay activeLane)
|
||||
static jmethodID const ctorLaneInfoID = jni::GetConstructorID(
|
||||
env, laneInfoClass, "([Lapp/organicmaps/sdk/routing/LaneWay;Lapp/organicmaps/sdk/routing/LaneWay;)V");
|
||||
|
||||
for (jsize j = 0; j < lanesSize; ++j)
|
||||
{
|
||||
auto const laneWays = lanes[j].laneWays.GetActiveLaneWays();
|
||||
auto const laneWaysSize = static_cast<jsize>(laneWays.size());
|
||||
jni::TScopedLocalObjectArrayRef jLaneWays(env, env->NewObjectArray(laneWaysSize, laneWayClass, nullptr));
|
||||
ASSERT(jLanes, (jni::DescribeException()));
|
||||
for (jsize i = 0; i < laneWaysSize; ++i)
|
||||
{
|
||||
jni::TScopedLocalRef jLaneWay(env, ToJavaLaneWay(env, laneWays[i]));
|
||||
env->SetObjectArrayElement(jLaneWays.get(), i, jLaneWay.get());
|
||||
}
|
||||
jni::TScopedLocalRef jLaneInfo(env, env->NewObject(laneInfoClass, ctorLaneInfoID, jLaneWays.get(),
|
||||
ToJavaLaneWay(env, lanes[j].recommendedWay)));
|
||||
ASSERT(jLaneInfo.get(), (jni::DescribeException()));
|
||||
env->SetObjectArrayElement(jLanes, j, jLaneInfo.get());
|
||||
}
|
||||
|
||||
return jLanes;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
#include "routing/lanes/lane_info.hpp"
|
||||
|
||||
jobjectArray CreateLanesInfo(JNIEnv * env, routing::turns::lanes::LanesInfo const & lanes);
|
||||
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "app/organicmaps/sdk/core/jni_helper.hpp"
|
||||
#include "app/organicmaps/sdk/routing/SingleLaneInfo.hpp"
|
||||
#include "app/organicmaps/sdk/routing/LaneInfo.hpp"
|
||||
#include "app/organicmaps/sdk/util/Distance.hpp"
|
||||
|
||||
#include "map/routing_manager.hpp"
|
||||
@@ -13,12 +13,13 @@ jobject CreateRoutingInfo(JNIEnv * env, routing::FollowingInfo const & info, Rou
|
||||
// String currentStreet, String nextStreet, String nextNextStreet,
|
||||
// double completionPercent, int vehicleTurnOrdinal, int
|
||||
// vehicleNextTurnOrdinal, int pedestrianTurnOrdinal, int exitNum,
|
||||
// int totalTime, SingleLaneInfo[] lanes)
|
||||
// int totalTime, LaneInfo[] lanes, double speedLimitMps, boolean speedLimitExceeded,
|
||||
// boolean shouldPlayWarningSignal)
|
||||
static jmethodID const ctorRouteInfoID =
|
||||
jni::GetConstructorID(env, klass,
|
||||
"(Lapp/organicmaps/sdk/util/Distance;Lapp/organicmaps/sdk/util/Distance;"
|
||||
"Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;DIIIII"
|
||||
"[Lapp/organicmaps/sdk/routing/SingleLaneInfo;DZZ)V");
|
||||
"[Lapp/organicmaps/sdk/routing/LaneInfo;DZZ)V");
|
||||
|
||||
jobjectArray jLanes = CreateLanesInfo(env, info.m_lanes);
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "app/organicmaps/sdk/core/jni_helper.hpp"
|
||||
|
||||
#include "routing/following_info.hpp"
|
||||
|
||||
#include <vector>
|
||||
|
||||
jobjectArray CreateLanesInfo(JNIEnv * env, std::vector<routing::FollowingInfo::SingleLaneInfoClient> const & lanes)
|
||||
{
|
||||
if (lanes.empty())
|
||||
return nullptr;
|
||||
|
||||
static jclass const laneClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/routing/SingleLaneInfo");
|
||||
auto const lanesSize = static_cast<jsize>(lanes.size());
|
||||
jobjectArray jLanes = env->NewObjectArray(lanesSize, laneClass, nullptr);
|
||||
ASSERT(jLanes, (jni::DescribeException()));
|
||||
static jmethodID const ctorSingleLaneInfoID = jni::GetConstructorID(env, laneClass, "([BZ)V");
|
||||
|
||||
for (jsize j = 0; j < lanesSize; ++j)
|
||||
{
|
||||
auto const laneSize = static_cast<jsize>(lanes[j].m_lane.size());
|
||||
jni::TScopedLocalByteArrayRef singleLane(env, env->NewByteArray(laneSize));
|
||||
ASSERT(singleLane.get(), (jni::DescribeException()));
|
||||
env->SetByteArrayRegion(singleLane.get(), 0, laneSize, lanes[j].m_lane.data());
|
||||
|
||||
jni::TScopedLocalRef singleLaneInfo(
|
||||
env, env->NewObject(laneClass, ctorSingleLaneInfoID, singleLane.get(), lanes[j].m_isRecommended));
|
||||
ASSERT(singleLaneInfo.get(), (jni::DescribeException()));
|
||||
env->SetObjectArrayElement(jLanes, j, singleLaneInfo.get());
|
||||
}
|
||||
|
||||
return jLanes;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package app.organicmaps.sdk.routing;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public final class LaneInfo
|
||||
{
|
||||
public final LaneWay[] mLaneWays;
|
||||
public final LaneWay mActiveLaneWay;
|
||||
|
||||
public LaneInfo(@NonNull LaneWay[] laneWays, LaneWay activeLane)
|
||||
{
|
||||
mLaneWays = laneWays;
|
||||
mActiveLaneWay = activeLane;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("LaneInfo{activeLaneWay=").append(mActiveLaneWay.toString()).append(", laneWays=[");
|
||||
for (LaneWay i : mLaneWays)
|
||||
sb.append(" ").append(i);
|
||||
sb.append("]}");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
@@ -3,25 +3,20 @@ package app.organicmaps.sdk.routing;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import app.organicmaps.sdk.R;
|
||||
|
||||
/**
|
||||
* IMPORTANT : Order of enum values MUST BE the same
|
||||
* with native LaneWay enum (see routing/turns.hpp for details).
|
||||
* Information for every lane is composed of some number values below.
|
||||
* For example, a lane may have THROUGH and RIGHT values.
|
||||
*/
|
||||
public enum LaneWay
|
||||
{
|
||||
NONE(R.drawable.ic_turn_straight),
|
||||
REVERSE(R.drawable.ic_turn_uleft),
|
||||
SHARP_LEFT(R.drawable.ic_turn_left_sharp),
|
||||
LEFT(R.drawable.ic_turn_left),
|
||||
SLIGHT_LEFT(R.drawable.ic_turn_left_slight),
|
||||
MERGE_TO_RIGHT(R.drawable.ic_turn_right_slight),
|
||||
THROUGH(R.drawable.ic_turn_straight),
|
||||
MERGE_TO_LEFT(R.drawable.ic_turn_left_slight),
|
||||
SLIGHT_RIGHT(R.drawable.ic_turn_right_slight),
|
||||
RIGHT(R.drawable.ic_turn_right),
|
||||
SHARP_RIGHT(R.drawable.ic_turn_right_sharp);
|
||||
None(R.drawable.ic_turn_straight),
|
||||
ReverseLeft(R.drawable.ic_turn_uleft),
|
||||
SharpLeft(R.drawable.ic_turn_left_sharp),
|
||||
Left(R.drawable.ic_turn_left),
|
||||
MergeToLeft(R.drawable.ic_turn_left_slight),
|
||||
SlightLeft(R.drawable.ic_turn_left_slight),
|
||||
Through(R.drawable.ic_turn_straight),
|
||||
SlightRight(R.drawable.ic_turn_right_slight),
|
||||
MergeToRight(R.drawable.ic_turn_right_slight),
|
||||
Right(R.drawable.ic_turn_right),
|
||||
SharpRight(R.drawable.ic_turn_right_sharp),
|
||||
ReverseRight(R.drawable.ic_turn_uright);
|
||||
|
||||
public final int mTurnRes;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package app.organicmaps.sdk.routing;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.Nullable;
|
||||
import app.organicmaps.sdk.util.Distance;
|
||||
|
||||
// Called from JNI.
|
||||
@@ -25,7 +26,8 @@ public final class RoutingInfo
|
||||
public final CarDirection carDirection;
|
||||
public final CarDirection nextCarDirection;
|
||||
public final int exitNum;
|
||||
public final SingleLaneInfo[] lanes;
|
||||
@Nullable
|
||||
public final LaneInfo[] lanes;
|
||||
// For pedestrian routing.
|
||||
public final PedestrianTurnDirection pedestrianTurnDirection;
|
||||
// Current speed limit in meters per second.
|
||||
@@ -37,7 +39,7 @@ public final class RoutingInfo
|
||||
private RoutingInfo(Distance distToTarget, Distance distToTurn, String currentStreet, String nextStreet,
|
||||
String nextNextStreet, double completionPercent, int vehicleTurnOrdinal,
|
||||
int vehicleNextTurnOrdinal, int pedestrianTurnOrdinal, int exitNum, int totalTime,
|
||||
SingleLaneInfo[] lanes, double speedLimitMps, boolean speedLimitExceeded,
|
||||
@Nullable LaneInfo[] lanes, double speedLimitMps, boolean speedLimitExceeded,
|
||||
boolean shouldPlayWarningSignal)
|
||||
{
|
||||
this.distToTarget = distToTarget;
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
package app.organicmaps.sdk.routing;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public final class SingleLaneInfo
|
||||
{
|
||||
public LaneWay[] mLane;
|
||||
public boolean mIsActive;
|
||||
|
||||
public SingleLaneInfo(@NonNull byte[] laneOrdinals, boolean isActive)
|
||||
{
|
||||
mLane = new LaneWay[laneOrdinals.length];
|
||||
final LaneWay[] values = LaneWay.values();
|
||||
for (int i = 0; i < mLane.length; i++)
|
||||
mLane[i] = values[laneOrdinals[i]];
|
||||
|
||||
mIsActive = isActive;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
final int initialCapacity = 32;
|
||||
StringBuilder sb = new StringBuilder(initialCapacity);
|
||||
sb.append("Is the lane active? ").append(mIsActive).append(". The lane directions IDs are");
|
||||
for (LaneWay i : mLane)
|
||||
sb.append(" ").append(i.ordinal());
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user