diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/common/model/FormInputStateDTO.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/common/model/FormInputStateDTO.java index 48bccd2d..737ee9cf 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/common/model/FormInputStateDTO.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/common/model/FormInputStateDTO.java @@ -1,13 +1,22 @@ package com.gmeremit.online.gmeremittance_native.common.model; -public class FormInputStateDTO { +public class FormInputStateDTO { private boolean isValid; private String errorMessage; + private T data; - public FormInputStateDTO(boolean isValid, String errorMessage) { + public FormInputStateDTO(boolean isValid, String errorMessage) + { this.isValid = isValid; this.errorMessage = errorMessage; + this.data=null; + } + + public FormInputStateDTO(boolean isValid, String errorMessage,T data) { + this.isValid = isValid; + this.errorMessage = errorMessage; + this.data=data; } public boolean isValid() { @@ -17,4 +26,14 @@ public class FormInputStateDTO { public String getErrorMessage() { return errorMessage; } + + public T getData() { + return data; + } + + public boolean hasData() + { + return data!=null; + + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java index 6a2d11a6..cb63cd77 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java @@ -3,8 +3,6 @@ package com.gmeremit.online.gmeremittance_native.loginV2.presenter; import android.util.Log; import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseViewModel; @@ -12,7 +10,6 @@ import com.gmeremit.online.gmeremittance_native.common.model.FormInputStateDTO; import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog; import com.gmeremit.online.gmeremittance_native.loginV2.gateway.LoginV2Gateway; import com.gmeremit.online.gmeremittance_native.loginV2.model.LoginModelV2; -import com.gmeremit.online.gmeremittance_native.loginV2.view.LoginViewLiveData; import com.gmeremit.online.gmeremittance_native.security.GMEAuthManager; import com.gmeremit.online.gmeremittance_native.security.model.GMEAuthFailedResult; import com.gmeremit.online.gmeremittance_native.security.model.GMEAuthSuccessResult; @@ -55,7 +52,7 @@ public class LoginV2Presenter extends BaseViewModel implements LoginV2PresenterI @Override public void loginUser() { useCaseCompositeDisposable.add( - this.gateway.loginUser(gateway.getBasicAuth(view.getContext()), loginValidator.userId, loginValidator.userId) + this.gateway.loginUser(gateway.getBasicAuth(view.getContext()), loginValidator.userId, loginValidator.password) .subscribeOn(Schedulers.io()) .flatMap(loginResponse -> { if (loginResponse.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { @@ -73,6 +70,7 @@ public class LoginV2Presenter extends BaseViewModel implements LoginV2PresenterI @Override public LoginViewLiveData getLoginRelatedViewEvents(LoginViewLiveData.LoginViewBindings viewBindings) { bindView(viewBindings); + getLastLoginIfAvailable(); return loginViewLiveData; } @@ -153,9 +151,11 @@ public class LoginV2Presenter extends BaseViewModel implements LoginV2PresenterI } @Override - public String getLastLoginIfAvailable() { - Log.d("GMELOGIN", "User Id: " + gateway.getUserID()); - return gateway.getUserID(); + public void getLastLoginIfAvailable() { + String userID = gateway.getUserID(); + userID="TODO Mocked"; + if (userID != null && userID.length() > 0) + loginViewLiveData.setUserIdInputLiveData(new FormInputStateDTO<>(true, "", userID)); } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2PresenterInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2PresenterInterface.java index 5f39cd91..a7198e67 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2PresenterInterface.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2PresenterInterface.java @@ -2,21 +2,8 @@ package com.gmeremit.online.gmeremittance_native.loginV2.presenter; import android.content.Context; -import androidx.lifecycle.LiveData; - import com.gmeremit.online.gmeremittance_native.base.BaseContractInterface; import com.gmeremit.online.gmeremittance_native.base.BasePresenterInterface; -import com.gmeremit.online.gmeremittance_native.common.model.FormInputStateDTO; -import com.gmeremit.online.gmeremittance_native.loginV2.view.LoginViewLiveData; -import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.CountryDetailModel; -import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.DistrictDetailModel; -import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.ProvinceDetailModel; -import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.RecipientRelatedModel; -import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.RelationDetailModel; -import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.TransferDetailModel; -import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientlisting.RecipientInfoModel; - -import io.reactivex.Observable; public interface LoginV2PresenterInterface extends BasePresenterInterface { @@ -34,7 +21,7 @@ public interface LoginV2PresenterInterface extends BasePresenterInterface { void setSessionEnabled(); - String getLastLoginIfAvailable(); + void getLastLoginIfAvailable(); interface LoginV2ContractInterface extends BaseContractInterface { diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginViewLiveData.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginViewLiveData.java similarity index 83% rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginViewLiveData.java rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginViewLiveData.java index dc0a920e..91dc137d 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginViewLiveData.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginViewLiveData.java @@ -1,4 +1,4 @@ -package com.gmeremit.online.gmeremittance_native.loginV2.view; +package com.gmeremit.online.gmeremittance_native.loginV2.presenter; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -9,8 +9,8 @@ import io.reactivex.Observable; public class LoginViewLiveData { - private MutableLiveData userIdInputLiveData; - private MutableLiveData passwordInputLiveData; + private MutableLiveData> userIdInputLiveData; + private MutableLiveData> passwordInputLiveData; private MutableLiveData allFormValidLiveData; public LoginViewLiveData() { @@ -19,7 +19,7 @@ public class LoginViewLiveData { allFormValidLiveData=new MutableLiveData<>(); } - public LiveData getUserIdInputLiveData() { + public LiveData> getUserIdInputLiveData() { return userIdInputLiveData; } @@ -27,7 +27,7 @@ public class LoginViewLiveData { this.userIdInputLiveData.setValue(userIdInputLiveData); } - public LiveData getPasswordInputLiveData() { + public LiveData> getPasswordInputLiveData() { return passwordInputLiveData; } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java index 88e11d03..b603a514 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java @@ -7,13 +7,11 @@ import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; -import android.widget.ProgressBar; import android.widget.ScrollView; import android.widget.TextView; import androidx.appcompat.app.AppCompatDelegate; import androidx.lifecycle.ViewModelProvider; -import androidx.lifecycle.ViewModelProviders; import com.facebook.shimmer.ShimmerFrameLayout; import com.gmeremit.online.gmeremittance_native.R; @@ -24,6 +22,7 @@ import com.gmeremit.online.gmeremittance_native.kycV2.view.pennytest.PennyTestAc import com.gmeremit.online.gmeremittance_native.loginV2.LoginViewModelFactory; import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginV2Presenter; import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginV2PresenterInterface; +import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginViewLiveData; import com.gmeremit.online.gmeremittance_native.registerV2.view.RegisterV2Activity; import com.gmeremit.online.gmeremittance_native.resetpassV2.view.ResetPassV2Activity; import com.google.android.material.textfield.TextInputEditText; @@ -121,9 +120,7 @@ public class LoginV2Activity extends BaseActivity implements View.OnClickListene } - String userID = presenter.getLastLoginIfAvailable(); - if (userID != null && userID.length() > 0) - usernameId.setText(userID); + } @@ -134,10 +131,13 @@ public class LoginV2Activity extends BaseActivity implements View.OnClickListene passwordTxtInputLayout.setError(formInputStateDTO.getErrorMessage()); } - private void showUserIdError(FormInputStateDTO formInputStateDTO) { - if (formInputStateDTO.isValid()) + private void showUserIdError(FormInputStateDTO formInputStateDTO) { + if (formInputStateDTO.isValid()) { usernameIdTxtInputLayout.setError(null); - else + if (formInputStateDTO.hasData()) { + usernameId.setText(formInputStateDTO.getData()); + } + } else usernameIdTxtInputLayout.setError(formInputStateDTO.getErrorMessage()); } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/RegisterViewModelFactory.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/RegisterViewModelFactory.java new file mode 100644 index 00000000..4d98d532 --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/RegisterViewModelFactory.java @@ -0,0 +1,28 @@ +package com.gmeremit.online.gmeremittance_native.registerV2; + +import androidx.annotation.NonNull; +import androidx.lifecycle.ViewModel; +import androidx.lifecycle.ViewModelProvider; + +import com.gmeremit.online.gmeremittance_native.loginV2.gateway.LoginV2Gateway; +import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginV2Presenter; +import com.gmeremit.online.gmeremittance_native.loginV2.presenter.LoginV2PresenterInterface; +import com.gmeremit.online.gmeremittance_native.registerV2.gateway.RegisterV2Gateway; +import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterV2Presenter; +import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterV2PresenterInterface; + +public class RegisterViewModelFactory implements ViewModelProvider.Factory { + + private final RegisterV2PresenterInterface.RegisterV2ContractInterface view; + + public RegisterViewModelFactory(RegisterV2PresenterInterface.RegisterV2ContractInterface view) { + this.view=view; + } + + @SuppressWarnings("unchecked") + @NonNull + @Override + public T create(@NonNull Class modelClass) { + return (T) new RegisterV2Presenter(view,new RegisterV2Gateway(),new LoginV2Gateway()); + } +} 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 5fdaa6a6..34a79743 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 @@ -2,7 +2,8 @@ package com.gmeremit.online.gmeremittance_native.registerV2.presenter; import com.gmeremit.online.gmeremittance_native.GmeApplication; import com.gmeremit.online.gmeremittance_native.R; -import com.gmeremit.online.gmeremittance_native.base.BasePresenter; +import com.gmeremit.online.gmeremittance_native.base.BaseViewModel; +import com.gmeremit.online.gmeremittance_native.common.model.FormInputStateDTO; import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog; import com.gmeremit.online.gmeremittance_native.kycV2.model.kyc.NativeCountry; import com.gmeremit.online.gmeremittance_native.loginV2.model.LoginModelV2; @@ -25,38 +26,39 @@ import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers; -public class RegisterV2Presenter extends BasePresenter implements RegisterV2PresenterInterface, RegisterV2InteractorInterface { +public class RegisterV2Presenter extends BaseViewModel implements RegisterV2PresenterInterface, RegisterV2InteractorInterface { private final Register2GatewayInterface registerGateway; private final RegisterV2ContractInterface view; private final LoginV2InteractorInterface.Login2GatewayInterface loginGateway; - private CompositeDisposable compositeDisposable; + + private final CompositeDisposable useCaseCompositeDisposable; + private final CompositeDisposable viewEventCompositeDisposable; + private final RegisterViewLiveData registerViewLiveData; + private final RegisterValidator registerValidator; private List nativeCountryList; - private NativeCountry selectedNativeCountry; - private String enteredEncPassword; - private String selectedUserId; - private String selectedMobileNumber; - private boolean isSelectedNativeCountryValid; - private boolean isSelectedUserIdValid; - private boolean isSelectedMobileNoValid; - private boolean isEnteredPasswordValid; - private String registrationSuccessMessage=""; + + + private String registrationSuccessMessage = ""; public RegisterV2Presenter(RegisterV2PresenterInterface.RegisterV2ContractInterface view, Register2GatewayInterface registerGateway, LoginV2InteractorInterface.Login2GatewayInterface loginGateway) { this.view = view; - compositeDisposable = new CompositeDisposable(); + useCaseCompositeDisposable = new CompositeDisposable(); + viewEventCompositeDisposable = new CompositeDisposable(); this.registerGateway = registerGateway; this.loginGateway = loginGateway; - enteredEncPassword = ""; + registerViewLiveData = new RegisterViewLiveData(); + registerValidator = new RegisterValidator(); + getDefaultData(); } private void getDefaultData() { - this.compositeDisposable.add( + this.useCaseCompositeDisposable.add( this.registerGateway.getNativeCountryList(view.getContext()).subscribe(nativeCountryList -> this.nativeCountryList = nativeCountryList)); } @@ -75,13 +77,13 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres if (fcmID == null || fcmID.length() < 1) fcmID = this.registerGateway.getLastKnownFcmId(); - compositeDisposable.add( + useCaseCompositeDisposable.add( this.registerGateway.registerUser( registerGateway.getBasicAuth(view.getContext()), - selectedUserId, - this.enteredEncPassword, - selectedMobileNumber, - selectedNativeCountry.getId(), + registerValidator.userId, + registerValidator.password, + registerValidator.phoneNumber, + registerValidator.nativeCountry.getId(), "172017F9EC11222E8107142733", fcmID, appRelatedMetaData.getAppVersion(), @@ -96,49 +98,48 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres ); } - @Override - public void updateSelectedNativeCountry(NativeCountry seletedNativeCountry) { - this.selectedNativeCountry = seletedNativeCountry; - isSelectedNativeCountryValid = seletedNativeCountry != null; - if (!isSelectedNativeCountryValid) - view.setNativeCountryError(getStringfromStringId(R.string.kyc_native_country_error)); - else { - view.setNativeCountryError(null); - view.setSelectedNativeCountry(selectedNativeCountry.toString()); - } - validateAll(); + public RegisterViewLiveData getRegisterRelatedViewEvents(RegisterViewLiveData.RegisterViewBinding viewBindings) { + bindView(viewBindings); + return registerViewLiveData; } + private void bindView(RegisterViewLiveData.RegisterViewBinding viewBindings) { + this.viewEventCompositeDisposable.add( + Observable.combineLatest( + viewBindings.getUserIdInputObservable().map(registerValidator::validateUserId), + viewBindings.getPasswordInputLiveData().map(registerValidator::validatePassword), + viewBindings.getPhoneNumberInputObservable().map(registerValidator::validatePhoneNumber), + viewBindings.getNativeCountryObservable().map(registerValidator::validateNativeCountry), + (isUserIdValid, isPasswordValid, isPhoneNumberValid, isNativeCountryValid) -> + isUserIdValid && isPasswordValid && isPhoneNumberValid && isNativeCountryValid).subscribeWith(new DisposableObserver() { + + @Override + public void onNext(Boolean result) { + registerViewLiveData.setAllFormValidLiveData(new FormInputStateDTO(result, "")); + } + + @Override + public void onError(Throwable e) { + registerViewLiveData.setAllFormValidLiveData(new FormInputStateDTO(false, "")); + } - @Override - public void updateMobileNumber(String mobileNumber) { - if (!checkStringNotEmpty(mobileNumber)) { - isSelectedMobileNoValid = false; - selectedMobileNumber = ""; - view.setMobileError(getStringfromStringId(R.string.kyc_mobile_empty_error)); - - } else if (mobileNumber.length() < 9 || mobileNumber.length() > 11) { - selectedMobileNumber = ""; - isSelectedMobileNoValid = false; - view.setMobileError(getStringfromStringId(R.string.kyc_mobile_invalid_number_error)); - } else { - isSelectedMobileNoValid = true; - view.setMobileError(null); - selectedMobileNumber = mobileNumber; + @Override + public void onComplete() { - } - validateAll(); + } + }) + ); } - @Override + public List getNativeCountryList() { return nativeCountryList; } public void performLoginInternally() { - this.loginGateway.loginUser(loginGateway.getBasicAuth(view.getContext()), selectedUserId, enteredEncPassword) + this.loginGateway.loginUser(loginGateway.getBasicAuth(view.getContext()), registerValidator.userId, registerValidator.password) .subscribeOn(Schedulers.io()) .flatMap(loginResponse -> { if (loginResponse.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { @@ -154,41 +155,22 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres @Override public void validateUserIdRealtime(String userID) { - perfromUserIDValidationFromApi(userID); + perfromUserIDValidationFromApi(userID); } @Override public String getLastRegisteredUserId() { - return selectedUserId; + return registerValidator.userId; } @Override public String getLastRegisteredUserPwd() { - return enteredEncPassword; + return registerValidator.password; } - @Override - public void updateId(String id) { - selectedUserId = id; - if (!checkStringNotEmpty(id)) { - view.registerUserIdNumberListeners(false); - isSelectedUserIdValid = false; - view.setUserIdError(getStringfromStringId(R.string.user_id_empty_error)); - - } else if (id.length() < 4 || id.length() >= 50) { - isSelectedUserIdValid = false; - view.registerUserIdNumberListeners(false); - view.setUserIdError(getStringfromStringId(R.string.userid_error_text)); - } else { - view.setUserIdError(null); - view.registerUserIdNumberListeners(true); - } - validateAll(); - - } private void perfromUserIDValidationFromApi(String userId) { - compositeDisposable.add(this.registerGateway.validateParameters(userId) + useCaseCompositeDisposable.add(this.registerGateway.validateParameters(userId) .delay(300, TimeUnit.MILLISECONDS) .doOnSubscribe(d -> view.showProgressBar(true, getStringfromStringId(R.string.processing_request_text))) .subscribeOn(Schedulers.io()) @@ -198,42 +180,35 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres } + @Override - public void updatePassword(String encUpdatedPassword, int lengthValue) { - if (lengthValue >= 6) { - this.enteredEncPassword = encUpdatedPassword; - isEnteredPasswordValid = true; - view.setPasswordError(null); - } else { - this.enteredEncPassword = ""; - isEnteredPasswordValid = false; - view.setPasswordError(getStringfromStringId(R.string.password_policy_text)); - } - validateAll(); + public void onViewReady() { + } - private void validateAll() { - view.enableSubmitButton(isSelectedMobileNoValid && isSelectedUserIdValid && isSelectedNativeCountryValid && isEnteredPasswordValid); + @Override + public void onViewNotReady() { + } @Override public void onViewDestroyed() { super.onViewDestroyed(); - if (compositeDisposable != null & !compositeDisposable.isDisposed()) { - compositeDisposable.dispose(); - compositeDisposable.clear(); + if (useCaseCompositeDisposable != null & !useCaseCompositeDisposable.isDisposed()) { + useCaseCompositeDisposable.dispose(); + useCaseCompositeDisposable.clear(); } } private void persistUserCredentialForFingerprintAuth(String userId, String pwd, LoginModelV2 loginModelV2) { SecurityUtils.generateKey() - .doOnSubscribe(subs->view.showProgressBar(true,getStringfromStringId(R.string.processing_request_text))) + .doOnSubscribe(subs -> view.showProgressBar(true, getStringfromStringId(R.string.processing_request_text))) .flatMap(key -> Observable.zip(Observable.just(userId), SecurityUtils.encryptUsingAES(pwd, key).subscribeOn(Schedulers.io()), encryptByKeyStore(key).subscribeOn(Schedulers.io()), FingerprintEncResult::new) ).observeOn(AndroidSchedulers.mainThread()) - .doFinally(()->view.showProgressBar(false,"")) + .doFinally(() -> view.showProgressBar(false, "")) .subscribe(new FingerprintEncResultObserver(loginModelV2)); } @@ -241,38 +216,99 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres return SecurityUtils.encryptUsingKeyStore(view.getContext(), data).flatMap(encKey -> Observable.just(encKey.getEncrypted())); } + class RegisterValidator { + + private String userId; + private String password; + private String phoneNumber; + private NativeCountry nativeCountry; + + private boolean validateUserId(CharSequence userID) { + + if (userID == null || userID.length() < 1) { + registerViewLiveData.setUserIdInputLiveData(new FormInputStateDTO<>(false, getStringfromStringId(R.string.user_id_empty_error))); + this.userId = null; + return false; + } else { + registerViewLiveData.setUserIdInputLiveData(new FormInputStateDTO<>(true, "")); + this.userId = userID.toString(); + return true; + } + } + + private boolean validatePassword(CharSequence password) { + + if (password == null || password.length() < 1) { + registerViewLiveData.setPasswordInputLiveData(new FormInputStateDTO<>(false, getStringfromStringId(R.string.password_empty_error))); + this.password = null; + return false; + } else { + registerViewLiveData.setPasswordInputLiveData(new FormInputStateDTO<>(true, "")); + this.password = password.toString(); + return true; + } + + + } + + public boolean validatePhoneNumber(CharSequence phoneNumber) { + + if (phoneNumber == null || phoneNumber.length() < 1) { + registerViewLiveData.setPhoneNumberInputLiveData(new FormInputStateDTO<>(false, getStringfromStringId(R.string.kyc_mobile_empty_error))); + this.phoneNumber = null; + return false; + } else { + registerViewLiveData.setPasswordInputLiveData(new FormInputStateDTO<>(true, "")); + this.phoneNumber = phoneNumber.toString(); + return true; + } + } + + public boolean validateNativeCountry(NativeCountry nativeCountry) { + if (nativeCountry == null) { + registerViewLiveData.setNativeCountryInputLiveData(new FormInputStateDTO<>(false, getStringfromStringId(R.string.kyc_native_country_error))); + this.nativeCountry = null; + return false; + } else { + registerViewLiveData.setPasswordInputLiveData(new FormInputStateDTO<>(true, "")); + this.nativeCountry = nativeCountry; + return true; + } + } + } + public class RegistrationObserver extends GenericApiObserverResponse { @Override protected void onSuccess(RegisterApiResponse responseBody) { if (responseBody.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { - registerGateway.saveUserId(selectedUserId); - registrationSuccessMessage=responseBody.getMsg(); + registerGateway.saveUserId(registerValidator.userId); + registrationSuccessMessage = responseBody.getMsg(); performLoginInternally(); } else { - view.showProgressBar(false,""); + view.showProgressBar(false, ""); view.showPopUpMessage(responseBody.getMsg(), CustomAlertDialog.AlertType.FAILED, null); } } @Override public void onFailed(String message) { - view.showProgressBar(false,""); + view.showProgressBar(false, ""); registerGateway.saveUserId(""); view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, null); } @Override protected void onConnectionNotEstablished(String message) { - view.showProgressBar(false,""); + view.showProgressBar(false, ""); view.showPopUpMessage(message, CustomAlertDialog.AlertType.NO_INTERNET, null); } @Override protected void unauthorizedAccess(String message) { - view.showProgressBar(false,""); + view.showProgressBar(false, ""); registerGateway.clearAllUserData(); view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); @@ -284,27 +320,27 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres @Override protected void onSuccess(LoginModelV2 loginResponse) { - persistUserCredentialForFingerprintAuth(selectedUserId, enteredEncPassword, loginResponse); + persistUserCredentialForFingerprintAuth(registerValidator.userId, registerValidator.password, loginResponse); } @Override public void onFailed(String message) { - view.showProgressBar(false,""); + view.showProgressBar(false, ""); registerGateway.clearAllUserData(); view.redirectToSplash(); } @Override protected void onConnectionNotEstablished(String message) { - view.showProgressBar(false,""); + view.showProgressBar(false, ""); registerGateway.clearAllUserData(); view.redirectToSplash(); } @Override protected void unauthorizedAccess(String message) { - view.showProgressBar(false,""); + view.showProgressBar(false, ""); registerGateway.clearAllUserData(); view.redirectToSplash(); } @@ -355,7 +391,7 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres @Override public void onNext(FingerprintEncResult fingerprintEncResult) { - view.showProgressBar(false,""); + view.showProgressBar(false, ""); registerGateway.persistSecretKeyForBiometric(fingerprintEncResult.getEncKey()); registerGateway.persistUserPwdForBiometric(fingerprintEncResult.getEncPwd()); registerGateway.persistUserIdForBiometric(fingerprintEncResult.getUserId()); @@ -365,12 +401,11 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres }); - } @Override public void onError(Throwable e) { - view.showProgressBar(false,""); + view.showProgressBar(false, ""); view.redirectToTermsAndConditionScreen(); } @@ -386,34 +421,26 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres @Override protected void onSuccess(GenericResponseDataModel t) { if (t.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { - isSelectedUserIdValid = true; - view.setUserIdError(null); - validateAll(); + } else { - isSelectedUserIdValid = false; - view.setUserIdError(t.getMsg()); - validateAll(); + } - view.registerUserIdNumberListeners(false); view.setUserIdFocus(false); } @Override public void onFailed(String message) { - isSelectedUserIdValid = false; view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, null); } @Override protected void onConnectionNotEstablished(String message) { - isSelectedUserIdValid = false; view.showPopUpMessage(message, CustomAlertDialog.AlertType.NO_INTERNET, null); } @Override protected void unauthorizedAccess(String message) { - isSelectedUserIdValid = false; registerGateway.clearAllUserData(); view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); } 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 6929078c..e5ce64be 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 @@ -4,9 +4,6 @@ import android.content.Context; import com.gmeremit.online.gmeremittance_native.base.BaseContractInterface; import com.gmeremit.online.gmeremittance_native.base.BasePresenterInterface; -import com.gmeremit.online.gmeremittance_native.kycV2.model.kyc.NativeCountry; - -import java.util.List; public interface RegisterV2PresenterInterface extends BasePresenterInterface { @@ -14,18 +11,12 @@ public interface RegisterV2PresenterInterface extends BasePresenterInterface { void registerUser(); + RegisterViewLiveData getRegisterRelatedViewEvents(RegisterViewLiveData.RegisterViewBinding viewBindings); - void updateId(String id); - - void updatePassword(String encUpdatedPassword,int length); - - void updateSelectedNativeCountry(NativeCountry selectedNativeCountry); - void updateMobileNumber(String mobileNumber); - List getNativeCountryList(); void validateUserIdRealtime(String userID); @@ -38,17 +29,9 @@ public interface RegisterV2PresenterInterface extends BasePresenterInterface { interface RegisterV2ContractInterface extends BaseContractInterface { - void setPasswordError(String error); - - void setNativeCountryError(String error); - - void setUserIdError(String error); - - void setMobileError(String error); void redirectToLogin(); - void enableSubmitButton(boolean action); void setSelectedNativeCountry(String selectedNativeCountry); @@ -59,7 +42,6 @@ public interface RegisterV2PresenterInterface extends BasePresenterInterface { void redirectToSplash(); - void registerUserIdNumberListeners(boolean action); void setUserIdFocus(boolean action); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterViewLiveData.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterViewLiveData.java new file mode 100644 index 00000000..47668df7 --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterViewLiveData.java @@ -0,0 +1,100 @@ +package com.gmeremit.online.gmeremittance_native.registerV2.presenter; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + +import com.gmeremit.online.gmeremittance_native.common.model.FormInputStateDTO; +import com.gmeremit.online.gmeremittance_native.kycV2.model.kyc.NativeCountry; + +import io.reactivex.Observable; + +public class RegisterViewLiveData { + + private MutableLiveData> userIdInputLiveData; + private MutableLiveData> passwordInputLiveData; + private MutableLiveData> nativeCountryInputLiveData; + private MutableLiveData> phoneNumberInputLiveData; + private MutableLiveData allFormValidLiveData; + + public RegisterViewLiveData() { + userIdInputLiveData=new MutableLiveData<>(); + passwordInputLiveData=new MutableLiveData<>(); + nativeCountryInputLiveData=new MutableLiveData<>(); + phoneNumberInputLiveData=new MutableLiveData<>(); + allFormValidLiveData=new MutableLiveData<>(); + } + + public LiveData> getUserIdInputLiveData() { + return userIdInputLiveData; + } + + public void setUserIdInputLiveData(FormInputStateDTO userIdInputLiveData) { + this.userIdInputLiveData.setValue(userIdInputLiveData); + } + + public LiveData> getPasswordInputLiveData() { + return passwordInputLiveData; + } + + public void setPasswordInputLiveData(FormInputStateDTO passwordInputLiveData) { + this.passwordInputLiveData.setValue( passwordInputLiveData); + } + + public LiveData> getNativeCountryInputLiveData() { + return nativeCountryInputLiveData; + } + + public void setNativeCountryInputLiveData(FormInputStateDTO passwordInputLiveData) { + this.nativeCountryInputLiveData.setValue( passwordInputLiveData); + } + + + public LiveData> getPhoneNumberInputLiveData() { + return phoneNumberInputLiveData; + } + + public void setPhoneNumberInputLiveData(FormInputStateDTO passwordInputLiveData) { + this.phoneNumberInputLiveData.setValue( passwordInputLiveData); + } + + + + public LiveData getAllFormValidLiveData() { + return allFormValidLiveData; + } + + public void setAllFormValidLiveData(FormInputStateDTO allFormValidLiveData) { + this.allFormValidLiveData.setValue(allFormValidLiveData); + } + + public static class RegisterViewBinding + { + private Observable userIdInputObservable; + private Observable nativeCountryObservable; + private Observable phoneNumberInputObservable; + private Observable passwordInputLiveData; + + public RegisterViewBinding(Observable userIdInputObservable, Observable nativeCountryObservable, Observable phoneNumberInputObservable, Observable passwordInputLiveData) { + this.userIdInputObservable = userIdInputObservable; + this.nativeCountryObservable = nativeCountryObservable; + this.phoneNumberInputObservable = phoneNumberInputObservable; + this.passwordInputLiveData = passwordInputLiveData; + } + + public Observable getUserIdInputObservable() { + return userIdInputObservable; + } + + public Observable getPasswordInputLiveData() { + return passwordInputLiveData; + } + + public Observable getNativeCountryObservable() { + return nativeCountryObservable; + } + + public Observable getPhoneNumberInputObservable() { + return phoneNumberInputObservable; + } + } +} 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 161b84bf..0d9e8812 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 @@ -4,101 +4,93 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.text.Editable; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.View; -import android.view.inputmethod.EditorInfo; import android.widget.Button; -import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import androidx.annotation.Nullable; -import androidx.core.view.GestureDetectorCompat; +import androidx.lifecycle.ViewModelProvider; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseActivity; -import com.gmeremit.online.gmeremittance_native.customwidgets.GmeEditText; +import com.gmeremit.online.gmeremittance_native.common.model.FormInputStateDTO; import com.gmeremit.online.gmeremittance_native.customwidgets.GmeErrorTextView; -import com.gmeremit.online.gmeremittance_native.customwidgets.TextWatcherAdapter; import com.gmeremit.online.gmeremittance_native.customwidgets.common.GenericTextListingDialog; import com.gmeremit.online.gmeremittance_native.homeV2.view.HomeActivityV2; import com.gmeremit.online.gmeremittance_native.kycV2.model.kyc.NativeCountry; import com.gmeremit.online.gmeremittance_native.kycV3.view.KYCV3Activity; -import com.gmeremit.online.gmeremittance_native.loginV2.gateway.LoginV2Gateway; import com.gmeremit.online.gmeremittance_native.loginV2.view.LoginV2Activity; -import com.gmeremit.online.gmeremittance_native.registerV2.gateway.RegisterV2Gateway; +import com.gmeremit.online.gmeremittance_native.registerV2.RegisterViewModelFactory; import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterV2Presenter; import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterV2PresenterInterface; +import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterViewLiveData; import com.gmeremit.online.gmeremittance_native.termsandcondition.view.TermsAndConditionAcitivity; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; +import com.jakewharton.rxbinding3.widget.RxTextView; import butterknife.BindView; import butterknife.ButterKnife; +import butterknife.OnClick; +import io.reactivex.subjects.PublishSubject; +import io.reactivex.subjects.Subject; import static com.gmeremit.online.gmeremittance_native.kycV3.view.KYCV3Activity.KYC_FORM_REQUEST_CODE; -public class RegisterV2Activity extends BaseActivity implements RegisterV2PresenterInterface.RegisterV2ContractInterface, View.OnClickListener, View.OnTouchListener, View.OnFocusChangeListener, TextView.OnEditorActionListener { +public class RegisterV2Activity extends BaseActivity implements RegisterV2PresenterInterface.RegisterV2ContractInterface { - @BindView(R.id.ed_userId) - GmeEditText ed_userId; - @BindView(R.id.ed_mobile) - EditText ed_mobile; + @BindView(R.id.usernameId_edTxt) + TextInputEditText usernameId; - @BindView(R.id.ed_native_country) - EditText ed_native_country; + @BindView(R.id.usernameId_TxtInputLayout) + TextInputLayout usernameIdTxtInputLayout; - @BindView(R.id.btn_submit) - Button btn_submit; + @BindView(R.id.password_edTxt) + TextInputEditText passwordEdTxt; + + @BindView(R.id.password_TxtInputLayout) + TextInputLayout passwordTxtInputLayout; - @BindView(R.id.userIdErrorTxt) - GmeErrorTextView userIdErrorTxt; + @BindView(R.id.nativeCountry_edTxt) + TextInputEditText nativeCountryEdTxt; - @BindView(R.id.mobileErrorTxt) - GmeErrorTextView mobileErrorTxt; + @BindView(R.id.nativeCountry_TxtInputLayout) + TextInputLayout nativeCountryTxtInputLayout; - @BindView(R.id.passwordErrorTxt) - GmeErrorTextView passwordErrorTxt; + @BindView(R.id.mobile_edTxt) + TextInputEditText mobileEdTxt; + + @BindView(R.id.mobile_TxtInputLayout) + TextInputLayout mobileTxtInputLayout; + + + + @BindView(R.id.btn_submit) + Button btn_submit; - @BindView(R.id.nativeCountryErrorTxt) - GmeErrorTextView nativeCountryErrorTxt; @BindView(R.id.tv_login) TextView tv_login; - @BindView(R.id.ed_native_country_container) - FrameLayout ed_native_country_container; - @BindView(R.id.keypadContainer) - FrameLayout keypadContainer; - - @BindView(R.id.keypadBallon) - RelativeLayout ballonView; @BindView(R.id.scrollView) ScrollView scrollView; - @BindView(R.id.passwordText) - TextView passwordTextView; - - RegisterV2PresenterInterface presenter; - private GestureDetectorCompat dobConatinerClickGestureDetector; + private GenericTextListingDialog nativeCountrylListDialog; + private Subject selectedNativeCountrySubject; + private RegisterViewLiveData registerRelatedViewEvents; - private GenericTextListingDialog nativeCountrylListDialog; - private UserIdTextWatcher userIdTextWatcher; - private MobileNumberTextWatcher mobileNumberTextWatcher; @Override protected void onCreate(Bundle savedInstanceState) { @@ -108,19 +100,81 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen ButterKnife.bind(this); initialize(); performDefaultAction(savedInstanceState); + } private void initialize() { - this.presenter = new RegisterV2Presenter(this, new RegisterV2Gateway(), new LoginV2Gateway()); + selectedNativeCountrySubject= PublishSubject.create(); + this.presenter = new ViewModelProvider(this,new RegisterViewModelFactory(this)).get(RegisterV2Presenter.class); + + registerRelatedViewEvents= this.presenter.getRegisterRelatedViewEvents(new RegisterViewLiveData.RegisterViewBinding( + RxTextView.textChanges(usernameId).skipInitialValue(), + selectedNativeCountrySubject, + RxTextView.textChanges(mobileEdTxt).skipInitialValue(), + RxTextView.textChanges(passwordEdTxt).skipInitialValue() + )); + + registerRelatedViewEvents.getUserIdInputLiveData().observe(this,this::updateUserId); + registerRelatedViewEvents.getPasswordInputLiveData().observe(this,this::updatePassword); + registerRelatedViewEvents.getNativeCountryInputLiveData().observe(this,this::updateNativeCountry); + registerRelatedViewEvents.getPhoneNumberInputLiveData().observe(this,this::updatePhoneNumber); + } - userIdTextWatcher = new UserIdTextWatcher(); - mobileNumberTextWatcher = new MobileNumberTextWatcher(); + private void updatePhoneNumber(FormInputStateDTO data) { + if(data.isValid()) + { + mobileTxtInputLayout.setError(null); + if(data.hasData()) + { + mobileEdTxt.setText(data.getData()); + } - ed_userId.setRegExInputFilter("[a-zA-Z0-9\\-.@_]+"); + } + else + mobileTxtInputLayout.setError(data.getErrorMessage()); + } + private void updateNativeCountry(FormInputStateDTO data) { + if(data.isValid()) + { + nativeCountryTxtInputLayout.setError(null); + if(data.hasData()) + { + nativeCountryEdTxt.setText(data.getData().getText()); + } + } + else + nativeCountryTxtInputLayout.setError(data.getErrorMessage()); + } + private void updatePassword(FormInputStateDTO data) { + if(data.isValid()) + { + passwordTxtInputLayout.setError(null); + if(data.hasData()) + { + passwordEdTxt.setText(data.getData()); + } + + } + else + passwordTxtInputLayout.setError(data.getErrorMessage()); + } + + private void updateUserId(FormInputStateDTO data) { + if(data.isValid()) + { + usernameIdTxtInputLayout.setError(null); + if(data.hasData()) + { + usernameId.setText(data.getData()); + } + + } + else + usernameIdTxtInputLayout.setError(data.getErrorMessage()); } @@ -132,7 +186,6 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen @Override protected void onStart() { super.onStart(); - registerListeners(true); } @@ -140,86 +193,40 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen @Override protected void onStop() { super.onStop(); - registerListeners(false); - - } - - private void registerListeners(boolean action) { - if (action) { - tv_login.setOnClickListener(this); - btn_submit.setOnClickListener(this); - ed_mobile.addTextChangedListener(mobileNumberTextWatcher); - ed_userId.addTextChangedListener(userIdTextWatcher); - } else { - tv_login.setOnClickListener(null); - btn_submit.setOnClickListener(null); - ed_mobile.removeTextChangedListener(mobileNumberTextWatcher); - ed_userId.removeTextChangedListener(userIdTextWatcher); - } - } - - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - return ( dobConatinerClickGestureDetector.onTouchEvent(ev) || super.dispatchTouchEvent(ev)); } - @Override - public void onClick(View v) { - switch (v.getId()) { - case R.id.tv_login: - redirectToLogin(); - break; - - case R.id.btn_submit: - if (btn_submit.isEnabled()) { - hideKeyBoard(); - presenter.registerUser(); - } - break; - } - } - public void promptNativeCountrySelection() { - hideKeyBoard(); - if (nativeCountrylListDialog == null) - nativeCountrylListDialog = new GenericTextListingDialog<>(); - nativeCountrylListDialog.setData(this.presenter.getNativeCountryList()); - nativeCountrylListDialog.setListener(selectedNativeCountry -> - { - presenter.updateSelectedNativeCountry(selectedNativeCountry); - nativeCountrylListDialog.dismiss(); - - }); - nativeCountrylListDialog.setHintAndTitle(getString(R.string.search_country_text), getString(R.string.select_country_text), getString(R.string.no_country_found_text)); - nativeCountrylListDialog.disableSearch(false); - if (!nativeCountrylListDialog.isAdded()) - nativeCountrylListDialog.show(getSupportFragmentManager(), "NATIVECOUNTRYDIALOG"); - } - @Override - public void setPasswordError(String error) { - passwordErrorTxt.setErrorText(error); - } + public void promptNativeCountrySelection() { +// hideKeyBoard(); +// if (nativeCountrylListDialog == null) +// nativeCountrylListDialog = new GenericTextListingDialog<>(); +// +// nativeCountrylListDialog.setData(this.presenter.getNativeCountryList()); +// nativeCountrylListDialog.setListener(selectedNativeCountry -> +// { +// presenter.updateSelectedNativeCountry(selectedNativeCountry); +// nativeCountrylListDialog.dismiss(); +// +// }); +// nativeCountrylListDialog.setHintAndTitle(getString(R.string.search_country_text), getString(R.string.select_country_text), getString(R.string.no_country_found_text)); +// nativeCountrylListDialog.disableSearch(false); +// if (!nativeCountrylListDialog.isAdded()) +// nativeCountrylListDialog.show(getSupportFragmentManager(), "NATIVECOUNTRYDIALOG"); - @Override - public void setNativeCountryError(String error) { - nativeCountryErrorTxt.setErrorText(error); - } - @Override - public void setUserIdError(String error) { - userIdErrorTxt.setErrorText(error); } - @Override - public void setMobileError(String error) { - mobileErrorTxt.setErrorText(error); + @OnClick(R.id.btn_submit) + public void onRegisterBtnClicked() + { + presenter.registerUser(); } @Override @@ -230,14 +237,10 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen finish(); } - @Override - public void enableSubmitButton(boolean action) { - btn_submit.setEnabled(action); - } @Override public void setSelectedNativeCountry(String selectedNativeCountry) { - ed_native_country.setText(selectedNativeCountry); + } @Override @@ -280,25 +283,15 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen restartApp(); } - @Override - public void registerUserIdNumberListeners(boolean action) { - - if (action) { - ed_userId.setOnFocusChangeListener(this); - ed_userId.setOnEditorActionListener(this); - } else { - ed_userId.setOnFocusChangeListener(null); - ed_userId.setOnEditorActionListener(null); - } - } + @Override public void setUserIdFocus(boolean action) { if (action) - ed_userId.requestFocus(); + usernameId.requestFocus(); else - ed_userId.clearFocus(); -// ed_userId.setCursorVisible(action); + usernameId.clearFocus(); +// usernameId.setCursorVisible(action); } @Override @@ -308,58 +301,17 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen } - @Override - public boolean onTouch(View v, MotionEvent event) { - if (v.getId() == R.id.ed_dob_container) { - promptNativeCountrySelection(); - return true; - } - return false; - } + @Override public void onBackPressed() { super.onBackPressed(); } - @Override - public void onFocusChange(View v, boolean hasFocus) { - if (v.getId() == R.id.ed_userId) { - if (!ed_userId.hasFocus()) - presenter.validateUserIdRealtime(ed_userId.getText().toString()); - } - } - @Override - public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - if (v.getId() == R.id.ed_userId) { - if (actionId == EditorInfo.IME_ACTION_DONE) { - hideKeyBoard(); - return true; - } - } - return false; - } - - - - - public class UserIdTextWatcher extends TextWatcherAdapter { - @Override - public void onTextUpdated(String text) { - presenter.updateId(text); - } - } - - public class MobileNumberTextWatcher extends TextWatcherAdapter { - @Override - public void afterTextChanged(Editable s) { - presenter.updateMobileNumber(s.toString()); - } - } } diff --git a/app/src/main/res/drawable/vd_globe.xml b/app/src/main/res/drawable/vd_globe.xml index a6fe20f9..a6eb1eb0 100644 --- a/app/src/main/res/drawable/vd_globe.xml +++ b/app/src/main/res/drawable/vd_globe.xml @@ -6,7 +6,6 @@ - - - - - - - - - - - + app:startIconDrawable="@drawable/vd_user" + > + - - - - /> + + - - + + - - - - - - - + android:layout_height="wrap_content"/> + + + + + + + + + + + + + @dimen/_8sdp @dimen/_4sdp @dimen/_4sdp - @dimen/_6sdp - @dimen/_6sdp + @dimen/_3sdp + @dimen/_3sdp @dimen/_20sdp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1a478466..ec14435f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,7 +80,7 @@ User id cannot be empty Register to Global Money Express - Register with your email city + Register with your email id Create Password Confirm Password Date Of Birth