Browse Source

Register screen refactored started

master
Preyea Regmi 4 years ago
parent
commit
9304e8afba
  1. 23
      app/src/main/java/com/gmeremit/online/gmeremittance_native/common/model/FormInputStateDTO.java
  2. 14
      app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2Presenter.java
  3. 15
      app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginV2PresenterInterface.java
  4. 10
      app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/presenter/LoginViewLiveData.java
  5. 16
      app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java
  6. 28
      app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/RegisterViewModelFactory.java
  7. 255
      app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2Presenter.java
  8. 20
      app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2PresenterInterface.java
  9. 100
      app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterViewLiveData.java
  10. 306
      app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java
  11. 1
      app/src/main/res/drawable/vd_globe.xml
  12. 236
      app/src/main/res/layout/activity_register_v2.xml
  13. 4
      app/src/main/res/values/dimens.xml
  14. 2
      app/src/main/res/values/strings.xml

23
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<T> {
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;
}
}

14
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));
}

15
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 {

10
app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginViewLiveData.java → 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<FormInputStateDTO> userIdInputLiveData;
private MutableLiveData<FormInputStateDTO> passwordInputLiveData;
private MutableLiveData<FormInputStateDTO<String>> userIdInputLiveData;
private MutableLiveData<FormInputStateDTO<String>> passwordInputLiveData;
private MutableLiveData<FormInputStateDTO> allFormValidLiveData;
public LoginViewLiveData() {
@ -19,7 +19,7 @@ public class LoginViewLiveData {
allFormValidLiveData=new MutableLiveData<>();
}
public LiveData<FormInputStateDTO> getUserIdInputLiveData() {
public LiveData<FormInputStateDTO<String>> getUserIdInputLiveData() {
return userIdInputLiveData;
}
@ -27,7 +27,7 @@ public class LoginViewLiveData {
this.userIdInputLiveData.setValue(userIdInputLiveData);
}
public LiveData<FormInputStateDTO> getPasswordInputLiveData() {
public LiveData<FormInputStateDTO<String>> getPasswordInputLiveData() {
return passwordInputLiveData;
}

16
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<String> formInputStateDTO) {
if (formInputStateDTO.isValid()) {
usernameIdTxtInputLayout.setError(null);
else
if (formInputStateDTO.hasData()) {
usernameId.setText(formInputStateDTO.getData());
}
} else
usernameIdTxtInputLayout.setError(formInputStateDTO.getErrorMessage());
}

28
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 extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new RegisterV2Presenter(view,new RegisterV2Gateway(),new LoginV2Gateway());
}
}

255
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<NativeCountry> 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<Boolean>() {
@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<NativeCountry> 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<RegisterApiResponse> {
@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<MessageResponseDataModel> 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());
}

20
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<NativeCountry> 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);

