From 4b30a268da1b93f8b168f529d260f896d53cea60 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Thu, 7 Feb 2013 13:27:06 +0100 Subject: Fix crash when switching between Apps/Widgets tabs Bug: 8138894 Change-Id: I8a4e62fad36d9db1dd289b1c56b42fea083012ac --- src/com/cyanogenmod/trebuchet/AppsCustomizePagedView.java | 2 +- src/com/cyanogenmod/trebuchet/AppsCustomizeTabHost.java | 12 ++++++++---- src/com/cyanogenmod/trebuchet/PagedViewWidget.java | 10 ++++++++-- src/com/cyanogenmod/trebuchet/WidgetPreviewLoader.java | 7 +++---- 4 files changed, 20 insertions(+), 11 deletions(-) (limited to 'src/com/cyanogenmod') diff --git a/src/com/cyanogenmod/trebuchet/AppsCustomizePagedView.java b/src/com/cyanogenmod/trebuchet/AppsCustomizePagedView.java index c09b59097..a2e7740b8 100755 --- a/src/com/cyanogenmod/trebuchet/AppsCustomizePagedView.java +++ b/src/com/cyanogenmod/trebuchet/AppsCustomizePagedView.java @@ -91,7 +91,7 @@ class AsyncTaskPageData { if (generatedImages != null) { if (cancelled) { for (int i = 0; i < generatedImages.size(); i++) { - widgetPreviewLoader.releaseBitmap(items.get(i), generatedImages.get(i)); + widgetPreviewLoader.recycleBitmap(items.get(i), generatedImages.get(i)); } } generatedImages.clear(); diff --git a/src/com/cyanogenmod/trebuchet/AppsCustomizeTabHost.java b/src/com/cyanogenmod/trebuchet/AppsCustomizeTabHost.java index b807fa23b..748a5b88a 100644 --- a/src/com/cyanogenmod/trebuchet/AppsCustomizeTabHost.java +++ b/src/com/cyanogenmod/trebuchet/AppsCustomizeTabHost.java @@ -283,15 +283,19 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona // Animate the transition ObjectAnimator outAnim = LauncherAnimUtils.ofFloat(mAnimationBuffer, "alpha", 0f); outAnim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { + public void clearAnimationBuffer() { mAnimationBuffer.setVisibility(View.GONE); + PagedViewWidget.setRecyclePreviewsWhenDetachedFromWindow(false); mAnimationBuffer.removeAllViews(); + PagedViewWidget.setRecyclePreviewsWhenDetachedFromWindow(true); + } + @Override + public void onAnimationEnd(Animator animation) { + clearAnimationBuffer(); } @Override public void onAnimationCancel(Animator animation) { - mAnimationBuffer.setVisibility(View.GONE); - mAnimationBuffer.removeAllViews(); + clearAnimationBuffer(); } }); ObjectAnimator inAnim = LauncherAnimUtils.ofFloat(mAppsCustomizePane, "alpha", 1f); diff --git a/src/com/cyanogenmod/trebuchet/PagedViewWidget.java b/src/com/cyanogenmod/trebuchet/PagedViewWidget.java index 53c6fc148..c1d205cb9 100644 --- a/src/com/cyanogenmod/trebuchet/PagedViewWidget.java +++ b/src/com/cyanogenmod/trebuchet/PagedViewWidget.java @@ -36,6 +36,7 @@ public class PagedViewWidget extends LinearLayout { private static final String TAG = "Trebuchet.PagedViewWidgetLayout"; private static boolean sDeletePreviewsWhenDetachedFromWindow = true; + private static boolean sRecyclePreviewsWhenDetachedFromWindow = true; private String mDimensionsFormatString; CheckForShortPress mPendingCheckForShortPress = null; @@ -80,6 +81,10 @@ public class PagedViewWidget extends LinearLayout { sDeletePreviewsWhenDetachedFromWindow = value; } + public static void setRecyclePreviewsWhenDetachedFromWindow(boolean value) { + sRecyclePreviewsWhenDetachedFromWindow = value; + } + @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); @@ -88,8 +93,9 @@ public class PagedViewWidget extends LinearLayout { final ImageView image = (ImageView) findViewById(R.id.widget_preview); if (image != null) { FastBitmapDrawable preview = (FastBitmapDrawable) image.getDrawable(); - if (mInfo != null && preview != null && preview.getBitmap() != null) { - mWidgetPreviewLoader.releaseBitmap(mInfo, preview.getBitmap()); + if (sRecyclePreviewsWhenDetachedFromWindow && + mInfo != null && preview != null && preview.getBitmap() != null) { + mWidgetPreviewLoader.recycleBitmap(mInfo, preview.getBitmap()); } image.setImageDrawable(null); } diff --git a/src/com/cyanogenmod/trebuchet/WidgetPreviewLoader.java b/src/com/cyanogenmod/trebuchet/WidgetPreviewLoader.java index 08c0c35fb..330a14805 100644 --- a/src/com/cyanogenmod/trebuchet/WidgetPreviewLoader.java +++ b/src/com/cyanogenmod/trebuchet/WidgetPreviewLoader.java @@ -234,15 +234,14 @@ public class WidgetPreviewLoader { } } - public void releaseBitmap(Object o, Bitmap bitmapToFree) { - // enable this code when doDecode doesn't force Bitmaps to become immutable + public void recycleBitmap(Object o, Bitmap bitmapToRecycle) { String name = getObjectName(o); synchronized(mLoadedPreviews) { synchronized(mUnusedBitmaps) { Bitmap b = mLoadedPreviews.get(name).get(); - if (b == bitmapToFree) { + if (b == bitmapToRecycle) { mLoadedPreviews.remove(name); - if (bitmapToFree.isMutable()) { + if (bitmapToRecycle.isMutable()) { mUnusedBitmaps.add(new SoftReference(b)); } } else { -- cgit v1.2.3