package com.marverenic.music.view;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.DimenRes;
import android.support.v4.view.ViewCompat;
import android.view.View;
import android.view.ViewGroup;
import com.marverenic.music.R;
public final class ViewUtils {
/**
* This class is never instantiated
*/
private ViewUtils() {
}
public static int getNumberOfGridColumns(Context context, @DimenRes int minWidthDimen) {
Resources res = context.getResources();
// Calculate the number of columns that can fit on the screen
short screenWidth = (short) res.getConfiguration().screenWidthDp;
float density = res.getDisplayMetrics().density;
short globalPadding = (short) (res.getDimension(R.dimen.global_padding) / density);
short minWidth = (short) (res.getDimension(minWidthDimen) / density);
short gridPadding = (short) (res.getDimension(R.dimen.grid_margin) / density);
short availableWidth = (short) (screenWidth - 2 * globalPadding);
return (availableWidth) / (minWidth + 2 * gridPadding);
}
public static Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
}
Bitmap bitmap = Bitmap.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
public static boolean isRtl(Context context) {
return Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN
&& context.getResources().getConfiguration().getLayoutDirection()
== ViewCompat.LAYOUT_DIRECTION_RTL;
}
public static <V extends View> V findViewByClass(ViewGroup rootView, Class<V> clazz) {
for (int i = 0; i < rootView.getChildCount(); i++) {
View child = rootView.getChildAt(i);
if (child.getClass().equals(clazz)) {
//noinspection unchecked
return (V) child;
} else if (child instanceof ViewGroup) {
V found = findViewByClass((ViewGroup) child, clazz);
if (found != null) {
return found;
}
}
}
return null;
}
}