// Path: photoview/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public interface OnMatrixChangedListener {
//     /**
//      * Callback for when the Matrix displaying the Drawable has changed. This could be because
//      * the View's bounds have changed, or the user has zoomed.
//      *
//      * @param rect - Rectangle displaying the Drawable's new bounds.
//      */
//     void onMatrixChanged(RectF rect);
// }
// 
// Path: photoview/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public interface OnPhotoTapListener {
// 
//     /**
//      * A callback to receive where the user taps on a photo. You will only receive a callback
//      * if
//      * the user taps on the actual photo, tapping on 'whitespace' will be ignored.
//      *
//      * @param view - View the user tapped.
//      * @param x - where the user tapped from the of the Drawable, as percentage of the
//      * Drawable width.
//      * @param y - where the user tapped from the top of the Drawable, as percentage of the
//      * Drawable height.
//      */
//     void onPhotoTap(View view, float x, float y);
// 
//     /**
//      * A simple callback where out of photo happened;
//      */
//     void onOutsidePhotoTap();
// }
// 
// Path: photoview/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public interface OnViewTapListener {
// 
//     /**
//      * A callback to receive where the user taps on a ImageView. You will receive a callback if
//      * the user taps anywhere on the view, tapping on 'whitespace' will not be ignored.
//      *
//      * @param view - View the user tapped.
//      * @param x - where the user tapped from the left of the View.
//      * @param y - where the user tapped from the top of the View.
//      */
//     void onViewTap(View view, float x, float y);
// }


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.widget.ImageView;
import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;
        if (null != mAttacher) {
            mAttacher.update();
        }
    }

    @Override
    protected boolean setFrame(int l, int t, int r, int b) {
        boolean changed = super.setFrame(l, t, r, b);
        if (null != mAttacher) {
            mAttacher.update();
        }
        return changed;
    }

    @Override
    public void setOnMatrixChangeListener(OnMatrixChangedListener listener) {
        mAttacher.setOnMatrixChangeListener(listener);
    }

    @Override
    public void setOnLongClickListener(OnLongClickListener l) {
        mAttacher.setOnLongClickListener(l);
    }

    @Override
    public void setOnPhotoTapListener(OnPhotoTapListener listener) {
        mAttacher.setOnPhotoTapListener(listener);
    }

    @Override
// Path: photoview/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public interface OnMatrixChangedListener {
//     /**
//      * Callback for when the Matrix displaying the Drawable has changed. This could be because
//      * the View's bounds have changed, or the user has zoomed.
//      *
//      * @param rect - Rectangle displaying the Drawable's new bounds.
//      */
//     void onMatrixChanged(RectF rect);
// }
// 
// Path: photoview/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public interface OnPhotoTapListener {
// 
//     /**
//      * A callback to receive where the user taps on a photo. You will only receive a callback
//      * if
//      * the user taps on the actual photo, tapping on 'whitespace' will be ignored.
//      *
//      * @param view - View the user tapped.
//      * @param x - where the user tapped from the of the Drawable, as percentage of the
//      * Drawable width.
//      * @param y - where the user tapped from the top of the Drawable, as percentage of the
//      * Drawable height.
//      */
//     void onPhotoTap(View view, float x, float y);
// 
//     /**
//      * A simple callback where out of photo happened;
//      */
//     void onOutsidePhotoTap();
// }
// 
// Path: photoview/src/main/java/uk/co/senab/photoview/PhotoViewAttacher.java
// public interface OnViewTapListener {
// 
//     /**
//      * A callback to receive where the user taps on a ImageView. You will receive a callback if
//      * the user taps anywhere on the view, tapping on 'whitespace' will not be ignored.
//      *
//      * @param view - View the user tapped.
//      * @param x - where the user tapped from the left of the View.
//      * @param y - where the user tapped from the top of the View.
//      */
//     void onViewTap(View view, float x, float y);
// }


// Path: photoview/src/main/java/uk/co/senab/photoview/PhotoView.java
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.widget.ImageView;
import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnPhotoTapListener;
import uk.co.senab.photoview.PhotoViewAttacher.OnViewTapListener;

        if (null != mAttacher) {
            mAttacher.update();
        }
    }

    @Override
    protected boolean setFrame(int l, int t, int r, int b) {
        boolean changed = super.setFrame(l, t, r, b);
        if (null != mAttacher) {
            mAttacher.update();
        }
        return changed;
    }

    @Override
    public void setOnMatrixChangeListener(OnMatrixChangedListener listener) {
        mAttacher.setOnMatrixChangeListener(listener);
    }

    @Override
    public void setOnLongClickListener(OnLongClickListener l) {
        mAttacher.setOnLongClickListener(l);
    }

    @Override
    public void setOnPhotoTapListener(OnPhotoTapListener listener) {
        mAttacher.setOnPhotoTapListener(listener);
    }

    @Override
    public void setOnViewTapListener(OnViewTapListener listener) {