100
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<FormInputStateDTO<String>> userIdInputLiveData;
private MutableLiveData<FormInputStateDTO<String>> passwordInputLiveData;
private MutableLiveData<FormInputStateDTO<NativeCountry>> nativeCountryInputLiveData;
private MutableLiveData<FormInputStateDTO<String>> phoneNumberInputLiveData;
private MutableLiveData<FormInputStateDTO> allFormValidLiveData;
public RegisterViewLiveData() {
userIdInputLiveData=new MutableLiveData<>();
passwordInputLiveData=new MutableLiveData<>();
nativeCountryInputLiveData=new MutableLiveData<>();
phoneNumberInputLiveData=new MutableLiveData<>();
allFormValidLiveData=new MutableLiveData<>();
}
public LiveData<FormInputStateDTO<String>> getUserIdInputLiveData() {
return userIdInputLiveData;
}
public void setUserIdInputLiveData(FormInputStateDTO<String> userIdInputLiveData) {
this.userIdInputLiveData.setValue(userIdInputLiveData);
}
public LiveData<FormInputStateDTO<String>> getPasswordInputLiveData() {
return passwordInputLiveData;
}
public void setPasswordInputLiveData(FormInputStateDTO<String> passwordInputLiveData) {
this.passwordInputLiveData.setValue( passwordInputLiveData);
}
public LiveData<FormInputStateDTO<NativeCountry>> getNativeCountryInputLiveData() {
return nativeCountryInputLiveData;
}
public void setNativeCountryInputLiveData(FormInputStateDTO<NativeCountry> passwordInputLiveData) {
this.nativeCountryInputLiveData.setValue( passwordInputLiveData);
}
public LiveData<FormInputStateDTO<String>> getPhoneNumberInputLiveData() {
return phoneNumberInputLiveData;
}
public void setPhoneNumberInputLiveData(FormInputStateDTO<String> passwordInputLiveData) {
this.phoneNumberInputLiveData.setValue( passwordInputLiveData);
}
public LiveData<FormInputStateDTO> getAllFormValidLiveData() {
return allFormValidLiveData;
}
public void setAllFormValidLiveData(FormInputStateDTO allFormValidLiveData) {
this.allFormValidLiveData.setValue(allFormValidLiveData);
}
public static class RegisterViewBinding
{
private Observable<CharSequence> userIdInputObservable;
private Observable<NativeCountry> nativeCountryObservable;
private Observable<CharSequence> phoneNumberInputObservable;
private Observable<CharSequence> passwordInputLiveData;
public RegisterViewBinding(Observable<CharSequence> userIdInputObservable, Observable<NativeCountry> nativeCountryObservable, Observable<CharSequence> phoneNumberInputObservable, Observable<CharSequence> passwordInputLiveData) {
this.userIdInputObservable = userIdInputObservable;
this.nativeCountryObservable = nativeCountryObservable;
this.phoneNumberInputObservable = phoneNumberInputObservable;
this.passwordInputLiveData = passwordInputLiveData;
}
public Observable<CharSequence> getUserIdInputObservable() {
return userIdInputObservable;
}
public Observable<CharSequence> getPasswordInputLiveData() {
return passwordInputLiveData;
}
public Observable<NativeCountry> getNativeCountryObservable() {
return nativeCountryObservable;
}
public Observable<CharSequence> getPhoneNumberInputObservable() {
return phoneNumberInputObservable;
}
}
}

306
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<NativeCountry> nativeCountrylListDialog;
private Subject<NativeCountry> selectedNativeCountrySubject;
private RegisterViewLiveData registerRelatedViewEvents;
private GenericTextListingDialog<NativeCountry> 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<String> 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<NativeCountry> data) {
if(data.isValid())
{
nativeCountryTxtInputLayout.setError(null);
if(data.hasData())
{
nativeCountryEdTxt.setText(data.getData().getText());
}
}
else
nativeCountryTxtInputLayout.setError(data.getErrorMessage());
}
private void updatePassword(FormInputStateDTO<String> data) {
if(data.isValid())
{
passwordTxtInputLayout.setError(null);
if(data.hasData())
{
passwordEdTxt.setText(data.getData());
}
}
else
passwordTxtInputLayout.setError(data.getErrorMessage());
}
private void updateUserId(FormInputStateDTO<String> 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());
}
}
}

1
app/src/main/res/drawable/vd_globe.xml

