From 6f5baf86bc177c3087f6a75ced9d57543101efa4 Mon Sep 17 00:00:00 2001 From: preyearegmi Date: Wed, 30 Jan 2019 09:31:03 +0900 Subject: [PATCH] Register screen keyboard integration success --- .../presenter/RegisterV2Presenter.java | 34 ++- .../RegisterV2PresenterInterface.java | 4 + .../registerV2/view/RegisterV2Activity.java | 209 +++++++++++++++++- .../main/res/layout/activity_register_v2.xml | 57 ++--- 4 files changed, 253 insertions(+), 51 deletions(-) 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 6ee640bf..c4823b7c 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 @@ -22,13 +22,16 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres private final RegisterV2Gateway gateway; private final RegisterV2ContractInterface view; private CompositeDisposable compositeDisposable; - private String userId; + + private String password; + private String confirmPassword; public RegisterV2Presenter(RegisterV2PresenterInterface.RegisterV2ContractInterface view) { this.view = view; compositeDisposable=new CompositeDisposable(); this.gateway = new RegisterV2Gateway(this); - + password=""; + confirmPassword=""; } @@ -38,33 +41,33 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres boolean confirmPwdValidation=true; - if (!Utils.hasSpecialCharacters(pwdString)) { + if (!Utils.hasSpecialCharacters(password)) { this.view.setPasswordError("Password should have at least one symbol"); pwdValidation= false; } - if (!Utils.hasNumbers(pwdString)) { + if (!Utils.hasNumbers(password)) { this.view.setPasswordError("Password should have at least one number"); pwdValidation= false; } - if (pwdString.length()>1&&pwdString.length()<9) { + if (password.length()>1&&password.length()<9) { this.view.setPasswordError("Password should have at least 9 characters"); pwdValidation= false; } - if (!Utils.hasAtleastOnCapitalLetter(pwdString)) { + if (!Utils.hasAtleastOnCapitalLetter(password)) { this.view.setPasswordError("Password should have at least one capital letter"); pwdValidation= false; } - if(pwdString.trim().length()<1) + if(password.trim().length()<1) { this.view.setPasswordError("Password cannot be empty"); pwdValidation= false; } - if (!pwdString.equals(pwdConfrimString)) { + if (!password.equals(confirmPassword)) { this.view.setConfirmPasswordError("Passwords does not match"); confirmPwdValidation= false; } - if(pwdConfrimString==null||pwdConfrimString.trim().length()<1) + if(confirmPassword==null||confirmPassword.trim().length()<1) { this.view.setConfirmPasswordError("Confirm password cannot be empty"); confirmPwdValidation= false; @@ -82,7 +85,6 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres @Override public void registerUser(String userId, String password, String dob) { - this.userId=userId; String auth = "Basic " + Utils.toBase64("172017F9EC11222E8107142733:QRK2UM0Q:" + GmeApplication.getAppRelatedMetaData().getDeviceId()); String fcmID = null; try { @@ -98,7 +100,7 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres this.gateway.registerUser( auth, userId, - password, + this.password, dob, "172017F9EC11222E8107142733", fcmID, @@ -145,6 +147,16 @@ public class RegisterV2Presenter extends BasePresenter implements RegisterV2Pres return (emailIdValidation&&pwdValidation&&dobValidation); } + @Override + public void updatePassword(String updatedPassword) { + this.password=updatedPassword; + } + + @Override + public void updateConfirmPassword(String confirmPassword) { + this.confirmPassword=confirmPassword; + } + @Override public void onViewDestroyed() { super.onViewDestroyed(); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2PresenterInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/presenter/RegisterV2PresenterInterface.java index 72b86427..39f194df 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 @@ -16,6 +16,10 @@ public interface RegisterV2PresenterInterface extends BasePresenterInterface { boolean validateAll(String emailId,String pwdString, String pwdConfirmString,String dobString); + void updatePassword(String updatedPassword); + + void updateConfirmPassword(String confirmPassword); + interface RegisterV2ContractInterface extends BaseContractInterface { void setConfirmPasswordError(String error); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/registerV2/view/RegisterV2Activity.java index bf3ab859..31e22240 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 @@ -5,12 +5,15 @@ import android.content.Intent; import android.graphics.Rect; import android.os.Bundle; import android.support.v4.view.GestureDetectorCompat; +import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; 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 com.gmeremit.online.gmeremittance_native.R; @@ -21,6 +24,11 @@ import com.gmeremit.online.gmeremittance_native.loginV2.view.LoginV2Activity; import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterV2Presenter; import com.gmeremit.online.gmeremittance_native.registerV2.presenter.RegisterV2PresenterInterface; import com.gmeremit.online.gmeremittance_native.utils.Utils; +import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.EncryptionManager; +import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardManager; +import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView; +import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeypadRequestParamBuilder; +import com.softsecurity.transkey.TransKeyActivity; import com.tsongkha.spinnerdatepicker.SpinnerDatePickerDialogBuilder; import java.text.SimpleDateFormat; @@ -36,11 +44,11 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen @BindView(R.id.email_mobile) EditText emailMobileTextView; - @BindView(R.id.password) - EditText passwordTextView; + @BindView(R.id.securityKeyboardPassword) + SecurityKeyboardView securityKeyboardPasswordView; - @BindView(R.id.confirm_password) - EditText confirmPasswordTextView; + @BindView(R.id.securityKeyboardConfirmPassword) + SecurityKeyboardView securityKeyboardConfirmPasswordView; @BindView(R.id.ed_dob) EditText ed_dob; @@ -66,12 +74,30 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen @BindView(R.id.ed_dob_container) FrameLayout ed_dob_container; + @BindView(R.id.keypadContainer) + FrameLayout keypadContainer; + + @BindView(R.id.keypadBallon) + RelativeLayout ballonView; + + @BindView(R.id.scrollView) + ScrollView scrollView; + + @BindView(R.id.rootViewRegister) + View rootView; + RegisterV2PresenterInterface presenter; private GestureDetectorCompat dobConatinerClickGestureDetector; private RegisterDobClickGestureDetector dobContainerOnClickGestureDetector; + SecurityKeyboardManager securityKeyboardPasswordManager; + SecurityKeyboardManager securityKeyboardConfirmPasswordManager; + + SecurityKeypadPasswordListener securityKeyboardPasswordListener; + SecurityKeypadConfirmPasswordListener securityKeyboardConfirmPasswordListener; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -86,6 +112,45 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen this.presenter = new RegisterV2Presenter(this); dobContainerOnClickGestureDetector = new RegisterDobClickGestureDetector(); dobConatinerClickGestureDetector = new GestureDetectorCompat(this, dobContainerOnClickGestureDetector); + + securityKeyboardPasswordListener=new SecurityKeypadPasswordListener(); + securityKeyboardPasswordView.setKeyboardContainerView(keypadContainer); + securityKeyboardPasswordView.setKeyboardBallonView(ballonView); + try { + securityKeyboardPasswordManager = new SecurityKeyboardManager(this); + SecurityKeypadRequestParamBuilder request = new SecurityKeypadRequestParamBuilder(this); + request.setHintString("Password"); + + securityKeyboardPasswordManager.bindWithSecurityWidgetView(securityKeyboardPasswordView) + .setBallonView(ballonView) + .setKeyboardContainer(keypadContainer) + .setRequestParams(request) + .setActionListener(securityKeyboardPasswordListener) + .build(); + + } catch (Exception e) { + e.printStackTrace(); + Log.d("GMESecurityKeyboard", e.getMessage()); + } + securityKeyboardConfirmPasswordListener=new SecurityKeypadConfirmPasswordListener(); + securityKeyboardConfirmPasswordView.setKeyboardContainerView(keypadContainer); + securityKeyboardConfirmPasswordView.setKeyboardBallonView(ballonView); + try { + securityKeyboardConfirmPasswordManager = new SecurityKeyboardManager(this); + SecurityKeypadRequestParamBuilder request = new SecurityKeypadRequestParamBuilder(this); + request.setHintString("Password"); + + securityKeyboardConfirmPasswordManager.bindWithSecurityWidgetView(securityKeyboardConfirmPasswordView) + .setBallonView(ballonView) + .setKeyboardContainer(keypadContainer) + .setRequestParams(request) + .setActionListener(securityKeyboardConfirmPasswordListener) + .build(); + + } catch (Exception e) { + e.printStackTrace(); + Log.d("GMESecurityKeyboard", e.getMessage()); + } } private void performDefaultAction(Bundle savedInstanceState) { @@ -98,6 +163,9 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen super.onStart(); tv_login.setOnClickListener(this); btn_submit.setOnClickListener(this); + securityKeyboardPasswordView.setSecurityKeyboardFocusStateListener(securityKeyboardPasswordListener); + securityKeyboardConfirmPasswordView.setSecurityKeyboardFocusStateListener(securityKeyboardConfirmPasswordListener); + } @SuppressLint("ClickableViewAccessibility") @@ -106,12 +174,15 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen super.onStop(); tv_login.setOnClickListener(null); btn_submit.setOnClickListener(null); + securityKeyboardPasswordView.setSecurityKeyboardFocusStateListener(null); + securityKeyboardConfirmPasswordView.setSecurityKeyboardFocusStateListener(null); + } @Override public boolean dispatchTouchEvent(MotionEvent ev) { - return (dobConatinerClickGestureDetector.onTouchEvent(ev) || super.dispatchTouchEvent(ev)); + return (securityKeyboardPasswordView.checkIfTouchIntersectKeypadLayout(ev)||securityKeyboardConfirmPasswordView.checkIfTouchIntersectKeypadLayout(ev)||dobConatinerClickGestureDetector.onTouchEvent(ev) || super.dispatchTouchEvent(ev)); } @@ -123,9 +194,9 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen break; case R.id.btn_submit: - if (presenter.validateAll(emailMobileTextView.getText().toString(), passwordTextView.getText().toString(), confirmPasswordTextView.getText().toString(), ed_dob.getText().toString())) { + if (presenter.validateAll(emailMobileTextView.getText().toString(), null, null, ed_dob.getText().toString())) { hideKeyBoard(); - presenter.registerUser(emailMobileTextView.getText().toString(), passwordTextView.getText().toString(), ed_dob.getText().toString()); + presenter.registerUser(emailMobileTextView.getText().toString(), null, ed_dob.getText().toString()); } break; } @@ -233,4 +304,128 @@ public class RegisterV2Activity extends BaseActivity implements RegisterV2Presen } + + class SecurityKeypadPasswordListener implements SecurityKeyboardManager.SecurityKeyboardActionListenerFacade,SecurityKeyboardView.SecurityKeyboardFocusStateListener { + @Override + public void done(Intent intent) { + presenter.updatePassword(getDecryptedDataFromIntent(intent)); + } + + @Override + public void cancel(Intent intent) { + presenter.updatePassword(getDecryptedDataFromIntent(intent)); + } + + + private String getDecryptedDataFromIntent(Intent intent) + { + if (intent == null) + return ""; + + String cipherData = intent.getStringExtra(TransKeyActivity.mTK_PARAM_CIPHER_DATA); + + byte[] secureKey = intent.getByteArrayExtra(TransKeyActivity.mTK_PARAM_SECURE_KEY); + int iRealDataLength = intent.getIntExtra(TransKeyActivity.mTK_PARAM_DATA_LENGTH, 0); + Log.d("EncryptedData",cipherData); + return EncryptionManager.decryptCipherText(cipherData,secureKey,iRealDataLength); + } + + + @Override + public void input(int i) { + + } + + @Override + public void minTextSizeCallback() { + + } + + @Override + public void maxTextSizeCallback() { + + } + + @Override + public void onSecurityViewRecievedFocus() { + if (securityKeyboardPasswordManager != null && !securityKeyboardPasswordManager.isKeyboardVisible()) { + hideKeyBoard(); + securityKeyboardPasswordManager.showKeyboard(); + scrollView.postDelayed(()->{ + scrollView.smoothScrollTo(0, (int) (.75f*rootView.getBottom())); + },250); + + } + } + + @Override + public void onSecurityViewLostFocus() { + if (securityKeyboardPasswordManager != null && securityKeyboardPasswordManager.isKeyboardVisible()) + securityKeyboardPasswordManager.hideKeyboard(); + else + hideKeyBoard(); + } + } + class SecurityKeypadConfirmPasswordListener implements SecurityKeyboardManager.SecurityKeyboardActionListenerFacade,SecurityKeyboardView.SecurityKeyboardFocusStateListener { + @Override + public void done(Intent intent) { + presenter.updateConfirmPassword(getDecryptedDataFromIntent(intent)); + } + + @Override + public void cancel(Intent intent) { + presenter.updateConfirmPassword(getDecryptedDataFromIntent(intent)); + + } + + + private String getDecryptedDataFromIntent(Intent intent) + { + if (intent == null) + return ""; + + String cipherData = intent.getStringExtra(TransKeyActivity.mTK_PARAM_CIPHER_DATA); + + byte[] secureKey = intent.getByteArrayExtra(TransKeyActivity.mTK_PARAM_SECURE_KEY); + int iRealDataLength = intent.getIntExtra(TransKeyActivity.mTK_PARAM_DATA_LENGTH, 0); + Log.d("EncryptedData",cipherData); + return EncryptionManager.decryptCipherText(cipherData,secureKey,iRealDataLength); + } + + + @Override + public void input(int i) { + + } + + @Override + public void minTextSizeCallback() { + + } + + @Override + public void maxTextSizeCallback() { + + } + + @Override + public void onSecurityViewRecievedFocus() { + if (securityKeyboardConfirmPasswordManager != null && !securityKeyboardConfirmPasswordManager.isKeyboardVisible()) { + hideKeyBoard(); + securityKeyboardConfirmPasswordManager.showKeyboard(); + scrollView.postDelayed(()->{ + scrollView.smoothScrollTo(0, (int) (.75f*rootView.getBottom())); + },250); + + } + } + + @Override + public void onSecurityViewLostFocus() { + if (securityKeyboardConfirmPasswordManager != null && securityKeyboardConfirmPasswordManager.isKeyboardVisible()) + securityKeyboardConfirmPasswordManager.hideKeyboard(); + else + hideKeyBoard(); + } + } } diff --git a/app/src/main/res/layout/activity_register_v2.xml b/app/src/main/res/layout/activity_register_v2.xml index a7732c0a..e1900ac7 100644 --- a/app/src/main/res/layout/activity_register_v2.xml +++ b/app/src/main/res/layout/activity_register_v2.xml @@ -3,6 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" + android:id="@+id/rootViewRegister" android:layout_height="match_parent" android:orientation="vertical" android:background="#fff"> @@ -14,11 +15,11 @@ android:paddingLeft="10dp" android:paddingRight="10dp" tools:context="com.gmeremit.online.gmeremittance_native.sign_in.view.LoginView"> - + + + + + - - + + + + + \ No newline at end of file