Removed animated slow rendering and Nit picks

Signed-off-by: kavikhalique <kavikhalique3@gmail.com>
This commit is contained in:
kavikhalique
2025-08-02 19:42:27 +05:30
committed by Konstantin Pastbin
parent bb88861256
commit 2684e2b278
14 changed files with 99 additions and 179 deletions

View File

@@ -37,7 +37,7 @@ public class ChartController implements OnChartValueSelectedListener
{ {
private static final int CHART_Y_LABEL_COUNT = 3; private static final int CHART_Y_LABEL_COUNT = 3;
private static final int CHART_X_LABEL_COUNT = 6; 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_FILL_ALPHA = (int) (0.12 * 255);
private static final int CHART_AXIS_GRANULARITY = 100; private static final int CHART_AXIS_GRANULARITY = 100;
private static final float CUBIC_INTENSITY = 0.2f; private static final float CUBIC_INTENSITY = 0.2f;

View File

@@ -264,9 +264,9 @@ public enum BookmarkManager {
} }
@Nullable @Nullable
public void updateTrackPlacePage(long trackId) public void updateTrackPlacePage()
{ {
nativeUpdateTrackPlacePage(trackId); nativeUpdateTrackPlacePage();
} }
@Nullable @Nullable
@@ -751,7 +751,7 @@ public enum BookmarkManager {
private native Bookmark nativeUpdateBookmarkPlacePage(long bmkId); private native Bookmark nativeUpdateBookmarkPlacePage(long bmkId);
@Nullable @Nullable
private native void nativeUpdateTrackPlacePage(long trackId); private native void nativeUpdateTrackPlacePage();
@Nullable @Nullable
private native BookmarkInfo nativeGetBookmarkInfo(long bmkId); private native BookmarkInfo nativeGetBookmarkInfo(long bmkId);
@@ -919,8 +919,6 @@ public enum BookmarkManager {
public static native ElevationInfo nativeGetTrackElevationInfo(long trackId); public static native ElevationInfo nativeGetTrackElevationInfo(long trackId);
public static native boolean nativeIsElevationInfoHasValue(long trackId);
public static native TrackStatistics nativeGetTrackStatistics(long trackId); public static native TrackStatistics nativeGetTrackStatistics(long trackId);
public interface BookmarksLoadingListener public interface BookmarksLoadingListener
{ {

View File

@@ -27,7 +27,7 @@ public class FeatureId implements Parcelable
}; };
@NonNull @NonNull
public static final FeatureId EMPTY = new FeatureId("", 0L, 0); public static final FeatureId EMPTY = new FeatureId("", -1L, 0);
@NonNull @NonNull
private final String mMwmName; private final String mMwmName;

View File

@@ -25,8 +25,8 @@ public class Track extends MapObject
Track(long trackId, long categoryId, String name, Distance length, int color) 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, super(FeatureId.EMPTY, TRACK, name, "", "", "", 0, 0, "", null, OPENING_MODE_PREVIEW_PLUS, null, "",
null, "", RoadWarningMarkType.UNKNOWN.ordinal(), null); RoadWarningMarkType.UNKNOWN.ordinal(), null);
mTrackId = trackId; mTrackId = trackId;
mCategoryId = categoryId; mCategoryId = categoryId;
mName = name; mName = name;
@@ -49,8 +49,7 @@ public class Track extends MapObject
mLength = length; mLength = length;
} }
// modifying this categoryId will not change the core data // Change of the category in the core is done in PlacePageView::onCategoryChanged().
// its just for temporary changes
public void setCategoryId(@NonNull long categoryId) public void setCategoryId(@NonNull long categoryId)
{ {
mCategoryId = categoryId; mCategoryId = categoryId;
@@ -94,22 +93,15 @@ public class Track extends MapObject
public ElevationInfo getElevationInfo() public ElevationInfo getElevationInfo()
{ {
if (mElevationInfo != null) if (mElevationInfo == null)
return mElevationInfo; mElevationInfo = BookmarkManager.nativeGetTrackElevationInfo(mTrackId);
mElevationInfo = BookmarkManager.nativeGetTrackElevationInfo(mTrackId);
return mElevationInfo; return mElevationInfo;
} }
public boolean isElevationInfoHasValue()
{
return BookmarkManager.nativeIsElevationInfoHasValue(mTrackId);
}
public TrackStatistics getTrackStatistics() public TrackStatistics getTrackStatistics()
{ {
if (mTrackStatistics != null) if (mTrackStatistics == null)
return mTrackStatistics; mTrackStatistics = BookmarkManager.nativeGetTrackStatistics(mTrackId);
mTrackStatistics = BookmarkManager.nativeGetTrackStatistics(mTrackId);
return mTrackStatistics; return mTrackStatistics;
} }
} }

