Browse Source

Successfully Intercepted global touch listener in splash

master
Preyea Regmi 5 years ago
parent
commit
c1e07681f0
  1. 87
      app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java

87
app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java

@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@ -14,12 +15,15 @@ import android.support.transition.ChangeBounds;
import android.support.transition.Transition; import android.support.transition.Transition;
import android.support.transition.TransitionListenerAdapter; import android.support.transition.TransitionListenerAdapter;
import android.support.transition.TransitionManager; import android.support.transition.TransitionManager;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPropertyAnimatorListenerAdapter; import android.support.v4.view.ViewPropertyAnimatorListenerAdapter;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager; import android.support.v7.widget.StaggeredGridLayoutManager;
import android.text.Editable; import android.text.Editable;
import android.view.GestureDetector;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AnticipateOvershootInterpolator; import android.view.animation.AnticipateOvershootInterpolator;
@ -113,6 +117,12 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
@BindView(R.id.countrySelectionSpinner) @BindView(R.id.countrySelectionSpinner)
View countrySelectionSpinner; View countrySelectionSpinner;
@BindView(R.id.receiveMoneyViewContainer)
View receiveMoneyViewContainer;
@BindView(R.id.sendMoneyViewContainer)
View sendMoneyViewContainer;
LanguageViewTransitionManager languageViewTransitionManager; LanguageViewTransitionManager languageViewTransitionManager;
@ -131,6 +141,8 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
private SendAmountTextWatcher sendMoneyTextWatcher; private SendAmountTextWatcher sendMoneyTextWatcher;
private ReceiveAmountTextWatcher receiveMoneyTextWatcher; private ReceiveAmountTextWatcher receiveMoneyTextWatcher;
private GestureDetectorCompat gestureDetector;
private AmountChangeAndFocusOutDetector myViewGestureDetector;
@Override @Override
@ -161,6 +173,9 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
initPayoutModeRV(); initPayoutModeRV();
sendMoneyTextWatcher = new SendAmountTextWatcher(sendAmountEdTxt); sendMoneyTextWatcher = new SendAmountTextWatcher(sendAmountEdTxt);
receiveMoneyTextWatcher = new ReceiveAmountTextWatcher(receiveAmountEdTxt); receiveMoneyTextWatcher = new ReceiveAmountTextWatcher(receiveAmountEdTxt);
myViewGestureDetector = new AmountChangeAndFocusOutDetector();
gestureDetector = new GestureDetectorCompat(this, myViewGestureDetector);
} }
@ -230,6 +245,12 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
} }
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
gestureDetector.onTouchEvent(ev);
return super.dispatchTouchEvent(ev);
}
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (languageViewTransitionManager.isAnimationRunning()) if (languageViewTransitionManager.isAnimationRunning())
@ -431,6 +452,8 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
private ConstraintSet mainViewConstraintSet; private ConstraintSet mainViewConstraintSet;
private ConstraintSet preLoadingConstraintSet; private ConstraintSet preLoadingConstraintSet;
private boolean isExrateViewVisible;
LanguageViewTransitionManager(Context context) { LanguageViewTransitionManager(Context context) {
isAnimationOnProgress = false; isAnimationOnProgress = false;
this.context = context; this.context = context;
@ -449,11 +472,14 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
accelerateDecelerateInterpolator = new AccelerateDecelerateInterpolator(); accelerateDecelerateInterpolator = new AccelerateDecelerateInterpolator();
textViewPaintFlags = selectedLanguageText.getPaintFlags(); textViewPaintFlags = selectedLanguageText.getPaintFlags();
isExrateViewVisible = false;
} }
void showLanguageView(Runnable onAnimationCompleteCallback) { void showLanguageView(Runnable onAnimationCompleteCallback) {
hideKeyBoard(); hideKeyBoard();
isExrateViewVisible = false;
ChangeBounds transition = new ChangeBounds(); ChangeBounds transition = new ChangeBounds();
transition.setPathMotion(new ArcMotion()); transition.setPathMotion(new ArcMotion());
transition.setInterpolator(anticipateOvershootInterpolator); transition.setInterpolator(anticipateOvershootInterpolator);
@ -537,6 +563,7 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
public void onTransitionEnd(@NonNull Transition transition) { public void onTransitionEnd(@NonNull Transition transition) {
super.onTransitionEnd(transition); super.onTransitionEnd(transition);
isAnimationOnProgress = false; isAnimationOnProgress = false;
isExrateViewVisible = true;
userNavigatedToLanguageView = false; userNavigatedToLanguageView = false;
if (onAnimationCompleteCallback != null) if (onAnimationCompleteCallback != null)
onAnimationCompleteCallback.run(); onAnimationCompleteCallback.run();
@ -557,6 +584,7 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
@Override @Override
public void onTransitionEnd(@NonNull Transition transition) { public void onTransitionEnd(@NonNull Transition transition) {
super.onTransitionEnd(transition); super.onTransitionEnd(transition);
isExrateViewVisible = true;
isAnimationOnProgress = false; isAnimationOnProgress = false;
userNavigatedToLanguageView = false; userNavigatedToLanguageView = false;
if (onAnimationCompleteCallback != null) if (onAnimationCompleteCallback != null)
@ -577,7 +605,9 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
return this.userNavigatedToLanguageView; return this.userNavigatedToLanguageView;
} }
public boolean isExrateViewVisible() {
return isExrateViewVisible;
}
} }
@ -600,6 +630,7 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
@Override @Override
public void afterTextChanged(Editable s) { public void afterTextChanged(Editable s) {
super.afterTextChanged(s); super.afterTextChanged(s);
presenter.setCalcByPayoutAmount(false);
presenter.setCAmount(s.toString()); presenter.setCAmount(s.toString());
} }
} }
@ -623,10 +654,64 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener,
@Override @Override
public void afterTextChanged(Editable s) { public void afterTextChanged(Editable s) {
super.afterTextChanged(s); super.afterTextChanged(s);
presenter.setCalcByPayoutAmount(true);
presenter.setPAmount(s.toString()); presenter.setPAmount(s.toString());
} }
} }
private class AmountChangeAndFocusOutDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapUp(MotionEvent e) {
if (!languageViewTransitionManager.isExrateViewVisible())
return super.onSingleTapUp(e);
if (e.getAction() == MotionEvent.ACTION_UP) {
if (hasValidOutsideAmountWidgetTouch(e.getX(), e.getY())) {
presenter.calcExrate();
return true;
}
}
return super.onSingleTapUp(e);
}
private boolean hasValidOutsideAmountWidgetTouch(float x, float y) {
int posX = (int) x;
int posY = (int) y;
int[] sendMoneyLeftAndTopCoordinates = new int[2];
int[] receiveMoneyLeftAndTopCoordinates = new int[2];
int[] backButtonLeftAndTopCoordinates = new int[2];
sendMoneyViewContainer.getLocationOnScreen(sendMoneyLeftAndTopCoordinates);
receiveMoneyViewContainer.getLocationOnScreen(receiveMoneyLeftAndTopCoordinates);
iv_back.getLocationOnScreen(backButtonLeftAndTopCoordinates);
Rect sendMoneyBoundRect = new Rect(sendMoneyLeftAndTopCoordinates[0], sendMoneyLeftAndTopCoordinates[1],
sendMoneyLeftAndTopCoordinates[0] + sendMoneyViewContainer.getMeasuredWidth(),
sendMoneyLeftAndTopCoordinates[1] + sendMoneyViewContainer.getMeasuredHeight());
Rect receiveMoneyBoundRect = new Rect(receiveMoneyLeftAndTopCoordinates[0], receiveMoneyLeftAndTopCoordinates[1],
receiveMoneyLeftAndTopCoordinates[0] + receiveMoneyViewContainer.getMeasuredWidth(),
receiveMoneyLeftAndTopCoordinates[1] + receiveMoneyViewContainer.getMeasuredHeight());
Rect backButtonBoundRect = new Rect(backButtonLeftAndTopCoordinates[0], backButtonLeftAndTopCoordinates[1],
backButtonLeftAndTopCoordinates[0] + iv_back.getMeasuredWidth(),
backButtonLeftAndTopCoordinates[1] + iv_back.getMeasuredHeight());
return (receiveAmountEdTxt.hasFocus() || sendAmountEdTxt.hasFocus())
&& !sendMoneyBoundRect.contains(posX, posY)
&& !receiveMoneyBoundRect.contains(posX, posY)
&& !backButtonBoundRect.contains(posX, posY);
}
}
static { static {
System.loadLibrary("antidebugger"); System.loadLibrary("antidebugger");
} }

Loading…
Cancel
Save