From 243cd5e66374d49e25ddfcb12c841d81922017d6 Mon Sep 17 00:00:00 2001 From: kaiyiz Date: Sat, 17 Aug 2013 16:24:33 +0800 Subject: Gallery2: fix NPE when tap home key in FilterShowActivity If tap home key when it just enter filtershow activity, renderscript context will be destoryed when pause activity, then loadBitmap task call onPostExecute to handle the load result, a NPE will happen. If activity is paused, do not set FilteringPipeline, it will be set when resume. CRs-Fixed: 527277 Change-Id: Ib97f328acccfa35cab36a2bb7c8efea4d359844a --- .../gallery3d/filtershow/FilterShowActivity.java | 30 ++++++++++++++-------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index d482d16ed..fe1ad6295 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -118,6 +118,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL private LoadBitmapTask mLoadBitmapTask; private boolean mLoading = true; + private boolean mPaused = true; private CategoryAdapter mCategoryLooksAdapter = null; private CategoryAdapter mCategoryBordersAdapter = null; @@ -129,6 +130,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mPaused = true; boolean onlyUsePortrait = getResources().getBoolean(R.bool.only_use_portrait); if (onlyUsePortrait) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); @@ -499,21 +501,25 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL final View imageShow = findViewById(R.id.imageShow); imageShow.setVisibility(View.VISIBLE); - Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); - FilteringPipeline pipeline = FilteringPipeline.getPipeline(); - pipeline.setOriginal(largeBitmap); - float previewScale = (float) largeBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); - pipeline.setPreviewScaleFactor(previewScale); - Bitmap highresBitmap = mImageLoader.getOriginalBitmapHighres(); - if (highresBitmap != null) { - float highResPreviewScale = (float) highresBitmap.getWidth() / (float) mImageLoader.getOriginalBounds().width(); - pipeline.setHighResPreviewScaleFactor(highResPreviewScale); + if (!mPaused) { + Bitmap largeBitmap = mImageLoader.getOriginalBitmapLarge(); + FilteringPipeline pipeline = FilteringPipeline.getPipeline(); + pipeline.setOriginal(largeBitmap); + float previewScale = (float) largeBitmap.getWidth() / + (float) mImageLoader.getOriginalBounds().width(); + pipeline.setPreviewScaleFactor(previewScale); + Bitmap highresBitmap = mImageLoader.getOriginalBitmapHighres(); + if (highresBitmap != null) { + float highResPreviewScale = (float) highresBitmap.getWidth() / + (float) mImageLoader.getOriginalBounds().width(); + pipeline.setHighResPreviewScaleFactor(highResPreviewScale); + } + pipeline.turnOnPipeline(true); + MasterImage.getImage().setOriginalGeometry(largeBitmap); } if (!mShowingTinyPlanet) { mCategoryFiltersAdapter.removeTinyPlanet(); } - pipeline.turnOnPipeline(true); - MasterImage.getImage().setOriginalGeometry(largeBitmap); mCategoryLooksAdapter.imageLoaded(); mCategoryBordersAdapter.imageLoaded(); mCategoryGeometryAdapter.imageLoaded(); @@ -663,6 +669,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL @Override public void onPause() { super.onPause(); + mPaused = true; rsPause(); if (mShareActionProvider != null) { mShareActionProvider.setOnShareTargetSelectedListener(null); @@ -672,6 +679,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL @Override public void onResume() { super.onResume(); + mPaused = false; rsResume(); if (mShareActionProvider != null) { mShareActionProvider.setOnShareTargetSelectedListener(this); -- cgit v1.2.3