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 @@
-
-
+