| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.gallery3d.filtershow.pipeline; |
| |
| import android.content.res.Resources; |
| import android.graphics.Bitmap; |
| import android.graphics.Rect; |
| import android.net.Uri; |
| import com.android.gallery3d.filtershow.cache.ImageLoader; |
| import com.android.gallery3d.filtershow.filters.FiltersManager; |
| import com.android.gallery3d.filtershow.tools.SaveImage; |
| |
| import java.io.File; |
| |
| public class ImageSavingTask extends ProcessingTask { |
| private ProcessingService mProcessingService; |
| |
| static class SaveRequest implements Request { |
| Uri sourceUri; |
| Uri selectedUri; |
| File destinationFile; |
| ImagePreset preset; |
| boolean flatten; |
| int quality; |
| float sizeFactor; |
| Bitmap previewImage; |
| boolean exit; |
| } |
| |
| static class UpdateBitmap implements Update { |
| Bitmap bitmap; |
| } |
| |
| static class UpdateProgress implements Update { |
| int max; |
| int current; |
| } |
| |
| static class UpdatePreviewSaved implements Update { |
| Uri uri; |
| boolean exit; |
| } |
| |
| static class URIResult implements Result { |
| Uri uri; |
| boolean exit; |
| } |
| |
| public ImageSavingTask(ProcessingService service) { |
| mProcessingService = service; |
| } |
| |
| public void saveImage(Uri sourceUri, Uri selectedUri, |
| File destinationFile, ImagePreset preset, |
| Bitmap previewImage, boolean flatten, |
| int quality, float sizeFactor, boolean exit) { |
| SaveRequest request = new SaveRequest(); |
| request.sourceUri = sourceUri; |
| request.selectedUri = selectedUri; |
| request.destinationFile = destinationFile; |
| request.preset = preset; |
| request.flatten = flatten; |
| request.quality = quality; |
| request.sizeFactor = sizeFactor; |
| request.previewImage = previewImage; |
| request.exit = exit; |
| postRequest(request); |
| } |
| |
| public Result doInBackground(Request message) { |
| SaveRequest request = (SaveRequest) message; |
| Uri sourceUri = request.sourceUri; |
| Uri selectedUri = request.selectedUri; |
| File destinationFile = request.destinationFile; |
| 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(); |
| updateBitmap.bitmap = createNotificationBitmap(previewImage, sourceUri, preset); |
| postUpdate(updateBitmap); |
| SaveImage saveImage = new SaveImage(mProcessingService, sourceUri, |
| selectedUri, destinationFile, previewImage, |
| new SaveImage.Callback() { |
| @Override |
| public void onPreviewSaved(Uri uri){ |
| UpdatePreviewSaved previewSaved = new UpdatePreviewSaved(); |
| previewSaved.uri = uri; |
| previewSaved.exit = exit; |
| postUpdate(previewSaved); |
| } |
| |
| @Override |
| public void onProgress(int max, int current) { |
| UpdateProgress updateProgress = new UpdateProgress(); |
| updateProgress.max = max; |
| updateProgress.current = current; |
| postUpdate(updateProgress); |
| } |
| }); |
| Uri uri = saveImage.processAndSaveImage(preset, flatten, |
| 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, result.exit); |
| } |
| |
| @Override |
| public void onUpdate(Update message) { |
| if (message instanceof UpdatePreviewSaved){ |
| Uri uri = ((UpdatePreviewSaved) message).uri; |
| boolean exit = ((UpdatePreviewSaved) message).exit; |
| mProcessingService.completePreviewSaveImage(uri, exit); |
| } |
| if (message instanceof UpdateBitmap) { |
| Bitmap bitmap = ((UpdateBitmap) message).bitmap; |
| mProcessingService.updateNotificationWithBitmap(bitmap); |
| } |
| if (message instanceof UpdateProgress) { |
| UpdateProgress progress = (UpdateProgress) message; |
| mProcessingService.updateProgress(progress.max, progress.current); |
| } |
| } |
| |
| private Bitmap createNotificationBitmap(Bitmap preview, Uri sourceUri, ImagePreset preset) { |
| int notificationBitmapSize = Resources.getSystem().getDimensionPixelSize( |
| android.R.dimen.notification_large_icon_width); |
| if (preview != null) { |
| return Bitmap.createScaledBitmap(preview, |
| notificationBitmapSize, notificationBitmapSize, true); |
| } |
| Bitmap bitmap = ImageLoader.loadConstrainedBitmap(sourceUri, getContext(), |
| notificationBitmapSize, null, true); |
| CachingPipeline pipeline = new CachingPipeline(FiltersManager.getManager(), "Thumb"); |
| return pipeline.renderFinalImage(bitmap, preset); |
| } |
| |
| } |