Browse Source

Security keyboard visiblity control success

master
preyearegmi 6 years ago
parent
commit
4ff82024af
  1. 1
      app/src/main/java/com/gmeremit/online/gmeremittance_native/base/BaseActivity.java
  2. 8
      app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/securitykeypad/SecurityKeyboardManager.java
  3. 107
      app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/securitykeypad/SecurityKeyboardView.java
  4. 55
      app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java

1
app/src/main/java/com/gmeremit/online/gmeremittance_native/base/BaseActivity.java

@ -101,6 +101,7 @@ public class BaseActivity extends AppCompatActivity implements BaseContractInter
}
if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
view.clearFocus();
}
}

8
app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/securitykeypad/SecurityKeyboardManager.java

@ -2,6 +2,7 @@ package com.gmeremit.online.gmeremittance_native.customwidgets.securitykeypad;
import android.content.Context;
import android.content.Intent;
import android.view.MotionEvent;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
@ -120,13 +121,14 @@ public class SecurityKeyboardManager {
return editTextView;
}
public void showKeyboard () throws IllegalAccessException {
public void showKeyboard () {
if(controller!=null)
this.controller.showKeypad(requestParams.getDefaultKeyboardType());
else
throw new IllegalAccessException("Keyboard not initialized properly. Did you forgot to invoke build() method?");
}
/**
* Aggregation of all the listener that the virtual keypad accepts.
*/

107
app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/securitykeypad/SecurityKeyboardView.java

@ -1,10 +1,14 @@
package com.gmeremit.online.gmeremittance_native.customwidgets.securitykeypad;
import android.content.Context;
import android.support.annotation.LayoutRes;
import android.graphics.Rect;
import android.support.v4.view.GestureDetectorCompat;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.ImageButton;
import android.widget.LinearLayout;
@ -12,12 +16,26 @@ import android.widget.RelativeLayout;
import com.gmeremit.online.gmeremittance_native.R;
public class SecurityKeyboardView extends RelativeLayout implements SecurityKeyboardManager.SecurityKeyboardWidgetBinder {
private SecurityKeyboardFocusStateListener focusListener;
private FrameLayout keyboardContainerView;
private RelativeLayout keyboardBallonView;
public interface SecurityKeyboardFocusStateListener {
void onSecurityViewRecievedFocus();
void onSecurityViewLostFocus();
}
EditText securityKeyboard;
HorizontalScrollView horizontalScrollView;
LinearLayout keyLayout;
ImageButton clearImageButton;
private GestureDetectorCompat gestureDetector;
private SecurityKeyboardManagerGestureDetector myViewGestureDetector;
public SecurityKeyboardView(Context context) {
super(context);
@ -36,13 +54,22 @@ public class SecurityKeyboardView extends RelativeLayout implements SecurityKey
}
private void init(Context context)
{
public void setKeyboardContainerView(FrameLayout keyboardContainerView) {
this.keyboardContainerView = keyboardContainerView;
}
public void setKeyboardBallonView(RelativeLayout keyboardBallonView) {
this.keyboardBallonView = keyboardBallonView;
}
private void init(Context context) {
View v = View.inflate(context, R.layout.security_keyboard_view, this);
securityKeyboard = (EditText) v.findViewById(R.id.securityKeyboardEditText);
horizontalScrollView = (HorizontalScrollView) v.findViewById(R.id.securityKeyboardScrollView);
keyLayout = (LinearLayout) v.findViewById(R.id.keyLayout);
clearImageButton = (ImageButton) v.findViewById(R.id.securityKeyboardClearAllImageView);
myViewGestureDetector = new SecurityKeyboardManagerGestureDetector();
gestureDetector = new GestureDetectorCompat(context, myViewGestureDetector);
}
@Override
@ -66,5 +93,79 @@ public class SecurityKeyboardView extends RelativeLayout implements SecurityKey
}
public void setSecurityKeyboardFocusStateListener(SecurityKeyboardFocusStateListener listener) {
this.focusListener = listener;
}
public boolean checkIfTouchIntersectKeypadLayout(MotionEvent ev) {
return gestureDetector.onTouchEvent(ev);
}
public void onDestory() {
}
private boolean checkIfIntersectsBounds(float x, float y) {
int posX = (int) x;
int posY = (int) y;
int[] securityKeypadInputFieldLeftAndTopCoordinates = new int[2];
getLocationOnScreen(securityKeypadInputFieldLeftAndTopCoordinates);
Rect securityKeypadBoundRect = new Rect(securityKeypadInputFieldLeftAndTopCoordinates[0], securityKeypadInputFieldLeftAndTopCoordinates[1],
securityKeypadInputFieldLeftAndTopCoordinates[0] + getMeasuredWidth(),
securityKeypadInputFieldLeftAndTopCoordinates[1] + getMeasuredHeight());
return securityKeypadBoundRect.contains(posX, posY);
}
private boolean checkIfUserIsTyping(float x, float y) {
int posX = (int) x;
int posY = (int) y;
int[] keypadContainerLeftAndTopCoordinates = new int[2];
if (keyboardContainerView == null)
throw new IllegalArgumentException("Its seems you forgot to set keyboard container view");
if (keyboardContainerView.getChildAt(0) != null) {
keyboardContainerView.getChildAt(0).getLocationOnScreen(keypadContainerLeftAndTopCoordinates);
Rect securityKeypadContainerBoundRect = new Rect(keypadContainerLeftAndTopCoordinates[0], keypadContainerLeftAndTopCoordinates[1],
keypadContainerLeftAndTopCoordinates[0] + keyboardContainerView.getChildAt(0).getMeasuredWidth(),
keypadContainerLeftAndTopCoordinates[1] + keyboardContainerView.getChildAt(0).getMeasuredHeight());
return securityKeypadContainerBoundRect.contains(posX, posY);
}
return false;
}
class SecurityKeyboardManagerGestureDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapUp(MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_UP) {
boolean hasIntersected = checkIfIntersectsBounds(e.getX(), e.getY());
if (focusListener != null) {
if (hasIntersected)
focusListener.onSecurityViewRecievedFocus();
else {
boolean isUserTypingonKeypad = checkIfUserIsTyping(e.getX(), e.getY());
if (!isUserTypingonKeypad)
focusListener.onSecurityViewLostFocus();
}
}
return hasIntersected;
}
return super.onSingleTapUp(e);
}
}
}

