diff options
author | Adrian Roos <roosa@google.com> | 2014-03-18 23:09:12 +0100 |
---|---|---|
committer | Adrian Roos <roosa@google.com> | 2014-03-19 16:27:35 +0100 |
commit | 5d2704fbb0a7bb4763d4e2ee031e16a8913ba003 (patch) | |
tree | 5e2831a558197860fd27ff267c10240294801029 /src/com/android/launcher3/WidgetPreviewLoader.java | |
parent | e769d1681e1177b9e37c0be9e12d1ede55d4e3a9 (diff) | |
download | android_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
Diffstat (limited to 'src/com/android/launcher3/WidgetPreviewLoader.java')
-rw-r--r-- | src/com/android/launcher3/WidgetPreviewLoader.java | 54 |
1 files changed, 25 insertions, 29 deletions
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); |