summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Jurka <mikejurka@google.com>2013-02-07 13:27:06 +0100
committerSteve Kondik <shade@chemlab.org>2013-08-17 02:35:26 -0700
commit4b30a268da1b93f8b168f529d260f896d53cea60 (patch)
tree172cea2b720905ec4df3567b9dca5a3a11f365fe
parent9fe8f45375b358e1bfee980686ada38470f58286 (diff)
downloadandroid_packages_apps_Trebuchet-4b30a268da1b93f8b168f529d260f896d53cea60.tar.gz
android_packages_apps_Trebuchet-4b30a268da1b93f8b168f529d260f896d53cea60.tar.bz2
android_packages_apps_Trebuchet-4b30a268da1b93f8b168f529d260f896d53cea60.zip
Fix crash when switching between Apps/Widgets tabs
Bug: 8138894 Change-Id: I8a4e62fad36d9db1dd289b1c56b42fea083012ac
-rwxr-xr-xsrc/com/cyanogenmod/trebuchet/AppsCustomizePagedView.java2
-rw-r--r--src/com/cyanogenmod/trebuchet/AppsCustomizeTabHost.java12
-rw-r--r--src/com/cyanogenmod/trebuchet/PagedViewWidget.java10
-rw-r--r--src/com/cyanogenmod/trebuchet/WidgetPreviewLoader.java7
4 files changed, 20 insertions, 11 deletions
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<Bitmap>(b));
}
} else {