package com.aviary.android.feather.utils; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; import com.aviary.android.feather.R; import com.aviary.android.feather.graphics.AnimatedRotateDrawable; import com.aviary.android.feather.widget.IToast; import com.aviary.android.feather.widget.wp.CellLayout; /** * Variuos UI utilities. * * @author alessandro */ public class UIUtils { private static Context mContext; private static LayoutInflater mLayoutInflater; /** * Inits the. * * @param context * the context */ public static void init( Context context ) { mContext = context; } public static LayoutInflater getLayoutInflater() { if ( mLayoutInflater == null ) { mLayoutInflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); } return mLayoutInflater; } /** * Show custom toast. * * @param viewResId * the view res id */ public static void showCustomToast( int viewResId ) { showCustomToast( viewResId, Toast.LENGTH_SHORT ); } /** * Show custom toast. * * @param viewResId * the view res id * @param duration * the duration */ public static void showCustomToast( int viewResId, int duration ) { showCustomToast( viewResId, duration, Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM ); } public static IToast createModalLoaderToast() { IToast mToastLoader = IToast.make( mContext, -1 ); View view = getLayoutInflater().inflate( R.layout.feather_progress_view, null ); AnimatedRotateDrawable d = new AnimatedRotateDrawable( mContext.getResources(), R.drawable.feather_spinner_white_76, 12, 100 ); ProgressBar progress = (ProgressBar) view.findViewById( R.id.progress ); progress.setIndeterminateDrawable( d ); mToastLoader.setView( view ); return mToastLoader; } /** * Display a system Toast using a custom ui view. * * @param viewResId * the view res id * @param duration * the duration * @param gravity * the gravity */ public static void showCustomToast( int viewResId, int duration, int gravity ) { View layout = getLayoutInflater().inflate( viewResId, null ); Toast toast = new Toast( mContext.getApplicationContext() ); toast.setGravity( gravity, 0, 0 ); toast.setDuration( duration ); toast.setView( layout ); toast.show(); } static PorterDuffColorFilter mWhiteMultiplyFilter = new PorterDuffColorFilter( 0xFFFFFFFF, Mode.MULTIPLY ); /** * Draw folder icon. * * @param folder * the folder * @param icon * the icon * @param icon_new * the icon_new * @return the drawable */ public static Drawable drawFolderIcon( Drawable folder, Drawable icon, float ratio ) { final int w = folder.getIntrinsicWidth(); final int h = folder.getIntrinsicHeight(); folder.setBounds( 0, 0, w, h ); Bitmap bitmap = Bitmap.createBitmap( w, h, Config.ARGB_8888 ); Canvas canvas = new Canvas( bitmap ); folder.draw( canvas ); float icon_w = (float) w / ratio; float icon_h = (float) h / ratio; float icon_left = ( w - icon_w ) / 2; float icon_top = ( h - icon_h ) / 2; icon.setBounds( (int) icon_left, (int) icon_top, (int) ( icon_left + icon_w ), (int) ( icon_top + icon_h ) ); icon.setColorFilter( mWhiteMultiplyFilter ); icon.setFilterBitmap( true ); icon.draw( canvas ); return new BitmapDrawable( bitmap ); } public static Bitmap drawFolderBitmap( Drawable folder, Drawable icon, float ratio ) { final int w = folder.getIntrinsicWidth(); final int h = folder.getIntrinsicHeight(); folder.setBounds( 0, 0, w, h ); Bitmap bitmap = Bitmap.createBitmap( w, h, Config.ARGB_8888 ); Canvas canvas = new Canvas( bitmap ); folder.draw( canvas ); float icon_w = (float) w / ratio; float icon_h = (float) h / ratio; float icon_left = ( w - icon_w ) / 2; float icon_top = ( h - icon_h ) / 2; icon.setBounds( (int) icon_left, (int) icon_top, (int) ( icon_left + icon_w ), (int) ( icon_top + icon_h ) ); icon.setColorFilter( mWhiteMultiplyFilter ); icon.setFilterBitmap( true ); icon.draw( canvas ); return bitmap; } /** * Try to calculate the optimal number of columns for the current screen. * * @return the screen optimal columns * @see CellLayout#setNumCols(int) */ public static int getScreenOptimalColumns() { return getScreenOptimalColumns( 0 ); } /** * Gets the screen optimal columns. * * @param drawable_width * the drawable_width * @return the screen optimal columns */ public static int getScreenOptimalColumns( int drawable_width ) { DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); double a = (double) metrics.widthPixels / (double) metrics.densityDpi; // 2.25 int b = (int) Math.ceil( a * 2.0 ); // 5 if ( ( b * drawable_width ) > metrics.widthPixels ) { return metrics.widthPixels / drawable_width; } return Math.min( Math.max( b, 3 ), 10 ); } public static int getScreenOptimalColumnsPixels( int cell_pixels ) { DisplayMetrics metrics = mContext.getResources().getDisplayMetrics(); double a = (double) metrics.widthPixels; int columns = (int) ( a / cell_pixels ); return columns; } }