@ -6,7 +6,6 @@
<group android:name="globe_path"
android:scaleX=".8"
android:scaleY=".8"
android:translateY="200"
>
<path
android:pathData="M2270,5109c-577,-66 -1106,-322 -1520,-738 -415,-416 -658,-910 -735,-1494 -20,-156 -20,-478 0,-634 77,-584 320,-1079 734,-1494 420,-419 951,-675 1533,-738 123,-14 435,-14 553,-1 590,66 1114,318 1536,739 416,417 657,909 735,1501 22,174 15,553 -15,725 -93,545 -332,1007 -720,1396 -416,415 -920,662 -1501,734 -135,16 -470,19 -600,4zM2121,4803c-228,-245 -401,-493 -548,-787 -30,-61 -57,-113 -58,-114 -14,-15 -406,171 -556,264l-91,56 54,55c29,30 94,87 143,127 295,239 654,409 1021,486 149,31 148,33 35,-87zM3028,4890c367,-74 729,-245 1027,-486 50,-40 114,-97 143,-127l54,-55 -93,-57c-151,-93 -540,-278 -554,-263 -1,1 -28,53 -58,114 -147,294 -317,538 -547,785 -56,60 -95,109 -87,109 8,0 60,-9 115,-20zM2470,4295l0,-575 -63,0c-74,0 -291,24 -402,45 -131,25 -294,66 -300,76 -3,5 19,57 49,117 154,300 380,603 620,830 48,45 89,82 92,82 2,0 4,-259 4,-575zM2836,4698c169,-177 309,-359 431,-563 77,-128 155,-283 148,-295 -6,-9 -171,-50 -300,-75 -111,-21 -328,-45 -402,-45l-63,0 0,576 0,576 39,-31c21,-17 87,-81 147,-143zM807,4037c165,-105 361,-205 543,-277 47,-18 86,-34 88,-36 2,-1 -19,-71 -46,-156 -79,-241 -134,-518 -147,-738 -3,-52 -8,-114 -11,-137l-5,-43 -523,0 -523,0 4,53c17,229 66,463 139,667 49,137 172,380 253,500 62,92 150,210 157,210 2,0 34,-19 71,-43zM4443,4008c135,-181 255,-392 330,-583 77,-193 139,-458 152,-647 4,-46 8,-93 11,-105l4,-23 -524,0 -525,0 -5,43c-3,23 -8,85 -11,137 -14,219 -70,500 -147,738 -27,85 -48,155 -46,156 2,2 41,18 88,36 183,72 397,182 545,279 33,22 63,40 67,40 3,1 31,-32 61,-71zM1723,3636c195,-51 424,-88 640,-102l107,-7 0,-438 0,-439 -525,0 -525,0 0,28c0,144 46,447 99,653 38,147 97,329 108,329 3,0 46,-11 96,-24zM3519,3603c85,-223 156,-564 176,-855l7,-98 -526,0 -526,0 0,439 0,438 108,7c221,15 532,66 672,110 25,8 50,15 56,15 6,1 21,-25 33,-56zM1234,2418c3,-29 10,-111 16,-183 22,-253 87,-547 174,-787 25,-68 42,-126 38,-129 -4,-3 -61,-27 -127,-54 -175,-70 -396,-183 -526,-268l-26,-17 -70,87c-309,384 -488,843 -526,1351l-4,52 523,0 523,0 5,-52zM2470,1986l0,-483 -117,-7c-199,-12 -397,-42 -595,-92 -53,-13 -99,-24 -101,-24 -8,0 -66,156 -103,280 -67,219 -114,477 -129,708l-7,102 526,0 526,0 0,-484zM3695,2368c-15,-231 -62,-489 -129,-708 -37,-124 -95,-280 -103,-280 -2,0 -48,11 -101,24 -204,51 -389,80 -595,92l-117,7 0,483 0,484 526,0 526,0 -7,-102zM4936,2448c-3,-13 -7,-60 -11,-106 -23,-334 -159,-738 -348,-1037 -51,-80 -163,-233 -214,-292l-28,-31 -80,49c-113,70 -329,178 -470,234 -66,27 -123,51 -127,54 -4,3 13,61 38,129 89,246 154,544 175,800 6,75 13,156 15,180l5,42 525,0 524,0 -4,-22zM2470,784l0,-536 -37,30c-89,71 -288,289 -400,437 -109,145 -293,447 -293,481 0,27 373,97 605,113 61,5 113,9 118,10 4,0 7,-240 7,-535zM2805,1305c130,-7 280,-30 440,-66 71,-16 131,-29 132,-29 21,0 -83,-192 -192,-355 -133,-199 -375,-480 -497,-577l-38,-30 0,536 0,536 28,-5c15,-2 72,-7 127,-10zM1566,1118c14,-47 119,-229 209,-363 111,-167 210,-292 346,-437 55,-60 94,-108 86,-108 -36,0 -229,44 -335,76 -322,98 -626,268 -880,492l-73,65 83,49c164,97 490,247 540,248 9,0 20,-10 24,-22zM3673,1109c116,-45 325,-146 436,-211l93,-56 -93,-81c-195,-171 -497,-348 -744,-437 -113,-40 -332,-98 -414,-109l-55,-7 102,108c137,147 236,272 347,439 90,135 215,353 215,375 0,17 26,12 113,-21z"

236
app/src/main/res/layout/activity_register_v2.xml

