package com.mogoo.launcher2.utils; import java.util.Date; import com.mogoo.launcher2.FastBitmapDrawable; import com.mogoo.launcher2.ItemInfo; import com.mogoo.launcher2.Mogoo_BubbleTextView; import com.mogoo.launcher2.Mogoo_DockWorkSpace; import com.mogoo.launcher2.ShortcutInfo; import com.mogoo.launcher2.Workspace; import com.mogoo.launcher2.config.Mogoo_GlobalConfig; import com.mogoo.launcher2.exception.Mogoo_BootRestoreException; import com.mogoo.launcher2.restore.Mogoo_UncaughtExceptionHandler; import android.content.ComponentName; import android.content.Context; import android.content.pm.ResolveInfo; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.view.View; import android.view.ViewGroup; import com.mogoo.launcher.R; /** * 日期图标工具类 * @author hy * */ public class CalendarUtils { private static ResolveInfo mCalendarInfo; private static final String CALENDAR_PACKAGE_NAME = "com.android.calendar"; private static String[] weakArray; public static Bitmap getCalendarIcon(ResolveInfo info, Mogoo_BitmapCache cache){ if(info != null && info.activityInfo != null && CALENDAR_PACKAGE_NAME.equals(info.activityInfo.packageName)){ // try { // Thread.sleep(10000); // } catch (InterruptedException e) { // e.printStackTrace(); // } if(weakArray == null){ weakArray = cache.getContext().getResources().getStringArray(R.array.weak_entries); } int width = Mogoo_GlobalConfig.getIconWidth(); int height = Mogoo_GlobalConfig.getIconHeight(); mCalendarInfo = info; Drawable d = cache.loadIcon(cache.getContext().getPackageManager(), mCalendarInfo); Bitmap icon = Mogoo_BitmapUtils.createIconBitmap(d, cache.getContext(), true); Rect rect = new Rect(); Date currentDate = new Date(System.currentTimeMillis()); String day = weakArray[currentDate.getDay()]; // String date = (currentDate.getDate() > 9 ? "" : "0") + currentDate.getDate() ; String date = ""+currentDate.getDate() ; Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.WHITE); paint.setTextSize(Mogoo_GlobalConfig.getIntByKey(Mogoo_GlobalConfig.DAY_TEXT_SIZE)); paint.getTextBounds(day, 0, day.length(), rect); Canvas canvas = new Canvas(icon); canvas.drawText(day, (width - rect.width()) / 2 + 2, rect.height() + 3, paint); paint.setColor(0xFF333333); paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); paint.setTextSize(Mogoo_GlobalConfig.getIntByKey(Mogoo_GlobalConfig.DATE_TEXT_SIZE)); paint.getTextBounds(date, 0, date.length(), rect); canvas.drawText(date, (width - rect.width())/2 , height - (height - rect.height())/2 + Mogoo_GlobalConfig.getDateHeightFixValue(), paint); canvas.save(); return icon; } return null; } public static void referenceCalendarIcon(Mogoo_BitmapCache cache, Context context){ if(mCalendarInfo != null && cache != null){ ComponentName comp = new ComponentName(mCalendarInfo.activityInfo.packageName, mCalendarInfo.activityInfo.name); cache.remove(comp); cache.recycle(comp, Mogoo_BitmapCache.RECYCLE_COMPONENT_NAME_ALL); ItemInfo info = null; Workspace workspace = (Workspace)Mogoo_ComponentBus.getInstance().getActivityComp(R.id.workspace, context); if(workspace == null){ throw new Mogoo_BootRestoreException(); } ViewGroup vg = null; View v = null; int size = workspace.getChildCount(); for(int i = 0; i < size; i++){ vg = (ViewGroup) workspace.getChildAt(i); if(vg == null){ continue; } if(executeVg(cache, vg)){ return; } } vg = (ViewGroup)Mogoo_ComponentBus.getInstance().getActivityComp(R.id.dockWorkSpace, context); if(executeVg(cache, vg)){ return; } vg = (ViewGroup) Mogoo_ComponentBus.getInstance().getActivityComp( R.id.folderWorkspace, context); if (executeVg(cache, vg)) { return; } } } private static boolean executeVg(Mogoo_BitmapCache cache, ViewGroup vg) { ItemInfo info; View v; int count = vg.getChildCount(); for(int j = 0; j < count; j++){ v = vg.getChildAt(j); info = (ItemInfo) v.getTag(); if(v instanceof Mogoo_BubbleTextView && info != null && info instanceof ShortcutInfo){ if(executeDate(cache, info, vg, v)){ return true; } } } return false; } private static boolean executeDate(Mogoo_BitmapCache cache, ItemInfo info, ViewGroup vg, View v) { if(CALENDAR_PACKAGE_NAME.equals(((ShortcutInfo) info).intent.getComponent().getPackageName())){ ((ShortcutInfo) info).setIcon(null); ((Mogoo_BubbleTextView) v).setCompoundDrawablesWithIntrinsicBounds( null, new FastBitmapDrawable(cache.getIcon(((ShortcutInfo) info).intent)), null, null); v.invalidate(); return true; } return false; } }