From bc9861bdc503b7c557072118330f5ef5d9e52e9e Mon Sep 17 00:00:00 2001 From: preyearegmi Date: Thu, 13 Sep 2018 14:11:02 +0900 Subject: [PATCH] Register validation added --- app/src/main/AndroidManifest.xml | 32 ++--- .../kycV2/adapter/KycViewPagerAdapter.java | 19 +-- .../kycV2/view/KYCFormV2Activity.java | 85 +++++++++++- .../kycV2/view/view1/KYCView1Fragment.java | 3 +- .../kycV2/view/view2/KYCView2Fragment.java | 3 +- .../kycV2/view/view3/KYCView3Fragment.java | 2 + .../presenter/RegisterV2Presenter.java | 43 +++++- .../RegisterV2PresenterInterface.java | 2 + .../registerV2/view/RegisterV2Activity.java | 22 ++- .../gmeremittance_native/utils/Utils.java | 24 ++++ .../main/res/layout/activity_register_v2.xml | 2 +- app/src/main/res/layout/dummykyc.xml | 125 +++++------------- .../main/res/layout/fragment_kyc_view1_v2.xml | 16 ++- .../main/res/layout/fragment_kyc_view2_v2.xml | 3 + .../main/res/layout/layout_kyc_toolbar.xml | 3 +- 15 files changed, 239 insertions(+), 145 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 487bc369..708c2d2b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,16 +48,16 @@ android:screenOrientation="portrait" android:theme="@style/AppTheme.NoActionBar" android:windowSoftInputMode="stateAlwaysHidden"> - - + + - - - - + + + + - - + + - - + + - - - - + + + + - - + + fraglist; - private Fragment mCurrentFragment; public KycViewPagerAdapter(FragmentManager fm) { super(fm); @@ -18,12 +18,6 @@ public class KycViewPagerAdapter extends FragmentPagerAdapter { } - public Fragment getCurrentFragment() - { - return mCurrentFragment; - } - - @Override public Fragment getItem(int position) { return fraglist.get(position); @@ -38,12 +32,7 @@ public class KycViewPagerAdapter extends FragmentPagerAdapter { return fraglist.size(); } -// @Override -// public void setPrimaryItem(ViewGroup container, int position, Object object) { -// if(getCurrentFragment()!=object) -// { -// mCurrentFragment=((Fragment) object); -// } -// super.setPrimaryItem(container, position, object); -// } + + + } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/KYCFormV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/KYCFormV2Activity.java index e19a2d45..a83dd25e 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/KYCFormV2Activity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/KYCFormV2Activity.java @@ -1,8 +1,19 @@ package com.gmeremit.online.gmeremittance_native.kycV2.view; +import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.os.Bundle; +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPager; +import android.support.v4.view.ViewPropertyAnimatorCompat; +import android.support.v4.view.ViewPropertyAnimatorListenerAdapter; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import android.widget.TextView; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseActivity; @@ -20,7 +31,7 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListener { +public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListener, ViewPager.OnPageChangeListener, View.OnClickListener { @@ -30,11 +41,19 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen @BindView(R.id.kycTabLayout) TabLayout tabLayout; + @BindView(R.id.kycTitleTxtView) + TextView kycTitleTxtView; + + @BindView(R.id.iv_back) + View backButton; + private KYCView1Fragment kycView1; private KYCView2Fragment kycView2; private KycViewPagerAdapter kycViewPagerAdapter; private KYCView3Fragment kycView3; + private static Interpolator interpolator=new AccelerateDecelerateInterpolator(); + @Override protected void onCreate(Bundle savedInstanceState) { @@ -46,9 +65,9 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen } private void performDefaultAction(Bundle savedInstanceState) { - viewPager.setCurrentItem(0); - if (savedInstanceState == null) { + if (savedInstanceState == null) { + viewPager.setCurrentItem(0); } else { } @@ -58,6 +77,7 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen private void initialize() { setupViewPager(); setUpTabLayout(); + backButton.setVisibility(View.VISIBLE); } private void setUpTabLayout() { @@ -88,6 +108,8 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen kycViewPagerAdapter.addFragments(fragments); + viewPager.addOnPageChangeListener(this); + viewPager.setAdapter(kycViewPagerAdapter); tabLayout.setupWithViewPager(viewPager); @@ -96,15 +118,72 @@ public class KYCFormV2Activity extends BaseActivity implements KYCV2ActionListen @Override public void showView2() { + viewPager.setCurrentItem(1); + } + + private void changeTitleInHeader(String message) { + ViewCompat.animate(kycTitleTxtView).alpha(0f).setInterpolator(interpolator).withEndAction(()->{ + kycTitleTxtView.setText(message); + ViewCompat.animate(kycTitleTxtView).alpha(1f).setInterpolator(interpolator).setDuration(170).start(); + }).setDuration(170).start(); + + } + @Override + protected void onStart() { + super.onStart(); + backButton.setOnClickListener(this); + } + + @Override + protected void onStop() { + super.onStop(); + backButton.setOnClickListener(null); + } + @Override public KYCV2PresenterInterface getPresenter() { return null; } + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + switch(position) + { + case 0: + changeTitleInHeader("Tell us a few things about yourself"); + break; + + case 1: + changeTitleInHeader("Welcome To Form 2"); + break; + + case 2: + changeTitleInHeader("Welcome To Form 3"); + break; + } + } + + @Override + public void onPageScrollStateChanged(int state) { + } + @Override + public void onClick(View v) { + switch(v.getId()) + { + case R.id.iv_back: + onBackPressed(); + break; + } + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view1/KYCView1Fragment.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view1/KYCView1Fragment.java index 21bd148a..da433387 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view1/KYCView1Fragment.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view1/KYCView1Fragment.java @@ -23,6 +23,7 @@ import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseFragment; import com.gmeremit.online.gmeremittance_native.exchange_rate.view.SelectedRedBorderDecoration; import com.gmeremit.online.gmeremittance_native.kycV2.KYCV2ActionListener; +import com.gmeremit.online.gmeremittance_native.kycV2.adapter.KycViewPagerAdapter; import com.gmeremit.online.gmeremittance_native.sendmoneyV2.adapter.SendMoneyPayoutModeRvAdapter; import com.gmeremit.online.gmeremittance_native.sendmoneyV2.model.payoutmode.AccountValidationApiResponse; import com.gmeremit.online.gmeremittance_native.sendmoneyV2.model.payoutmode.BankList; @@ -101,8 +102,6 @@ public class KYCView1Fragment extends BaseFragment implements View.OnClickListe - - @Override public void onClick(View v) { ((KYCV2ActionListener)getActivity()).showView2(); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view2/KYCView2Fragment.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view2/KYCView2Fragment.java index 0a8697b5..0e4c02b8 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view2/KYCView2Fragment.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view2/KYCView2Fragment.java @@ -10,6 +10,7 @@ import android.view.ViewGroup; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseFragment; +import com.gmeremit.online.gmeremittance_native.kycV2.adapter.KycViewPagerAdapter; import butterknife.ButterKnife; import io.reactivex.disposables.CompositeDisposable; @@ -89,8 +90,6 @@ public class KYCView2Fragment extends BaseFragment implements View.OnClickListe - - @Override public void onClick(View v) { switch (v.getId()) { diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view3/KYCView3Fragment.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view3/KYCView3Fragment.java index 6c095e74..8ef5651d 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view3/KYCView3Fragment.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV2/view/view3/KYCView3Fragment.java @@ -10,6 +10,7 @@ import android.view.ViewGroup; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseFragment; +import com.gmeremit.online.gmeremittance_native.kycV2.adapter.KycViewPagerAdapter; import butterknife.ButterKnife; import io.reactivex.disposables.CompositeDisposable; @@ -55,6 +56,7 @@ public class KYCView3Fragment extends BaseFragment implements View.OnClickListe } + @Override public void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java index 544a8f7d..62ecaa0b 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java @@ -10,6 +10,9 @@ import com.gmeremit.online.gmeremittance_native.utils.Utils; import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponse; import com.google.firebase.iid.FirebaseInstanceId; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; @@ -30,13 +33,32 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres @Override public boolean validatePasswords(String pwdString, String pwdConfrimString) { + + if(pwdConfrimString==null||pwdConfrimString.length()<1) + { + this.view.setConfirmPasswordError("Password cannot be empty"); + return false; + } + if (pwdString.length()>1&&pwdString.length()<9) { + this.view.setPasswordError("Password must be at least 9 characters"); + return false; + } + + if (!Utils.hasSpecialCharacters(pwdString)) { + this.view.setPasswordError("Password must include at least one special character"); + return false; + } + + if (!Utils.hasNumbers(pwdString)) { + this.view.setPasswordError("Password must include at least one number"); + return false; + } if (!pwdString.equalsIgnoreCase(pwdConfrimString)) { - this.view.setConfirmPasswordError("Confirm password doesnot match."); + this.view.setPasswordError("Confirm password does not match"); return false; } view.setConfirmPasswordError(null); view.setPasswordError(null); - view.setUserIdError(null); return true; } @@ -69,11 +91,26 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres @Override public boolean validateDob(String dobString) { - + if(dobString==null||dobString.length()<1) + { + view.setDobError("Please enter a valid dob"); + return false; + } view.setDobError(null); return true; } + @Override + public boolean validateEmail(String emailId) { + if(!Utils.isValidEmail(emailId)) + { + this.view.setUserIdError("Please enter a valid email id"); + return false; + } + this.view.setUserIdError(null); + return true; + } + @Override public void onViewDestroyed() { super.onViewDestroyed(); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2PresenterInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2PresenterInterface.java index 9ea98ea1..10693c89 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2PresenterInterface.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2PresenterInterface.java @@ -12,6 +12,8 @@ public interface RegisterV2PresenterInterface extends BasePresenterInterface { boolean validateDob(String dobString); + boolean validateEmail(String emailId); + interface RegisterV2ContractInterface extends BaseContractInterface { void setConfirmPasswordError(String error); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java index e7ed53b8..060c5162 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java @@ -111,7 +111,7 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen break; case R.id.btn_submit: - if(presenter.validatePasswords(passwordTextView.getText().toString(),confirmPasswordTextView.getText().toString())&&presenter.validateDob(ed_dob.getText().toString())) + if(presenter.validateEmail(emailMobileTextView.getText().toString())&&presenter.validateDob(ed_dob.getText().toString())&&presenter.validatePasswords(passwordTextView.getText().toString(),confirmPasswordTextView.getText().toString())) presenter.registerUser(emailMobileTextView.getText().toString(),passwordTextView.getText().toString(),ed_dob.getText().toString()); break; } @@ -121,8 +121,9 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen Calendar newDate = Calendar.getInstance(); newDate.set(year, monthOfYear, dayOfMonth); Log.d("year", year + monthOfYear + dayOfMonth + " ---"); - ed_dob.setText(new SimpleDateFormat("yyyy/dd/MM", Locale.US).format(newDate.getTime())); + presenter.validateDob(ed_dob.getText().toString()); + }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis()); @@ -132,21 +133,38 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen } @Override public void setConfirmPasswordError(String error) { + if(error==null) + confirmpassWrapper.setErrorEnabled(false); + else + confirmpassWrapper.setErrorEnabled(true); confirmpassWrapper.setError(error); + } @Override public void setPasswordError(String error) { + if(error==null) + passwordWrapper.setErrorEnabled(false); + else + passwordWrapper.setErrorEnabled(true); passwordWrapper.setError(error); } @Override public void setDobError(String error) { + if(error==null) + dobWrapper.setErrorEnabled(false); + else + dobWrapper.setErrorEnabled(true); dobWrapper.setError(error); } @Override public void setUserIdError(String error) { + if(error==null) + useridWrapper.setErrorEnabled(false); + else + useridWrapper.setErrorEnabled(true); useridWrapper.setError(error); } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/Utils.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/Utils.java index dc069524..f602bddb 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/Utils.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/Utils.java @@ -51,6 +51,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import retrofit2.Call; import retrofit2.Callback; @@ -514,4 +516,26 @@ public class Utils { return firstName.substring(0, 1).toUpperCase(); } } + + public static boolean hasSpecialCharacters(String inputString) + { + String spcialCharPatternToMatch = "[\\\\!\"#$%&()*+,./:;<=>?@\\[\\]^_{|}~]+"; + Pattern specialPatternMatcher = Pattern.compile(spcialCharPatternToMatch); + Matcher specialMatcher = specialPatternMatcher.matcher(inputString); + return specialMatcher.find(); + } + + public static boolean hasNumbers(String inputString) + { + String spcialCharPatternToMatch = "[0-9]+"; + Pattern specialPatternMatcher = Pattern.compile(spcialCharPatternToMatch); + Matcher specialMatcher = specialPatternMatcher.matcher(inputString); + return specialMatcher.find(); + } + + public static boolean hasNumbersOnly(String inputString) + { + return inputString.matches("^\\d+$"); + } + } diff --git a/app/src/main/res/layout/activity_register_v2.xml b/app/src/main/res/layout/activity_register_v2.xml index 6b3ff9f2..54633f6d 100644 --- a/app/src/main/res/layout/activity_register_v2.xml +++ b/app/src/main/res/layout/activity_register_v2.xml @@ -43,7 +43,7 @@ android:id="@+id/loginText" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Register with your email address or mobile number" + android:text="Register with your email address " android:textSize="14sp" android:paddingTop="8dp" android:paddingBottom="8dp" diff --git a/app/src/main/res/layout/dummykyc.xml b/app/src/main/res/layout/dummykyc.xml index 49a7976f..29508d67 100644 --- a/app/src/main/res/layout/dummykyc.xml +++ b/app/src/main/res/layout/dummykyc.xml @@ -23,97 +23,44 @@ app:statusBarScrim="@android:color/transparent" app:layout_scrollFlags="scroll|exitUntilCollapsed"> - - - + + + + + + + + - - - - - - + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout/fragment_kyc_view1_v2.xml b/app/src/main/res/layout/fragment_kyc_view1_v2.xml index 47901eb3..f561fe33 100644 --- a/app/src/main/res/layout/fragment_kyc_view1_v2.xml +++ b/app/src/main/res/layout/fragment_kyc_view1_v2.xml @@ -3,17 +3,14 @@ android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" > - - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_kyc_view2_v2.xml b/app/src/main/res/layout/fragment_kyc_view2_v2.xml index 41cfef5d..942d3b0b 100644 --- a/app/src/main/res/layout/fragment_kyc_view2_v2.xml +++ b/app/src/main/res/layout/fragment_kyc_view2_v2.xml @@ -3,6 +3,9 @@ android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" > + android:src="@drawable/ic_help" + android:layout_alignParentEnd="true" />