View File

@@ -58,12 +58,6 @@ public class ElevationProfileViewRenderer implements PlacePageStateListener
private View mTimeContainer; private View mTimeContainer;
private View mTitleContainer; private View mTitleContainer;
@NonNull
private static String formatDistance(final Context context, int distance)
{
return Framework.nativeFormatAltitude(distance);
}
public void render(@NonNull Track track) public void render(@NonNull Track track)
{ {
final Context context = mAscent.getContext(); 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)); 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) public void initialize(@Nullable View view)
{ {
Objects.requireNonNull(view); Objects.requireNonNull(view);

View File

@@ -124,6 +124,7 @@ public class PlacePageController
bg.setCornerSize(mPlacePageCornerRadius); bg.setCornerSize(mPlacePageCornerRadius);
} }
}; };
private final BottomSheetBehavior.BottomSheetCallback mDefaultBottomSheetCallback = private final BottomSheetBehavior.BottomSheetCallback mDefaultBottomSheetCallback =
new BottomSheetBehavior.BottomSheetCallback() { new BottomSheetBehavior.BottomSheetCallback() {
@Override @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 @Nullable
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@@ -217,6 +206,18 @@ public class PlacePageController
ViewCompat.requestApplyInsets(mPlacePage); 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() private void stopCustomPeekHeightAnimation()
{ {
if (mCustomPeekHeightAnimator != null && mCustomPeekHeightAnimator.isStarted()) if (mCustomPeekHeightAnimator != null && mCustomPeekHeightAnimator.isStarted())
@@ -456,19 +457,18 @@ public class PlacePageController
{ {
if (mMapObject == null) if (mMapObject == null)
return; return;
dismissAlertDialog();
mViewModel.isAlertDialogShowing = true;
if (mAlertDialog != null) if (mAlertDialog != null)
{ {
mAlertDialog.dismiss();
mAlertDialog.show(); mAlertDialog.show();
mViewModel.isAlertDialogShowing = true;
return; return;
} }
mViewModel.isAlertDialogShowing = true;
mAlertDialog = new MaterialAlertDialogBuilder(requireContext(), R.style.MwmTheme_AlertDialog) 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) .setCancelable(true)
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.setPositiveButton("delete", .setPositiveButton(R.string.delete,
(dialog, which) -> { (dialog, which) -> {
BookmarkManager.INSTANCE.deleteTrack(((Track) mMapObject).getTrackId()); BookmarkManager.INSTANCE.deleteTrack(((Track) mMapObject).getTrackId());
close(); 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 // Place page will automatically open when the bottom sheet content is loaded so we can compute the peek height
createPlacePageFragments(); createPlacePageFragments();
updateButtons(mapObject, showBackButton, !mMapObject.isMyPosition()); updateButtons(mapObject, showBackButton, !mMapObject.isMyPosition());
mAlertDialog = null;
if (mViewModel.isAlertDialogShowing) if (mViewModel.isAlertDialogShowing)
showTrackDeleteAlertDialog(); showTrackDeleteAlertDialog();
} }

View File

@@ -369,9 +369,12 @@ public class PlacePageView extends Fragment
else else
refreshDistanceToObject(loc); refreshDistanceToObject(loc);
UiUtils.hideIf(mMapObject.isTrack(), mFrame.findViewById(R.id.ll__place_latlon), 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, mFrame.findViewById(R.id.ll__place_open_in));
mTvAzimuth, mTvDistance, mAvDirection); if (mMapObject.isTrack() || mMapObject.isBookmark())
UiUtils.hideIf(MapObjectType.getMapObjectType(mMapObject) != MapObjectType.OTHER, mTvSubtitle); {
UiUtils.hide(mTvSubtitle);
UiUtils.hide(mTvAzimuth, mAvDirection, mTvDistance);
}
} }
private <T extends Fragment> void updateViewFragment(Class<T> controllerClass, String fragmentTag, private <T extends Fragment> void updateViewFragment(Class<T> controllerClass, String fragmentTag,
@@ -466,9 +469,7 @@ public class PlacePageView extends Fragment
void refreshCategoryPreview() void refreshCategoryPreview()
{ {
View categoryContainer = mFrame.findViewById(R.id.category_container); View categoryContainer = mFrame.findViewById(R.id.category_container);
switch (MapObjectType.getMapObjectType(mMapObject)) if (mMapObject.isTrack())
{
case TRACK ->
{ {
Track track = (Track) mMapObject; Track track = (Track) mMapObject;
Drawable circle = Drawable circle =
@@ -477,7 +478,7 @@ public class PlacePageView extends Fragment
mTvCategory.setText(BookmarkManager.INSTANCE.getCategoryById(track.getCategoryId()).getName()); mTvCategory.setText(BookmarkManager.INSTANCE.getCategoryById(track.getCategoryId()).getName());
UiUtils.show(mColorIcon, mTvCategory, categoryContainer); UiUtils.show(mColorIcon, mTvCategory, categoryContainer);
} }
case BOOKMARK -> else if (mMapObject.isBookmark())
{ {
Bookmark bookmark = (Bookmark) mMapObject; Bookmark bookmark = (Bookmark) mMapObject;
Icon icon = bookmark.getIcon(); Icon icon = bookmark.getIcon();
@@ -491,8 +492,7 @@ public class PlacePageView extends Fragment
UiUtils.show(mColorIcon, mTvCategory, categoryContainer); UiUtils.show(mColorIcon, mTvCategory, categoryContainer);
} }
} }
case OTHER -> UiUtils.hide(mColorIcon, mTvCategory, categoryContainer);
}
mColorIcon.setOnClickListener(this::onClick); mColorIcon.setOnClickListener(this::onClick);
mTvCategory.setOnClickListener(this::onClick); mTvCategory.setOnClickListener(this::onClick);
mEditBookmark.setOnClickListener(this::onClick); mEditBookmark.setOnClickListener(this::onClick);
@@ -508,25 +508,23 @@ public class PlacePageView extends Fragment
(BookmarkColorDialogFragment) factory.instantiate(getContext().getClassLoader(), className); (BookmarkColorDialogFragment) factory.instantiate(getContext().getClassLoader(), className);
dialogFragment.setArguments(args); dialogFragment.setArguments(args);
switch (MapObjectType.getMapObjectType(mMapObject)) if (mMapObject.isTrack())
{ {
case TRACK -> final Track track = (Track) mMapObject;
{ args.putInt(BookmarkColorDialogFragment.ICON_COLOR, PredefinedColors.getPredefinedColorIndex(track.getColor()));
final Track mTrack = (Track) mMapObject;
args.putInt(BookmarkColorDialogFragment.ICON_COLOR, PredefinedColors.getPredefinedColorIndex(mTrack.getColor()));
dialogFragment.setOnColorSetListener((colorPos) -> { dialogFragment.setOnColorSetListener((colorPos) -> {
int from = mTrack.getColor(); int from = track.getColor();
int to = PredefinedColors.getColor(colorPos); int to = PredefinedColors.getColor(colorPos);
if (from == to) if (from == to)
return; return;
mViewModel.modifyMapObjectColorSilently(to); track.setColor(to);
Drawable circle = Graphics.drawCircle(to, R.dimen.place_page_icon_size, requireContext().getResources()); Drawable circle = Graphics.drawCircle(to, R.dimen.place_page_icon_size, requireContext().getResources());
mColorIcon.setImageDrawable(circle); mColorIcon.setImageDrawable(circle);
}); });
dialogFragment.show(requireActivity().getSupportFragmentManager(), null);
} }
case BOOKMARK -> else if (mMapObject.isBookmark())
{ {
dialogFragment.show(requireActivity().getSupportFragmentManager(), null);
final Bookmark bookmark = (Bookmark) mMapObject; final Bookmark bookmark = (Bookmark) mMapObject;
args.putInt(BookmarkColorDialogFragment.ICON_COLOR, bookmark.getIcon().getColor()); args.putInt(BookmarkColorDialogFragment.ICON_COLOR, bookmark.getIcon().getColor());
args.putInt(BookmarkColorDialogFragment.ICON_RES, bookmark.getIcon().getResId()); args.putInt(BookmarkColorDialogFragment.ICON_RES, bookmark.getIcon().getResId());
@@ -535,7 +533,7 @@ public class PlacePageView extends Fragment
int to = PredefinedColors.getColor(colorPos); int to = PredefinedColors.getColor(colorPos);
if (from == to) if (from == to)
return; return;
mViewModel.modifyMapObjectColorSilently(to); bookmark.setIconColor(to);
Drawable circle = Graphics.drawCircleAndImage(to, R.dimen.place_page_icon_size, Drawable circle = Graphics.drawCircleAndImage(to, R.dimen.place_page_icon_size,
app.organicmaps.sdk.R.drawable.ic_bookmark_none, app.organicmaps.sdk.R.drawable.ic_bookmark_none,
R.dimen.place_page_icon_mark_size, requireContext()); R.dimen.place_page_icon_mark_size, requireContext());
@@ -543,7 +541,6 @@ public class PlacePageView extends Fragment
}); });
dialogFragment.show(requireActivity().getSupportFragmentManager(), null); dialogFragment.show(requireActivity().getSupportFragmentManager(), null);
} }
}
} }
private void showCategoryList() private void showCategoryList()
@@ -555,9 +552,7 @@ public class PlacePageView extends Fragment
final FragmentFactory factory = manager.getFragmentFactory(); final FragmentFactory factory = manager.getFragmentFactory();
final ChooseBookmarkCategoryFragment frag = final ChooseBookmarkCategoryFragment frag =
(ChooseBookmarkCategoryFragment) factory.instantiate(getContext().getClassLoader(), className); (ChooseBookmarkCategoryFragment) factory.instantiate(getContext().getClassLoader(), className);
switch (MapObjectType.getMapObjectType(mMapObject)) if (mMapObject.isTrack())
{
case TRACK ->
{ {
Track track = (Track) mMapObject; Track track = (Track) mMapObject;
BookmarkCategory currentCategory = BookmarkManager.INSTANCE.getCategoryById(track.getCategoryId()); BookmarkCategory currentCategory = BookmarkManager.INSTANCE.getCategoryById(track.getCategoryId());
@@ -566,7 +561,7 @@ public class PlacePageView extends Fragment
frag.setArguments(args); frag.setArguments(args);
frag.show(manager, null); frag.show(manager, null);
} }
case BOOKMARK -> else if (mMapObject.isBookmark())
{ {
Bookmark bookmark = (Bookmark) mMapObject; Bookmark bookmark = (Bookmark) mMapObject;
BookmarkCategory currentCategory = BookmarkManager.INSTANCE.getCategoryById(bookmark.getCategoryId()); BookmarkCategory currentCategory = BookmarkManager.INSTANCE.getCategoryById(bookmark.getCategoryId());
@@ -575,15 +570,12 @@ public class PlacePageView extends Fragment
frag.setArguments(args); frag.setArguments(args);
frag.show(manager, null); frag.show(manager, null);
} }
}
} }
@Override @Override
public void onCategoryChanged(@NonNull BookmarkCategory newCategory) public void onCategoryChanged(@NonNull BookmarkCategory newCategory)
{ {
switch (MapObjectType.getMapObjectType(mMapObject)) if (mMapObject.isTrack())
{
case TRACK ->
{ {
Track track = (Track) mMapObject; Track track = (Track) mMapObject;
BookmarkCategory previousCategory = BookmarkManager.INSTANCE.getCategoryById(track.getCategoryId()); BookmarkCategory previousCategory = BookmarkManager.INSTANCE.getCategoryById(track.getCategoryId());
@@ -591,49 +583,44 @@ public class PlacePageView extends Fragment
return; return;
BookmarkManager.INSTANCE.notifyCategoryChanging(track, newCategory.getId()); BookmarkManager.INSTANCE.notifyCategoryChanging(track, newCategory.getId());
mTvCategory.setText(newCategory.getName()); mTvCategory.setText(newCategory.getName());
mViewModel.modifyMapObjectCategoryIdSilently(newCategory.getId()); track.setCategoryId(newCategory.getId());
} }
case BOOKMARK -> else if (mMapObject.isBookmark())
{ {
Bookmark bookmark = (Bookmark) mMapObject; Bookmark bookmark = (Bookmark) mMapObject;
BookmarkCategory previousCategory = BookmarkManager.INSTANCE.getCategoryById(bookmark.getCategoryId()); BookmarkCategory previousCategory = BookmarkManager.INSTANCE.getCategoryById(bookmark.getCategoryId());
if (previousCategory == newCategory) if (previousCategory == newCategory)
return; return;
mTvCategory.setText(newCategory.getName()); mTvCategory.setText(newCategory.getName());
mViewModel.modifyMapObjectCategoryIdSilently(newCategory.getId()); bookmark.setCategoryId(newCategory.getId());
}
} }
} }
void showBookmarkEditFragment() void showBookmarkEditFragment()
{ {
switch (MapObjectType.getMapObjectType(mMapObject)) if (mMapObject.isTrack())
{
case TRACK ->
{ {
Track track = (Track) mMapObject; Track track = (Track) mMapObject;
final FragmentActivity activity = requireActivity(); final FragmentActivity activity = requireActivity();
EditBookmarkFragment.editTrack(track.getCategoryId(), track.getTrackId(), activity, getChildFragmentManager(), EditBookmarkFragment.editTrack(track.getCategoryId(), track.getTrackId(), activity, getChildFragmentManager(),
PlacePageView.this); PlacePageView.this);
} }
case BOOKMARK -> else if (mMapObject.isBookmark())
{ {
Bookmark bookmark = (Bookmark) mMapObject; Bookmark bookmark = (Bookmark) mMapObject;
final FragmentActivity activity = requireActivity(); final FragmentActivity activity = requireActivity();
EditBookmarkFragment.editBookmark(bookmark.getCategoryId(), bookmark.getBookmarkId(), activity, EditBookmarkFragment.editBookmark(bookmark.getCategoryId(), bookmark.getBookmarkId(), activity,
getChildFragmentManager(), PlacePageView.this); getChildFragmentManager(), PlacePageView.this);
} }
}
} }
@Override @Override
public void onBookmarkSaved(long bookmarkId, boolean movedFromCategory) public void onBookmarkSaved(long bookmarkId, boolean movedFromCategory)
{ {
switch (MapObjectType.getMapObjectType(mMapObject)) if (mMapObject.isTrack())
{ BookmarkManager.INSTANCE.updateTrackPlacePage();
case TRACK -> BookmarkManager.INSTANCE.updateTrackPlacePage(bookmarkId); else if (mMapObject.isBookmark())
case BOOKMARK -> BookmarkManager.INSTANCE.updateBookmarkPlacePage(bookmarkId); BookmarkManager.INSTANCE.updateBookmarkPlacePage(bookmarkId);
}
} }
private void refreshDetails() private void refreshDetails()
@@ -1071,7 +1058,7 @@ public class PlacePageView extends Fragment
{ {
if (mMapObject.isTrack()) 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); .show(getChildFragmentManager(), TRACK_SHARE_MENU_ID);
} }
else else
@@ -1119,21 +1106,4 @@ public class PlacePageView extends Fragment
void onPlacePageRequestToggleState(); void onPlacePageRequestToggleState();
void onPlacePageRequestClose(); 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;
}
}
} }