@ -3,7 +3,6 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
@ -11,12 +10,6 @@
android:background="#fff">
<include layout="@layout/layout_kyc_toolbar"/>
<!--<ImageView-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_alignParentBottom="true"-->
<!--android:src="@drawable/login_footer_image"/>-->
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
@ -43,180 +36,85 @@
android:textSize="@dimen/h5"
app:txtfontName="@string/bold"/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:text="@string/register_subtitle_text"
android:visibility="gone"
android:textSize="14sp"
app:txtfontName="@string/regular" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:gravity="center"
android:text="@string/password_policy_text"
android:textColor="@color/darkgray"
android:textSize="13sp"
android:visibility="gone" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="2dp"
android:text="@string/login_user_id_text"
android:textSize="@dimen/text_normal"
app:txtfontName="@string/regular" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeEditText
style="@style/editetxtsinglelineDone"
android:id="@+id/ed_userId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:paddingTop="@dimen/_6sdp"
android:paddingBottom="@dimen/_6sdp"
android:paddingStart="@dimen/_6sdp"
android:paddingEnd="@dimen/_8sdp"
android:textSize="@dimen/text_medium"
android:minHeight="40dp"
<com.gmeremit.online.gmeremittance_native.common.view.MTextInputLayout
android:id="@+id/usernameId_TxtInputLayout"
style="@style/MTextInputLayoutForm"
android:layout_marginTop="@dimen/form_initial_input_margin_top"
app:endIconMode="clear_text"
app:errorEnabled="true"
android:hint="@string/userid_placeholder_text"
android:imeOptions="actionDone"
app:drawableLeftCompat="@drawable/vd_user"
android:drawablePadding="@dimen/_4sdp"
android:background="@drawable/curve_rectangle_edit_text"
/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeErrorTextView
android:layout_marginStart="3dp"
android:id="@+id/userIdErrorTxt"
android:paddingTop="2dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
app:startIconDrawable="@drawable/vd_user"
>
<com.gmeremit.online.gmeremittance_native.common.view.MTextInputEditText
android:id="@+id/usernameId_edTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:id="@+id/passwordText"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:text="@string/create_password_text"
android:textSize="@dimen/text_normal"
app:txtfontName="@string/regular" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeEditText
android:id="@+id/securityKeyboardPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeErrorTextView
android:layout_marginStart="3dp"
android:id="@+id/passwordErrorTxt"
android:paddingTop="2dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
</com.gmeremit.online.gmeremittance_native.common.view.MTextInputLayout>
/>
<com.gmeremit.online.gmeremittance_native.common.view.MTextInputLayout
android:id="@+id/password_TxtInputLayout"
app:errorEnabled="true"
style="@style/MTextInputLayoutForm"
app:endIconMode="clear_text"
android:hint="@string/password_placeholder_text"
app:startIconDrawable="@drawable/vd_lock"
>
<com.gmeremit.online.gmeremittance_native.common.view.MTextInputEditText
android:gravity="start"
android:id="@+id/password_edTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="2dp"
android:text="@string/native_country_text"
android:textSize="@dimen/text_normal"
app:txtfontName="@string/regular" />
<FrameLayout
android:id="@+id/ed_native_country_container"
android:visibility="visible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/curve_rectangle_edit_text"
android:orientation="horizontal"
</com.gmeremit.online.gmeremittance_native.common.view.MTextInputLayout>
<com.gmeremit.online.gmeremittance_native.common.view.MTextInputLayout
android:id="@+id/nativeCountry_TxtInputLayout"
app:errorEnabled="true"
style="@style/MTextInputLayoutForm"
app:endIconMode="clear_text"
android:hint="@string/native_country_text"
app:startIconDrawable="@drawable/vd_globe"
>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeEditText
android:focusable="false"
android:focusableInTouchMode="false"
android:cursorVisible="false"
style="@style/editetxtsinglelineDone"
android:id="@+id/ed_native_country"
<com.gmeremit.online.gmeremittance_native.common.view.MTextInputEditText
android:gravity="start"
android:id="@+id/nativeCountry_edTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:paddingTop="@dimen/_6sdp"
android:paddingBottom="@dimen/_6sdp"
android:paddingStart="@dimen/_8sdp"
android:drawablePadding="@dimen/_4sdp"
android:paddingEnd="@dimen/_8sdp"
app:applyASCIIFilter="false"
android:background="@android:color/transparent"
android:textSize="@dimen/text_medium"
android:minHeight="40dp"
android:hint="@string/native_country_text"
android:imeOptions="actionDone"
app:drawableLeftCompat="@drawable/vd_globe"
/>
<ImageView
android:layout_marginEnd="10dp"
android:layout_gravity="center_vertical|end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_arrow_down"
/>
</FrameLayout>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeErrorTextView
android:id="@+id/nativeCountryErrorTxt"
android:paddingTop="2dp"
android:layout_marginStart="3dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="2dp"
android:text="@string/mobile_text"
android:textSize="@dimen/text_normal"
app:txtfontName="@string/regular" />
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeEditText
style="@style/editetxtsinglelineDone"
android:id="@+id/ed_mobile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:inputType="phone"
android:textSize="@dimen/text_medium"
android:minHeight="40dp"
android:paddingTop="@dimen/_6sdp"
android:paddingBottom="@dimen/_6sdp"
android:paddingStart="@dimen/_6sdp"
android:paddingEnd="@dimen/_8sdp"
android:hint="@string/mobile_number_placeholder_x_text"
app:drawableLeftCompat="@drawable/vd_phone"
android:drawablePadding="@dimen/_7sdp"
android:imeOptions="actionDone"
android:background="@drawable/curve_rectangle_edit_text"
/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeErrorTextView
android:layout_marginStart="3dp"
android:id="@+id/mobileErrorTxt"
android:paddingTop="2dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
android:layout_height="wrap_content"/>
</com.gmeremit.online.gmeremittance_native.common.view.MTextInputLayout>
<com.gmeremit.online.gmeremittance_native.common.view.MTextInputLayout
android:id="@+id/mobile_TxtInputLayout"
app:errorEnabled="true"
style="@style/MTextInputLayoutForm"
app:endIconMode="clear_text"
android:hint="@string/mobile_number_text"
app:startIconDrawable="@drawable/vd_phone"
>
<com.gmeremit.online.gmeremittance_native.common.view.MTextInputEditText
android:gravity="start"
android:id="@+id/mobile_edTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.gmeremit.online.gmeremittance_native.common.view.MTextInputLayout>
<LinearLayout
android:layout_gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:layout_gravity="center"
>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
@ -228,6 +126,9 @@
android:text="@string/already_have_account_text"
android:textColor="@color/darkgray"
android:textSize="@dimen/text_small" />
<View
android:layout_width="@dimen/_5sdp"
android:layout_height="match_parent"/>
<com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView
android:paddingBottom="5dp"
@ -248,7 +149,6 @@
android:layout_gravity="center"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:background="@drawable/ic_rounded_background_red_coloured"
android:text="@string/register_text"
android:textAllCaps="false"
android:textColor="@color/white"

4
app/src/main/res/values/dimens.xml

@ -33,8 +33,8 @@
<dimen name="form_input_padding_bottom">@dimen/_8sdp</dimen>
<dimen name="form_input_padding_start">@dimen/_4sdp</dimen>
<dimen name="form_input_padding_end">@dimen/_4sdp</dimen>
<dimen name="form_input_margin_top">@dimen/_6sdp</dimen>
<dimen name="form_input_margin_bottom">@dimen/_6sdp</dimen>
<dimen name="form_input_margin_top">@dimen/_3sdp</dimen>
<dimen name="form_input_margin_bottom">@dimen/_3sdp</dimen>
<dimen name="form_initial_input_margin_top">@dimen/_20sdp</dimen>

2
app/src/main/res/values/strings.xml

@ -80,7 +80,7 @@
<string name="user_id_empty_error">User id cannot be empty</string>
<string name="register_title_text">Register to Global Money Express</string>
<string name="register_subtitle_text">Register with your email city</string>
<string name="register_subtitle_text">Register with your email id</string>
<string name="create_password_text">Create Password</string>
<string name="confirm_password_text">Confirm Password</string>
<string name="dob_text">Date Of Birth</string>

Loading…
Cancel
Save