summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Roos <roosa@google.com>2014-03-18 23:09:12 +0100
committerAdrian Roos <roosa@google.com>2014-03-19 16:27:35 +0100
commit5d2704fbb0a7bb4763d4e2ee031e16a8913ba003 (patch)
tree5e2831a558197860fd27ff267c10240294801029
parente769d1681e1177b9e37c0be9e12d1ede55d4e3a9 (diff)
downloadandroid_packages_apps_Trebuchet-5d2704fbb0a7bb4763d4e2ee031e16a8913ba003.tar.gz
android_packages_apps_Trebuchet-5d2704fbb0a7bb4763d4e2ee031e16a8913ba003.tar.bz2
android_packages_apps_Trebuchet-5d2704fbb0a7bb4763d4e2ee031e16a8913ba003.zip
Clean up dead, ugly and wrong code in icon and widget preview loading
Removed and fixed serveral instances of dead code and small bugs that grew in the widget preloading logic, discovered while chasing a bug. Bug: 12525890 Change-Id: I22e03eccecc07b73388cfd3c8462d947601c6e54
-rw-r--r--src/com/android/launcher3/AppsCustomizePagedView.java11
-rw-r--r--src/com/android/launcher3/PagedViewIconCache.java133
-rw-r--r--src/com/android/launcher3/WidgetPreviewLoader.java54
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);