[android] House number validation.

This commit is contained in:
Dmitry Yunitsky 2016-04-07 11:26:16 +03:00 committed by Alex Zolotarev
parent fba1ccfc3f
commit 220f32610f
5 changed files with 70 additions and 16 deletions

View file

@ -356,4 +356,10 @@ Java_com_mapswithme_maps_editor_Editor_nativeCreateNote(JNIEnv * env, jclass cla
Editor::Instance().CreateNote(ms::LatLon(lat, lon), jni::ToNativeString(env, text));
}
// static boolean nativeIsHouseValid(String houseNumber);
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_editor_Editor_nativeIsHouseValid(JNIEnv * env, jclass clazz, jstring houseNumber)
{
return osm::EditableMapObject::ValidateHouseNumber(jni::ToNativeString(env, houseNumber));
}
} // extern "C"

View file

@ -124,6 +124,7 @@
style="@style/MwmWidget.Editor.MetadataBlock">
<com.mapswithme.maps.widget.CustomTextInputLayout
android:id="@+id/custom_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"

View file

@ -141,4 +141,6 @@ public final class Editor
public static native long nativeGetMwmVersion();
public static native void nativeCreateNote(double lat, double lon, String text);
public static native boolean nativeIsHouseValid(String houseNumber);
}

View file

@ -14,6 +14,8 @@ import com.mapswithme.maps.base.BaseMwmFragment;
import com.mapswithme.maps.bookmarks.data.Metadata;
import com.mapswithme.maps.editor.data.TimeFormatUtils;
import com.mapswithme.maps.editor.data.Timetable;
import com.mapswithme.maps.widget.CustomTextInputLayout;
import com.mapswithme.util.StringUtils;
import com.mapswithme.util.UiUtils;
public class EditorFragment extends BaseMwmFragment implements View.OnClickListener
@ -25,6 +27,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private TextView mTvLocalizedNames;
private TextView mTvStreet;
private EditText mEtHouseNumber;
private CustomTextInputLayout mInputHouseNumber;
private View mPhoneBlock;
private EditText mEtPhone;
private View mWebBlock;
@ -63,6 +66,23 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
mEtName.setText(Editor.nativeGetDefaultName());
mTvStreet.setText(Editor.nativeGetStreet());
mEtHouseNumber.setText(Editor.nativeGetHouseNumber());
mEtHouseNumber.addTextChangedListener(new StringUtils.SimpleTextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
final String text = s.toString();
if (!Editor.nativeIsHouseValid(text))
{
// TODO set correct error text
mInputHouseNumber.setError("invalid house number");
return;
}
mInputHouseNumber.setError(null);
}
});
mEtPhone.setText(Editor.getMetadata(Metadata.MetadataType.FMD_PHONE_NUMBER));
mEtWebsite.setText(Editor.getMetadata(Metadata.MetadataType.FMD_WEBSITE));
mEtEmail.setText(Editor.getMetadata(Metadata.MetadataType.FMD_EMAIL));
@ -80,14 +100,24 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
setEdits();
}
protected void setEdits()
protected boolean setEdits()
{
if (!validateFields())
return false;
Editor.setMetadata(Metadata.MetadataType.FMD_PHONE_NUMBER, getPhone());
Editor.setMetadata(Metadata.MetadataType.FMD_WEBSITE, getWebsite());
Editor.setMetadata(Metadata.MetadataType.FMD_EMAIL, getEmail());
Editor.setMetadata(Metadata.MetadataType.FMD_INTERNET, getWifi());
Editor.nativeSetDefaultName(getName());
Editor.nativeSetHouseNumber(getHouseNumber());
return true;
}
private boolean validateFields()
{
return Editor.nativeIsHouseValid(getHouseNumber());
}
public String getName()
@ -131,11 +161,6 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
return mSwWifi.isChecked() ? "wlan" : "";
}
public String getOpeningHours()
{
return Editor.getMetadata(Metadata.MetadataType.FMD_OPEN_HOURS);
}
private void refreshEditableFields()
{
UiUtils.showIf(Editor.nativeIsNameEditable(), mNameBlock);
@ -211,6 +236,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
view.findViewById(R.id.block_street).setOnClickListener(this);
mTvStreet = (TextView) view.findViewById(R.id.street);
mEtHouseNumber = findInput(view.findViewById(R.id.building));
mInputHouseNumber = (CustomTextInputLayout) view.findViewById(R.id.building).findViewById(R.id.custom_input);
mPhoneBlock = view.findViewById(R.id.block_phone);
mEtPhone = findInput(mPhoneBlock);
mWebBlock = view.findViewById(R.id.block_website);

View file

@ -115,7 +115,9 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
protected void editTimetable()
{
setEdits();
if (!setEdits())
return;
mMode = Mode.OPENING_HOURS;
mToolbarController.setTitle(R.string.editor_time_title);
final Bundle args = new Bundle();
@ -128,7 +130,9 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
protected void editStreet()
{
setEdits();
if (!setEdits())
return;
mMode = Mode.STREET;
mToolbarController.setTitle(R.string.choose_street);
final Fragment streetFragment = Fragment.instantiate(getActivity(), StreetFragment.class.getName());
@ -139,7 +143,9 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
protected void editCuisine()
{
setEdits();
if (!setEdits())
return;
mMode = Mode.CUISINE;
mToolbarController.setTitle("");
((SearchToolbarController) mToolbarController).showControls(true);
@ -149,9 +155,15 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
.commit();
}
private void setEdits()
private boolean setEdits()
{
((EditorFragment) getChildFragmentManager().findFragmentByTag(EditorFragment.class.getName())).setEdits();
final boolean set = ((EditorFragment) getChildFragmentManager().findFragmentByTag(EditorFragment.class.getName())).setEdits();
if (!set)
// TODO set correct text R.string.error_enter_correct_house_number
showMistakeDialog(R.string.editor_correct_mistake);
return set;
}
@Override
@ -170,10 +182,7 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
}
else
{
new AlertDialog.Builder(getActivity())
.setMessage(R.string.editor_correct_mistake)
.setPositiveButton(android.R.string.ok, null)
.show();
showMistakeDialog(R.string.editor_correct_mistake);
}
break;
case STREET:
@ -185,7 +194,9 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
editMapObject();
break;
case MAP_OBJECT:
setEdits();
if (!setEdits())
return;
if (Editor.nativeSaveEditedFeature())
{
Statistics.INSTANCE.trackEditorSuccess(mIsNewObject);
@ -215,6 +226,14 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
}
}
private void showMistakeDialog(@StringRes int resId)
{
new AlertDialog.Builder(getActivity())
.setMessage(resId)
.setPositiveButton(android.R.string.ok, null)
.show();
}
public void setStreet(String street)
{
Editor.nativeSetStreet(street);