package com.fastaccess.helper;
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.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.IdRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.design.widget.NavigationView;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
import com.fastaccess.R;
import com.tooltip.OnDismissListener;
import com.tooltip.Tooltip;
import java.util.Arrays;
/**
* Created by kosh20111 on 10/7/2015 10:42 PM
*/
public class ViewHelper {
public interface OnTooltipDismissListener {
void onDismissed(@StringRes int resId);
}
public static int getPrimaryColor(Context context) {
TypedValue typedValue = new TypedValue();
TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[]{R.attr.colorPrimary});
int color = a.getColor(0, 0);
a.recycle();
return color;
}
public static int getPrimaryDarkColor(Context context) {
TypedValue typedValue = new TypedValue();
TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[]{R.attr.colorPrimaryDark});
int color = a.getColor(0, 0);
a.recycle();
return color;
}
public static int toPx(Context context, int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, dp, context.getResources().getDisplayMetrics());
}
public static Drawable getDrawableSelector(int normalColor, int pressedColor) {
if (AppHelper.isLollipopOrHigher()) {
return new RippleDrawable(ColorStateList.valueOf(pressedColor), getRippleMask(normalColor), getRippleMask(normalColor));
} else {
return getStateListDrawable(normalColor, pressedColor);
}
}
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;
}
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
}
);
}
private static boolean isTablet(Resources resources) {
return (resources.getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
public static boolean isTablet(Context context) {
return isTablet(context.getResources());
}
private static void setTextViewMenuCounter(@NonNull NavigationView navigationView, @IdRes int itemId, int count) {
TextView view = (TextView) navigationView.getMenu().findItem(itemId).getActionView();
view.setText(String.format("%s", count));
}
public static boolean isLandscape(Resources resources) {
return resources.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
}
@SuppressWarnings("ConstantConditions,PrivateResource")
public static void showTooltip(@NonNull final View view, @StringRes final int titleResId,
int gravity, @Nullable final OnTooltipDismissListener dismissListener) {
if (view != null && view.getContext() != null) {
if (!PrefHelper.getBoolean(String.valueOf(titleResId))) {
new Tooltip.Builder(view)
.setText(titleResId)
.setTypeface(TypeFaceHelper.getTypeface())
.setTextColor(Color.WHITE)
.setGravity(gravity)
.setPadding(R.dimen.spacing_xs_large)
.setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.primary))
.setDismissOnClick(true)
.setCancelable(true)
.setTextStyle(android.support.v7.appcompat.R.style.TextAppearance_AppCompat_Title_Inverse)
.setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss() {
PrefHelper.set(String.valueOf(titleResId), true);
if (dismissListener != null) dismissListener.onDismissed(titleResId);
}
})
.show();
}
}
}
public static void showTooltip(@NonNull final View view, @StringRes int titleResId) {
showTooltip(view, titleResId, Gravity.BOTTOM, null);
}
public static void showTooltip(@NonNull final View view, @StringRes int titleResId,
@NonNull OnTooltipDismissListener dismissListener) {
showTooltip(view, titleResId, Gravity.BOTTOM, dismissListener);
}
public static void showTooltip(@NonNull Context context, @NonNull final MenuItem view, @StringRes final int titleResId,
int gravity, @Nullable final OnTooltipDismissListener dismissListener) {
if (!PrefHelper.getBoolean(String.valueOf(titleResId))) {
new Tooltip.Builder(context, view)
.setText(titleResId)
.setTypeface(TypeFaceHelper.getTypeface())
.setTextColor(Color.WHITE)
.setGravity(gravity)
.setPadding(R.dimen.spacing_xs_large)
.setBackgroundColor(ContextCompat.getColor(context, R.color.primary))
.setDismissOnClick(true)
.setCancelable(true)
.setTextStyle(android.support.v7.appcompat.R.style.TextAppearance_AppCompat_Title_Inverse)
.setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss() {
PrefHelper.set(String.valueOf(titleResId), true);
if (dismissListener != null) dismissListener.onDismissed(titleResId);
}
})
.show();
}
}
public static void showTooltip(@NonNull Context context, @NonNull final MenuItem view, @StringRes int titleResId) {
showTooltip(context, view, titleResId, Gravity.BOTTOM, null);
}
public static void showTooltip(@NonNull Context context, @NonNull final MenuItem view, @StringRes int titleResId,
@NonNull OnTooltipDismissListener dismissListener) {
showTooltip(context, view, titleResId, Gravity.BOTTOM, dismissListener);
}
public static Rect getLayoutPosition(@NonNull View view) {
Rect myViewRect = new Rect();
view.getGlobalVisibleRect(myViewRect);
return myViewRect;
}
public static int getWidthFromRecyclerView(@NonNull RecyclerView recyclerView, @NonNull WindowManager windowManager) {
int iconSize = PrefConstant.getFinalSize(recyclerView.getContext());
int padding = PrefConstant.getGapSize(recyclerView.getResources());
int count = recyclerView.getAdapter().getItemCount();
int width = (count * (iconSize + padding)) + iconSize;
DisplayMetrics metrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(metrics);
return width <= metrics.widthPixels ? width : metrics.widthPixels;
}
}