summaryrefslogtreecommitdiffstats
path: root/iconloaderlib/src
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2018-11-09 11:13:10 -0800
committerSunny Goyal <sunnygoyal@google.com>2018-11-09 15:44:07 -0800
commit202fabfe10626448b7aa2d349ed3566f0d22550f (patch)
tree94c72f84d2a243bf06ec3f1d9f6f8b5fa062df63 /iconloaderlib/src
parent7b3c12f90e379974c195fe7f5c109c7c5d5a0e3c (diff)
downloadandroid_packages_apps_Trebuchet-202fabfe10626448b7aa2d349ed3566f0d22550f.tar.gz
android_packages_apps_Trebuchet-202fabfe10626448b7aa2d349ed3566f0d22550f.tar.bz2
android_packages_apps_Trebuchet-202fabfe10626448b7aa2d349ed3566f0d22550f.zip
Adding reusable version of IconCache and IconFactory
> Adding resource based allowing projects to control cache behavior > Fixing missing comments from ag/5470467 > Adding support for no-immemory cache Bug: 115891474 Change-Id: I691206805430cd93d3be78119bc249cefd79790a
Diffstat (limited to 'iconloaderlib/src')
-rw-r--r--iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java32
-rw-r--r--iconloaderlib/src/com/android/launcher3/icons/cache/BaseIconCache.java46
2 files changed, 53 insertions, 25 deletions
diff --git a/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java b/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java
index 065a14d5f..a3185741c 100644
--- a/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java
+++ b/iconloaderlib/src/com/android/launcher3/icons/BaseIconFactory.java
@@ -1,5 +1,10 @@
package com.android.launcher3.icons;
+import static android.graphics.Paint.DITHER_FLAG;
+import static android.graphics.Paint.FILTER_BITMAP_FLAG;
+
+import static com.android.launcher3.icons.ShadowGenerator.BLUR_FACTOR;
+
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -18,29 +23,26 @@ import android.os.Build;
import android.os.Process;
import android.os.UserHandle;
-import static android.graphics.Paint.DITHER_FLAG;
-import static android.graphics.Paint.FILTER_BITMAP_FLAG;
-import static com.android.launcher3.icons.ShadowGenerator.BLUR_FACTOR;
-
/**
* This class will be moved to androidx library. There shouldn't be any dependency outside
* this package.
*/
public class BaseIconFactory implements AutoCloseable {
+ private static final String TAG = "BaseIconFactory";
private static final int DEFAULT_WRAPPER_BACKGROUND = Color.WHITE;
static final boolean ATLEAST_OREO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
static final boolean ATLEAST_P = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P;
private final Rect mOldBounds = new Rect();
- private final Context mContext;
+ protected final Context mContext;
private final Canvas mCanvas;
private final PackageManager mPm;
private final ColorExtractor mColorExtractor;
private boolean mDisableColorExtractor;
- private int mFillResIconDpi;
- private int mIconBitmapSize;
+ protected final int mFillResIconDpi;
+ protected final int mIconBitmapSize;
private IconNormalizer mNormalizer;
private ShadowGenerator mShadowGenerator;
@@ -302,7 +304,21 @@ public class BaseIconFactory implements AutoCloseable {
}
@Override
- public void close() { }
+ public void close() {
+ clear();
+ }
+
+ public BitmapInfo makeDefaultIcon(UserHandle user) {
+ return createBadgedIconBitmap(getFullResDefaultActivityIcon(mFillResIconDpi),
+ user, Build.VERSION.SDK_INT);
+ }
+
+ public static Drawable getFullResDefaultActivityIcon(int iconDpi) {
+ return Resources.getSystem().getDrawableForDensity(
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
+ ? android.R.drawable.sym_def_app_icon : android.R.mipmap.sym_def_app_icon,
+ iconDpi);
+ }
/**
* An extension of {@link BitmapDrawable} which returns the bitmap pixel size as intrinsic size.
diff --git a/iconloaderlib/src/com/android/launcher3/icons/cache/BaseIconCache.java b/iconloaderlib/src/com/android/launcher3/icons/cache/BaseIconCache.java
index 2fa4b6883..63820f6d0 100644
--- a/iconloaderlib/src/com/android/launcher3/icons/cache/BaseIconCache.java
+++ b/iconloaderlib/src/com/android/launcher3/icons/cache/BaseIconCache.java
@@ -15,6 +15,7 @@
*/
package com.android.launcher3.icons.cache;
+import static com.android.launcher3.icons.BaseIconFactory.getFullResDefaultActivityIcon;
import static com.android.launcher3.icons.BitmapInfo.LOW_RES_ICON;
import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound;
@@ -34,7 +35,6 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.Build;
-import android.os.Build.VERSION;
import android.os.Handler;
import android.os.Looper;
import android.os.Process;
@@ -50,9 +50,13 @@ import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.Provider;
import com.android.launcher3.util.SQLiteCacheHelper;
+import java.util.AbstractMap;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
import androidx.annotation.NonNull;
@@ -76,8 +80,7 @@ public abstract class BaseIconCache {
protected final Context mContext;
protected final PackageManager mPackageManager;
- private final HashMap<ComponentKey, CacheEntry> mCache =
- new HashMap<>(INITIAL_ICON_CACHE_CAPACITY);
+ private final Map<ComponentKey, CacheEntry> mCache;
protected final Handler mWorkerHandler;
protected int mIconDpi;
@@ -89,13 +92,30 @@ public abstract class BaseIconCache {
private final Looper mBgLooper;
public BaseIconCache(Context context, String dbFileName, Looper bgLooper,
- int iconDpi, int iconPixelSize) {
+ int iconDpi, int iconPixelSize, boolean inMemoryCache) {
mContext = context;
mDbFileName = dbFileName;
mPackageManager = context.getPackageManager();
mBgLooper = bgLooper;
mWorkerHandler = new Handler(mBgLooper);
+ if (inMemoryCache) {
+ mCache = new HashMap<>(INITIAL_ICON_CACHE_CAPACITY);
+ } else {
+ // Use a dummy cache
+ mCache = new AbstractMap<ComponentKey, CacheEntry>() {
+ @Override
+ public Set<Entry<ComponentKey, CacheEntry>> entrySet() {
+ return Collections.emptySet();
+ }
+
+ @Override
+ public CacheEntry put(ComponentKey key, CacheEntry value) {
+ return value;
+ }
+ };
+ }
+
if (BitmapRenderer.USE_HARDWARE_BITMAP && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mDecodeOptions = new BitmapFactory.Options();
mDecodeOptions.inPreferredConfig = Bitmap.Config.HARDWARE;
@@ -137,27 +157,20 @@ public abstract class BaseIconCache {
mCache.clear();
}
- private Drawable getFullResDefaultActivityIcon() {
- return Resources.getSystem().getDrawableForDensity(
- Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
- ? android.R.drawable.sym_def_app_icon : android.R.mipmap.sym_def_app_icon,
- mIconDpi);
- }
-
private Drawable getFullResIcon(Resources resources, int iconId) {
if (resources != null && iconId != 0) {
try {
return resources.getDrawableForDensity(iconId, mIconDpi);
} catch (Resources.NotFoundException e) { }
}
- return getFullResDefaultActivityIcon();
+ return getFullResDefaultActivityIcon(mIconDpi);
}
public Drawable getFullResIcon(String packageName, int iconId) {
try {
return getFullResIcon(mPackageManager.getResourcesForApplication(packageName), iconId);
} catch (PackageManager.NameNotFoundException e) { }
- return getFullResDefaultActivityIcon();
+ return getFullResDefaultActivityIcon(mIconDpi);
}
public Drawable getFullResIcon(ActivityInfo info) {
@@ -165,13 +178,12 @@ public abstract class BaseIconCache {
return getFullResIcon(mPackageManager.getResourcesForApplication(info.applicationInfo),
info.getIconResource());
} catch (PackageManager.NameNotFoundException e) { }
- return getFullResDefaultActivityIcon();
+ return getFullResDefaultActivityIcon(mIconDpi);
}
- protected BitmapInfo makeDefaultIcon(UserHandle user) {
+ private BitmapInfo makeDefaultIcon(UserHandle user) {
try (BaseIconFactory li = getIconFactory()) {
- return li.createBadgedIconBitmap(
- getFullResDefaultActivityIcon(), user, VERSION.SDK_INT);
+ return li.makeDefaultIcon(user);
}
}