diff --git a/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java b/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java index 7d408a54e..fe5bed6cc 100644 --- a/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/EditorFragment.java @@ -236,6 +236,11 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe return true; } + boolean saveEdits() + { + return setEdits() && beforeSavingValidation(); + } + @NonNull protected String getDescription() { @@ -282,6 +287,18 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe return validateNames(); } + private boolean beforeSavingValidation() { + // Validation to make sure address features have a house number + if (!Editor.nativeCheckHouseNumberWhenIsAddress()) + { + mHouseNumber.requestFocus(); + UiUtils.setInputError(mInputHouseNumber, R.string.error_enter_correct_house_number); + InputUtils.showKeyboard(mHouseNumber); + return false; + } + return true; + } + private boolean validateNames() { for (int pos = 0; pos < mNamesAdapter.getItemCount(); pos++) diff --git a/android/app/src/main/java/app/organicmaps/editor/EditorHostFragment.java b/android/app/src/main/java/app/organicmaps/editor/EditorHostFragment.java index cdc0ffdfd..fe102c12e 100644 --- a/android/app/src/main/java/app/organicmaps/editor/EditorHostFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/EditorHostFragment.java @@ -276,6 +276,11 @@ public class EditorHostFragment return ((EditorFragment) getChildFragmentManager().findFragmentByTag(EditorFragment.class.getName())).setEdits(); } + private boolean saveEdits() + { + return ((EditorFragment) getChildFragmentManager().findFragmentByTag(EditorFragment.class.getName())).saveEdits(); + } + @Override public void onClick(View v) { @@ -310,7 +315,7 @@ public class EditorHostFragment case LANGUAGE -> editMapObject(); case MAP_OBJECT -> { - if (!setEdits()) + if (!saveEdits()) return; // Save object edits diff --git a/android/app/src/main/java/app/organicmaps/sdk/editor/Editor.java b/android/app/src/main/java/app/organicmaps/sdk/editor/Editor.java index 10cd2dc55..cc420d9ff 100644 --- a/android/app/src/main/java/app/organicmaps/sdk/editor/Editor.java +++ b/android/app/src/main/java/app/organicmaps/sdk/editor/Editor.java @@ -112,6 +112,7 @@ public final class Editor public static native String nativeGetHouseNumber(); public static native void nativeSetHouseNumber(String houseNumber); public static native boolean nativeIsHouseValid(String houseNumber); + public static native boolean nativeCheckHouseNumberWhenIsAddress(); public static boolean nativeIsLevelValid(String level) { return nativeIsMetadataValid(Metadata.MetadataType.FMD_BUILDING_LEVELS.toInt(), level); diff --git a/android/sdk/src/main/cpp/app/organicmaps/sdk/editor/Editor.cpp b/android/sdk/src/main/cpp/app/organicmaps/sdk/editor/Editor.cpp index e1952788e..e3c938785 100644 --- a/android/sdk/src/main/cpp/app/organicmaps/sdk/editor/Editor.cpp +++ b/android/sdk/src/main/cpp/app/organicmaps/sdk/editor/Editor.cpp @@ -493,6 +493,12 @@ JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeIsHouseV return osm::EditableMapObject::ValidateHouseNumber(jni::ToNativeString(env, houseNumber)); } +JNIEXPORT jboolean JNICALL +Java_app_organicmaps_sdk_editor_Editor_nativeCheckHouseNumberWhenIsAddress(JNIEnv * env, jclass clazz) +{ + return g_editableMapObject.CheckHouseNumberWhenIsAddress(); +} + JNIEXPORT jboolean JNICALL Java_app_organicmaps_sdk_editor_Editor_nativeIsNameValid(JNIEnv * env, jclass clazz, jstring name) { diff --git a/data/categories.txt b/data/categories.txt index e6746653e..e0facb8b9 100644 --- a/data/categories.txt +++ b/data/categories.txt @@ -10162,6 +10162,48 @@ sw:Jengo fa:ساختمان mr:इमारत|बिल्डिंग|वाडा +building-address +en:Address +ar:العنوان +be:Адрас +bg:Адрес +ca:Adreça +cs:Adresa +da:Adresse +de:Adresse +el:Διεύθυνση +es:Dirección +et:Aadress +eu:Helbidea +fa:آدرس +fi:Osoite +fr:Adresse +he:כתובת +hi:पता +hu:Cím +id:Alamat +it:Indirizzo +ja:住所 +ko:주소 +mr:पत्ता +nb:Adresse +nl:Adres +pl:Adres +pt:Morada|Endereço +pt-BR:Endereço +ro:Adresă +ru:Адрес +sk:Adresa +sr:Адреса +sv:Adress +sw:Anwani +th:ที่อยู่ +tr:Adres +uk:Адреса +vi:Địa chỉ +zh-Hans:地址 +zh-Hant:地址 + # First keyword should match [police] definition in strings.txt! @category_police en:4Police|cops diff --git a/data/editor.config b/data/editor.config index 3a1da5727..efead9f4a 100644 --- a/data/editor.config +++ b/data/editor.config @@ -1449,8 +1449,7 @@ - - +