From ac453e36ac79e366a216b681598f09b21909ef95 Mon Sep 17 00:00:00 2001 From: Andrei Shkrob Date: Mon, 18 Aug 2025 19:45:02 +0200 Subject: [PATCH] [android] Fix predefined colors again Signed-off-by: Andrei Shkrob --- .../sdk/bookmarks/data/BookmarkManager.cpp | 6 +++--- libs/kml/types.hpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) 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 43334c6b3..cf81d5d57 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 @@ -360,7 +360,7 @@ JNIEXPORT jlong JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_ JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeGetLastEditedColor(JNIEnv *, jobject) { - return static_cast(frm()->LastEditedBMColor()); + return static_cast(kml::kColorIndexMap[E2I(frm()->LastEditedBMColor())]); } JNIEXPORT void JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeLoadBookmarksFile( @@ -705,7 +705,7 @@ JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_n jlong bmk) { auto const * mark = getBookmark(bmk); - return static_cast(mark != nullptr ? mark->GetColor() : frm()->LastEditedBMColor()); + return static_cast(kml::kColorIndexMap[E2I(mark != nullptr ? mark->GetColor() : frm()->LastEditedBMColor())]); } JNIEXPORT jint JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeGetBookmarkIcon(JNIEnv *, jclass, @@ -727,7 +727,7 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_n kml::SetDefaultStr(bmData.m_customName, bmName); if (descr) kml::SetDefaultStr(bmData.m_description, jni::ToNativeString(env, descr)); - bmData.m_color.m_predefinedColor = static_cast(color); + bmData.m_color.m_predefinedColor = kml::kOrderedPredefinedColors[color]; g_framework->ReplaceBookmark(static_cast(bmk), bmData); } diff --git a/libs/kml/types.hpp b/libs/kml/types.hpp index dbe1c91f2..9d24b477f 100644 --- a/libs/kml/types.hpp +++ b/libs/kml/types.hpp @@ -66,6 +66,21 @@ static_assert(kOrderedPredefinedColors.size() == static_cast(PredefinedC "kOrderedPredefinedColors size must match PredefinedColor::Count"); static_assert(base::HasUniqueElements(kOrderedPredefinedColors), "All values must be unique"); +/** + * @brief Maps PredefinedColor to its index in kOrderedPredefinedColors. + * + * @code + * kOrderedPredefinedColors[kColorIndexMap[base::E2I(PredefinedColor::Red)]] == PredefinedColor::Red + * @endcode + */ +std::array constexpr kColorIndexMap = [] consteval +{ + std::array(PredefinedColor::Count)> map{}; + for (std::size_t i = 0; i < kOrderedPredefinedColors.size(); ++i) + map[static_cast(kOrderedPredefinedColors[i])] = static_cast(i); + return map; +}(); + inline std::string DebugPrint(PredefinedColor color) { switch (color)