Skip to content

Commit

Permalink
Merge pull request douglasjunior#61 from douglasjunior/issue-60
Browse files Browse the repository at this point in the history
Fixing dismiss on outside touch. douglasjunior#60
  • Loading branch information
douglasjunior authored Dec 1, 2017
2 parents 3a0e4d3 + d870ab7 commit 335cc8b
Showing 1 changed file with 20 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,26 @@ private void configPopupWindow() {
mPopupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
mPopupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setTouchable(true);
mPopupWindow.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int x = (int) event.getX();
final int y = (int) event.getY();

if (!mDismissOnOutsideTouch && (event.getAction() == MotionEvent.ACTION_DOWN)
&& ((x < 0) || (x >= mContentLayout.getMeasuredWidth()) || (y < 0) || (y >= mContentLayout.getMeasuredHeight()))) {
return true;
} else if (!mDismissOnOutsideTouch && event.getAction() == MotionEvent.ACTION_OUTSIDE) {
return true;
} else if ((event.getAction() == MotionEvent.ACTION_DOWN) && mDismissOnInsideTouch) {
dismiss();
return true;
}
return false;
}
});
mPopupWindow.setClippingEnabled(false);
mPopupWindow.setFocusable(mFocusable);
}
Expand Down Expand Up @@ -283,9 +303,6 @@ private void configContentView() {
contentViewParams.gravity = Gravity.CENTER;
mContentView.setLayoutParams(contentViewParams);

if (mDismissOnInsideTouch || mDismissOnOutsideTouch)
mContentView.setOnTouchListener(mPopupWindowTouchListener);

mContentLayout = linearLayout;
mContentLayout.setVisibility(View.INVISIBLE);
mPopupWindow.setContentView(mContentLayout);
Expand Down Expand Up @@ -349,35 +366,10 @@ public void onDismiss() {
mPopupWindow = null;
}

private final View.OnTouchListener mPopupWindowTouchListener = new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getX() > 0 && event.getX() < v.getWidth() &&
event.getY() > 0 && event.getY() < v.getHeight()) {
if (mDismissOnInsideTouch) {
dismiss();
return mModal;
}
return false;
}
if (event.getAction() == MotionEvent.ACTION_UP) {
v.performClick();
}
return mModal;
}
};

private final View.OnTouchListener mOverlayTouchListener = new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if (mDismissOnOutsideTouch) {
dismiss();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
v.performClick();
}
return mModal;
}
};
Expand Down

0 comments on commit 335cc8b

Please sign in to comment.