// Path: annca/src/main/java/io/github/memfis19/annca/internal/utils/Size.java
// public class Size {
// 
//     private int width;
//     private int height;
// 
//     public Size() {
//         width = 0;
//         height = 0;
//     }
// 
//     public Size(int width, int height) {
//         this.width = width;
//         this.height = height;
//     }
// 
//     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
//     public Size(android.util.Size size) {
//         this.width = size.getWidth();
//         this.height = size.getHeight();
//     }
// 
//     @SuppressWarnings("deprecation")
//     public Size(Camera.Size size) {
//         this.width = size.width;
//         this.height = size.height;
//     }
// 
//     public int getWidth() {
//         return width;
//     }
// 
//     public void setWidth(int width) {
//         this.width = width;
//     }
// 
//     public int getHeight() {
//         return height;
//     }
// 
//     public void setHeight(int height) {
//         this.height = height;
//     }
// 
//     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
//     public static List<Size> fromList2(List<android.util.Size> sizes) {
//         if (sizes == null) return null;
//         List<Size> result = new ArrayList<>(sizes.size());
// 
//         for (android.util.Size size : sizes) {
//             result.add(new Size(size));
//         }
// 
//         return result;
//     }
// 
//     @SuppressWarnings("deprecation")
//     public static List<Size> fromList(List<Camera.Size> sizes) {
//         if (sizes == null) return null;
//         List<Size> result = new ArrayList<>(sizes.size());
// 
//         for (Camera.Size size : sizes) {
//             result.add(new Size(size));
//         }
// 
//         return result;
//     }
// 
//     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
//     public static Size[] fromArray2(android.util.Size[] sizes) {
//         if (sizes == null) return null;
//         Size[] result = new Size[sizes.length];
// 
//         for (int i = 0; i < sizes.length; ++i) {
//             result[i] = new Size(sizes[i]);
//         }
// 
//         return result;
//     }
// 
//     @SuppressWarnings("deprecation")
//     public static Size[] fromArray(Camera.Size[] sizes) {
//         if (sizes == null) return null;
//         Size[] result = new Size[sizes.length];
// 
//         for (int i = 0; i < sizes.length; ++i) {
//             result[i] = new Size(sizes[i]);
//         }
// 
//         return result;
//     }
// }


import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import io.github.memfis19.annca.internal.utils.Size;

    public void setAspectRatio(double aspectRatio) {
        if (aspectRatio < 0) {
            throw new IllegalArgumentException();
        }

        if (targetAspectRatio != aspectRatio) {
            targetAspectRatio = aspectRatio;
            requestLayout();
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (size != null) {
            setMeasuredDimension(size.getWidth(), size.getHeight());
            return;
        }

        if (targetAspectRatio > 0) {
            int initialWidth = MeasureSpec.getSize(widthMeasureSpec);
            int initialHeight = MeasureSpec.getSize(heightMeasureSpec);

            // padding
            int horizontalPadding = getPaddingLeft() + getPaddingRight();
            int verticalPadding = getPaddingTop() + getPaddingBottom();
            initialWidth -= horizontalPadding;
            initialHeight -= verticalPadding;

            double viewAspectRatio = (double) initialWidth / initialHeight;
// Path: annca/src/main/java/io/github/memfis19/annca/internal/utils/Size.java
// public class Size {
// 
//     private int width;
//     private int height;
// 
//     public Size() {
//         width = 0;
//         height = 0;
//     }
// 
//     public Size(int width, int height) {
//         this.width = width;
//         this.height = height;
//     }
// 
//     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
//     public Size(android.util.Size size) {
//         this.width = size.getWidth();
//         this.height = size.getHeight();
//     }
// 
//     @SuppressWarnings("deprecation")
//     public Size(Camera.Size size) {
//         this.width = size.width;
//         this.height = size.height;
//     }
// 
//     public int getWidth() {
//         return width;
//     }
// 
//     public void setWidth(int width) {
//         this.width = width;
//     }
// 
//     public int getHeight() {
//         return height;
//     }
// 
//     public void setHeight(int height) {
//         this.height = height;
//     }
// 
//     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
//     public static List<Size> fromList2(List<android.util.Size> sizes) {
//         if (sizes == null) return null;
//         List<Size> result = new ArrayList<>(sizes.size());
// 
//         for (android.util.Size size : sizes) {
//             result.add(new Size(size));
//         }
// 
//         return result;
//     }
// 
//     @SuppressWarnings("deprecation")
//     public static List<Size> fromList(List<Camera.Size> sizes) {
//         if (sizes == null) return null;
//         List<Size> result = new ArrayList<>(sizes.size());
// 
//         for (Camera.Size size : sizes) {
//             result.add(new Size(size));
//         }
// 
//         return result;
//     }
// 
//     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
//     public static Size[] fromArray2(android.util.Size[] sizes) {
//         if (sizes == null) return null;
//         Size[] result = new Size[sizes.length];
// 
//         for (int i = 0; i < sizes.length; ++i) {
//             result[i] = new Size(sizes[i]);
//         }
// 
//         return result;
//     }
// 
//     @SuppressWarnings("deprecation")
//     public static Size[] fromArray(Camera.Size[] sizes) {
//         if (sizes == null) return null;
//         Size[] result = new Size[sizes.length];
// 
//         for (int i = 0; i < sizes.length; ++i) {
//             result[i] = new Size(sizes[i]);
//         }
// 
//         return result;
//     }
// }


// Path: annca/src/main/java/io/github/memfis19/annca/internal/ui/view/AspectFrameLayout.java
import android.content.Context;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import io.github.memfis19.annca.internal.utils.Size;


    public void setAspectRatio(double aspectRatio) {
        if (aspectRatio < 0) {
            throw new IllegalArgumentException();
        }

        if (targetAspectRatio != aspectRatio) {
            targetAspectRatio = aspectRatio;
            requestLayout();
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (size != null) {
            setMeasuredDimension(size.getWidth(), size.getHeight());
            return;
        }

        if (targetAspectRatio > 0) {
            int initialWidth = MeasureSpec.getSize(widthMeasureSpec);
            int initialHeight = MeasureSpec.getSize(heightMeasureSpec);

            // padding
            int horizontalPadding = getPaddingLeft() + getPaddingRight();
            int verticalPadding = getPaddingTop() + getPaddingBottom();
            initialWidth -= horizontalPadding;
            initialHeight -= verticalPadding;

            double viewAspectRatio = (double) initialWidth / initialHeight;
            double aspectDifference = targetAspectRatio / viewAspectRatio - 1;