[android] Fix predefined colors again

Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
Andrei Shkrob
2025-08-18 19:45:02 +02:00
committed by Konstantin Pastbin
parent 4052f0481e
commit ac453e36ac
2 changed files with 18 additions and 3 deletions

View File

@@ -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<jint>(frm()->LastEditedBMColor());
return static_cast<jint>(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<jint>(mark != nullptr ? mark->GetColor() : frm()->LastEditedBMColor());
return static_cast<jint>(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<kml::PredefinedColor>(color);
bmData.m_color.m_predefinedColor = kml::kOrderedPredefinedColors[color];
g_framework->ReplaceBookmark(static_cast<kml::MarkId>(bmk), bmData);
}

View File

@@ -66,6 +66,21 @@ static_assert(kOrderedPredefinedColors.size() == static_cast<size_t>(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<int, static_cast<std::size_t>(PredefinedColor::Count)> map{};
for (std::size_t i = 0; i < kOrderedPredefinedColors.size(); ++i)
map[static_cast<std::size_t>(kOrderedPredefinedColors[i])] = static_cast<int>(i);
return map;
}();
inline std::string DebugPrint(PredefinedColor color)
{
switch (color)