package com.joanfuentes.hintcase.utils; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.Point; import android.os.Build; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.ContextThemeWrapper; import android.view.Display; import android.view.View; import android.view.WindowManager; public class DimenUtils { public static int getStatusBarHeight(Context context) { int statusBarHeight = 0; Resources resources = context.getResources(); int id = resources.getIdentifier("status_bar_height", "dimen", "android"); if (id > 0) { statusBarHeight = resources.getDimensionPixelSize(id); } return statusBarHeight; } public static int getActionBarHeight(Context context) { int actionBarHeight = 0; TypedValue tv = new TypedValue(); if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, context.getResources().getDisplayMetrics()); } return actionBarHeight; } public static int dipToPixels(Context context, float valueInDP) { DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDP, displayMetrics); } public static Point getNavigationBarSizeIfExistAtTheBottom(Context context) { Point appUsableSize = getAppUsableScreenSize(context); Point realScreenSize = getRealScreenSize(context); Point navigationPoint; boolean navigationBarIsPresent = appUsableSize.y < realScreenSize.y; if (navigationBarIsPresent) { navigationPoint = new Point(appUsableSize.x, realScreenSize.y - appUsableSize.y); } else { navigationPoint = new Point(); } return navigationPoint; } public static Point getNavigationBarSizeIfExistOnTheRight(Context context) { Point appUsableSize = getAppUsableScreenSize(context); Point realScreenSize = getRealScreenSize(context); Point navigationPoint; boolean navigationBarIsPresent = appUsableSize.x < realScreenSize.x; if (navigationBarIsPresent) { navigationPoint = new Point(realScreenSize.x - appUsableSize.x, appUsableSize.y); } else { navigationPoint = new Point(); } return navigationPoint; } public static Point getAppUsableScreenSize(Context context) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); Point size = new Point(); display.getSize(size); return size; } public static Point getRealScreenSize(Context context) { Point size = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); display.getRealSize(size); } else { View decorView = null; if(context instanceof Activity) { decorView = ((Activity) context).getWindow().getDecorView(); } else if(context instanceof ContextThemeWrapper) { Context baseContext = ((ContextThemeWrapper) context).getBaseContext(); if(baseContext instanceof Activity) { decorView = ((Activity) baseContext).getWindow().getDecorView(); } } if(decorView != null) { size.x = decorView.getWidth(); size.y = decorView.getHeight(); } } return size; } }