package com.jdroid.android.utils; import android.annotation.TargetApi; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Point; import android.os.Build; import android.util.DisplayMetrics; import android.view.Display; import android.view.WindowManager; import com.jdroid.android.application.AbstractApplication; import com.jdroid.android.R; import com.jdroid.java.utils.StringUtils; public class ScreenUtils { public static final String LDPI_DENSITY_NAME = "ldpi"; public static final String MDPI_DENSITY_NAME = "mdpi"; public static final String HDPI_DENSITY_NAME = "hdpi"; public static final String XHDPI_DENSITY_NAME = "xhdpi"; public static final String XXHDPI_DENSITY_NAME = "xxhdpi"; public static final String XXXHDPI_DENSITY_NAME = "xxxhdpi"; /** * Gets the {@link WindowManager} from the context. * * @return {@link WindowManager} The window manager. */ public static WindowManager getWindowManager() { return (WindowManager)AbstractApplication.get().getSystemService(Context.WINDOW_SERVICE); } public static int getWindowHeight() { Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); return size.y; } public static int getWindowWidth() { Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); return size.x; } public static Boolean isLessThan7Inches() { return AbstractApplication.get().getResources().getBoolean(R.bool.jdroid_isLessThan7Inches); } public static Boolean isBetween7And10Inches() { return AbstractApplication.get().getResources().getBoolean(R.bool.jdroid_isBetween7And10Inches); } public static Boolean is10Inches() { return AbstractApplication.get().getResources().getBoolean(R.bool.jdroid_is10Inches); } public static Boolean is10InchesLand() { Resources resources = AbstractApplication.get().getResources(); return resources.getBoolean(R.bool.jdroid_is10Inches) && resources.getBoolean(R.bool.jdroid_isOrientationLandscape); } public static Boolean is7InchesOrLarger() { return isBetween7And10Inches() || is10Inches(); } public static Integer getSmallestScreenWidthDp() { Configuration config = AbstractApplication.get().getResources().getConfiguration(); return config.smallestScreenWidthDp; } public static Integer getScreenWidthDp() { Configuration config = AbstractApplication.get().getResources().getConfiguration(); return config.screenWidthDp; } public static Integer getScreenHeightDp() { Configuration config = AbstractApplication.get().getResources().getConfiguration(); return config.screenHeightDp; } public static Integer getDensityDpi() { DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); return metrics.densityDpi; } public static Boolean isLdpiDensity() { return getDensityDpi() <= DisplayMetrics.DENSITY_LOW; } public static Boolean isMdpiDensity() { int densityDpi = getDensityDpi(); return densityDpi > DisplayMetrics.DENSITY_LOW && densityDpi <= DisplayMetrics.DENSITY_MEDIUM; } public static Boolean isHdpiDensity() { int densityDpi = getDensityDpi(); return densityDpi > DisplayMetrics.DENSITY_MEDIUM && densityDpi <= DisplayMetrics.DENSITY_HIGH; } public static Boolean isXhdpiDensity() { int densityDpi = getDensityDpi(); return densityDpi > DisplayMetrics.DENSITY_HIGH && densityDpi <= DisplayMetrics.DENSITY_XHIGH; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public static Boolean isXXhdpiDensity() { int densityDpi = getDensityDpi(); return densityDpi > DisplayMetrics.DENSITY_XHIGH && densityDpi <= DisplayMetrics.DENSITY_XXHIGH; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public static Boolean isXXXhdpiDensity() { int densityDpi = getDensityDpi(); return densityDpi > DisplayMetrics.DENSITY_XXHIGH && densityDpi <= DisplayMetrics.DENSITY_XXXHIGH; } public static String getScreenDensity() { String density = StringUtils.EMPTY; if (ScreenUtils.isLdpiDensity()) { density = LDPI_DENSITY_NAME; } else if (ScreenUtils.isMdpiDensity()) { density = MDPI_DENSITY_NAME; } else if (ScreenUtils.isHdpiDensity()) { density = HDPI_DENSITY_NAME; } else if (ScreenUtils.isXhdpiDensity()) { density = XHDPI_DENSITY_NAME; } else if (ScreenUtils.isXXhdpiDensity()) { density = XXHDPI_DENSITY_NAME; } else if (ScreenUtils.isXXXhdpiDensity()) { density = XXXHDPI_DENSITY_NAME; } return density; } public static Integer getLargestScreenWidthPx() { Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); return Math.max(size.x, size.y); } public static Integer getScreenWidthPx() { Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); return size.x; } /** * This method converts dp unit to equivalent pixels, depending on device density. * * @param dp A value in dp (density independent pixels) unit. Which we need to convert into pixels * @param context Context to get resources and device specific display metrics * @return An int value to represent px equivalent to dp depending on device density */ public static int convertDpToPixel(float dp, Context context) { Resources resources = context.getResources(); DisplayMetrics metrics = resources.getDisplayMetrics(); return (int)(dp * (metrics.densityDpi / 160f)); } /** * This method converts device specific pixels to density independent pixels. * * @param px A value in px (pixels) unit. Which we need to convert into db * @param context Context to get resources and device specific display metrics * @return An int value to represent dp equivalent to px value */ public static int convertPixelsToDp(int px, Context context) { Resources resources = context.getResources(); DisplayMetrics metrics = resources.getDisplayMetrics(); return (int)(px / (metrics.densityDpi / 160f)); } public static float convertSpDimenToSp(int spDimenResId, Context context) { Resources resources = context.getResources(); DisplayMetrics metrics = resources.getDisplayMetrics(); return context.getResources().getDimensionPixelSize(spDimenResId) / metrics.scaledDensity; } public static int convertDimenToPixel(int dimenResId) { return (int)AbstractApplication.get().getResources().getDimension(dimenResId); } }