View File

@@ -37,38 +37,6 @@ public class PlacePageViewModel extends ViewModel
mMapObject.setValue(mapObject); 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<Integer> getPlacePageWidth() public MutableLiveData<Integer> getPlacePageWidth()
{ {
return mPlacePageWidth; return mPlacePageWidth;

View File

@@ -63,14 +63,14 @@ public class PlacePageTrackFragment extends Fragment
public void onStop() public void onStop()
{ {
super.onStop(); super.onStop();
BookmarkManager.INSTANCE.setElevationActivePointChangedListener(null);
BookmarkManager.INSTANCE.setElevationCurrentPositionChangedListener(null);
mViewModel.getMapObject().removeObserver(this); mViewModel.getMapObject().removeObserver(this);
} }
@Override @Override
public void onDestroy() public void onDestroy()
{ {
BookmarkManager.INSTANCE.setElevationActivePointChangedListener(null);
BookmarkManager.INSTANCE.setElevationCurrentPositionChangedListener(null);
super.onDestroy(); 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 // MapObject could be something else than a Track if the user already has the place page
// opened and clicks on a non-Track POI. // opened and clicks on a non-Track POI.
// This callback would be called before the fragment had time to be destroyed // 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 (mTrack == null || mTrack.getTrackId() != track.getTrackId())
if (track.isElevationInfoHasValue())
{ {
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 @Override
@@ -104,7 +104,8 @@ public class PlacePageTrackFragment extends Fragment
return; return;
mElevationProfileViewRenderer.onChartElevationActivePointChanged(); mElevationProfileViewRenderer.onChartElevationActivePointChanged();
ElevationInfo.Point point = BookmarkManager.INSTANCE.getElevationActivePointCoordinates(mTrack.getTrackId()); ElevationInfo.Point point = BookmarkManager.INSTANCE.getElevationActivePointCoordinates(mTrack.getTrackId());
mViewModel.modifyMapObjectPointSilently(point); mTrack.setLat(point.getLatitude());
mTrack.setLon(point.getLongitude());
} }
@Override @Override

View File

@@ -1,10 +1,10 @@
<vector <vector
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp" android:height="24dp"
android:viewportHeight="590.91" android:viewportWidth="960"
android:viewportWidth="590.91" android:viewportHeight="960">
android:width="24dp">
<path <path
android:fillColor="#000000" 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:pathData="M541.67,295.45l-86.21,-86.21l0,71.21l-320,0l0,-71.21l-86.21,86.21l86.21,86.21l0,-71.21l320,0l0,71.21z" /> android:fillColor="#e3e3e3" />
</vector> </vector>

View File

@@ -971,5 +971,7 @@
<string name="closed_now">Closed now</string> <string name="closed_now">Closed now</string>
<!-- Used in place page preview for next open/close time. eg. "closing in 30 min • at 19:30" --> <!-- Used in place page preview for next open/close time. eg. "closing in 30 min • at 19:30" -->
<string name="at">at %s</string> <string name="at">at %s</string>
<string name="PP_track_bottom_sheet_title">Save Track As</string> <!-- Title of the bottom sheet when sharing the track -->
<string name="share_track">Share Track</string>
<string name="delete_track_dialog_title">Delete %s?</string>
</resources> </resources>

View File

@@ -102,11 +102,7 @@ jobject CreateTrack(JNIEnv * env, place_page::Info const & info, jni::TScopedLoc
auto const trackId = info.GetTrackId(); auto const trackId = info.GetTrackId();
auto const track = frm()->GetBookmarkManager().GetTrack(trackId); auto const track = frm()->GetBookmarkManager().GetTrack(trackId);
dp::Color nColor = track->GetColor(0); jint androidColor = track->GetColor(0).GetARGB();
jint androidColor =
shift(nColor.GetAlpha(), 24) + shift(nColor.GetRed(), 16) + shift(nColor.GetGreen(), 8) + nColor.GetBlue();
auto const categoryId = track->GetGroupId(); auto const categoryId = track->GetGroupId();
ms::LatLon const ll = info.GetLatLon(); ms::LatLon const ll = info.GetLatLon();
jni::TScopedLocalRef jMwmName(env, jni::ToJavaString(env, info.GetID().GetMwmName())); jni::TScopedLocalRef jMwmName(env, jni::ToJavaString(env, info.GetID().GetMwmName()));

View File

@@ -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, JNIEXPORT void JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeUpdateTrackPlacePage(JNIEnv * env,
jobject, jobject)
jlong trackId)
{ {
if (!frm()->HasPlacePageInfo()) if (!frm()->HasPlacePageInfo())
return; 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) JNIEnv *, jclass, jlong trackId, jdouble distanceInMeters, jdouble latitude, jdouble longitude)
{ {
auto & bm = frm()->GetBookmarkManager(); auto & bm = frm()->GetBookmarkManager();
bm.SetElevationActivePoint(static_cast<kml::TrackId>(trackId), bm.SetElevationActivePoint(static_cast<kml::TrackId>(trackId), {latitude, longitude},
m2::PointD(static_cast<double>(latitude), static_cast<double>(longitude)),
static_cast<double>(distanceInMeters)); static_cast<double>(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 & track = frm()->GetBookmarkManager().GetTrack(track_id);
auto const & elevationInfo = track->GetElevationInfo(); auto const & elevationInfo = track->GetElevationInfo();
return usermark_helper::CreateElevationInfo(env, elevationInfo.value()); return track->GetElevationInfo().has_value() ? usermark_helper::CreateElevationInfo(env, elevationInfo.value())
} : nullptr;
JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeIsElevationInfoHasValue(
JNIEnv * env, jclass clazz, jlong track_id)
{
return static_cast<jboolean>(frm()->GetBookmarkManager().GetTrack(track_id)->GetElevationInfo().has_value());
} }
JNIEXPORT jobject JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeGetTrackStatistics( JNIEXPORT jobject JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeGetTrackStatistics(
JNIEnv * env, jclass clazz, jlong track_id) JNIEnv * env, jclass clazz, jlong track_id)
{ {
static jmethodID const cId = jni::GetConstructorID(env, g_trackStatisticsClazz, "(DDDDII)V"); static jmethodID const cId = jni::GetConstructorID(env, g_trackStatisticsClazz, "(DDDDII)V");
auto const trackStats = frm()->GetBookmarkManager().GetTrack(track_id)->GetStatistics(); auto const trackStats = frm()->GetBookmarkManager().GetTrack(track_id)->GetStatistics();
return env->NewObject(g_trackStatisticsClazz, cId, static_cast<jdouble>(trackStats.m_length), return env->NewObject(g_trackStatisticsClazz, cId, trackStats.m_length, trackStats.m_duration, trackStats.m_ascent,
static_cast<jdouble>(trackStats.m_duration), static_cast<jdouble>(trackStats.m_ascent), trackStats.m_descent, trackStats.m_minElevation, static_cast<jint>(trackStats.m_maxElevation));
static_cast<jdouble>(trackStats.m_descent), static_cast<jint>(trackStats.m_minElevation),
static_cast<jint>(trackStats.m_maxElevation));
} }
JNIEXPORT jobject JNICALL 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"); static jmethodID const pointCtorId = jni::GetConstructorID(env, pointClass, "(DIDD)V");
auto const & trackInfo = frm()->GetBookmarkManager().GetTrackSelectionInfo(track_id); auto const & trackInfo = frm()->GetBookmarkManager().GetTrackSelectionInfo(track_id);
auto const latlon = mercator::ToLatLon(trackInfo.m_trackPoint); auto const latlon = mercator::ToLatLon(trackInfo.m_trackPoint);
return env->NewObject(pointClass, pointCtorId, 0.0, 0, static_cast<jdouble>(latlon.m_lat), return env->NewObject(pointClass, pointCtorId, 0.0, 0, latlon.m_lat, latlon.m_lon);
static_cast<jdouble>(latlon.m_lon));
} }
} // extern "C" } // extern "C"

View File

@@ -31,7 +31,7 @@ bool Info::IsBookmark() const
bool Info::ShouldShowAddPlace() const bool Info::ShouldShowAddPlace() const
{ {
auto const isPointOrBuilding = IsPointType() || IsBuilding(); auto const isPointOrBuilding = IsPointType() || IsBuilding();
return !(IsFeature() && isPointOrBuilding); return !IsTrack() && !(IsFeature() && isPointOrBuilding);
} }
void Info::SetFromFeatureType(FeatureType & ft) void Info::SetFromFeatureType(FeatureType & ft)