package com.mopub.mraid; import android.content.Context; import android.graphics.Rect; import android.support.annotation.NonNull; import com.mopub.common.util.Dips; /** * Screen metrics needed by the MRAID container. * * Each rectangle is stored using both it's original and scaled coordinates to avoid allocating * extra memory that would otherwise be needed to do these conversions. */ class MraidScreenMetrics { @NonNull private final Context mContext; @NonNull private final Rect mScreenRect; @NonNull private final Rect mScreenRectDips; @NonNull private final Rect mRootViewRect; @NonNull private final Rect mRootViewRectDips; @NonNull private final Rect mCurrentAdRect; @NonNull private final Rect mCurrentAdRectDips; @NonNull private final Rect mDefaultAdRect; @NonNull private final Rect mDefaultAdRectDips; private final float mDensity; MraidScreenMetrics(Context context, float density) { mContext = context.getApplicationContext(); mDensity = density; mScreenRect = new Rect(); mScreenRectDips = new Rect(); mRootViewRect = new Rect(); mRootViewRectDips = new Rect(); mCurrentAdRect = new Rect(); mCurrentAdRectDips = new Rect(); mDefaultAdRect = new Rect(); mDefaultAdRectDips = new Rect(); } private void convertToDips(Rect sourceRect, Rect outRect) { outRect.set(Dips.pixelsToIntDips(sourceRect.left, mContext), Dips.pixelsToIntDips(sourceRect.top, mContext), Dips.pixelsToIntDips(sourceRect.right, mContext), Dips.pixelsToIntDips(sourceRect.bottom, mContext)); } public float getDensity() { return mDensity; } void setScreenSize(int width, int height) { mScreenRect.set(0, 0, width, height); convertToDips(mScreenRect, mScreenRectDips); } @NonNull Rect getScreenRect() { return mScreenRect; } @NonNull Rect getScreenRectDips() { return mScreenRectDips; } void setRootViewPosition(int x, int y, int width, int height) { mRootViewRect.set(x, y, x + width, y + height); convertToDips(mRootViewRect, mRootViewRectDips); } @NonNull Rect getRootViewRect() { return mRootViewRect; } @NonNull Rect getRootViewRectDips() { return mRootViewRectDips; } void setCurrentAdPosition(int x, int y, int width, int height) { mCurrentAdRect.set(x, y, x + width, y + height); convertToDips(mCurrentAdRect, mCurrentAdRectDips); } @NonNull Rect getCurrentAdRect() { return mCurrentAdRect; } @NonNull Rect getCurrentAdRectDips() { return mCurrentAdRectDips; } void setDefaultAdPosition(int x, int y, int width, int height) { mDefaultAdRect.set(x, y, x + width, y + height); convertToDips(mDefaultAdRect, mDefaultAdRectDips); } @NonNull Rect getDefaultAdRect() { return mDefaultAdRect; } @NonNull Rect getDefaultAdRectDips() { return mDefaultAdRectDips; } }