From eeed64b1fbdafe5c91ce36b3c5488c003fbb8fab Mon Sep 17 00:00:00 2001 From: nicolasroard Date: Fri, 11 Oct 2013 16:22:14 -0700 Subject: [PATCH] Process correctly an export when called with EDIT intent bug:11159123 Change-Id: I8c827d9f757c4fd00d21753753917b62d5ba0213 --- .../filtershow/pipeline/ImageSavingTask.java | 16 +++++++++---- .../filtershow/pipeline/ProcessingService.java | 27 ++++++++++++++-------- .../gallery3d/filtershow/tools/SaveImage.java | 11 +++++---- .../gallery3d/filtershow/ui/ExportDialog.java | 2 +- 4 files changed, 37 insertions(+), 19 deletions(-) diff --git a/src/com/android/gallery3d/filtershow/pipeline/ImageSavingTask.java b/src/com/android/gallery3d/filtershow/pipeline/ImageSavingTask.java index 5fa89ac6d..801aee46b 100644 --- a/src/com/android/gallery3d/filtershow/pipeline/ImageSavingTask.java +++ b/src/com/android/gallery3d/filtershow/pipeline/ImageSavingTask.java @@ -38,6 +38,7 @@ public class ImageSavingTask extends ProcessingTask { int quality; float sizeFactor; Bitmap previewImage; + boolean exit; } static class UpdateBitmap implements Update { @@ -51,10 +52,12 @@ public class ImageSavingTask extends ProcessingTask { static class UpdatePreviewSaved implements Update { Uri uri; + boolean exit; } static class URIResult implements Result { Uri uri; + boolean exit; } public ImageSavingTask(ProcessingService service) { @@ -64,7 +67,7 @@ public class ImageSavingTask extends ProcessingTask { public void saveImage(Uri sourceUri, Uri selectedUri, File destinationFile, ImagePreset preset, Bitmap previewImage, boolean flatten, - int quality, float sizeFactor) { + int quality, float sizeFactor, boolean exit) { SaveRequest request = new SaveRequest(); request.sourceUri = sourceUri; request.selectedUri = selectedUri; @@ -74,6 +77,7 @@ public class ImageSavingTask extends ProcessingTask { request.quality = quality; request.sizeFactor = sizeFactor; request.previewImage = previewImage; + request.exit = exit; postRequest(request); } @@ -85,6 +89,7 @@ public class ImageSavingTask extends ProcessingTask { Bitmap previewImage = request.previewImage; ImagePreset preset = request.preset; boolean flatten = request.flatten; + final boolean exit = request.exit; // We create a small bitmap showing the result that we can // give to the notification UpdateBitmap updateBitmap = new UpdateBitmap(); @@ -97,6 +102,7 @@ public class ImageSavingTask extends ProcessingTask { public void onPreviewSaved(Uri uri){ UpdatePreviewSaved previewSaved = new UpdatePreviewSaved(); previewSaved.uri = uri; + previewSaved.exit = exit; postUpdate(previewSaved); } @@ -109,23 +115,25 @@ public class ImageSavingTask extends ProcessingTask { } }); Uri uri = saveImage.processAndSaveImage(preset, flatten, - request.quality, request.sizeFactor); + request.quality, request.sizeFactor, request.exit); URIResult result = new URIResult(); result.uri = uri; + result.exit = request.exit; return result; } @Override public void onResult(Result message) { URIResult result = (URIResult) message; - mProcessingService.completeSaveImage(result.uri); + mProcessingService.completeSaveImage(result.uri, result.exit); } @Override public void onUpdate(Update message) { if (message instanceof UpdatePreviewSaved){ Uri uri = ((UpdatePreviewSaved) message).uri; - mProcessingService.completePreviewSaveImage(uri); + boolean exit = ((UpdatePreviewSaved) message).exit; + mProcessingService.completePreviewSaveImage(uri, exit); } if (message instanceof UpdateBitmap) { Bitmap bitmap = ((UpdateBitmap) message).bitmap; diff --git a/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java b/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java index 68574bd7e..b5b636ec2 100644 --- a/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java +++ b/src/com/android/gallery3d/filtershow/pipeline/ProcessingService.java @@ -52,6 +52,7 @@ public class ProcessingService extends Service { private static final String SAVING = "saving"; private static final String FLATTEN = "flatten"; private static final String SIZE_FACTOR = "sizeFactor"; + private static final String EXIT = "exit"; private ProcessingTaskController mProcessingTaskController; private ImageSavingTask mImageSavingTask; @@ -140,7 +141,8 @@ public class ProcessingService extends Service { } public static Intent getSaveIntent(Context context, ImagePreset preset, File destination, - Uri selectedImageUri, Uri sourceImageUri, boolean doFlatten, int quality, float sizeFactor) { + Uri selectedImageUri, Uri sourceImageUri, boolean doFlatten, int quality, + float sizeFactor, boolean needsExit) { Intent processIntent = new Intent(context, ProcessingService.class); processIntent.putExtra(ProcessingService.SOURCE_URI, sourceImageUri.toString()); @@ -154,6 +156,7 @@ public class ProcessingService extends Service { processIntent.putExtra(ProcessingService.PRESET, preset.getJsonString(ImagePreset.JASON_SAVED)); processIntent.putExtra(ProcessingService.SAVING, true); + processIntent.putExtra(ProcessingService.EXIT, needsExit); if (doFlatten) { processIntent.putExtra(ProcessingService.FLATTEN, true); } @@ -196,6 +199,7 @@ public class ProcessingService extends Service { int quality = intent.getIntExtra(QUALITY, 100); float sizeFactor = intent.getFloatExtra(SIZE_FACTOR, 1); boolean flatten = intent.getBooleanExtra(FLATTEN, false); + boolean exit = intent.getBooleanExtra(EXIT, false); Uri sourceUri = Uri.parse(source); Uri selectedUri = null; if (selected != null) { @@ -211,7 +215,7 @@ public class ProcessingService extends Service { mSaving = true; handleSaveRequest(sourceUri, selectedUri, destinationFile, preset, MasterImage.getImage().getHighresImage(), - flatten, quality, sizeFactor); + flatten, quality, sizeFactor, exit); } return START_REDELIVER_INTENT; } @@ -230,10 +234,9 @@ public class ProcessingService extends Service { public void handleSaveRequest(Uri sourceUri, Uri selectedUri, File destinationFile, ImagePreset preset, Bitmap previewImage, - boolean flatten, int quality, float sizeFactor) { + boolean flatten, int quality, float sizeFactor, boolean exit) { mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - - mNotificationId++; + mNotifyMgr.cancelAll(); mBuilder = new Notification.Builder(this) @@ -248,7 +251,7 @@ public class ProcessingService extends Service { // Process the image mImageSavingTask.saveImage(sourceUri, selectedUri, destinationFile, - preset, previewImage, flatten, quality, sizeFactor); + preset, previewImage, flatten, quality, sizeFactor, exit); } public void updateNotificationWithBitmap(Bitmap bitmap) { @@ -261,19 +264,25 @@ public class ProcessingService extends Service { mNotifyMgr.notify(mNotificationId, mBuilder.build()); } - public void completePreviewSaveImage(Uri result) { - if (!mNeedsAlive && !mFiltershowActivity.isSimpleEditAction()) { + public void completePreviewSaveImage(Uri result, boolean exit) { + if (exit && !mNeedsAlive && !mFiltershowActivity.isSimpleEditAction()) { mFiltershowActivity.completeSaveImage(result); } } - public void completeSaveImage(Uri result) { + public void completeSaveImage(Uri result, boolean exit) { if (SHOW_IMAGE) { // TODO: we should update the existing image in Gallery instead Intent viewImage = new Intent(Intent.ACTION_VIEW, result); viewImage.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(viewImage); } + mNotifyMgr.cancel(mNotificationId); + if (!exit) { + stopForeground(true); + stopSelf(); + return; + } stopForeground(true); stopSelf(); if (mNeedsAlive) { diff --git a/src/com/android/gallery3d/filtershow/tools/SaveImage.java b/src/com/android/gallery3d/filtershow/tools/SaveImage.java index 8425f6031..354081ed2 100644 --- a/src/com/android/gallery3d/filtershow/tools/SaveImage.java +++ b/src/com/android/gallery3d/filtershow/tools/SaveImage.java @@ -326,9 +326,12 @@ public class SaveImage { } public Uri processAndSaveImage(ImagePreset preset, boolean flatten, - int quality, float sizeFactor) { + int quality, float sizeFactor, boolean exit) { - Uri uri = resetToOriginalImageIfNeeded(preset, !flatten); + Uri uri = null; + if (exit) { + uri = resetToOriginalImageIfNeeded(preset, !flatten); + } if (uri != null) { return null; } @@ -361,9 +364,7 @@ public class SaveImage { Images.Media.EXTERNAL_CONTENT_URI, values); } - } else { - Object xmp = getPanoramaXMPData(newSourceUri, preset); ExifInterface exif = getExifData(newSourceUri); long time = System.currentTimeMillis(); @@ -536,7 +537,7 @@ public class SaveImage { flatten = true; } Intent processIntent = ProcessingService.getSaveIntent(filterShowActivity, preset, - destination, selectedImageUri, sourceImageUri, flatten, 90, 1f); + destination, selectedImageUri, sourceImageUri, flatten, 90, 1f, true); filterShowActivity.startService(processIntent); diff --git a/src/com/android/gallery3d/filtershow/ui/ExportDialog.java b/src/com/android/gallery3d/filtershow/ui/ExportDialog.java index 2edd55c1f..f6a84cee2 100644 --- a/src/com/android/gallery3d/filtershow/ui/ExportDialog.java +++ b/src/com/android/gallery3d/filtershow/ui/ExportDialog.java @@ -161,7 +161,7 @@ public class ExportDialog extends DialogFragment implements View.OnClickListener float scaleFactor = mExportWidth / (float) mOriginalBounds.width(); Intent processIntent = ProcessingService.getSaveIntent(activity, MasterImage .getImage().getPreset(), dest, activity.getSelectedImageUri(), sourceUri, - true, mSeekBar.getProgress(), scaleFactor); + true, mSeekBar.getProgress(), scaleFactor, false); activity.startService(processIntent); dismiss(); break; -- 2.11.0