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) { if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 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.Context;
import android.content.Intent; import android.content.Intent;
import android.view.MotionEvent;
import android.widget.EditText; import android.widget.EditText;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.HorizontalScrollView; import android.widget.HorizontalScrollView;
@ -120,13 +121,14 @@ public class SecurityKeyboardManager {
return editTextView; return editTextView;
} }
public void showKeyboard () throws IllegalAccessException {
public void showKeyboard () {
if(controller!=null) if(controller!=null)
this.controller.showKeypad(requestParams.getDefaultKeyboardType()); 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. * 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; package com.gmeremit.online.gmeremittance_native.customwidgets.securitykeypad;
import android.content.Context; 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.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.EditText; import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView; import android.widget.HorizontalScrollView;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -12,12 +16,26 @@ import android.widget.RelativeLayout;
import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.R;
public class SecurityKeyboardView extends RelativeLayout implements SecurityKeyboardManager.SecurityKeyboardWidgetBinder { 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; EditText securityKeyboard;
HorizontalScrollView horizontalScrollView; HorizontalScrollView horizontalScrollView;
LinearLayout keyLayout; LinearLayout keyLayout;
ImageButton clearImageButton; ImageButton clearImageButton;
private GestureDetectorCompat gestureDetector;
private SecurityKeyboardManagerGestureDetector myViewGestureDetector;
public SecurityKeyboardView(Context context) { public SecurityKeyboardView(Context context) {
super(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); View v = View.inflate(context, R.layout.security_keyboard_view, this);
securityKeyboard = (EditText) v.findViewById(R.id.securityKeyboardEditText); securityKeyboard = (EditText) v.findViewById(R.id.securityKeyboardEditText);
horizontalScrollView = (HorizontalScrollView) v.findViewById(R.id.securityKeyboardScrollView); horizontalScrollView = (HorizontalScrollView) v.findViewById(R.id.securityKeyboardScrollView);
keyLayout = (LinearLayout) v.findViewById(R.id.keyLayout); keyLayout = (LinearLayout) v.findViewById(R.id.keyLayout);
clearImageButton = (ImageButton) v.findViewById(R.id.securityKeyboardClearAllImageView); clearImageButton = (ImageButton) v.findViewById(R.id.securityKeyboardClearAllImageView);
myViewGestureDetector = new SecurityKeyboardManagerGestureDetector();
gestureDetector = new GestureDetectorCompat(context, myViewGestureDetector);
} }
@Override @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.AnimatorSet;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.animation.ValueAnimator; import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.TextInputLayout;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewCompat;
import android.util.Log; import android.util.Log;
@ -40,7 +39,7 @@ import com.gmeremit.online.gmeremittance_native.resetpassV2.view.ResetPassV2Acti
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; 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) @BindView(R.id.usernameId)
EditText usernameId; EditText usernameId;
@ -105,7 +104,6 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
} }
private void initialize() { private void initialize() {
this.presenter = new LoginV2Presenter(this); this.presenter = new LoginV2Presenter(this);
DEFAULT_CORNER_RADIUS = 35 * getResources().getDisplayMetrics().density; 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); progressbar_login.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(this, android.R.color.white), android.graphics.PorterDuff.Mode.MULTIPLY);
ViewCompat.setTranslationZ(progressbar_login, 100); ViewCompat.setTranslationZ(progressbar_login, 100);
progressbar_login.setVisibility(View.GONE); progressbar_login.setVisibility(View.GONE);
securityKeyboardView.setKeyboardContainerView(keypadContainer);
securityKeyboardView.setKeyboardBallonView(ballonView);
try { try {
securityKeyboardManager = new SecurityKeyboardManager(this); securityKeyboardManager = new SecurityKeyboardManager(this);
@ -156,26 +156,14 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
Log.d("GMESecurityKeyboard", e.getMessage()); Log.d("GMESecurityKeyboard", e.getMessage());
} }
passwordId=securityKeyboardManager.getEditTextView();
} }
private void performDefaultAction(Bundle savedInstanceState) { 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 @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
@ -183,9 +171,12 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
registerTxt.setOnClickListener(this); registerTxt.setOnClickListener(this);
loginBtn.setOnClickListener(this); loginBtn.setOnClickListener(this);
// iv_back.setOnClickListener(this); // iv_back.setOnClickListener(this);
securityKeyboardView.setSecurityKeyboardFocusStateListener(this);
} }
@SuppressLint("ClickableViewAccessibility")
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
@ -193,6 +184,9 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
registerTxt.setOnClickListener(null); registerTxt.setOnClickListener(null);
loginBtn.setOnClickListener(null); loginBtn.setOnClickListener(null);
// iv_back.setOnClickListener(null); // iv_back.setOnClickListener(null);
securityKeyboardView.setSecurityKeyboardFocusStateListener(null);
} }
@Override @Override
@ -220,12 +214,15 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
onBackPressed(); onBackPressed();
break; break;
} }
} }
@Override @Override
public boolean dispatchTouchEvent(MotionEvent ev) { public boolean dispatchTouchEvent(MotionEvent ev) {
return isLoadingInProgress || super.dispatchTouchEvent(ev);
return (isLoadingInProgress||securityKeyboardView.checkIfTouchIntersectKeypadLayout(ev)||super.dispatchTouchEvent(ev));
} }
@Override @Override
@ -238,8 +235,8 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
} }
} }
private void morphButtonIntoProgressBar()
{
private void morphButtonIntoProgressBar() {
GradientDrawable mGradientDrawable = (GradientDrawable) loginBtn.getBackground(); GradientDrawable mGradientDrawable = (GradientDrawable) loginBtn.getBackground();
@ -285,8 +282,7 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
@Override @Override
public void morphProgressBarIntoButton(Runnable callback)
{
public void morphProgressBarIntoButton(Runnable callback) {
GradientDrawable mGradientDrawable = (GradientDrawable) loginBtn.getBackground(); GradientDrawable mGradientDrawable = (GradientDrawable) loginBtn.getBackground();
@ -352,4 +348,19 @@ private Interpolator interpolator=new AccelerateDecelerateInterpolator();
startActivity(intent); startActivity(intent);
finish(); 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