Add validation to android.

This commit is contained in:
Sergey Magidovich 2016-06-08 16:52:36 +03:00 committed by Vladimir Byko-Ianko
parent 37b0592f7e
commit df4667ad59
5 changed files with 127 additions and 6 deletions

View file

@ -517,6 +517,41 @@ Java_com_mapswithme_maps_editor_Editor_nativeIsLevelValid(JNIEnv * env, jclass c
return osm::EditableMapObject::ValidateBuildingLevels(jni::ToNativeString(env, level));
}
// static boolean nativeIsFlatValid(String flats)
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_editor_Editor_nativeIsFlatValid(JNIEnv * env, jclass clazz, jstring flats)
{
return osm::EditableMapObject::ValidateFlats(jni::ToNativeString(env, flats));
}
// static boolean nativeIsPostCodeValid(String zipCode)
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_editor_Editor_nativeIsZipcodeValid(JNIEnv * env, jclass clazz, jstring zipCode)
{
return osm::EditableMapObject::ValidatePostCode(jni::ToNativeString(env, zipCode));
}
// static boolean nativeIsPhoneValid(String phone)
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_editor_Editor_nativeIsPhoneValid(JNIEnv * env, jclass clazz, jstring phone)
{
return osm::EditableMapObject::ValidatePhone(jni::ToNativeString(env, phone));
}
// static boolean nativeIsWebsiteValid(String website)
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_editor_Editor_nativeIsWebsiteValid(JNIEnv * env, jclass clazz, jstring website)
{
return osm::EditableMapObject::ValidateWebsite(jni::ToNativeString(env, website));
}
// static boolean nativeIsEmailValid(String email)
JNIEXPORT jboolean JNICALL
Java_com_mapswithme_maps_editor_Editor_nativeIsEmailValid(JNIEnv * env, jclass clazz, jstring email)
{
return osm::EditableMapObject::ValidateEmail(jni::ToNativeString(env, email));
}
JNIEXPORT jstring JNICALL
Java_com_mapswithme_maps_editor_Editor_nativeGetCategory(JNIEnv * env, jclass clazz)
{

View file

@ -114,6 +114,12 @@ public final class Editor
public static native void nativeSetHouseNumber(String houseNumber);
public static native boolean nativeIsHouseValid(String houseNumber);
public static native boolean nativeIsLevelValid(String level);
public static native boolean nativeIsFlatValid(String flat);
public static native boolean nativeIsZipcodeValid(String zipCode);
public static native boolean nativeIsPhoneValid(String phone);
public static native boolean nativeIsWebsiteValid(String site);
public static native boolean nativeIsEmailValid(String email);
public static native boolean nativeHasSomethingToUpload();
@WorkerThread

View file

@ -84,14 +84,20 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private EditText mZipcode;
private View mBlockLevels;
private EditText mBuildingLevels;
private TextInputLayout mInputHouseNumber;
private TextInputLayout mInputBuildingLevels;
private EditText mPhone;
private EditText mWebsite;
private EditText mEmail;
private TextView mCuisine;
private EditText mOperator;
private SwitchCompat mWifi;
private TextInputLayout mInputHouseNumber;
private TextInputLayout mInputBuildingLevels;
private TextInputLayout mInputZipcode;
private TextInputLayout mInputPhone;
private TextInputLayout mInputWebsite;
private TextInputLayout mInputEmail;
private View mEmptyOpeningHours;
private TextView mOpeningHours;
private View mEditOpeningHours;
@ -133,6 +139,15 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
});
mZipcode.setText(Editor.nativeGetZipCode());
mZipcode.addTextChangedListener(new StringUtils.SimpleTextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
UiUtils.setInputError(mInputZipcode, Editor.nativeIsZipcodeValid(s.toString()) ? 0 : R.string.error_enter_correct_zip_code);
}
});
mBuildingLevels.setText(Editor.nativeGetBuildingLevels());
mBuildingLevels.addTextChangedListener(new StringUtils.SimpleTextWatcher()
{
@ -144,8 +159,35 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
});
mPhone.setText(Editor.nativeGetPhone());
mPhone.addTextChangedListener(new StringUtils.SimpleTextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
UiUtils.setInputError(mInputPhone, Editor.nativeIsPhoneValid(s.toString()) ? 0 : R.string.error_enter_correct_phone);
}
});
mWebsite.setText(Editor.nativeGetWebsite());
mWebsite.addTextChangedListener(new StringUtils.SimpleTextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
UiUtils.setInputError(mInputWebsite, Editor.nativeIsWebsiteValid(s.toString()) ? 0 : R.string.error_enter_correct_web);
}
});
mEmail.setText(Editor.nativeGetEmail());
mEmail.addTextChangedListener(new StringUtils.SimpleTextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
UiUtils.setInputError(mInputEmail, Editor.nativeIsEmailValid(s.toString()) ? 0 : R.string.error_enter_correct_email);
}
});
mCuisine.setText(Editor.nativeGetFormattedCuisine());
mOperator.setText(Editor.nativeGetOperator());
mWifi.setChecked(Editor.nativeHasWifi());
@ -202,6 +244,34 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
return false;
}
if (!Editor.nativeIsZipcodeValid(mZipcode.getText().toString()))
{
mZipcode.requestFocus();
InputUtils.showKeyboard(mZipcode);
return false;
}
if (!Editor.nativeIsPhoneValid(mPhone.getText().toString()))
{
mPhone.requestFocus();
InputUtils.showKeyboard(mPhone);
return false;
}
if (!Editor.nativeIsWebsiteValid(mWebsite.getText().toString()))
{
mWebsite.requestFocus();
InputUtils.showKeyboard(mWebsite);
return false;
}
if (!Editor.nativeIsEmailValid(mEmail.getText().toString()))
{
mEmail.requestFocus();
InputUtils.showKeyboard(mEmail);
return false;
}
return true;
}
@ -273,6 +343,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
mLocalizedNamesAdapter.registerAdapterDataObserver(mLocalizedNamesObserver);
refreshLocalizedNames();
showLocalizedNames(false);
// Address
view.findViewById(R.id.block_street).setOnClickListener(this);
mStreet = (TextView) view.findViewById(R.id.street);
@ -281,17 +352,21 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
mInputHouseNumber = (TextInputLayout) blockHouseNumber.findViewById(R.id.custom_input);
View blockZipcode = view.findViewById(R.id.block_zipcode);
mZipcode = findInputAndInitBlock(blockZipcode, 0, R.string.editor_zip_code);
mBlockLevels = view.findViewById(R.id.block_levels);
mInputBuildingLevels = (TextInputLayout) mBlockLevels.findViewById(R.id.custom_input);
// TODO set level limits from core
mBuildingLevels = findInputAndInitBlock(mBlockLevels, 0, getString(R.string.editor_storey_number, 25));
mInputZipcode = (TextInputLayout) blockZipcode.findViewById(R.id.custom_input);
// Details
mBlockLevels = view.findViewById(R.id.block_levels);
mBuildingLevels = findInputAndInitBlock(mBlockLevels, 0, getString(R.string.editor_storey_number, 25));
mInputBuildingLevels = (TextInputLayout) mBlockLevels.findViewById(R.id.custom_input);
View blockPhone = view.findViewById(R.id.block_phone);
mPhone = findInputAndInitBlock(blockPhone, R.drawable.ic_phone, R.string.phone);
mInputPhone = (TextInputLayout) blockPhone.findViewById(R.id.custom_input);
View blockWeb = view.findViewById(R.id.block_website);
mWebsite = findInputAndInitBlock(blockWeb, R.drawable.ic_website, R.string.website);
mInputWebsite = (TextInputLayout) blockWeb.findViewById(R.id.custom_input);
View blockEmail = view.findViewById(R.id.block_email);
mEmail = findInputAndInitBlock(blockEmail, R.drawable.ic_email, R.string.email);
mInputEmail = (TextInputLayout) blockEmail.findViewById(R.id.custom_input);
View blockCuisine = view.findViewById(R.id.block_cuisine);
blockCuisine.setOnClickListener(this);
mCuisine = (TextView) view.findViewById(R.id.cuisine);

View file

@ -255,6 +255,8 @@ bool EditableMapObject::ValidateFlats(string const & flats)
// static
bool EditableMapObject::ValidatePostCode(string const & postCode)
{
if (postCode.empty())
return true;
return search::LooksLikePostcode(postCode, false /* IsPrefix */);
}

View file

@ -30,6 +30,9 @@ UNIT_TEST(EditableMapObject_ValidateBuildingLevels)
TEST(EditableMapObject::ValidateBuildingLevels("25"), ());
TEST(!EditableMapObject::ValidateBuildingLevels("0"), ());
TEST(!EditableMapObject::ValidateBuildingLevels("26"), ());
TEST(!EditableMapObject::ValidateBuildingLevels("22a"), ());
TEST(!EditableMapObject::ValidateBuildingLevels("a22"), ());
TEST(!EditableMapObject::ValidateBuildingLevels("2a22"), ());
TEST(!EditableMapObject::ValidateBuildingLevels("ab"), ());
TEST(!EditableMapObject::ValidateBuildingLevels(
"2345534564564453645534545345534564564453645"), ());