diff --git a/android/app/src/main/java/app/organicmaps/ChartController.java b/android/app/src/main/java/app/organicmaps/ChartController.java index c6fad3ad8..aa0af954b 100644 --- a/android/app/src/main/java/app/organicmaps/ChartController.java +++ b/android/app/src/main/java/app/organicmaps/ChartController.java @@ -37,7 +37,7 @@ public class ChartController implements OnChartValueSelectedListener { private static final int CHART_Y_LABEL_COUNT = 3; private static final int CHART_X_LABEL_COUNT = 6; - private static final int CHART_ANIMATION_DURATION = 1500; + private static final int CHART_ANIMATION_DURATION = 0; private static final int CHART_FILL_ALPHA = (int) (0.12 * 255); private static final int CHART_AXIS_GRANULARITY = 100; private static final float CUBIC_INTENSITY = 0.2f; diff --git a/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/BookmarkManager.java b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/BookmarkManager.java index 128a90ef2..271ce2f46 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/BookmarkManager.java +++ b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/BookmarkManager.java @@ -264,9 +264,9 @@ public enum BookmarkManager { } @Nullable - public void updateTrackPlacePage(long trackId) + public void updateTrackPlacePage() { - nativeUpdateTrackPlacePage(trackId); + nativeUpdateTrackPlacePage(); } @Nullable @@ -751,7 +751,7 @@ public enum BookmarkManager { private native Bookmark nativeUpdateBookmarkPlacePage(long bmkId); @Nullable - private native void nativeUpdateTrackPlacePage(long trackId); + private native void nativeUpdateTrackPlacePage(); @Nullable private native BookmarkInfo nativeGetBookmarkInfo(long bmkId); @@ -919,8 +919,6 @@ public enum BookmarkManager { public static native ElevationInfo nativeGetTrackElevationInfo(long trackId); - public static native boolean nativeIsElevationInfoHasValue(long trackId); - public static native TrackStatistics nativeGetTrackStatistics(long trackId); public interface BookmarksLoadingListener { diff --git a/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/FeatureId.java b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/FeatureId.java index bdb653908..98d71802c 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/FeatureId.java +++ b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/FeatureId.java @@ -27,7 +27,7 @@ public class FeatureId implements Parcelable }; @NonNull - public static final FeatureId EMPTY = new FeatureId("", 0L, 0); + public static final FeatureId EMPTY = new FeatureId("", -1L, 0); @NonNull private final String mMwmName; diff --git a/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/Track.java b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/Track.java index db73f6440..23662ba28 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/Track.java +++ b/android/app/src/main/java/app/organicmaps/sdk/bookmarks/data/Track.java @@ -25,8 +25,8 @@ public class Track extends MapObject Track(long trackId, long categoryId, String name, Distance length, int color) { - super(FeatureId.fromFeatureIdString("1:2:3"), TRACK, name, "", "", "", 0, 0, "", null, OPENING_MODE_PREVIEW_PLUS, - null, "", RoadWarningMarkType.UNKNOWN.ordinal(), null); + super(FeatureId.EMPTY, TRACK, name, "", "", "", 0, 0, "", null, OPENING_MODE_PREVIEW_PLUS, null, "", + RoadWarningMarkType.UNKNOWN.ordinal(), null); mTrackId = trackId; mCategoryId = categoryId; mName = name; @@ -49,8 +49,7 @@ public class Track extends MapObject mLength = length; } - // modifying this categoryId will not change the core data - // its just for temporary changes + // Change of the category in the core is done in PlacePageView::onCategoryChanged(). public void setCategoryId(@NonNull long categoryId) { mCategoryId = categoryId; @@ -94,22 +93,15 @@ public class Track extends MapObject public ElevationInfo getElevationInfo() { - if (mElevationInfo != null) - return mElevationInfo; - mElevationInfo = BookmarkManager.nativeGetTrackElevationInfo(mTrackId); + if (mElevationInfo == null) + mElevationInfo = BookmarkManager.nativeGetTrackElevationInfo(mTrackId); return mElevationInfo; } - public boolean isElevationInfoHasValue() - { - return BookmarkManager.nativeIsElevationInfoHasValue(mTrackId); - } - public TrackStatistics getTrackStatistics() { - if (mTrackStatistics != null) - return mTrackStatistics; - mTrackStatistics = BookmarkManager.nativeGetTrackStatistics(mTrackId); + if (mTrackStatistics == null) + mTrackStatistics = BookmarkManager.nativeGetTrackStatistics(mTrackId); return mTrackStatistics; } } diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/ElevationProfileViewRenderer.java b/android/app/src/main/java/app/organicmaps/widget/placepage/ElevationProfileViewRenderer.java index bce8db144..9e365e4f1 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/ElevationProfileViewRenderer.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/ElevationProfileViewRenderer.java @@ -58,12 +58,6 @@ public class ElevationProfileViewRenderer implements PlacePageStateListener private View mTimeContainer; private View mTitleContainer; - @NonNull - private static String formatDistance(final Context context, int distance) - { - return Framework.nativeFormatAltitude(distance); - } - public void render(@NonNull Track track) { final Context context = mAscent.getContext(); @@ -82,6 +76,12 @@ public class ElevationProfileViewRenderer implements PlacePageStateListener mTime.setText(Utils.formatRoutingTime(mAscent.getContext(), (int) stats.getDuration(), R.dimen.text_size_body_2)); } + @NonNull + private static String formatDistance(final Context context, int distance) + { + return Framework.nativeFormatAltitude(distance); + } + public void initialize(@Nullable View view) { Objects.requireNonNull(view); diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageController.java b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageController.java index db21996f2..75cdc17c2 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageController.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageController.java @@ -124,6 +124,7 @@ public class PlacePageController bg.setCornerSize(mPlacePageCornerRadius); } }; + private final BottomSheetBehavior.BottomSheetCallback mDefaultBottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() { @Override @@ -148,18 +149,6 @@ public class PlacePageController } }; - @NonNull - private static PlacePageButtons.ButtonType toPlacePageButton(@NonNull RoadWarningMarkType type) - { - return switch (type) - { - case DIRTY -> PlacePageButtons.ButtonType.ROUTE_AVOID_UNPAVED; - case FERRY -> PlacePageButtons.ButtonType.ROUTE_AVOID_FERRY; - case TOLL -> PlacePageButtons.ButtonType.ROUTE_AVOID_TOLL; - default -> throw new AssertionError("Unsupported road warning type: " + type); - }; - } - @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @@ -217,6 +206,18 @@ public class PlacePageController ViewCompat.requestApplyInsets(mPlacePage); } + @NonNull + private static PlacePageButtons.ButtonType toPlacePageButton(@NonNull RoadWarningMarkType type) + { + return switch (type) + { + case DIRTY -> PlacePageButtons.ButtonType.ROUTE_AVOID_UNPAVED; + case FERRY -> PlacePageButtons.ButtonType.ROUTE_AVOID_FERRY; + case TOLL -> PlacePageButtons.ButtonType.ROUTE_AVOID_TOLL; + default -> throw new AssertionError("Unsupported road warning type: " + type); + }; + } + private void stopCustomPeekHeightAnimation() { if (mCustomPeekHeightAnimator != null && mCustomPeekHeightAnimator.isStarted()) @@ -456,19 +457,18 @@ public class PlacePageController { if (mMapObject == null) return; + dismissAlertDialog(); + mViewModel.isAlertDialogShowing = true; if (mAlertDialog != null) { - mAlertDialog.dismiss(); mAlertDialog.show(); - mViewModel.isAlertDialogShowing = true; return; } - mViewModel.isAlertDialogShowing = true; mAlertDialog = new MaterialAlertDialogBuilder(requireContext(), R.style.MwmTheme_AlertDialog) - .setTitle("Would you like to delete " + mMapObject.getTitle() + "?") + .setTitle(requireContext().getString(R.string.delete_track_dialog_title, mMapObject.getTitle())) .setCancelable(true) .setNegativeButton(R.string.cancel, null) - .setPositiveButton("delete", + .setPositiveButton(R.string.delete, (dialog, which) -> { BookmarkManager.INSTANCE.deleteTrack(((Track) mMapObject).getTrackId()); close(); @@ -660,6 +660,7 @@ public class PlacePageController // Place page will automatically open when the bottom sheet content is loaded so we can compute the peek height createPlacePageFragments(); updateButtons(mapObject, showBackButton, !mMapObject.isMyPosition()); + mAlertDialog = null; if (mViewModel.isAlertDialogShowing) showTrackDeleteAlertDialog(); } diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageView.java b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageView.java index edc150685..979705914 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageView.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageView.java @@ -369,9 +369,12 @@ public class PlacePageView extends Fragment else refreshDistanceToObject(loc); UiUtils.hideIf(mMapObject.isTrack(), mFrame.findViewById(R.id.ll__place_latlon), - mFrame.findViewById(R.id.ll__place_open_in), mFrame.findViewById(R.id.ll__place_add), mEditTopSpace, - mTvAzimuth, mTvDistance, mAvDirection); - UiUtils.hideIf(MapObjectType.getMapObjectType(mMapObject) != MapObjectType.OTHER, mTvSubtitle); + mFrame.findViewById(R.id.ll__place_open_in)); + if (mMapObject.isTrack() || mMapObject.isBookmark()) + { + UiUtils.hide(mTvSubtitle); + UiUtils.hide(mTvAzimuth, mAvDirection, mTvDistance); + } } private void updateViewFragment(Class controllerClass, String fragmentTag, @@ -466,9 +469,7 @@ public class PlacePageView extends Fragment void refreshCategoryPreview() { View categoryContainer = mFrame.findViewById(R.id.category_container); - switch (MapObjectType.getMapObjectType(mMapObject)) - { - case TRACK -> + if (mMapObject.isTrack()) { Track track = (Track) mMapObject; Drawable circle = @@ -477,7 +478,7 @@ public class PlacePageView extends Fragment mTvCategory.setText(BookmarkManager.INSTANCE.getCategoryById(track.getCategoryId()).getName()); UiUtils.show(mColorIcon, mTvCategory, categoryContainer); } - case BOOKMARK -> + else if (mMapObject.isBookmark()) { Bookmark bookmark = (Bookmark) mMapObject; Icon icon = bookmark.getIcon(); @@ -491,8 +492,7 @@ public class PlacePageView extends Fragment UiUtils.show(mColorIcon, mTvCategory, categoryContainer); } } - case OTHER -> UiUtils.hide(mColorIcon, mTvCategory, categoryContainer); - } + mColorIcon.setOnClickListener(this::onClick); mTvCategory.setOnClickListener(this::onClick); mEditBookmark.setOnClickListener(this::onClick); @@ -508,25 +508,23 @@ public class PlacePageView extends Fragment (BookmarkColorDialogFragment) factory.instantiate(getContext().getClassLoader(), className); dialogFragment.setArguments(args); - switch (MapObjectType.getMapObjectType(mMapObject)) + if (mMapObject.isTrack()) { - case TRACK -> - { - final Track mTrack = (Track) mMapObject; - args.putInt(BookmarkColorDialogFragment.ICON_COLOR, PredefinedColors.getPredefinedColorIndex(mTrack.getColor())); + final Track track = (Track) mMapObject; + args.putInt(BookmarkColorDialogFragment.ICON_COLOR, PredefinedColors.getPredefinedColorIndex(track.getColor())); dialogFragment.setOnColorSetListener((colorPos) -> { - int from = mTrack.getColor(); + int from = track.getColor(); int to = PredefinedColors.getColor(colorPos); if (from == to) return; - mViewModel.modifyMapObjectColorSilently(to); + track.setColor(to); Drawable circle = Graphics.drawCircle(to, R.dimen.place_page_icon_size, requireContext().getResources()); mColorIcon.setImageDrawable(circle); }); - dialogFragment.show(requireActivity().getSupportFragmentManager(), null); } - case BOOKMARK -> + else if (mMapObject.isBookmark()) { + dialogFragment.show(requireActivity().getSupportFragmentManager(), null); final Bookmark bookmark = (Bookmark) mMapObject; args.putInt(BookmarkColorDialogFragment.ICON_COLOR, bookmark.getIcon().getColor()); args.putInt(BookmarkColorDialogFragment.ICON_RES, bookmark.getIcon().getResId()); @@ -535,7 +533,7 @@ public class PlacePageView extends Fragment int to = PredefinedColors.getColor(colorPos); if (from == to) return; - mViewModel.modifyMapObjectColorSilently(to); + bookmark.setIconColor(to); Drawable circle = Graphics.drawCircleAndImage(to, R.dimen.place_page_icon_size, app.organicmaps.sdk.R.drawable.ic_bookmark_none, R.dimen.place_page_icon_mark_size, requireContext()); @@ -543,7 +541,6 @@ public class PlacePageView extends Fragment }); dialogFragment.show(requireActivity().getSupportFragmentManager(), null); } - } } private void showCategoryList() @@ -555,9 +552,7 @@ public class PlacePageView extends Fragment final FragmentFactory factory = manager.getFragmentFactory(); final ChooseBookmarkCategoryFragment frag = (ChooseBookmarkCategoryFragment) factory.instantiate(getContext().getClassLoader(), className); - switch (MapObjectType.getMapObjectType(mMapObject)) - { - case TRACK -> + if (mMapObject.isTrack()) { Track track = (Track) mMapObject; BookmarkCategory currentCategory = BookmarkManager.INSTANCE.getCategoryById(track.getCategoryId()); @@ -566,7 +561,7 @@ public class PlacePageView extends Fragment frag.setArguments(args); frag.show(manager, null); } - case BOOKMARK -> + else if (mMapObject.isBookmark()) { Bookmark bookmark = (Bookmark) mMapObject; BookmarkCategory currentCategory = BookmarkManager.INSTANCE.getCategoryById(bookmark.getCategoryId()); @@ -575,15 +570,12 @@ public class PlacePageView extends Fragment frag.setArguments(args); frag.show(manager, null); } - } } @Override public void onCategoryChanged(@NonNull BookmarkCategory newCategory) { - switch (MapObjectType.getMapObjectType(mMapObject)) - { - case TRACK -> + if (mMapObject.isTrack()) { Track track = (Track) mMapObject; BookmarkCategory previousCategory = BookmarkManager.INSTANCE.getCategoryById(track.getCategoryId()); @@ -591,49 +583,44 @@ public class PlacePageView extends Fragment return; BookmarkManager.INSTANCE.notifyCategoryChanging(track, newCategory.getId()); mTvCategory.setText(newCategory.getName()); - mViewModel.modifyMapObjectCategoryIdSilently(newCategory.getId()); + track.setCategoryId(newCategory.getId()); } - case BOOKMARK -> + else if (mMapObject.isBookmark()) { Bookmark bookmark = (Bookmark) mMapObject; BookmarkCategory previousCategory = BookmarkManager.INSTANCE.getCategoryById(bookmark.getCategoryId()); if (previousCategory == newCategory) return; mTvCategory.setText(newCategory.getName()); - mViewModel.modifyMapObjectCategoryIdSilently(newCategory.getId()); - } + bookmark.setCategoryId(newCategory.getId()); } } void showBookmarkEditFragment() { - switch (MapObjectType.getMapObjectType(mMapObject)) - { - case TRACK -> + if (mMapObject.isTrack()) { Track track = (Track) mMapObject; final FragmentActivity activity = requireActivity(); EditBookmarkFragment.editTrack(track.getCategoryId(), track.getTrackId(), activity, getChildFragmentManager(), PlacePageView.this); } - case BOOKMARK -> + else if (mMapObject.isBookmark()) { Bookmark bookmark = (Bookmark) mMapObject; final FragmentActivity activity = requireActivity(); EditBookmarkFragment.editBookmark(bookmark.getCategoryId(), bookmark.getBookmarkId(), activity, getChildFragmentManager(), PlacePageView.this); } - } } @Override public void onBookmarkSaved(long bookmarkId, boolean movedFromCategory) { - switch (MapObjectType.getMapObjectType(mMapObject)) - { - case TRACK -> BookmarkManager.INSTANCE.updateTrackPlacePage(bookmarkId); - case BOOKMARK -> BookmarkManager.INSTANCE.updateBookmarkPlacePage(bookmarkId); - } + if (mMapObject.isTrack()) + BookmarkManager.INSTANCE.updateTrackPlacePage(); + else if (mMapObject.isBookmark()) + BookmarkManager.INSTANCE.updateBookmarkPlacePage(bookmarkId); } private void refreshDetails() @@ -1071,7 +1058,7 @@ public class PlacePageView extends Fragment { if (mMapObject.isTrack()) { - MenuBottomSheetFragment.newInstance(TRACK_SHARE_MENU_ID, getString(R.string.PP_track_bottom_sheet_title)) + MenuBottomSheetFragment.newInstance(TRACK_SHARE_MENU_ID, getString(R.string.share_track)) .show(getChildFragmentManager(), TRACK_SHARE_MENU_ID); } else @@ -1119,21 +1106,4 @@ public class PlacePageView extends Fragment void onPlacePageRequestToggleState(); void onPlacePageRequestClose(); } - - public enum MapObjectType - { - TRACK, - BOOKMARK, - OTHER; - - public static MapObjectType getMapObjectType(MapObject mapObject) - { - if (mapObject.isTrack()) - return TRACK; - else if (mapObject.isBookmark()) - return BOOKMARK; - else - return OTHER; - } - } } diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageViewModel.java b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageViewModel.java index a8f4b852d..a5e7cded0 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageViewModel.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/PlacePageViewModel.java @@ -37,38 +37,6 @@ public class PlacePageViewModel extends ViewModel mMapObject.setValue(mapObject); } - // These silent method are used to update data of map object silently without triggering - // the observer which refreshes everything and puts extra load on device in calculation - // which is not required - public void modifyMapObjectPointSilently(ElevationInfo.Point point) - { - if (mMapObject.getValue() == null) - return; - mMapObject.getValue().setLat(point.getLatitude()); - mMapObject.getValue().setLon(point.getLongitude()); - } - - public void modifyMapObjectCategoryIdSilently(long categoryId) - { - if (mMapObject.getValue() == null) - return; - switch (PlacePageView.MapObjectType.getMapObjectType(mMapObject.getValue())) - { - case TRACK -> ((Track) mMapObject.getValue()).setCategoryId(categoryId); - case BOOKMARK -> ((Bookmark) mMapObject.getValue()).setCategoryId(categoryId); - } - } - - public void modifyMapObjectColorSilently(int color) - { - if (mMapObject.getValue() == null) - return; - switch (PlacePageView.MapObjectType.getMapObjectType(mMapObject.getValue())) - { - case TRACK -> ((Track) mMapObject.getValue()).setColor(color); - case BOOKMARK -> ((Bookmark) mMapObject.getValue()).setIconColor(color); - } - } public MutableLiveData getPlacePageWidth() { return mPlacePageWidth; diff --git a/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageTrackFragment.java b/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageTrackFragment.java index 708110553..13b88cc59 100644 --- a/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageTrackFragment.java +++ b/android/app/src/main/java/app/organicmaps/widget/placepage/sections/PlacePageTrackFragment.java @@ -63,14 +63,14 @@ public class PlacePageTrackFragment extends Fragment public void onStop() { super.onStop(); + BookmarkManager.INSTANCE.setElevationActivePointChangedListener(null); + BookmarkManager.INSTANCE.setElevationCurrentPositionChangedListener(null); mViewModel.getMapObject().removeObserver(this); } @Override public void onDestroy() { - BookmarkManager.INSTANCE.setElevationActivePointChangedListener(null); - BookmarkManager.INSTANCE.setElevationCurrentPositionChangedListener(null); super.onDestroy(); } @@ -80,21 +80,21 @@ public class PlacePageTrackFragment extends Fragment // MapObject could be something else than a Track if the user already has the place page // opened and clicks on a non-Track POI. // This callback would be called before the fragment had time to be destroyed - if (mapObject != null && mapObject.isTrack()) + if (mapObject == null || !mapObject.isTrack()) + return; + + Track track = (Track) mapObject; + if (track.getElevationInfo() != null) { - Track track = (Track) mapObject; - if (track.isElevationInfoHasValue()) + if (mTrack == null || mTrack.getTrackId() != track.getTrackId()) { - if (mTrack == null || mTrack.getTrackId() != track.getTrackId()) - { - mElevationProfileViewRenderer.render(track); - UiUtils.show(mElevationProfileView); - } + mElevationProfileViewRenderer.render(track); + UiUtils.show(mElevationProfileView); } - else - UiUtils.hide(mElevationProfileView); - mTrack = track; } + else + UiUtils.hide(mElevationProfileView); + mTrack = track; } @Override @@ -104,7 +104,8 @@ public class PlacePageTrackFragment extends Fragment return; mElevationProfileViewRenderer.onChartElevationActivePointChanged(); ElevationInfo.Point point = BookmarkManager.INSTANCE.getElevationActivePointCoordinates(mTrack.getTrackId()); - mViewModel.modifyMapObjectPointSilently(point); + mTrack.setLat(point.getLatitude()); + mTrack.setLon(point.getLongitude()); } @Override diff --git a/android/app/src/main/res/drawable/ic_distance_travelled.xml b/android/app/src/main/res/drawable/ic_distance_travelled.xml index 286e357bf..ecc42eba4 100644 --- a/android/app/src/main/res/drawable/ic_distance_travelled.xml +++ b/android/app/src/main/res/drawable/ic_distance_travelled.xml @@ -1,10 +1,10 @@ + android:viewportWidth="960" + android:viewportHeight="960"> + android:pathData="M280,680 L80,480l200,-200 56,56 -103,104h494L624,336l56,-56 200,200 -200,200 -56,-56 103,-104L233,520l103,104 -56,56Z" + android:fillColor="#e3e3e3" /> diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index e8e4a24d8..5dd2dc77d 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -971,5 +971,7 @@ Closed now at %s - Save Track As + + Share Track + Delete %s? diff --git a/android/sdk/src/main/cpp/app/organicmaps/sdk/UserMarkHelper.cpp b/android/sdk/src/main/cpp/app/organicmaps/sdk/UserMarkHelper.cpp index 7ac0daa98..04fb2b071 100644 --- a/android/sdk/src/main/cpp/app/organicmaps/sdk/UserMarkHelper.cpp +++ b/android/sdk/src/main/cpp/app/organicmaps/sdk/UserMarkHelper.cpp @@ -102,11 +102,7 @@ jobject CreateTrack(JNIEnv * env, place_page::Info const & info, jni::TScopedLoc auto const trackId = info.GetTrackId(); auto const track = frm()->GetBookmarkManager().GetTrack(trackId); - dp::Color nColor = track->GetColor(0); - - jint androidColor = - shift(nColor.GetAlpha(), 24) + shift(nColor.GetRed(), 16) + shift(nColor.GetGreen(), 8) + nColor.GetBlue(); - + jint androidColor = track->GetColor(0).GetARGB(); auto const categoryId = track->GetGroupId(); ms::LatLon const ll = info.GetLatLon(); jni::TScopedLocalRef jMwmName(env, jni::ToJavaString(env, info.GetID().GetMwmName())); diff --git a/android/sdk/src/main/cpp/app/organicmaps/sdk/bookmarks/data/BookmarkManager.cpp b/android/sdk/src/main/cpp/app/organicmaps/sdk/bookmarks/data/BookmarkManager.cpp index 4cb18a061..43334c6b3 100644 --- a/android/sdk/src/main/cpp/app/organicmaps/sdk/bookmarks/data/BookmarkManager.cpp +++ b/android/sdk/src/main/cpp/app/organicmaps/sdk/bookmarks/data/BookmarkManager.cpp @@ -448,8 +448,7 @@ JNIEXPORT jobject JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManage } JNIEXPORT void JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeUpdateTrackPlacePage(JNIEnv * env, - jobject, - jlong trackId) + jobject) { if (!frm()->HasPlacePageInfo()) return; @@ -837,8 +836,7 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_n JNIEnv *, jclass, jlong trackId, jdouble distanceInMeters, jdouble latitude, jdouble longitude) { auto & bm = frm()->GetBookmarkManager(); - bm.SetElevationActivePoint(static_cast(trackId), - m2::PointD(static_cast(latitude), static_cast(longitude)), + bm.SetElevationActivePoint(static_cast(trackId), {latitude, longitude}, static_cast(distanceInMeters)); } @@ -872,22 +870,17 @@ JNIEXPORT jobject JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManage { auto const & track = frm()->GetBookmarkManager().GetTrack(track_id); auto const & elevationInfo = track->GetElevationInfo(); - return usermark_helper::CreateElevationInfo(env, elevationInfo.value()); -} -JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeIsElevationInfoHasValue( - JNIEnv * env, jclass clazz, jlong track_id) -{ - return static_cast(frm()->GetBookmarkManager().GetTrack(track_id)->GetElevationInfo().has_value()); + return track->GetElevationInfo().has_value() ? usermark_helper::CreateElevationInfo(env, elevationInfo.value()) + : nullptr; } + JNIEXPORT jobject JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeGetTrackStatistics( JNIEnv * env, jclass clazz, jlong track_id) { static jmethodID const cId = jni::GetConstructorID(env, g_trackStatisticsClazz, "(DDDDII)V"); auto const trackStats = frm()->GetBookmarkManager().GetTrack(track_id)->GetStatistics(); - return env->NewObject(g_trackStatisticsClazz, cId, static_cast(trackStats.m_length), - static_cast(trackStats.m_duration), static_cast(trackStats.m_ascent), - static_cast(trackStats.m_descent), static_cast(trackStats.m_minElevation), - static_cast(trackStats.m_maxElevation)); + return env->NewObject(g_trackStatisticsClazz, cId, trackStats.m_length, trackStats.m_duration, trackStats.m_ascent, + trackStats.m_descent, trackStats.m_minElevation, static_cast(trackStats.m_maxElevation)); } JNIEXPORT jobject JNICALL @@ -900,7 +893,6 @@ Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeGetElevationActive static jmethodID const pointCtorId = jni::GetConstructorID(env, pointClass, "(DIDD)V"); auto const & trackInfo = frm()->GetBookmarkManager().GetTrackSelectionInfo(track_id); auto const latlon = mercator::ToLatLon(trackInfo.m_trackPoint); - return env->NewObject(pointClass, pointCtorId, 0.0, 0, static_cast(latlon.m_lat), - static_cast(latlon.m_lon)); + return env->NewObject(pointClass, pointCtorId, 0.0, 0, latlon.m_lat, latlon.m_lon); } } // extern "C" diff --git a/libs/map/place_page_info.cpp b/libs/map/place_page_info.cpp index a315ea9ae..2b6d417bc 100644 --- a/libs/map/place_page_info.cpp +++ b/libs/map/place_page_info.cpp @@ -31,7 +31,7 @@ bool Info::IsBookmark() const bool Info::ShouldShowAddPlace() const { auto const isPointOrBuilding = IsPointType() || IsBuilding(); - return !(IsFeature() && isPointOrBuilding); + return !IsTrack() && !(IsFeature() && isPointOrBuilding); } void Info::SetFromFeatureType(FeatureType & ft)