/* * Copyright (C) 2014 Eric Butler * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.tapchatapp.android.util; import android.app.Activity; import android.content.Context; import android.text.InputType; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import com.google.common.base.Function; import com.google.common.primitives.Ints; import com.tapchatapp.android.R; import static com.google.common.collect.Iterables.toArray; import static com.google.common.collect.Iterables.transform; public final class FieldValidator { private FieldValidator() { } public static boolean validateFields(final Activity activity, int... viewIds) { Iterable<View> views = transform(Ints.asList(viewIds), new Function<Integer, View>() { @Override public View apply(Integer viewId) { View view = activity.findViewById(viewId); if (view == null) { throw new IllegalArgumentException("no view with id: " + viewId); } return view; } }); return validateFields(toArray(views, View.class)); } public static boolean validateFields(final View parentView, int... viewIds) { Iterable<View> views = transform(Ints.asList(viewIds), new Function<Integer, View>() { @Override public View apply(Integer viewId) { View view = parentView.findViewById(viewId); if (view == null) { throw new IllegalArgumentException("no view with id: " + viewId); } return view; } }); return validateFields(toArray(views, View.class)); } public static boolean validateFields(View... views) { View firstInvalidView = null; for (View view : views) { if (!view.isShown()) { continue; } boolean viewIsVaild = true; if (view instanceof EditText) { viewIsVaild = validateEditText((EditText) view); } if (!viewIsVaild && firstInvalidView == null) { firstInvalidView = view; } } if (firstInvalidView != null) { firstInvalidView.requestFocus(); return false; } return true; } private static boolean validateEditText(EditText editText) { boolean valid = true; String text = editText.getText().toString(); boolean isEmail = (editText.getInputType() & InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) == InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS; boolean isNumeric = (editText.getInputType() & InputType.TYPE_NUMBER_FLAG_DECIMAL) == InputType.TYPE_NUMBER_FLAG_DECIMAL; if (TextUtils.isEmpty(text)) { if (!isNumeric || !TextUtils.isDigitsOnly(editText.getHint())) { valid = false; } } else if (isEmail) { valid = android.util.Patterns.EMAIL_ADDRESS.matcher(text).matches(); } if (!valid) { Context context = editText.getContext(); if (isEmail) { editText.setError(context.getString(R.string.error_invalid_email)); } else { editText.setError(context.getString(R.string.error_blank)); } return false; } editText.setError(null); return true; } }