diff options
author | Suman Mukherjee <sumam@codeaurora.org> | 2014-01-07 09:30:00 +0530 |
---|---|---|
committer | Michael Bestas <mikeioannina@gmail.com> | 2015-01-09 07:04:38 +0200 |
commit | bb0e3b5d9ebe4edd18cc13f065fb095905b85c32 (patch) | |
tree | c7f246e4fd3d250efe6e555779a3dc79d8297d19 | |
parent | de6ffedfd93103afd470ca579368138b3b8b6fc8 (diff) | |
download | android_packages_apps_Gallery2-bb0e3b5d9ebe4edd18cc13f065fb095905b85c32.tar.gz android_packages_apps_Gallery2-bb0e3b5d9ebe4edd18cc13f065fb095905b85c32.tar.bz2 android_packages_apps_Gallery2-bb0e3b5d9ebe4edd18cc13f065fb095905b85c32.zip |
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
3 files changed, 13 insertions, 1 deletions
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); |