diff --git a/coachmarks/src/main/java/com/myntra/coachmarks/ui/presenter/PopUpCoachMarkPresenter.java b/coachmarks/src/main/java/com/myntra/coachmarks/ui/presenter/PopUpCoachMarkPresenter.java index 6533e57..8fcf570 100644 --- a/coachmarks/src/main/java/com/myntra/coachmarks/ui/presenter/PopUpCoachMarkPresenter.java +++ b/coachmarks/src/main/java/com/myntra/coachmarks/ui/presenter/PopUpCoachMarkPresenter.java @@ -38,6 +38,7 @@ public class PopUpCoachMarkPresenter { private static final double MAX_NOTCH_RANGE = .85; private static final double MIN_NOTCH_RANGE = 0.0; + private static final double DEFAULT_NOTCH_VALUE_WIDTH = .20; private static final int NO_MARGIN = 0; @@ -60,6 +61,8 @@ public class PopUpCoachMarkPresenter { private IStringResourceProvider mStringResourceProvider; private IDimensionResourceProvider mDimensionResourceProvider; + private boolean mDefaultPopUpLocationFailed = false; + public PopUpCoachMarkPresenter(final IStringResourceProvider stringResourceProvider, final IDimensionResourceProvider dimensionResourceProvider, final ITypeFaceProvider typeFaceProvider, @@ -201,28 +204,48 @@ private void setNotchDisplayEdge(int position, coachMarkDimenInPixel.getMarginRectInPixels().right + coachMarkDimenInPixel.getImageWidthInPixels(), NO_MARGIN); - mPresentation.setPopUpViewTopLeft(coachMarkMarginRect, - CoachMarkLayoutOrientation.HORIZONTAL); + notchPosition = getMarginTopForNotch(mCoachMarkBuilder.getNotchPosition(), coachMarkDimenInPixel.getPopUpHeightInPixels(), coachMarkDimenInPixel.getNotchDimenInPixels()); + + mPresentation.setPopUpViewTopLeft(coachMarkMarginRect, + CoachMarkLayoutOrientation.HORIZONTAL); + notchMarginRect = new Rect(-coachMarkDimenInPixel.getMarginOffsetForNotchInPixels(), notchPosition, NO_MARGIN, NO_MARGIN); mPresentation.setNotchPositionIfPopUpTopLeft(notchMarginRect, ROTATION_90); break; case PopUpPosition.TOP: actualLeftMargin = getActualLeftMargin(anchorTopX, coachMarkDimenInPixel); - coachMarkMarginRect = new Rect(actualLeftMargin - - coachMarkDimenInPixel.getMarginRectInPixels().right, - coachMarkDimenInPixel.getMarginRectInPixels().top, - NO_MARGIN, - coachMarkDimenInPixel.getMarginRectInPixels().bottom + - coachMarkDimenInPixel.getImageHeightInPixels()); + + if(! mDefaultPopUpLocationFailed){ + coachMarkMarginRect = new Rect(actualLeftMargin - + coachMarkDimenInPixel.getMarginRectInPixels().right, + coachMarkDimenInPixel.getMarginRectInPixels().top, + NO_MARGIN, + coachMarkDimenInPixel.getMarginRectInPixels().bottom + + coachMarkDimenInPixel.getImageHeightInPixels()); + notchPosition = getMarginLeftForNotch(mCoachMarkBuilder.getNotchPosition(), + coachMarkDimenInPixel.getPopUpWidthInPixels(), + coachMarkDimenInPixel.getNotchDimenInPixels()); + }else{ + + coachMarkMarginRect = new Rect(actualLeftMargin - + coachMarkDimenInPixel.getMarginRectInPixels().right, + coachMarkDimenInPixel.getMarginRectInPixels().top, + NO_MARGIN, + coachMarkDimenInPixel.getImageHeightInPixels()); + + notchPosition = getMarginLeftForNotch(DEFAULT_NOTCH_VALUE_WIDTH, + coachMarkDimenInPixel.getPopUpWidthInPixels(), + coachMarkDimenInPixel.getNotchDimenInPixels()); + + } + mPresentation.setPopUpViewTopLeft(coachMarkMarginRect, CoachMarkLayoutOrientation.VERTICAL); - notchPosition = getMarginLeftForNotch(mCoachMarkBuilder.getNotchPosition(), - coachMarkDimenInPixel.getPopUpWidthInPixels(), - coachMarkDimenInPixel.getNotchDimenInPixels()); + notchMarginRect = new Rect(notchPosition + coachMarkDimenInPixel.getMarginOffsetForNotchInPixels(), -coachMarkDimenInPixel.getMarginOffsetForNotchInPixels(), @@ -231,16 +254,20 @@ private void setNotchDisplayEdge(int position, break; case PopUpPosition.RIGHT: actualTopMargin = getActualTopMargin(centerY, coachMarkDimenInPixel); + coachMarkMarginRect = new Rect(coachMarkDimenInPixel.getMarginRectInPixels().left + coachMarkDimenInPixel.getImageWidthInPixels(), actualTopMargin - coachMarkDimenInPixel.getMarginRectInPixels().bottom, coachMarkDimenInPixel.getMarginRectInPixels().right, NO_MARGIN); - mPresentation.setPopUpViewBottomRight(coachMarkMarginRect, - CoachMarkLayoutOrientation.HORIZONTAL); + notchPosition = getMarginTopForNotch(mCoachMarkBuilder.getNotchPosition(), coachMarkDimenInPixel.getPopUpHeightInPixels(), coachMarkDimenInPixel.getNotchDimenInPixels()); + + mPresentation.setPopUpViewBottomRight(coachMarkMarginRect, + CoachMarkLayoutOrientation.HORIZONTAL); + notchMarginRect = new Rect(NO_MARGIN, notchPosition - (int) (MULTIPLICATION_FACTOR_NOTCH_POSITION * coachMarkDimenInPixel.getMarginOffsetForNotchInPixels()), NO_MARGIN, @@ -254,17 +281,36 @@ private void setNotchDisplayEdge(int position, break; case PopUpPosition.BOTTOM: actualLeftMargin = getActualLeftMargin(anchorTopX, coachMarkDimenInPixel); - coachMarkMarginRect = new Rect(actualLeftMargin - - coachMarkDimenInPixel.getMarginRectInPixels().right, - coachMarkDimenInPixel.getMarginRectInPixels().top + - coachMarkDimenInPixel.getImageHeightInPixels(), - NO_MARGIN, - coachMarkDimenInPixel.getMarginRectInPixels().bottom); + if(! mDefaultPopUpLocationFailed){ + + coachMarkMarginRect = new Rect(actualLeftMargin - + coachMarkDimenInPixel.getMarginRectInPixels().right, + coachMarkDimenInPixel.getMarginRectInPixels().top + + coachMarkDimenInPixel.getImageHeightInPixels(), + NO_MARGIN, + coachMarkDimenInPixel.getMarginRectInPixels().bottom); + + notchPosition = getMarginLeftForNotch(mCoachMarkBuilder.getNotchPosition(), + coachMarkDimenInPixel.getPopUpWidthInPixels(), + coachMarkDimenInPixel.getNotchDimenInPixels()); + + }else{ + + coachMarkMarginRect = new Rect(actualLeftMargin - + coachMarkDimenInPixel.getMarginRectInPixels().right, + coachMarkDimenInPixel.getImageHeightInPixels(), + NO_MARGIN, + coachMarkDimenInPixel.getMarginRectInPixels().bottom); + + notchPosition = getMarginLeftForNotch(DEFAULT_NOTCH_VALUE_WIDTH, + coachMarkDimenInPixel.getPopUpWidthInPixels(), + coachMarkDimenInPixel.getNotchDimenInPixels()); + + } + mPresentation.setPopUpViewBottomRight(coachMarkMarginRect, CoachMarkLayoutOrientation.VERTICAL); - notchPosition = getMarginLeftForNotch(mCoachMarkBuilder.getNotchPosition(), - coachMarkDimenInPixel.getPopUpWidthInPixels(), - coachMarkDimenInPixel.getNotchDimenInPixels()); + notchMarginRect = new Rect(notchPosition + coachMarkDimenInPixel.getMarginOffsetForNotchInPixels(), NO_MARGIN, @@ -396,6 +442,7 @@ private int getDisplayPosition(Point viewCenterPoint, } else { correctPosition = getCorrectPositionOfCoachMarkIfDefaultFails(viewCenterPoint, coachMarkDimenInPixel); + mDefaultPopUpLocationFailed = true; } break; case PopUpPosition.RIGHT: @@ -404,6 +451,7 @@ private int getDisplayPosition(Point viewCenterPoint, } else { correctPosition = getCorrectPositionOfCoachMarkIfDefaultFails(viewCenterPoint, coachMarkDimenInPixel); + mDefaultPopUpLocationFailed = true; } break; @@ -413,6 +461,7 @@ private int getDisplayPosition(Point viewCenterPoint, } else { correctPosition = getCorrectPositionOfCoachMarkIfDefaultFails(viewCenterPoint, coachMarkDimenInPixel); + mDefaultPopUpLocationFailed = true; } break; @@ -422,12 +471,14 @@ private int getDisplayPosition(Point viewCenterPoint, } else { correctPosition = getCorrectPositionOfCoachMarkIfDefaultFails(viewCenterPoint, coachMarkDimenInPixel); + mDefaultPopUpLocationFailed = true; } break; case PopUpPosition.NONE: //if user selects no position by default check clockwise to find the correct position correctPosition = getCorrectPositionOfCoachMarkIfDefaultFails(viewCenterPoint, coachMarkDimenInPixel); + break; } return correctPosition;