Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 568b8d8b authored by Ruben Brunk's avatar Ruben Brunk
Browse files

Added support to export to a flattened photo.

Bug: 10008212

- Adds a menu item to allow a photo with edits to be flattened
  into a separate photo.
- Fixes bug where crop intents fail to save cropped images.

Change-Id: I1dcf1bb9ba22e72378f24e7971a74f81b8db7564
parent 2d3b8b11
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -24,4 +24,9 @@
        android:showAsAction="never"
        android:visible="true"
        android:title="@string/show_imagestate_panel" />
    <item
        android:id="@+id/exportFlattenButton"
        android:showAsAction="never"
        android:visible="true"
        android:title="@string/export_flattened" />
</menu>
+3 −0
Original line number Diff line number Diff line
@@ -47,6 +47,9 @@
    <string name="show_imagestate_panel">Show Applied Effects</string>
    <!--  Text for the image state panel menu item [CHAR LIMIT=30] -->
    <string name="hide_imagestate_panel">Hide Applied Effects</string>
    <!--  Text for the menu item to export a flattened photo[CHAR LIMIT=30] -->
    <string name="export_flattened">Export Flattened Image</string>

    <!--  Name for the overflow menu item for settings [CHAR LIMIT=20] -->
    <string name="menu_settings">Settings</string>

+8 −0
Original line number Diff line number Diff line
@@ -815,6 +815,14 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL
                        mShowingImageStatePanel ? "ShowPanel" : "HidePanel");
                return true;
            }
            case R.id.exportFlattenButton: {
                Uri sourceUri = MasterImage.getImage().getUri();
                File dest = SaveImage.getNewFile(this, sourceUri);
                Intent processIntent = ProcessingService.getSaveIntent(this, MasterImage.getImage()
                        .getPreset(), dest, getSelectedImageUri(), sourceUri, true);
                startService(processIntent);
                return true;
            }
            case android.R.id.home: {
                saveImage();
                return true;
+5 −5
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ public class ImageSavingTask extends ProcessingTask {
        Uri selectedUri;
        File destinationFile;
        ImagePreset preset;
        boolean flatten;
    }

    static class UpdateBitmap implements Update {
@@ -53,12 +54,13 @@ public class ImageSavingTask extends ProcessingTask {
    }

    public void saveImage(Uri sourceUri, Uri selectedUri,
                          File destinationFile, ImagePreset preset) {
                          File destinationFile, ImagePreset preset, boolean flatten) {
        SaveRequest request = new SaveRequest();
        request.sourceUri = sourceUri;
        request.selectedUri = selectedUri;
        request.destinationFile = destinationFile;
        request.preset = preset;
        request.flatten = flatten;
        postRequest(request);
    }

@@ -68,13 +70,12 @@ public class ImageSavingTask extends ProcessingTask {
        Uri selectedUri = request.selectedUri;
        File destinationFile = request.destinationFile;
        ImagePreset preset = request.preset;

        boolean flatten = request.flatten;
        // We create a small bitmap showing the result that we can
        // give to the notification
        UpdateBitmap updateBitmap = new UpdateBitmap();
        updateBitmap.bitmap = createNotificationBitmap(sourceUri, preset);
        postUpdate(updateBitmap);

        SaveImage saveImage = new SaveImage(mProcessingService, sourceUri,
                selectedUri, destinationFile,
                new SaveImage.Callback() {
@@ -86,8 +87,7 @@ public class ImageSavingTask extends ProcessingTask {
                        postUpdate(updateProgress);
                    }
                });

        Uri uri = saveImage.processAndSaveImage(preset);
        Uri uri = saveImage.processAndSaveImage(preset, !flatten);
        URIResult result = new URIResult();
        result.uri = uri;
        return result;
+9 −4
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ public class ProcessingService extends Service {
    private static final String SELECTED_URI = "selectedUri";
    private static final String DESTINATION_FILE = "destinationFile";
    private static final String SAVING = "saving";
    private static final String FLATTEN = "flatten";

    private ProcessingTaskController mProcessingTaskController;
    private ImageSavingTask mImageSavingTask;
@@ -116,7 +117,7 @@ public class ProcessingService extends Service {
    }

    public static Intent getSaveIntent(Context context, ImagePreset preset, File destination,
                                        Uri selectedImageUri, Uri sourceImageUri) {
                                        Uri selectedImageUri, Uri sourceImageUri, boolean doFlatten) {
        Intent processIntent = new Intent(context, ProcessingService.class);
        processIntent.putExtra(ProcessingService.SOURCE_URI,
                sourceImageUri.toString());
@@ -128,6 +129,9 @@ public class ProcessingService extends Service {
        processIntent.putExtra(ProcessingService.PRESET,
                preset.getJsonString(context.getString(R.string.saved)));
        processIntent.putExtra(ProcessingService.SAVING, true);
        if (doFlatten) {
            processIntent.putExtra(ProcessingService.FLATTEN, true);
        }
        return processIntent;
    }

@@ -162,6 +166,7 @@ public class ProcessingService extends Service {
            String source = intent.getStringExtra(SOURCE_URI);
            String selected = intent.getStringExtra(SELECTED_URI);
            String destination = intent.getStringExtra(DESTINATION_FILE);
            boolean flatten = intent.getBooleanExtra(FLATTEN, false);
            Uri sourceUri = Uri.parse(source);
            Uri selectedUri = null;
            if (selected != null) {
@@ -175,7 +180,7 @@ public class ProcessingService extends Service {
            preset.readJsonFromString(presetJson);
            mNeedsAlive = false;
            mSaving = true;
            handleSaveRequest(sourceUri, selectedUri, destinationFile, preset);
            handleSaveRequest(sourceUri, selectedUri, destinationFile, preset, flatten);
        }
        return START_REDELIVER_INTENT;
    }
@@ -193,7 +198,7 @@ public class ProcessingService extends Service {
    }

    public void handleSaveRequest(Uri sourceUri, Uri selectedUri,
                                  File destinationFile, ImagePreset preset) {
                                  File destinationFile, ImagePreset preset, boolean flatten) {
        mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        mNotificationId++;
@@ -210,7 +215,7 @@ public class ProcessingService extends Service {

        // Process the image

        mImageSavingTask.saveImage(sourceUri, selectedUri, destinationFile, preset);
        mImageSavingTask.saveImage(sourceUri, selectedUri, destinationFile, preset, flatten);
    }

    public void updateNotificationWithBitmap(Bitmap bitmap) {
Loading