package com.fastaccess.helper; import android.app.Activity; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.RippleDrawable; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.shapes.RoundRectShape; import android.support.annotation.ColorInt; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.text.Layout; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.LinearLayout; import android.widget.TextView; import com.annimon.stream.IntStream; import com.fastaccess.R; import java.util.Arrays; /** * Created by kosh20111 on 10/7/2015 10:42 PM */ public class ViewHelper { @ColorInt public static int getPrimaryDarkColor(@NonNull Context context) { return getColorAttr(context, R.attr.colorPrimaryDark); } @ColorInt public static int getPrimaryColor(@NonNull Context context) { return getColorAttr(context, R.attr.colorPrimary); } @ColorInt public static int getPrimaryTextColor(@NonNull Context context) { return getColorAttr(context, android.R.attr.textColorPrimary); } @ColorInt public static int getSecondaryTextColor(@NonNull Context context) { return getColorAttr(context, android.R.attr.textColorSecondary); } @ColorInt public static int getTertiaryTextColor(@NonNull Context context) { return getColorAttr(context, android.R.attr.textColorTertiary); } @ColorInt public static int getAccentColor(@NonNull Context context) { return getColorAttr(context, R.attr.colorAccent); } @ColorInt public static int getIconColor(@NonNull Context context) { return getColorAttr(context, R.attr.icon_color); } @ColorInt public static int getWindowBackground(@NonNull Context context) { return getColorAttr(context, android.R.attr.windowBackground); } @ColorInt public static int getListDivider(@NonNull Context context) { return getColorAttr(context, R.attr.dividerColor); } @ColorInt public static int getCardBackground(@NonNull Context context) { return getColorAttr(context, R.attr.card_background); } @ColorInt public static int getPatchAdditionColor(@NonNull Context context) { return getColorAttr(context, R.attr.patch_addition); } @ColorInt public static int getPatchDeletionColor(@NonNull Context context) { return getColorAttr(context, R.attr.patch_deletion); } @ColorInt public static int getPatchRefColor(@NonNull Context context) { return getColorAttr(context, R.attr.patch_ref); } @ColorInt private static int getColorAttr(@NonNull Context context, int attr) { Resources.Theme theme = context.getTheme(); TypedArray typedArray = theme.obtainStyledAttributes(new int[]{attr}); final int color = typedArray.getColor(0, Color.LTGRAY); typedArray.recycle(); return color; } public static int toPx(@NonNull Context context, int dp) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, dp, context.getResources().getDisplayMetrics()); } public static void tintDrawable(@NonNull Drawable drawable, @ColorInt int color) { drawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); } public static Drawable getDrawableSelector(int normalColor, int pressedColor) { return new RippleDrawable(ColorStateList.valueOf(pressedColor), getRippleMask(normalColor), getRippleMask(normalColor)); } @Nullable private static Drawable getRippleMask(int color) { float[] outerRadii = new float[8]; Arrays.fill(outerRadii, 3); RoundRectShape r = new RoundRectShape(outerRadii, null, null); ShapeDrawable shapeDrawable = new ShapeDrawable(r); shapeDrawable.getPaint().setColor(color); return shapeDrawable; } @NonNull private static StateListDrawable getStateListDrawable(int normalColor, int pressedColor) { StateListDrawable states = new StateListDrawable(); states.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(pressedColor)); states.addState(new int[]{android.R.attr.state_focused}, new ColorDrawable(pressedColor)); states.addState(new int[]{android.R.attr.state_activated}, new ColorDrawable(pressedColor)); states.addState(new int[]{android.R.attr.state_selected}, new ColorDrawable(pressedColor)); states.addState(new int[]{}, new ColorDrawable(normalColor)); return states; } public static ColorStateList textSelector(int normalColor, int pressedColor) { return new ColorStateList( new int[][]{ new int[]{android.R.attr.state_pressed}, new int[]{android.R.attr.state_focused}, new int[]{android.R.attr.state_activated}, new int[]{android.R.attr.state_selected}, new int[]{} }, new int[]{ pressedColor, pressedColor, pressedColor, pressedColor, normalColor } ); } public static boolean isTablet(@NonNull Activity activity) { DisplayMetrics metrics = new DisplayMetrics(); float yInches = metrics.heightPixels / metrics.ydpi; float xInches = metrics.widthPixels / metrics.xdpi; double inches = Math.sqrt(xInches * xInches + yInches * yInches); return inches >= 6.5; } @SuppressWarnings("ConstantConditions") public static boolean isTablet(@NonNull Context context) { if (context == null) return false; Activity activity = ActivityHelper.getActivity(context); if (activity != null) { return isTablet(activity); } return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } public static boolean isLandscape(@NonNull Resources resources) { return resources.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; } @NonNull @SuppressWarnings("WeakerAccess") public static Rect getLayoutPosition(@NonNull View view) { Rect myViewRect = new Rect(); view.getGlobalVisibleRect(myViewRect); return myViewRect; } @SuppressWarnings("WeakerAccess") @Nullable public static String getTransitionName(@NonNull View view) { return !InputHelper.isEmpty(view.getTransitionName()) ? view.getTransitionName() : null; } @SuppressWarnings("WeakerAccess") public static void showKeyboard(@NonNull View v, @NonNull Context activity) { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(v, 0); } public static void showKeyboard(@NonNull View v) { showKeyboard(v, v.getContext()); } public static void hideKeyboard(@NonNull View view) { InputMethodManager inputManager = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } @ColorInt public static int generateTextColor(int background) { return getContrastColor(background); } @ColorInt private static int getContrastColor(@ColorInt int color) { double a = 1 - (0.299 * Color.red(color) + 0.587 * Color.green(color) + 0.114 * Color.blue(color)) / 255; return a < 0.5 ? Color.BLACK : Color.WHITE; } public static boolean isEllipsed(@NonNull TextView textView) { Layout layout = textView.getLayout(); if (layout != null) { int lines = layout.getLineCount(); if (lines > 0) { return IntStream.range(0, lines).anyMatch(line -> layout.getEllipsisCount(line) > 0); } } return false; } @NonNull public static TextView getTabTextView(@NonNull TabLayout tabs, int tabIndex) { return (TextView) (((LinearLayout) ((LinearLayout) tabs.getChildAt(0)).getChildAt(tabIndex)).getChildAt(1)); } }