diff --git a/android/app/src/main/java/app/organicmaps/MwmActivity.java b/android/app/src/main/java/app/organicmaps/MwmActivity.java index 57a243c61..85b11eb36 100644 --- a/android/app/src/main/java/app/organicmaps/MwmActivity.java +++ b/android/app/src/main/java/app/organicmaps/MwmActivity.java @@ -9,7 +9,8 @@ import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_HELP_CODE; import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_RECORD_TRACK_CODE; import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_SETTINGS_CODE; import static app.organicmaps.sdk.location.LocationState.FOLLOW; -import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE; +import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE_COMPASS; +import static app.organicmaps.sdk.location.LocationState.FOLLOW_AND_ROTATE_ROUTE; import static app.organicmaps.sdk.location.LocationState.LOCATION_TAG; import static app.organicmaps.sdk.util.PowerManagment.POWER_MANAGEMENT_TAG; import static app.organicmaps.sdk.util.Utils.dimen; @@ -1900,7 +1901,8 @@ public class MwmActivity extends BaseMwmFragmentActivity locationHelper.restartWithNewMode(); - if ((newMode == FOLLOW || newMode == FOLLOW_AND_ROTATE) && !LocationUtils.checkFineLocationPermission(this)) + if ((newMode == FOLLOW || newMode == FOLLOW_AND_ROTATE_ROUTE || newMode == FOLLOW_AND_ROTATE_COMPASS) + && !LocationUtils.checkFineLocationPermission(this)) { // Try to optimistically request FINE permission for FOLLOW and FOLLOW_AND_ROTATE modes. Logger.i(LOCATION_TAG, "Requesting ACCESS_FINE_LOCATION permission for " + LocationState.nameOf(newMode)); diff --git a/android/app/src/main/java/app/organicmaps/car/util/UiHelpers.java b/android/app/src/main/java/app/organicmaps/car/util/UiHelpers.java index 2f6943eb3..fd3f9f243 100644 --- a/android/app/src/main/java/app/organicmaps/car/util/UiHelpers.java +++ b/android/app/src/main/java/app/organicmaps/car/util/UiHelpers.java @@ -183,11 +183,16 @@ public final class UiHelpers drawableRes = R.drawable.ic_follow; tintColor = Colors.LOCATION_TINT; } - case LocationState.FOLLOW_AND_ROTATE -> + case LocationState.FOLLOW_AND_ROTATE_COMPASS -> { drawableRes = R.drawable.ic_follow_and_rotate; tintColor = Colors.LOCATION_TINT; } + case LocationState.FOLLOW_AND_ROTATE_ROUTE -> + { + drawableRes = R.drawable.ic_follow_route; + tintColor = Colors.LOCATION_TINT; + } default -> throw new IllegalArgumentException("Invalid button mode: " + locationMode); } diff --git a/android/app/src/main/java/app/organicmaps/widget/menu/MyPositionButton.java b/android/app/src/main/java/app/organicmaps/widget/menu/MyPositionButton.java index 1c0ea41f6..f4151e401 100644 --- a/android/app/src/main/java/app/organicmaps/widget/menu/MyPositionButton.java +++ b/android/app/src/main/java/app/organicmaps/widget/menu/MyPositionButton.java @@ -49,8 +49,8 @@ public class MyPositionButton int colorAttr = R.attr.iconTint; @DimenRes int sizeDimen = R.dimen.map_button_icon_size; - if (mode == LocationState.FOLLOW || mode == LocationState.FOLLOW_AND_ROTATE - || mode == LocationState.PENDING_POSITION) + if (mode == LocationState.FOLLOW || mode == LocationState.FOLLOW_AND_ROTATE_ROUTE + || mode == LocationState.FOLLOW_AND_ROTATE_COMPASS || mode == LocationState.PENDING_POSITION) { colorAttr = com.google.android.material.R.attr.colorSecondary; if (mode == LocationState.PENDING_POSITION) @@ -69,7 +69,8 @@ public class MyPositionButton case LocationState.NOT_FOLLOW_NO_POSITION -> R.drawable.ic_location_off; case LocationState.NOT_FOLLOW -> R.drawable.ic_location_crosshair; case LocationState.FOLLOW -> R.drawable.ic_follow; - case LocationState.FOLLOW_AND_ROTATE -> R.drawable.ic_follow_and_rotate; + case LocationState.FOLLOW_AND_ROTATE_COMPASS -> R.drawable.ic_follow_and_rotate; + case LocationState.FOLLOW_AND_ROTATE_ROUTE -> R.drawable.ic_follow_route; default -> throw new IllegalArgumentException("Invalid button mode: " + mode); }; image = ResourcesCompat.getDrawable(resources, drawableRes, context.getTheme()); diff --git a/android/app/src/main/res/drawable/ic_follow_route.xml b/android/app/src/main/res/drawable/ic_follow_route.xml new file mode 100644 index 000000000..e8d8ebb09 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_follow_route.xml @@ -0,0 +1,30 @@ + + + + + + + \ No newline at end of file diff --git a/android/sdk/src/main/java/app/organicmaps/sdk/location/LocationState.java b/android/sdk/src/main/java/app/organicmaps/sdk/location/LocationState.java index 2478a15cd..68134b0be 100644 --- a/android/sdk/src/main/java/app/organicmaps/sdk/location/LocationState.java +++ b/android/sdk/src/main/java/app/organicmaps/sdk/location/LocationState.java @@ -20,7 +20,8 @@ public final class LocationState } @Retention(RetentionPolicy.SOURCE) - @IntDef({PENDING_POSITION, NOT_FOLLOW_NO_POSITION, NOT_FOLLOW, FOLLOW, FOLLOW_AND_ROTATE}) + @IntDef({PENDING_POSITION, NOT_FOLLOW_NO_POSITION, NOT_FOLLOW, FOLLOW, FOLLOW_AND_ROTATE_COMPASS, + FOLLOW_AND_ROTATE_ROUTE}) @interface Value {} @@ -29,7 +30,8 @@ public final class LocationState public static final int NOT_FOLLOW_NO_POSITION = 1; public static final int NOT_FOLLOW = 2; public static final int FOLLOW = 3; - public static final int FOLLOW_AND_ROTATE = 4; + public static final int FOLLOW_AND_ROTATE_COMPASS = 4; + public static final int FOLLOW_AND_ROTATE_ROUTE = 5; // These constants should correspond to values defined in platform/location.hpp // Leave 0-value as no any error. @@ -69,7 +71,8 @@ public final class LocationState case NOT_FOLLOW_NO_POSITION -> "NOT_FOLLOW_NO_POSITION"; case NOT_FOLLOW -> "NOT_FOLLOW"; case FOLLOW -> "FOLLOW"; - case FOLLOW_AND_ROTATE -> "FOLLOW_AND_ROTATE"; + case FOLLOW_AND_ROTATE_COMPASS -> "FOLLOW_AND_ROTATE_COMPASS"; + case FOLLOW_AND_ROTATE_ROUTE -> "FOLLOW_AND_ROTATE_ROUTE"; default -> "Unknown: " + mode; }; }