package com.buzzbuddy.android;
import java.util.List;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.support.v4.util.LruCache;
import android.util.Log;
public class DrawableManager {
private static final String TAG = DrawableManager.class.getSimpleName();
private final LruCache<String, Drawable> drawableCache;
private final PackageManager packageManager;
private static final int CACHE_SIZE = 100;
public DrawableManager(final PackageManager pm) {
packageManager = pm;
drawableCache = new LruCache<String, Drawable>(CACHE_SIZE);
}
public synchronized Drawable fetchDrawable(final String packageName, final ResolveInfo rInfo) {
synchronized (drawableCache) {
final Drawable drawable = drawableCache.get(packageName);
if (drawable != null) {
if (BuildConfig.DEBUG) {
Log.d(TAG, "FOUND " + packageName);
}
return drawable;
}
if (BuildConfig.DEBUG) {
Log.d(TAG, packageName + " NOT found");
}
final ApplicationInfo applicationInfo = rInfo.activityInfo.applicationInfo;
final Drawable icon = applicationInfo.loadIcon(packageManager);
drawableCache.put(applicationInfo.packageName, icon);
return icon;
}
}
private synchronized void add(final String packageName, final ResolveInfo rInfo, final PackageManager pm) {
synchronized (drawableCache) {
drawableCache.put(packageName, rInfo.activityInfo.applicationInfo.loadIcon(pm));
}
}
public synchronized void addAll(final List<ResolveInfo> apps) {
for (final ResolveInfo entry : apps) {
add(entry.activityInfo.applicationInfo.packageName, entry, packageManager);
}
}
}