From bb0e3b5d9ebe4edd18cc13f065fb095905b85c32 Mon Sep 17 00:00:00 2001 From: Suman Mukherjee Date: Tue, 7 Jan 2014 09:30:00 +0530 Subject: Camera: Ensure background edition complete on back Key Block back key event till the image will get displayed while user pressed edit option/icon. This'll allow the background process to cleanup memory. Added null check and bitmap recycle to avoid crash. Change-Id: Ied1c1f3ecf07a352743908135a5b7976373a58a3 CRs-Fixed: 587402 --- src/com/android/gallery3d/filtershow/FilterShowActivity.java | 8 ++++++++ .../android/gallery3d/filtershow/pipeline/CachingPipeline.java | 3 +++ .../android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index 5b6933a13..04623b263 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -195,6 +195,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL private DialogInterface mCurrentDialog = null; private PopupMenu mCurrentMenu = null; private boolean mLoadingVisible = true; + private boolean mLoadingComplete = false; public ProcessingService getProcessingService() { return mBoundService; @@ -283,6 +284,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL doBindService(); getWindow().setBackgroundDrawable(new ColorDrawable(Color.GRAY)); setContentView(R.layout.filtershow_splashscreen); + mLoadingComplete = false; } public boolean isShowingImageStatePanel() { @@ -850,6 +852,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL MasterImage.getImage().warnListeners(); loadActions(); + mLoadingComplete = false; if (mOriginalPreset != null) { MasterImage.getImage().setLoadedPreset(mOriginalPreset); @@ -1151,6 +1154,7 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL } public void enableSave(boolean enable) { + mLoadingComplete = true; if (mSaveButton != null) { mSaveButton.setEnabled(enable); } @@ -1318,6 +1322,10 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); if (currentPanel instanceof MainPanel) { if (!mImageShow.hasModifications()) { + if (!mLoadingComplete) { + Log.v(LOGTAG,"Background processing is ON, rejecting back key event"); + return; + } done(); } else { AlertDialog.Builder builder = new AlertDialog.Builder(this); diff --git a/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java b/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java index e8c9b0f5c..06ce9e9df 100644 --- a/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java +++ b/src/com/android/gallery3d/filtershow/pipeline/CachingPipeline.java @@ -176,6 +176,9 @@ public class CachingPipeline implements PipelineInterface { } public void setOriginal(Bitmap bitmap) { + if (mOriginalBitmap != null) { + mOriginalBitmap.recycle(); + } mOriginalBitmap = bitmap; Log.v(LOGTAG,"setOriginal, size " + bitmap.getWidth() + " x " + bitmap.getHeight()); ImagePreset preset = MasterImage.getImage().getPreset(); diff --git a/src/com/android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java b/src/com/android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java index 61ee8eb71..5375c2598 100644 --- a/src/com/android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java +++ b/src/com/android/gallery3d/filtershow/pipeline/UpdatePreviewTask.java @@ -57,7 +57,8 @@ public class UpdatePreviewTask extends ProcessingTask { SharedBuffer buffer = MasterImage.getImage().getPreviewBuffer(); SharedPreset preset = MasterImage.getImage().getPreviewPreset(); ImagePreset renderingPreset = preset.dequeuePreset(); - if (renderingPreset != null) { + if ( (buffer != null) && (renderingPreset != null) && + (buffer.getProducer() != null)) { mPreviewPipeline.compute(buffer, renderingPreset, 0); // set the preset we used in the buffer for later inspection UI-side buffer.getProducer().setPreset(renderingPreset); -- cgit v1.2.3