content: package uk.co.senab.photoview;
  
  import android.graphics.RectF;
  import android.util.Log;
  import android.view.GestureDetector;
  import android.view.MotionEvent;
  import android.widget.ImageView;
  
  /**
   * Provided default implementation of GestureDetector.OnDoubleTapListener, to be overriden with custom behavior, if needed
   * <p>&nbsp;</p>
   * To be used via {@link uk.co.senab.photoview.PhotoViewAttacher#setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener)}
   */
  public class DefaultOnDoubleTapListener implements GestureDetector.OnDoubleTapListener {
  
      private PhotoViewAttacher photoViewAttacher;
  
      /**
       * Default constructor
       *
       * @param photoViewAttacher PhotoViewAttacher to bind to
       */
      public DefaultOnDoubleTapListener(PhotoViewAttacher photoViewAttacher) {
          setPhotoViewAttacher(photoViewAttacher);
      }
  
      /**
       * Allows to change PhotoViewAttacher within range of single instance
       *
       * @param newPhotoViewAttacher PhotoViewAttacher to bind to
       */
      public void setPhotoViewAttacher(PhotoViewAttacher newPhotoViewAttacher) {
          this.photoViewAttacher = newPhotoViewAttacher;
      }
  
      @Override
      public boolean onSingleTapConfirmed(MotionEvent e) {
          if (this.photoViewAttacher == null)
              return false;
  
          ImageView imageView = photoViewAttacher.getImageView();
  
          if (null != photoViewAttacher.getOnPhotoTapListener()) {
              final RectF displayRect = photoViewAttacher.getDisplayRect();
  
              if (null != displayRect) {
                  final float x = e.getX(), y = e.getY();
  
                  // Check to see if the user tapped on the photo
                  if (displayRect.contains(x, y)) {
  
                      float xResult = (x - displayRect.left)
                              / displayRect.width();
                      float yResult = (y - displayRect.top)
                              / displayRect.height();
  
                      photoViewAttacher.getOnPhotoTapListener().onPhotoTap(imageView, xResult, yResult);
                      return true;
                  }
              }
          }
          if (null != photoViewAttacher.getOnViewTapListener()) {
              photoViewAttacher.getOnViewTapListener().onViewTap(imageView, e.getX(), e.getY());
          }
  
          return false;
      }
  
      @Override
      public boolean onDoubleTap(MotionEvent ev) {
          if (photoViewAttacher == null)
              {
          	return false;
              }
  
          try {
              float scale = photoViewAttacher.getScale();
              float x = ev.getX();
              float y = ev.getY();
              /**change getMaximumScale to getMinimumScale at else if */
              if (scale < photoViewAttacher.getMediumScale()) {
                  photoViewAttacher.setScale(photoViewAttacher.getMediumScale(), x, y, true);
              } else if (scale >= photoViewAttacher.getMediumScale() && scale < photoViewAttacher.getMaximumScale()) {
                  photoViewAttacher.setScale(photoViewAttacher.getMinimumScale(), x, y, true);
              } else {
                  photoViewAttacher.setScale(photoViewAttacher.getMinimumScale(), x, y, true);
              }
              
          } catch (ArrayIndexOutOfBoundsException e) {
              // Can sometimes happen when getX() and getY() is called
          }
  
          return true;
      }
  
      @Override
      public boolean onDoubleTapEvent(MotionEvent e) {
          // Wait for the confirmed onDoubleTap() instead
          return false;
      }
  
  }
  