diff options
-rw-r--r-- | src/com/android/launcher3/AppsCustomizePagedView.java | 11 | ||||
-rw-r--r-- | src/com/android/launcher3/PagedViewIconCache.java | 133 | ||||
-rw-r--r-- | src/com/android/launcher3/WidgetPreviewLoader.java | 54 |
3 files changed, 25 insertions, 173 deletions
diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index e5e1580ee..d6e0bb49e 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -225,17 +225,6 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen private Rect mTmpRect = new Rect(); - // Used for drawing shortcut previews - BitmapCache mCachedShortcutPreviewBitmap = new BitmapCache(); - PaintCache mCachedShortcutPreviewPaint = new PaintCache(); - CanvasCache mCachedShortcutPreviewCanvas = new CanvasCache(); - - // Used for drawing widget previews - CanvasCache mCachedAppWidgetPreviewCanvas = new CanvasCache(); - RectCache mCachedAppWidgetPreviewSrcRect = new RectCache(); - RectCache mCachedAppWidgetPreviewDestRect = new RectCache(); - PaintCache mCachedAppWidgetPreviewPaint = new PaintCache(); - WidgetPreviewLoader mWidgetPreviewLoader; private boolean mInBulkBind; diff --git a/src/com/android/launcher3/PagedViewIconCache.java b/src/com/android/launcher3/PagedViewIconCache.java deleted file mode 100644 index 93887ea23..000000000 --- a/src/com/android/launcher3/PagedViewIconCache.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3; - -import android.appwidget.AppWidgetProviderInfo; -import android.content.ComponentName; -import android.content.pm.ComponentInfo; -import android.content.pm.ResolveInfo; -import android.graphics.Bitmap; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; - -/** - * Simple cache mechanism for PagedView outlines. - */ -public class PagedViewIconCache { - public static class Key { - public enum Type { - ApplicationInfoKey, - AppWidgetProviderInfoKey, - ResolveInfoKey - } - private final ComponentName mComponentName; - private final Type mType; - - public Key(AppInfo info) { - mComponentName = info.componentName; - mType = Type.ApplicationInfoKey; - } - public Key(ResolveInfo info) { - final ComponentInfo ci = info.activityInfo != null ? info.activityInfo : - info.serviceInfo; - mComponentName = new ComponentName(ci.packageName, ci.name); - mType = Type.ResolveInfoKey; - } - public Key(AppWidgetProviderInfo info) { - mComponentName = info.provider; - mType = Type.AppWidgetProviderInfoKey; - } - - private ComponentName getComponentName() { - return mComponentName; - } - public boolean isKeyType(Type t) { - return (mType == t); - } - - @Override - public boolean equals(Object o) { - if (o instanceof Key) { - Key k = (Key) o; - return mComponentName.equals(k.mComponentName); - } - return super.equals(o); - } - @Override - public int hashCode() { - return getComponentName().hashCode(); - } - } - - private final HashMap<Key, Bitmap> mIconOutlineCache = new HashMap<Key, Bitmap>(); - - public void clear() { - for (Key key : mIconOutlineCache.keySet()) { - mIconOutlineCache.get(key).recycle(); - } - mIconOutlineCache.clear(); - } - private void retainAll(HashSet<Key> keysToKeep, Key.Type t) { - HashSet<Key> keysToRemove = new HashSet<Key>(mIconOutlineCache.keySet()); - keysToRemove.removeAll(keysToKeep); - for (Key key : keysToRemove) { - if (key.isKeyType(t)) { - mIconOutlineCache.get(key).recycle(); - mIconOutlineCache.remove(key); - } - } - } - /** Removes all the keys to applications that aren't in the passed in collection */ - public void retainAllApps(ArrayList<AppInfo> keys) { - HashSet<Key> keysSet = new HashSet<Key>(); - for (AppInfo info : keys) { - keysSet.add(new Key(info)); - } - retainAll(keysSet, Key.Type.ApplicationInfoKey); - } - /** Removes all the keys to shortcuts that aren't in the passed in collection */ - public void retainAllShortcuts(List<ResolveInfo> keys) { - HashSet<Key> keysSet = new HashSet<Key>(); - for (ResolveInfo info : keys) { - keysSet.add(new Key(info)); - } - retainAll(keysSet, Key.Type.ResolveInfoKey); - } - /** Removes all the keys to widgets that aren't in the passed in collection */ - public void retainAllAppWidgets(List<AppWidgetProviderInfo> keys) { - HashSet<Key> keysSet = new HashSet<Key>(); - for (AppWidgetProviderInfo info : keys) { - keysSet.add(new Key(info)); - } - retainAll(keysSet, Key.Type.AppWidgetProviderInfoKey); - } - public void addOutline(Key key, Bitmap b) { - mIconOutlineCache.put(key, b); - } - public void removeOutline(Key key) { - if (mIconOutlineCache.containsKey(key)) { - mIconOutlineCache.get(key).recycle(); - mIconOutlineCache.remove(key); - } - } - public Bitmap getOutline(Key key) { - return mIconOutlineCache.get(key); - } -} diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index 3db0b51ad..1a67987b4 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -127,13 +127,13 @@ public class WidgetPreviewLoader { private int mAppIconSize; private IconCache mIconCache; - private final float sWidgetPreviewIconPaddingPercentage = 0.25f; + private static final float sWidgetPreviewIconPaddingPercentage = 0.25f; private CacheDb mDb; - private HashMap<String, WeakReference<Bitmap>> mLoadedPreviews; - private ArrayList<SoftReference<Bitmap>> mUnusedBitmaps; - private static HashSet<String> sInvalidPackages; + private final HashMap<String, WeakReference<Bitmap>> mLoadedPreviews; + private final ArrayList<SoftReference<Bitmap>> mUnusedBitmaps; + private final static HashSet<String> sInvalidPackages; static { sInvalidPackages = new HashSet<String>(); @@ -184,18 +184,19 @@ public class WidgetPreviewLoader { final String name = getObjectName(o); final String packageName = getObjectPackage(o); // check if the package is valid - boolean packageValid = true; synchronized(sInvalidPackages) { - packageValid = !sInvalidPackages.contains(packageName); - } - if (!packageValid) { - return null; + boolean packageValid = !sInvalidPackages.contains(packageName); + if (!packageValid) { + return null; + } } - if (packageValid) { - synchronized(mLoadedPreviews) { - // check if it exists in our existing cache - if (mLoadedPreviews.containsKey(name) && mLoadedPreviews.get(name).get() != null) { - return mLoadedPreviews.get(name).get(); + synchronized(mLoadedPreviews) { + // check if it exists in our existing cache + if (mLoadedPreviews.containsKey(name)) { + WeakReference<Bitmap> bitmapReference = mLoadedPreviews.get(name); + Bitmap bitmap = bitmapReference.get(); + if (bitmap != null) { + return bitmap; } } } @@ -203,11 +204,13 @@ public class WidgetPreviewLoader { Bitmap unusedBitmap = null; synchronized(mUnusedBitmaps) { // not in cache; we need to load it from the db - while ((unusedBitmap == null || !unusedBitmap.isMutable() || - unusedBitmap.getWidth() != mPreviewBitmapWidth || - unusedBitmap.getHeight() != mPreviewBitmapHeight) - && mUnusedBitmaps.size() > 0) { - unusedBitmap = mUnusedBitmaps.remove(0).get(); + while (unusedBitmap == null && mUnusedBitmaps.size() > 0) { + Bitmap candidate = mUnusedBitmaps.remove(0).get(); + if (candidate != null && candidate.isMutable() && + candidate.getWidth() == mPreviewBitmapWidth && + candidate.getHeight() == mPreviewBitmapHeight) { + unusedBitmap = candidate; + } } if (unusedBitmap != null) { final Canvas c = mCachedAppWidgetPreviewCanvas.get(); @@ -221,12 +224,7 @@ public class WidgetPreviewLoader { unusedBitmap = Bitmap.createBitmap(mPreviewBitmapWidth, mPreviewBitmapHeight, Bitmap.Config.ARGB_8888); } - - Bitmap preview = null; - - if (packageValid) { - preview = readFromDb(name, unusedBitmap); - } + Bitmap preview = readFromDb(name, unusedBitmap); if (preview != null) { synchronized(mLoadedPreviews) { @@ -520,13 +518,11 @@ public class WidgetPreviewLoader { previewWidth = previewDrawableWidth * cellHSpan; previewHeight = previewDrawableHeight * cellVSpan; - defaultPreview = Bitmap.createBitmap(previewWidth, previewHeight, - Config.ARGB_8888); + defaultPreview = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888); final Canvas c = mCachedAppWidgetPreviewCanvas.get(); c.setBitmap(defaultPreview); previewDrawable.setBounds(0, 0, previewWidth, previewHeight); - previewDrawable.setTileModeXY(Shader.TileMode.REPEAT, - Shader.TileMode.REPEAT); + previewDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); previewDrawable.draw(c); c.setBitmap(null); |