55
app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java

@ -5,11 +5,10 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.TextInputLayout;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewCompat;
import android.util.Log;
@ -40,7 +39,7 @@ import com.gmeremit.online.gmeremittance_native.resetpassV2.view.ResetPassV2Acti
import butterknife.BindView;
import butterknife.ButterKnife;
public class LoginV2Activity extends BaseActivity implements View.OnClickListener, LoginV2PresenterInterface.LoginV2ContractInterface {
public class LoginV2Activity extends BaseActivity implements View.OnClickListener, LoginV2PresenterInterface.LoginV2ContractInterface, SecurityKeyboardView.SecurityKeyboardFocusStateListener {
@BindView(R.id.usernameId)
EditText usernameId;
@ -105,7 +104,6 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
}
private void initialize() {
this.presenter = new LoginV2Presenter(this);
DEFAULT_CORNER_RADIUS = 35 * getResources().getDisplayMetrics().density;
@ -113,6 +111,8 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
progressbar_login.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(this, android.R.color.white), android.graphics.PorterDuff.Mode.MULTIPLY);
ViewCompat.setTranslationZ(progressbar_login, 100);
progressbar_login.setVisibility(View.GONE);
securityKeyboardView.setKeyboardContainerView(keypadContainer);
securityKeyboardView.setKeyboardBallonView(ballonView);
try {
securityKeyboardManager = new SecurityKeyboardManager(this);
@ -156,26 +156,14 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
Log.d("GMESecurityKeyboard", e.getMessage());
}
passwordId=securityKeyboardManager.getEditTextView();
}
private void performDefaultAction(Bundle savedInstanceState) {
new Handler().postDelayed((new Runnable() {
@Override
public void run() {
try {
securityKeyboardManager.showKeyboard();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}),200);
}
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onStart() {
super.onStart();
@ -183,9 +171,12 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
registerTxt.setOnClickListener(this);
loginBtn.setOnClickListener(this);
// iv_back.setOnClickListener(this);
securityKeyboardView.setSecurityKeyboardFocusStateListener(this);
}
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onStop() {
super.onStop();
@ -193,6 +184,9 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
registerTxt.setOnClickListener(null);
loginBtn.setOnClickListener(null);
// iv_back.setOnClickListener(null);
securityKeyboardView.setSecurityKeyboardFocusStateListener(null);
}
@Override
@ -220,12 +214,15 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
onBackPressed();
break;
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return isLoadingInProgress || super.dispatchTouchEvent(ev);
return (isLoadingInProgress||securityKeyboardView.checkIfTouchIntersectKeypadLayout(ev)||super.dispatchTouchEvent(ev));
}
@Override
@ -238,8 +235,8 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
}
}
private void morphButtonIntoProgressBar()
{
private void morphButtonIntoProgressBar() {
GradientDrawable mGradientDrawable = (GradientDrawable) loginBtn.getBackground();
@ -285,8 +282,7 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
@Override
public void morphProgressBarIntoButton(Runnable callback)
{
public void morphProgressBarIntoButton(Runnable callback) {
GradientDrawable mGradientDrawable = (GradientDrawable) loginBtn.getBackground();
@ -352,4 +348,19 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
startActivity(intent);
finish();
}
@Override
public void onSecurityViewRecievedFocus() {
if(securityKeyboardManager!=null&&!securityKeyboardManager.isKeyboardVisible()) {
hideKeyBoard();
securityKeyboardManager.showKeyboard();
}
}
@Override
public void onSecurityViewLostFocus() {
if(securityKeyboardManager!=null&&securityKeyboardManager.isKeyboardVisible())
securityKeyboardManager.hideKeyboard();
}
}
Loading…
Cancel
Save